Skip to content

Releases: ethereum/go-ethereum

Spekilas (v1.11.3)

07 Mar 17:18
Compare
Choose a tag to compare

This is a minor release, fixing a couple of issues and enabling the Shanghai upgrade on Goerli at block timestamp 1678832736 (#26795).

⚠️ If you are running Goerli, this is a required update.

Minimum Go version

In accordance with our policy to only support the newest two versions of Go, we have changed the minimum required compiler version to Go 1.19 (#26803).

Pebble

In v1.11.0 we released Pebble support (guarded by the --db.engine=pebble flag). Thanks to everyone testing it! We found and fixed a few issues:

  • You can now set more than 4 GB in --cache when using Pebble. (#26776)
  • Range compaction now works correctly for Pebble. (#26771)
  • Pebble support is disabled on OpenBSD to resolve a compilation error. (#26801)

RPC changes

  • Add support for Parity-style flat traces with the new built-in flatCallTracer. (#26377)
  • The callTracer now reports a null address for failed contract creation operations. (#26779)
  • head and difficulty have been removed in admin_peerInfo responses. (#26804)

Other fixes

  • types.Receipt now contains the EffectiveGasPrice of the transaction, so you can get the true gas price using the TransactionReceipt method of ethclient. (#26713)
  • ethclient no longer panics when requesting missing blocks. This fixes a regression introduced in v1.11.2. (#26817)
  • ethclient now returns block withdrawals, if present. (#26778)
  • During building of new blocks, failed transactions no longer count towards used block gas, improving block space utilization. (#26799)
  • Faster crawling time for the DNS crawler (#26685)
  • Use the last announced finalized block instead of LES CHT for the ancient limit (#26685)
  • CPU usage metrics (geth.system/cpu/*) are more accurate (#26793)

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


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

Kite's Nest (v1.11.2)

22 Feb 12:26
Compare
Choose a tag to compare

Geth 1.11.2 (Kite's Nest) is a patch-release, fixing a couple of issues with the 1.11 release family.

  • Fix a few small engine API discordances with the spec post-Shanghai (#26696, #26722).
  • Fix unmarshalling JSON null values as a proper result instead of nil (#26723).
  • Fix dumpgenesis which failed due to a bad database key write (#26747).
  • Fix pending tx filter to return hashes, not full txs by default (#26757).
  • Fix eth_feeHistory to accept decimal blocks again (#26758).
  • Fix Ubuntu PPA builds after the Go 1.20 fallout.

Feature wise there's one change in this release: the downloader's chain sync messages are aggregated into periodic (8s) outputs instead of a log line for every batch of data imported (#26676).

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


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

Saradril (v1.11.1)

16 Feb 19:54
7696106
Compare
Choose a tag to compare

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:

Annos Basin (v1.11.0)

15 Feb 18:16
18b641b
Compare
Choose a tag to compare

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).

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.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.

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

Minor changes and features

Read more

Paravin (v1.10.26)

03 Nov 11:06
@fjl fjl
Compare
Choose a tag to compare

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:

Nemata (v1.10.25)

15 Sep 16:08
69568c5
Compare
Choose a tag to compare

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:

Jarfor (v1.10.24)

14 Sep 09:21
972007a
Compare
Choose a tag to compare

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:

Sentry Omega (v1.10.23)

24 Aug 09:13
d901d85
Compare
Choose a tag to compare

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:


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

  • EIP-3676: Upgrade consensus to Proof-of-Stake
  • EIP-4339: Supplant DIFFICULTY opcode with PREVRANDAO

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 the finalized 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 the callTracer 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)

22 Aug 08:38
Compare
Choose a tag to compare

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

  • EIP-3676: Upgrade consensus to Proof-of-Stake
  • EIP-4339: Supplant DIFFICULTY opcode with PREVRANDAO

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 the finalized 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 the callTracer 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:

Nausicaa (v1.10.21)

27 Jul 11:58
Compare
Choose a tag to compare

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, the safe 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, the chainId 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: