# User Manual The guide is only for Mainnet. This manual shows how to setup the `CustomResolver` for receiving the funds on Aztec. It also shows how to send funds to someone who has enabled the CustomResolver on their ENS name. Before proceeding, register your ENS name on the [ENS app](https://app.ens.domains/) and **using the same Ethereum address**, register on Aztec's [zkMoney](https://zk.money/). ## Steps for Receiving ### Step 1 In the [ENS](https://app.ens.domains/) app, after connecting your wallet, update the resolver address to the deployed CustomResolver address: `0x5D597018a815bf3F8aFC8C457d154467cCe25909` ![](https://i.imgur.com/ODXbdni.png) ### Step 2 Using a custom script, set your address on the CustomResolver and enable sendPrivate(). *This step will NOT be required after deploying the fully implemented CustomResolver. The current version is DEMO purpose only.* A code snippet: ``` const CustomResolver = await ethers.getContractAt("CustomResolver", "0x5D597018a815bf3F8aFC8C457d154467cCe25909"); // node: your complete ENS name async function enablePrivateTx(node) { const setSendPrivate = await CustomResolver.setSendPrivate(node, true); await setSendPrivate.wait(); } async function setAddr(node) { const setAddr = await CustomResolver.setAddr(node, await (await ethers.getSigner()).address); await setAddr.wait(); } ``` **Now you can start receiving ETH on L1 that will directly show up on Aztec's UI.** ### Step 3 If someone has sent you ETH/DAI, you can see them as pending funds on Aztec's UI. ![](https://i.imgur.com/QDEkxHy.png) ### Step 4 For claiming them, using the UI, you can create and submit the proof of your account by using the **Shield Funds** option. ![](https://i.imgur.com/PMwqRR0.png) The funds are now available to send to anyone in Aztec, earn by depositing on DeFi projects, etc. All privately! ## Steps for Sending As a sender, instead of sending a normal transaction, you need to send ETH via CustomResolver's `sendPrivate(node)` method. A code snippet: ``` // node: ENS name to send funds to // amount: value in ETH async function sendPrivate(node, amount) { const CustomResolver = await ethers.getContractAt("CustomResolver", "0x5D597018a815bf3F8aFC8C457d154467cCe25909") const tx = await CustomResolver.sendPrivate(node, { value: amount }) await tx.wait() } ``` ## Sending on Aztec/zkMoney (L2) Once funds are shielded, users can send to another Aztec user's alias or address. This will be L2 transaction and completely private. ![](https://i.imgur.com/rwLN7LI.png) ## Withdrawing from Aztec to L1 Withdrawal to L1 is possible to a completely fresh account from Aztec. The fresh address need not have any funds. This can be done using the same UI. ![](https://i.imgur.com/qXASjIS.png) ## Proof of Privacy Any funds received, will only show as a transaction made to Aztec Connect **RollupProcessor's** `depositPendingFund()` method. Essentially, the transaction of a sender sending some funds to a recipient will show as funds being transferred to the contract, including the address of the receiver. For the given example, the details are: - Sent From: `0xF4B80B1d07e2b23B89965bac64045D0590457502` - Sent To Contract address (CustomResolver): `0x5d597018a815bf3f8afc8c457d154467cce25909` - Custom Resolver's internal tx to Aztec Connect Contract: `0xFF1F2B4ADb9dF6FC8eAFecDcbF96A2B351680455` - The Event log mentions the recipient: `0x03365D5c4d800561a4db8547f1edc9988693C0ae` ![](https://i.imgur.com/AxBGPPV.png) ![](https://i.imgur.com/fTjYtSU.png) What will NOT be possible to trace is how the funds are being spent by the recipient on L2 and to which new address have they withdrawn on L1. All the information revealed in L2 are not enough to trace transactions and withdrawals. ![](https://i.imgur.com/h0c3VHb.png)