stellar-base 0.27.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/generated/stellar/operation_id.rb +1 -1
- data/generated/stellar/operation_id/id.rb +2 -2
- data/lib/stellar-base.rb +1 -0
- data/lib/stellar/account.rb +59 -0
- data/lib/stellar/compat.rb +6 -4
- data/lib/stellar/dsl.rb +19 -0
- data/lib/stellar/transaction_builder.rb +20 -7
- data/lib/stellar/util/strkey.rb +15 -7
- data/lib/stellar/version.rb +1 -1
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 747484cfbd2ecc3339c7f02db339afd3259cbfc438c752b88384437d92b7dd8e
|
4
|
+
data.tar.gz: 85490bd0247c71f517fdc1c66cabe961d4ce8c4b574d42b2f3cddeeb54b2e395
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6a0f7794d178e34799db7dad0c64ed37830896b30c7a53b204c055fb71289a535b5044d5340663ccfec96c33317f1754eed6a9ee7eba7aaa37da7431cfd26f2
|
7
|
+
data.tar.gz: 623a2e0bee087f04c3b512c63ccaefdc9d85f9cecc8bde008cdaed01d017577fbbb07910b621809913557d7fff5bb559928b3b341295c544d90a1fda4d584e16
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
7
|
As this project is pre 1.0, breaking changes may happen for minor version
|
8
8
|
bumps. A breaking change will get clearly notified in this log.
|
9
9
|
|
10
|
+
## [0.28.0](https://www.github.com/astroband/ruby-stellar-sdk/compare/v0.27.0...v0.28.0) (2021-07-17)
|
11
|
+
|
12
|
+
### Features
|
13
|
+
|
14
|
+
* support muxed accounts in tx builder ([#162](https://www.github.com/astroband/ruby-stellar-sdk/issues/162)) ([37cd954](https://www.github.com/astroband/ruby-stellar-sdk/commit/37cd954f92c7999a74ca779e795dde74a3d71aad))
|
15
|
+
|
10
16
|
## [0.27.0](https://github.com/astroband/ruby-stellar-sdk/compare/v0.26.0...v0.27.0) (2021-05-08)
|
11
17
|
|
12
18
|
### Features
|
@@ -7,7 +7,7 @@ require 'xdr'
|
|
7
7
|
#
|
8
8
|
# struct
|
9
9
|
# {
|
10
|
-
#
|
10
|
+
# AccountID sourceAccount;
|
11
11
|
# SequenceNumber seqNum;
|
12
12
|
# uint32 opNum;
|
13
13
|
# }
|
@@ -16,7 +16,7 @@ require 'xdr'
|
|
16
16
|
module Stellar
|
17
17
|
class OperationID
|
18
18
|
class Id < XDR::Struct
|
19
|
-
attribute :source_account,
|
19
|
+
attribute :source_account, AccountID
|
20
20
|
attribute :seq_num, SequenceNumber
|
21
21
|
attribute :op_num, Uint32
|
22
22
|
end
|
data/lib/stellar-base.rb
CHANGED
@@ -23,6 +23,7 @@ Stellar::Deprecation = ActiveSupport::Deprecation.new("next release", "stellar-b
|
|
23
23
|
|
24
24
|
# extensions onto the generated files must be loaded manually, below
|
25
25
|
|
26
|
+
require_relative "./stellar/account"
|
26
27
|
require_relative "./stellar/account_flags"
|
27
28
|
require_relative "./stellar/asset"
|
28
29
|
require_relative "./stellar/claim_predicate"
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Stellar
|
2
|
+
class Account
|
3
|
+
delegate :address, to: :keypair
|
4
|
+
|
5
|
+
def self.random
|
6
|
+
keypair = Stellar::KeyPair.random
|
7
|
+
new(keypair)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.from_seed(seed)
|
11
|
+
keypair = Stellar::KeyPair.from_seed(seed)
|
12
|
+
new(keypair)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.from_address(address)
|
16
|
+
muxed_xdr = Util::StrKey.decode_muxed_account(address)
|
17
|
+
|
18
|
+
if muxed_xdr.ed25519
|
19
|
+
new(KeyPair.from_public_key(muxed_xdr.ed25519))
|
20
|
+
else
|
21
|
+
muxed_xdr = muxed_xdr.med25519!
|
22
|
+
new(KeyPair.from_public_key(muxed_xdr.ed25519), muxed_xdr.id)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.master
|
27
|
+
keypair = Stellar::KeyPair.from_raw_seed("allmylifemyhearthasbeensearching")
|
28
|
+
new(keypair)
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_reader :keypair, :id
|
32
|
+
|
33
|
+
# @param [Stellar::KeyPair] keypair
|
34
|
+
# @param [Integer] id
|
35
|
+
def initialize(keypair, id = nil)
|
36
|
+
@keypair = keypair
|
37
|
+
@id = id
|
38
|
+
end
|
39
|
+
|
40
|
+
def base_account
|
41
|
+
Stellar::MuxedAccount.ed25519(keypair.raw_public_key)
|
42
|
+
end
|
43
|
+
|
44
|
+
def muxed_account
|
45
|
+
return base_account unless id
|
46
|
+
Stellar::MuxedAccount.med25519(ed25519: keypair.raw_public_key, id: id)
|
47
|
+
end
|
48
|
+
|
49
|
+
def address(force_account_id: true)
|
50
|
+
return keypair.address if force_account_id
|
51
|
+
|
52
|
+
Util::StrKey.check_encode(:muxed, keypair.raw_public_key + [id].pack("Q>"))
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_keypair
|
56
|
+
keypair
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/stellar/compat.rb
CHANGED
@@ -2,8 +2,10 @@ class << Stellar::Operation
|
|
2
2
|
alias_method :manage_offer, :manage_sell_offer
|
3
3
|
alias_method :create_passive_offer, :create_passive_sell_offer
|
4
4
|
|
5
|
-
deprecate
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
deprecate(
|
6
|
+
deprecator: Stellar::Deprecation,
|
7
|
+
manage_offer: :manage_sell_offer,
|
8
|
+
create_passive_offer: :create_passive_sell_offer,
|
9
|
+
allow_trust: :set_trust_line_flags
|
10
|
+
)
|
9
11
|
end
|
data/lib/stellar/dsl.rb
CHANGED
@@ -27,6 +27,25 @@ module Stellar
|
|
27
27
|
)
|
28
28
|
end
|
29
29
|
|
30
|
+
def Account(subject = nil)
|
31
|
+
case subject
|
32
|
+
when Account
|
33
|
+
subject
|
34
|
+
when /^M[A-Z0-9]{68}$/
|
35
|
+
Account.from_address(subject.to_str)
|
36
|
+
when nil
|
37
|
+
Account.random
|
38
|
+
else
|
39
|
+
begin
|
40
|
+
keypair = KeyPair(subject)
|
41
|
+
|
42
|
+
Account.new(keypair)
|
43
|
+
rescue TypeError
|
44
|
+
raise TypeError, "Cannot convert #{subject.inspect} to Stellar::Account"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
30
49
|
# @param [Asset, String, nil] subject
|
31
50
|
# @return [Stellar::Asset] instance of the Stellar::Asset
|
32
51
|
# @raise [TypeError] if subject cannot be converted to Stellar::Asset
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Stellar
|
2
2
|
class TransactionBuilder
|
3
|
+
include Stellar::DSL
|
4
|
+
|
3
5
|
attr_reader :source_account, :sequence_number, :base_fee, :time_bounds, :memo, :operations
|
4
6
|
|
5
7
|
class << self
|
@@ -29,21 +31,20 @@ module Stellar
|
|
29
31
|
base_fee: 100,
|
30
32
|
time_bounds: nil,
|
31
33
|
memo: nil,
|
34
|
+
enable_muxed_accounts: false,
|
32
35
|
**_ # ignore any additional parameters without errors
|
33
36
|
)
|
34
|
-
raise ArgumentError, "Bad :source_account" unless source_account.is_a?(Stellar::KeyPair)
|
35
37
|
raise ArgumentError, "Bad :sequence_number" unless sequence_number.is_a?(Integer) && sequence_number >= 0
|
36
38
|
raise ArgumentError, "Bad :time_bounds" unless time_bounds.is_a?(Stellar::TimeBounds) || time_bounds.nil?
|
37
39
|
raise ArgumentError, "Bad :base_fee" unless base_fee.is_a?(Integer) && base_fee >= 100
|
38
40
|
|
39
|
-
@source_account = source_account
|
41
|
+
@source_account = Account(source_account)
|
40
42
|
@sequence_number = sequence_number
|
41
43
|
@base_fee = base_fee
|
42
44
|
@time_bounds = time_bounds
|
45
|
+
@enable_muxed_accounts = enable_muxed_accounts
|
43
46
|
|
44
|
-
if time_bounds.nil?
|
45
|
-
set_timeout(0)
|
46
|
-
end
|
47
|
+
set_timeout(0) if time_bounds.nil?
|
47
48
|
|
48
49
|
@memo = make_memo(memo)
|
49
50
|
@operations = []
|
@@ -59,7 +60,7 @@ module Stellar
|
|
59
60
|
end
|
60
61
|
|
61
62
|
attrs = {
|
62
|
-
source_account:
|
63
|
+
source_account: source_muxed_account,
|
63
64
|
fee: @base_fee * @operations.length,
|
64
65
|
seq_num: @sequence_number,
|
65
66
|
time_bounds: @time_bounds,
|
@@ -90,7 +91,7 @@ module Stellar
|
|
90
91
|
end
|
91
92
|
|
92
93
|
Stellar::FeeBumpTransaction.new(
|
93
|
-
fee_source:
|
94
|
+
fee_source: source_muxed_account,
|
94
95
|
fee: @base_fee * (inner_ops.length + 1),
|
95
96
|
inner_tx: Stellar::FeeBumpTransaction::InnerTx.new(:envelope_type_tx, inner_txe.v1!),
|
96
97
|
ext: Stellar::FeeBumpTransaction::Ext.new(0)
|
@@ -162,5 +163,17 @@ module Stellar
|
|
162
163
|
raise ArgumentError, "Bad :memo"
|
163
164
|
end
|
164
165
|
end
|
166
|
+
|
167
|
+
def source_muxed_account
|
168
|
+
if with_muxed_accounts?
|
169
|
+
@source_account.muxed_account
|
170
|
+
else
|
171
|
+
@source_account.base_account
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def with_muxed_accounts?
|
176
|
+
@enable_muxed_accounts
|
177
|
+
end
|
165
178
|
end
|
166
179
|
end
|
data/lib/stellar/util/strkey.rb
CHANGED
@@ -8,7 +8,8 @@ module Stellar
|
|
8
8
|
account_id: [6 << 3].pack("C"), # Base32-encodes to 'G...'
|
9
9
|
seed: [18 << 3].pack("C"), # Base32-encodes to 'S...'
|
10
10
|
pre_auth_tx: [19 << 3].pack("C"), # Base32-encodes to 'T...'
|
11
|
-
hash_x: [23 << 3].pack("C") # Base32-encodes to 'X...'
|
11
|
+
hash_x: [23 << 3].pack("C"), # Base32-encodes to 'X...'
|
12
|
+
muxed: [12 << 3].pack("C") # Base32-encodes to 'M...'
|
12
13
|
}
|
13
14
|
|
14
15
|
def self.check_encode(version, byte_str)
|
@@ -25,13 +26,11 @@ module Stellar
|
|
25
26
|
# @param muxed_account [Stellar::MuxedAccount] account
|
26
27
|
# @return [String] "G.."-like address
|
27
28
|
def self.encode_muxed_account(muxed_account)
|
28
|
-
|
29
|
-
muxed_account.ed25519
|
29
|
+
if muxed_account.ed25519
|
30
|
+
check_encode(:account_id, muxed_account.ed25519)
|
30
31
|
else
|
31
|
-
muxed_account.med25519!.ed25519
|
32
|
+
check_encode(:muxed, muxed_account.med25519!.ed25519 + [muxed_account.med25519!.id].pack("Q>"))
|
32
33
|
end
|
33
|
-
|
34
|
-
check_encode(:account_id, ed25519)
|
35
34
|
end
|
36
35
|
|
37
36
|
# Returns a Stellar::MuxedAccount, forcing the ed25519 discriminant
|
@@ -39,7 +38,16 @@ module Stellar
|
|
39
38
|
# @param strkey [String] address string to decode
|
40
39
|
# @return [Stellar::MuxedAccount] MuxedAccount with ed25519 discriminant
|
41
40
|
def self.decode_muxed_account(strkey)
|
42
|
-
|
41
|
+
case strkey
|
42
|
+
when /^G[0-9A-Z]{55}$/
|
43
|
+
ed25519 = check_decode(:account_id, strkey)
|
44
|
+
Stellar::MuxedAccount.ed25519(ed25519)
|
45
|
+
when /^M[0-9A-Z]{68}$/
|
46
|
+
payload = check_decode(:muxed, strkey)
|
47
|
+
Stellar::MuxedAccount.med25519(ed25519: payload[0, 32], id: payload[32, 8].unpack1("Q>"))
|
48
|
+
else
|
49
|
+
raise "cannot decode MuxedAccount from #{strkey}"
|
50
|
+
end
|
43
51
|
end
|
44
52
|
|
45
53
|
def self.check_decode(expected_version, str)
|
data/lib/stellar/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stellar-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Fleckenstein
|
8
8
|
- Sergey Nebolsin
|
9
9
|
- Timur Ramazanov
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2021-
|
13
|
+
date: 2021-07-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -171,7 +171,7 @@ dependencies:
|
|
171
171
|
description: |
|
172
172
|
The stellar-base library is the lowest-level stellar helper library. It consists of classes to read, write,
|
173
173
|
hash, and sign the xdr structures that are used in stellar-core.
|
174
|
-
email:
|
174
|
+
email:
|
175
175
|
executables: []
|
176
176
|
extensions: []
|
177
177
|
extra_rdoc_files:
|
@@ -415,6 +415,7 @@ files:
|
|
415
415
|
- generated/stellar/trust_line_flags.rb
|
416
416
|
- generated/stellar/upgrade_entry_meta.rb
|
417
417
|
- lib/stellar-base.rb
|
418
|
+
- lib/stellar/account.rb
|
418
419
|
- lib/stellar/account_flags.rb
|
419
420
|
- lib/stellar/asset.rb
|
420
421
|
- lib/stellar/base.rb
|
@@ -447,12 +448,12 @@ licenses:
|
|
447
448
|
- Apache-2.0
|
448
449
|
metadata:
|
449
450
|
bug_tracker_uri: https://github.com/astroband/ruby-stellar-sdk/issues
|
450
|
-
changelog_uri: https://github.com/astroband/ruby-stellar-sdk/blob/v0.
|
451
|
-
documentation_uri: https://rubydoc.info/gems/stellar-base/0.
|
451
|
+
changelog_uri: https://github.com/astroband/ruby-stellar-sdk/blob/v0.28.0/base/CHANGELOG.md
|
452
|
+
documentation_uri: https://rubydoc.info/gems/stellar-base/0.28.0/
|
452
453
|
github_repo: ssh://github.com/astroband/ruby-stellar-sdk
|
453
454
|
homepage_uri: https://github.com/astroband/ruby-stellar-sdk/tree/main/base
|
454
|
-
source_code_uri: https://github.com/astroband/ruby-stellar-sdk/tree/v0.
|
455
|
-
post_install_message:
|
455
|
+
source_code_uri: https://github.com/astroband/ruby-stellar-sdk/tree/v0.28.0/base
|
456
|
+
post_install_message:
|
456
457
|
rdoc_options: []
|
457
458
|
require_paths:
|
458
459
|
- generated
|
@@ -468,8 +469,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
468
469
|
- !ruby/object:Gem::Version
|
469
470
|
version: '0'
|
470
471
|
requirements: []
|
471
|
-
rubygems_version: 3.2.
|
472
|
-
signing_key:
|
472
|
+
rubygems_version: 3.2.22
|
473
|
+
signing_key:
|
473
474
|
specification_version: 4
|
474
475
|
summary: 'Stellar client library: XDR'
|
475
476
|
test_files: []
|