Skip to content

v5.1.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 20:45
· 201 commits to main since this release
fa8c419

Nuthatch 5.1.0 adds address history (RFC-0063): a nest that watches accounts rather than contracts,
and serves their history at /api in Etherscan's shapes, so rotki can use it as an indexer. Nothing
about an existing nest changes. There is no storage migration.

This minor is a month early. 5.x cuts features monthly, and this one was brought forward for rotki,
whose founder agreed to a local indexer source on 2026-10-09 (rotki/rotki#13335). It adds and breaks
nothing, which is all the policy asks of a minor.

Address history (RFC-0063)

A nuthatch.toml with an [address_history] table and no [[contracts]] watches the accounts it
names. It runs on its own light path, one cursor beside the event pipeline, with no SQL engine and no
sealing: 31.6 MB idle, 179 ms to start, 45 MB at its peak during a backfill.

  • Transactions and transfers (#2012, #2013): txlist, tokentx, tokennfttx and token1155tx,
    found by tracing from and to each address and by positional eth_getLogs, each transaction
    hydrated once.
  • Internal transactions (#2016): txlistinternal by address and by hash, by Etherscan's rules
    (value-carrying calls, creates and selfdestructs; reverted frames listed with isError "1").
    --trace-rpc names an RPC whose trace_filter takes a long range.
  • Withdrawals, produced blocks and timestamps (#2018): txsBeaconWithdrawal, getminedblocks
    with the block reward, and getblocknobytime.
  • Verified block partitions (#2019): nuthatch partitions writes 10,000-block Parquet files of
    full headers and withdrawals. A nest that names [address_history.mirror] reads them instead of one
    RPC call per block, hashing every header, linking it to its parent, anchoring the range to a block
    its own RPC calls finalized and recomputing every withdrawals root. A file that fails is refused,
    never served. Ethereum's are published from Shanghai onward; see the hosted page on the website.
  • Proxy passthroughs (#2020): the proxy actions rotki asks for and logs/getLogs, forwarded to
    the nest's RPC in Etherscan's shapes, on a loopback bind only.
  • MEV from the relays (#2021): nuthatchProducedBlocks reports each block an account produced or
    was paid for, with what the MEV-Boost relays say was delivered. Off unless mev_relays = true,
    because the relays see the block numbers asked about. No relay record is no figure, never zero.

A range the nest has not fetched answers NUTHATCH_INCOMPLETE, and an action it does not serve
NUTHATCH_UNSUPPORTED, so a client falls back to its next source rather than reading a gap as an
empty history. The table stays out of the nest's identity; accounts are added at runtime through
POST /api/watch, on a loopback bind.

Checked against Etherscan on vitalik.eth over Ethereum blocks 18M to 20M: 2,318 transactions, 3,334
token, 106 NFT and 53 ERC-1155 transfers, 3,131 withdrawals and 20 of 20 timestamps, every field
equal; internal transactions, block rewards and relay deliveries on pinned cases, to the wei.
scripts/rfc0063-gate.sh re-runs it.

Fixes

  • /ready age assertions in the serve tests allow a clock tick (#2015), and two other flakes that
    turned main red are gone (#2009).

Gated on Lodestar's data

Address history runs on its own path and is reached only by a nest that declares it, so this release
changes no query path the release gate measures. Its commit carries the gate's statuses as usual.

Compatibility and upgrade

Replace the binary and restart. No re-index. A nest without [address_history] behaves exactly as on
5.0.1.