stellar-base 0.27.0 → 0.28.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|