Recorded run, not live. The dashboard as it stood after our regtest run on 1 Oct 2026.

Files and hashes

Recorded runsRun of 1 Oct 2026

regtest: a private test chain, not a public network

Last check 2026-10-01 12:35 UTC · blocks 0–351 · regtest · canary 0.1.0 (3a1417f)

Rendered from state.json, SHA-256 a6c42aabe72b1f33fa3e869df27fdccd6023fb109a5e8bee3b62f5e09914203a

Server withholder left out an entry it had signed for.

Data withheld

Block 351. You can prove this to others.

1 block is not Checked. A payment in it could be missing from what your wallet shows, so treat its balance as a lower bound.

Coverage

Range table
Blocks 0–350: Checked Block 351: Data withheld 0 351

Blocks by state

  • Checked

    351

    The tweak list matched the record its server signed.

    What does this mean? Checked

    Canary recomputed the root over every position in the tweak list, and it matched the server's signed record. No position needed filling. This checks the tweak list only. It never checks the payment outputs a wallet matches against, so a server could still hide a payment there, and Canary v1 would not see it.

  • Checked, gap filled

    0

    The tweak list matched its signed record once Canary filled the gaps.

    What does this mean? Checked, gap filled

    Some positions arrived only as hashes, or were empty and Canary found the entry elsewhere. Canary filled every position first, then recomputed the root, and it matched. An entry sent only as a hash is a known limit. Canary can't tell a server that pruned it from one that hid it.

  • Can't be checked

    0

    Canary could not recompute the root for this block.

    What does this mean? Can't be checked

    Something the root needs was missing. An entry nobody could supply ends here, and so does a list the server signed for but did not serve. This is neither a pass nor an accusation. A payment in this block could be missing, and Canary would not know.

  • Not checked

    0

    There was no signed record to check against.

    What does this mean? Not checked

    No server gave Canary a signed record it could use for this block. The server may sign nothing, may not have reached the block yet, or may not have answered. The data may still be fine. Canary checked nothing about it.

  • Servers disagree

    0

    Two servers signed different records for this block.

    What does this mean? Servers disagree

    Two servers each signed a record for the same block hash, and the records differ. At least one of them is wrong. Canary can't tell which, so it names both servers and accuses neither.

  • Data withheld

    1

    A named server left out an entry it had signed for, or the entry for a payment you declared.

    What does this mean? Data withheld

    One server signed a record that includes an entry, then served a list that left it out. Or its record or list left out the entry for a payment you declared. Canary names that one server. Whether you can prove it to others depends on the evidence, and each finding says which.

Findings

Servers

You pinned each server's key with --pubkey, and Canary never learns a key from the server itself. A signed tip came from a valid receipt. Policies and unsigned tips come from the server's /info, which nothing signs.

ServerPublic key Signs recordsSigns receipts AnsweredTip Declared policyLast error
honest http://127.0.0.1:28481 3d27ad61…4e0e525e Yes Yes Yes 351, signed Prunes nothing, no dust filter, unsigned None
withholder http://127.0.0.1:28482 db614560…e655d48c Yes Yes Yes 351, signed Prunes nothing, no dust filter, unsigned None

Payments you declared

Canary computed each payment's entry from your node and looked for it in every server's record and list. It checks the entry only, not the payment's outputs.

TransactionBlockResultEach server
ad56b9bb…2d5fe21e 351 Withheld

The server left the entry out where pruning can't explain it.

  • honest Found
  • withholder Withheld

Act 5

Act 5 ran canary check again on block 201 alone, with only withholder pinned.

Server withholder's signed tip was 351, so block 201 sat 150 blocks deep.

The server left an entry out of a block past the 144-block window. Your node confirmed its chain, and nobody supplied the entry.

Can't be checked is neither a pass nor an accusation.

Open Act 5's dashboard

This recording

We ran scripts/demo-regtest.sh --act5 on 1 Oct 2026, against Bitcoin Core v31.1.0 on regtest. These pages render the state files it wrote, with the dashboard's own templates and words.

canary check fetched each server's signed records from that server over HTTP. This run published them nowhere else.

File What it holds Bytes SHA-256
state.json The state file canary check wrote. These pages render it. 512,781 a6c42aabe72b1f33fa3e869df27fdccd6023fb109a5e8bee3b62f5e09914203a
check.txt What canary check printed. 367 35914d97d4e397d9574a25344c673db40578baa55da6d2e5dea431548e6bd068
verify.txt What canary verify printed for the evidence file. It opens no connection. 853 c9ff5ffb19ccbcac945356a0badd82fb2098d4f6fa06b7f000e5dc66b6cbfc19
status.txt What canary status printed. 286 a5ac8e91cce4afad6f1622eaa5a19149b622bb4fbd917ba22d37cfc5b08b8251
evidence/omission-regtest-351-ad56b9bb-db614560.json The evidence file for finding 79ec3cb71656. Its page shows Canary's check of it. 2,722 aea26b9bf54926af62eefe09b7fb7bd64540025b052001f52a41f77cac1b9710
act5/state.json The state file canary check wrote. These pages render it. 2,196 5e0d80131a3330f14266b9d209590698b5508e4f949a08b66bf8526ce095f8d1
act5/check.txt What canary check printed. 195 6019f785884de28606c0e96d9f6df9b63f650c1fcf173815b2438d3e20c1afdf
act5/status.txt What canary status printed. 108 65ef25bfceac134c40257f61c79fc0c0e2e1f1c0d4d3f54fd06258230d357f5c
run.txt The network, transactions, servers and public keys of the run. 669 ce14eea46bd0d0509dd05a7abc3ea53fa4f3eb2121c2c97e1dd0092df8cacb12
demo-regtest-output.txt Everything the demo script printed, step by step. 4,967 88d2916b4e26d22828b396bfb1d73e5d0484e3677a3f2adfb87bf1c6498b0277
README.txt 4,868 c834f666399cf710480be3f4bd22bcf9e33b05dad9435333f4dd99d4016c5090
evidence/omission-regtest-351-ad56b9bb-db614560.json 2,722 aea26b9bf54926af62eefe09b7fb7bd64540025b052001f52a41f77cac1b9710
logs/honest.log The log of the honest indexer. 729 df47145937de3b4167a148083af4fc4ba8452b6494708e0c04fcd5f3c8c3ccd7
logs/withholder.log The log of the withholder indexer. 1,025 8039523997639e3396d57bdca0fe6319a1b3fd6d1afb5ca3059fadeea3b01a09

The same files are in the repository. In a clone, this command prints the SHA-256 of each state file:

shasum -a 256 docs/runs/2026-10-01/state.json docs/runs/2026-10-01/act5/state.json