DOME Docs

Local Development

Run Hardhat, deploy contracts, backend, and optional Blockscout on your machine.

The Dome monorepo packages a full local stack for developing against @dome/sdk-evm without testnet ETH.

Packages

PackageRole
@dome/core-evmContracts, circuits, Hardhat deploy
@dome/sdk-evmDeposit, balance, withdraw
@dome/backendIndexer, relayer, RPC proxy, dev faucet
@dome/webNext.js wallet UI (proxies to backend)

One-command startup

bash scripts/dev/up.sh
bash scripts/dev/up.sh --explorer   # also Blockscout on :5100
bash scripts/dev/status.sh
bash scripts/dev/down.sh

This starts, in order:

  1. Hardhat node (0.0.0.0:8545, chain id 31337)
  2. Local deploy → .dome-local/base-deploy.json (if missing)
  3. @dome/backend on :8788

Manual startup

# 1. Chain
cd dome-core-evm && npx hardhat node --hostname 0.0.0.0 --port 8545

# 2. Contracts
bash scripts/base/deploy-local.sh

# 3. Circuits (for browser proving)
node scripts/web/sync-circuit-artifacts.ts

# 4. Backend
cd dome-backend && npm install && npm start

# 5. Web wallet (optional)
cd dome-web && cp .env.example .env.local && npm run dev

# 6. Explorer (optional)
bash scripts/explorer/blockscout-local.sh up -d

Integration test

Deposit → indexer → withdraw on local Hardhat:

cd dome-backend
npm run test:integration

Backend endpoints (local)

EndpointPurpose
GET /configFees and minimum deposit/withdraw
GET /get_encryptedPaginated encrypted UTXO scan
GET /merkle/rootCurrent Merkle root
POST /commitment/Merkle path lookup
POST /screen_addressOptional deposit screening
POST /check_encrypted_outputConfirm indexed outputs
POST /relayer/withdrawSubmit withdraw transaction
POST /dev/fundLocal faucet (chain 31337 only)

See Backend & Indexer for configuration.

Protocol identity

Dome uses its own session sign-in message:

DOME_SIGN_IN_MESSAGE = "Dome shielded account sign in"

Changing this message or the local IndexedDB namespace (DomeShieldDB) invalidates prior session keys and cached UTXO indexes. Redeploy pools and clear browser storage after protocol identity changes.

On this page