Skip to content

Releases: ava-labs/avalanchego

Banff.8 - PROXY Protocol

01 Feb 23:57
45ec881
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 22.

Note: The --whitelisted-subnets flag was deprecated in v1.9.6 and may be removed in v1.9.9.

Networking

  • Added TCP proxy support for p2p network traffic
  • Added p2p network client utility for directly messaging the p2p network

Consensus

  • Guaranteed delivery of App messages to the VM, regardless of sync status
  • Added EngineType to consensus context

MerkleDB - Alpha

  • Added initial implementation of a path-based merkle-radix tree
  • Added initial implementation of state sync powered by the merkledb

APIs

  • Updated platform.getCurrentValidators to return uptime as a percentage
  • Updated platform.get*Validators to avoid iterating over the staker set when requesting specific nodeIDs
  • Cached staker data in platform.get*Validators to significantly reduce DB IO
  • Added stakeAmount and weight to all staker responses in P-chain APIs
  • Deprecated stakeAmount in staker responses from P-chain APIs
  • Removed creationTxFee from info.GetTxFeeResponse
  • Removed address from platformvm.GetBalanceRequest

Fixes

  • Fixed RemoveSubnetValidatorTx weight diff corruption
  • Released network lock before attempting to close a peer connection
  • Fixed X-Chain last accepted block initialization to use the genesis block, not the stop vertex after linearization
  • Removed plugin directory handling from AMI generation
  • Removed copy of plugins directory from tar script

Cleanup

  • Removed unused rpm packaging scripts
  • Removed engine dependency from chain registrants
  • Removed unused field from chain handler log
  • Linted custom test chains.Manager
  • Used generic btree implementation
  • Deleted utils.CopyBytes
  • Updated rjeczalik/notify from v0.9.2 to v0.9.3

Miscellaneous

  • Added AVM state.Chain interface
  • Added generic atomic value utility
  • Added test for the AMI builder during RCs
  • Converted cache implementations to use generics
  • Added optional cache eviction callback

Banff.7 - Subnet Validator Lookups

11 Jan 23:03
3e3e40f
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 22.

Fixes

  • Fixed subnet validator lookup regression

Banff.6 - Dynamic State Syncing Support

11 Jan 21:07
e153cf5
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 22.

Consensus

  • Added StateSyncMode to the return of StateSummary#Accept to support syncing chain state while tracking the chain as a light client
  • Added AcceptedFrontier to Chits messages
  • Reduced unnecessary confidence resets during consensus by applying AcceptedFrontiers during QueryFailed handling
  • Added EngineType for consensus messages in the p2p message definitions
  • Updated vertex.DAGVM interface to support linearization

Configs

  • Added --plugin-dir flag. The default value is [DATADIR]/plugins
  • Removed --build-dir flag. The location of the avalanchego binary is no longer considered when looking for the plugins directory. Subnet maintainers should ensure that their node is able to properly discover plugins, as the default location is likely changed. See --plugin-dir
  • Changed the default value of --api-keystore-enabled to false
  • Added --track-subnets flag as a replacement of --whitelisted-subnets

Fixes

  • Fixed NAT-PMP router discovery and port mapping
  • Fixed --staking-enabled=false setting to correctly start subnet chains and report healthy
  • Fixed message logging in the consensus handler

VMs

  • Populated non-trivial logger in the rpcchainvm Server's snow.Context
  • Updated rpcchainvm proto definitions to use enums
  • Added Block format and definition to the AVM
  • Removed proposervm height index reset

Metrics

  • Added avalanche_network_peer_connected_duration_average metric
  • Added avalanche_api_calls_processing metric
  • Added avalanche_api_calls metric
  • Added avalanche_api_calls_duration metric

Documentation

  • Added wallet example to create stakeable.LockOut outputs
  • Improved ubuntu deb install instructions

Miscellaneous

  • Updated ledger-avalanche to v0.6.5
  • Added linter to ban the usage of fmt.Errorf without format directives
  • Added List to the buffer#Deque interface
  • Added Index to the buffer#Deque interface
  • Added SetLevel to the Logger interface
  • Updated auth API to use the new jwt standard

Banff.5 - Warp Messaging

22 Dec 17:47
609bc7d
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 21.

Subnet Messaging

  • Added subnet message serialization format
  • Added subnet message signing
  • Replaced bls.SecretKey with a teleporter.Signer in the snow.Context
  • Moved SNLookup into the validators.State interface to support non-whitelisted chainID to subnetID lookups
  • Added support for non-whitelisted subnetIDs for fetching the validator set at a given height
  • Added subnet message verification
  • Added teleporter.AnycastID to denote a subnet message not intended for a specific chain

Fixes

  • Added re-gossip of updated validator IPs
  • Fixed rpcchainvm.BatchedParseBlock to correctly wrap returned blocks
  • Removed incorrect uintptr handling in the generic codec
  • Removed message latency tracking on messages being sent to itself

Coreth

  • Added support for eth_call over VM2VM messaging
  • Added config flags for tx pool behavior

Miscellaneous

  • Added networking package README.md
  • Removed pagination of large db messages over gRPC
  • Added Size to the generic codec to reduce allocations
  • Added UnpackLimitedBytes and UnpackLimitedStr to the manual packer
  • Added SECURITY.md
  • Exposed proposer list from the proposervm's Windower interface
  • Added health and bootstrapping client helpers that block until the node is healthy
  • Moved bit sets from the ids package to the set package
  • Added more wallet examples

Banff.4 - VM BLS Access

07 Dec 20:00
481dee9
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 20.

This version modifies the db format. The db format is compatible with v1.9.3, but not v1.9.2 or earlier. After running a node with v1.9.4 attempting to run a node with a version earlier than v1.9.3 may report a fatal error on startup.

PeerList Gossip Optimization

  • Added gossip tracking to the peer instance to only gossip new IPs to a connection
  • Added PeerListAck message to report which TxIDs provided by the PeerList message were tracked
  • Added TxIDs to the PeerList message to unique-ify nodeIDs across validation periods
  • Added TxID mappings to the gossip tracker

Validator Set Tracking

  • Renamed GetValidators to Get on the validators.Manager interface
  • Removed Set, AddWeight, RemoveWeight, and Contains from the validators.Manager interface
  • Added Add to the validators.Manager interface
  • Removed Set from the validators.Set interface
  • Added Add and Get to the validators.Set interface
  • Modified validators.Set#Sample to return ids.NodeID rather than valdiators.Validator
  • Replaced the validators.Validator interface with a struct
  • Added a BLS public key field to validators.Validator
  • Added a TxID field to validators.Validator
  • Improved and documented error handling within the validators.Set interface
  • Added BLS public keys to the result of GetValidatorSet
  • Added BuildBlockWithContext as an optional VM method to build blocks at a specific P-chain height
  • Added VerifyWithContext as an optional block method to verify blocks at a specific P-chain height

Uptime Tracking

  • Added ConnectedSubnet message handling to the chain handler
  • Added SubnetConnector interface and implemented it in the platformvm
  • Added subnet uptimes to p2p pong messages
  • Added subnet uptimes to platform.getCurrentValidators
  • Added subnetID as an argument to info.Uptime

Fixes

  • Fixed incorrect context cancellation of escaped contexts from grpc servers
  • Fixed race condition between API initialization and shutdown
  • Fixed race condition between NAT traversal initialization and shutdown
  • Fixed race condition during beacon connection tracking
  • Added race detection to the E2E tests
  • Added additional message and sender tests

Coreth

  • Improved header and logs caching using maximum accepted depth cache
  • Added config option to perform database inspection on startup
  • Added configurable transaction indexing to reduce disk usage
  • Added special case to allow transactions using Nick's Method to bypass API level replay protection
  • Added counter metrics for number of accepted/processed logs

APIs

  • Added indices to the return values of GetLastAccepted and GetContainerByID on the indexer API client
  • Removed unnecessary locking from the info API

Chain Data

  • Added ChainDataDir to the snow.Context to allow blockchains to canonically access disk outside avalanchego's database
  • Added --chain-data-dir as a CLI flag to specify the base directory for all ChainDataDirs

Miscellaneous

  • Removed Version from the peer.Network interface
  • Removed Pong from the peer.Network interface
  • Reduced memory allocations inside the system throttler
  • Added CChainID to the snow.Context
  • Converted all sorting to utilize generics
  • Converted all set management to utilize generics

Banff.3 - Tracing

18 Nov 00:25
51c5edd
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 19.

Tracing

  • Added context.Context to all VM interface functions
  • Added context.Context to the validators.State interface
  • Added additional message fields to tracedRouter#HandleInbound
  • Added tracedVM implementations for block.ChainVM and vertex.DAGVM
  • Added tracedState implementation for validators.State
  • Added tracedHandler implementation for http.Handler
  • Added tracedConsensus implementations for snowman.Consensus and avalanche.Consensus

Fixes

  • Fixed incorrect NodeID used in registered AppRequest timeouts
  • Fixed panic when calling encdb#NewBatch after encdb#Close
  • Fixed panic when calling prefixdb#NewBatch after prefixdb#Close

Configs

  • Added proposerMinBlockDelay support to subnet configs
  • Added providedFlags field to the initializing node for easily observing custom node configs
  • Added --chain-aliases-file and --chain-aliases-file-content CLI flags
  • Added --proposervm-use-current-height CLI flag

Coreth

  • Added metric for number of processed and accepted transactions
  • Added wait for state sync goroutines to complete on shutdown
  • Increased go-ethereum dependency to v1.10.26
  • Increased soft cap on transaction size limits
  • Added back isForkIncompatible checks for all existing forks
  • Cleaned up Apricot Phase 6 code

Linting

  • Added unused-receiver linter
  • Added unused-parameter linter
  • Added useless-break linter
  • Added unhandled-error linter
  • Added unexported-naming linter
  • Added struct-tag linter
  • Added bool-literal-in-expr linter
  • Added early-return linter
  • Added empty-lines linter
  • Added error-lint linter

Testing

  • Added scripts/build_fuzz.sh and initial fuzz tests
  • Added additional Fx tests
  • Added additional messageQueue tests
  • Fixed vmRegisterer tests

Documentation

  • Documented Database.Put invariant for nil and empty slices
  • Documented avalanchego's versioning scheme
  • Improved vm.proto docs

Miscellaneous

  • Added peer gossip tracker
  • Added avalanche_P_vm_time_until_unstake and avalanche_P_vm_time_until_unstake_subnet metrics
  • Added keychain.NewLedgerKeychainFromIndices
  • Removed usage of Temporary error handling after listener#Accept
  • Removed Parameters from all Consensus interfaces
  • Updated avalanche-network-runner to v1.3.0
  • Added ids.BigBitSet to extend ids.BitSet64 for arbitrarily large sets
  • Added support for parsing future subnet uptime tracking data to the P-chain's state implementation
  • Increased validator set cache size
  • Added avax.UTXOIDFromString helper for managing UTXOIDs more easily

Banff.2 - Additional BLS Support

04 Nov 22:04
364581b
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 19.

Coreth

  • Added trie clean cache journaling to disk to improve processing time after restart
  • Fixed regression where a snapshot could be marked as stale by the async acceptor during block processing
  • Added fine-grained block processing metrics

RPCChainVM

  • Added validators.State to the rpcchainvm server's snow.Context
  • Added rpcProtocolVersion to the output of info.getNodeVersion
  • Added rpcchainvm protocol version to the output of the --version flag
  • Added version.RPCChainVMProtocolCompatibility map to easily compare plugin compatibility against avalanchego versions

Builds

  • Downgraded ubuntu release binaries from jammy to focal
  • Updated macos github runners to macos-12
  • Added workflow dispatch to build release binaries

BLS

  • Added bls proof of possession to platform.getCurrentValidators and platform.getPendingValidators
  • Added bls public key to in-memory staker objects
  • Improved memory clearing of bls secret keys

Cleanup

  • Fixed issue where the chain manager would attempt to start chain creation multiple times
  • Fixed race that caused the P-chain to finish bootstrapping before the primary network finished bootstrapping
  • Converted inbound message handling to expect usage of types rather than maps of fields
  • Simplified the validators.Set implementation
  • Added a warning if synchronous consensus messages take too long

Banff.1 - VM2 Messaging

28 Oct 21:32
9809034
Compare
Choose a tag to compare

This version is backwards compatible to v1.9.0. It is optional, but encouraged. The supported plugin version is 18.

Features

  • Added cross-chain messaging support to the VM interface
  • Added Ledger support to the Primary Network wallet
  • Converted Bionic builds to Jammy builds
  • Added mock.gen.sh to programmatically generate mock implementations
  • Added BLS signer to the snow.Context
  • Moved base from rpc.NewEndpointRequester to be included in the method in SendRequest
  • Converted UnboundedQueue to UnboundedDeque

Observability

  • Added support for OpenTelemetry tracing
  • Converted periodic bootstrapping status update to be time-based
  • Removed duplicated fields from the json format of the node config
  • Configured min connected stake health check based on the consensus parameters
  • Added new consensus metrics
  • Documented how chain time is advanced in the PlatformVM with chain_time_update.md

Cleanup

  • Converted chain creation to be handled asynchronously from the P-chain's execution environment
  • Removed SetLinger usage of P2P TCP connections
  • Removed Banff upgrade flow
  • Fixed ProposerVM inner block caching after verification
  • Fixed PlatformVM mempool verification to use an updated chain time
  • Removed deprecated CLI flags: --dynamic-update-duration, --dynamic-public-ip
  • Added unexpected Put bytes tests to the Avalanche and Snowman consensus engines
  • Removed mockery generated mock implementations
  • Converted safe math functions to use generics where possible
  • Added linting to prevent usage of assert in unit tests
  • Converted empty struct usage to nil for interface compliance checks
  • Added CODEOWNERs to own first rounds of PR review

Banff - Elastic Subnets

06 Oct 16:52
dd0b2d1
Compare
Choose a tag to compare

This upgrade adds support for creating Proof-of-Stake Subnets.

This version is not backwards compatible. The changes in the upgrade go into effect at 12 PM EDT, October 18th 2022 on Mainnet.

All Mainnet nodes should upgrade before 12 PM EDT, October 18th 2022.

The supported plugin version is 17.

Upgrades

  • Activated P2P serialization format change to Protobuf
  • Activated non-AVAX ImportTx/ExportTxs to/from the P-chain
  • Activated Banff* blocks on the P-chain
  • Deactivated Apricot* blocks on the P-chain
  • Activated RemoveSubnetValidatorTxs on the P-chain
  • Activated TransformSubnetTxs on the P-chain
  • Activated AddPermissionlessValidatorTxs on the P-chain
  • Activated AddPermissionlessDelegatorTxs on the P-chain
  • Deactivated ANT ImportTx/ExportTxs on the C-chain
  • Deactivated ANT precompiles on the C-chain

Deprecations

  • Ubuntu 18.04 releases are deprecated and will not be provided for >=v1.9.1

Miscellaneous

  • Fixed locked input signing in the P-chain wallet
  • Removed assertions from the logger interface
  • Removed --assertions-enabled flag
  • Fixed typo in --bootstrap-max-time-get-ancestors flag
  • Standardized exported P-Chain codec usage
  • Improved isolation and execution of the E2E tests
  • Updated the linked hashmap implementation to use generics

Banff - Elastic Subnets - Fuji Startup Pre-release

03 Oct 23:28
a1fc209
Compare
Choose a tag to compare

Please note that this release is unable to run mainnet - and will display "mainnet is not supported" if attempted to run with a mainnet configuration.

This upgrade performs post-upgrade cleanup to the C-chain. Additionally, this release fixes the startup for nodes that didn't update in time for the prior Fuji upgrade.

The changes in the upgrade go into effect at 3 PM EDT, October 4th 2022 on the Fuji testnet.

All Fuji nodes should upgrade before 3 PM EDT, October 4th 2022.

The supported plugin version is 16.

Upgrades

  • Activated P2P serialization format change to Protobuf
  • Activated non-AVAX ImportTx/ExportTxs to/from the P-chain
  • Activated Banff* blocks on the P-chain
  • Deactivated Apricot* blocks on the P-chain
  • Activated RemoveSubnetValidatorTxs on the P-chain
  • Activated TransformSubnetTxs on the P-chain
  • Activated AddPermissionlessValidatorTxs on the P-chain
  • Activated AddPermissionlessDelegatorTxs on the P-chain
  • Deactivated ANT ImportTx/ExportTxs on the C-chain
  • Deactivated ANT precompiles on the C-chain

Deprecations

  • Ubuntu 18.04 releases are deprecated and will not be provided for >=v1.9.1

Miscellaneous

  • Fixed locked input signing in the P-chain wallet
  • Removed assertions from the logger interface
  • Removed --assertions-enabled flag
  • Fixed typo in --bootstrap-max-time-get-ancestors flag
  • Standardized exported P-Chain codec usage
  • Improved isolation and execution of the E2E tests
  • Updated the linked hashmap implementation to use generics