class FlowClient::Transaction
A Transaction
is a full transaction object containing a payload and signatures.
Constants
- TRANSACTION_DOMAIN_TAG
Attributes
address_aliases[RW]
arguments[RW]
envelope_signatures[R]
gas_limit[RW]
payer_address[RW]
payload_signatures[R]
proposer_address[RW]
proposer_key_index[RW]
proposer_key_sequence_number[RW]
reference_block_id[RW]
script[RW]
Public Class Methods
new()
click to toggle source
# File lib/flow_client/transaction.rb, line 25 def initialize @authorizer_addresses = [] @arguments = [] @script = "" @gas_limit = 0 @envelope_signatures = [] @payload_signatures = [] @proposer_key_index = 0 @proposer_key_sequence_number = 0 @address_aliases = {} end
padded_transaction_domain_tag()
click to toggle source
# File lib/flow_client/transaction.rb, line 37 def self.padded_transaction_domain_tag Utils.right_pad_bytes(TRANSACTION_DOMAIN_TAG.bytes, 32).pack("c*") end
Public Instance Methods
add_envelope_signature(signer_address, key_index, key)
click to toggle source
# File lib/flow_client/transaction.rb, line 104 def add_envelope_signature(signer_address, key_index, key) domain_tagged_payload = (Transaction.padded_transaction_domain_tag.bytes + envelope_message.bytes).pack("C*") @envelope_signatures << Entities::Transaction::Signature.new( address: padded_address(signer_address), key_id: key_index, signature: FlowClient::Crypto.sign(domain_tagged_payload, key) ) end
envelope_canonical_form()
click to toggle source
# File lib/flow_client/transaction.rb, line 76 def envelope_canonical_form # puts "1 !!!!!!!!!!!!!!!!!!!!!!!!!" # puts payload_canonical_form.inspect # puts "2 !!!!!!!!!!!!!!!!!!!!!!!!!" # puts %w[248 117 248 114 176 116 114 97 110 115 97 99 116 105 111 110 32 123 32 101 120 101 99 117 116 101 32 123 32 108 111 103 40 34 72 101 108 108 111 44 32 87 111 114 108 100 33 34 41 32 125 32 125 192 160 72 121 153 246 93 184 142 181 159 21 71 108 105 182 234 79 105 166 51 159 166 79 128 92 248 80 65 251 159 240 90 36 100 136 243 252 210 193 167 143 94 238 128 128 136 243 252 210 193 167 143 94 238 201 136 243 252 210 193 167 143 94 238 192].map(&:to_i).pack("c*").inspect # puts "3 !!!!!!!!!!!!!!!!!!!!!!!!!" [ payload_canonical_form, [] ] end
envelope_message()
click to toggle source
# File lib/flow_client/transaction.rb, line 88 def envelope_message # example = %w[248 117 248 114 176 116 114 97 110 115 97 99 116 105 111 110 32 123 32 101 120 101 99 117 116 101 32 123 32 108 111 103 40 34 72 101 108 108 111 44 32 87 111 114 108 100 33 34 41 32 125 32 125 192 160 191 126 254 24 34 116 225 100 48 61 146 58 249 107 64 242 242 137 30 200 85 212 68 73 165 214 72 89 185 86 47 53 100 136 4 90 23 99 201 48 6 202 128 128 136 4 90 23 99 201 48 6 202 201 136 4 90 23 99 201 48 6 202 192].map(&:to_i).pack("c*") # decoded_example = RLP.decode(example) # puts "----------" # puts decoded_example.inspect # puts RLP.decode(RLP.encode(envelope_canonical_form)).inspect # puts "----------" # puts "**********" # puts "RLP ENCODED ENVELOPE MESSAGE" # puts "----------------" # puts RLP.encode(envelope_canonical_form).bytes.inspect # puts "**********" RLP.encode(envelope_canonical_form) end
payload_canonical_form()
click to toggle source
# File lib/flow_client/transaction.rb, line 41 def payload_canonical_form [ resolved_script, @arguments, [@reference_block_id].pack("H*"), @gas_limit, padded_address(@proposer_address), @proposer_key_index, @proposer_key_sequence_number, padded_address(@payer_address), @authorizer_addresses.map { |address| padded_address(address) } ] end
payload_message()
click to toggle source
# File lib/flow_client/transaction.rb, line 55 def payload_message payload = payload_canonical_form # example = %w[248 114 176 116 114 97 110 115 97 99 116 105 111 110 32 123 32 101 120 101 99 117 116 101 32 123 32 108 111 103 40 34 72 101 108 108 111 44 32 87 111 114 108 100 33 34 41 32 125 32 125 192 160 72 121 153 246 93 184 142 181 159 21 71 108 105 182 234 79 105 166 51 159 166 79 128 92 248 80 65 251 159 240 90 36 100 136 243 252 210 193 167 143 94 238 128 128 136 243 252 210 193 167 143 94 238 201 136 243 252 210 193 167 143 94 238].map(&:to_i).pack("c*") # decoded_example = RLP.decode(example) # puts "----------" # puts decoded_example.inspect # puts "----------" # puts RLP.decode(RLP.encode(payload)).inspect # # puts Utils.left_pad_bytes(ref_block_id.bytes, 32).pack('i*').inspect # puts RLP.decode(RLP.encode(payload)).inspect # ref_block_id = "da8d80c775d75c86064aa0e35a418d02c83cbc198f26d906a4441a90069b63b6" # puts [ref_block_id].pack("H*").unpack("C*") # puts ["192440c99cb17282"].pack("H*").unpack("C*") # # puts RLP.encode(payload).inspect # puts RLP.encode(payload).bytes.inspect RLP.encode(payload) end
to_protobuf_message()
click to toggle source
# File lib/flow_client/transaction.rb, line 114 def to_protobuf_message payload = payload_canonical_form # puts envelope_signature.inspect # puts %w[201 159 186 250 20 195 169 176 16 128 200 154 50 249 239 220 221 149 255 210 230 181 237 96 56 158 51 241 110 139 34 201 93 88 248 235 55 206 229 231 39 47 106 31 54 122 59 252 171 165 245 9 112 33 175 6 70 180 157 77 148 130 69 225].map(&:to_i).pack("c*").inspect proposal_key = Entities::Transaction::ProposalKey.new( address: payload[4], key_id: payload[5], sequence_number: payload[6] ) Entities::Transaction.new( script: payload[0], arguments: payload[1], reference_block_id: payload[2], gas_limit: payload[3], proposal_key: proposal_key, payer: payload[7], authorizers: payload[8], payload_signatures: [], envelope_signatures: @envelope_signatures ) end
Protected Instance Methods
padded_address(address_hex_string)
click to toggle source
# File lib/flow_client/transaction.rb, line 144 def padded_address(address_hex_string) Utils.left_pad_bytes([address_hex_string].pack("H*").bytes, 8).pack("C*") end
resolved_script()
click to toggle source
# File lib/flow_client/transaction.rb, line 140 def resolved_script FlowClient::Utils.substitute_address_aliases(@script, @address_aliases) end