Ethereum (Go) - v1.11.0

This is a major release, containing over 300 PRs. Our original intention was to release 1.11 with path-based storage, but eventually we decided it was time to make the release without waiting for PBSS to be merged, so we can get back to a steady release schedule.

We hope to soon follow up the 1.11 release with 1.12, including PBSS.

Shanghai Upgrade Support

Most of the code for the Shanghai fork is merged into 1.11, but activation of the fork is not configured. The Shanghai protocol upgrade will contain the ability to make withdrawals from the consensus-layer (beacon chain). Withdrawals are specified in EIP-4895: Beacon chain push withdrawals as operations.

Other features included are EIP-3855: PUSH0 instruction, EIP-3860: Limit and meter initcode and EIP-3651: Warm COINBASE.

A New Database Backend

Pebble was added as a database backend to replace good old LevelDB.

LevelDB has served us very well over the years, alas, it is a one-person project where the maintainer has signaled that the project is not a priority. We have been forced to consider three options:

  1. Stick with goleveldb as long as we can, don't worry about it,
  2. Fork goleveldb (or some other database), and maintain it ourselves.
  3. Pick a different database, actively maintained by a dedicated team.

Since option one is not really a long-term solution, the choice was between two and three. Maintaining a database is a huge effort, and is not a burden we want to carry. Hence, we have been aiming for option 3, and eventually settled on Pebble.

Pebble is actively maintained by a dedicated team, and is used by other projects. We hope that this is a good long-term bet. It has performed well in our benchmark tests, we are very interested in getting feedback from actual production systems. In order to use pebble,

  • You need to be on a 64-bit system,
  • You also need to resync from scratch (with or without ancients) -- there is no migration functionality,
  • And you need to specify --db.engine=pebble initially. For subsequent runs, geth should discover pebble automatically.

Removed Features

We have removed support for the ropsten and kiln test networks. We have also removed libraries for mobile development and the puppeth tool.

The personal RPC namespace is now deprecated. In order to interact with personal APIs, you need to specifically allow it via the --rpc.enabledeprecatedpersonal command-line flag.

Support for certain legacy files configuration files was dropped. geth now will ignore these datadir files:

  • static-nodes.json
  • trusted-nodes.json

If any these are found, an error will be printed to the log. Setups using such files should use to the TOML configuration-file instead.

Backwards-Incompatible Changes

When using geth for mining or as a clique sealer, the --miner.etherbase flag now has to be be set explicitly. Previously, Geth would use the 'first' local account as etherbase automatically, but this possibility has been removed in Geth 1.11.

This change does not affect proof-of-stake networks because the fee recipient address is provided by the consenus-layer and not configured in Geth anymore.

Geth's JSON-RPC server has become more strict; the JSON-RPC spec requires the version field to be exactly "jsonrpc": "2.0". This is now verified by the server -- a change which is not backwards-compatible with non-conforming client implementations.

If you are building from source, go-ethereum now requires Go version 1.18 or later (#26160).

New Features

#26149 added an option to direct log output to a file. This feature has been requested a lot. It's sometimes useful to have this available when running geth in an environment that doesn't easily allow redirecting the output.

We have added a method debug_setTrieFlushInterval to make it possible to set the trie flush interval via RPC (#24785). Essentially, this makes it possible to configure the node to be more or less "archive:ish", and without restarting the node while reconfiguring it.

Geth can now set custom HTTP headers, in particular for two scenarios:

  • geth attach
  • geth commands which can use --remotedb, e.g geth db inspect

The ability to use custom headers is typically useful for connecting to cloud-apis, e.g. providing an infura- or alchemy key, or for that matter access-keys for environments behind cloudflare.


For tracing, it is sometimes desirable to capture logs triggered by a trace, when using the callTracer. For example: call USDT.transfer will trigger a Transfer(from, to, value) event. By specifying {"withLog": true}, these events will be collected. Some bugs related to tracing and gasUsed was fixed.

For prestateTracer, the result will from now on omit empty fields instead of including a zero value (e.g. no more balance: '0x'). The prestateTracer now takes an option diffMode: bool. In this mode the tracer will output the pre state and post data for the modified parts of state.

#26241 should make it easier to sign EIP-712 typed data via the accounts.Wallet API, by using the mimetype for typed data.

It is now possible to get the result for multiple tracers in one go via the muxTracer.

Filter System

Via the filter subscriptions to newPendingTransactions, one can now subscribe to the full pending transactions, as opposed to just being notified about hashes.

The keywords safe and finalized can now also be used as block range specifiers when requesting logs.

All Changes

Larger changes

Minor changes and features

  • rpc: remove DecimalOrHex type (#26629)
  • Make abi codec more strict (#26568)
  • core/vm: improve EVM instance reusability (#26341)
  • core: improve ambiguous block validation message (#26582)
  • log: better sanitation (#26556, #26630)
  • p2p/discover: add more packet information in logs (#26307)
  • common/mclock: add Alarm (#26333)
  • core/rawdb: implement resettable freezer (#26324)
  • signer: enable typed data signing from signer rpc (#26241)
  • rpc: support injecting HTTP headers through context (#26023)
  • improve reading Go runtime metrics (#25886)
  • Changes for Cancun hardfork
  • Implement EIP-1153: Transient Storage (#26003)
  • Implement eth/68 to support larger transactions over the wire (#25980)
  • Add 60s timeout to graphql queries(#26116)
  • common/types: add Address.Big (#26132)
  • p2p/discover: improve discv5 NODES response packing (#26033)
  • eth/tracers: add withLog to callTracer (#25991)
  • eth/filters, ethclient/gethclient: add fullTx option to pending tx filter (#25186)
  • node: drop support for static & trusted node list files (#25610)
  • accounts/usbwallet: support Ledger Nano S Plus and FTS (#25933)
  • cmd/abigen: change --exc to exclude by type name (#22620)
  • rpc: improve error codes for internal server errors (#25678)
  • rpc: check that "version" is "2.0" in request objects (#25570)
  • node, rpc: add JWT auth support in client (#24911)
  • eth/fetcher: throttle peers which deliver many invalid transactions (#25573)

Changes related to testing

  • core/vm: add bn256ScalarMul testcase for zero scalar value (#26607)
  • cmd/evm: add blocktest subcommand to evm (#26526)
  • core/state: remove notion of fake storage (#24916)
  • Make it possible to set the trie flush interval via RPC (#24785)
  • cmd/evm: output stateroot in statetest result (#26297)
  • eth/catalyst: make tests less time-sensitive (#26201)
  • rpc, internal/guide: speed up tests a bit (#26193)
  • cmd/evm: slight change in how t8n handles coinbase pre eip-158 (#26139)
  • eth/tracers: remove revertReasonTracer, add revert reason to callTracer (#25508)


  • Fix a flaw in snap-sync, where geth would stall state-sync until blocks were fully downloaded (#26453)
  • Fix cornercase shutdown behaviour in freezer, and be more diligent about performing fsync on close (#26485, #26490). More fixes to the freezer were implemented in (#26245) and (#26251)
  • rpc: fix off-by-one in ipc endpoint length check (#26614)
  • params: fix timestamp display in fork banner (#26553)
  • console, internal/jsre: fix autocomplete issues (#26518)
  • les/fetcher : fix requestTimer leak (#26514)
  • metrics/influxdb: fix time ticker leaks (#26507)
  • tests: fix DIFFICULTY error in state executor (#26465)
  • core: reset txpool on sethead (#26392)
  • core: fix state flushing for catalyst mode (#26319)
  • graphql, node, rpc: improve HTTP write timeout handling (#25457)
  • include transaction sender in pending-subscription (#26126)
  • common/lru: fix race in lru (#26164)
  • p2p/discover: fix handling of distance 256 in lookupDistances (#26087)
  • Fix trace call for inner reverts (#25971)
  • eth/tracers: fix gasUsed for native and JS tracers (#26048)
  • eth/tracers: fix the issue prestate missing existing contract state (#25996)
  • eth/filters: fix for eth_getLogs failing with finalized- and safe tag (#25922)
  • eth/traces: add state limit (#25812)
  • ethclient/gethclient: fix bugs in override object encoding (#25616)
  • eth/downloader, les/downloader: fix subtle flaw in queue delivery (#25861)
  • core: fix datarace in txpool, fixes #25870 and #25869 (#25872)
  • eth/catalyst: add locking around newpayload (#25816)
  • eth: fix a rare datarace on CHT challenge reply / shutdown
  • node: fix HTTP server always force closing (#25755)
  • eth/protocols/snap: throttle trie heal requests when peers DoS us (#25666)
  • eth/protocols/snap: fix problems due to idle-but-busy peers
  • trie: update comments + err check for preimages (#25672)
  • trie: check childrens' existence concurrently for snap heal (#25694)
  • eth, les: rework chain tracer (#25143)

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

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


Feb. 15, 2023, 6:16 p.m.
Annos Basin (v1.11.0)
Register or login to:
  • 🔍View and search all Ethereum (Go) releases.
  • 🛠️Create and share lists to track your tools.
  • 🚨Setup notifications for major, security, feature or patch updates.
  • 🚀Much more coming soon!
Continue with GitHub
Continue with Google