TEAL Fields

February 13, 2023 ยท View on GitHub

TEAL fields refer to names of TEAL opcode immediate arguments. Unlike TEAL constants, TEAL fields cannot appear as arguments to the int psuedo-op; rather, they can only appear as arguments to their corresponding opcode.

module TEAL-FIELDS
  import TEAL-TYPES-SYNTAX

global Fields

  syntax GlobalField ::= "MinTxnFee"
                       | "MinBalance"
                       | "MaxTxnLife"
                       | "ZeroAddress"
                       | "GroupSize"
                       | "LogicSigVersion"
                       | "Round"
                       | "LatestTimestamp"
                       | "CurrentApplicationID"
                       | "CreatorAddress"
                       | "CurrentApplicationAddress"
                       | "OpcodeBudget"
                       | "CreatorAddress"

Asset Fields

asset_holding_get Fields

  syntax AssetHoldingField ::= "AssetBalance"
                             | "AssetFrozen"

asset_params_get Fields

  syntax AssetParamsField ::= "AssetTotal" [klabel(AssetTotal), symbol]
                            | "AssetDecimals" [klabel(AssetDecimals), symbol]
                            | "AssetDefaultFrozen" [klabel(AssetDefaultFrozen), symbol]
                            | "AssetUnitName" [klabel(AssetUnitName), symbol]
                            | "AssetName" [klabel(AssetName), symbol]
                            | "AssetURL" [klabel(AssetURL), symbol]
                            | "AssetMetadataHash" [klabel(AssetMetadataHash), symbol]
                            | "AssetManager" [klabel(AssetManager), symbol]
                            | "AssetReserve" [klabel(AssetReserve), symbol]
                            | "AssetFreeze" [klabel(AssetFreeze), symbol]
                            | "AssetClawback" [klabel(AssetClawback), symbol]
                            | "AssetCreator" [klabel(AssetCreator), symbol]

app_params_get Fields

  syntax AppParamsField ::= "AppApprovalProgram" [klabel(AppApprovalProgram), symbol]
                          | "AppClearStateProgram" [klabel(AppClearStateProgram), symbol]
                          | "AppGlobalNumUint" [klabel(AppGlobalNumUint), symbol]
                          | "AppGlobalNumByteSlice" [klabel(AppGlobalNumByteSlice), symbol]
                          | "AppLocalNumUint" [klabel(AppLocalNumUint), symbol]
                          | "AppLocalNumByteSlice" [klabel(AppLocalNumByteSlice), symbol]
                          | "AppExtraProgramPages" [klabel(AppExtraProgramPages), symbol]
                          | "AppCreator" [klabel(AppCreator), symbol]
                          | "AppAddress" [klabel(AppAddress), symbol]

Transaction Fields

txn/gtxn fields

// Needed because itxn_field accepts both singular and array fields as arguments
  syntax TxnFieldTop ::= TxnField
                       | TxnaField

  syntax TxnField ::= TxnStaticField
                    | TxnDynamicField

  syntax TxnStaticField ::= TxnHeaderField
                    | TxnPayField
                    | TxnKeyregField
                    | TxnAcfgField
                    | TxnAxferField
                    | TxnAfrzField
                    | TxnApplField

  syntax TxnHeaderField ::= "TxID"
                          | "Sender"
                          | "Fee"
                          | "FirstValid"
                          | "FirstValidTime"
                          | "LastValid"
                          | "Note"
                          | "Lease"
                          | "RekeyTo"
                          | "Type"
                          | "TypeEnum"
                          | "GroupIndex"
                          | "StateProofPK"

  // Dynamic fields can only be accessed after the transaction has finished, by subsequent transactions in the
  // group.
  syntax TxnDynamicField ::= "LastLog"
                           | "NumLogs"
                           | "CreatedApplicationID"
                           | "CreatedAssetID"

  syntax TxnPayField    ::= "Receiver"
                          | "Amount"
                          | "CloseRemainderTo"

  syntax TxnKeyregField ::= "VotePK"
                          | "SelectionPK"
                          | "VoteFirst"
                          | "VoteLast"
                          | "VoteKeyDilution"
                          | "Nonparticipation"

  syntax TxnAcfgField   ::= "ConfigAsset"
                          | "ConfigAssetTotal"
                          | "ConfigAssetDecimals"
                          | "ConfigAssetDefaultFrozen"
                          | "ConfigAssetUnitName"
                          | "ConfigAssetName"
                          | "ConfigAssetURL"
                          | "ConfigAssetMetaDataHash"
                          | "ConfigAssetManager"
                          | "ConfigAssetReserve"
                          | "ConfigAssetFreeze"
                          | "ConfigAssetClawback"

  syntax TxnAxferField  ::= "XferAsset"
                          | "AssetAmount"
                          | "AssetSender"
                          | "AssetReceiver"
                          | "AssetCloseTo"

  syntax TxnAfrzField   ::= "FreezeAsset"
                          | "FreezeAssetAccount"
                          | "FreezeAssetFrozen"

  syntax TxnApplField   ::= "ApplicationID"
                          | "OnCompletion"
                          | "NumAppArgs"
                          | "NumAccounts"
                          | "NumAssets"
                          | "NumApplications"
                          | "ApprovalProgram"
                          | "ClearStateProgram"
                          | "ExtraProgramPages"
                          | "NumApprovalProgramPages"
                          | "NumClearStateProgramPages"
                          | "LocalNumByteSlice"
                          | "LocalNumUint"
                          | "GlobalNumByteSlice"
                          | "GlobalNumUint"

txna/gtxna fields

  syntax TxnaField ::= TxnaStaticField 
                     | TxnaDynamicField

  syntax TxnaStaticField ::= "ApplicationArgs"
                           | "Accounts"
                           | "Applications"
                           | "Assets"

  syntax TxnaDynamicField ::= "Logs"

acct_params fields

  syntax AccountParamsField ::= "AcctBalance"
                              | "AcctMinBalance"
                              | "AcctAuthAddr"
endmodule