Class: FlowClient::Transaction
- Inherits:
-
Object
- Object
- FlowClient::Transaction
- Defined in:
- lib/flow_client/transaction.rb
Overview
A Transaction is a full transaction object containing a payload and signatures.
Constant Summary collapse
- TRANSACTION_DOMAIN_TAG =
"FLOW-V0.0-transaction"
Instance Attribute Summary collapse
-
#address_aliases ⇒ Object
Returns the value of attribute address_aliases.
-
#arguments ⇒ Object
Returns the value of attribute arguments.
-
#authorizer_addresses ⇒ Object
Returns the value of attribute authorizer_addresses.
-
#envelope_signatures ⇒ Object
Returns the value of attribute envelope_signatures.
-
#gas_limit ⇒ Object
Returns the value of attribute gas_limit.
-
#payer_address ⇒ Object
Returns the value of attribute payer_address.
-
#payload_signatures ⇒ Object
Returns the value of attribute payload_signatures.
-
#proposal_key ⇒ Object
Returns the value of attribute proposal_key.
-
#reference_block_id ⇒ Object
Returns the value of attribute reference_block_id.
-
#script ⇒ Object
Returns the value of attribute script.
Class Method Summary collapse
Instance Method Summary collapse
- #add_envelope_signature(signer_address, key_index, signer) ⇒ Object
- #add_payload_signature(signer_address, key_index, signer) ⇒ Object
-
#initialize ⇒ Transaction
constructor
A new instance of Transaction.
- #proposer_address=(address) ⇒ Object
- #proposer_key_index=(index) ⇒ Object
- #proposer_key_sequence_number=(sequence_number) ⇒ Object
- #to_protobuf_message ⇒ Object
Constructor Details
#initialize ⇒ Transaction
Returns a new instance of Transaction.
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/flow_client/transaction.rb', line 23 def initialize @authorizer_addresses = [] @arguments = [] @script = "" @gas_limit = 999 @envelope_signatures = [] @payload_signatures = [] @address_aliases = {} @signers = {} @proposal_key = ProposalKey.new end |
Instance Attribute Details
#address_aliases ⇒ Object
Returns the value of attribute address_aliases.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def address_aliases @address_aliases end |
#arguments ⇒ Object
Returns the value of attribute arguments.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def arguments @arguments end |
#authorizer_addresses ⇒ Object
Returns the value of attribute authorizer_addresses.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def @authorizer_addresses end |
#envelope_signatures ⇒ Object
Returns the value of attribute envelope_signatures.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def envelope_signatures @envelope_signatures end |
#gas_limit ⇒ Object
Returns the value of attribute gas_limit.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def gas_limit @gas_limit end |
#payer_address ⇒ Object
Returns the value of attribute payer_address.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def payer_address @payer_address end |
#payload_signatures ⇒ Object
Returns the value of attribute payload_signatures.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def payload_signatures @payload_signatures end |
#proposal_key ⇒ Object
Returns the value of attribute proposal_key.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def proposal_key @proposal_key end |
#reference_block_id ⇒ Object
Returns the value of attribute reference_block_id.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def reference_block_id @reference_block_id end |
#script ⇒ Object
Returns the value of attribute script.
12 13 14 |
# File 'lib/flow_client/transaction.rb', line 12 def script @script end |
Class Method Details
.padded_transaction_domain_tag ⇒ Object
54 55 56 |
# File 'lib/flow_client/transaction.rb', line 54 def self.padded_transaction_domain_tag Utils.right_pad_bytes(TRANSACTION_DOMAIN_TAG.bytes, 32).pack("c*") end |
.parse_grpc_type(type) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/flow_client/transaction.rb', line 93 def self.parse_grpc_type(type) tx = Transaction.new tx.script = type.script tx.arguments = type.arguments tx.reference_block_id = type.reference_block_id.unpack1("H*") tx.gas_limit = type.gas_limit tx. = type..map { |address| address.unpack1("H*") } tx.envelope_signatures = type.envelope_signatures.map { |sig| Signature.parse_grpc_type(sig) } tx.payload_signatures = type.payload_signatures.map { |sig| Signature.parse_grpc_type(sig) } tx.proposal_key = ProposalKey.parse_grpc_type(type.proposal_key) tx.payer_address = type.payer.unpack1("H*") tx end |
Instance Method Details
#add_envelope_signature(signer_address, key_index, signer) ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/flow_client/transaction.rb', line 58 def add_envelope_signature(signer_address, key_index, signer) domain_tagged_envelope = (Transaction.padded_transaction_domain_tag.bytes + .bytes).pack("C*") @envelope_signatures << Entities::Transaction::Signature.new( address: padded_address(signer_address), key_id: key_index, signature: signer.sign(domain_tagged_envelope) ) end |
#add_payload_signature(signer_address, key_index, signer) ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/flow_client/transaction.rb', line 68 def add_payload_signature(signer_address, key_index, signer) domain_tagged_payload = (Transaction.padded_transaction_domain_tag.bytes + .bytes).pack("C*") @payload_signatures << Entities::Transaction::Signature.new( address: padded_address(signer_address), key_id: key_index, signature: signer.sign(domain_tagged_payload) ) end |
#proposer_address=(address) ⇒ Object
42 43 44 |
# File 'lib/flow_client/transaction.rb', line 42 def proposer_address=(address) @proposal_key.address = address end |
#proposer_key_index=(index) ⇒ Object
46 47 48 |
# File 'lib/flow_client/transaction.rb', line 46 def proposer_key_index=(index) @proposal_key.key_id = index end |
#proposer_key_sequence_number=(sequence_number) ⇒ Object
50 51 52 |
# File 'lib/flow_client/transaction.rb', line 50 def proposer_key_sequence_number=(sequence_number) @proposal_key.sequence_number = sequence_number end |
#to_protobuf_message ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/flow_client/transaction.rb', line 78 def payload = payload_canonical_form 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: @payload_signatures, envelope_signatures: @envelope_signatures) end |