Repeat the flow
Use the existing wallet screens to reproduce the recorded test: 0.1 ZEN shielded, 0.1 sent privately, and 0.04 unshielded and claimed.
Before starting
- Create Wallet A and Wallet B using the app. Use separate browser profiles or devices so their local vaults remain independent.
- Save each wallet’s recovery material. An encrypted JSON backup needs both the file and its backup password. Keep phrases and passwords out of shared reports.
- Fund A with at least 0.1 ZEN on Horizen mainnet. Both wallets need a small ETH balance on Horizen to pay for their own transactions and request fees.
- Check the network:
26514. A matching address on Ethereum or Base does not mean those funds are already on Horizen. Complete funding and any bridging outside this wallet. - Check the app’s current pilot availability and shared custody capacity. The deployment has a 1 ZEN total custody cap; available capacity depends on all participants’ current deposits.
Use Open private wallet to enter the mainnet privacy controls. The tutorial’s A/B names are roles, not special wallets supplied by the app.
1. Activate private receiving in A and B
In each wallet, select Review privacy activation, review the request, then sign and submit. Use Check progress until activation is confirmed.
This is a setup step for each wallet and deployment identity. You do not repeat it before every shield. B must be activated before A sends privately to it.
2. Approve and shield 0.1 ZEN in A
In Wallet A, choose Shield and enter 0.1 ZEN. Review and sign the exact allowance approval. After confirmation, select Review shield, review the deposit and sign that transaction.
Approval lets the processor move the selected amount; shielding performs the deposit. These are separate public contract actions. The app determines whether a fresh approval is required from the available allowance.
3. Send 0.1 ZEN privately from A to B
Choose Send privately. Enter 0.1 ZEN and B’s copied address, then review, sign and check progress. Open B’s private wallet and refresh after completion.
There is no separate private address to exchange. The payment recipient and amount are encrypted in the private-send request; the submitting account and transaction metadata remain public.
4. Unshield only 0.04 ZEN in B
In Wallet B, choose Unshield and enter 0.04 ZEN. Review, sign and check the existing request until successful completion.
The remaining balance is still private. At this point the released amount is claimable, rather than already received in the public token balance.
5. Claim the released 0.04 ZEN in B
Select Review claim and sign the claim transaction. Check its receipt and refresh B’s balances.
For a fresh B wallet that started with no ZEN, the balances are exactly 0.04 public and 0.06 private. If it already held public ZEN, compare the increase instead.
Keep a compact test record
| At each stage | Record |
|---|---|
| Public evidence | Request, completion and claim transaction links; chain ID; wallet addresses; public balances. |
| Private observations | Expected versus displayed private balance in each wallet; capture time and stage. |
| Accounting | Initial ZEN = final public balances + remaining custody, accounting for any pre-existing funds. |
| Unexpected status | Existing transaction hash, error/status text and time. Reconcile that transaction before preparing another action. |
Common questions
Why are approval and shield separate?
ZEN is an ERC-20 token. Approval authorizes the processor to spend a specific allowance; shield deposits it. The first approval does not move the token or make it private.
Is privacy activation “once ever”?
It is once for the wallet’s identity in this chain, processor and application deployment. A different deployment or account can require activation again.
Where should the ETH for gas be?
On Horizen mainnet, in each wallet that will sign transactions. ETH on Ethereum or Base does not pay a Horizen transaction’s gas directly.
Can I shield ETH or an NFT in the mainnet pilot?
The completed mainnet flow and enabled custody path use ZEN. NFT and RWA-style private ownership have separate local fixtures. See assets and scope.
What if private payments are temporarily unavailable?
Check the existing request in Private wallet activity and refresh while confirmed transactions synchronize. A pending transaction is not a reason to submit a duplicate. If synchronization does not recover, keep its hash and error message for investigation.