Skip to content

Commit

Permalink
Merge pull request #392 from algorandfoundation/dev
Browse files Browse the repository at this point in the history
0.78.0: AVM10 and bug fixes
  • Loading branch information
joe-p committed Jan 29, 2024
2 parents 0903d33 + c259625 commit a18e989
Show file tree
Hide file tree
Showing 517 changed files with 4,239 additions and 1,043 deletions.
232 changes: 232 additions & 0 deletions FEATURES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
# 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 |

## 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.hasAsset` |
| 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` |
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma version 9
#pragma version 10

// This TEAL was generated by TEALScript v0.77.0
// This TEAL was generated by TEALScript v0.78.0
// https://github.com/algorandfoundation/TEALScript

// This contract is compliant with and/or implements the following ARCs: [ ARC4 ]
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
#pragma version 9
#pragma version 10
4 changes: 2 additions & 2 deletions examples/arc72/artifacts/ARC72.approval.teal
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma version 9
#pragma version 10

// This TEAL was generated by TEALScript v0.77.0
// This TEAL was generated by TEALScript v0.78.0
// https://github.com/algorandfoundation/TEALScript

// This contract is compliant with and/or implements the following ARCs: [ ARC4 ]
Expand Down
Loading

0 comments on commit a18e989

Please sign in to comment.