Go Ethereum Versions Save

Go implementation of the Ethereum protocol

v1.14.0

1 day ago

Geth v1.14.0 (Asteria) is a major release with some juicy new features as well as some breaking changes. Please read through the release notes before updating to it. Whilst it should not adversely impact most users, there're always those rare occurrences.

Highlights

  • Geth v1.14.0 switches over the default state trie representation from hash mode to path mode (i.e. --state.scheme flipped form hash to path) (#29108). This change does not affect Geth instances with pre-existing databases, in the case of which Geth continues to use whatever the existing database's format is. If no previous database exists however, for full nodes, Geth will now default to pathdb. The main advantage is built-in, online historical state pruning; no more runaway state growth.

    • If you want to force the old behaviour, you can run Geth with --state.scheme=hash for now. That said, we will be dropping hash mode sooner rather than later, so we advise everyone running full nodes to gradually switch, if they haven't yet.
    • Archive mode support is not yet finalised for path mode, so archive nodes will still run in hash mode. Naturally, hash mode will not be dropped until a full path archive lands and people have enough time to switch to it.
  • Geth v1.14.0 introduces a brand new live-tracing feature, where one or more transaction tracers might be injected into the block processing pipeline, ensuring that tracing and execution happen in lockstep (#29189). Since Go does not have a cross platform, OS native plugin infrastructure, adding live tracers needs to be done at the Geth source code level, and Geth itself subsequently rebuilt. That said, the advantage is that such tracers have full execution flexibility to do whatever they like and however they like. Please see the live-tracer changelog and docs for details.

    • Live tracing runs in lockstep with block execution, one waiting for the other. You should never run a live tracer on a validating node, or any other where latency is important. The recommended practice is to have tracers collect and export the bare minimum data needed and do any post-processing in external systems where latency is not relevant.
    • The live tracer work required a number of breaking internal API changes. If you had your own native tracers implemented before this change, the changelog contains the necessary steps needed to update your old code for the new APIs.
  • Geth v1.14.0 replaces the completely random transaction propagation paths (in the Ethereum P2P network) with pseudo-random ones, that ensure transactions from the same account follow the same path in the network (as long as no peer churn happens). The purpose is to allow a burst of transactions from the same account to ripple through the network on the same connections, minimising reordering. Whilst this doesn't provide any guarantees, nor does it replace the potential need for more complex routing logic, it should make nonce gaps significantly less likely, reducing the probability of dropped transactions during bursts (#29034).

    • This change only applies to networking, so other clients are not required to follow suit. That said, the network would behave more consistently overall if all clients implemented some similar logic (the exact routing algorithm is irrelevant, as long as it's stable in the accounts).
  • Geth v1.14.0 drops support for running pre-merge networks (#29169). This does not mean that Geth will not be able to process or validate pre-merge blocks, rather that starting v1.14.0, Geth must have a consensus client drive it's chain selection. Geth drops the forward-sync mode of operation, where it imports blocks based on PoW (ethash) or PoA (clique) difficulties.

    • Non-merged networks will need to stick to Geth v1.13.x until they transition to post-merge. As Ethereum has transitioned towards a post-merge world, we cannot maintain a significant chunk of code that's been dead for 2 years now on mainnet.
    • Post-merge networks must be marked so with the terminalTotalDifficultyPassed: true field in their genesis.json. This requirement will be dropped (along with even caring at all about this field) in a few releases, but for now this field produces a clear error message for the user of what's wrong with their pre-merge network.
  • Geth v1.14.0 stops automatically constructing the pending block (#28623). Performance wise there is a significant cost to creating a potential pending block, yet most node operators do not care about it. Not even validators need the pending block. This work also drops support for mining/signing a block "off-demand" (i.e. not via the engine API, rather by Geth itself), meaning Clique signing is also removed going forward.

    • With Clique mining removed, Geth v1.14.0 cannot be a Clique signer any more. This however goes hand-in-hand with the removal or pre-merge chain selection and synchronisation support described earlier.
    • The pending block can still be constructed on demand for now. Whenever an RPC method is called that is based on the pending block, Geth will generate it on the fly and cache it for 1 second for subsequent calls. The first such call will have a few hundred ms execution delay.
  • Geth v1.14.0 removes support for filtering pending logs. This is following the previous change of creating the pending block only on demand. We see next to no value in monitoring the logs of a random subset of transactions that might (but probably mostly will not) end up in the next block. Power users who wish to monitor the transaction pool for MEV (or similar) purposes, should hook into Geth directly and extract the exact data they need, rather than rely on insufficient API endpoints.

  • Geth v1.14.0 ships a beacon chain light client (#28822, #29308, #29335, #29532, #29567). It uses the REST API of beacon nodes and requires the beacon / light_client namespace, currently supported by Lodestar and Nimbus (specs).

    • The beacon light client provides access to consensus layer data, not execution layer data. This currently means that it can follow the beacon chain as a light client and extract the latest head and finalised execution layer block. That can be used to drive a full execution node without running an own beacon node. There is no support yet for a full execution light client.
    • Validation and staking is not possible with a beacon light client. Since the sync committee signatures on each beacon head are canonised in the next block, the beacon light client can only follow the chain with one slot delay.
    • The beacon light client exists both as a standalone executable and integrated into Geth. The blsync executable can drive any execution layer node through the standard engine API or can just do a "test run" printing block numbers and hashes to the console. The integrated mode can do the same inside Geth. If you specify at least one suitable consensus layer REST API endpoint with the --beacon.api flag, then Geth will run without a beacon node connected through the engine API.
  • Geth v1.14.0 switched to using Go v1.22 by default (#28946), which means we've dropped support for Go v1.20. Geth also started using of new features from Go v1.21 in our codebase, so building with Go v1.20 will probably error from now on. Just a heads up.

Features

  • Add the geth db inspect-history command to inspect pathdb state history (#29267).
  • Enable the Cancun hard-fork when running Geth in dev mode (#28829).
  • Use beacon chain finality as the marker to move old blocks into ancients (#28683).
  • Drop large-contract (500MB+) deletion DoS protection from pathdb post Cancun (#28940).
  • Switch Geth's USB library from libusb to hid for simpler hardware wallet support (#28945, #29175, #29176).
  • Update the prestateTrancer to take into account 4844 blobs and their fees (#29168).
  • Extend the ethclient and gethclient packages with support for 4844 blob fields (#29198).
  • Detailed block execution metrics are now always reported, deprecating --metrics.expensive (#29191).
  • Avoid a lot of memory allocations while shuffling 4844 blobs within Geth (#29050).
  • Switch to using Go's native log/slog package instead of golang/exp (#29302).
  • When computing state roots, apply state updates before deletes to avoid some trie lookups. (#29201).
  • Track not only total peer count, but also how many are inbound or outbound (#29424).
  • Add support for signing blob transactions (#28976, #29470).
  • Surface max initcode exceeded errors from the VM to outer callers (#29354).
  • Update the EVM to reject contract creation on top of non-empty storage (#28912).
  • Switch over the BLS implementation from kilic to gnark (#29441).
  • Start emitting performance degradation warnings if pebble is overloaded (#29478).
  • Add eth_blobBaseFee RPC method, extend eth_feeHistory with blobs (#29140).

Bugfixes

  • Shave an allocation off of pathdb trie writes caused by a bad initial buffer size (#29106).
  • Fix a crash in dev mode using pathdb when rewinding more than 128 blocks (#29107).
  • Fix some non-conformance issues in the engine API's error returns (#29115).
  • Fix a too early db close in geth dump and geth snapshot dump (#29100).
  • Fix the devp2p command to not ignore specified bootnodes (#29091).
  • Fix the prestateTracer to return the correct nonce for contract creations (#29099).
  • Fix blob fee formatting on RPC output from decimal to hexadecimal (#29166).
  • Fix the blob pool tx acceptance error if it is already known vs underprices (#29210).
  • Fix a few Windows file path joining issues in various go-ethereum utilities (#29227, #29479, #29489).
  • Fix a data race when tracing a block via the JavaScript tracers (#29238).
  • Fix a number of chain rewinding corner-cases after crashes (#29196, #29245).
  • Fix an ENR RLP decoding issue in the devp2p command (#29257).
  • Fix withdrawal collection for simulated chains and dev mode (#29344).
  • Fix a snap sync corner-case in hashdb mode (#29341).
  • Fix an engine API field name mismatch for GetClientVersion (#29351).
  • Fix a maximum unix socket path length check on macos (#29385).
  • Fix an issue in the blob-pool that prevented Geth to start after a crash (#29451).
  • Fix an issue that caused the JSON loggers to discard some log level (#29471).
  • Fix the (now post-merge) genesis block difficulty in dev mode (#29469).
  • Fix the precompile addresses of BLS ops (not live code yet) (#29445).
  • Fix a data race that sometimes returned reorged receipts (#29343).
  • Fix a snap-sync restart quirk that sometimes resulted in redownloading some data (#29378).
  • Fix a snap-sync restart quirk that sometimes resulted in corrupting some data (#29313).
  • Fix ancient header reader to hard cap at 2MB (network soft limit) (#29534).
  • Fix the topic filtering to enforce some sanity nesting limits (#29535).

We'd also like to shout out to a very high number of authors sending many nitpick PRs. Whilst we are not entirely sure about the intent behind these PRs (commit farming and all), we are nonetheless happy that the Geth codebase gets better.

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


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

v1.13.15

1 week ago

Geth v1.13.15 is a maintenance-release that contains some fixes mainly to avoid snapsync-related data-corruption.

We recommend all users to upgrade to v1.13.15 as soon as possible.


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

v1.13.14

1 month ago

Geth v1.13.14 is a small maintenance release with a handful of polishes to the blob pool:

  • Disallow blob transactions below the protocol minimum of 1 wei to enter the pool (#29081).
  • Reduce the blob pool's max capacity to 2.5GB for the rollout. (#29090).
  • Fix gas estimation for blob transactions (#29085).

This release is NOT critical for the Cancun fork, but recommended to make Geth lighter in anticipation to unknown blob load.

Other fixes:

  • Support overriding the basefee during tracing (#29051).
  • Fix call tracers missing top level logs in top-only mode (#29068).
  • Support unlimited gas for eth_createAccessList if --gascap=0 (#28846).

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


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

v1.13.13

2 months ago

This is a minor release with fixes for several issues related to the upcoming Cancun mainnet fork. As such, it is recommended for all mainnet users.

Changes in this release:

  • Block-building performance with blob transactions has been improved a lot. (#29026, #29008, #29005)
  • A corner case in the EVM related to out-of-order fork scheduling has been fixed. (#29023)
  • eth_fillTransaction has seen some bug fixes related to blob transactions as well. (#28929, #29037)
  • A rare panic in the ethstats client related to chain reorgs is resolved. (#29020)
  • The blobpool database will now recover from disk corruption faults instead of crashing geth on startup. (#29001)
  • Geth now implements getClientVersionV1 on the Engine API endpoint. (#28915, #28994)

Go API changes:

  • ethereum.CallMsg now contains EIP-4844 related fields (#28989)
  • core.GenesisAlloc is now available from package core/types. We hope this change will reduce external dependencies on package core. (#29003)

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


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

v1.13.12

2 months ago

This release embeds the mainnet fork number for Cancun, scheduled to go live on 13th March, 2024 (unix 1710338135). The specification can be read here, and it contains the following changes:

To go along Cancun, we're providing refreshed Grafana dashboards:

Other than that, the following assorted fixes and features are included in this release:

  • Initial implementation of the era format. The era format is meant to provide a cross-client archive format for block data (#26621, #28959)
  • Make rpc request limits configurable (#28948)
  • Fix memory-leak with blob transactions (#28917)
  • Stricter adherence to engine api spec (#28882)
  • Fix enforcement of minimum miner tip (#28933)

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


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

v1.13.11

3 months ago

This release fixes a few bugs and enables the Cancun upgrade for the Sepolia and Holesky networks; Sepolia will upgrade on Jan 31, and Holesky on Feb 7, and naturally this is a required upgrade if you intend to follow either chain.

  • Enable Cancun on Sepolia and Holesky, plus Cancun-related changes (#28834, #28246, #28230, #28827)
  • Support EIP-4844 transactions in API-methods (#28786)
  • Change how transaction indexing operates. As of 1.13.11, the behaviour of eth_syncing is slightly changed, so that it now does reports true until transaction indexing is finished. (#28703)
  • rlpdump: add -pos flag for displaying byte positions (#28785)
  • Fixes logging configuration (#28801)

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


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

v1.13.10

3 months ago

This release is equivalent to v1.13.9, just contains a version bump. The reason is that a bad commit was tagged on 1.13.9 originally and whilst it was untagged and fixed, some caches (Go's package manager (go mod)) managed to store the temporary bad version. As there is no way for us to flush the bad version out, it's cleaner to tag a next version instead. Apologies about the mess.


This release fixes a few issues and enables the Cancun upgrade for the Goerli network at block timestamp 1705473120 (#28719) which is 6:32:am 17. Jan. 2024 UTC.

:warning: If you are running Goerli, this is a required update!

Apart from the Goerli configuration update, we have a few other changes.

  • The 'simulated backend' in package accounts/abi/backends was rewritten. The improved version is available from the new package ethclient/simulated. A backwards-compatibility wrapper remains in the old location. (#28202)
  • Fix ABI-encoding of negative big.Int in topics (#28764)
  • In JSON logging output, the "error" level is now correctly emitted as "error". (#28774, #28780)
  • Fixed an issue with configuration of stdlib package log for consumers of the geth library (#28747)
  • geth removedb can now be run non-interactively (#28725)
  • We're building a package for ubuntu 23.10: mantic minotaur now (#28728)

Testing

  • Add currentExcessBlobGas to the state tests for better coverage of state tests (#28735)
  • Fixed an issue in t8n regarding blob gas usage (#28735)

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


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

v1.13.9

3 months ago

This release fixes a few issues and enables the Cancun upgrade for the Goerli network at block timestamp 1705473120 (#28719) which is 6:32:am 17. Jan. 2024 UTC.

:warning: If you are running Goerli, this is a required update!

Apart from the Goerli configuration update, we have a few other changes.

  • The 'simulated backend' in package accounts/abi/backends was rewritten. The improved version is available from the new package ethclient/simulated. A backwards-compatibility wrapper remains in the old location. (#28202)
  • Fix ABI-encoding of negative big.Int in topics (#28764)
  • In JSON logging output, the "error" level is now correctly emitted as "error". (#28774, #28780)
  • Fixed an issue with configuration of stdlib package log for consumers of the geth library (#28747)
  • geth removedb can now be run non-interactively (#28725)
  • We're building a package for ubuntu 23.10: mantic minotaur now (#28728)

Testing

  • Add currentExcessBlobGas to the state tests for better coverage of state tests (#28735)
  • Fixed an issue in t8n regarding blob gas usage (#28735)

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


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

v1.13.8

4 months ago

This is a hotfix release for a regression which affects v1.13.6 and v1.13.7: if the node is shut down during sync, the node will refuse to start, with the error message Fatal: Failed to register the Ethereum service: waiting for sync (#28718, #28724).

Please also see the release notes for v1.13.6 and v1.13.7

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


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

v1.13.7

4 months ago

We're issuing this release to fix an issue with our build pipeline. There are also some other changes:

  • The eth_sendTransaction RPC method now behaves more correctly for low-fee transactions. (#27834)
  • We have upgraded the golang.org/x/crypto module dependency. The Go team has issued a new version to fix a vulnerability in the ssh package. While we do not use this package, we have upgraded the dependency in order to stop dependabot warnings. (#28702)

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


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