depositWithApproval(),
transfer(), withdraw(), and execute().
Balances inside the contract are held as a set of encrypted UTXO notes, and every
private operation is proven with a Groth16 zero-knowledge proof. The contract
verifies the proof without learning the sender, recipient, or amount of a private
transfer.
The flow
- Deposit moves ERC-20 tokens from a public EVM wallet into the Unlink
contract, creating a private balance for a
unlink1account. - Transfer moves value privately between
unlink1accounts. Sender, recipient, and amount are hidden by the proof. - Withdraw moves tokens back out of the contract to any public EVM address.
- Execute spends a private balance in external EVM calls, such as a DeFi action, and can return the result to a private balance.
What’s private, what’s public
| Deposit | Transfer | Withdraw | Execute | |
|---|---|---|---|---|
| Amount | Public | Private | Public | Public |
| Sender | Public | Private | Private | Private |
| Recipient | Private | Private | Public | Public |
| Token type | Public | Private | Public | Public |
unlink1 account and how much. A withdrawal
reveals the destination address and amount, but not which private account funded
it. execute() has the same exposure as a withdrawal: the on-chain calls,
amounts, and target contracts are public, while the private account that funded
them stays hidden, and any tokens returned with deposit-back are private again.
Only transfers between unlink1 accounts hide all four properties. Plan your
deposit and withdrawal amounts and timing accordingly. The
private payment tutorial walks through a flow that
minimizes linkability.
Who pays gas
How gas is paid depends on the operation.| Operation | Who pays gas |
|---|---|
| Deposit | The user, from their EVM wallet |
| Transfer, withdraw | Unlink, which relays the transaction for the user |
| Execute | Unlink’s paymaster, which sponsors the operation |
execute() runs as a sponsored ERC-4337 UserOperation (see
Execute). The user needs no native gas token for
these private actions.
Where Unlink runs
Pick a hosted deployment byenvironment name on the
Supported chains page.