BetaNet Update: 2.7.0 - Released!

BetaNet was upgraded to version 2.7.0 on Thursday 6/17 at 9:30am EDT (1:30pm UTC).

If you have your node set to automatic updates, you don’t need to do anything. It will automatically update to the newer version whenever that becomes available.

Protocol Upgrade

This release will require a protocol upgrade.
This release contains a consensus protocol upgrade, which implements the following spec:

Spec PR: https://github.com/algorand/go-algorand/pull/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
  • Participation key registration improvements (e.g. check valid ranges)
  • Miscellaneous optimizations and test improvements

Changes

  1. 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
  2. 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
  3. Agreement
    • Bug Fix - bug fix for proposal for a future round failing to be relayed
  4. Catchup
    • Enhancement - catchup: speedup initial node DNS bootstrap time
  5. Goal
    • Bug Fix - clean up goal wallet new output
  6. Network
    • Enhancement - start network only after handlers registration is complete
    • Bug Fix - fix go vet error for string(int) conversion in TestWebsocketNetworkCancel
  7. Node
    • Enhancement - improve fresh node startup time
    • Bug Fix - ensure stopping a node always stops KMD
  8. Tools
    • Enhancements - deprecate auction code
    • Improve carpenter by adding timestamp
  9. 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
  10. 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

Additional Resources

To update your current version of BetaNet to 2.7.0, run the following goal command:

./update.sh -c beta -i -d <betanet-data-directory> -n

If you haven’t already done so, we also advise setting up a CRON job to automatically update your algorand networks. If you haven’t done this for BetaNet, you can follow the instructions here:

2 Likes

Great! The usual question: Where can I find the documentation of the AVM changes?

Formal specs can be found there:

The developer website is usually updated a bit later.

You will be able to use these new features in a private network as soon as Algorand 2.7.0 is deployed.

To use them on BetaNet, you’ll need to wait until BetaNet is fully upgraded (it should happen in a week).
To use them on MainNet/TestNet, you’ll need to wait until MainNet/TestNet is fully upgraded (no time yet for that).

1 Like

We are delaying the BetaNet update to evaluate some metrics and will be running some more testing before deployment.

A clarification on the Release Notes:
For New OpCodes: jumpsub, retsub
jumpsub should be changed to callsub

BetaNet Published around 9:30am EDT (1:30pm UTC)