Geth v1.17.4: A Maintenance Release Paving the Way for Amsterdam

imagem 5

Go Ethereum’s latest maintenance release, version 1.17.4, delivers a bundle of accumulated bug fixes and performance improvements, making it a recommended upgrade for all users. This release also pushes forward the implementation work for the highly anticipated Amsterdam hardfork.

One notable change: the standalone Clef signer has been extracted from the main client and moved to its own repository at https://github.com/ethereum/clef.

Amsterdam Fork Progress

The Amsterdam hardfork continues to take shape with several key EIPs now implemented. EIP-7928 (Block-Level Access Lists) is now fully integrated: the block access list is constructed and verified during execution, and the serving side of the eth/71 BAL messages is complete. Building on this, EIP-8189 introduces snap/2, a new state-sync protocol that leverages block-level access lists for more efficient synchronization.

EIP-8037, which increases gas costs for state creation, has also been implemented. To support this and future multi-dimensional gas models, the tracing system now offers a new OnGasChangeV2 hook. Additionally, the Engine API gains engine_newPayloadWithWitnessV5, with the witness format now adhering to the canonical spec field ordering. The evm t8n tooling has been updated for Amsterdam, adding BAL and slot-number support along with binary-trie leaf export. Finally, for EIP-7843, the slot number is now correctly set for the pending block in a post-Amsterdam context.

General Improvements

Under the hood, Geth now sizes its caches relative to the cgroup memory cap when one is set—such as Docker’s --memory flag—ensuring more predictable resource usage. Numerous small command-line flag and logging issues have been ironed out, and several long-deprecated flags have been removed to clean up the interface.

RPC Enhancements

The RPC layer sees several additions and refinements. A new eth_baseFee method returns the base fee of the next block, while eth_capabilities allows clients to discover which historical data a node can serve. Another new debug endpoint, debug_clearTxpool, makes it possible to flush the transaction pool. State-reading methods like eth_getBalance and eth_getCode now default the block parameter to latest when omitted, aligning with common expectations.

Fixes include correcting an incorrect “base fee too low” error code in eth_simulateV1 and a pre-Shanghai withdrawal regression. The debug_setHead method now properly propagates rewind errors instead of silently ignoring them, and EIP-7702 transactions with a nil To address are rejected. HTTP RPC responses always set Content-Length, a WebSocket handshake status-code bug was fixed, and the client can now configure trace-context propagation via the traceparent header, with response writes now traced as well.

GraphQL Tightening

GraphQL requests are now limited to 5 MiB to prevent abuse, and log-range queries with begin > 0 and end == 0 are rejected. The Block.raw resolver now returns empty bytes when the block body is missing, avoiding confusion.

Core Performance Tweaks

On the execution front, a global cache for JUMPDEST bitmaps speeds up EVM execution, and stack operations are now computed in place, eliminating per-operand copies. New code-cache hit/miss meters provide better observability, and a shutdown race in snapshot generation has been resolved.

Engine API & Blob Handling

Engine API JSON encoding for large blob payloads has been optimized, and gzip is disabled to reduce overhead. The new engine_hasBlobs method supplements the existing engine_getBlobs, which now correctly counts only actually-available blobs. A cache for GetBlobs requests reduces latency, and OpenTelemetry tracing has been added to these endpoints. Reorged v0 blob sidecar transactions are now dropped rather than converted, preventing potential issues. Additionally, a new testing_commitBlockV1 method acts as the write companion to testing_buildBlockV1, and new payloads are now imported at genesis regardless of sync status.

Networking Robustness

NAT STUN discovery no longer fails on IPv6 servers, and several snap-sync refinements improve reliability: uncovered state is now 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.

For a full list of changes, see the Geth 1.17.4 release milestone. As always, pre-built binaries are available on the downloads page, Docker images at ethereum/client-go (use the “stable” tag), Ubuntu packages via Launchpad PPA, and macOS packages in the Homebrew Tap.

Leave a Comment

Your email address will not be published. Required fields are marked *