Annos Basin (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:
- Stick with goleveldb as long as we can, don't worry about it,
- Fork goleveldb (or some other database), and maintain it ourselves.
- 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 discoverpebble
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).
The callTracer
includes intentional breaking changes. Please refer to the Tracing section of the release notes.
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.ggeth 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.
Tracing
callTracer
fields gasUsed
and value
have changed in the following cases:
gasUsed
of the top call frame now accounts for intrinsic gas and refunds. (#26048)- In case of a DELEGATECALL frame, the value which was previously null is set to the parent call's value. This is done to match EVM semantics. (#26632)
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
- Added
pebble
as a new database backend. (#26517, #26650) - Make use of golang generics (#26290 #26194, #26162, #26159)
- Prepare for upcoming Shanghai hardfork (#26645, #26624, #26554, #26548,#26232, #26591, #26565, #26563, #26555, #26549, #26484, #26474, #26475, #23847, #26458)
- Remove Ropsten support (#26644)
- Prepare for path-based-storage (#26637, #26603, #26324, #25532, #25896)
- Remove mobile packages (#26599)
- Deprecate
personal
namespace (#26390) - internal/debug: add --log.file option (#26149)
- eth/tracers: add multiplexing tracer (#26086)
- eth/tracers: add diffMode to prestateTracer (#25422)
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
- 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)
- eth/tracers: fix gasUsed for native and JS tracers (#26048)
- core/vm: set tracer-observable value of a delegatecall to match parent value (#26632)
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)
Bugfixes
- 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:
- 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.