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.
- EIP-2537 - BLS12-381 curve operations - has seen some updates. (#30978)
- EIP-7623 - Increase calldata cost - was implemented this cycle. (#30946)
- EIP-7685 - Execution layer requests - support was updated. (#30670, #30829, #31103, #31010, #31071, #30938, #31102)
- EIP-7702 - Set EOA account code - was implemented this cycle. Note Geth does not support EIP-7702 transactions in the txpool just yet. (#30078, #30935, #30936, #31054, #31032, #30933, #30982, #31089, #30926)
- EIP-7840 - Blob schedule in EL config - was implemented this cycle. (#31002, #31101, #31128)
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 likeeth_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 functionsWaitMinedHash
,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 afterRollback
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:
- 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.