github algorand/go-algorand v2.7.1-stable
Algorand 2.7.1

2 years ago

GitHub Logo

Protocol Upgrade

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

Spec PR: #2286


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
  • 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


  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
    • 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
  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 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 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

  1. Programs up to 2kb can be updated, while programs between 2kb and 8kb can not.
  2. The dryrun REST API endpoint fails for requests containing multiple transactions.

Additional Resources

Don't miss a new go-algorand release

NewReleases is sending notifications on new releases.