Private balance attestation

LP-0005 for the Logos Execution Zone. Prove a private LEZ token account holds balance >= N without revealing the balance, the account, or the nullifier key. Verify on-chain through a SPEL program or off-chain over Logos Messaging.

This page runs the public-side checks — gate-id derivation, journal-field inspection, field-equality verification — entirely in your browser. Cryptographic receipt verification and ed25519 signature checks need the CLI: cargo install attestation-cli from the repo.

1. Pick a gate

The gate's context_id is a domain-separated hash of the gate's identifying inputs. The prover commits it to the journal; the verifier rejects any proof whose context_id doesn't match. Trailing colons on every domain prefix prevent cross-domain collisions.

Context id:

2. Inspect a journal

The journal is the proof's public output: merkle_root, threshold, context_id, presenter_pk, program_owner, circuit_version. Everything else from the witness — balance, npk, nonce, data — never reaches the verifier. Pick a mode below.

Receipts come out of attestation-cli prove --out ./out/proof.bin. The parser scans the file for a 140-byte JournalFields-shaped section.

No journal loaded.

3. Sign a challenge as the presenter

Presenter binding (the bounty's "Known Open Problem"). The verifier issues a fresh 32-byte challenge; the presenter signs it with the secret key whose public half is embedded in the account's data field and committed as presenter_pk. A forwarded proof without the spending key cannot pass this step.

4. Verify against a gate

Field-equality checks (context_id, threshold, merkle_root, circuit_version) plus the ed25519 signature check from step 3. The only piece left for the CLI is the RISC0 receipt cryptographic check — the output shows the exact command for that.

Not run.