This release schedules the activation of the Helicon network upgrade at 11 AM ET (3 PM UTC) on Tuesday, September 22nd, 2026 on Mainnet.
All Mainnet nodes must upgrade before 11 AM ET, September 22nd 2026.
This release updates the plugin version to 46. All plugins must update to remain compatible.
Features
Helicon activates the following Avalanche Community Proposals (ACPs):
- ACP-194 C-Chain Async Execution
- ACP-236 Auto-Renewed Staking
- ACP-267 Validator Uptime Requirements Increase
- ACP-273 Reduce Minimum Validator Staking Duration
- ACP-283 Dynamic Minimum C-Chain Gas Price
- ACP-285 Reduce Minimum Consumption Rate
Other features:
- Subnet-EVM can set the initial ACP-226 minimum block delay at genesis via
InitialMinDelayMSin the chain config.
C-Chain State Sync
C-Chain state sync is not supported immediately around the Helicon activation. A node that is state syncing when Helicon activates may stall.
After Helicon activates, state sync has the following limitations:
- Restarting a node mid-state sync will restart the sync from the beginning.
- Disabling state sync after partially state syncing may result in an unrecoverable
FATALerror. - If
state-schemeisfirewood, the node cannot state sync. A new Firewood node on Mainnet or Fuji MUST setstate-sync-enabledtofalseor will shut down with aFATALerror. - On custom networks, a new node starts on the pre-Helicon Coreth VM and bootstraps by executing all blocks.
If encountering one of these FATAL errors, the only way to recover is by deleting the database and restarting.
APIs
C-Chain RPCs
-
Named blocks under SAE:
pendingis the last executed block by default. Withapi-resolve-pending-to-last-executedset tofalse,pendingis the last accepted block.latestis the last executed block.safeandfinalizedare both the last settled block.
-
The
avax.getAtomicTxStatusRPC is deprecated. Useavax.getAtomicTx. -
The
admin,warp, andpersonalAPI namespaces are removed. -
The
eth_accounts,eth_coinbase, andeth_etherbaseRPCs are removed. -
The following
debugRPCs are removed:debug_dumpBlockdebug_preimagedebug_getBadBlocksdebug_accountRangedebug_storageRangeAtdebug_getModifiedAccountsByNumberdebug_getModifiedAccountsByHashdebug_getAccessibleState
If you rely on any of these
debugRPCs, open an issue describing your use case.
Metrics
- Histogram
avalanche_snowman_consensus_latencieshas 8 buckets instead of 4, each a second wide. - Added
avalanche_evm_transition_sae_last_executed_heightandavalanche_evm_transition_sae_last_settled_heightgauges, exposing SAE execution and settlement heights. - Added SAE execution-pressure metrics:
avalanche_evm_transition_sae_execution_queue_duration_seconds(histogram): time from a block's acceptance into the execution queue until its execution completes.avalanche_evm_transition_sae_execute_block_duration_seconds(histogram): wall time to execute a single block, including the state commit and post-execution work.avalanche_evm_transition_sae_execution_queue_blocks(gauge): number of accepted blocks that have not yet completed execution.avalanche_evm_transition_sae_execution_queue_gas_limit(gauge): worst-case gas of accepted blocks that have not yet completed execution. Worst-case gas is the sum of transaction gas limits and end-of-block operation gas.avalanche_evm_transition_sae_executed_gas_charged_total(counter): cumulative gas charged by executed blocks. Charged gas is the sum of transaction gas used and end-of-block operation gas.avalanche_evm_transition_sae_executed_gas_limit_total(counter): cumulative worst-case gas of executed blocks.
- Added
avalanche_evm_transition_sae_in_memory_blocks(gauge): number of SAE blocks still live in memory (created but not yet garbage collected). - Added
avalanche_evm_transition_sae_accepted_gas_limit_total(counter): cumulative worst-case gas of blocks accepted into the execution queue; the acceptance-side counterpart ofexecuted_gas_limit_total. - Added SAE gas-time and pricing metrics:
avalanche_evm_transition_sae_last_executed_gas_time_seconds(gauge): gas time reached by the latest executed block, as a Unix timestamp.avalanche_evm_transition_sae_gas_time_wall_time_gap_seconds(gauge): gas time minus wall time when the latest block finished executing. A negative value means gas time lags wall time.avalanche_evm_transition_sae_worst_case_base_fee(gauge): worst-case base fee admitted by consensus for the latest executed block.avalanche_evm_transition_sae_executed_base_fee(gauge): base fee realized by execution of the latest executed block.avalanche_evm_transition_sae_worst_case_gas_excess(gauge): worst-case gas excess simulated for the latest executed block.avalanche_evm_transition_sae_executed_gas_excess(gauge): gas excess realized by execution of the latest executed block.avalanche_evm_transition_sae_gas_target(gauge): ACP-176 gas target in force as of the latest executed block.
- Added
avalanche_evm_transition_cchain_min_block_delay_seconds(gauge): ACP-226 minimum block delay currently in force, taken from the most recently executed block. - Renamed Coreth and Subnet-EVM state-sync p2p metrics:
avalanche_{vmName}_eth_net_tracked_peers->avalanche_{vmName}_sdk_sync_peer_tracker_num_tracked_peersavalanche_{vmName}_eth_net_responsive_peers->avalanche_{vmName}_sdk_sync_peer_tracker_num_responsive_peersavalanche_{vmName}_eth_net_average_bandwidth->avalanche_{vmName}_sdk_sync_peer_tracker_average_bandwidth
- Added Firewood state-sync proof metrics. All carry the label
proof_type="range|change". The duration histograms also carry the labelresult="success|failure".- Server-side histograms:
avalanche_{vmName}_sync_server_sync_proof_generation_seconds,avalanche_{vmName}_sync_server_sync_generated_proof_size_bytes, andavalanche_{vmName}_sync_server_sync_proof_shrink_new_key_limit - Client-side histograms:
avalanche_{vmName}_sync_firewood_sync_proof_verification_seconds,avalanche_{vmName}_sync_firewood_sync_proof_commit_seconds, andavalanche_{vmName}_sync_firewood_sync_received_proof_size_bytes - Client-side gauge:
avalanche_{vmName}_sync_firewood_sync_request_key_limit
- Server-side histograms:
NOTE: {vmName} is evm for Coreth and subnetevm for Subnet-EVM. The sae and cchain metrics exist only on the C-Chain.
Configs
New
helicon-min-stake-duration(only on local/custom networks)min-price-targetfor C-Chainapisfor C-Chain. Lists the JSON-RPC APIs that the node serves. See the C-Chain config reference for the names and defaults.api-resolve-pending-to-last-executedfor C-Chain. Defaults totrue, which resolvespendingto the last executed block. Set it tofalseto resolvependingto the last accepted block.
Changed
state-sync-idsin Coreth and Subnet-EVM configs is now a JSON array of node IDs (["NodeID-..."]) instead of a comma-separated string.api-max-durationfor C-Chain accepts only a duration string (for example"30s") after Helicon. The node rejects a number.0means no limit.state-sync-enabledfor C-Chain defaults totrueafter Helicon.commit-intervalfor C-Chain must be4096on Mainnet and Fuji after Helicon.
Deprecated in C-Chain
eth-apisis deprecated. The node maps it ontoapisand logs a warning. If the config also setsapis, the node ignoreseth-apis. Names whose methods no longer exist, such asadminanddebug, log a warning. Any other unknown name is a fatal error. The next release will removeeth-apis.
Removed from C-Chain
After Helicon activates, the C-Chain ignores the following options. The node logs a warning for each unrecognized option and starts.
skip-upgrade-checkadmin-api-enabledadmin-api-dirwarp-api-enabledcontinuous-profiler-dircontinuous-profiler-frequencycontinuous-profiler-max-filesrpc-gas-cap(fixed at 50,000,000)rpc-tx-fee-cap(fixed at 100 AVAX)trie-dirty-cachetrie-dirty-commit-targettrie-prefetcher-parallelismpreimages-enabledsnapshot-waitsnapshot-verification-enabledaccepted-queue-limitpopulate-missing-tries-parallelismprune-warp-db-enabledhistorical-proof-query-windowmetrics-expensive-enabledprice-options-slow-fee-percentageprice-options-fast-fee-percentageprice-options-max-tiptx-pool-price-limittx-pool-price-bumptx-pool-lifetimews-cpu-refill-ratews-cpu-max-storedallow-unfinalized-queriesallow-unprotected-tx-hasheskeystore-directorykeystore-external-signerkeystore-insecure-unlock-allowedpush-gossip-percent-stakepush-gossip-num-validatorspush-gossip-num-peerspush-regossip-num-validatorspush-regossip-num-peerspush-gossip-frequencypull-gossip-frequencyregossip-frequencylog-levellog-json-formatoffline-pruning-bloom-filter-sizemax-outbound-active-requestsstate-sync-skip-resumestate-sync-server-trie-cachestate-sync-commit-intervalstate-sync-min-blocksstate-sync-request-sizeinspect-databaseaccepted-cache-sizestate-historyskip-tx-indexinghttp-body-limitbatch-response-max-sizeoffline-pruning-enabledoffline-pruning-data-directorypopulate-missing-triestransaction-historytx-pool-account-queuetx-pool-global-queueapi-max-blocks-per-request
Fixes
- Updated the minimum Go version from
1.25.8to1.25.10. - Fixed
callTracerfailing withincorrect number of top-level callson transactions where a precompile makes an outbound call (ava-labs/libevm#303). - ProposerVM
ERRORlogs caused by the P-Chain database closing during shutdown are nowWARN. - Fixed Subnet-EVM nodes failing to restart after a state upgrade activates when the upgrade config contains
"storage": {},"code": "0x", or"balanceChange": "0". - Removed the block acceptance time health check that
v1.14.2added. The check could only recover after the node accepted new blocks. Some deployments send traffic only to healthy nodes, so a failed check could never recover. - Fixed
SizedCacheundercounting size when overwriting a key, which let caches exceed their configured limits.
What's Changed
- feat: add reconstructed types by @RodrigoVillar in #5114
- [nix] Allow task execution without
nix developby @maru-ava in #5119 - P-Chain height progress subscription for subnets by @yacovm in #5110
- Add Simplex Handler to Engine Interface by @samliok in #5059
- Add PathDB TrieWriter by @alarso16 in #5143
- Enable native histograms for testing by @Elvis339 in #5165
- chore(reexecution): add pathdb config by @RodrigoVillar in #5141
- Suppress false container exit failures from early SIGTERM in Antithesis by @DracoLi in #5096
- [ci] Update rpm builder script for podman compatibility by @maru-ava in #5168
- chore: skip flaky TestTransactionSkipIndexing by @RodrigoVillar in #5171
- [migrate-strevm][1] Add tooling enabling repo migration by @JonathanOppenheimer in #5147
- Remove Chain Mocks by @samliok in #5126
- refactor: use predefined hashdb test by @RodrigoVillar in #5164
- feat: enable deferred persistence for archival nodes by @RodrigoVillar in #5115
- Remove vms/Manager Mocks by @samliok in #5198
- build(deps): bump go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp from 1.22.0 to 1.43.0 by @dependabot[bot] in #5210
- Remove Router Mocks by @samliok in #5190
- Remove unexpected subnet-evm NewHTTPHandler implementation by @StephenButtolph in #5218
- Sync Newest Simplex Updates by @samliok in #5174
- remove timeout.Manager mocks by @samliok in #5192
- style: enforce
context-as-argumentordering, removeerrorlint, un-interface coreth client by @JonathanOppenheimer in #5224 - style: add yamllinter by @JonathanOppenheimer in #5219
- style: ban
require.Fail/require.FailNow, demotet.Fatalto warning by @JonathanOppenheimer in #5225 - fix(sync): resolve shutdown deadlock in code queue during Firewood state sync by @powerslider in #5130
- [migrate-strevm][2] Add
vms/saevmby @JonathanOppenheimer in #5148 - [migrate-strevm][3] rewrite strevm imports by @JonathanOppenheimer in #5149
- [migrate-strevm][4] Cleanup go mod configuation by @JonathanOppenheimer in #5150
- [migrate-strevm][5] bazelify strevm repository by @JonathanOppenheimer in #5151
- [migrate-strevm][6] migrate CI by @JonathanOppenheimer in #5153
- [migrate-strevm][7] lint by @JonathanOppenheimer in #5155
- [migrate-strevm][8] mark
TestAcceptBlockas flaky and skip ingo testby @JonathanOppenheimer in #5207 - Allow arbitrary firewood commit interval by @RodrigoVillar in #5234
- test: enable fuzz testing for graft directories by @JonathanOppenheimer in #5281
- Remove **/testdata from .gitignore by @ceyonur in #5285
- test(sae): Ignore filters subscription from goleak by @alarso16 in #5286
- Cleanup getHeaderExtra in hooktest.Stub by @StephenButtolph in #5295
- Remove qemu mirror from CI by @StephenButtolph in #5294
- refactor(gastime): Remove hooks imports by @alarso16 in #5288
- Add Claude code review workflow for PRs by @DracoLi in #5104
- bazel: enforce graft visibility with gazelle defaults by @ARR4N in #5304
- test(sae): Address legacypool race by @alarso16 in #5292
- fix: Commit on reprocess for archival by @alarso16 in #5301
- test(firewood): Fix fuzz test by @alarso16 in #5320
- test(saevm): Another goleak ignore by @alarso16 in #5324
- build(deps): bump github.com/moby/spdystream from 0.2.0 to 0.5.1 by @dependabot[bot] in #5296
- build(sae): add
testonlyattributes by @ARR4N in #5305 - test: remove deprecated import violations test by @JonathanOppenheimer in #5313
- Add logging to merklesync by @alarso16 in #4948
- sae: Add C-chain custom tx serialization by @StephenButtolph in #5307
- chore: bump Firewood to v0.4.0 by @RodrigoVillar in #5327
- sae: Smarter tx fuzzing by @StephenButtolph in #5328
- test: support
debug_getRaw*RPCs by @JonathanOppenheimer in #5284 - fix: skip atomic UTXO verification during archival reexecution by @RodrigoVillar in #5318
- Init Simplex Blacklist In Genesis Block by @samliok in #5317
- sae: Implement custom tx
AsOpby @StephenButtolph in #5308 - Cache BLS operations in Simplex fuzz tests by @yacovm in #5321
- sae: Implement AtomicRequests on custom txs by @StephenButtolph in #5325
- sae: Implement
Tx.TransferNonAVAXby @StephenButtolph in #5329 - sae: Implement SanityCheck on custom txs by @StephenButtolph in #5337
- refactor(firewood): Use libevm registration for state.Database creation by @alarso16 in #5314
- [bazel] Run all jobs on linux and darwin by @maru-ava in #5122
- [ci] Simplify required job maintenance with workflow-level aggregators by @maru-ava in #5344
- ci: shard nightly fuzz workflow by package by @JonathanOppenheimer in #5319
- perf: only hash once per query requiring reexecution by @RodrigoVillar in #5332
- [ci] Switch from custom to default arm64 runners by @maru-ava in #5343
- [ci]: Upgrade all workflows to use NodeJS 24 by @maru-ava in #5348
- ci: remove redundant MerkleDB fuzz workflow by @JonathanOppenheimer in #5349
- [ci] Use versioned GitHub Actions runners instead of
-latestby @maru-ava in #5347 - Add ACP-224 Fee Manager Precompile by @JonathanOppenheimer in #4872
- Set VM Preference on Verify in Simplex by @samliok in #5335
- feat: add pathdb 33-33.5m scheduled benchmark by @RodrigoVillar in #5339
- sae: Move all testing to _test package by @StephenButtolph in #5355
- [ci] Extend start-kind-cluster timeout and improve failure legibility by @maru-ava in #5350
- sae: Implement Tx.VerifyCredentials by @StephenButtolph in #5338
- ci: pass GITHUB_TOKEN to claude-code-action by @JuanLeon2 in #5358
- Update to Go v1.25.10 by @alarso16 in #5361
- chore: share
releases.mdownership by @JonathanOppenheimer in #5363 - Downgrade proposervm ErrClosed log to Warn during shutdown by @DracoLi in #5098
- Remove some unnecessary interfaces in
peerby @alarso16 in #5345 - sae: Implement txpool by @StephenButtolph in #5357
- sae: Prevent logging after Txpool.Close by @StephenButtolph in #5366
- Widen measurement of latencies for consensus accept latency by @yacovm in #5367
- refactor(graft/network): use p2p.PeerTracker instead of duplicate by @powerslider in #5341
- Use
lock.Condfor context-aware waiting by @alarso16 in #5346 - sae: Add Cross-Chain State by @StephenButtolph in #5370
- Add coverage for
CurrentStakersinterface by @joshua-kim in #5040 - chore: fix the inconsistent function name in the comment by @sunnyraindy in #4484
- test: skip flaky TestSubscriptions by @JonathanOppenheimer in #5389
- chore: bump Firewood to v0.5.0 by @RodrigoVillar in #5393
- docs: update new echo/dispatch rollout procedure by @JonathanOppenheimer in #5395
- Allow disabling handler gossip ticker via gossipFrequency=0 by @samliok in #5365
- Implement Warp intrinsic gas via libevm hooks by @ceyonur in #5287
- Fix bootstrapping bug when promoting pending delegators by @joshua-kim in #5392
- [ci] Ensure useful output when a required job fails by @maru-ava in #5396
- [bazel] Keep module lock in sync with metadata by @maru-ava in #5388
- [bazel] Check for duplicate go_library defs in BUILD.bazel files by @maru-ava in #5409
- fix(evmstate): clear firewood state on error by @alarso16 in #5127
- Combine
merkle/syncp2p handlers by @alarso16 in #5368 - fix(sae): Can't parse invalid block body by @alarso16 in #5382
- test: stop fuzzing merkledb by @JonathanOppenheimer in #5414
- [docs] Add rpm packaging docs by @maru-ava in #5374
- chore: log if the Firewood database is empty by @RodrigoVillar in #5418
- [ci] Refactor RPM nfpm configs for reuse by @PlatCore in #5179
- test(sae): Race in block source test by @alarso16 in #5421
- feat: add gastime to header by @alarso16 in #5312
- refactor: move test logger by @alarso16 in #5434
- Support setting staking info in the same diff a validator is added by @joshua-kim in #5095
- ACP-236 (1): Add validator metadata fields with codec v2 and Staker separation by @joshua-kim in #5381
- sae: Implement minimal C-Chain VM by @StephenButtolph in #5386
- refactor: utilize table tests for Firewood archival queries by @RodrigoVillar in #5425
- ACP-236 (2): Add transaction types, visitor stubs, and codec registration by @rrazvan1 in #5201
- feat: support CopyTrie() for reconstructed tries by @RodrigoVillar in #5440
- [bazel] Avoid installing nix for check-metadata and unit test jobs by @maru-ava in #5484
- sae: Introduce cross-chain tx gossip by @StephenButtolph in #5408
- ACP-236 (3): Add wallet support for auto-renewed validator transactions by @rrazvan1 in #5202
- feat: add SAE last executed and last settled height metrics by @JonathanOppenheimer in #5362
- fix: commit atomic trie on shutdown by @JonathanOppenheimer in #5445
- Revert state.Database registration by @alarso16 in #5431
- feat(saevm): consolidate ACP fee and delay math into
dynamicpackage by @powerslider in #5481 - chore: bump Firewood to v0.6.0 by @RodrigoVillar in #5501
- refactor(gastime): Accept baseFee in
New()by @alarso16 in #5485 - fix(vms/saevm/cchain): Verify SAE block ext data hashes by @rahulmutt-ava in #5447
- feat(sae): enforce ACP-194 minimum gas consumption floor by @powerslider in #5424
- feat: add SAE execution pressure metrics by @JonathanOppenheimer in #5500
- Clarify Claude PR review prompt and fix head checkout by @DracoLi in #5364
- ACP-236 (4): Add standard execution and state persistence for auto-renewed validators by @rrazvan1 in #5203
- feat(saevm): add accepted worst-case gas throughput metric by @JonathanOppenheimer in #5534
- feat(sae): add in_memory_blocks gauge by @JonathanOppenheimer in #5535
- feat(saevm): Implement Warp package by @StephenButtolph in #5523
- fix(saevm): reject C-Chain blocks with a non-zero version by @JonathanOppenheimer in #5543
- Create wrapper for syncable VM by @alarso16 in #5480
- [nix] Upgrade to 26.05 by @maru-ava in #5551
- fix(saevm): GetBlock drops unexpected error by @StephenButtolph in #5547
- feat(saevm): Coreth compatible genesis by @StephenButtolph in #5536
- test: expand stateful tests to test all stateful RPCs by @JonathanOppenheimer in #5283
- feat(cchain): preserve millisecond block timestamps by @rahulmutt-ava in #5524
- fix(saevm): Remove flaky bloom inclusion check by @StephenButtolph in #5562
- fix(sync/code): clean up to-fetch markers regardless of inFlight state by @powerslider in #5356
- Implement the deprecated getAtomicTxStatus method by @StephenButtolph in #5564
- feat(saevm): Support parsing pre-AP1 blocks. by @StephenButtolph in #5565
- feat(saevm): Remove API ordering assumptions from e2e tests by @StephenButtolph in #5566
- Make lint-all safe to execute by @maru-ava in #5552
- feat(graft/coreth): add ACP-283
MinPriceExponentheader field by @powerslider in #5437 - feat(saevm): Update libevm to support libevm APIs by @StephenButtolph in #5572
- feat(cchain): encode and decode the settled block marker by @rahulmutt-ava in #5573
- Clarify accepted_blocks_slot metric by @yacovm in #5579
- feat(saevm): Integrate Warp by @StephenButtolph in #5514
- feat(vms/saevm/cchain): wire
MinPriceExponentinto the SAE block lifecycle by @powerslider in #5441 - refactor(eth): remove in-memory HashDB from reexecution by @RodrigoVillar in #5487
- feat(vms/saevm/cchain): parse and wire minimal operator config by @JonathanOppenheimer in #5574
- [docs] Add repository documentation guidelines by @maru-ava in #5373
- feat(saevm): Disallow empty blocks by @StephenButtolph in #5597
- feat(vms/saevm/cchain): implement the ACP-176 dynamic gas target by @JonathanOppenheimer in #5587
- [ci] Cache nix flake to minimize infra flakes by @maru-ava in #5588
- feat: populate SAE genesis header fields in coreth and SAE C-chain genesis by @JonathanOppenheimer in #5589
- Cap coreth unit tests to Granite by @StephenButtolph in #5602
- Move ExtDataGasUsed from syntactic to semantic verification by @StephenButtolph in #5603
- Add SAE factory with state-sync stubs by @StephenButtolph in #5604
- fix(ci): checkout before local install-nix in firewood-chaos-test by @RodrigoVillar in #5606
- [docs] Add an index to docs/documentation-guidelines.md by @maru-ava in #5600
- Add e2e test with scheduled upgrade by @StephenButtolph in #5605
- [bazel] Cache external dependencies to minimize infra flakes by @maru-ava in #5525
- Add C-Chain EVM workload to Antithesis tests by @DracoLi in #5228
- chore: bump firewood-go-ethhash/ffi to v0.7.0 by @RodrigoVillar in #5609
- feat(x/blockdb): prevent multi-process access via file locks by @DracoLi in #5420
- ACP-236 (5): Add proposal execution for auto-renewed validators by @rrazvan1 in #5204
- Remove
MarkSynchronousby @alarso16 in #5555 - feat(vms/saevm/cchain): wire allow-unprotected-txs config by @JonathanOppenheimer in #5596
- feat(saevm): wire batch-request-limit C-Chain config by @JonathanOppenheimer in #5607
- Add RewardAutoRenewedValidatorTx issuing in block builder by @rrazvan1 in #5206
- feat: Updating defaultMinStakingDuration to 48h post HeliconRelease ONLY by @SavalaBee in #5299
- Remove last synchronous from
NewVMby @alarso16 in #5556 - feat(sae): Store last accepted hash by @alarso16 in #5544
- chore(deps): bump golang.org/x/net from 0.52.0 to 0.55.0 by @dependabot[bot] in #5628
- chore(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 in /graft/subnet-evm by @dependabot[bot] in #5633
- sae: Add README.md to describe C-Chain wrapper design by @StephenButtolph in #5342
- feat(subnet-evm): allow genesis to seed ACP-226 minimum block delay by @containerman17 in #5593
- Remove unused variable NetworkHRPToNetworkID by @yacovm in #5621
- feat(sae): Implement TransitionVM by @StephenButtolph in #5563
- Increase P-chain uptime requirement to 90% (ACP-267) by @DracoLi in #5531
- ACP-236: Adding E2E tests by @rrazvan1 in #5106
- [ci] Extract S3 upload into reusable workflow + publish RPMs to S3 by @PlatCore in #5412
- [ci] Add GPG-signed DEB packages by @PlatCore in #5180
- Schedule Helicon in the antithesis tests by @StephenButtolph in #5649
- Increase SAE execution log level by @StephenButtolph in #5653
- feat(firewood): Implementation for SAE by @alarso16 in #5433
- feat(cchain): support EIP-4788 parent beacon block root by @JonathanOppenheimer in #5586
- feat(cchain): enforce ACP-226 min block delay by @rahulmutt-ava in #5631
- feat(saevm): burn base fee to blackhole after each transaction by @JonathanOppenheimer in #5619
- Reduce min consumption rate (ACP-285) by @DracoLi in #5527
- feat(saedb): Improve Config by @alarso16 in #5479
- Remove unnecessary header copies by @StephenButtolph in #5660
- Remove ACP-176 state space from header.Extra in Helicon by @StephenButtolph in #5659
- fix(cchain): throttle WaitForEvent to avoid PendingTxs busy loop by @JonathanOppenheimer in #5650
- perf(saedb): check cache size HashDB by @alarso16 in #5495
- feat(saevm): add SAE gas-time and pricing state metrics by @JonathanOppenheimer in #5634
- Add min delay metrics by @rahulmutt-ava in #5635
- fix(saevm/cchain): activate warp precompile at Durango by @JonathanOppenheimer in #5668
- chore: change finalize comment in saeexec by @JonathanOppenheimer in #5674
- feat(sae): Add allow-missing-tries by @JonathanOppenheimer in #5640
- feat(sae): Add Firewood to VM by @alarso16 in #5655
- test(saevm/sae): expect debug_trace- to honor JS tracer configs by @JonathanOppenheimer in #5669
- Remove stale TODO around atomic state by @StephenButtolph in #5677
- Update
--helicon-min-stake-durationby @StephenButtolph in #5678 - Silence noisy SAE log by @StephenButtolph in #5679
- fix(tags-push): Only push tags one-at-a-time by @StephenButtolph in #5684
- fix(sae): Prevent statedb concurrent access in Txpool by @StephenButtolph in #5688
- refactor(hook): Move blackhole op to libevm by @alarso16 in #5682
- fix(sae): Executor deadlock with duplicate verifications by @StephenButtolph in #5690
- test(cchain): Unblock WaitForEvent on slow tests by @alarso16 in #5724
- test(saevm): warptest options, saetest proof verifier, typed RPC test args by @JonathanOppenheimer in #5720
- refactor(sae): Separate network by @alarso16 in #5616
- feat(saevm): bound block size to the P2P message size limit by @JonathanOppenheimer in #5570
- feat(saevm): set a minimum atomic tx gas based on serialized size by @JonathanOppenheimer in #5549
- feat: support debug_intermediateRoots for Firewood by @RodrigoVillar in #5442
- feat(vms/evm/sync): add protobuf wire types and a network client by @powerslider in #5352
- docs: fix run_task.sh script name in README by @Olexandr88 in #5087
- chore(deps): bump google.golang.org/grpc from 1.80.0 to 1.82.1 by @dependabot[bot] in #5740
- Log SAE configs during startup by @StephenButtolph in #5751
- test(sae): Simplify big recovery test by @alarso16 in #5735
- Refactor staker struct constructors by @rrazvan1 in #5675
- fix(network): apply ACP-267 uptime threshold by @DracoLi in #5734
- Randomize Helicon activation time during Antithesis runs by @StephenButtolph in #5730
- chore(sae): Improve observability around startup by @alarso16 in #5753
- fix(core): Potential crash loop at SAE upgrade by @alarso16 in #5755
- fix(bootstrapmonitor): resume tests across restarts when the build is unchanged by @JonathanOppenheimer in #5689
- fix(sae/rpc): restore evicted blocks for state, receipt, and tracing RPCs by @JonathanOppenheimer in #5721
- docs(skills): add shared jj and land-prs skills by @rkuris in #5419
- fix(bazel): pin macOS CC to the host clang and exclude .claude from Gazelle by @JonathanOppenheimer in #5759
- feat(sae/rpc): option to map requests for "pending" block to "latest" by @ARR4N in #5757
- [docs] Make task maintenance expectations explicit by @maru-ava in #5671
- build: bump libevm to
db6d70f2748eby @ARR4N in #5767 - Fix SAE metrics by @StephenButtolph in #5760
- fix(sae/rpc): replay synchronous (pre-SAE) blocks with their executed base fee by @JonathanOppenheimer in #5622
- feat(statesync): Implement basic state summary by @alarso16 in #5578
- chore: delete .editorconfig by @JonathanOppenheimer in #5770
- feat(cchain/state): bonus blocks by @alarso16 in #5641
- feat(vms/evm/sync/handlers): add generic proto handler shell by @powerslider in #5400
- docs(subnet-evm): clarify validator uptime is relative to the callee node by @alejandro99so in #5777
- [agents] Add simplified-technical-english skill by @maru-ava in #5780
- [docs] Make CI maintenance expectations explicit by @maru-ava in #5672
- [ci] Ensure the use of a nix shell for jobs using install-nix by @maru-ava in #5676
- refactor(saevm): expose worst-case gas and base fee on the block by @JonathanOppenheimer in #5771
- fix(sae): Allow
BLOCKHASHop code on recovery by @alarso16 in #5772 - feat(sae): abstract unwinding of staged construction upon error by @ARR4N in #5792
- refactor(sae): simplify
NewVM()by @ARR4N in #5793 - Add simple tracing example by @StephenButtolph in #5794
- refactor(sae): separate canonical post-execution hooks by @JonathanOppenheimer in #5800
- feat(statesync): Add cchain state summary by @alarso16 in #5620
- Revert "Fail HealthCheck if Average Block Acceptance Times are too High" by @yacovm in #5821
- feat(cchain): use state summary by @alarso16 in #5623
- feat(vms/evm/sync/code): add code-by-hash request handler by @powerslider in #5402
- [docs] Add TOC to bazel doc by @maru-ava in #5817
- [ci] Attempt to ensure minimum required disk space for heavy jobs by @maru-ava in #5673
- Remove
testbuild tag from fuzz and test scripts by @maru-ava in #5812 - [docs] Clarify links in documentation guidelines by @maru-ava in #5813
- [task] Document expectation of sorted order and fix existing order by @maru-ava in #5811
- refactor(vms/saevm): Allow parsing before state sync by @alarso16 in #5789
- [ci] Reduce e2e job runtime by running tests in parallel by @maru-ava in #5826
- feat(vms/evm/sync/block): add block-batch request handler by @powerslider in #5404
- [ci] Stop running e2e on unreliable ubuntu-24.04-arm-4-core runner by @maru-ava in #5847
- Fix flaky node uptime test by @DracoLi in #5824
- [antithesis] Remove XSVM testing by @maru-ava in #5842
- refactor(blocks): move hooks to block by @alarso16 in #5848
- [ci] Disable load_kube_kind pending bazel-ification by @maru-ava in #5846
- [ci] Remove duplicate C-Chain re-execution coverage on PRs by @maru-ava in #5843
- feat(sae):
paralleltestpackage by @ARR4N in #5774 - fix(sae): ignore minimum gas consumption during estimation by @JonathanOppenheimer in #5859
- fix(sae): error on startup with incompatible execution results (#5658) by @rahulmutt-ava in #5746
- [ci] Skip re-execution benchmarks on PRs without secret access by @JonathanOppenheimer in #5870
- chore(deps): bump github.com/gorilla/websocket from 1.5.0 to 1.5.3 by @dependabot[bot] in #5861
- [ci] Gate re-execution benchmarks on secret availability by @JonathanOppenheimer in #5876
- refactor(sync): Allow either code queue by @alarso16 in #5877
- refactor(sae): configure block execution with options by @JonathanOppenheimer in #5834
- fix(sync): Race on small storage tries by @alarso16 in #5883
- feat(merkle/sync): add proof metrics for state sync benchmarking by @JonathanOppenheimer in #5518
- fix(sae)!: db recovery only restores execution artefacts for consensus-critical blocks by @ARR4N in #5888
- feat(vms/evm/sync/evmstate): add leaf-range request handler by @powerslider in #5406
- feat: configurable state sync ids by @alarso16 in #5880
- Remove allowed X-chain operation tx by @StephenButtolph in #5889
- refactor(sync): fetch leaves through a transport neutral contract by @powerslider in #5871
- test: skip flaky TestPrecompileBind by @JonathanOppenheimer in #5891
- fix(ci): budget fuzz tests by executions instead of time by @JonathanOppenheimer in #5890
- [bazel] Enable remote caching by @maru-ava in #5743
- [tmpnet] Transition from nginx to Traefik for ingress by @maru-ava in #4939
- refactor(sync): Avoid
trie.Iteratorby @alarso16 in #5893 - fix(ci): stop deleting the Go toolchain when reclaiming disk space by @JonathanOppenheimer in #5895
- [ci] Consolidate pre-merge Go workflows by @maru-ava in #5894
- fix(evm/sync): Cancel context after handling request to avoid test flake by @StephenButtolph in #5898
- test(sae): Only 1 tx per acct in a block by @alarso16 in #5899
- feat(cchain/state): Add Syncer by @alarso16 in #5776
- [bazel] Unify unit test tasks and jobs by @maru-ava in #5900
- fix(sae/rpc): cap RPC execution gas, time, and tx fee by @JonathanOppenheimer in #5823
- chore(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.1 by @dependabot[bot] in #5910
- perf(saexec): enable trie prefetching during block execution by @JonathanOppenheimer in #5852
- fix(cache/lru): evict stale entry before re-Put in SizedCache by @JonathanOppenheimer in #5920
- feat(statesync): Normal EVM state sync by @alarso16 in #5782
- chore(saexec): remove dead playbook link from execution logs by @JonathanOppenheimer in #5919
- fix(statesync): Disallow synchronous summaries by @alarso16 in #5869
- fix(subnet-evm/params): use semantic equality for state upgrade compat check by @owenwahlgren in #5765
- fix(saevm): Correctly manage the state snapshot by @StephenButtolph in #5923
- feat(cchain): State sync integration by @alarso16 in #5784
- feat(saevm): add apis config to whitelist which JSON-RPC APIs are served by @JonathanOppenheimer in #5754
- [ci] Align Go unit testing with Bazel CI by @maru-ava in #5896
- fix(tmpnet): observe context deadline in WaitForHealthy on health errors by @JonathanOppenheimer in #5931
- Eagerly transition to SAE for state sync by @rahulmutt-ava in #5916
- [ci] Remove FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 from all workflows by @maru-ava in #5930
- [bazel] Improve job reliability and ensure jobs are time-bound by @maru-ava in #5925
- feat(sae): Log state-sync updates by @StephenButtolph in #5932
- Increase tx and block size for Helicon by @yacovm in #5937
- blockdb: align Database receiver names by @DracoLi in #5857
- Replay PlatformVM diff and state writes in order by @DracoLi in #5938
- build: bump
testerrversion by @ARR4N in #5940 - [bazel] Update Bazel rules by @rahulmutt-ava in #5935
- chore: release v1.15.0 ⛰️🚀 by @JonathanOppenheimer in #5929
New Contributors
- @sunnyraindy made their first contribution in #4484
- @rahulmutt-ava made their first contribution in #5447
- @SavalaBee made their first contribution in #5299
- @Olexandr88 made their first contribution in #5087
- @alejandro99so made their first contribution in #5777
- @owenwahlgren made their first contribution in #5765
Full Changelog: v1.14.2...v1.15.0