stellar-base 0.24.0 → 0.25.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f32d18dcada46e11a1836cdeda94d852d89ac6de0c89472ef794d748e38bcc68
4
- data.tar.gz: d15156a33fc3b64ef70e78d83892ab70ec3e076611667572c3bda07aa4aaf2f6
3
+ metadata.gz: 06de7ab1f501228afa8b011a494da83f9a75c9723f2612868bb7e324ee309794
4
+ data.tar.gz: 9a0f29f6b55bf4e508dc54a3fb131b411799022c2bf87fd5246119e681efaf99
5
5
  SHA512:
6
- metadata.gz: b2ad9163443ed4391d9004f41b07ba61e59378c8d01505210f7a62dff8239a748e0bc137a07e7f37d80991f8fb580246377a30c7d2189fbd044c05d586ab48a7
7
- data.tar.gz: 9395e4eb5c837643a2046d681892c9bfc4ea5a43c3a4612729f61a63c3c4c962d1fbea598fef754c980a90d282a8d31a7435658c8e4053dad612b2a2efa37c5e
6
+ metadata.gz: fb09428b1c5c96b291a114132c989b9cd5aa602a2e67989748c014de1bc6179fad881449e5dcaeb956b3ae5dc2c259f740d9223d822e35da29831c6a62465c73
7
+ data.tar.gz: 5a31dee71d5d6dd1140eebc06f8ae353d6a63e7678e4be220e8f572b6d77268b77948303d62ec4d2b06dc2e3896e0eda0a41995436a82525fb481ace9ca16241
@@ -1,87 +1,97 @@
1
1
  # Changelog
2
2
 
3
3
  All notable changes to this project will be documented in this
4
- file. This project adheres to [Semantic Versioning](http://semver.org/).
4
+ file. The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
+ and this project adheres to [Semantic Versioning](http://semver.org/).
5
6
 
6
7
  As this project is pre 1.0, breaking changes may happen for minor version
7
8
  bumps. A breaking change will get clearly notified in this log.
8
9
 
9
- ## [Unreleased]
10
+ ## [Unreleased](https://github.com/stellar/ruby-stellar-sdk/compare/v0.25.0...master)
11
+
12
+ ## [0.25.0](https://github.com/stellar/ruby-stellar-sdk/compare/v0.24.0...v0.25.0) - 2020-10-30
13
+ ### Added
14
+ - `MuxedAccount` implements `#to_keypair` conversion protocol
15
+ - `MuxedAccount` correctly responds to `#address` with strkey encoded public key
16
+ ### Fixed
17
+ - `Transaction::V0#source_account` now properly returns `MuxedAccount` instead of raw bytes
18
+
19
+ ## [0.24.0](https://github.com/stellar/ruby-stellar-sdk/compare/v0.23.1...v0.24.0) - 2020-10-20
10
20
  ### Added
11
21
  - Add conversion methods for KeyPair and Asset
12
22
  - Stellar Protocol 14 support
13
23
  - Regenerate XDR wrappers from definitions in stellar-core 14.1.1
14
24
  - Add [CAP-23 Two-Part Payments](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0023.md) support
15
25
  - Add ClaimPredicate DSL methods which help with creation of claim predicates.
16
- ```
17
- # use class-level helpers to create simple predicates
26
+ ```ruby
27
+ # use class-level helpers to create simple predicates
18
28
  unconditional = Stellar::ClaimPredicate.unconditional
19
29
  before_rel_time = Stellar::ClaimPredicate.before_relative_time(1.hour)
20
30
  before_abs_time = Stellar::ClaimPredicate.before_absolute_time(Date.tomorrow.beginning_of_day)
21
-
31
+
22
32
  # negate predicates using `~` unary operator
23
33
  ~predicate # same as predicate.not
24
-
34
+
25
35
  # build complex predicates using `&` and `|` infix operators
26
36
  predicate & other_predicate # same as `predicate.and(other_predicate)`
27
37
  predicate | other_predicate # same as `predicate.or(other_predicate)`
28
-
29
- # quickly define complex predicates using `.compose` class method with the block
38
+
39
+ # quickly define complex predicates using `.compose` class method with the block
30
40
  unconditional = Stellar::ClaimPredicate.compose { }
31
- complex = Stellar::ClaimPredicate.compose do
32
- before_relative_time(1.week) & ~before_relative_time(10.seconds) |
41
+ complex = Stellar::ClaimPredicate.compose do
42
+ before_relative_time(1.week) & ~before_relative_time(10.seconds) |
33
43
  end
34
-
35
- # here's what building this predicate would look like without DSL
44
+
45
+ # here's what building this predicate would look like without DSL
36
46
  complex = Stellar::ClaimPredicate.new(
37
- Stellar::ClaimPredicateType::AND,
47
+ Stellar::ClaimPredicateType::AND,
38
48
  Stellar::ClaimPredicate.new(
39
49
  Stellar::ClaimPredicateType::BEFORE_RELATIVE_TIME, 7 * 24 * 60 * 60
40
- ),
50
+ ),
41
51
  Stellar::ClaimPredicate.new(
42
52
  Stellar::ClaimPredicateType::NOT, Stellar::ClaimPredicate.new(
43
53
  Stellar::ClaimPredicateType::BEFORE_RELATIVE_TIME, 10
44
54
  )
45
55
  )
46
56
  )
47
-
57
+
48
58
  ```
49
59
  - Extend Operation with `create_claimable_balance` and `claim_claimable_balance` helpers
50
60
  - Add Claimant and ClaimPredicate DSL methods to reduce the noise.
51
- ```
61
+ ```ruby
52
62
  include Stellar::DSL
53
-
63
+
54
64
  sender = KeyPair('S....')
55
65
  recipient = 'G....'
56
-
66
+
57
67
  op = Operation.create_claimable_balance(
58
68
  asset: Stellar::Asset.native,
59
69
  amount: 100,
60
70
  claimants: [
61
71
  Claimant(recipient) { after(10.seconds) & before(1.week) },
62
- Claimant(sender), # allow unconditional claim-back
72
+ Claimant(sender), # allow unconditional claim-back
63
73
  ]
64
74
  )
65
75
  ])
66
76
  ```
67
77
  - Add simple predicate evaluation feature so that developers can sanity-check their predicates
68
- ```
78
+ ```ruby
69
79
  include Stellar::DSL
70
-
80
+
71
81
  predicate = ClaimPredicate { before_relative_time(1.week) & ~before_relative_time(10.seconds) }
72
-
82
+
73
83
  # predicate.evaluate(balance_creation_time, claim_evaluation_time)
74
84
  predicate.evaluate("2020-10-20 09:00:00", "2020-10-20 09:00:05") # => false
75
85
  predicate.evaluate("2020-10-20 09:00:00", "2020-10-20 09:01:00") # => true
76
86
  predicate.evaluate("2020-10-20 09:00:00", "2020-10-27 08:50:00") # => true
77
-
87
+
78
88
  # you can also pass an instance of ActiveSupport::Duration as a second parameter, in this case
79
- # it works as a relative offset from `balance_creation_time`
89
+ # it works as a relative offset from `balance_creation_time`
80
90
  predicate.evaluate("2020-10-20 09:00:00", 1.week + 1.second) # => false
81
-
91
+
82
92
  # it is effectively the same as
83
- predicate.evaluate("2020-10-20 09:00:00", "2020-10-27 09:00:01") # => false
84
- ```
93
+ predicate.evaluate("2020-10-20 09:00:00", "2020-10-27 09:00:01") # => false
94
+ ```
85
95
  - Add [CAP-33 Sponsored Reserves](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0033.md) support
86
96
  - Extend the operation class with helpers that allow sponsoring reserves and also revoke sponsorships.
87
97
  - `Operation.begin_sponsoring_future_reserves`
@@ -92,20 +102,20 @@ bumps. A breaking change will get clearly notified in this log.
92
102
  - `Operation.revoke_sponsorship(account_id:, data_name:)`
93
103
  - `Operation.revoke_sponsorship(account_id:, balance_id:)`
94
104
  - `Operation.revoke_sponsorship(account_id:, signer:)`
95
-
96
105
 
97
- ## [0.23.1](https://github.com/stellar/ruby-stellar-sdk/compare/v0.23.1...v0.23.0) - 2020-06-18
106
+
107
+ ## [0.23.1](https://github.com/stellar/ruby-stellar-sdk/compare/v0.23.0...v0.23.1) - 2020-06-18
98
108
  ### Added
99
109
  - Transaction builder now builds V1 transactions
100
110
  - FeeBumpTransaction can wrap V0 transaction
101
-
102
- ## [0.23.0](https://github.com/stellar/ruby-stellar-sdk/compare/v0.23.0...v0.22.0) - 2020-06-11
111
+
112
+ ## [0.23.0](https://github.com/stellar/ruby-stellar-sdk/compare/v0.22.0...v0.23.0) - 2020-06-11
103
113
  ### Added
104
114
  - Stellar Protocol 13 support
105
115
  - Fee-Bump transactions ([CAP-0015](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0015.md))
106
116
  - Multiplexed accounts ([CAP-0027](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0027.md))
107
117
  - Fine-Grained control on trustline authorization ([CAP-0018](https://github.com/stellar/stellar-protocol/blob/master/core/cap-0018.md))
108
-
118
+
109
119
  ## [0.22.0](https://github.com/stellar/ruby-stellar-base/compare/v0.21.0...v0.22.0) - 2020-03-26
110
120
  ### Added
111
121
  - Add TransactionBuilder ([#54](https://github.com/stellar/ruby-stellar-base/issues/54))
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # Stellar::Base
2
-
3
- [![Build Status](https://travis-ci.org/stellar/ruby-stellar-base.svg)](https://travis-ci.org/stellar/ruby-stellar-base)
4
- [![Code Climate](https://codeclimate.com/github/stellar/ruby-stellar-base/badges/gpa.svg)](https://codeclimate.com/github/stellar/ruby-stellar-base)
1
+ # Stellar SDK for Ruby: XDR and Low Level Abstractions
2
+ [![stellar-base](https://badge.fury.io/rb/stellar-base.svg)](https://badge.fury.io/rb/stellar-base)
3
+ [![Test](https://github.com/astroband/ruby-stellar-sdk/workflows/Test/badge.svg)](https://github.com/astroband/ruby-stellar-sdk/actions?query=branch%3Amaster)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/dadfcd9396aba493cb93/maintainability)](https://codeclimate.com/github/astroband/ruby-stellar-sdk/maintainability)
5
5
 
6
6
  The stellar-base library is the lowest-level stellar helper library. It consists of classes
7
7
  to read, write, hash, and sign the xdr structures that are used in stellard.
@@ -5,6 +5,8 @@ require "active_support/core_ext/object/blank"
5
5
  require "active_support/core_ext/enumerable"
6
6
  require "active_support/core_ext/kernel/reporting"
7
7
  require "active_support/core_ext/module/attribute_accessors_per_thread"
8
+ require "active_support/core_ext/module/delegation"
9
+ require "active_support/deprecation"
8
10
 
9
11
  require_relative "stellar/ext/xdr"
10
12
 
@@ -18,6 +20,7 @@ require_relative "stellar/base/version"
18
20
  Stellar::VERSION = Stellar::Base::VERSION
19
21
 
20
22
  Stellar::ONE = 1_0000000
23
+ Stellar::Deprecation = ActiveSupport::Deprecation.new("next release", "stellar-base")
21
24
 
22
25
  # extensions onto the generated files must be loaded manually, below
23
26
 
@@ -6,14 +6,24 @@ module Stellar
6
6
  new(:asset_type_native)
7
7
  end
8
8
 
9
+ # @param code [String] asset code
10
+ # @param issuer [#to_keypair] asset issuer
11
+ #
12
+ # @return [Stellar::Asset::AlphaNum4] asset4 representation
9
13
  def self.alphanum4(code, issuer)
14
+ issuer = issuer.to_keypair if issuer.respond_to?(:to_keypair)
10
15
  raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
11
16
  code = normalize_code(code, 4)
12
17
  an = AlphaNum4.new({asset_code: code, issuer: issuer.account_id})
13
18
  new(:asset_type_credit_alphanum4, an)
14
19
  end
15
20
 
21
+ # @param code [String] asset code
22
+ # @param issuer [#to_keypair] asset issuer
23
+ #
24
+ # @return [Stellar::Asset::AlphaNum4] asset4 representation
16
25
  def self.alphanum12(code, issuer)
26
+ issuer = issuer.to_keypair if issuer.respond_to?(:to_keypair)
17
27
  raise ArgumentError, "Bad :issuer" unless issuer.is_a?(KeyPair)
18
28
  code = normalize_code(code, 12)
19
29
  an = AlphaNum12.new({asset_code: code, issuer: issuer.account_id})
@@ -1,5 +1,5 @@
1
1
  module Stellar
2
2
  module Base
3
- VERSION = "0.24.0"
3
+ VERSION = "0.25.0"
4
4
  end
5
5
  end
@@ -1,7 +1,3 @@
1
- require "active_support/deprecation"
2
-
3
- Stellar::Deprecation ||= ActiveSupport::Deprecation.new("next release", "stellar-base")
4
-
5
1
  class << Stellar::Operation
6
2
  alias_method :manage_offer, :manage_sell_offer
7
3
  alias_method :create_passive_offer, :create_passive_sell_offer
@@ -32,9 +32,8 @@ module Stellar::Concerns
32
32
  #
33
33
  # @return [Array<Operation>] the operations
34
34
  def to_operations
35
- # FIXME: what was the purpose of this?
36
- # cloned = Marshal.load Marshal.dump(operations)
37
- operations.each do |op|
35
+ cloned = Marshal.load Marshal.dump(operations)
36
+ cloned.each do |op|
38
37
  op.source_account ||= source_account
39
38
  end
40
39
  end
@@ -1,5 +1,7 @@
1
1
  module Stellar
2
2
  module DSL
3
+ module_function
4
+
3
5
  # Constructs a new ClaimPredicate using DSL
4
6
  #
5
7
  # @example fulfilled during [T+5min, T+60min] period, where T refers to claimable balance entry creation time
@@ -47,14 +49,16 @@ module Stellar
47
49
  case subject
48
50
  when ->(subj) { subj.respond_to?(:to_keypair) }
49
51
  subject.to_keypair
50
- when /G[A-Z0-9]{55}/
51
- KeyPair.from_address(subject)
52
- when /S[A-Z0-9]{55}/
53
- KeyPair.from_seed(subject)
54
52
  when PublicKey
55
53
  KeyPair.from_public_key(subject.value)
56
54
  when SignerKey
57
55
  KeyPair.from_raw_seed(subject.value)
56
+ when /^G[A-Z0-9]{55}$/
57
+ KeyPair.from_address(subject.to_str)
58
+ when /^S[A-Z0-9]{55}$/
59
+ KeyPair.from_seed(subject.to_str)
60
+ when /^.{32}$/
61
+ KeyPair.from_raw_seed(subject.to_str)
58
62
  when nil
59
63
  KeyPair.random
60
64
  else
@@ -81,5 +85,5 @@ module Stellar
81
85
  end
82
86
  end
83
87
 
84
- extend DSL
88
+ include DSL
85
89
  end
@@ -39,11 +39,12 @@ XDR::DSL::Union.redefine_method(:switch) do |switch, arm = nil|
39
39
  end
40
40
  end
41
41
 
42
- # XDR::Union generates an attribute method for each `arm`, but lacks the
43
- # actual `attribute(attr)` method those generated methods delegate to.
44
- # We follow the semantics of the bang variant `XDR::Union#attribute!` method,
45
- # except that calls to `raise` are replaced with early returns of nil.
46
- XDR::Union.define_method(:attribute) do |attr|
47
- return unless @arm.to_s == attr
48
- get
42
+ # XDR::Union delegates missing methods to the underlying value
43
+ XDR::Union.define_method(:method_missing) do |name, *args|
44
+ return super(name, *args) unless value&.respond_to?(name)
45
+ value&.public_send(name, *args)
46
+ end
47
+
48
+ XDR::Union.define_method(:respond_to_missing?) do |*args|
49
+ value&.respond_to?(*args)
49
50
  end
@@ -6,6 +6,11 @@ module Stellar
6
6
  from_raw_seed seed_bytes
7
7
  end
8
8
 
9
+ def from_address(address)
10
+ pk_bytes = Util::StrKey.check_decode(:account_id, address)
11
+ from_public_key(pk_bytes)
12
+ end
13
+
9
14
  def from_raw_seed(seed_bytes)
10
15
  secret_key = RbNaCl::SigningKey.new(seed_bytes)
11
16
  public_key = secret_key.verify_key
@@ -17,11 +22,6 @@ module Stellar
17
22
  new(public_key)
18
23
  end
19
24
 
20
- def from_address(address)
21
- pk_bytes = Util::StrKey.check_decode(:account_id, address)
22
- from_public_key(pk_bytes)
23
- end
24
-
25
25
  def random
26
26
  secret_key = RbNaCl::SigningKey.generate
27
27
  public_key = secret_key.verify_key
@@ -40,11 +40,21 @@ module Stellar
40
40
 
41
41
  extend FactoryMethods
42
42
 
43
+ # @param [RbNaCl::VerifyKey] public_key
44
+ # @param [RbNaCl::SigningKey, nil] secret_key
43
45
  def initialize(public_key, secret_key = nil)
44
46
  @public_key = public_key
45
47
  @secret_key = secret_key
46
48
  end
47
49
 
50
+ def address
51
+ Util::StrKey.check_encode(:account_id, raw_public_key)
52
+ end
53
+
54
+ def seed
55
+ Util::StrKey.check_encode(:seed, raw_seed)
56
+ end
57
+
48
58
  def account_id
49
59
  Stellar::AccountID.new :public_key_type_ed25519, raw_public_key
50
60
  end
@@ -61,16 +71,17 @@ module Stellar
61
71
  Stellar::SignerKey.new :signer_key_type_ed25519, raw_public_key
62
72
  end
63
73
 
64
- def raw_public_key
65
- @public_key.to_bytes
66
- end
67
-
68
74
  def signature_hint
69
75
  # take last 4 bytes
70
76
  account_id.to_xdr.slice(-4, 4)
71
77
  end
72
78
 
79
+ def raw_public_key
80
+ @public_key.to_bytes
81
+ end
82
+
73
83
  def raw_seed
84
+ raise "no private key" if @secret_key.nil?
74
85
  @secret_key.to_bytes
75
86
  end
76
87
 
@@ -82,25 +93,13 @@ module Stellar
82
93
  @public_key
83
94
  end
84
95
 
85
- def address
86
- pk_bytes = raw_public_key
87
- Util::StrKey.check_encode(:account_id, pk_bytes)
88
- end
89
-
90
- def seed
91
- raise "no private key" if @secret_key.nil?
92
- # TODO: improve the error class above
93
- seed_bytes = raw_seed
94
- Util::StrKey.check_encode(:seed, seed_bytes)
95
- end
96
-
97
96
  def sign?
98
97
  !@secret_key.nil?
99
98
  end
100
99
 
101
100
  def sign(message)
102
- raise "no private key" if @secret_key.nil?
103
- # TODO: improve the error class above
101
+ raise NotImplementedError, "no private key, signing is not available" unless sign?
102
+
104
103
  @secret_key.sign(message)
105
104
  end
106
105
 
@@ -4,6 +4,8 @@ require "stellar/dsl"
4
4
  module Stellar
5
5
  class LedgerKey
6
6
  class << self
7
+ include Stellar::DSL
8
+
7
9
  def switch_for_arm(name)
8
10
  (@switch_by_arm ||= switches.invert).fetch(name)
9
11
  end
@@ -12,7 +14,7 @@ module Stellar
12
14
  field, value = options.first
13
15
  case field
14
16
  when nil
15
- account(account_id: Stellar.KeyPair(account_id).account_id)
17
+ account(account_id: KeyPair(account_id).account_id)
16
18
  when :balance_id
17
19
  claimable_balance(balance_id: ClaimableBalanceID.v0(Stellar::Convert.from_hex(value.to_s)))
18
20
  when :offer_id
@@ -20,7 +22,7 @@ module Stellar
20
22
  when :data_name
21
23
  data(account_id: account_id, data_name: value.to_s)
22
24
  when :asset
23
- trust_line(account_id: account_id, asset: Stellar.Asset(value))
25
+ trust_line(account_id: account_id, asset: Asset(value))
24
26
  else
25
27
  raise ArgumentError, "unknown option #{field} (not in :asset, :offer_id, :data_name, :balance_id)"
26
28
  end
@@ -0,0 +1,16 @@
1
+ module Stellar
2
+ class MuxedAccount
3
+ def to_keypair
4
+ case arm
5
+ when :ed25519 then KeyPair.from_public_key(value)
6
+ when :med25519 then KeyPair.from_public_key(value.ed25519)
7
+ else
8
+ raise "impossible"
9
+ end
10
+ end
11
+
12
+ def address
13
+ to_keypair.address
14
+ end
15
+ end
16
+ end
@@ -5,6 +5,7 @@ module Stellar
5
5
  MAX_INT64 = 2**63 - 1
6
6
 
7
7
  class << self
8
+ include Stellar::DSL
8
9
  #
9
10
  # Construct a new Stellar::Operation from the provided
10
11
  # source account and body
@@ -233,7 +234,7 @@ module Stellar
233
234
 
234
235
  def begin_sponsoring_future_reserves(sponsored:, **attributes)
235
236
  op = BeginSponsoringFutureReservesOp.new(
236
- sponsored_id: Stellar.KeyPair(sponsored).account_id
237
+ sponsored_id: KeyPair(sponsored).account_id
237
238
  )
238
239
 
239
240
  make(attributes.merge(body: [:begin_sponsoring_future_reserves, op]))
@@ -247,10 +248,10 @@ module Stellar
247
248
  def revoke_sponsorship(sponsored:, **attributes)
248
249
  key_fields = attributes.slice(:offer_id, :data_name, :balance_id, :asset, :signer)
249
250
  raise ArgumentError, "conflicting attributes: #{key_fields.keys.join(", ")}" if key_fields.size > 1
250
- account_id = Stellar.KeyPair(sponsored).account_id
251
+ account_id = KeyPair(sponsored).account_id
251
252
  key, value = key_fields.first
252
253
  op = if key == :signer
253
- RevokeSponsorshipOp.signer(account_id: account_id, signer_key: Stellar.SignerKey(value))
254
+ RevokeSponsorshipOp.signer(account_id: account_id, signer_key: SignerKey(value))
254
255
  else
255
256
  RevokeSponsorshipOp.ledger_key(LedgerKey.from(account_id: account_id, **key_fields))
256
257
  end
@@ -29,7 +29,7 @@ module Stellar
29
29
  end
30
30
 
31
31
  def to_envelope(*key_pairs)
32
- signatures = (key_pairs || []).map(&method(:sign_decorated))
32
+ signatures = key_pairs.map(&method(:sign_decorated))
33
33
 
34
34
  TransactionEnvelope.v1(signatures: signatures, tx: self)
35
35
  end
@@ -1,13 +1,7 @@
1
1
  module Stellar
2
2
  class TransactionEnvelope
3
- # Delegates any undefined method to the currently set arm
4
- def method_missing(method, *args, &block)
5
- value&.public_send(method, *args) || super
6
- end
7
-
8
- def respond_to_missing?(method, include_private = false)
9
- %w[tx signatures].include?(method) || super
10
- end
3
+ delegate :tx, :signatures, to: :value
4
+ delegate :hash, to: :tx
11
5
 
12
6
  # Checks to ensure that every signature for the envelope is
13
7
  # a valid signature of one of the provided `key_pairs`
@@ -19,23 +13,19 @@ module Stellar
19
13
  #
20
14
  # @return [Boolean] true if all signatures are from the provided key_pairs and validly sign the tx's hash
21
15
  def signed_correctly?(*key_pairs)
22
- hash = tx.hash
23
16
  return false if signatures.empty?
24
17
 
25
- key_index = key_pairs.index_by(&:signature_hint)
18
+ tx_hash = tx.hash
19
+ keys_by_hint = key_pairs.index_by(&:signature_hint)
26
20
 
27
21
  signatures.all? do |sig|
28
- key_pair = key_index[sig.hint]
22
+ key_pair = keys_by_hint[sig.hint]
29
23
  break false if key_pair.nil?
30
24
 
31
- key_pair.verify(sig.signature, hash)
25
+ key_pair.verify(sig.signature, tx_hash)
32
26
  end
33
27
  end
34
28
 
35
- def hash
36
- Digest::SHA256.digest(to_xdr)
37
- end
38
-
39
29
  def merge(other)
40
30
  merged_tx = tx.merge(other.tx)
41
31
  merged_tx.signatures = [signatures, other.signatures]
@@ -3,15 +3,7 @@ module Stellar
3
3
  include Stellar::Concerns::Transaction
4
4
 
5
5
  def to_v1
6
- Transaction.new(
7
- source_account: Stellar::MuxedAccount.new(:key_type_ed25519, source_account),
8
- seq_num: seq_num,
9
- operations: operations,
10
- fee: fee,
11
- memo: memo,
12
- time_bounds: time_bounds,
13
- ext: ext
14
- )
6
+ Transaction.new(**attributes.except(:source_account_ed25519), source_account: source_account)
15
7
  end
16
8
 
17
9
  def to_envelope(*key_pairs)
@@ -45,7 +37,7 @@ module Stellar
45
37
  end
46
38
 
47
39
  def source_account
48
- source_account_ed25519
40
+ Stellar::MuxedAccount.ed25519(source_account_ed25519)
49
41
  end
50
42
  end
51
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stellar-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.0
4
+ version: 0.25.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Fleckenstein
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2020-10-20 00:00:00.000000000 Z
13
+ date: 2020-10-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -417,6 +417,7 @@ files:
417
417
  - lib/stellar/fee_bump_transaction.rb
418
418
  - lib/stellar/key_pair.rb
419
419
  - lib/stellar/ledger_key.rb
420
+ - lib/stellar/muxed_account.rb
420
421
  - lib/stellar/networks.rb
421
422
  - lib/stellar/operation.rb
422
423
  - lib/stellar/path_payment_strict_receive_result.rb
@@ -432,9 +433,10 @@ homepage: https://github.com/astroband/ruby-stellar-sdk/tree/master/base
432
433
  licenses:
433
434
  - Apache-2.0
434
435
  metadata:
435
- documentation_uri: https://rubydoc.info/gems/stellar-base/0.24.0/
436
- changelog_uri: https://github.com/astroband/ruby-stellar-sdk/blob/v0.24.0/base/CHANGELOG.md
437
- source_code_uri: https://github.com/astroband/ruby-stellar-sdk/tree/v0.24.0/base
436
+ github_repo: ssh://github.com/astroband/ruby-stellar-sdk
437
+ documentation_uri: https://rubydoc.info/gems/stellar-base/0.25.0/
438
+ changelog_uri: https://github.com/astroband/ruby-stellar-sdk/blob/v0.25.0/base/CHANGELOG.md
439
+ source_code_uri: https://github.com/astroband/ruby-stellar-sdk/tree/v0.25.0/base
438
440
  post_install_message:
439
441
  rdoc_options: []
440
442
  require_paths: