Anchor batch 20260923

106 signal snapshots, hashed into one root and written to Arbitrum One. The list below is the batch's exact composition, in the order the tree was built — that order is part of the root.

Merkle root
0xc45806ba81a809f122d8c0c79844feae16baaabf5047f674bc3e1059a4758ac4
Network
Arbitrum One
Anchored
Sep 23, 2026 04:30 UTC
Last re-checked against the chain
Sep 23, 2026 — the root on chain was read back and rebuilt from our rows that day

Read the root from a node rather than from us — roots(20260923):

curl -s https://arb1.arbitrum.io/rpc -X POST -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0xceacc40cf7b7c797d990dce7164fcccd87dad693","data":"0xc2b40ae4000000000000000000000000000000000000000000000000000000000135283b"},"latest"]}'

Every leaf in this batch

106 total · page 2 of 2

Leaves are numbered from zero in tree order. Each one is computed here by hashing that signal's stored snapshot — not copied out of a column — so a row whose bytes changed after the anchor shows up as a mismatch. Open a signal to see those bytes and the branch that carries it to the root.

100 TRXUSDT Sep 22
0b24806193e90810149db624be8a374a5691f121fd222a617731a0a97e0f7e01
101 TRXUSDT Sep 22
ba69c23c625aa2dbb6f6a0c45bd8050f7daee33165e123f79727860666587f61
102 BCHUSDT Sep 22
8a13b6d77a3860cd85e64f438126493028cc6c8a54c287479c99a0ebad37412e
103 BATUSDT Sep 22
c92d5384ead2667e1366d10615b92ac31eb39718d75d9a92915e8eef2fcd4e5d
104 UNIUSDT Sep 22
38b5403135155cf224820b885c2d43baa9005d622b4a774ef0150beabfc61e78
105 INJUSDT Sep 22
d9a5b10beb7c65f9984901107c34d331ce8be33a36fd78ea03927166c364ca2f

Rebuild the root yourself

Take the leaves above in this order and fold them pairwise. The specification is published word for word on the verification page; the short version is below, and the rule that catches most reimplementations is the odd node — it is carried up unchanged, never paired with itself.

import hashlib

level = [bytes.fromhex(h) for h in leaves]      # in the order listed above
while len(level) > 1:
    nxt = [hashlib.sha256(level[i] + level[i + 1]).digest()
           for i in range(0, len(level) - 1, 2)]
    if len(level) % 2:
        nxt.append(level[-1])                   # promoted, never duplicated
    level = nxt

print('0x' + level[0].hex())