This is a maintenance release with accumulated bug fixes and improvements, and is recommended for all users. It also continues the implementation work for the upcoming Amsterdam hardfork.
One thing worth highlighting:
- Clef has been removed. The standalone
clefsigner has moved to https://github.com/ethereum/clef (#35097).
Fork Implementation (Amsterdam)
- EIP-7928: Block-Level Access Lists: the block access list is now constructed and verified during block execution, with the serving side of the eth/71 BAL messages implemented (#34652, #34803, #34879, #34957, #34967, #34972, #34977, #35110)
- EIP-8189: snap/2, a new state-sync protocol based on block-level access lists, has been added (#34626, #34807, #35098, #35155, #35158, #35163, #35178, #35180, #35181)
- EIP-8037: state-creation gas cost increase, has been implemented (#33601)
- The tracing system provides a new
OnGasChangeV2hook for multi-dimensional gas (#34946)
- The tracing system provides a new
engine_newPayloadWithWitnessV5has been added and the witness format now uses the canonical spec field ordering (#35009)- The
evm t8ntooling has been updated for Amsterdam, adding BAL and slot-number support and binary-trie leaf export (#34843, #35025) - For EIP-7843, the slot number is now set for the pending block post-Amsterdam (#34792, #35036)
Geth
- Caches are now sized against the cgroup memory cap (e.g. Docker
--memory) when one is set (#34947) - A number of small command-line flag and logging issues have been fixed (#33880, #34732, #34943, #34948, #35011, #35104, #35116, #35136)
- A number of long-deprecated command-line flags have been removed (#35021)
RPC
-
eth_baseFeehas been added, returning the base fee of the next block (#34904, #35023) -
eth_capabilitieshas been added, letting clients discover which historical data a node can serve (#33886) -
debug_clearTxpoolhas been added to clear the transaction pool (#33347, #35130) -
State-reading methods (
eth_getBalance,eth_getCode,eth_getStorageAt, etc.) now default the block parameter tolatestwhen omitted (#35100) -
Fixes for
eth_simulateV1: an incorrect "base fee too low" error code and a pre-Shanghai withdrawal regression (#34951, #34939) -
debug_setHeadnow propagates rewind errors instead of silently ignoring them (#35001) -
EIP-7702 transactions with a nil
Toaddress are now rejected (#35094) -
HTTP RPC responses now always set
Content-Length, and a WebSocket handshake status-code bug was fixed (#35072, #35111) -
The client can now configure trace-context propagation via the
traceparentheader, and response writes are now traced (#35132, #35049)
GraphQL
- GraphQL request bodies are now limited to 5 MiB (#35034)
- Log-range queries with
begin > 0andend == 0are now rejected (#35032) - The
Block.rawresolver now returns empty bytes when the block body is missing (#35027)
Core
- A global cache for JUMPDEST bitmaps speeds up EVM execution (#34850)
- EVM stack operations are now computed in place, avoiding per-operand copies (#35156)
- New code-cache hit/miss meters have been added (#34821)
- A shutdown race in snapshot generation has been fixed (#33540)
Engine API & Blobs
- Engine API JSON encoding for large blob payloads has been optimized, and gzip is disabled on the engine API (#33969, #35057)
engine_hasBlobshas been added, andengine_getBlobsnow counts only actually-available blobs (#34859, #35028)- A cache for
GetBlobsrequests reduces engine API latency, and otel tracing has been added to the GetBlobs endpoints (#35124, #35026) - Reorged v0 blob sidecar transactions are now dropped rather than converted (#35099)
testing_commitBlockV1has been added as the write companion totesting_buildBlockV1(#34995)- New payloads are now imported at genesis regardless of sync status (#32673)
Networking
- NAT STUN discovery no longer fails on IPv6 servers (#35084)
- Several snap-sync robustness fixes: uncovered state is removed before resuming, a catch-up stall was fixed, sync restarts when the required BAL is unavailable, and the pivot is frozen once state download completes (#35159)
For a full rundown of the changes please consult the Geth 1.17.4 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(use "stable" tag). - Ubuntu packages in our Launchpad PPA repository.
- macOS packages in our Homebrew Tap repository.