-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #392 from algorandfoundation/dev
0.78.0: AVM10 and bug fixes
- Loading branch information
Showing
517 changed files
with
4,239 additions
and
1,043 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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` | |
4 changes: 2 additions & 2 deletions
4
examples/amm/tealscript_artifacts/ConstantProductAMM.approval.teal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
examples/amm/tealscript_artifacts/ConstantProductAMM.arc32.json
Large diffs are not rendered by default.
Oops, something went wrong.
2 changes: 1 addition & 1 deletion
2
examples/amm/tealscript_artifacts/ConstantProductAMM.clear.teal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
#pragma version 9 | ||
#pragma version 10 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.