Supported AVM Features
Supported AVM Features
ARCS
ARC | Name | Description |
---|---|---|
4 | Application Binary Interface (ABI) | ABI method routing is automatically down for public methods. All ABI types are natively supported. Compiler outputs ARC4 JSON |
22 | Add read-only annotation to ABI methods | Decorating a method with @abi.readonly will mark it as readonly |
28 | Algorand Event Log Spec | Use EventLogger to log ARC28 events |
32 | Application Specification | Compiler generates an arc32 JSON file |
ABI Types
ABI Type | TEALScript |
---|---|
address | Address |
uintN | uint64 , uint32 , uint16 , uint8 , uint128 , uint256 , or uint<N> |
bool | boolean |
ufixedNxM | ufixed<N, M> |
T[] | T[] |
T[N] | StaticArray<T, N> , bytes32 , or bytes64 |
[T1, T2, ..., TN] | [T1, T2, ..., TN] or {keyone: T1, keytwo: T2, ..., keyN: TN} |
string | string |
application | ApplicationReference |
asset | AssetReference |
account | AccountReference |
txn | Txn |
pay | PayTxn |
keyreg | KeyRegTxn |
acfg | AssetConfigTxn |
axfer | AssetTransferTxn |
afrz | AssetFreezeTxn |
Opcodes
Flow Control
Opcode | TEALScript |
---|---|
err | throw Error() |
bnz | Used automatically in loops and conditionals |
bz | Used automatically in loops and conditionals |
b | Used automatically in loops and conditionals |
return | Used when the top-level function returns |
assert | assert |
bury | Stack manipulation is not officially supported |
popn | Stack manipulation is not officially supported |
dupn | Stack manipulation is not officially supported |
pop | Stack manipulation is not officially supported |
dup | Stack manipulation is not officially supported |
dup2 | Stack manipulation is not officially supported |
dig | Stack manipulation is not officially supported |
swap | Stack manipulation is not officially supported |
select | Not officially supported yet, but could be used to optimize conditionals in the future |
cover | Stack manipulation is not officially supported |
uncover | Stack manipulation is not officially supported |
callsub | Used when calling a function |
retsub | return |
proto | Used automatically in functions |
frame_dig | Used automatically in functions |
frame_bury | Used automatically in functions |
switch | Not officially supported yet, but could be used to optimize conditionals in the future |
match | Not officially supported yet, but could be used to optimize conditionals in the future |
Cryptography
Opcode | TEALScript |
---|---|
sha256 | sha256 |
keccak256 | keccak256 |
sha512_256 | sha512_256 |
ed25519verify | ed25519Verify |
ecdsa_verify | ecdsaVerify |
ecdsa_pk_decompress | ecdsaPkDecompress |
ecdsa_pk_recover | ecdsaPkRecover |
ed25519verify_bare | ed25519VerifyBare |
sha3_256 | sha3_256 |
vrf_verify | vrfVerify |
ec_add | ecAdd |
ec_scalar_mul | ecScalarMul |
ec_pairing_check | ecPairingCheck |
ec_multi_scalar_mul | ecMultiScalarMul |
ec_subgroup_check | ecSubgroupCheck |
ec_map_to | ecMapTo |
Arithmetic
Opcode | TEALScript |
---|---|
+ | Natively supported |
- | Natively supported |
/ | Natively supported |
* | Natively supported |
< | Natively supported |
> | Natively supported |
<= | Natively supported |
>= | Natively supported |
&& | Natively supported |
|| | Natively supported |
== | Natively supported |
!= | Natively supported |
! | Natively supported |
itob | Natively supported |
btoi | Natively supported |
% | Natively supported |
| | Natively supported |
& | Natively supported |
^ | Natively supported |
~ | Natively supported |
mulw | mulw |
addw | addw |
divmodw | divmodw |
shl | << |
shr | >> |
sqrt | Natively supported |
bitlen | bitlen |
exp | ** |
expw | expw |
divw | divw |
Byte Array Manipulation
Opcode | TEALScript |
---|---|
len | .length on bytes |
concat | concat or + |
substring | String.substring or substring |
substring3 | String.substring or substring |
getbit | getbit |
setbit | setbit |
getbyte | getbyte |
setbyte | setbyte |
extract | extract3 |
extract3 | extract3 |
extract_uint16 | extractUint16 |
extract_uint32 | extractUint32 |
extract_uint64 | extractUint64 |
replace2 | replace3 |
replace3 | replace3 |
base64_decode | base64Decode |
json_ref | jsonRef |
Loading Values
Opcode | TEALScript |
---|---|
intcblock | Constant block not officially supported |
intc | Constant block not officially supported |
intc_0 | Constant block not officially supported |
intc_1 | Constant block not officially supported |
intc_2 | Constant block not officially supported |
intc_3 | Constant block not officially supported |
bytecblock | Constant block not officially supported |
bytec | Constant block not officially supported |
bytec_0 | Constant block not officially supported |
bytec_1 | Constant block not officially supported |
bytec_2 | Constant block not officially supported |
bytec_3 | Constant block not officially supported |
arg | LogicSig.logic arguments |
arg_0 | LogicSig.logic arguments |
arg_1 | LogicSig.logic arguments |
arg_2 | LogicSig.logic arguments |
arg_3 | LogicSig.logic arguments |
txn | this.txn |
global | globals |
gtxn | this.txnGroup or transaction argument |
load | ScratchSlot |
store | ScratchSlot |
txna | this.txn |
gtxna | this.txnGroup or transaction argument |
gtxns | this.txnGroup or transaction argument |
gtxnsa | this.txnGroup or transaction argument |
gload | Txn.load |
gloads | Txn.load |
gaid | this.txnGroup or transaction argument |
gaids | this.txnGroup or transaction argument |
loads | ScratchSlot |
stores | ScratchSlot |
pushbytes | Used by TemplateVar |
pushint | Used by TemplateVar |
pushbytess | Not used yet, but could be used for optimizations in future |
pushints | Not used yet, but could be used for optimizations in future |
bzero | bzero |
txnas | this.txn |
gtxnas | this.txnGroup or transaction argument |
gtxnsas | this.txnGroup or transaction argument |
args | LogicSig.logic arguments |
gloadss | Txn.load |
State Access
Opcode | TEALScript |
---|---|
balance | Address.balance and Address.hasBalance |
app_opted_in | Address.isOptedInToApp() |
app_local_get | Method call on LocalStateKey on LocalStateMap |
app_local_get_ex | AppID.local() |
app_global_get | Method call on GlobalStateKey on GlobalStateMap |
app_global_get_ex | AppID.global() |
app_local_put | Method call on LocalStateKey on LocalStateMap |
app_global_put | Method call on GlobalStateKey on GlobalStateMap |
app_local_del | Method call on LocalStateKey on LocalStateMap |
app_global_del | Method call on GlobalStateKey on GlobalStateMap |
asset_holding_get | Address.assetBalance and Address.isOptedInToAsset |
asset_params_get | Method calls on AssetID |
app_params_get | Method calls on AppID |
acct_params_get | Method calls on Address |
min_balance | Address.minBalance |
log | log or EventEmitter |
block | blocks |
Byte Array Arithmetic
Opcode | TEALScript |
---|---|
bsqrt | Natively supported |
b+ | Natively supported |
b- | Natively supported |
b/ | Natively supported |
b* | Natively supported |
b< | Natively supported |
b> | Natively supported |
b<= | Natively supported |
b>= | Natively supported |
b== | Natively supported |
b!= | Natively supported |
b% | Natively supported |
Byte Array Logic
Opcode | TEALScript |
---|---|
b| | Natively supported |
b& | Natively supported |
b^ | Natively supported |
b~ | Natively supported |
Inner Transactions
Opcode | TEALScript |
---|---|
itxn_begin | this.pendingGroup.add... or send... |
itxn_field | this.pendingGroup.add... or send... |
itxn_submit | this.pendingGroup.execute or send... |
itxn | this.itxn |
itxna | this.itxn |
itxn_next | this.pendingGroup.add... |
gitxn | this.lastInnerGroup |
gitxna | this.lastInnerGroup |
itxnas | this.itxn |
gitxnas | this.lastInnerGroup |
Box Access
Opcode | TEALScript |
---|---|
box_create | Method call on BoxKey or BoxMap |
box_extract | Method call on BoxKey or BoxMap |
box_replace | Method call on BoxKey or BoxMap |
box_del | Method call on BoxKey or BoxMap |
box_len | Method call on BoxKey or BoxMap |
box_get | Method call on BoxKey or BoxMap |
box_put | Method call on BoxKey or BoxMap |
box_splice | Method call on BoxKey or BoxMap |
box_resize | Method call on BoxKey or BoxMap |