Skip to content

Create Publication

We are looking for publications that demonstrate building dApps or smart contracts!
See the full list of Gitcoin bounties that are eligible for rewards.

Transaction reference

Each table below specifies the field name, whether it is optional or required, its type within the protocol code (note that SDKs input types for these fields may differ), the codec, which is the name of the field when viewed within a transaction, and a description of the field.

Common Fields (Header and Type)

These fields are common to all transactions.

Field Required Type codec Description
Fee required uint64 "fee" Paid by the sender to the FeeSink to prevent denial-of-service. The minimum fee on Algorand is currently 1000 microAlgos.
FirstValid required uint64 "fv" The first round for when the transaction is valid. If the transaction is sent prior to this round it will be rejected by the network.
GenesisHash required [32]byte "gh" The hash of the genesis block of the network for which the transaction is valid. See the genesis hash for MainNet, TestNet, and BetaNet.
LastValid required uint64 "lv" The ending round for which the transaction is valid. After this round, the transaction will be rejected by the network.
Sender required Address "snd" The address of the account that pays the fee and amount.
TxType required string "type" Specifies the type of transaction. This value is automatically generated using any of the developer tools.
GenesisID optional string "gen" The human-readable string that identifies the network for the transaction. The genesis ID is found in the genesis block. See the genesis ID for MainNet, TestNet, and BetaNet.
Group optional [32]byte "grp" The group specifies that the transaction is part of a group and, if so, specifies the hash of the transaction group. Assign a group ID to a transaction through the workflow described in the Atomic Transfers Guide.
Lease optional [32]byte "lx" A lease enforces mutual exclusion of transactions. If this field is nonzero, then once the transaction is confirmed, it acquires the lease identified by the (Sender, Lease) pair of the transaction until the LastValid round passes. While this transaction possesses the lease, no other transaction specifying this lease can be confirmed. A lease is often used in the context of Algorand Smart Contracts to prevent replay attacks. Read more about Algorand Smart Contracts. Leases can also be used to safeguard against unintended duplicate spends. For example, if I send a transaction to the network and later realize my fee was too low, I could send another transaction with a higher fee, but the same lease value. This would ensure that only one of those transactions ends up getting confirmed during the validity period.
Note optional []byte "note" Any data up to 1000 bytes.
RekeyTo optional Address "rekey" Specifies the authorized address. This address will be used to authorize all future transactions. Learn more about Rekeying accounts.

Payment Transaction

Transaction Object Type: PaymentTx

Includes all fields in Header and "type" is "pay".

Field Required Type codec Description
Receiver required Address "rcv" The address of the account that receives the amount.
Amount required uint64 "amt" The total amount to be sent in microAlgos.
CloseRemainderTo optional Address "close" When set, it indicates that the transaction is requesting that the Sender account should be closed, and all remaining funds, after the fee and amount are paid, be transferred to this address.

Key Registration Transaction

Transaction Object Type: KeyRegistrationTx

Includes all fields in Header and "type" is "keyreg".

Field Required Type codec Description
VotePk required for online ed25519PublicKey "votekey" The root participation public key. See Generate a Participation Key to learn more.
SelectionPK required for online VrfPubkey "selkey" The VRF public key.
StateProofPk required for online MerkleSignature Verifier (64 bytes) "sprfkey" The 64 byte state proof public key commitment.
VoteFirst required for online uint64 "votefst" The first round that the participation key is valid. Not to be confused with the FirstValid round of the keyreg transaction.
VoteLast required for online uint64 "votelst" The last round that the participation key is valid. Not to be confused with the LastValid round of the keyreg transaction.
VoteKeyDilution required for online uint64 "votekd" This is the dilution for the 2-level participation key. It determines the interval (number of rounds) for generating new ephemeral keys.
Nonparticipation optional bool "nonpart" All new Algorand accounts are participating by default. This means that they earn rewards. Mark an account nonparticipating by setting this value to true and this account will no longer earn rewards. It is unlikely that you will ever need to do this and exists mainly for economic-related functions on the network.

Asset Configuration Transaction

Transaction Object Type: AssetConfigTx

Includes all fields in Header and "type" is "acfg".

This is used to create, configure and destroy an asset depending on which fields are set.

Field Required Type codec Description
ConfigAsset required, except on create uint64 "caid" For re-configure or destroy transactions, this is the unique asset ID. On asset creation, the ID is set to zero.
AssetParams required, except on destroy AssetParams "apar" See AssetParams table for all available fields.

Asset Parameters

Object Name: AssetParams

Field Required Type codec Description
Total required on creation uint64 "t" The total number of base units of the asset to create. This number cannot be changed.
Decimals required on creation uint32 "dc" The number of digits to use after the decimal point when displaying the asset. If 0, the asset is not divisible. If 1, the base unit of the asset is in tenths. If 2, the base unit of the asset is in hundredths, if 3, the base unit of the asset is in thousandths, and so on up to 19 decimal places
DefaultFrozen required on creation bool "df" True to freeze holdings for this asset by default.
UnitName optional string "un" The name of a unit of this asset. Supplied on creation. Max size is 8 bytes. Example: USDT
AssetName optional string "an" The name of the asset. Supplied on creation. Max size is 32 bytes. Example: Tether
URL optional string "au" Specifies a URL where more information about the asset can be retrieved. Max size is 96 bytes.
MetaDataHash optional []byte "am" This field is intended to be a 32-byte hash of some metadata that is relevant to your asset and/or asset holders. The format of this metadata is up to the application. This field can only be specified upon creation. An example might be the hash of some certificate that acknowledges the digitized asset as the official representation of a particular real-world asset.
ManagerAddr optional Address "m" The address of the account that can manage the configuration of the asset and destroy it.
ReserveAddr optional Address "r" The address of the account that holds the reserve (non-minted) units of the asset. This address has no specific authority in the protocol itself. It is used in the case where you want to signal to holders of your asset that the non-minted units of the asset reside in an account that is different from the default creator account (the sender).
FreezeAddr optional Address "f" The address of the account used to freeze holdings of this asset. If empty, freezing is not permitted.
ClawbackAddr optional Address "c" The address of the account that can clawback holdings of this asset. If empty, clawback is not permitted.

Asset Transfer Transaction

Transaction Object Type: AssetTransferTx

Includes all fields in Header and "type" is "axfer".

Field Required Type codec Description
XferAsset required uint64 "xaid" The unique ID of the asset to be transferred.
AssetAmount required uint64 "aamt" The amount of the asset to be transferred. A zero amount transferred to self allocates that asset in the account's Asset map.
AssetSender required Address "asnd" The sender of the transfer. The regular sender field should be used and this one set to the zero value for regular transfers between accounts. If this value is nonzero, it indicates a clawback transaction where the sender is the asset's clawback address and the asset sender is the address from which the funds will be withdrawn.
AssetReceiver required Address "arcv" The recipient of the asset transfer.
AssetCloseTo optional Address "aclose" Specify this field to remove the asset holding from the sender account and reduce the account's minimum balance (i.e. opt-out of the asset).

Asset OptIn Transaction

Transaction Object Type: AssetTransferTx

Includes all fields in Header and "type" is "axfer".

This is a special form of an Asset Transfer Transaction.

Field Required Type codec Description
XferAsset required uint64 "xaid" The unique ID of the asset to opt-in to.
Sender required Address "snd" The account which is allocating the asset to their account's Asset map.
AssetReceiver required Address "arcv" The account which is allocating the asset to their account's Asset map.

Asset Clawback Transaction

Transaction Object Type: AssetTransferTx

Includes all fields in Header and "type" is "axfer".

This is a special form of an Asset Transfer Transaction.

Field Required Type codec Description
Sender required Address "snd" The sender of this transaction must be the clawback account specified in the asset configuration.
XferAsset required uint64 "xaid" The unique ID of the asset to be transferred.
AssetAmount required uint64 "aamt" The amount of the asset to be transferred.
AssetSender required Address "asnd" The address from which the funds will be withdrawn.
AssetReceiver required Address "arcv" The recipient of the asset transfer.

Asset Freeze Transaction

Transaction Object Type: AssetFreezeTx

Includes all fields in Header and "type" is "afrz".

Field Required Type codec Description
FreezeAccount required Address "fadd" The address of the account whose asset is being frozen or unfrozen.
FreezeAsset required uint64 "faid" The asset ID being frozen or unfrozen.
AssetFrozen required bool "afrz" True to freeze the asset.

Application Call Transaction

Transaction Object Type: ApplicationCallTx

Includes all fields in Header and "type" is "appl".

Field Required Type codec Description
Application ID required uint64 "apid" ID of the application being configured or empty if creating.
OnComplete required uint64 "apan" Defines what additional actions occur with the transaction. See the OnComplete section of the TEAL spec for details.
Accounts optional []Address "apat" List of accounts in addition to the sender that may be accessed from the application's approval-program and clear-state-program.
Approval Program optional []byte "apap" Logic executed for every application transaction, except when on-completion is set to "clear". It can read and write global state for the application, as well as account-specific local state. Approval programs may reject the transaction.
App Arguments optional [][]byte "apaa" Transaction specific arguments accessed from the application's approval-program and clear-state-program.
Clear State Program optional []byte "apsu" Logic executed for application transactions with on-completion set to "clear". It can read and write global state for the application, as well as account-specific local state. Clear state programs cannot reject the transaction.
Foreign Apps optional []uint64 "apfa" Lists the applications in addition to the application-id whose global states may be accessed by this application's approval-program and clear-state-program. The access is read-only.
Foreign Assets optional []uint64 "apas" Lists the assets whose AssetParams may be accessed by this application's approval-program and clear-state-program. The access is read-only.
GlobalStateSchema optional StateSchema "apgs" Holds the maximum number of global state values defined within a StateSchema object.
LocalStateSchema optional StateSchema "apls" Holds the maximum number of local state values defined within a StateSchema object.
ExtraProgramPages optional uint64 "apep" Number of additional pages allocated to the application's approval and clear state programs. Each ExtraProgramPages is 2048 bytes. The sum of ApprovalProgram and ClearStateProgram may not exceed 2048*(1+ExtraProgramPages) bytes.
Boxes optional []BoxRef "apbx" The boxes that should be made available for the runtime of the program.

Storage State Schema

Object Name: StateSchema

The StateSchema object is only required for the create application call transaction. The StateSchema object must be fully populated for both the GlobalStateSchema and LocalStateSchema objects.

Field Required Type codec Description
Number Ints required uint64 "nui" Maximum number of integer values that may be stored in the [global || local] application key/value store. Immutable.
Number ByteSlices required uint64 "nbs" Maximum number of byte slices values that may be stored in the [global || local] application key/value store. Immutable.

Signed Transaction

Transaction Object Type: SignedTxn

Field Required Type codec Description
Sig required, if no other sig specified crypto.Signature "sig"
Msig required, if no other sig specified crypto.MultisigSig "msig"
LogicSig required, if no other sig specified LogicSig "lsig"
Transaction required Transaction "txn" PaymentTx, KeyRegistrationTx, AssetConfigTx, AssetTransferTx, AssetFreezeTx or ApplicationCallTx