Protocol Upgrade
This release will require a protocol upgrade.
This release contains a consensus protocol upgrade, which implements the following spec:
https://github.com/algorandfoundation/specs/tree/65b4ab3266c52c56a0fa7d591754887d68faad0a
Spec PR: #2286
Highlights
This release represents a major milestone in smart contract functionality, as well as serves as a vote for the future of governance on chain.
In this release:
- Governance vote - see https://algorand.foundation/news/algorand-governance-referendum
- Algorand Virtual Machine (AVM) v0.9
- Control Flow
- New OpCodes: callsub, retsub
- Allow backward jumps or indirect jumps
- Dynamic cost accounting
- Opcodes: Math related
- New OpCodes: shl, shr, divmodw, exp, expw, sqrt, log2
- Byteslice arithmetic
- Contract-to-contract composability - allow contracts to share scratch space in a transaction group
- Createable IDs in gtxns (they are not really deterministic, but rather new app/asset idx are available for subsequent apps within a transaction group)
- Increased Program Limits
- Ability to pay for extra pages
- Pool fees - as long as fees in a covered in a gtxn, allow 0 fee txns
- Increase ASA URL size from 32 bytes to 96 bytes (better IPFS support for NFTs)
- Combine clear and approval limits
- Combine schema key/value sizes
- Optimize int/byte constant in assembly
- Control Flow
- Participation key registration improvements (e.g. check valid ranges)
- Miscellaneous optimizations and test improvements
Changes
- AVM
- New Features
- Control flow (callsub, retsub; backward/indirect jumps; dynamic cost accounting)
- New math opcodes (shl, shr, divmodw, exp, expw, sqrt, log2) and byteslice-oriented math
- Add ability to pay for more program space
- Allow future app call transactions to read the scratch space of previous transactions in the same transaction group for contract to contract composability
- Combine Clear and Approval Program size limits
- Combine app state key/value size limits
- Expose creatable IDs to AVM code within the same group
- Pool fees in a transaction group and allow one user to pay all fees
- Enhancements
- Allow AVM code to access a max number of foreign refs
- Increase ASA URL size from 32 bytes to 96 bytes to support NFTs with longer IPFS URLs
- Optimize constant assembly
- Regularize access to "foreign" references
- Bug Fix - check setbyte length properly
- New Features
- REST API
- New Feature - add the AppsTotalExtraPages account field to the response returned by the /v2/accounts/{addr} endpoint
- Enhancement - make account endpoint produce deterministic JSON
- Bug Fix - make extra-program-pages and apps-total-extra-pages optional in order to do not exposing them before the protocol switch
- Agreement
- Bug Fix - bug fix for proposal for a future round failing to be relayed
- Catchup
- Enhancement - catchup: speedup initial node DNS bootstrap time
- Goal
- Bug Fix - clean up
goal wallet new
output
- Bug Fix - clean up
- Network
- Enhancement - start network only after handlers registration is complete
- Bug Fix - fix go vet error for string(int) conversion in TestWebsocketNetworkCancel
- Node
- Enhancement - improve fresh node startup time
- Bug Fix - ensure stopping a node always stops KMD
- Tools
- Enhancements - deprecate auction code
- Improve carpenter by adding timestamp
- Tests
- New Feature - integrate with codecov.io to attach coverage reports to PRs
- Enhancements
- Add PeerSelector and Catchup service tests
- Add missing test for universalFetcher.go
- Bandwidth stats for cluster tests
- Disable compact certs and auction tests
- Disable goal expect tests
- Improve AVM tests
- Improve TestRewardUnitThreshold predicate
- Increase catchupaccessor code coverage
- Temporarily disable TestBasicCatchpointCatchup test and reset timeouts
- Temporarily disable TestPeriodicSync test
- Use gotestsum instead of logfilter for test formatting
- e2e sub assets-app speedup
- sectok e2e faster
- Bug Fixes
- Fix asynchronous startup case for rekey upgrade test
- Fix bug in TestApplicationsUpgradeOverREST
- Fix data race accessing messagesOfInterest during network shutdown
- Fix random TestAccountInformationV2 test failures by refreshing wallet handle
- Fix random failure in TestConsensusVersion
- Fixing a bug in eval and TestOnSwitchToUnSupportedProtocol
- Protocol upgrade tests - AgreementFilterTimeout was not set correctly
- Fix TestRekeyUpgrade when round=0
- Other
- New Feature - initial support for building CentOS Stream 8 RPM (still need publishing work)
- Enhancements
- Add mention of install_buildtools.sh to README
- Fix docker builds after refactor: skip
make deps
- Modify build_release to match build_pr and remove ARM Deploy
- Re-enable gofmt check during travis build
- Refactor code generation verification
- Remove ci-deps and update GOPROXY in Dockerfiles
- Use minimal travis container since we install go ourselves
- Bug Fixes
- Fix incorrect gaid and gaids docs
- Fix nightly test genesis file issue
- If the branch is rel/nightly set channel to nightly
- Fix crash that should be a clean error report for using
substring
wrong
Known Issues
- Programs up to 2kb can be updated, while programs between 2kb and 8kb can not.
- The
dryrun
REST API endpoint fails for requests containing multiple transactions.