Releases: ava-labs/avalanchego
Banff.8 - PROXY Protocol
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 returnuptime
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
andweight
to all staker responses in P-chain APIs - Deprecated
stakeAmount
in staker responses from P-chain APIs - Removed
creationTxFee
frominfo.GetTxFeeResponse
- Removed
address
fromplatformvm.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
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
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 ofStateSummary#Accept
to support syncing chain state while tracking the chain as a light client - Added
AcceptedFrontier
toChits
messages - Reduced unnecessary confidence resets during consensus by applying
AcceptedFrontier
s duringQueryFailed
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 theplugins
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
tofalse
- 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
'ssnow.Context
- Updated
rpcchainvm
proto definitions to use enums - Added
Block
format and definition to theAVM
- 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 thebuffer#Deque
interface - Added
Index
to thebuffer#Deque
interface - Added
SetLevel
to theLogger
interface - Updated
auth
API to use the newjwt
standard
Banff.5 - Warp Messaging
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 ateleporter.Signer
in thesnow.Context
- Moved
SNLookup
into thevalidators.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
andUnpackLimitedStr
to the manual packer - Added SECURITY.md
- Exposed proposer list from the
proposervm
'sWindower
interface - Added health and bootstrapping client helpers that block until the node is healthy
- Moved bit sets from the
ids
package to theset
package - Added more wallet examples
Banff.4 - VM BLS Access
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 newIP
s to a connection - Added
PeerListAck
message to report whichTxID
s provided by thePeerList
message were tracked - Added
TxID
s to thePeerList
message to unique-ify nodeIDs across validation periods - Added
TxID
mappings to the gossip tracker
Validator Set Tracking
- Renamed
GetValidators
toGet
on thevalidators.Manager
interface - Removed
Set
,AddWeight
,RemoveWeight
, andContains
from thevalidators.Manager
interface - Added
Add
to thevalidators.Manager
interface - Removed
Set
from thevalidators.Set
interface - Added
Add
andGet
to thevalidators.Set
interface - Modified
validators.Set#Sample
to returnids.NodeID
rather thanvaldiators.Validator
- Replaced the
validators.Validator
interface with a struct - Added a
BLS
public key field tovalidators.Validator
- Added a
TxID
field tovalidators.Validator
- Improved and documented error handling within the
validators.Set
interface - Added
BLS
public keys to the result ofGetValidatorSet
- 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 toinfo.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
andGetContainerByID
on theindexer
API client - Removed unnecessary locking from the
info
API
Chain Data
- Added
ChainDataDir
to thesnow.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 allChainDataDir
s
Miscellaneous
- Removed
Version
from thepeer.Network
interface - Removed
Pong
from thepeer.Network
interface - Reduced memory allocations inside the system throttler
- Added
CChainID
to thesnow.Context
- Converted all sorting to utilize generics
- Converted all set management to utilize generics
Banff.3 - Tracing
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 allVM
interface functions - Added
context.Context
to thevalidators.State
interface - Added additional message fields to
tracedRouter#HandleInbound
- Added
tracedVM
implementations forblock.ChainVM
andvertex.DAGVM
- Added
tracedState
implementation forvalidators.State
- Added
tracedHandler
implementation forhttp.Handler
- Added
tracedConsensus
implementations forsnowman.Consensus
andavalanche.Consensus
Fixes
- Fixed incorrect
NodeID
used in registeredAppRequest
timeouts - Fixed panic when calling
encdb#NewBatch
afterencdb#Close
- Fixed panic when calling
prefixdb#NewBatch
afterprefixdb#Close
Configs
- Added
proposerMinBlockDelay
support to subnet configs - Added
providedFlags
field to theinitializing 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 fornil
and empty slices - Documented avalanchego's versioning scheme
- Improved
vm.proto
docs
Miscellaneous
- Added peer gossip tracker
- Added
avalanche_P_vm_time_until_unstake
andavalanche_P_vm_time_until_unstake_subnet
metrics - Added
keychain.NewLedgerKeychainFromIndices
- Removed usage of
Temporary
error handling afterlistener#Accept
- Removed
Parameters
from allConsensus
interfaces - Updated
avalanche-network-runner
tov1.3.0
- Added
ids.BigBitSet
to extendids.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 managingUTXOID
s more easily
Banff.2 - Additional BLS Support
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'ssnow.Context
- Added
rpcProtocolVersion
to the output ofinfo.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 fromjammy
tofocal
- Updated macos github runners to
macos-12
- Added workflow dispatch to build release binaries
BLS
- Added bls proof of possession to
platform.getCurrentValidators
andplatform.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
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
fromrpc.NewEndpointRequester
to be included in themethod
inSendRequest
- Converted
UnboundedQueue
toUnboundedDeque
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
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
/ExportTx
s to/from the P-chain - Activated
Banff*
blocks on the P-chain - Deactivated
Apricot*
blocks on the P-chain - Activated
RemoveSubnetValidatorTx
s on the P-chain - Activated
TransformSubnetTx
s on the P-chain - Activated
AddPermissionlessValidatorTx
s on the P-chain - Activated
AddPermissionlessDelegatorTx
s on the P-chain - Deactivated ANT
ImportTx
/ExportTx
s 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
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
/ExportTx
s to/from the P-chain - Activated
Banff*
blocks on the P-chain - Deactivated
Apricot*
blocks on the P-chain - Activated
RemoveSubnetValidatorTx
s on the P-chain - Activated
TransformSubnetTx
s on the P-chain - Activated
AddPermissionlessValidatorTx
s on the P-chain - Activated
AddPermissionlessDelegatorTx
s on the P-chain - Deactivated ANT
ImportTx
/ExportTx
s 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