go-ethereum v1.17.6
go-ethereum v1.17.6
This is a maintenance release with a number of performance improvements to block processing and initial sync, and is recommended for all users.
A few things worth highlighting:
- The Amsterdam hardfork is scheduled on the Sepolia testnet at timestamp
1791294816(Oct 6, 2026, 13:53:36 UTC). Sepolia node operators must upgrade before that time. - The Holesky testnet has been removed, as the network reached end-of-life.
- Go 1.24 is no longer supported. Release binaries and Docker images are now built with Go 1.27.
Fork Implementation
- Schedule the Amsterdam fork on Sepolia (#35734)
- Remove the EIP-7610 implementation (#35581)
- Update EIP-2780 and EIP-8038 gas parameters (#35454, #35497)
- Update EIP-7997 deterministic factory contract (#35458)
- Update EIP-8037, repaying the outstanding gas debt first after absorbing a child frame (#35633)
- Implement parallel block execution driven by the block-level access list (#35264, #35441, #35443, #35459, #35461, #35465, #35575, #35693)
- Rename “regular gas” to “execution gas” to match EIP-8037 (#35457, #35486)
Core
- Remove the Holesky testnet (#35591)
- Optimize JSON decoding of large requests such as
engine_newPayload(#35518) - Process the receipts for bloom construction and root calculation alongside execution (#35738)
- Introduce a precompile result cache shared between prefetcher, block processing and miner (#35388, #35473, #35526, #35578, #35753)
- Parallelize chain data and state writes in the post-execution commit (#35595)
- Do not seal a block if a database error occurred (#35427)
- Fix a panic in the log indexer when a reorg shortens the chain onto the rendered block (#35619)
- Honor
ExecuteConfig.EnableTracerfor the EVM-level tracing hooks (#35512) - Add a metered LRU cache variant (#33719)
- Retain block-level access lists alongside bad blocks (#35423)
- Unset the block-level access list at the end of each transaction (#35498)
- Fix the blob cache initialization (#35509)
- Fix head truncation below a diverged tail group (#35551)
- Improve the blob fetcher with a few defensive operations (#35572)
- Fix deadlock when re-requesting partial receipts in eth/70 (#35537)
- Reject empty partial receipt responses in eth/70 (#35593)
- Cap the total size of blocked blob transactions in the sparse blobpool (#35367)
- Fix the
Cells/GetCellsRLP encoding in eth/72 (#35428) - Cache recovered blobs in the blobpool to speed up serving pre-eth/72 peers (#35543)
- Add fork validation for transaction types in the state transition (#35588)
- Avoid announcing sparse blob txs to legacy peers (#35589)
- Add eth/71 (EIP-8159) tests (#35389)
- Fix gas tracer hooks and gas measurement (#35646)
- The eth/72 blob buffer is capped at 128 MiB total and 16 MiB per peer (#35766)
Sync
- Optimize the state sync by parallelizing response processing (#35533)
- Implement best-effort downloading of block-level access lists (#35386, #35493)
- Rework the scheduling of body and receipt retrievals during sync (#35680)
- Add metrics for chain segment downloading and snap sync progress (#35678, #35689)
- Various snap v2 fixes and improvements (#35299, #35316, #35463, #35477, #35705, #35722)
Networking
- Validate the announced blob transaction size against the announcer’s protocol version (#35524)
- Add more discv5 hive coverage to
devp2p(#34770) - Add eth/72 tests and Amsterdam testdata to
devp2p(#35368, #35637, #35647, #35648, #35687) - Add
devp2p discovery listento serve discv4 and discv5 on a single UDP socket (#35254)
Cryptography
- Reconstruct blobs directly from data cells without KZG recovery (#35528)
- Recover the full cell set of a blob with a fast path for complete data cells (#35529)
- Fix
G2.Negin the bn256 library by syncing with upstream (#35686)
Engine API
- Add support for optional
TargetGasLimitand enforce the system contract code check (#35514) - Allow reorging
headBlockdown tofinalized(#35519) - Fix the fork gate on
engine_forkchoiceUpdatedWithWitnessV3/V4(#35719) - Pass
targetGasLimitthrough intesting_buildBlockV1(#35501) - Fix hive failures (#35580, #35664)
- Fix
engine_getBlobsV4returning null cells for blob-mode cache entries (#35439)
RPC
- Reject
nullfor required arguments (#35576) - Unescape JSON object keys when parsing a message (#35587)
- Reject
eth_getLogsranges withtoBlockbeforefromBlock(#35070) - Skip unconfigured forks when computing the next fork in
eth_config(#35553) - Return
nullforpendingand unresolvable tags ineth_getHeaderByNumber(#35627) - Treat a post-merge difficulty override as no-op in
eth_simulateV1(#35672) - Reject blob and setcode call arguments without
to(#35695) - Remove per-authorization gas guard in the
eth_createAccessList(#35698) - Return the actual used gas for plain transfer estimates after Amsterdam (#35592)
- Make the block parameter of
debug_traceCalloptional (#35583) - Add
slotNumberto the GraphQL block schema (#35469) - Return
NotFoundwhen the block transaction count is nil inethclient(#35605) - Verify the withdrawal list against the header root in
ethclient(#35610)
Geth & Tooling
- Deprecate the state sizer tool (#35520)
- Use original Solidity names for custom errors in abigen v2 bindings (#35332)
- Filter out unexpected logs from the event subscription stream instead of terminating it (#35701)
- Respect the configured log limit in the struct logger
OnEnter/OnExithooks (#35360) - Add a
t8ntest for a missing London base fee config (#35636)
Build
- Drop support for Go 1.24 and add support for Go 1.27 (#35573)
- Upgrade the
-dlgobootstrap Go version to 1.27.1 (#35656) - Build RPM packages for Fedora COPR (#35557)
- Add a retry mechanism for package uploading (#35510)
For a full rundown of the changes please consult the Geth 1.17.6 release milestone.
As with all our previous releases, you can find the:
- Pre-built binaries for all platforms on our downloads page
- Docker images published under
ethereum/client-go(use “stable” tag) - Ubuntu packages in our Launchpad PPA repository
- macOS packages in our Homebrew Tap repository
Source ethereum/go-ethereum ·
v1.17.6· 2026-09-23 · upstream release
Mirrored verbatim for indexing. All rights belong to the upstream project.
Release notes are published by the upstream project and mirrored here for indexing. All rights belong to their authors.