Transaction Reference
The tables below describe the fields used in Algorand transactions. Each table includes the field name, indicates if the field is required or optional, shows the type used in the protocol code, displays the codec name that appears in transactions, and provides a description of the field’s purpose. While the protocol types are shown in these tables, the input types may be different when using SDKs.
Common Fields (Header and Type)
Section titled “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
Section titled “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
Section titled “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. |
| 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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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
Section titled “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. |
| 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 | "apgs" | Holds the maximum number of global state values defined within a object. Set on a create, and may be set again on an UpdateApplication call to change the maximum number of global state entries. See Size Changes on Update. | |
| LocalStateSchema | optional | "apls" | Holds the maximum number of local state values defined within a object. May only be set on a create. | |
| 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. Set on a create, and may be set again on an UpdateApplication call to change the number of additional pages allocated. See Size Changes on Update. |
| Boxes | optional | []BoxRef | "apbx" | The boxes that should be made available for the runtime of the program. |
| RejectVersion | optional | uint64 | "aprv" | If the application being called has a version equal to or greater than the provided reject version, the transaction will be rejected. |
| AccessList | optional | []Resource | "al" | An array of resources that the application or group can use. Each resource will be one of two types; “simple” or “complex”. The Access List and existing Foreign Reference arrays (apat, apfa, apas, apbx) are mutually exclusive and cannot be used together on the same transaction. |
Size Changes on Update
Section titled “Size Changes on Update”An application call whose OnComplete is UpdateApplication may carry a non-zero ExtraProgramPages, GlobalStateSchema, or both, changing the extra program pages allocated to the application and the maximum number of global state entries it may store. On any other call to an existing application, both fields must be zero; at creation, they are how the initial allocations are set. LocalStateSchema may only be set at creation — a non-zero value on any later call fails with inappropriate non-zero tx.LocalStateSchema.
An update changes allocations only if ExtraProgramPages, GlobalStateSchema.nui, or GlobalStateSchema.nbs is non-zero. An update leaving all three at zero is not treated as a size change and leaves existing allocations untouched, so updates that omit these fields behave as they did before the fields were permitted.
On a size-changing update, both fields are applied absolutely rather than as adjustments, and a field left at zero is applied as zero. Setting GlobalStateSchema while omitting ExtraProgramPages drops the application to zero extra pages; setting ExtraProgramPages while omitting GlobalStateSchema empties the schema. Each field is replaced whole: an application holding nui: 2 that is updated with nbs: 1 alone ends up with nui: 0. A size-changing update must state the complete intended value of both fields.
Two checks constrain the values. The ApprovalProgram and ClearStateProgram carried by the transaction must fit within the page count the same transaction requests, failing otherwise with approval program too long, clear state program too long, or app programs too long. A GlobalStateSchema may not be smaller than the entries the application currently stores, failing otherwise with unable to change global schema, which wraps a count comparison such as store bytes count 2 exceeds schema bytes count 1. Reductions that satisfy both checks release the surplus pages and entries.
The sender of a size-changing update becomes the application’s size sponsor: the account whose minimum balance requirement (MBR) carries the application’s extra-page and global-schema costs — 100,000 microAlgos per extra page, plus 25,000 per schema entry and a further 3,500 per uint or 25,000 per byte slice. The creator’s MBR carries the flat 100,000 microAlgo per-application term regardless of who sponsors the size. A later size-changing update moves the sponsored costs from the previous sponsor’s MBR to the new sender’s in their entirety; the two accounts never each carry a share. When the sender of a size-changing update is the creator, the sponsor is recorded as the zero address and the creator’s MBR carries every term. algod reports the sponsor as the optional size-sponsor field of ApplicationParams, and a program reads it as the AppSizeSponsor field of app_params_get — in both cases zero or absent when the creator is the sponsor.
Storage State Schema
Section titled “Storage State Schema”Object Name: StateSchema
The StateSchema object is required on a create application call transaction, where it must be fully populated for both the GlobalStateSchema and LocalStateSchema fields. GlobalStateSchema may also be supplied on an UpdateApplication call; see Size Changes on Update.
| 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. In LocalStateSchema, immutable after the create. In GlobalStateSchema, may be changed by an UpdateApplication call. |
| Number ByteSlices | required | uint64 | "nbs" | Maximum number of byte slices values that may be stored in the [global || local] application key/value store. In LocalStateSchema, immutable after the create. In GlobalStateSchema, may be changed by an UpdateApplication call. |
Signed Transaction
Section titled “Signed Transaction”Transaction Object Type: SignedTxn
| Field | Required | Type | codec | Description |
|---|---|---|---|---|
| Sig | required, if no other sig specified | crypto.Signature | "sig" | |
| LogicSig | required, if no other sig specified | LogicSig | "lsig" | A logic signature object: a program plus, for delegation, the signature that authorized it. |
| Msig | required, if no other sig specified | crypto.MultisigSig | "msig" | |
| PQsig | required, if no other sig specified | PQSig | "pqsig" | Scheme-agnostic post-quantum signature envelope containing the scheme identifier (sch), address salt (slt), public key (pk), and signature (sig). Currently Falcon-1024. |
| Transaction | required | Transaction | "txn" | PaymentTx, KeyRegistrationTx, AssetConfigTx, AssetTransferTx, AssetFreezeTx or ApplicationCallTx |
Logic Signature
Section titled “Logic Signature”Object Name: LogicSig
Carried in the lsig field of a signed transaction. For a contract account, only the program is present and its hash is the account address. For delegation, exactly one of the signature fields below proves that the delegating account authorized the program.
| Field | Required | Type | codec | Description |
|---|---|---|---|---|
| Logic | required | []byte | "l" | The compiled program, evaluated to approve the transaction. |
| Sig | optional | crypto.Signature | "sig" | Ed25519 delegation signature over the program. |
| Msig | optional | crypto.MultisigSig | "msig" | Legacy multisig delegation signature. Rejected since consensus v41; use lmsig instead. |
| LMsig | optional | crypto.MultisigSig | "lmsig" | Multisig delegation signature that binds the authorizing address into the signed payload. Replaces msig as of consensus v41. |
| PQsig | optional | PQSig | "pqsig" | Post-quantum delegation signature envelope, also binding the authorizing address into the signed payload. |
| Args | optional | [][]byte | "arg" | Arguments made available to the program. Not covered by the delegation signature; the program must validate them. |
Heartbeat Transaction
Section titled “Heartbeat Transaction”Transaction Object Type: HeartbeatTx
Includes all fields in Header and "type" is "hbt".
| Field | Required | Type | codec | Description |
|---|---|---|---|---|
| HbAddress | required | Address | "hbad" | The account this transaction is proving onlineness for. |
| HbKeyDilution | required | uint64 | "hbkd" | Must match HbAddress account’s current KeyDilution. |
| HbProof | required | HbProofFields | "hbpf" | The heartbeat proof fields. |
| HbSeed | required | []byte | "hbsd" | Must be the block seed for this transaction’s firstValid block. |
| HbVoteID | required | []byte | "hbvid" | Must match the HbAddress account’s current VoteID. |