Deposit & Withdraw
End-to-end shielded transaction flow for ETH on Base.
Deposit
- Wallet connects to Base (Sepolia or mainnet) via RPC.
- SDK loads pool config and circuit artifacts from env / backend
/config. - Client builds a note, generates a Groth16 proof, and calls
transact()onEtherPoolwithmsg.value. - Indexer picks up the new commitment; wallet scans encrypted outputs to recover spendable balance.
Deposits are visible on-chain from the funding address — privacy begins after the deposit is in the pool.
Withdraw
- Client selects notes to spend and builds a withdraw proof locally.
- Proof + public inputs are sent to
POST /relayer/withdraw(or self-submitted if the user pays gas). - Relayer submits
transact(); ETH is sent to the recipient address in the proof. - The recipient address has no on-chain link to the original depositor.
Environment (SDK)
DOME_EVM_INDEXER_URL=https://api.getdome.app
DOME_BASE_RPC=https://base-sepolia.g.alchemy.com/v2/YOUR_KEY
DOME_ETH_POOL_ADDRESS=0x...
DOME_FEE_RECIPIENT_ADDRESS=0x...
DOME_CHAIN_ID=84532
DOME_CIRCUIT_KEY_BASE_PATH=https://circuits.getdome.app/transactionFees
Pool config exposes fee parameters via /config. Withdraw proofs include fee outputs to the configured fee recipient.
Testnet
Use Base Sepolia ETH from a faucet. The public testnet indexer is available at https://api.getdome.app when the backend is running.
Local development uses Hardhat (31337) with bash scripts/dev/up.sh in the monorepo.