Releases: ethereum/go-ethereum
EMF Suppressor (v1.17.2)
This is a maintenance release with several important bug fixes. Notably, a critical issue in debug_executionWitness could previously corrupt node data, users relying on this RPC endpoint are strongly advised to upgrade.
Geth now also supports syncing with chains where pre-Prague history has been pruned, and allows explicitly removing it via geth prune-history --history.chain postprague.
Geth
- Set default cache size to 4GB across all networks (#33836, #33975)
- Added support for pruning chain history prior to the Prague fork (#33657, #34036)
- Added
fetchpayloadcommand to build execution witnesses for specific blocks (#33919) - Optimized Era history import with batched insertion (#33894)
- Added
womirtarget for keeper (#34079) - Added support for iterating a single storage trie in
geth snapshot traverse-stateandgeth snapshot traverse-rawstate(#34051)
Core
- Amsterdam fork updates:
- Improved payload building by prewarming trie nodes for state hash computation (#33945)
- Various binary trie improvements (#33951, #33961, #33989, #34021, #34032, #34022, #34056)
- Upgraded go-eth-kzg to v1.5.0, significantly reducing allocations in
VerifyCellProofBatch(#33963) - Refactored state database in preparation for binary trie integration (#33816)
- Enabled trie node history retention on existing nodes (#33934)
- Optimized historical state indexer with batch processing (#33640)
- Fixed potential deadlock in txlookup (#34039)
- Added new RLP APIs (#34052, #34048)
- Fix dir.Sync() failure in freezer on Windows (#34115)
Networking
- Avoid duplicate connections by skipping simultaneous inbound/outbound dials (#33198)
- Fixed session key mismatch by using consistent remote address handling in discv5 tests (#34031)
- Added DNS hostname resolution for bootstrap nodes (#34101)
RPC
- Fixed state corruption issue in
debug_executionWitness; deprecateddebug_executionWitnessByHash(#33931) - Added MaxUsedGas field to
eth_simulateV1response (#32789) - Fixed gas cap handling in
eth_simulateV1(#33952) - Fixed nonce revert edge case during contract creation in tracer (#33978)
- Fixed
eth_createAccessListto return an empty list instead of null for storage keys (#33976) eth_getFilterLogsnow returns an error if the requested chain segment has been pruned (#33823)- Fixed slot number encoding in RPC responses (#34005)
- Enforce RPC call limits for
eth_simulateV1(#34616) - Enforce storage slot limits for proofs in
eth_getProof(#34617)
Observability
- Various OpenTelemetry fixes (#33927, #33955)
- Added OpenTelemetry support for payload building (#33773)
Build
- Fixed build issues on FreeBSD (#34008)
For a full rundown of the changes please consult the Geth 1.17.2 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.
Eezo Shunt (v1.17.1)
This is a bug fix release and is recommended for all users. It resolves a regression in snap sync, as well as several security issues.
Geth
- The engine API no longer enables plain-text HTTP2, due to some reports of incompatibilities with the teku CL (#33922)
- The new
--metrics.influxdb.intervalflag allows changing the metrics reporting interval. (#33767) - Geth has a new
inspect-triesubcommand that prints information about node counts at all state trie depths (#28892)
Core
- Some Amsterdam fork-related changes:
- Payload building had a fix that could prevent the CL from receiving the latest built payloads (#33908)
Networking
- Geth no longer supports p2p protocol version eth/68 (#33511)
- A rare crash in p2p request tracking is resolved (#33940)
- The transaction pool, and specifically the blobpool, saw some fixes that reduce relaying transactions that likely won't make it into the chain, or have already been included on chain recently. This should reduce txpool traffic (#33607, #33887, #33923, #33893)
- In v1.17.0, a regression in snap-sync was introduced that would cause sync to fail when using --history.chain=postmerge (#33865)
- Snap-sync had a bug where peer connections would stop being used after a timeout or similar event. This wasn't too noticeable for mainnet sync because of peer churn (#33790)
- Unexpected state delivered by peers is now reported during snap-sync (#33898)
- P2P listener metrics now record handshake timeouts correctly (#33539)
RPC
eth_estimateGasnow honors the user-supplied access list (#33849)- New RPC method:
eth_getStorageValues(#32591) - New RPC method:
testing_buildBlockV1(#33656)
Build
- This release is built with Go 1.25.7 (#33874)
- Our official Docker images are experimentally built with Go 1.26 (#33899)
For a full rundown of the changes please consult the Geth 1.17.1 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.
Eezo-Inlaid Circuitry (v1.17.0)
This is a feature release, with all accumulated development from the last 3 months. See below for the highlights.
Note that this release contains multiple critical security fixes, as well as many bug fixes, and is recommended for all users. However, if you are cautious about upgrades, you can also install v1.16.9 which has just the critical security fixes. Specifically, this release fixes CVE-2026-26313, CVE-2026-26314, CVE-2026-26315.
We recommend recreating your p2p node key after installing this update, which you can do by removing the DATADIR/geth/nodekey file before restarting geth. Note this will cause a change in the p2p node ID, which may break static peering setups.
Highlights
Path-based Archive Node with Proofs
The path-based archive node can now serve proofs (via eth_getProof) for the state of older blocks.
You can configure the block range that supports proving independently from other archive state availability. Specifically, you can use the --history.trienode command-line flag to set the amount of blocks for which tree nodes will be tracked.
This feature is disabled by default. Note that state history cannot easily be recovered once deleted, as it can only be generated by processing blocks. However, you can enable trienode history (and/or state history) at any time to turn a full node into a partial archive node, keeping state from that point in time onwards.
#32727, #32621, #33551, #32981, #33399, #32913, #33303, #33584, #33329, #33681, #33103, #33098, #33515, #32247
EraE History Support
Geth now suports the EraE file format, an archival format for post-merge chain history.
OpenTelemetry Tracing
OpenTelemetry tracing is now supported by the RPC server, including support for distributed tracing.
We have also added some tracing spans for block processing via the engine API, i.e. engine_newPayload.
#33599, #33452, #33780, #33521
All Changes
Geth CLI
- The
geth version-checksubcommand has been removed. This command checked the geth website for signed vulnerability notices, and would tell if updates are necessary (#33498) - There is now a
--miner.maxblobscommand-line flag to set a limit on blobs included in built blocks (#33129, #33302) - Geth now supports continuous profiling with Grafana Pyroscope (#33623)
- A rare bug that could halt block production in
geth --devmode was fixed (#33146) - A new
--rpc.rangelimitflag configures the maximum block range foreth_getLogs(#33163) geth --exitwhensyncedwill now set thefinalizedandsafeblock (#33038)geth --ethstatsnow reports the newPayload processing time to the stats server (#33395)- A lot of minor issues in Geth's command-line flag processing have been fixed (#33379, #33338, #33330, #32999, #33279, #33252)
- The
evm blocktestcommand can now read filenames from stdin when no path is provided (#32824)
Fork Implementation
- EIP-8024: Backward compatible SWAPN, DUPN, EXCHANGE (#33095, #33787, #33614, #33361)
- We have implemented engine_getBlobsV3 (#33404, #33444)
- The engine API now rejects calls with wrong payload version (#32754, #33322)
- blsync has been updated for Fusaka (#33349, #33272, #33065, #32674)
- Some work towards the migration of state to a binary tree has landed, and this replaces the Verkle Tree implementation (#33807, #33739, #33694, #32445, #33461)
- Some access list semantics have been fixed while working on EIP-7928 Block-Level Access Lists (#33281, #33637, #33450)
Core
- The crypto/ecies library allowed extraction of the private key used for key derivation via observation of response timing. We recommend rotating the node key after applying this update. (#33669)
- When a missing block is encountered during tx unindexing, Geth will now skip it and move on instead of entering an infinite loop. (#33573)
- Geth now optionally collect and export metrics about the total state size (#33254, #33376, #33415)
- There is a new
OnStateUpdatehook, which is called after all state of a block has been committed. This gives access to the changeset of the block. (#33490) - Some minor tracing bugs have been fixed (#32919, #33148, #33644, #33214)
- Various minor issues in the freezer database have also been fixed (#33747, #33025, #33203, #33344)
- The
setHeadoperation now unsets the finalized block, in cases where the rolled-back block range extends before it. (#33486) - The
SignatureValuesmethod oftypes.Signernow reports an error for invalid signature sizes (#33647) - Geth prints detailed log messages for 'slow blocks' (#33655, #33525, #33442, #32812, #33659, #33532)
- Pebble configuration has been tweaked for improved performance (#33697, #33353, #33315)
- A rare crash in the log indexer related to reorg handling has been fixed (#33810)
- Internal state diff size accounting has been corrected, so state diffs will now be flushed to the disk store less often (#33505)
- Since the keccak256 hash function variant used by Ethereum no longer has a fast-path in the standard library, we have vendored the keccak implementation back into our repository (#33323)
Library
- The RLP library now has a RawList type for dealing with un-decoded lists in a more convenient way (#33755, #33834, #33840, #33841)
- The low-level RLP iterator and uses of it have been improved (#33245, #33188, #33820)
- Clef can now sign blob transactions with cell proofs (#32910)
- Fixed some corner-case bugs in metrics exporting (#33749, #33748)
- The hardware wallet library now supports the Ledger Nano Gen5 and correctly enables EIP-712 signing for all supported versions. (#33297, #33113)
SignTextWithPassphrasenow works correctly with all supported hardware wallets (#33138)- Some minor bugs were fixed in the keystore implementation (#33606, #33602, #33090)
- The
bitutil.XORBytesfunction has been deprecated in favor of stdlib package crypto/subtle (#33331) - A memory leak in the beacon chain light client was fixed (#33483)
RPC
eth_getTransactionByHashnow returns theblockTimestampas part of the transaction object (#33709)- Error codes for some conditions in
eth_simulateV1,eth_getLogs,eth_getStorageAthave been improved to better comply with the execution RPC spec (#33007, #33320, #33282) eth_simulateV1now selects the correct set of precompiles for the simulated header (#33363)eth_sendTransactionandeth_fillTransactionnow default to EIP-1559 (#33058)- The GraphQL implementation has received some bug fixes for cases where a resolved item is not found. (#33184, #33225)
- In GraphQL, the
gasPriceis now retrievable for transaction types 0x3 and 0x4 (#33542) - The RPC server now enables plain-text HTTP2 for improved performance (#33812)
- The RPC client no longer sends spurious RST_STREAM HTTP2 frames (#33122)
- Some minor JSON encoding bugs have been fixed in
ethclient(#33693, #33242, #33464) - The
gethclienthas a new wrapper of thecallTracer(#31510) - In the
callTracer, reported logs now contain anindexfield which is the index of the log within the transaction (#33629)
P2P Networking
- The transaction pool heartbeat mechanism had some fixes for potential resource leaks (#33704)
- The eth and snap protocol implementations nows validates most p2p messages before decoding their content. This improves security and sync performance in some cases. (#33835)
- The blob transaction pool has seen some bug fixes and now accepts nonce-gapped transactions to a very limited extent (#32717, #33775, #33474, #33352, #33301, #33260)
- Snap sync status is now tracked better, ensuring a snap sync will not be triggered accidentally by the engine API (#33157)
- The snap sync scheduler was improved to better protect the trie database against accidential mutations while the node is processing blocks. This resolves some edge cases where the database could be corrupted (#33428)
- The header sync implementation was fixed to better deal with
setHeadoperations during sync (#33481) - Peer connections delivering stale transactions will be penalized less, since delivery of a few stale transactions is a common occurrence. (#32725)
- Peers announcing transactions of one type, and delivering a different type, are now disconnected as penalty (#33378)
- Similarly, peers delivering invalid KZG proofs will now be disconnected (5b99d2b)
- The transaction pool has new metrics for the number of accounts with transactions (#33646, #33654)
For a full rundown of the changes please consult the Geth 1.17.0 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.
Shield Focusing Module (v1.16.9)
This is a security hot-fix release. Specifically, this release fixes CVE-2026-26314, CVE-2026-26315.
We recommend recreating your p2p node key after installing this update, which you can do by removing the DATADIR/geth/nodekey file before restarting geth. Note this will cause a change in the p2p node ID, which may break static peering setups.
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.
Moisture Filters (v1.16.8)
This is a security fix release and is recommended for all users. It resolves two p2p
vulnerabilities reported through the Ethereum Foundation bug bounty program.
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.
Ballistic Drift Stabilizer (v1.16.7)
This is a re-roll of v1.16.6, including an important fix in the KZG cryptography library.
This release enables the Fusaka hardfork on Ethereum mainnet.
The Fusaka fork is scheduled to occur at 2025-12-03 21:49:11 UTC.
Please upgrade your node to v1.16.7 in time for the fork.
This release also enables two blob-parameter-only (BPO) upgrades.
These upgrades change protocol parameters to increase the available blob capacity.
- BPO1 on
2025-12-09 - BPO2 on
2026-01-07
Fusaka
RPC
- Add
eth_sendRawTransactionSyncwhich waits until either a timeout or the transaction is mined. This feature is mostly useful on L2s with lower blocktimes. (#32830, #32930, #32929) - Add support for
eth_simulateV1in ethclient (#32856) - Fix for an issue that might crash
debug_traceCall(#33015) - Fix for an issuer where local transactions were not persisted to the journal (#32921)
Core
- Fix for a cryptographic vulnerability in c-kzg-4844. This is only exploitable post-Fusaka. (#33093)
- Add
geth --genesisflag as an alternative to runninggeth init genesis.json(#32844) - Fix for receipt insertion during ERA file import. (#32934)
- Work on getting the trie node history in order to serve historical
eth_getProofrequest with the new path-based archive node. (#32907, #32914, #32937) - Further work on cmd/keeper, our guest program for zkVMs (#32816)
- Various optimizations (#32971, #32916, #32965, #32946)
Networking
- New metrics for tracking slow peers (#32964)
- Fix for an issue where disconnected peers were not removed in txFetcher (#32947)
For a full rundown of the changes please consult the Geth 1.16.6 and 1.16.7 release milestones.
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.
Leather Wrapping (v1.16.6)
This release enables the Fusaka hardfork on Ethereum mainnet
The fork is scheduled to occur at 2025-12-03 21:49:11 UTC.
This release also enables the BPO1 and BPO2 forks for mainnet at 2025-12-09 and 2026-01-07 respectively.
Fusaka
RPC
- Add
eth_sendRawTransactionSyncwhich waits until either a timeout or the transaction is mined. This feature is mostly useful on L2s with lower blocktimes. (#32830, #32930, #32929) - Add support for
eth_simulateV1in ethclient (#32856) - Fix for an issue that might crash
debug_traceCall(#33015) - Fix for an issuer where local transactions were not persisted to the journal (#32921)
Core
- Add
geth --genesisflag as an alternative to runninggeth init genesis.json(#32844) - Fix for receipt insertion during ERA file import. (#32934)
- Work on getting the trie node history in order to serve historical
eth_getProofrequest with the new path-based archive node. (#32907, #32914, #32937) - Further work on cmd/keeper, our guest program for zkVMs (#32816)
- Various optimizations (#32971, #32916, #32965, #32946)
Networking
- New metrics for tracking slow peers (#32964)
- Fix for an issue where disconnected peers were not removed in txFetcher (#32947)
For a full rundown of the changes please consult the Geth 1.16.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. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Coolant Cells (v1.16.5)
This is a maintenance release. We are issuing this release mostly to add a conversion path for blob proofs submitted via eth_sendRawTransaction. See https://blog.ethereum.org/2025/10/15/fusaka-blob-update for more information.
RPC
eth_sendRawTransactionhas an upgrade path for blob proofs after the Fusaka fork. Note this is temporary. We will remove support for blob proof conversion during the v1.17.x release cycle, please update RPC client libraries to support cell-level (v1) proofs. (#32849)eth_subscribenow supports atransactionReceiptssubscription. There is also a wrapper in ethclient for this new subscription type. (#32697, #32869)eth_simulateV1was fixed to return the block timestamp in logs, likeeth_getLogsdoes. (#32831)- In the abigen v2 runtime,
BoundContract.Transferwill now verify that the contract has a payable fallback or receive method. (#32374) - A
keccak256preimagetracer has been added. (#32569)
Networking
- The eth protocol handler will now drop peers sending duplicated transactions. This is to unify behavior with other client implementations. (#32728)
- A regression in the discovery system could cause high CPU usage under synthetic conditions (i.e. in tests). (#32912)
- A very rare shutdown hang related to peer discovery is resolved. (#32572)
- The eth protocol test suite has a new post-merge test chain and saw some bug fixes for flakey tests. (#32834, #32850)
Core
- Our freezer implementation now supports partial reads, i.e. reading just a slice out of a larger stored value. This functionality is used for the archive node state history. (#32132)
- The trie database now implements a storage layer for 'trie history', a precursor to serving historical state proofs for the path-based archive node. (#32596)
- The
txpool/valid.metermetric has been corrected. (#32845) - The engine API saw some fixes related to fork compatibility checks. (#32800, #32731)
For a full rundown of the changes please consult the Geth 1.16.5 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. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.
Bioelectric Infusers (v1.16.4)
This release enables the Osaka (Fusaka) fork on testnets. We also enable two blob-parameter only (BPO) forks for the testnets.
-
Holesky
- Osaka at time
1759308480(2025-10-01 08:48:00 UTC) - BPO1 at time
1759800000(2025-10-07 01:20:00 UTC) - BPO2 at time
1760389824(2025-10-13 21:10:24 UTC)
- Osaka at time
-
Sepolia
- Osaka at time
1760427360(2025-10-14 07:36:00 UTC) - BPO1 at time
1761017184(2025-10-21 03:26:24 UTC) - BPO2 at time
1761607008(2025-10-27 23:16:48 UTC)
- Osaka at time
-
Hoodi
- Osaka at time
1761677592(2025-10-28 18:53:12 UTC) - BPO1 at time
1762365720(2025-11-05 18:02:00 UTC) - BPO2 at time
1762955544(2025-11-12 13:52:24 UTC)
- Osaka at time
With BPO1 and BPO2, the blob capacity of these networks will increase as follows:
- BPO1: max blobs/block:
15, target:10 - BPO2: max blobs/block:
21, target:14
As of this release, the default block gas limit is set to 60M gas.
This is the recommended limit that we, as client authors, feel comfortable with.
CLI commands
geth snapshotand related commands no longer fail due to not finding the trie journal file. (#32531)- A regression in
geth snapshot dumpandgeth export-preimagesis resolved. (#32650) - We have added an experimental zkVM 'guest program',
keeper, to the source tree. (#32543, #32638, #32736)
RPC
eth_calland related operations were fixed to not apply the EIP-7825 per-transaction gas limit when executing under Osaka fork rules. (#32641)- For
eth_getLogsand other log filtering operations, it is now possible to configure the number of addresses allowed in the filter using the--rpc.logquerylimitflag. (#32327) - Starting Geth with the
--state.size-trackingoption enables collection of precise state size numbers, which can be read using thedebug_stateSizeendpoint. (#32362) - The new
debug_executionWitnessanddebug_executionWitnessByHashmethods create a block witness for stateless execution. (#32216)
Tracing & ABIGEN
- There is a new
CodeChangeV2hook, with aCodeChangeReasonparameter. (#32525, #32535) - In certain corner-cases related to SELFDESTRUCT,
OnBalanceChangewas not invoked. (#32526) BoundContractinaccounts/abi/bind/v2now exposes anAddressmethod. (#32559)
Core
- The EVM MODEXP precompiled account has seen some optimizations to improve performance for worst-case inputs. We are especially grateful for @GottfriedHerold's work on improving the underlying math/big library. (#32527, #32553, #32568, #32576)
- The blobpool will now perform a migration to the v1 blob proof format around the time of the fork. (#31966, #32577, #32534, #32656, #32716)
engine_getBlobshas been updated for improved spec compliance and to deal with the conversion of the blob tx proofs. (#32536, #32538, #32578)- The path-based state database has seen some fixes to prevent database corruption, which could sometimes occur when Geth is terminated abnormally, e.g. by a short stop timeout in Docker. (#32557, #32447)
- All
engineAPI operations, andeth_config, now support BPO-style forks. (#32589, #32615, #32636, #32579) - This release includes some work towards supporting historical state proofs in the path-based archive node implementation. (#32418, #32523, #32649)
- Pebble stall counter are now correctly reported for each opened database. (#32563)
Networking
- The node discovery iterator was updated to improved geth startup time and reactivity when the node table becomes empty. (#32517, #32518)
- A hang in the 'eth' protocol test suite was resolved. (#32551)
Build
- The KZG proof libraries have been updated to the latest release to fix a vulnerability. Fortunately, the vulnerability would only have become usable after the Osaka fork, so there is no risk for users of current versions. (#32640, #32639)
- go-ethereum now requires Go 1.24 or later. (#32584, #32598)
- This release is built with Go 1.25.1 (#32593)
- execution-spec-tests has been bumped to v5.1.0 (#32592, #32742)
Impact Restrictors (v1.16.3)
What's Changed
This is a maintenance release to prepare for the Fusaka release next week. It contains a state history rewrite, fixes for the Osaka devnets, performance improvements, and a few bug fixes.
Fusaka
Core
- Stabilize tx relay peer selection #31714
- Reduced number of allocation when comparing transactions #31912
- Rework tracer and track origin value of dirty nodes #32306
- Avoids loading the same blob tx multiple times #32190
- Fix modexp input check #32363
GetBlockReceiptsalso handles pending blocks #32461- Tree node prefetching for increased loader performance #32134
- Parallelized
db inspect#32506
RPC
- Apply precompile overrides in
DoEstimateGas#31795 - Fix uncle reward accounting in supply_tracer #31882
- Checks ErrGasLimitTooHigh in conditions in gas estimator #32348
- Implement EIP-7910 - eth_config JSON-RPC Method #32239
- Add SetWebsocketReadLimit in RPC Server #32279
- graphql: add query depth limit to prevent DoS attacks #32344
- Adds codeHash to prestateTracer's account structure #32391
- Remove deprecated method
debug_seedHash#32495
Others
- Introduce the TransitionState object #31634 and #32366
- Fix ledger version check for EIP-155 support #32417
- Fix: don't return an error when a nil peer is found in GetHeader #32369
- Add support for Go 1.25 #32425 and #32412
- Add trie depth-tracking metrics #32388 and #32507
- Implement EIP-7864 - binary trees 32365
- Improved ETA calculation #32521
For a full rundown of the changes please consult the Geth 1.16.3 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. - Ubuntu packages in our Launchpad PPA repository.
- OSX packages in our Homebrew Tap repository.