github algorand/go-algorand v2.5.4-stable
Algorand v2.5.4

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:


Support for TEAL 3

  • Added support for the following new opcodes:
    • assert
    • min_balance
    • getbit
    • setbit
    • getbyte
    • setbyte
    • swap
    • select
    • dig
    • stxn
    • stxna
    • pushbytes
    • pushint
  • Added support for the following txn fields:
    • ForeignAssets
    • NumForeignAssets
    • ForeignApps
    • NumForeignApps
    • GlobalStateInts
    • GlobalStateByteslices
    • LocalStateInts
    • LocalStateByteslices
  • Added support for new global field:
    • CreatorAddress

This release also contains performance improvements as well as lays the groundwork for future features.

  • Re-factoring and re-organization of code to improve performance
  • Minor improvement to memory utilization on relays
  • Initial groundwork for future compact certificate support
  • Pre-requisite work for co-chain support
  • Core block archiver support
  • Added AssetClosingAmount to ApplyData


  1. Agreement
    • New Feature - add a Merkle commitment to transactions in block header
    • Enhancement - propagate block proposals before transaction validation
    • Bug Fixes
      • Fix initial rewards rate calculation for new networks
      • Increase pending proposals queue
      • FilterTimeout is using binary ConsensusCurrentVersion instead of current protocol version
  2. Ledger
    • New Features
      • Add asset close to amount field to transaction
      • Top-level compact certificate support
    • Enhancements
      • Trim StateDelta fields before storing
      • Improve memory allocations in cloneAssetHoldings and cloneAssetParams
      • Precise calculation of paysetHint for block eval
      • App refactoring
      • Change block header to allow for multiple compact certs in the future
      • Implement base round account caching
      • Improve speed of BlockEvaluator eval() by pre-fetching account data, decreasing latency at various points during block accounting
      • Move ledger.dbPair to db.Pair
      • Remove all cow.mods usages outside of cow type
      • Replace accountDelta by basics.AccountData in ledger
      • Restructure ledger package: ledger/ledgercore
      • Switch from map of modified accounts to an array
      • Drop support for old-style Merkle txn root commitment
      • Faster computation of transaction ID and length
      • More precise CompactCertWeightThreshold
      • Speed up merklearray
    • Bug Fixes
      • Fix for empty local state key value map assignment
      • Fix ClearState program applying when it errs
      • Ensure loading of a merkle trie deferred page during commit
  3. Network
    • New Feature - add core networking support for archivers
    • Enhancements
      • Improve network package error handling
      • Move peer.PrepareURL to net.SubstituteGenesisID
      • Optimize LimitedReaderSlurper memory utilization to improve relay memory usage
      • Adjust the network outgoing buffer sizes
      • Network: refactor broadcastThread
      • Remove the network v1 fetcher via websocket connections
      • Deprecate support of reverse catchup protocol ( part 2 )
      • Deprecate support of reverse catchup protocol ( part 3 )
  4. Teal
    • New Feature - TEAL 3 support (see Highlights)
    • Bug Fix - copy byteslices that will be modified by opcode
    • Bug Fix - fix omitempty for AssetCloseAmount
  6. Catchup
    • Enhancement - implement peer selector logic for catchup
  7. Config
    • Enhancement - create new consensus upgrade for AssetCloseAmount
  8. Goal
    • Enhancement - better missing argument error message for "goal asset destroy"
    • Bug Fixes
      • Avoid creating invalid consensus.json file
      • Fix insufficient fee error message formatting
  9. Node
    • Bug Fix: Fix node panicing during shutdown
  10. Logging
    • Enhancement - do not use deadlock.Mutex in logging
    • Bug Fixes
      • Handle #pragma errors more like all others
      • Prevent misleading agreement error message
  11. Tools
    • Enhancements
      • add appeal to kindness to dispenser to help prevent abuse
      • Implement a transaction load generator
      • Added Repeat configuration flag to support single invocation of load generator
      • Support large integers in tealdbg
    • Bug Fixes
      • Improvements/bugfixes for tealdbg to improve Chrome DevTools support
      • Fix tealdbg Accounts array
  12. Tests
    • Enhancements
      • Put some unicode in an AsssetName to help test Indexer
      • Improve the reliability of the TestApplicationsUpgradeOverGossip e2e test by using a specific historical protocols and avoiding dynamically modifying current and/or future protocols.
      • Remove GOPATH dependencies in integration tests
      • Remove data directory from start/stop network expect tests
      • Add BenchmarkWritingRandomBalancesDisk
      • Add BenchmarkVariableTransactionMessageBlockSizes
      • Add e2e test with some interesting state for Indexer tests.
      • Improve TestAccountsCanSendMoney e2e test
      • Indexer state test for keys creation/deletion
      • Add a non-utf8 Note test
      • Asset-close test case to tickle indexer
      • Close after rekey test data
      • Non-utf8 app value keys for test
      • Testing: make e2e_client_runner more robust
      • Tests for the compactcert package
    • Bug Fixes
      • Adjust timeouts in tests
      • Fix regression in BenchmarkReadingAllBalancesRAM and BenchmarkReadingAllBalancesDisk
  13. Other
    • New Feature - systemd - run algod as a user service
    • Enhancements
      • Build - fix deprecation warning on sortition compilation
      • Build - new recipe for Devnet network
      • Use msgp 1.1.47
      • Clarify account status meaning in code-comment
      • Integrate package signing into CI pipeline
      • Make github templates friendlier
      • Add comment details on format of Transaction for kmd
    • Bug Fixes
      • Upgrade the websocket library to use version 1.4.2
      • Pipeline - move check_golang_version check to fix deploying in travis
      • Pipeline - remove jq from check golang version script to fix deploy jobs in Travis
      • Fix few minor log string formatting
      • Fix few minor typos

Additional Resources

Don't miss a new go-algorand release

NewReleases is sending notifications on new releases.