Releases: ethereum/go-ethereum
Saradril (v1.11.1)
This is a patch-release, fixing a couple of issues with the major release yesterday:
- Make our MacOS-builds work again (26653),
- Fix some flaws related to withdrawals (Shanghai), which were detected on
zhejiang
testnet (#26704 [#26707],(#26707)). - Fix an issue where geth refused to start following a partial datadir wipe 26703
This version is ready for the Shanghai upgrade on Sepolia.
If have not already upgraded to v1.11.0
, then you should also read the release notes for that version.
If you have already upgraded to v1.11.0
, there is no urgency in upgrading to v1.11.1
, unless you are directly affected by the issues; e.g. want to use of Sepolia.
For a full rundown of the changes please consult the Geth 1.11.1 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.
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](https://github.com/ethereum/go-ethereum/...
Paravin (v1.10.26)
Geth v1.10.26 contains backports of bug-fixes from the main branch.
- The JSON-RPC client no longer hangs when invalid batch results are returned by the server. (#26064)
- A corner-case issue in the filter system is resolved. (#26054)
- Various improvements to snap sync are included in this release. (#25831, #25694, #25666, #25651)
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.
Nemata (v1.10.25)
Geth v1.10.25 is a tiny update to flip the mainnet chain configuration to be post-merge. This disables legacy sync and will prevent Geth from even starting sync until a consensus client is attached and sends forkchoice updates. The update prevents bad PoW actors from trying to get the node to - temporarily, but annoyingly - download bad state data.
This release is optional and only affects initial sync. The release was made mostly for completeness' sake rather than out of necessity.
For a full rundown of the changes please consult the Geth 1.10.25 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.
Jarfor (v1.10.24)
Geth v1.10.24 is a small hotfix release for users of the GraphQL APIs. It fixes a single bug where filtering for logs from a single transaction via GraphQL returned logs from the entire block, not just the single transaction. Single transaction log filtering is unavailable via the RPC and does not impact the merge.
You only need to apply this change if you rely on both GraphQL and single transaction log filtering.
For a full rundown of the changes please consult the Geth 1.10.24 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.
Sentry Omega (v1.10.23)
Geth v1.10.23 is a hotfix release for a pruning regression that was introduced in v1.10.22. For technical details on the bug, please check out the PR that fixes it.
If anyone updated to v1.10.22 in these past couple of days, there is a fairly high probability that some state data might have gone missing from your node. Doing a full check on the state is possible geth snapshot traverse-state
, but will likely take a day and the fix is all the same anyway.
To ensure that your node has all the data, please rewind your local chain to a block before you updated (if unsure, just pick a block before the release time) with debug.setHead("0xblock-number-in-hex")
via the Geth console (on IPC), or debug_setHead
via JSON RPC (you might need to temporarilly expose the debug
namespace to do that). The brute force alternative of course is to resync after an update, which you can do by deleting your chaindata
folder (but please leave the ancient
folder within to keep the blocks).
We apologize for this regression and the headaches fixing it will entail on your side. We've learnt the hard way that there's an untested class of bugs that appear across full sync restarts.
For a full rundown of the changes please consult the Geth 1.10.23 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.
Original Merge release notes
Geth v1.10.22 v1.10.23 enables the Merge for the Ethereum mainnet at a Terminal Total Difficulty of 58_750_000_000_000_000_000_000
.
This TTD is expected to be reached on the 15. September 2022.
Merge EIPs
Additional notes about the merge changes
- This release configures the Terminal Total Difficulty for mainnet. (#25528)
- Many engine API issues found by hive have been fixed for this release. (#25552, #25423, #25414, #25416, #25428)
- The Goerli testnet is now internally configured as 'successfully merged'. (#25519, #24538)
JSON-RPC API
- The log filtering system now uses a LRU cache for block logs, speeding up repeated queries for the same block range. The cache size can be configured using the
--cache.blocklogs
command-line flag. (#25459) eth_createAccessList
is now much faster when no gas limit is provided. (#25467)eth_feeHistory
now also works with thefinalized
block specifier. (#25442)- The built-in callTracer now supports an option
onlyTopCall
. Enabling this option makes the tracer skip internal calls. We added this option to enable use of thecallTracer
to get the return data of reverted transactions. (#25430)
Go-library changes
- Storage of trie node hash preimages is now disabled by default. You can enable it again using the
--cache.preimages
flag. (#25287, #25538, #25533) - The ethash mining implemenation now removes temporary DAG files, which could be left of disk when geth was interrupted while generating a DAG. (#25381)
- ethclient now supports the
eth_feeHistory
method. (#25403) - The eth wire protocol test suite now supports protocol version eth/67. (#25306)
- RLP-decoding of trie nodes is ~33% faster due to reduced allocations in the decoder. (#25357)
- The RPC server supports a new option
ReadHeaderTimeout
. (#25338) - Registering of clef ruleset UIs should now work correctly. (#25455)
Build
- Geth binaries in docker are now statically-linked. (#25492)
- This release is built using Go 1.18.5. (#25461)
For a full rundown of the original merge release changes please consult the Geth 1.10.22 release milestone.
Promavess (v1.10.22)
WARNING: This release seems to contain a regression that can corrupt the local state. Please hold on with updating while we investigate the issue!
Geth v1.10.22 enables the Merge for the Ethereum mainnet at a Terminal Total Difficulty of 58_750_000_000_000_000_000_000
.
This TTD is expected to be reached on the 15. September 2022.
Merge EIPs
Additional notes about the merge changes
- This release configures the Terminal Total Difficulty for mainnet. (#25528)
- Many engine API issues found by hive have been fixed for this release. (#25552, #25423, #25414, #25416, #25428)
- The Goerli testnet is now internally configured as 'successfully merged'. (#25519, #24538)
JSON-RPC API
- The log filtering system now uses a LRU cache for block logs, speeding up repeated queries for the same block range. The cache size can be configured using the
--cache.blocklogs
command-line flag. (#25459) eth_createAccessList
is now much faster when no gas limit is provided. (#25467)eth_feeHistory
now also works with thefinalized
block specifier. (#25442)- The built-in callTracer now supports an option
onlyTopCall
. Enabling this option makes the tracer skip internal calls. We added this option to enable use of thecallTracer
to get the return data of reverted transactions. (#25430)
Go-library changes
- Storage of trie node hash preimages is now disabled by default. You can enable it again using the
--cache.preimages
flag. (#25287, #25538, #25533) - The ethash mining implemenation now removes temporary DAG files, which could be left of disk when geth was interrupted while generating a DAG. (#25381)
- ethclient now supports the
eth_feeHistory
method. (#25403) - The eth wire protocol test suite now supports protocol version eth/67. (#25306)
- RLP-decoding of trie nodes is ~33% faster due to reduced allocations in the decoder. (#25357)
- The RPC server supports a new option
ReadHeaderTimeout
. (#25338) - Registering of clef ruleset UIs should now work correctly. (#25455)
Build
- Geth binaries in docker are now statically-linked. (#25492)
- This release is built using Go 1.18.5. (#25461)
For a full rundown of the changes please consult the Geth 1.10.22 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.
Nausicaa (v1.10.21)
Geth v1.10.21 is a maintenance release, adding built-in configuration for the merge fork on the Goerli testnet and the mergeNetsplitBlock
for the Sepolia testnet.
Specifically, this release
- defines a terminal total difficulty for Goerli as 10_790_000 (#25324) and
- defines the mergeNetsplitBlock as 1735371 for Sepolia. (#25372)
Command changes
- The
--netrestrict
option is now also applied for discv5. (#25304) - DNS discovery is now enabled for the Sepolia testnet. (#25288)
- puppeth can no longer deploy parity and pyethapp because these clients are unmaintained. (#25329)
- abigen now has a workaround for parameter names which are also Go keywords. (#25307)
- A few minor regressions in geth CLI argument handling are fixed. (#25234)
RPC API changes
- In block-based RPC methods like
eth_getBlockByNumber
, thesafe
block specifier can now be used to refer to the "safe" block post-merge. (#25165) - The
baseFee
can now be overridden in block tracing. (#25219) - RPC methods returning transaction objects now return the
chainId
for legacy transactions. (#25244) - In
eth_sendTransaction
, thechainId
parameter now verified even for legacy transactions. (#25157) eth_call
,eth_estimateGas
no longer add tx fees to the coinbase account. (#25214)- A new built-in tracer,
revertReasonTracer
, has been added. (#25265)
Merge changes
- The engine API can no longer perform block insertion while the client is snap-syncing. (#25210)
- When trying to set bad blocks retrieved via sync as canon, the API now returns INVALID. (#25190)
- The engine API endpoint ('authrpc') is now enabled by default. (#25152, #25394)
- Several other engine API bugs found during #TestingTheMerge are fixed. (#25230, #25136, #25236)
Go Library Changes
- The snap sync implementation has been updated in preparation for 'path-based state storage'. (#24898)
- The HTTP RPC server will no longer hang on shutdown even with very busy connections. (#25258)
- Package signer/core/apitypes now provides a function to calculate the EIP-712 typed data hash. (#25283)
Build changes
- We have reverted to an older version of goleveldb because recent versions have buggy compaction and manifest handling. (#25413)
- This release is built with Go 1.18.4 (#25247, #25293)
- Release tarballs have proper directory timestamps. (#25290)
For a full rundown of the changes please consult the Geth 1.10.21 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.
Vectra (v1.10.20)
Geth v1.10.20 is a maintenance release, adding built-in configuration for the merge fork on the Sepolia testnet.
Specifically, this release defines a terminal total difficulty for Sepolia (#25179).
Geth command changes
- Geth and most other command-line tools now use a newer version of the command-line argument/flag handling library. There is one new restriction with this change: flags must now be given before other arguments. Very few of Geth's subcommands take arguments, so this is unlikely to cause issues. (#24751)
- The
geth js
subcommand has been removed. (#25000) - The new
--discovery.port
flag allows configuring a separate port for the UDP listener. (#24979) - Setting p2p bootstrap nodes in the config file now works even when a pre-defined network is selected on the command-line. (#25174)
RPC API changes
eth_chainId
now always returns the configured chain ID regardless of sync status. This is a violation of EIP-695, but the previous behavior caused issues with CL clients. (#25166, #25168)- Transaction objects returned by RPC (e.g. from
eth_getTransactionByHash
) now always include thechainId
field, even for untyped (legacy) transactions. (#25155) - The deprecated RPC method
personal_signAndSendTransaction
has been removed. (#25111) - Handling of certain reorg corner cases is improved in the Engine API. (#25187, #25139)
- A performance regression in JS tracing is resolved. (#25156)
Build changes
For a full rundown of the changes please consult the Geth 1.10.20 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.
Camaron (v1.10.19)
Geth v1.10.19 is yet another feature release.
The release contains the Gray Glacier fork definition. The Gray Glacier fork is a difficulty-bomb postponement, which is expected to go live on Ethereum Mainnet towards the end of June.
In other words: all users are required to upgrade before the Gray Glacier hardfork activates at block 15050000
(#25088)
Changes which may cause incompatibilities:
- The
engine
API is now only available with JWT authentication. - Geth will refuse to start if legacy receipts are present in the database. The check can be disabled with
--ignore-legacy-receipts
, but we strongly recommend you run the conversion in this case (#24943). - The RPC method
debug_traceCall
will now reject execution against thepending
block (#24871). - RPC timer metrics have been changed into histograms (#25044).
Other changes in this release:
- Updates related to The Merge on Ropsten, which is now a proof-of-stake network (#25018, #24975, #25078)!
- The
debug_traceCall
RPC method now also supports block overrides; making fields like timestamp or the block number settable by the caller (#24871). - A new diagnostic tool,
geth snapshot inspect-account
, allows investigations of snapshot data (#24765). - Fixes and preparatory work related to The Merge (#24946, #25006, #24955, #24997).
- Preparatory work for the upcoming path-based trie storage feature (#24750).
- Introduce
eth/67
protocol, dropping support for GetNodeData (#24093). - Optimizations related to block processing (#23500, #24958, #24616).
- Tests/fuzzing improvements (#25033, #25038, #25037, #25036, #25016, #24249 #24928).
- Many updates to documentation (#25086, #25058, #25057, #25056, #25040, #25032).
- Nicer format when showing chain config (#24904).
For a full rundown of the changes please consult the Geth 1.10.19 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.