Skip to content

Latest commit

 

History

History
637 lines (440 loc) · 27.7 KB

RELEASES.md

File metadata and controls

637 lines (440 loc) · 27.7 KB

Release Notes

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

State Sync

  • Added peer bandwidth tracking to optimize coreth state sync message routing
  • Fixed coreth leaf request handler bug to ensure the handler delivers a valid range proof
  • Removed redundant proof keys from coreth leafs response message format
  • Improved coreth state sync request retry logic
  • Improved coreth state sync handler metrics
  • Improved coreth state sync ETA
  • Added avalanche_{chainID}_handler_async_expired metric

Miscellaneous

  • Fixed platform.getCurrentValidators API to correctly mark a node as connected to itself on subnets.
  • Fixed platform.getBlockchainStatus to correctly report Unknown for blockchains that are not managed by the P-Chain
  • Added process metrics by default in the rpcchainvm#Server
  • Added Database health checks
  • Removed the deprecated Database.Stat call from the rpcdb#Server
  • Added fail fast logic to duplicated Snowman additions to avoid undefined behavior
  • Added additional testing around Snowman diverged voting tests
  • Deprecated --dynamic-update-duration and --dynamic-public-ip CLI flags
  • Added --public-ip-resolution-frequency and --public-ip-resolution-service to replace --dynamic-update-duration and --dynamic-public-ip, respectively

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

State Sync

  • Fixed proposervm state summary acceptance to only accept state summaries with heights higher than the locally last accepted block
  • Fixed proposervm state summary serving to only respond to requests after height indexing has finished
  • Improved C-chain state sync leaf request serving by optimistically reading leaves from snapshot
  • Refactored C-chain state sync block fetching

Networking

  • Reduced default peerlist and accepted frontier gossipping
  • Increased the default at-large outbound buffer size to 32 MiB

Metrics

  • Added leveldb metrics
  • Added process and golang metrics for the avalanchego binary
  • Added available disk space health check
    • Ensured that the disk space will not be fully utilized by shutting down the node if there is a critically low amount of free space remaining
  • Improved C-chain state sync metrics

Performance

  • Added C-chain acceptor queue within core/blockchain.go
  • Removed rpcdb locking when committing batches and using iterators
  • Capped C-chain TrieDB dirties cache size during block acceptance to reduce commit size at 4096 block interval

Cleanup

  • Refactored the avm to utilize the external txs package
  • Unified platformvm dropped tx handling
  • Clarified snowman child block acceptance calls
  • Fixed small consensus typos
  • Reduced minor duplicated code in consensus
  • Moved the platformvm key factory out of the VM into the test file
  • Removed unused return values from the timeout manager
  • Removed weird json rpc private interface
  • Standardized json imports
  • Added vm factory interface checks

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

The first startup of the C-Chain will cause an increase in CPU and IO usage due to an index update. This index update runs in the background and does not impact restart time.

State Sync

  • Added state syncer engine to facilitate VM state syncing, rather than full historical syncing
  • Added GetStateSummaryFrontier, StateSummaryFrontier, GetAcceptedStateSummary, AcceptedStateSummary as P2P messages
  • Updated Ancestors message specification to expect an empty response if the container is unknown
  • Added --state-sync-ips and --state-sync-ids flags to allow manual overrides of which nodes to query for accepted state summaries
  • Updated networking library to permanently track all manually tracked peers, rather than just beacons
  • Added state sync support to the metervm
  • Added state sync support to the proposervm
  • Added state sync support to the rpcchainvm
  • Added beta state sync support to coreth

ProposerVM

  • Prevented rejected blocks from overwriting the proposervm height index
  • Optimized proposervm block rewind to utilize the height index if available
  • Ensured proposervm height index is marked as repaired in Initialize if it is fully repaired on startup
  • Removed --reset-proposervm-height-index. The height index will be reset upon first restart
  • Optimized proposervm height index resetting to periodically flush deletions

Bug Fixes

  • Fixed IPC message issuance and restructured consensus event callbacks to be checked at compile time
  • Fixed coreth metrics initialization
  • Fixed bootstrapping startup logic to correctly startup if initially connected to enough stake
  • Fixed coreth panic during metrics collection
  • Fixed panic on concurrent map read/write in P-chain wallet SDK
  • Fixed rpcchainvm panic by sanitizing http response codes
  • Fixed incorrect JSON tag on platformvm.BaseTx
  • Fixed AppRequest, AppResponse, and AppGossip stringers used in logging

API/Client

  • Supported client implementations pointing to non-standard URIs
  • Introduced ids.NodeID type to standardize logging and simplify API service and client implementations
  • Changed client implementations to use standard types rather than strings wherever possible
  • Added subnetID as an argument to platform.getTotalStake
  • Added connected to the subnet validators in responses to platform.getCurrentValidators and platform.getPendingValidators
  • Add missing admin API client methods
  • Improved indexer API client implementation to avoid encoding edge cases

Networking

  • Added --snow-mixed-query-num-push-vdr and --snow-mixed-query-num-push-non-vdr to allow parameterization of sending push queries
    • By default, non-validators now send only pull queries, not push queries.
    • By default, validators now send both pull queries and push queries upon inserting a container into consensus. Previously, nodes sent only push queries.
  • Added metrics to track the amount of over gossipping of peerlist messages
  • Added custom message queueing support to outbound Peer messages
  • Reused Ping messages to avoid needless memory allocations

Logging

  • Replaced AvalancheGo's internal logger with uber-go/zap.
  • Replaced AvalancheGo's log rotation with lumberjack.
  • Renamed log-display-highlight to log-format and added json option.
  • Added log-rotater-max-size, log-rotater-max-files, log-rotater-max-age, log-rotater-compress-enabled options for log rotation.

Miscellaneous

  • Added --data-dir flag to easily move all default file locations to a custom location
  • Standardized RPC specification of timestamp fields
  • Logged health checks whenever a failing health check is queried
  • Added callback support for the validator set manager
  • Increased coreth trie tip buffer size to 32
  • Added CPU usage metrics for AvalancheGo and all sub-processes
  • Added Disk IO usage metrics for AvalancheGo and all sub-processes

Cleanup

  • Refactored easily separable platformvm files into separate smaller packages
  • Simplified default version parsing
  • Fixed various typos
  • Converted some structs to interfaces to better support mocked testing
  • Refactored IP utils

Documentation

  • Increased recommended disk size to 1 TB
  • Updated issue template
  • Documented additional snowman.Block invariants

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Networking

  • Improved vertex and block gossiping for validators with low stake weight.
  • Added peers metric by subnet.
  • Added percentage of stake connected metric by subnet.

APIs

  • Added support for specifying additional headers and query params in the RPC client implementations.
  • Added static API clients for the platformvm and the avm.

PlatformVM

  • Introduced time based windowing of accepted P-chain block heights to ensure that local networks update the proposer list timely in the proposervm.
  • Improved selection of decision transactions from the mempool.

RPCChainVM

  • Increased buf version to v1.3.1.
  • Migrated all proto definitions to a dedicated /proto folder.
  • Removed the dependency on the non-standard grpc broker to better support other language implementations.
  • Added grpc metrics.
  • Added grpc server health checks.

Coreth

  • Fixed a bug where a deadlock on shutdown caused historical re-generation on restart.
  • Added an API endpoint to fetch the current VM Config.
  • Added AvalancheGo custom log formatting to the logs.
  • Removed support for the JS Tracer.

Logging

  • Added piping of subnet logs to stdout.
  • Lazily initialized logs to avoid opening files that are never written to.
  • Added support for arbitrarily deleted log files while avalanchego is running.
  • Removed redundant logging configs.

Miscellaneous

  • Updated minimum go version to v1.17.9.
  • Added subnet bootstrapping health checks.
  • Supported multiple tags per codec instantiation.
  • Added minor fail-fast optimization to string packing.
  • Removed dead code.
  • Fixed typos.
  • Simplified consensus engine Shutdown notification dispatching.
  • Removed Sleep call in the inbound connection throttler.

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Updates

  • Improved subnet gossip to only send messages to nodes participating in that subnet.
  • Fixed inlined VM initialization to correctly register static APIs.
  • Added logging for file descriptor limit errors.
  • Removed dead code from network packer.
  • Improved logging of invalid hash length errors.

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Networking

  • Fixed duplicate reference decrease when closing a peer.
  • Freed allocated message buffers immediately after sending.
  • Added --network-peer-read-buffer-size and --network-peer-write-buffer-size config options.
  • Moved peer IP signature verification to enable concurrent verifications.
  • Reduced the number of connection flushes when sending messages.
  • Canceled outbound connection requests on shutdown.
  • Reused dialer across multiple outbound connections.
  • Exported NewTestNetwork for easier external testing.

Coreth

  • Reduced log level of snapshot regeneration logs.
  • Enabled atomic tx replacement with higher gas fees.
  • Parallelized trie index re-generation.

Miscellaneous

  • Fixed incorrect BlockchainID usage in the X-chain ImportTx builder.
  • Fixed incorrect OutputOwners in the P-chain ImportTx builder.
  • Improved FD limit error logging and warnings.
  • Rounded bootstrapping ETAs to the nearest second.
  • Added gossip config support to the subnet configs.
  • Optimized various queue removals for improved memory freeing.
  • Added a basic X-chain E2E usage test to the new testing framework.

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Networking

  • Refactored the networking library to track potential peers by nodeID rather than IP.
  • Separated peer connections from the mesh network implementation to simplify testing.
  • Fixed duplicate Connected messages bug.
  • Supported establishing outbound connections with peers reporting different inbound and outbound IPs.

Database

  • Disabled seek compaction in leveldb by default.

GRPC

  • Increased protocol version, this requires all plugin definitions to update their communication dependencies.
  • Merged services to be served using the same server when possible.
  • Implemented a fast path for simple HTTP requests.
  • Removed duplicated message definitions.
  • Improved error reporting around invalid plugins.

Coreth

  • Optimized FeeHistory API.
  • Added protection to prevent accidental corruption of archival node trie index.
  • Added capability to restore complete trie index on best effort basis.
  • Rounded up fastcache sizes to utilize all mmap'd memory in chunks of 64MB.

Configs

  • Removed --inbound-connection-throttling-max-recent
  • Renamed --network-peer-list-size to --network-peer-list-num-validator-ips
  • Removed --network-peer-list-gossip-size
  • Removed --network-peer-list-staker-gossip-fraction
  • Added --network-peer-list-validator-gossip-size
  • Added --network-peer-list-non-validator-gossip-size
  • Removed --network-get-version-timeout
  • Removed --benchlist-peer-summary-enabled
  • Removed --peer-alias-timeout

Miscellaneous

  • Fixed error reporting when making Avalanche chains that did not manually specify a primary alias.
  • Added beacon utils for easier programmatic handling of beacon nodes.
  • Resolved the default log directory on initialization to avoid additional error handling.
  • Added support to the chain state module to specify an arbitrary new accepted block.

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Consensus

  • Introduced a new vertex type to support future Avalanche based network upgrades.
  • Added pending message metrics to the chain message queues.
  • Refactored event dispatchers to simplify dependencies and remove dead code.

PlatformVM

  • Added json encoding option to the platform.getTx call.
  • Added platform.getBlock API.
  • Cleaned up block building logic to be more modular and testable.

Coreth

  • Increased FeeHistory maximum historical limit to improve MetaMask UI on the C-Chain.
  • Enabled chain state metrics.
  • Migrated go-ethereum v1.10.16 changes.

Miscellaneous

  • Added the ability to load new VM plugins dynamically.
  • Implemented X-chain + P-chain wallet that can be used to build and sign transactions. Without providing a full node private keys.
  • Integrated e2e testing to the repo to avoid maintaining multiple synced repos.
  • Fixed proposervm height indexing check to correctly mark the indexer as repaired.
  • Introduced message throttling overrides to be used in future improvements to reliably send messages.
  • Introduced a cap on the client specified request deadline.
  • Increased the default leveldb open files limit to 1024.
  • Documented the leveldb configurations.
  • Extended chain shutdown timeout.
  • Performed various cleanup passes.

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Consensus

  • Added asynchronous processing of App.* messages.
  • Added height indexing support to the proposervm and rpcchainvm. If a node is updated to >=v1.7.5 and then downgraded to <v1.7.5, the user must enable the --reset-proposervm-height-index=true flag to ensure the proposervm height index is correctly updated going forward.
  • Fixed bootstrapping job counter initialization that could cause negative ETAs to be reported.
  • Fixed incorrect processing check that could log incorrect information.
  • Removed incorrect warning logs.

Miscellaneous

  • Added tracked subnets to be reported in calls to the info.peers API.
  • Updated gRPC implementations to use buf tooling and standardized naming and locations.
  • Added a consistent hashing implementation to be used in future improvements.
  • Fixed database iteration invariants to report ErrClosed rather than silently exiting.
  • Added additional sanity checks to prevent users from incorrectly configuring their node.
  • Updated log timestamps to include milliseconds.

Coreth

  • Added beta support for offline pruning.
  • Refactored peer networking layer.
  • Enabled cheap metrics by default.
  • Marked RPC call metrics as expensive.
  • Added Abigen support for native asset call precompile.
  • Fixed bug in BLOCKHASH opcode during traceBlock.
  • Fixed bug in handling updated chain config on startup.

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

The first startup of the C-Chain will take a few minutes longer due to an index update.

Consensus

  • Removed deprecated Snowstorm consensus implementation that no longer aligned with the updated specification.
  • Updated bootstrapping logs to no longer reset counters after a node restart.
  • Added bootstrapping ETAs for fetching Snowman blocks and executing operations.
  • Renamed the MultiPut message to the Ancestors message to match other message naming conventions.
  • Introduced Whitelist conflicts into the Snowstorm specification that will be used in future X-chain improvements.
  • Refactored the separation between the Bootstrapping engine and the Consensus engine to support Fast-Sync.

Coreth

  • Added an index mapping height to the list of accepted atomic operations at that height in a trie. Generating this index will cause the node to take a few minutes longer to startup the C-Chain for the first restart.
  • Updated Geth dependency to v1.10.15.
  • Updated networkID to match chainID.

VMs

  • Refactored platformvm rewards calculations to enable usage from an external library.
  • Fixed platformvm and avm UTXO fetching to not re-iterate the UTXO set if no UTXOs are fetched.
  • Refactored platformvm status definitions.
  • Added support for multiple address balance lookups in the platformvm.
  • Refactored platformvm and avm keystore users to reuse similar code.

RPCChainVM

  • Returned a 500 InternalServerError if an unexpected gRPC error occurs during the handling of an HTTP request to a plugin.
  • Updated gRPC server's max message size to enable responses larger than 4MiB from the plugin's handling of an HTTP request.

Configs

  • Added --stake-max-consumption-rate which defaults to 120,000.
  • Added --stake-min-consumption-rate which defaults to 100,000.
  • Added --stake-supply-cap which defaults to 720,000,000,000,000,000 nAVAX.
  • Renamed --bootstrap-multiput-max-containers-sent to --bootstrap-ancestors-max-containers-sent.
  • Renamed --bootstrap-multiput-max-containers-received to --bootstrap-ancestors-max-containers-received.
  • Enforced that --staking-enabled=false can not be specified on public networks (Fuji and Mainnet).

Metrics

  • All multi_put metrics were converted to ancestors metrics.

Miscellaneous

  • Improved corruptabledb error reporting by tracking the first reported error.
  • Updated CPU tracking to use the proper EWMA tracker rather than a linear approximation.
  • Separated health checks into readiness, healthiness, and liveness checks to support more fine-grained monitoring.
  • Refactored API client utilities to use a Context rather than an explicit timeout.

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Consensus

  • Introduced a notion of vertex conflicts that will be used in future X-chain improvements.

Coreth

  • Added an index mapping height to the list of accepted atomic transactions at that height. Generating this index will cause the node to take approximately 2 minutes longer to startup the C-Chain for the first restart.
  • Fixed bug in base fee estimation API that impacted custom defined networks.
  • Decreased minimum transaction re-gossiping interval from 1s to 500ms.
  • Removed websocket handler from the static vm APIs.

Database

  • Reduced lock contention in prefixDBs.

Networking

  • Increase the gossip size from 6 to 10 validators.
  • Prioritized Connected and Disconnected messages in the message handler.

Miscellaneous

  • Notified VMs of peer versions on Connected.
  • Fixed acceptance broadcasting over IPC.
  • Fixed 32-bit architecture builds for AvalancheGo (not Coreth).

This version is backwards compatible to v1.7.0. It is optional, but encouraged.

Coreth

  • Fixed memory leak in the estimate gas API.
  • Reduced the default RPC gas limit to 50,000,000 gas.
  • Improved RPC logging.
  • Removed pre-AP5 legacy code.

PlatformVM

  • Optimized validator set change calculations.
  • Removed storage of non-decided blocks.
  • Simplified error handling.
  • Removed pre-AP5 legacy code.

Networking

  • Explicitly fail requests with responses that failed to be parsed.
  • Removed pre-AP5 legacy code.

Configs

  • Introduced the ability for a delayed graceful node shutdown.
  • Added the ability to take all configs as environment variables for containerized deployments.

Utils

  • Fixed panic bug in logging library when importing from external projects.

This update is backwards compatible with v1.7.0. Please see the expected update times in the v1.7.0 release.

Coreth

  • Reduced fee estimate volatility.

Consensus

  • Fixed vote bubbling for unverified block chits.

This upgrade adds support for issuing multiple atomic transactions into a single block and directly transferring assets between the P-chain and the C-chain.

The changes in the upgrade go into effect at 1 PM EST, December 2nd 2021 on Mainnet. One should upgrade their node before the changes go into effect, otherwise they may experience loss of uptime.

All nodes should upgrade before 1 PM EST, December 2nd 2021.

Networking

  • Added peer uptime reports as metrics.
  • Removed IP rate limiting over local networks.

PlatformVM

  • Enabled AtomicTxs to be issued into StandardBlocks and deprecated AtomicBlocks.
  • Added the ability to export/import AVAX to/from the C-chain.

Coreth

  • Enabled multiple AtomicTxs to be issued per block.
  • Added the ability to export/import AVAX to/from the P-chain.
  • Updated dynamic fee calculations.

ProposerVM

  • Removed storage of undecided blocks.

RPCChainVM

  • Added support for metrics to be reported by plugin VMs.

Configs

  • Removed --snow-epoch-first-transition and snow-epoch-duration as command line arguments.

This version is backwards compatible to v1.6.0. It is optional, but encouraged.

Bootstrapping

  • Drop inbound messages to a chain if that chain is in the execution phase of bootstrapping.
  • Print beacon nodeIDs upon failure to connect to them.

Metrics

  • Added avalanche_{ChainID}_bootstrap_finished, which is 1 if the chain is done bootstrapping, 0 otherwise.

APIs

  • Added info.uptime API call that attempts to report the network's view of the local node.
  • Added observedUptime to each peer's result in info.peers.

Network

  • Added reported uptime to pong messages to be able to better track a local node's uptime as viewed by the network.
  • Refactored request timeout registry to avoid a potential race condition.

This version is backwards compatible to v1.6.0. It is optional, but encouraged.

Config

  • Added flag throttler-inbound-bandwidth-refill-rate, which specifies the max average inbound bandwidth usage of a peer.
  • Added flag throttler-inbound-bandwidth-max-burst-size, which specifies the max inbound bandwidth usage of a peer.

Networking

  • Updated peerlist gossiping to use the same mechanism as other gossip calls.
  • Added inbound message throttling based on recent bandwidth usage.

Metrics

  • Updated avalanche_{ChainID}_handler_gossip_{count,sum} to avalanche_{ChainID}_handler_gossip_request_{count,sum}.
  • Updated avalanche_{ChainID}_lat_get_accepted_{count,sum} to avalanche_{ChainID}_lat_accepted_{count,sum}.
  • Updated avalanche_{ChainID}_lat_get_accepted_frontier_{count,sum} to avalanche_{ChainID}_lat_accepted_frontier_{count,sum}.
  • Updated avalanche_{ChainID}_lat_get_ancestors_{count,sum} to avalanche_{ChainID}_lat_multi_put_{count,sum}.
  • Combined avalanche_{ChainID}_lat_pull_query_{count,sum} and avalanche_{ChainID}_lat_push_query_{count,sum} to avalanche_{ChainID}_lat_chits_{count,sum}.
  • Added avalanche_{ChainID}_app_response_{count,sum}.
  • Added avalanche_network_bandwidth_throttler_inbound_acquire_latency_{count,sum}
  • Added avalanche_network_bandwidth_throttler_inbound_awaiting_acquire
  • Added avalanche_P_vm_votes_won
  • Added avalanche_P_vm_votes_lost

Indexer

  • Added method GetContainerByID to client implementation.
  • Client methods now return []byte rather than string representations of a container.

C-Chain

  • Updated Geth dependency to 1.10.11.
  • Added a new admin API for updating the log level and measuring performance.
  • Added a new --allow-unprotected-txs flag to allow issuance of transactions without EIP-155 replay protection.

Subnet & Custom VMs

  • Ensured that all possible chains are run in --staking-enabled=false networks.

This version is backwards compatible to v1.6.0. It is optional, but encouraged.

Config Options

  • Updated the default value of --inbound-connection-throttling-max-conns-per-sec to 256.
  • Updated the default value of --meter-vms-enabled to true.
  • Updated the default value of --staking-disabled-weight to 100.

Metrics

  • Changed the behavior of avalanche_network_buffer_throttler_inbound_awaiting_acquire to only increment if the message is actually blocking.
  • Changed the behavior of avalanche_network_byte_throttler_inbound_awaiting_acquire to only increment if the message is actually blocking.
  • Added Block/Tx metrics on meterVMs.
    • Added avalanche_{ChainID}_vm_metervm_build_block_err_{count,sum}.
    • Added avalanche_{ChainID}_vm_metervm_parse_block_err_{count,sum}.
    • Added avalanche_{ChainID}_vm_metervm_get_block_err_{count,sum}.
    • Added avalanche_{ChainID}_vm_metervm_verify_{count,sum}.
    • Added avalanche_{ChainID}_vm_metervm_verify_err_{count,sum}.
    • Added avalanche_{ChainID}_vm_metervm_accept_{count,sum}.
    • Added avalanche_{ChainID}_vm_metervm_reject_{count,sum}.
    • Added avalanche_{DAGID}_vm_metervm_parse_tx_err_{count,sum}.
    • Added avalanche_{DAGID}_vm_metervm_get_tx_err_{count,sum}.
    • Added avalanche_{DAGID}_vm_metervm_verify_tx_{count,sum}.
    • Added avalanche_{DAGID}_vm_metervm_verify_tx_err_{count,sum}.
    • Added avalanche_{DAGID}_vm_metervm_accept_{count,sum}.
    • Added avalanche_{DAGID}_vm_metervm_reject_{count,sum}.

Coreth

  • Applied callTracer fault handling fix.
  • Initialized multicoin functions in the runtime environment.

ProposerVM

  • Updated block Delay in --staking-enabled=false networks to be 0.