Documentation/Mainnet report
Horizen Mainnet
EVIDENCE · 7 SEPTEMBER 2026

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.

AccountAddress
Wallet A0x6E8c160153cd5aeCF8cb4a5f9b49d9571Abeb557
Wallet B0xD9d9Cb957Df8DEDC5B95cB463085cf0B79dC0e83
1

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.

2

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.

Wallet A is registered for this application. Its private balance starts at 0 ZEN.
3

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.

Wallet A: 0.8998 ZEN public · 0.1 ZEN private.

The shield amount and route are public. Approval alone does not shield or transfer the ZEN.

4

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.

Wallet B is registered. Its private balance is 0 ZEN.

The demo activates both wallets before shielding to make the walkthrough easier to follow. The original transaction order is the one documented here.

5

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 fieldObservation
Request submitted00:45:11 UTC, 7 September 2026
Completion00:45:22 UTC; status 0, error code 0
Request transaction value0.000001 ETH; this is separate from the encrypted ZEN amount
Encrypted eventsTwo UserEvents
Public ZEN Transfer eventsNone during this private send
Private balances after completionWallet A: 0 ZEN · Wallet B: 0.1 ZEN
Public balances after completionWallet A: 0.8998 ZEN · Wallet B: 0 ZEN
Processor custody0.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.

6

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.

Wallet B: 0.06 ZEN private · 0.04 ZEN claimable · 0 ZEN public.

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.

7

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 statePublic ZENPrivate ZENClaimable ZEN
Wallet A0.899800
Wallet B0.040.060

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.

Horizen Wallet · Independent PoCTest record: 7 September 2026