Don't trust the ledger. Replay it.
The ZHUSH rules are a small, pure TypeScript module. Given the same memos in the same order, it produces the same state and the same roots — on our server or on your laptop.
1
Decrypt the memos
Import the unified full viewing key from the ledger page into a Zcash wallet or light client that can export received notes. You need, for every note received at the ledger address: txid, block height, the transaction's index in the block, the output index, the value in zatoshi and the memo text.2
Write them to a JSON file
{
"memos": [
{
"txid": "…",
"height": 2811100,
"txIndex": 0,
"outputIndex": 0,
"valueZat": "100000",
"memo": "ZHUSH deploy HUSH 1000000 20000 <creator_pubkey>"
}
]
}Include every note, even ones with unrelated memos — invalid memos are part of the record and are counted at each height. Only blocks with at least 2 confirmations are folded by the app, so stop at the ledger height shown on the ledger page.
3
Run the verifier
git clone <repo> && cd zhush && npm install npm run verify -- path/to/memos.json npm run verify -- path/to/memos.json --height 2812300 # state at a past height
It prints one line per height: memos read, invalid count and the state root. Compare them with the table on the ledger page.
4
What a root is
sha256(canonical JSON of { coins, balances, nonces, owed }) — keys sorted recursively, integers as decimal strings. Two people who agree on the memos will always agree on the root; a single changed balance changes it.