lib/stellar/transaction_envelope.rb in stellar-base-0.24.0 vs lib/stellar/transaction_envelope.rb in stellar-base-0.25.0
- old
+ new
@@ -1,40 +1,30 @@
module Stellar
class TransactionEnvelope
- # Delegates any undefined method to the currently set arm
- def method_missing(method, *args, &block)
- value&.public_send(method, *args) || super
- end
+ delegate :tx, :signatures, to: :value
+ delegate :hash, to: :tx
- def respond_to_missing?(method, include_private = false)
- %w[tx signatures].include?(method) || super
- end
-
# Checks to ensure that every signature for the envelope is
# a valid signature of one of the provided `key_pairs`
#
# NOTE: this does not do any authorization checks, which requires access to
# the current ledger state.
#
# @param key_pairs [Array<Stellar::KeyPair>] The key pairs to check the envelopes signatures against
#
# @return [Boolean] true if all signatures are from the provided key_pairs and validly sign the tx's hash
def signed_correctly?(*key_pairs)
- hash = tx.hash
return false if signatures.empty?
- key_index = key_pairs.index_by(&:signature_hint)
+ tx_hash = tx.hash
+ keys_by_hint = key_pairs.index_by(&:signature_hint)
signatures.all? do |sig|
- key_pair = key_index[sig.hint]
+ key_pair = keys_by_hint[sig.hint]
break false if key_pair.nil?
- key_pair.verify(sig.signature, hash)
+ key_pair.verify(sig.signature, tx_hash)
end
- end
-
- def hash
- Digest::SHA256.digest(to_xdr)
end
def merge(other)
merged_tx = tx.merge(other.tx)
merged_tx.signatures = [signatures, other.signatures]