Recorded runsRun of 1 Oct 2026
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 tableBlocks 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.
| Server | Public key | Signs records | Signs receipts | Answered | Tip | Declared policy | Last 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.
| Transaction | Block | Result | Each server |
|---|---|---|---|
| ad56b9bb…2d5fe21e | 351 | Withheld The server left the entry out where pruning can't explain it. |
|
Act 5
Act 5 ran canary check again on block 201 alone, with only withholder pinned.
- Can't be checked1
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.
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