DOME Docs

Deposit & Withdraw

End-to-end shielded transaction flow for ETH on Base.

Deposit

  1. Wallet connects to Base (Sepolia or mainnet) via RPC.
  2. SDK loads pool config and circuit artifacts from env / backend /config.
  3. Client builds a note, generates a Groth16 proof, and calls transact() on EtherPool with msg.value.
  4. 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

  1. Client selects notes to spend and builds a withdraw proof locally.
  2. Proof + public inputs are sent to POST /relayer/withdraw (or self-submitted if the user pays gas).
  3. Relayer submits transact(); ETH is sent to the recipient address in the proof.
  4. 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/transaction

Fees

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.

On this page