Releases: ethereum/go-ethereum
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.
Sharblu (v1.10.18)
After a long train of maintenance releases, we are happy to announce this feature release of Geth!
This release is ready for the Merge transition on the Ropsten testnet, and will activate the Merge on Ropsten when the testnet reaches a total difficulty of 43531756765713534.
Please ensure you have a beacon chain node configured for the transition. You can find more information about preparing for the Merge in our guide: https://geth.ethereum.org/docs/interface/merge.
Note: the Merge transition on Ropsten was unsuccessful because the configured TD was reached earlier than expected. Please run geth with --override.terminaltotaldifficulty 100000000000000000000000
on Ropsten for the time being.
The tracing subsystem has been another focus area of this release cycle. We have replaced the JavaScript interpreter used by the tracing engine with Goja, which offers slightly better performance and implements many ES6 language features. There are minor differences in JS tracing semantics: The built-in functions memory.slice
, memory.getUint
, stack.peek
will now throw an exception and interrupt tracing when accessing out-of-bounds data. They previously returned an empty value for invalid args instead.
This release contains further breaking changes to tracing APIs. Be sure to check the tracing changelog section. Please also report any incompatibilities you encounter.
Changes related to the Merge
- Ropsten: terminal total difficulty is configured for the Merge. (#24876)
- In RPC APIs where a block number can be given, you can now use
"finalized"
to refer to the latest finalized block. (#24282) - Geth can now serve CL requests to build a new block with very low latency because new blocks are constructed in the background. (#24866)
- For CL-induced reorgs to a block with unavailable state, Geth now recomputes the state by re-processing ancestor blocks. (#24613)
- The "engine" API implementation complies with the latest specification version. (#24802, #24855, #24915)
- Several annoyances related to sync after the Merge have been fixed. (#24691, #24670, #24610)
Geth changes
- Geth's default gas limit target is now 30M. (#24680)
- Geth now prints a warning when launching on the deprecated Rinkeby testnet. (#24884)
- The free disk space monitor is more aggressive and the critical level at which it will initiate a shutdown is now set to 256 MB by default. (#24781)
- Geth now prints a small guide when started in
--dev
mode. (#24759) - Geth no longer reports 'Snapshot extension registration failed' as an error. (#24475)
- The
--eth.requiredblocks
flag was fixed to work correctly. (#24817) - Using
geth --dev
with a datadir previously initialized bygeth init
should now work correctly. (#24693) geth init
will now complain when creating a Clique-based chain without any configured signers. (#24470)- The new
geth db check-state-content
command checks integrity of trie nodes in the database. (#24840) geth snapshot verify-state
now checks for 'dangling' storage entries. (#24643, #24677)evm t8n
can now run post-merge state transitions. (#24546)- The hex input data of
evm run
is now verified to have even length. (#24721) - Using Clef for clique block signing should be fixed. (#24941)
- The example code that shows how to use Clef from Python works again. (#24440)
Core changes
- When generating a state snapshot from the state trie, Geth now ensures that 'dangling' storage entries from previous snapshots are removed from the database. This fixes an issue that could lead to incorrect EVM execution results after snap sync in certain cases. (#24811)
- The transaction pool now correctly drops the oldest transactions when truncating the queue to stay below the configured global limit. (#24908)
- The reference tests have been upgraded to version 10.4. (#24899)
- EVM
MSTORE
is now 75% faster. (#24847, #24860) - The EVM now implements EIP-3855 (PUSH0 instruction). This feature is not yet active in any fork. (#24039)
- The ancient store ('freezer') implementation is now exported in package ethdb, and can be used independently of the chain database. (#24684)
- The miner no longer commits the in-progress block to disk when interrupted by a new chain head event. This improves block creation latency. (#24638)
- The Goerli testnet has new bootstrap nodes. (#24900)
- An crash in LES ultralight sync is resolved. (#24641)
- Several data races related to snap sync are fixed in this release. (#24685)
- The snap protocol server no longer includes superfluous account proofs when a storage response hits the size limit. (#24885)
- The snap client now de-duplicates trie node heal requests better, sorting them by the requested state trie path. This can slightly reduce the overall amount of data transferred during snap sync. (#24779)
- The eth block fetcher now disconnects peers that repeatedly fail to reply to header requests. (#24652)
- The trie implementation can now optionally trace nodes which were deleted/overwritten by state updates. (#24403)
Go library changes
- common/compiler: The Solidity and Vyper wrappers have been removed. This is a breaking change. (#24936)
abigen --sol
does not work anymore. (#24936)- ethclient:
Client
now has aPeerCount
method. (#24849) - ethclient/gethclient:
GetProof
now also returns storage proofs (#24697) - accounts/abi: decoder no longer crashes for invalid struct field names. (#24932)
- accounts/abi: logs are now decoded correctly when all arguments are indexed. (#24792)
- accounts/abi:
ParseSelector
now handles tuple arrays. (#24587) - signer/fourbyte: 4byte signatures have been updated. (#22865, #24842)
- mobile:
Receipt.EncodeJSON
now actually returns JSON instead of RLP. (#24701) - accounts/abi/bind: contract calls on the
pending
block now correctly return theeth_call
RPC error, if any. (#24649) - core/types: the
miner
field is now optional when decoding block headers from JSON (#24666) - ethdb/remotedb: it is now possible to attach a chain database via RPC. This feature is meant to be used for debugging. (#24905, #24836)
Tracing changes
- The JavaScript tracing environment now uses the Goja interpreter instead of Duktape. There should be no noticable differences in semantics resulting from this change. (#23773, #24934)
- In JS tracers, the
log.memory
object now has alength
method. (#24887) - API change: In all tracers (JS, native, structlog), memory content is now captured before the EVM expands it. Previously, tracing would see memory after it had already been affected by the current instruction. (#24867)
- API change:
debug_traceTransaction
, in the default structured-logging mode, now returns the refund counter for every EVM executio...
Ploitari (v1.10.17)
This is a maintenance release. This release contains a lot of work in preparation for The Merge, and work for an upcoming change to the way state is stored in go-ethereum.
This release also adds a new tool to convert 'legacy' receipts into a newer format. During startup, geth will check the database and tell you if you need to perform the conversion. Converting receipts is only needed if geth's ancients
database has not been resynced from scratch during the last couple of years. It is recommended to back-up your receipts freezer table (ancients/receipts*
) before performing the conversion.
Compatibility note about core/types
: For optimization purposes, types.Header
and other types in this package now implement the rlp.Encoder
interface. This change can cause incompatibilities because the new method is implemented with pointer receiver. Attempting to RLP-encode unadressable (i.e. non-pointer) values of type Header
does not work anymore and will result in an error.
Change Log
- A lot of work towards "The Merge" (TM) was performed (#24574, #24569, #24550, #24548, #24506, #24545, #23982, #24522, #24364)
- A lot optimizations for RLP encoding and package trie were added (roughly 20-30% improvement) (#24126, #24425, #24420, #24251)
- Preparatory work for an upcoming for state layout change (#24460, #23954, #24486, #24391, #24392)
- GraphQL: fee history API methods were added, along with nonce for pending accounts (#24452)
- The non-cgo fallback secp256k1 crypto library was updated and is now ~25% faster (#24533)
- Support for signing nested types via
clef
(#24407) - Receipt converter tool (#24028)
- Our builds were updated to use Go 1.18
For a full rundown of the changes please consult the Geth 1.10.17 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.
Osun (v1.10.16)
The focus of this release is bugfixes.
Bugfixes
- Block tracing via
debug.traceBlockByHash
has sometimes produced inconsistent/corrupt results. Fixed via (#24286). - The
--whitelist
CLI parameter functionality was broken inv1.10.14
, and is fixed in this release (#24210). - A bug was introduced, and subsequently fixed, which could cause data corruption during mining (#24349).
- When signing complex datatypes in EIP712-type data, the signing-hash was incorrect. Fixed via (#24220).
- Evm execution times exported via
metrics
, were sometimes incorrect. Fixed in (#24304). - Range prover edgecases found and fixed (#24266, #24257).
- Fix an error related to
HTTP2
handling (#24292). - A lot of spleling-mistkaes and issues related to correctness were fixed (#24194, #24196, #24198, #24205, #24207, #24244, #24270, #24271, #24224, #24372, #24323, #24289, #24263 and #24211).
New features
- Work on The Merge includes support for
RANDOM
opcode (#24141) and various other internal refactorings (#24328, #24280, #24236, #23256). - The
devp2p
binary now supports doingsnap/v1
protocol testing against a remote node, which can be used for Hive-testing (#24276). - New diagnostic command to show database metadata (#23900)
ethclient
support forCallContractAtHash
(#24355).- Support chainId for GnosisSafeTx (#24231).
Performance
- Tracing was improved by making the
prestate
tracer be a native tracer (#24320, #24268). - Potentially reduce database allocations in some cases (#24117).
- Add a set of cross-client external benchmarks (#24050).
- Improve transaction indexing performance (#24197).
For a full rundown of the changes please consult the Geth 1.10.16 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.
Faryar (v1.10.15)
This release resolves a few regressions introduced by the previous release. Most importantly, it fixes an issue that could cause peer-to-peer 'eth' connections to lock up.
Please upgrade ASAP if you are running geth v1.10.12 / .13 / .14.
- A hang in ancient data serving caused by double-locking is fixed. (#24189)
- A crash in the LES server related to reorg handling is resolved. (#24189)
- The SyncProgress method of ethclient.Client works again. (#24199)
- Several inconsistencies in the GraphQL API are also fixed in this release. (#24190, #24188, #24191)
For a full rundown of the changes please consult the Geth 1.10.15 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.