Mainnet test report
A completed round trip with real ZEN: from Wallet A’s public balance into private custody, across to Wallet B, and partly back into its public balance.
Result
Wallet A shielded 0.1 ZEN and sent that entire private balance to Wallet B. Wallet B unshielded and claimed 0.04 ZEN, leaving 0.06 ZEN private. The test used Horizen mainnet, chain ID 26514, with ETH for gas.
| Account | Address |
|---|---|
| Wallet A | 0x6E8c160153cd5aeCF8cb4a5f9b49d9571Abeb557 |
| Wallet B | 0xD9d9Cb957Df8DEDC5B95cB463085cf0B79dC0e83 |
Fund the two wallets
Wallet A received 0.9998 ZEN. Wallet B received 0.0001 ETH for gas. Both wallets used their own browser-held signing keys on Horizen mainnet.
Funding is public: the sender, recipient, token and amount are visible in the relevant transactions.
Activate private receiving in Wallet A
Wallet A submitted its registration request. The Vela completion recorded success, with application status 0 and error code 0. Activation registers the encryption identity used by the private application.
Approve and shield exactly 0.1 ZEN
Wallet A approved the exact token allowance, then submitted the separate shield request. The processor received the public ZEN deposit and the successful application completion credited the private balance.
The shield amount and route are public. Approval alone does not shield or transfer the ZEN.
Activate private receiving in Wallet B
Wallet B registered independently before receiving the private payment. Its own encrypted state was subsequently read and decrypted by an independent local observation collector.
The demo activates both wallets before shielding to make the walkthrough easier to follow. The original transaction order is the one documented here.
Send 0.1 ZEN privately from A to B
Wallet A submitted an encrypted request. Its successful completion moved the private ledger balance from A to B, without a public ZEN token transfer between the wallets.
| Recorded field | Observation |
|---|---|
| Request submitted | 00:45:11 UTC, 7 September 2026 |
| Completion | 00:45:22 UTC; status 0, error code 0 |
| Request transaction value | 0.000001 ETH; this is separate from the encrypted ZEN amount |
| Encrypted events | Two UserEvents |
| Public ZEN Transfer events | None during this private send |
| Private balances after completion | Wallet A: 0 ZEN · Wallet B: 0.1 ZEN |
| Public balances after completion | Wallet A: 0.8998 ZEN · Wallet B: 0 ZEN |
| Processor custody | 0.1 ZEN |
The recipient address and ZEN amount were absent from the plaintext transaction inputs and receipt logs checked by the verifier. The sender submitting the request and its timing remain visible. Read the visibility analysis.
Partially unshield 0.04 ZEN in Wallet B
Wallet B requested the release of only part of its balance. The successful completion reduced its private balance and created a public claimable amount.
Unshielding does not require withdrawing the full private balance. The released amount is not yet in the wallet’s public ERC-20 balance until the claim transaction completes.
Claim the released 0.04 ZEN
Wallet B submitted the public claim. The ZEN contract emitted a Transfer from the processor to Wallet B for 40000000000000000 base units: exactly 0.04 ZEN.
| Final state | Public ZEN | Private ZEN | Claimable ZEN |
|---|---|---|---|
| Wallet A | 0.8998 | 0 | 0 |
| Wallet B | 0.04 | 0.06 | 0 |
Processor custody after the claim was 0.06 ZEN. Total accounted ZEN remained 0.9998: 0.8998 in A’s public balance, 0.04 in B’s public balance, and 0.06 backing B’s private balance. No second shield was used.
Custody contract: 0x1e4ed21AbD8f56fF223A74BB0b85C46F1C52f7A2. ETH gas is accounted separately from ZEN.
How the result was verified
The collector recorded canonical block hashes, timestamps, receipts, decoded events, public balances, custody totals and application state roots through the Horizen JSON-RPC endpoint. The raw-visibility verifier passed all five checks:
- Shield amount and route are public
- Private recipient is absent from the plaintext public surface
- Private amount is absent from the plaintext public surface
- No ZEN token transfer occurs during the private send
- Claim amount and route are public
Wallet B’s private balances were observed after activation, receipt, partial unshield and final claim. Those observations were decrypted locally; that collector did not sign transactions. They support the accounting record but are not independently verifiable public proofs of private state.
The evidence manifest contains seven public-collector file hashes and four private-state capture hashes. A hash identifies the retained file; it does not prove the correctness of its contents.