Geth v1.17.5: Amsterdam Hardfork Progress and Key Performance Upgrades

imagem 36

Geth v1.17.5 is a maintenance release packed with bug fixes and enhancements, and it comes highly recommended for all users. This update also continues laying the groundwork for the upcoming Amsterdam hardfork.

Two highlights stand out. First, the default GOGC (garbage collection target) has been raised from 20 to 50, trading a bit more memory for less GC overhead and smoother performance; use --gogc=20 if you prefer the old behavior. Second, Pebble v2 is now supported as a key-value store backend – it will be used automatically for fresh boots, while existing databases remain on Pebble v1 unless you run geth db pebble-upgrade to migrate explicitly.

Amsterdam hardfork implementation marches forward. Several EIPs are now implemented or refreshed: EIP-2780 (resource-based intrinsic transaction gas), EIP-8037 (state creation gas cost increase), EIP-8038 (state-access gas cost update), EIP-8246 (removal of SELFDESTRUCT burn), EIP-8282 (builder execution requests), EIP-7997 (deterministic factory contract), EIP-7954 (increase maximum contract size), and EIP-7928 (block-level access lists). Test coverage for the Amsterdam fork has grown, a new --override.amsterdam flag is available, named hardforks have been removed from the BPO schedule, and the Bogota fork has been introduced in chain configuration.

Under the hood, the core sees a sparse blobpool to slash blob transaction pool memory, with legacy blobpool entries migrating to the new cell-based sidecar format on startup. Support for v0 blob sidecars is dropped entirely. An inlined gas deduction function fixes a performance regression, and a bug in eth/71 block-access-list empty marker decoding that could wrongly disconnect peers has been squashed. Snap sync now disables itself after the pivot block is committed, and an issue causing backfill failures due to missing canonical-hash mappings is resolved. debug_setHead is faster and rejects unrecoverable targets. The chain’s JUMPDEST cache is reused in payload building for a speedup. Pebble v2 integration is completed, and .ere files are now supported in the era store. A new trie.UpdateBatch API arrives, along with fixes for freezer truncation after unclean shutdowns, state recoverability reporting, and account prefetching for absent accounts. Snap v2 receives several fixes, block validation gets optimized, and development on the binary trie continues. Transaction size calculation is also corrected.

Network stability improves with high-value peer protection – peers that consistently deliver good transactions are less likely to be dropped. DNS discovery trees now filter out invalid and unreachable nodes, and a dual-stack listener is supported in devp2p, accompanied by related fixes.

On the RPC front, a --rpc.http-body-limit flag lets you cap HTTP request body sizes. The API now refuses gasPrice when combined with an authorizationList, rejects block parameters lacking both number and hash, and matches the authorization scheme case-insensitively.

Tracing updates ensure the struct logger honors its configured log limit, frames are emitted in the EIP-2780 style, ERC-7562 tracer output includes the log index, and callcode transfers are no longer incorrectly captured.

The Engine API passes TargetGasLimit now, maximum reorg depth is configurable (with several related adjustments), block access lists are returned from engine_getPayloadBodiesV2, and the miner’s MaxBlobsPerBlock is capped to the protocol limit.

Geth tooling adds the --gogc flag (and the default change), writes block-level access lists in geth export, preserves metrics tag values containing ‘=’, and updates EELS tests to v20.0.0. The accounts subsystem forwards the blob fee cap to external signers, abigen v2 bindings gain a GetABI() method, and abigen v1 bindings now correctly handle library dependency deployment. Build dependencies see the ckzg library updated and the bootstrap Go version bumped to 1.25.12.

As always, pre-built binaries for all platforms are available on the downloads page, Docker images are at ethereum/client-go (tag “stable”), Ubuntu packages are in the Launchpad PPA, and macOS packages through Homebrew Tap.

Leave a Comment

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