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 execution step. (#24567) - API change: in structlog steps, the fields
memory
andreturnData
will only be present when they contain non-empty data. (#24547) - Tracing now takes refunds and access list costs into account. This fixes inaccuracies: in JS tracers, the
intrinsicGas
property is now correct even when there are refunds. In the built-in "prestate" tracer, the sender balance added to the result should now be the true balance at the beginning of the transaction. (#24510) - In native (Go) tracers, the txhash/blockhash being traced is now available. (#24679)
RPC / GraphQL changes
- The GraphQL API now supports retrieving the binary representation of consensus objects. (#24816, #24738)
- In GraphQL queries, values of type
Long
(representing a block number, for example) can now be set using a query variable. (#24864) - Error messages printed/returned when accessing missing block logs are improved. (#24617)
debug_testSignCliqueBlock
is not available anymore. (#24837)- The new
debug_getRawReceipts
RPC method returns the binary representation of block receipts. (#24773) - The new
debug_dbGet
method can be used to read from the chain database. (#24739)
Build changes
- This release is built with Go 1.18.1 (#24689)
- Our PPA now publishes .deb packages for Ubuntu 22.04 LTS. (#24813)
- Incremental builds of Docker images of Geth should be faster. (#24796)
- Code generation tools are now tracked by go.mod, making
go generate
more deterministic. (#24682) - go-ethereum now uses the toolchain feature 'embed' instead of go-bindata. It is no longer necessary to run
go generate
after changing certain assets such as JS files. (#24744) - go-ethereum now takes advantage of several standard library features available in Go 1.16 and later. (#24886, #24869, #24890, #24861, #24835, #24633)
- Dependency conflicts related to github.com/btcsuite/btcd v0.22.0 are fixed. (#24700, #24939)
For a full rundown of the changes please consult the Geth 1.10.18 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.