Skip to content

Releases: ethereum/go-ethereum

Juggernaut Shield (v1.15.7)

31 Mar 16:31
@fjl fjl
Compare
Choose a tag to compare

This is a bug fix release. We are putting is out specifically to address a critical issue that could break archive node databases.

  • Fixed an issue for --state.scheme=hash where the log indexer would accidentally delete trie nodes. (#31525)
  • Fixed an issue with tx submission, where the local pool didn't track pending nonces correctly. (#31496)
  • The log indexer will now disable itself when hitting missing receipts in the database. (#31500)
  • Another txpool issue reorg issue in ethclient/simulated.Backend is fixed in this release. (#31228)
  • Memory allocation for trie operations has been reduced significantly. (#30932)
  • eth_createAccessList now supports state overrides like eth_call. (#31497)
  • eth_createAccessList will now exclude 7702 authorities from the result. (#31336)
  • The abigen library now correctly forwards access lists to eth_estimateGas. (#31394)

For a full rundown of the changes please consult the Geth 1.15.7 release milestone


As with all our previous releases, you can find the:

Mental Focuser (v1.15.6)

25 Mar 11:25
@fjl fjl
Compare
Choose a tag to compare

🚧 Note: we are investigating an issue with this release that affects archive nodes (--gcmode=archive).
If you are running Geth in this mode, please hold off upgrading.
🚧

This is a feature release, with two exciting upgrades:

  • Log filtering in Geth receives a huge performance upgrade with the introduction of our new 'filtermaps' index. Unlike the previous 'bloombits' index, query performance no longer suffers as the density of logs in a block increases. The new index design is also a step towards a future where filtering results can be proven by the server. See the PR and associated design documents for more information.

    In practical terms, the new index is a bit larger than the old one. As before, you can choose the amount of historical blocks to be indexed using the --history.logs command-line flag. We have adjusted the default value of this flag to cover one year of history, and the resulting index has a size of ~10GB for Ethereum mainnnet. Indexing of the entire chain with --history.logs=0 will take up ~61GB.

    Once the index is built, searches will be fast, but note that querying outside of the indexed block range will fall back to a very slow unindexed search. We will continue optimizing log searches in future releases, and welcome your feedback and bug reports in this area. (#31065, #31079, #31080, #31081, #31419, #31429, #31450, #31463, #31455)

  • abigen v2 is finally here. abigen is a tool for creating Go bindings for Solidity contracts. In v1, the generated bindings presented an API for sending transactions, filtering logs, and performing read-only calls as Go methods on the contract object. In the new version, we have updated the interface of the generated code to focus purely on encoding and decoding ABI payloads. Generic helper functions are provided in a library package to enable the same interactions as before, but you can also use your own custom method of signing & sending transactions. Generated bindings are also significantly smaller. (#31379)

Other changes in this release:

RPC

  • A regression in eth_sendRawTransaction - where transactions with too-low nonce would be accepted by the API - has been fixed. (#31473)
  • eth_call/estimateGas RPC methods will now always return error code 3 for reverts. It previously only returned this code when the EVM produced revert data. (#31456)
  • eth_simulateV1 now returns a correct logs bloom value in the simulated block (#31411)
  • eth_simulateV1 supports block overrides for the beacon root and withdrawals (#31304)
  • debug_traceCall: the movePrecompileTo override feature should now work correctly (#31348)
  • debug_traceCall and other related RPC methods now hex-encode the EVM return value. This is a breaking change. (#31216, #31445)
  • ethclient has a new method EstimateGasAtBlock (#27508)

Geth

  • Support for the Hoodi testnet has been added. (#31406)
  • The beacon chain light client has been updated to support the Electra fork. (#31243, #31470)
  • geth import now properly handles Ctrl-C interrupts (#31360)
  • geth --dev mode will now pre-fund all precompile accounts supported by the Pectra upgrade (#31342)
  • geth --dev now respects the --miner.pending.feeRecipient flag (#31316)

Core library

  • The performance of transaction signature validation has improved significantly (#31242, #31258, #31434)
  • The transaction pool has seen some correctness and performance improvements. (#31430, #31307, #31332)
  • We have added a lot of preliminary changes for History Expiry (EIP-4444). There shouldn't be any user-facing consequences of these just yet, just reporting it here since this area was a big focus this cycle. (#31424, #31355, #31362, #31383, #31365, #31117, #31356, #31384, #31393)

For a full rundown of the changes please consult the Geth 1.15.6 release milestone


As with all our previous releases, you can find the:

Stronghold Package (v1.15.5)

05 Mar 10:56
@fjl fjl
Compare
Choose a tag to compare

Alright πŸ₯² This is a hotfix release for an issue on the Sepolia testnet. Shortly after the Pectra fork activation, an issue in deposit contract logs parsing was discovered. Sepolia has a custom version of the deposit contract that also implements ERC-20, and thus unexpected log events may be created by transactions to it. This issue affects all Ethereum execution clients.

The Sepolia testnet may take a short while to recover while the update is adopted by nodes. An incident report will be published once the network has fully recovered. β€οΈβ€πŸ©Ή

Other changes in this release:

  • In output of debug_traceTransaction, the "memory" and "storage" fields will be omitted if empty. (#31289)
  • This release is built with Go 1.24.1 (#31313)

For a full rundown of the changes please consult the Geth 1.15.5 release milestone


As with all our previous releases, you can find the:

Commando Package (v1.15.4)

01 Mar 20:38
@fjl fjl
Compare
Choose a tag to compare

This is a bug fix release.

Note: you need to upgrade to v1.15.3 or this release to be compatible with the Pectra fork on the Sepolia network (activates Wed, Mar 5 at 07:29:36 UTC).

  • Fixed a v1.15.0 regression in eth_feeHistory that caused incorrect blobGasRatio return values. (#31246, #31270)
  • A v1.15.0 regression in RPC transaction submission has been fixed: if a transaction did not pass txpool verification (e.g. low fees), an error was returned by RPC, but the transaction would be added to the local pool anyway. This is now fixed and no error will be returned by the API in this case. (#31202)
  • Txpool logic was reworked to avoid an error log flood about EIP-7702 authorities. (#31249)
  • Certain invalid blob transactions no longer cause disconnect issues in the p2p layer. (#31219)
  • ethclient now provides a BlobBaseFee method to request the current blob basefee. (#31290)
  • The PPA package build was fixed after being broken in v1.15.3 by the upgrade to Go 1.24. (#31282, #31283)

For a full rundown of the changes please consult the Geth 1.15.4 release milestone


As with all our previous releases, you can find the:

Expert Package (v1.15.3)

25 Feb 15:20
@fjl fjl
Compare
Choose a tag to compare

Oh look, another hotfix release! We are issuing this Geth release to correct the predefined fork configuration of the Holesky and Sepolia testnets. The deposit contract address was missing in the configuration for these networks, causing a chain validation failure.

This issue was discovered on the Holesky network after it had already forked into Pectra (Prague). As a reminder, the Sepolia network will fork to Pectra at slot 7118848 (Wed, Mar 5 at 07:29:36 UTC). You need to upgrade to Geth v1.15.3 until then in order to use the testnet after the fork.

All changes in this release:

  • Deposit contract addresses are now defined in testnet fork configuration. (#31247)
  • The eth_simulateV1 RPC method was improved to match regular block processing semantics. (#31176, #31122)
  • A peer-finding issue with discovery v5 is fixed in this release. (#31251)
  • An invalid --discovery.dns flag value will now cause an error at Geth startup. (#31233)
  • Geth --dev mode can now handle custom genesis configs with forks older than the latest. (#31084)
  • The EVM assembler/disassembler (package core/asm) has been removed. (#31211)
  • Encoding of nested byte arrays in EIP-712 signature processing was fixed. (#31049)
  • The cloudflare-go dependency has been updated to resolve a dependabot warning. (#31240)
  • This release is built with Go 1.24.0 (#31159)

For a full rundown of the changes please consult the Geth 1.15.3 release milestone


As with all our previous releases, you can find the:

Survivor Loadout (v1.15.2)

17 Feb 11:22
@fjl fjl
Compare
Choose a tag to compare

This release fixes a few regressions. In particular, it restores block building on mainnet, which was broken in v1.15.1.

Note: a regression in the Prague fork implementation was discovered and fixed in a follow-up release. Please upgrade to at least v1.15.3 to follow the fork.

All changes in this release:

  • Block building on mainnet works again. (#31191)
  • Discv5 and DNS peer discovery has been restored. It was accidentally disabled in v1.14.9. (#31185)
  • An edge-case for geth dumpconfig related to the P2P.NAT setting in TOML is fixed. (#31192)

For a full rundown of the changes please consult the Geth 1.15.2 release milestone


As with all our previous releases, you can find the:

Engineering Kit (v1.15.1)

13 Feb 15:25
@fjl fjl
Compare
Choose a tag to compare

This release enables the Prague fork for the Holesky and Sepolia testnets. It is a required upgrade if you want to participate in these networks.

Note: a regression in the Prague fork implementation was discovered and fixed in a follow-up release. Please upgrade to at least v1.15.3 to follow the fork.

The fork is set to activate at

  • Holesky slot: 3710976, timestamp: Mon, Feb 24 at 21:55:12 UTC
  • Sepolia slot: 7118848, timestamp: Wed, Mar 5 at 07:29:36 UTC

Other user-facing changes in this release:

  • Support for EIP-7702 transactions has been enabled in the transaction pool. (#31073)
  • A v1.15.0 regression was identified in genesis handling for custom networks, related to the new blobSchedule setting. Geth v1.15.1 has been updated no longer crash in this case, and we will have an improved fix in v1.15.2 (#31171)
  • A v1.15.0 regression in the evm command related to state dumps has been fixed. (#31158)
  • A v1.15.0 regression with the ancient store in read-only mode has been fixed. (#31173)
  • A crash in debug_getRaw* RPC methods has been fixed. (#31157)
  • The supranational/blst dependency has been upgraded to v0.3.14 in order to allow building Geth with Go 1.24. (#31165)

For a full rundown of the changes please consult the Geth 1.15.1 release milestone


As with all our previous releases, you can find the:

Operative Package (v1.15.0)

06 Feb 14:06
@fjl fjl
Compare
Choose a tag to compare

We are proud to announce the Geth 1.15.0 release.

This release contains some breaking changes to the database. Downgrading to v1.14.x requires re-syncing the chain.

Prague Fork

As of this release, Geth implements the Prague fork specifications up to devnet-6.

Command changes

  • The evm command has seen lots of updates, improving its command-line interface and internals. (#30633, #30849, #30806, #30927, #30780, #30854, #31055, #30805, #30804, )
  • Geth metrics can now be enabled via the TOML config file. This used to require the --metrics flag. (#30814)
  • Similarly, you can now set the NAT traversal method (--nat flag) with the config file. (#31041)
  • The geth --trace flag is now called --go-execution-trace to avoid confusion with EVM tracing. (#30846)
  • The bootnode utility has been removed. (#30813)

RPC & Tracing

  • The live tracing Go API has been updated with new hooks and optional EVM revert tracking. See the tracing API changelog for more information. (#30441, #30786, #30830, #30784, #31007)
  • RPC method eth_estimateGas now supports block overrides like eth_call. (#30695)
  • RPC method eth_simulateV1 now advances the timestamp by 12 seconds per block. (#30981)
  • Package accounts/abi now supports unpacking Solidity error types. (#30738)
  • Package accounts/abi/bind has new functions WaitMinedHash, WaitDeployedHash. (#30079)
  • Package accounts/usbwallet was updated to support new Ledger firmware and the Ledger Flex device. (#31004)
  • In package ethclient/simulated, a bug was fixed where transactions couldn't be sent after Rollback of the simulated chain. (#31020)
  • The struct logger reports the EVM revert reason correctly again. (#31013)

Database

This release introduces a new database schema version. A downgrade to v1.14.x requires a resync.

  • The 'total difficulty' of the chain is no longer stored in the database. (#30744)
  • The ancient store employs a new strategy for avoiding fsync on each update. This change should improve block import latency on some systems. (#30392)
  • Reverse state diffs use a new encoding for future compatibility with the Verkle Tree. (#30107, #31060)
  • Internal handling of the SELFDESTRUCT operation has been simplified. This is possible since classic selfdestruct is no longer supported by the EVM after the Cancun fork. (#30752, #30802)
  • Work towards a re-implementation of the state snapshot system is ongoing. (#30643, #30650, #30654)
  • Work on the Verkle Tree integration is also progressing. (#31036, #30856, #30907, #31097)

Core Library & Networking

  • The fix for CVE-2025-24883 (recent v1.14.13 hotfix release) is also in v1.15.0 (#31100).

  • The transaction pool's notion of "locals" has been changed. This is a breaking change in some ways, and requires some explanation. Geth used to accept transactions at any fee level via RPC, storing them into the node's pool, and marking the sender as "local". When creating a new block (or the pending block), it would choose "local" transactions first. Finally, Geth tracks "local" transactions in a persistent journal file, and restores them on startup. The effect of all this is that once you had sent a transaction to Geth via RPC, it would keep prioritizing the sender account and its transactions (even ones received through p2p).

    In Geth v1.15, we are changing this model to a different one. When receiving a transaction via RPC, it is stored into the pool like any other transaction, but it is also inserted into a separate "locals tracker" that keeps reinjecting the tx into the main pool periodically. When building a block, Geth no longer prefers the txpool locals, but you can configure a set of addresses that should get priority using the --txpool.locals CLI flag. (#30559, #31127)

  • For static nodes (from configuration or RPC admin_addPeer), the node URL can contain a DNS name. Geth will now resolve these names when attempting to connect to the peer, instead of at configuration parsing time. This is useful for setting up testing networks in Docker or Kubernetes where the IP address of a node might not be known ahead of time. (#30822)

  • Geth can now use the STUN protocol to figure out its own IP. There is a built-in list of public servers, or you can specify your own. Use --nat=stun to enable. (#31064)

  • Some minor bugs in the p2p protocol implementation got fixed. (#30855, #30918)

Build

  • This release is built with Go 1.23.6 (#31130)
  • The 'toolchain' line has been removed from go.mod (#31057)
  • go-ethereum library functionality should now build and run on wasip1 (#31090)

For a full rundown of the changes please consult the Geth 1.15.0 release milestone


As with all our previous releases, you can find the:

Schwarzschild (v1.14.13)

30 Jan 13:17
@fjl fjl
Compare
Choose a tag to compare

This is a security release, fixing a vulnerability (CVE-2025-24883).

Please update your nodes ASAP.


As with all our previous releases, you can find the:

Gei Hinnom (v1.14.12)

19 Nov 13:53
Compare
Choose a tag to compare

This release covers quite a lot of time, and has many changes across the codebase. In particular; changes in tracing and account management, optimizations in database, trie and evm, and, as always bugfixes.

This release removes the personal RPC namespace. It was already previously deprecated, and has not been accessible by default for nearly two years. We also removed the --unlock command-line parameter, with a view towards removing key/account management from the geth binary.

  • Key management:
    • Remove --unlock command line flag from geth (#30737)
    • Remove personal RPC namespace (#30704)
  • Builds:
    • RISC-V docker images (#30739)
    • ppa-builds for ubuntu 24.10 (#30580)
  • Tracing:
    • invoke OnCodeChange-hook on selfdestruct (#30686, #30497)
    • improvements to flatCallTracer (#30539)
    • invoke tx-end hook in runtime helpers (#30711)
    • disableCode and disableStorage options for prestateTracer (#30648)
    • tracing of system calls (#30666)
    • Change to how chainconfig is passed to tracers (breaking change) (#30540)
    • add GetTransientState method to StateDB interface (#30531)
  • Signing:
    • improved support for EIP-712 array types (#30620)
    • non-legacy transactions support for ledger wallets (#30180)
  • Bugfixes:
    • Set basefee for AccessList based on given block, not chain tip (#30538)
    • Multiple issues in benchmarks (#30667)
    • Fix bug with resolving a payload (#30615)
  • Database optimizations
    • Run pebble in non-sync mode (#30573, #29792). This change makes quite a big difference on certain OS:es, particularly MacOSX/Darwin, where
      it has been noted that fsync is notoriously slow.
    • Use to increasing level sizes (#30602), This change makes pebble use larger files, reducing the number of files from 160K to 10K.
  • Assorted:
    • Make jwtsecretflag expand tilde
    • Work on verkle (#30672)
    • Work on EIP-7002 and EIP 7251 (#30571)
    • Implement EIP-7685 and EIP-6110 (flat requests enconding) (#30425)
    • Validation of EOF containers (#30418)
    • More helpful responses for rejected transactions (#30715)
    • Work on cross-execution witness (#30698)
    • EVM speed optimizations (#30662, #30629)
    • Reduce peak memory usage during reorg (#30600)
    • Speed up trie commit via concurrent workers (#30545)
    • Fuzzing improvments (#30585)
    • Implement new engine_getBlobsV1 API method (#30537)

For a full rundown of the changes please consult the Geth 1.14.12 release milestone.


As with all our previous releases, you can find the: