Result: PASS
First on-chain ownership attestation anchored on Zcash mainnet.
- ID:
82fe11f3-dd98-44de-8f97-b8979e0ebcb9 - Amount: 0.0101 ZEC (1,010,000 zat)
- Type: program
- Wallet hash:
e2e_wallet_20260327 - Status: paid
- Payment txid:
0f0bf6c66c5484a47e1c262a2cef125a7ca8d6a2f28021d52aa44b57972bdb28 - Block: 3,286,623
- Detected via: mempool (confirmed in block)
| # | Event | Leaf Hash | Serial |
|---|---|---|---|
| 1 | PROGRAM_ENTRY | 075b00df286038a7b3f6bb70054df61343e3481fba579591354a00214e9e019b |
- |
| 2 | OWNERSHIP_ATTEST | de62554ad3867a59895befa7216686c923fc86245231e8fb6bd709a20e1fd133 |
Z15P-E2E-001 |
Root: 024e36515ea30efc15a0a7962dd8f677455938079430b9eab174f46a4328a07a
- Txid:
98e1d6a01614c464c237f982d9dc2138c5f8aa08342f67b867a18a4ce998af9a - Block: 3,286,631
- Memo:
ZAP1:09:024e36515ea30efc15a0a7962dd8f677455938079430b9eab174f46a4328a07a
/verify/de62554a...page: all fields present and consistent- Independent verifier (
verify_proof.py): VERIFIED - Hash recomputation: all 3 hashes match (leaf1, leaf2, root)
| Criterion | Result |
|---|---|
| Invoice created via authenticated API | PASS |
| Payment detected exactly once | PASS |
| PROGRAM_ENTRY leaf exists | PASS (manual insert - bug found, see below) |
| OWNERSHIP_ATTEST leaf created on /assign | PASS (automatic) |
| Root anchored with real mainnet txid | PASS |
| Anchor height recorded | PASS (3,286,631) |
| /verify page shows consistent proof bundle | PASS |
| Independent verifier confirms proof | PASS |
Mempool leaf insertion missing. When a payment is detected via mempool scanning, the scanner records the payment and sends a Signal notification, but does NOT create the PROGRAM_ENTRY Merkle leaf. The block confirmation path has the leaf logic, but the dedup check prevents it from firing because the mempool already recorded the payment and transitioned the invoice to "paid."
Root cause: The mempool code path in scanner.rs calls record_payment but doesn't check transitioned_to_paid for leaf insertion. Only the block scan path had this logic.
Fix: Added leaf insertion to the mempool detection path. Code committed but not yet rebuilt/deployed.
Workaround used: Manual leaf insertion via sqlite3 for the PROGRAM_ENTRY leaf. The OWNERSHIP_ATTEST leaf was created automatically by the /assign endpoint (no bug there).
- Zebra 4.3.0 at chain tip (block 3,286,624, sync_lag=0)
- zap1 running on host network, scanner operational
- All 4 containers healthy (zebra-mainnet, zap1, signal-cli, n8n)
- Payment page QR code working (server-side SVG via qrcode crate)
- Signal notifications delivered for both invoice creation and payment
- zap1 creates invoices with unique Orchard shielded addresses
- The scanner detects payments via trial decryption on mainnet
- The Merkle tree produces deterministic, verifiable leaf hashes
- Serial assignment creates an OWNERSHIP_ATTEST commitment
- The Merkle root can be anchored on Zcash via a shielded memo transaction
- The /verify page renders a complete proof bundle
- An independent verifier can recompute and confirm the proof without trusting the operator
The anchor transaction was sent to:
u1qzfssuy2n2puqvafzjtq6qvjul7e985u75xsrnppcpd5c0sujs727xngaecx5yt4ljy6qlkr8hxsvj6d8gmxd7g6c9p3993hh5zwenq7
This address (diversifier index 2) can serve as the Wyoming DAO LLC Section VI smart contract identifier.