Repository navigation
v5.1.0
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,tokennfttxandtoken1155tx,
found by tracing from and to each address and by positionaleth_getLogs, each transaction
hydrated once. - Internal transactions (#2016):
txlistinternalby address and by hash, by Etherscan's rules
(value-carrying calls, creates and selfdestructs; reverted frames listed withisError"1").
--trace-rpcnames an RPC whosetrace_filtertakes a long range. - Withdrawals, produced blocks and timestamps (#2018):
txsBeaconWithdrawal,getminedblocks
with the block reward, andgetblocknobytime. - Verified block partitions (#2019):
nuthatch partitionswrites 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
proxyactions rotki asks for andlogs/getLogs, forwarded to
the nest's RPC in Etherscan's shapes, on a loopback bind only. - MEV from the relays (#2021):
nuthatchProducedBlocksreports each block an account produced or
was paid for, with what the MEV-Boost relays say was delivered. Off unlessmev_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
/readyage 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.