This is an optional but recommended upgrade.
Compatibility Notes:
This version is backwards compatible with v1.15.0.
The plugin version has been updated to 47. All plugins must be updated to maintain compatibility.
Important: Nodes that have not been run since before the Helicon activation must first run v1.15.0 or v1.15.1 until the C-Chain has bootstrapped past Helicon. Alternatively, you can perform a full resync from an empty database.
This release continues the C-Chain's migration to the Snowman++ Avalanche Engine (SAE) by removing several deprecated components and cleaning up the codebase.
Breaking Changes for Node Operators:
- C-Chain Metrics: The transition prefix has been removed from all C-Chain metrics. For example, avalanche_evm_transition_sae_last_executed_height is now avalanche_evm_sae_last_executed_height. Please update your monitoring dashboards accordingly.
- C-Chain API Removal: The deprecated avax.getAtomicTxStatus RPC has been removed. Use avax.getAtomicTx instead, which fails if a transaction has not yet been accepted.
- C-Chain Config Removal: The deprecated eth-apis configuration option has been removed. Use the apis option to configure your API allowlist.
- P-Chain Config Removal: The pull-gossip-requests-per-validator option has been removed from the P-Chain config as it has had no effect since v1.14.2.
New Features & Improvements:
- Snowman Performance: The Snowman consensus engine has been improved to speed up block replication by changing its query strategy. This should allow lagging nodes to catch up more quickly.
- Platform API Enhancement: The platform.getCurrentValidators API now includes restakedValidationRewards and restakedDelegateeRewards fields. This allows for a clear distinction between a validator's own restaked rewards and the commissions earned from delegators, which is particularly useful for auto-renewed validators.
- New EVM Client: A new unified EVM client has been introduced (vms/evm/evmclient), combining standard Ethereum, Geth-specific, and Avalanche-specific methods for easier development.
Configuration and RPC Updates:
- C-Chain RPC Fix: The api-max-duration config now correctly enforces a timeout on all C-Chain RPC and WebSocket calls, improving node stability under heavy load. Previously, it only affected eth_call.
- C-Chain Configs:
- The api-max-blocks-per-request config has been re-introduced, allowing node operators to set a block range limit for eth_getLogs requests.
- A new state-history config has been added, allowing you to configure the amount of recent state guaranteed to be kept in memory on the C-Chain.
New Metrics for C-Chain:
New metrics have been added to provide deeper insight into gas execution and performance, helping with tuning the gas target. These include:
- avalanche_evm_sae_unsettled_gas_limit: Gauge for the worst-case gas of accepted but not-yet-settled blocks.
- avalanche_evm_sae_execution_gas_rate_headroom and others to monitor the skew between gas usage and wall-clock time.
This version is backwards compatible to [v1.15.0](https://github.com/ava-labs/avalanchego/releases/tag/v1.15.0). It is optional, but encouraged. This release updates the plugin version to `47`. All plugins must update to remain compatible. **Nodes that last ran before Helicon activated must first run v1.15.0 or v1.15.1 until the C-Chain has bootstrapped past Helicon, or resync from an empty database.** ## Features - Added `vms/evm/evmclient`, which combines standard Ethereum, Geth-specific, raw RPC, and Avalanche-specific EVM methods. - `eth_getLogs` now respects the node's C-Chain config option for `api-resolve-pending-to-last-executed`. ## APIs - The `avax.getAtomicTxStatus` C-Chain RPC, deprecated in v1.15.0, is removed. Use `avax.getAtomicTx`, which fails for a tx that has not been accepted. - Added `restakedValidationRewards` and `restakedDelegateeRewards` fields to `platform.getCurrentValidators` results for auto-renewed validators ## Configs - The `eth-apis` C-Chain option, deprecated in v1.15.0, is removed. The node now ignores it and logs a warning like any other unrecognized option. Set `apis` instead. - Removed `pull-gossip-requests-per-validator` from the P-Chain config. It has had no effect since v1.14.2. The node ignores the key if a config still sets it. - `api-max-blocks-per-request` was added back to the C-Chain config. ## Metrics - C-Chain metrics no longer include the `transition` prefix. For example, `avalanche_evm_transition_sae_last_executed_height` is now `avalanche_evm_sae_last_executed_height`. - Added `avalanche_evm_sae_unsettled_gas_limit` (gauge): worst-case gas of accepted blocks that have not yet settled. - Added `avalanche_evm_sae_execution_gas_rate_headroom` (histogram), `avalanche_evm_sae_execution_gas_rate_headroom_latest` (gauge), and `avalanche_evm_sae_tau_second_avg_executed_gas_per_second` (gauge) to monitor gas-vs-wall clock skew during execution, for tuning the gas target. ## Fixes - Fixed C-Chain `api-max-duration` only limiting `eth_call` since Helicon. It again limits every call to the `/rpc` and `/ws` endpoints, and a WebSocket call that times out doesn't close its connection. - Updated the minimum Go version from `1.26.8` to `1.26.10`. ## What's Changed - Remove duplicate upgrade identifier updates by @StephenButtolph in https://github.com/ava-labs/avalanchego/pull/6049 - Simplify task tags-create by @StephenButtolph in https://github.com/ava-labs/avalanchego/pull/6055 - Expose restaked validation and delegatee reward totals in rpc by @alejandro99so in https://github.com/ava-labs/avalanchego/pull/5983 - chore: tag releases from master and rewrite the release guide by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6050 - fix(scripts): fail fast on curl download errors by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6056 - Add unsettled gas metric by @StephenButtolph in https://github.com/ava-labs/avalanchego/pull/6059 - chore: prep next release v1.15.2 by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6051 - chore(upgrade): add the Igloo upgrade by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6057 - Ignore P-chain height check for post fork childs of pre fork parents if bootstrapping by @yacovm in https://github.com/ava-labs/avalanchego/pull/5958 - feat(vms/evm/sync): add retry support to the `network.Dispatcher` by @powerslider in https://github.com/ava-labs/avalanchego/pull/5654 - test(cchain): remove legacy coreth comparison tests by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6067 - docs(sae): Scaffold saevm README structure by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/5728 - [ci] Ensure consistent input caching by @maru-ava in https://github.com/ava-labs/avalanchego/pull/5964 - [ci] Reuse cached go modules in image builds by @maru-ava in https://github.com/ava-labs/avalanchego/pull/5981 - chore(cchain/state): Remove legacy references by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6081 - fix: check statedb error by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6082 - refactor(rpc): share JSON-RPC handler construction by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6086 - refactor(saevm): remove deprecated `eth-apis` config and `avax.getAtomicTxStatus` by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/5944 - fix(wallet): use the SAE C-Chain client for atomic txs by @owenwahlgren in https://github.com/ava-labs/avalanchego/pull/6022 - [ci] Ensure completeness of bazel input caching by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6088 - [ci] Remove codeql analysis job by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6117 - feat(sae): enforce a max duration on all C-Chain RPC and WebSocket calls by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6070 - reexecute: remove the pathdb benchmark preset by @rahulmutt-ava in https://github.com/ava-labs/avalanchego/pull/6124 - refactor(evm): move blackhole address to `vms/evm/blackhole` by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6125 - refactor(wallet/chain/c): use cchain/tx instead of coreth atomic types by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6119 - [ci] Cache Bazelisk downloads for go lint by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6065 - [ci] Rename bazel and go CI workflows for consistency by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6120 - refactor(cchain): Remove transitive customheader usages by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6127 - [ci] Skip required jobs for pull requests by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6111 - docs(info): fix stale examples and reply fields in service.md by @owenwahlgren in https://github.com/ava-labs/avalanchego/pull/6132 - [reexecution] remove timeout flag by @RodrigoVillar in https://github.com/ava-labs/avalanchego/pull/6138 - refactor(sae): register libevm extras from cchain package by @rahulmutt-ava in https://github.com/ava-labs/avalanchego/pull/6091 - ci: auto-add team-authored issues and PRs to project boards by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/5648 - feat(saevm/client): Wrap ethclient by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6085 - [ci] Cache the QEMU setup image from master builds by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6140 - [e2e] Run a single post-suite bootstrap check for a parallel run by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6134 - Remove C-Chain transitionvm wrapper by @StephenButtolph in https://github.com/ava-labs/avalanchego/pull/6064 - test(sae): Wait on ws requests by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6144 - Bump klauspost version by @joshua-kim in https://github.com/ava-labs/avalanchego/pull/6145 - reexecute: run the C-Chain benchmark with saevm by @rahulmutt-ava in https://github.com/ava-labs/avalanchego/pull/6083 - platformvm: fix request and response shapes in service.md by @owenwahlgren in https://github.com/ava-labs/avalanchego/pull/6130 - Fix restaked reward fields release docs from v1.15.1 to v1.15.2 by @owenwahlgren in https://github.com/ava-labs/avalanchego/pull/6129 - platformvm: document restaked reward fields in getCurrentValidators by @owenwahlgren in https://github.com/ava-labs/avalanchego/pull/6128 - [ci] Switch from Blacksmith to GitHub 4-core runners by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6143 - [docs] Clarify Go toolchains and dependency cache boundaries by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6146 - Prevent avalanche bootstrapper from linearizing twice by @yacovm in https://github.com/ava-labs/avalanchego/pull/6011 - [ci] Pin add-to-project to skip existing project items by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6154 - saevm/cchain: move C-Chain service.md from coreth and update for SAE by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6150 - feat(network/p2p): let a tracking client own the peer scoring lifecycle by @powerslider in https://github.com/ava-labs/avalanchego/pull/5980 - [bazel] Extend vms/saevm/cchain timeout to account for heavy tests by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6168 - the greatest day: delete (almost all of) graft/coreth by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6149 - refactor(p2p): remove `Client.AppRequestAny` and `NewClient` sampler by @powerslider in https://github.com/ava-labs/avalanchego/pull/6153 - [ci] Assign team-authored PRs to their author on open by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6166 - chore(tests): drop coreth-only C-Chain config defaults by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6161 - refactor(p2p): move `PeerTracker` into a `peertracker` package by @powerslider in https://github.com/ava-labs/avalanchego/pull/6172 - saevm: own the test fixture chain params and drop coreth-only helpers by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6157 - chore(graft/coreth): prune unreachable precompile code by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6155 - chore(sae): Delete testing TODO by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6180 - chore(saevm): drop unused tagliatelle nolint by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6181 - platformvm: fix config.md and remove unused pull-gossip-requests-per-validator by @owenwahlgren in https://github.com/ava-labs/avalanchego/pull/6131 - docs: fix stale coreth references by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6156 - chore(acp176): delete fee logic only coreth used by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6158 - [ci] Shorten C-Chain re-execution job names by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6169 - refactor(saevm): drop graft/evm/utils from cchain by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6087 - feat: tau-second rolling average gas throughput metric by @ARR4N in https://github.com/ava-labs/avalanchego/pull/6122 - Fine tune snowman block gossip source metric by @yacovm in https://github.com/ava-labs/avalanchego/pull/6126 - chore(fx): delete Cost methods only coreth used by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6159 - test(vms/evm/sync): wait for peer scoring before asserting it by @powerslider in https://github.com/ava-labs/avalanchego/pull/6205 - Update to Go v1.26.10 by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6217 - [ci] Run failure handlers only after setup succeeds by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6171 - [ci] Coalesce simple checks into a single job by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6193 - Snowman performance improvements by @yacovm in https://github.com/ava-labs/avalanchego/pull/6197 - feat: add block range bound for `eth_getLogs` by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6021 - chore(graft/evm): delete unused code by @JonathanOppenheimer in https://github.com/ava-labs/avalanchego/pull/6218 - [ci] Document how to validate scheduled job changes before merge by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6219 - [bazel] Extend e2e testing to the full suite by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6026 - [ci] Skip monitoring of darwin e2e-smoke job by @maru-ava in https://github.com/ava-labs/avalanchego/pull/6194 - feat(cchain): state-history config by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6147 - test: Skip flaky test by @alarso16 in https://github.com/ava-labs/avalanchego/pull/6224 **Full Changelog**: https://github.com/ava-labs/avalanchego/compare/v1.15.1...v1.15.2