From e11083790b8be15bd801f52c757d353f30c74213 Mon Sep 17 00:00:00 2001 From: Anil Kumar <150643132+anil-rome@users.noreply.github.com> Date: Thu, 23 Jul 2026 19:50:18 +0300 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20API.md=20current=20=E2=80=94=2011-r?= =?UTF-8?q?oute=20catalog,=20SPL/TOKEN=20assets,=20CCTP=20v2=20multi-chain?= =?UTF-8?q?,=20EIP-712=20settle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The integrator reference lagged the shipped surface: it said 'eight routes' and 'asset one of USDC, ETH, SOL', omitted the asset-agnostic SPL rail and the generic TOKEN egress, framed CCTP as Ethereum-only (it's v2, any catalog chain both directions), and the inbound flow never mentioned the user-signed EIP-712 SettleAuthorization that makes the sponsored settle trustless. README + BRIDGE_API_ARCHITECTURE.md were already current. --- docs/API.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/API.md b/docs/API.md index 505e469..9c17828 100644 --- a/docs/API.md +++ b/docs/API.md @@ -12,7 +12,7 @@ This document is the integrator reference. The API exposes deterministic bridge - [Authentication](#authentication) - [Base URL and versioning](#base-url-and-versioning) - [Conventions](#conventions) -- [The eight routes](#the-eight-routes) +- [The route catalog](#the-route-catalog) - [Endpoint reference](#endpoint-reference) - [`GET /v1/health`](#get-v1health) - [`GET /v1/assets`](#get-v1assets) @@ -100,13 +100,13 @@ Both checks are evaluated on every `POST`. Natural key wins if both indicate the --- -## The eight routes +## The route catalog -The API supports eight routes — three assets crossed with two directions, with separate routes for the two source chains (Ethereum vs Solana) where both apply: +The API supports eleven routes — five assets (USDC, ETH, SOL, any SPL token, generic TOKEN egress) across the two directions, with separate routes per source chain where both apply: | Route key | Asset | Source chain | Direction | Bridge mechanism | |---|---|---|---|---| -| `usdc-cctp-to-rome` | USDC | Ethereum | inbound | Circle CCTP burn-and-mint | +| `usdc-cctp-to-rome` | USDC | any catalog EVM chain (Sepolia, Arbitrum, Base, Fuji, Amoy, Monad — see `/v1/assets`) | inbound | Circle CCTP v2 burn-and-mint | | `usdc-cctp-from-rome` | USDC | Rome | outbound | Circle CCTP burn-and-mint | | `usdc-solana-to-rome` | USDC | Solana | inbound | SPL transfer via PDA-ATA | | `usdc-solana-from-rome` | USDC | Rome | outbound | Atomic Rome tx to SPL destination | @@ -114,8 +114,11 @@ The API supports eight routes — three assets crossed with two directions, with | `eth-wormhole-from-rome` | ETH | Rome | outbound | Rome approve + burn → Ethereum claim | | `sol-solana-to-rome` | SOL | Solana | inbound | wSOL transfer + optional claim | | `sol-solana-from-rome` | SOL | Rome | outbound | Atomic Rome tx (wSOL wrapper) | +| `spl-solana-to-rome` | SPL (any mint, incl. LSTs) | Solana | inbound | SPL transfer via PDA-ATA (`splAsset` selects the mint) | +| `spl-solana-from-rome` | SPL (any mint, incl. LSTs) | Rome | outbound | Mint-explicit Rome withdraw to an SPL destination | +| `token-wormhole-from-rome` | TOKEN (generic) | Rome | outbound | Wormhole egress for a generic token | -The full machine-readable catalog is at `GET /v1/assets`, including per-route min and max amount limits. +Outbound CCTP (`usdc-cctp-from-rome`) likewise reaches any catalog EVM destination via `destinationChainId`. The full machine-readable catalog is at `GET /v1/assets`, including per-route min and max amount limits. --- @@ -557,17 +560,17 @@ When `outcome` reaches `complete`, the user has 1 USDC of Rome chain `200010` ga ### Total user signatures -The user signs **only step 1's two Ethereum txs**. Steps 2 and 3 are sponsored — they don't require user signatures and don't consume user gas. +The user signs **step 1's two source-chain txs** — plus, on **gas-intent CCTP inbound**, one off-chain **EIP-712 `SettleAuthorization`** (returned in the quote's `signatureRequests`; the client fills `sourceTxHash` from the burn tx and passes the signature as `userSettleSig` to `POST /v1/transfers`). That signature is what makes the sponsored settle trustless: the sponsor can only execute the settle the user authorized, to the recipient the signature commits to. Steps 2 and 3 are sponsored — no user signatures on-chain, no user gas. --- ## Glossary -**Asset.** One of `USDC`, `ETH`, `SOL`. +**Asset.** One of `USDC`, `ETH`, `SOL`, `SPL` (any SPL mint, selected with `splAsset`), or `TOKEN` (generic Wormhole egress). **Direction.** `to-rome` (inbound, lands on a Rome chain) or `from-rome` (outbound, leaves a Rome chain). -**Route.** A specific bridge mechanism for an `(asset, direction, sourceChain)` triple. There are eight; see [The eight routes](#the-eight-routes). +**Route.** A specific bridge mechanism for an `(asset, direction, sourceChain)` triple. There are eleven; see [The route catalog](#the-route-catalog). **Step.** A single transaction in a route. Some routes have 1 step; some have 3. Each step has an `actor` — the entity that signs and broadcasts it. From 5ecfcc50ca8d09c7b8d48cefdea1185b76f32ccb Mon Sep 17 00:00:00 2001 From: Anil Kumar <150643132+anil-rome@users.noreply.github.com> Date: Thu, 23 Jul 2026 19:50:54 +0300 Subject: [PATCH 2/2] docs: catch the last stale route-count + dead anchor --- docs/API.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/API.md b/docs/API.md index 9c17828..356b348 100644 --- a/docs/API.md +++ b/docs/API.md @@ -168,7 +168,7 @@ Returns the static route matrix. } ``` -`minAmount` and `maxAmount` are inclusive bounds in base units. The eight entries are the same as the [routes table above](#the-eight-routes). +`minAmount` and `maxAmount` are inclusive bounds in base units. The entries are the same as the [routes table above](#the-route-catalog). ---