Skip to content

feat: fund + bridge — inbound USDC on-ramp (CCTP) - #5

Merged
anil-rome merged 1 commit into
mainfrom
feat-fund-bridge
Jul 21, 2026
Merged

feat: fund + bridge — inbound USDC on-ramp (CCTP)#5
anil-rome merged 1 commit into
mainfrom
feat-fund-bridge

Conversation

@anil-rome

Copy link
Copy Markdown
Contributor

feat: fund + bridge — the "from home" USDC on-ramp (inbound CCTP)

Adds the Phase-2 funding commands from the approved SPEC (publishing/rome-mcp-cli/SPEC.md), the "from home" builder path.

What it adds

  • rome fund <chain> --from <src> --amount <usdc> — bridge USDC → Rome native gas (CCTP, intent:gas).
  • rome bridge <chain> --from <src> --amount <usdc> [--intent gas|wrapper] — general inbound; wrapper delivers wUSDC on Rome.
  • One rail-agnostic engine (runInboundUsdc) that orchestrates @rome-protocol/sdk/bridge (quote → sign source burn → settle-auth if gas → register → poll). The SDK owns the protocol; the CLI owns the source-chain signing it leaves to the client.
  • Actions: CLI-only, key-gated (ROME_EVM_KEY, env-only), never on MCP — enforced + tested. --dry-run previews with no spend.
  • Source chains + RPCs + USDC addresses resolve from the registry (getBridge) — no hardcoding.
  • Small --flag parser added to the CLI (positional invocations unchanged).

Verification (funded, on-chain)

  • 55/55 unit tests (flow order · wrapper-skips-settle · dry-run · resolvers · key-gating · flag parser), typecheck clean, MCP smoke (actions absent from the tool list).
  • Live dry-run against the real bridge-API (real quote, correct plan).
  • Funded wrapper transfer txf_0639… (Sepolia → Hadrian, 0.5 USDC): approve 0xb1fe158e… + burn 0x8ecf70ab… → record complete (amountOut 500000), Solana mint 4sgh6xpB… to the recipient ATA; EVM-lane wUSDC.balanceOf on Hadrian confirms the credit.
  • The gas-intent path is validated through registration (source burn + settle EIP-712 accepted by the API), but its final on-chain settle is currently gated on a bridge-side sponsor-worker fix (tracked separately) — the CLI itself is cleared; wrapper is the funded-verified rail in this PR. Gas closes once that lands.

Docs

Scope / follow-ups

  • This PR = inbound CCTP. ETH/Wormhole-in and outbound (from-rome) are the next slice (each gets its own funded gate).
  • Follow-up: move the bridge-API base into registry bridge.json (chain-first — today it's --bridge-api/ROME_BRIDGE_API/devnet-default).
  • Follow-up: tighten the fund/bridge route assertion to the observed route strings.

`fund` (USDC->gas) + `bridge` (USDC in, gas|wrapper): one rail-agnostic flow engine over @rome-protocol/sdk/bridge (quote -> sign source burn -> settle-auth on gas -> register -> poll). CLI-only, key-gated (ROME_EVM_KEY), never on MCP. Source chains + RPCs resolve from the registry. Adds a --flag parser (positional commands unchanged) and --dry-run. Docs: README two-layer surface (fixes the stale "does not deploy or sign") + GUIDES recipe. Funded wrapper transfer verified on-chain (Sepolia -> Hadrian wUSDC).
@anil-rome
anil-rome merged commit dc51dea into main Jul 21, 2026
6 checks passed
@anil-rome
anil-rome deleted the feat-fund-bridge branch July 21, 2026 01:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant