Transactions
A Transaction (formally, T) is a cryptographically unmodifiable instruction to change the world state (σ ), constructed by an external actor. A Transaction could instruct validators to move balance from the sender’s account to a recipient’s account, update the state of a smart contract, write changes to the AAN, or more. In the AGTP, all valid transactions are accepted into the ledger regardless of the success of the execution of that Transaction. A Transaction is considered
valid if it is formatted correctly, and a Transaction is considered successful if its execution resulted in an update to the world state (σ ).
Pulling apart the acceptance and execution of Transactions has two main benefits: (1) increased throughput for transactions that alter the asymmetric information stored in the AAN thanks to the distribution of work amongst Farmers, and (2) Transactions that are accepted but not successful can still be used to manage the bandwidth consumed by the sending account. Transactions have varying properties based on their type:
Type: A single byte that determines the function of the transaction. Required for all transactions
From: The 160-bit address of the transaction’s sender. Cannot be the same as the to Address. Required in all transaction types
To : The 160-bit address of the transaction’s recipient. Required for TokenTransfer and Execute transaction types
Value: A scalar value equal to the total amount of Divvitos to be transferred from the balance of the from address to the to address. Required for TokenTransfer, Deploy, and Execute transaction types; formally Tv
Time: A RFC3339 standard time signature for the transaction. The transaction’s time
determines its order in the ledger. Required for all transaction types; formally Tts
Code: The IVM bytecode that is executed each time a subsequent Execute transaction is called with a To value that equals the Hash of this Transaction. Required only for Deploy transactions; formally Tc
Abi: The Application Binary Interface for the smart contract being deployed. When applied to the IVM bytecode, the ABI defines the methods available to interact with the smart contract and their required parameters. Required only for Deploy transactions; formally Ta
Method: An unlimited size byte array that maps to a method defined in the ABI (T quired for Execution and Election transactions; formally Tm
Params: An unlimited size byte array that maps to the parameters of Method (Tm) as defined in the ABI (Ta). Required for Execution and Election transactions; formally Tp
Hash: The 256-bit keccak-256 hash of the concatenation of the Type, From, To, Value, Code, Abi, Method , Params, and Time fields in that order. The hash is used as the unique identifier for all transactions. In Deploy transaction types, the hash is also used as the address of the deployed smart contract. Required for all transactions; formally Th
Signature: The signature is a 65 byte array in [R S V] format of the transaction hash (Th) where V is 0 or 1. R, S, and V are the values used in the secp256k1 ECDSA signature algorithm used to recover the from address and prove that the transaction was created by the owner of the associated private key. Required for all transaction types; formally Ts
Last updated