Verify

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.