Withdrawing
Withdrawals move funds from your shielded balance to any Ethereum address on the base chain.
Steps
Navigate to the Unshield tab on the Shield screen
Select the token
Enter the amount
Enter the destination address (or click "Use My Wallet" for your own address)
Confirm the transaction in your wallet
What Happens
The wallet signs a transfer to the destination address
The proxy detects the recipient has no registered receiving key → withdrawal
A ZK proof is generated
The relayer submits the proof to the contract
The contract verifies the proof and sends funds directly to the destination address
Key Differences from Sending
Recipient
Must be registered on Nullmask
Any Ethereum address
Funds remain in pool
Yes (as encrypted notes)
No (transferred to address)
Recipient address on-chain
Hidden
Visible
Transfer amount on-chain
Hidden
Visible
Privacy Considerations
The withdrawal recipient address and amount are public on-chain
Use a fresh, unlinkable address for withdrawals to maximize privacy
You cannot withdraw to addresses that are registered on Nullmask (this is by design — use Send instead)
Output Notes
A withdrawal creates 2 notes (for your change):
Change note
Leftover action-asset balance
Fee change note
Leftover fee-asset balance
Plus a direct transfer of the withdrawal amount to the destination address.
ETH vs ERC-20 Withdrawals
ETH: Sent via low-level
call{value: amount}("")ERC-20: Sent via
safeTransferfrom the contract's token balance
Last updated