Some checks are pending
ci / gate (push) Waiting to run
keys/wormhole.rs derives the wormhole keys from the seed at the wormhole coin type (m/44'/189189189'/i'/0'/0'), pinned to what quantus-node's `key quantus --scheme wormhole` prints for the public dev phrase at index 0 and 1, and derives a miner's address from its published inner hash (bob's, as the observer shows it). The nullifier that spends a leaf is mirrored on the Poseidon core alone, pinned to four vectors produced once with the circuit crate, so the wallet does not carry the prover to know what it has spent. substrate/wormhole.rs reads ZkTree::LeafCount, scans ZkTree::Leaves in pages of 500 locally computed keys for leaves paying an address, and checks Wormhole::UsedNullifiers. Nothing on chain indexes leaves by recipient, so the scan runs once from zero and then only over what was appended; the SQLite cache keeps the leaves and the frontier under a ShieldedCache port. The wormhole_summary command derives the keys from the session's seed for the call, scans, marks spent leaves, and answers with the address, the inner hash and the shielded and received totals; the accounts page shows it with copy and rescan. A raw-seed wallet with no seed is told so rather than shown a fake address. Verified on mainnet through the public endpoint: a full scan of 107,127 leaves in 16 s found 31 leaves paying bob's wormhole address for 9.34 QTC, the observer's 30-reward attribution of 9.33 plus the one since; the dev phrase restored in the app shows qzq32vN2ZtX2T9YrvCh69CMvbC2nWmEq4tCjRWKg4CyuxeShg and inner hash 0x5a5891e7…, the node's own numbers, with the tree scanned to its end. doc/threat-model.md names the assets, the boundaries and the file behind each mitigation; its review by someone else is what closes #48. Closes #45 Refs #48 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014ftBXYuba8ARhQeF74oUgW