Skip to content

v3.6.0

Latest

Choose a tag to compare

@erigon-release erigon-release released this 24 Aug 18:49
· 465 commits to main since this release
ecc2ad9

Erigon v3.6.0 — Upstream Underbelly

Erigon 3.6.0 is headlined by more reliable Caplin block production, pruned nodes reclaiming old snapshots, and
plain commitment snapshots, with leaner state access and maintenance throughout. Most 3.5 users can upgrade without
re-syncing. To benefit immediately from the new plain commitment format, existing users should install 3.6, then run
erigon seg reset --datadir=<path> before starting the node; the next start will re-sync using the new snapshots. Datadirs
created with Erigon 3.3 or earlier that have not already been rebased must use this reset path or run
erigon seg step-rebase --datadir=<path> --new-step-size=390625 before their first normal 3.6 start.

Highlights

  • More reliable Caplin block production. Caplin starts payload building before proposer slots and publishes fork
    choice earlier, giving blocks more time to reach attesters (#23437, #23172) — by @lystopad
  • Pruned nodes now reclaim old state snapshots. State history, indexes, optional commitment history, and the receipts
    cache are retired once they fall outside their configured windows; fresh syncs also skip optional snapshots outside
    those windows. This fixes unbounded snapshot growth on long-running minimal and other pruned nodes (#21306, #22123,
    #21200, #22243, #22349) — by @AskAlexSharov, @JkLondon
  • Plain commitment snapshots. New commitment files store values directly by default, speeding state reads and merges
    at the cost of larger files. Existing referenced files remain readable and convert lazily during merges; the offline
    integration commitment convert command provides an explicit migration path (#14809, #21452, #21376, #21933) — by
    @awskii, @AskAlexSharov
  • Faster state access and snapshot maintenance. Sharded LRU state, code, and commitment caches replace whole-cache
    resets; compression during state-snapshot merges is 2–3× faster, dictionary-building merges are about 1.5× faster,
    and the mainnet .bt pivot cache uses roughly one quarter of its previous heap (#21386, #21982, #22154, #21625,
    #22050, #21875) — by @mh0lt, @yperbasis, @sudeepdino008, @AskAlexSharov

Breaking Changes

  • Downgrading after 3.6 writes new snapshot files is unsupported. New 3.6 snapshot and accessor formats are
    incompatible with Erigon 3.5. Back up the datadir before upgrading if rollback is required (#21452, #21376, #21778).
  • Historical receipts are off by default on fresh datadirs in every prune mode. Existing datadirs keep their stored
    enable/disable setting. Without the cache, receipt and log RPCs re-execute within the state-history window at higher
    latency. Blocks-mode operators who need receipts and logs back to genesis must use
    --prune.include-receipts --prune.receipts.distance=keep-all (#22296, #22349) — by @yperbasis, @AskAlexSharov
  • Idle polling filters expire after five minutes. Clients using eth_newFilter, eth_newBlockFilter, or
    eth_newPendingTransactionFilter must poll within the timeout or recreate the filter. Configure
    --rpc.subscription.filters.timeout, or set it to 0 to disable eviction. New subscriptions_active and
    subscriptions_*_total metrics track the filter lifecycle (#22261) — by @onelapahead
  • JSON-RPC compatibility changes. Quoted decimal block numbers such as "3" are rejected; use "0x3", a bare
    integer, or a named tag. Streaming trace errors no longer include result: null alongside error (#21985, #21922) —
    by @lupin012

Added and Changed

RPC

  • With --prune.include-commitment-history, eth_getWitness now builds and verifies a lean witness for any block within
    retained history (#22099) — by @awskii
  • eth_fillTransaction fills missing fields and returns the unsigned raw transaction plus its JSON form, compatible
    with geth; KZG generation from raw blobs is not included (#21870) — by @lupin012
  • eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCount, eth_getProof, and
    eth_getStorageValues now default an omitted block parameter to latest (#21586) — by @MysticRyuujin
  • trace_block and trace_replayBlockTransactions can include beacon-withdrawal balance changes through the optional
    IncludeWithdrawals trace setting (#21592) — by @lupin012

Consensus layer and protocol

  • Validation now rejects fork-inconsistent blocks and sidecars, truncated typed transactions, invalid fee relationships,
    and blob wrappers with trailing data (#22920, #23041, #22902, #23297) — by @yperbasis, @chfast
  • Default block graffiti now identifies both the execution and consensus clients (#22303) — by @lystopad
  • Caplin archive maintenance repairs truncated validator tables, backs off repeatedly failing retirement work, removes
    frozen state rows from its indexing DB for reuse, and stores compact effective balances, cutting the measured per-slot
    copy from about 266 MB to 18 MB (#22385, #22396, #22411, #23408) — by @awskii, @AskAlexSharov, @lystopad
  • Caplin advertises its bound ports, skips peers without TCP endpoints, and accepts Chiado libp2p bootstrap nodes
    (#22273, #22271, #23245) — by @MysticRyuujin, @domiwei
  • A deadlock in the transaction pool that could wedge block-producing nodes during high load has been resolved (#23360) — by @lystopad
  • Glamsterdam devnet-6 support adds EIP-8282 builder execution requests, EIP-2780, EIP-8038, EIP-8246, and the devnet-6
    revisions of EIP-7928/EIP-8037; Caplin tracks the Gloas alpha.11 request format, and BALs can be regenerated throughout
    retained state history, extending beyond the weak-subjectivity period (#22091, #22093, #22053, #22060, #22122,
    #22136, #22161, #21764) — by @domiwei,
    @taratorio. Devnet/testing only — not scheduled on mainnet or any public testnet.

Operations

  • Pruning flags now use readable policies: --prune.distance accepts keep-all, and --prune.distance.blocks accepts
    keep-post-merge and keep-all. Receipt and commitment-history caches have independent --prune.*.distance windows;
    the former receipt flag names remain aliases (#22119, #21200, #22349) — by @yperbasis, @JkLondon, @AskAlexSharov
  • Missing E3 accessors are rebuilt automatically on restart. erigon seg index --rebuild rebuilds every snapshot
    accessor and index without deleting snapshot data (#22682, #21919) — by @AskAlexSharov, @sudeepdino008
  • Commitment preloading no longer stalls when a step budget fills exactly (#23153) — by @lystopad
  • The command-line layer now uses urfave/cli/v3. Normal flag handling remains compatible, and --config now applies
    to subcommands; operators with unusual invocation patterns should smoke-test them (#22130, #22546) — by
    @AskAlexSharov, @yperbasis, @lupin012

Full Changelog: v3.5.5...v3.6.0