Docs · Deploy

Deploy contracts. Any chain. Atomic.

The Deploy wizard takes a Solidity file plus a target chain, compiles it with forge inside arc, and ships it via the sealed signer-deployer enclave. The enclave's private key never leaves the host — arc receives signed transactions, not keys.

1 · The flow

  1. Visit /deploy.
  2. Connect a wallet (the wallet only signs the trigger; it never holds the deploy key).
  3. Paste a Solidity file or point at a GitHub URL.
  4. Pick a target chain from the 18-chain DEPLOY NOW config.
  5. arc compiles with forge, requests a signed deploy tx from the enclave, and submits.
  6. You get a deployment receipt with address, tx hash, block number, and gas used.

2 · Signer-deployer enclave

The enclave runs on a separate host. arc-api makes an authenticated request to the enclave's signer endpoint (arc-signer-deployer), gets back a signed raw transaction, and broadcasts it. The enclave's private key sits in a sealed file owned by the enclave's user account; arc-api never sees it.

The fill path is intentionally separated: the solver fill key is a different EOA, lives on a different host, and signs fills on destination chains. A compromise of one does not compromise the other.

The Telegram approval gate adds a human-in-the-loop step for high-value txes. Set ARC_SIGNER_AUTO_APPROVE=1 to bypass for low-value fills if you need throughput.

3 · Chains live today

DonutHookV2 + Entry pair is deployed on 4 chains (Optimism + Unichain + 2 more) for the full 70/20/10 fee split. Adapters on all other chains use the ecosystem fallback.

GET /v1/chains returns the full enriched chain list: name, USDC address, explorer URL, RPC. Use it as the source of truth instead of hard-coding a map in your dApp.

4 · Deploy-scheduler — gas-aware auto-deploy

The deploy-scheduler watches gas thresholds across all 56 configured networks and auto-deploys pending contracts when gas drops below the configured ceiling per chain. Configure ceilings in deploy-scheduler.env and submit deploys to the queue via POST /v1/deploy.

The scheduler is a systemd service arc-deploy-scheduler.service on the arc host.

5 · Donut fee split for new adapters

Every fill through arc produces a signed donut attestation. The adapter-owner inflow gets redistributed:

  • 70% → adapter builder
  • 20% → adapter reviewers
  • 10% → adapter ecosystem (fallback for unregistered adapters)

To register a new adapter, add an entry to config/adapter_registry.json with builder and reviewer addresses. Until your adapter is registered, fills flow 100% to the ecosystem address — fail-closed.

6 · Health, modes, debugging

  • GET /v1/mode — reflects signer-deployer reachability. If the enclave is unreachable, deploys are queued but not submitted.
  • GET /v1/health — exposes the deployer address and per-chain RPC health.
  • arc-fill-monitor.service — systemd unit that scans 10 source chains for fills. Restart it after any config change.
  • Rate limits: per-token, sane defaults. 429 Too Many Requests includes a Retry-After header.