The test hub
The public test hub ishttps://proxy-api.infinimesh.net, with its API under
https://proxy-api.infinimesh.net/v1. Pass the origin as baseUrl: the SDK adds /v1 (a trailing
/v1 is accepted too). It runs on test networks only.
Call it from your backend with your secret key, or from a page with your project id. Its gateway
never takes a secret key from a browser.
- Test funds: CTM from the Continuum testnet faucet. For the other test assets, swap CTM for them through the test hub itself, or ask the hub team.
- Lanes: the test hub offers
wrap-native,evm-permit2,swap-tokenandsolana-escrow; notevm-3009oropen-flowyet.
Keys and project ids
Your organization, its project and its keys live in the hub dashboard, proxy-admin.infinimesh.net for the test network: the API has no sign-up and no key routes.- A secret API key (
c8n_sk_…) for your servers and scripts: make one for your project, and keep it in your secret store or in a git-ignored.envfile asHUB_API_KEY. - The project id (
c8n_pk_…) for your web pages: it is on the project page, public by design. List the origins of the pages that use it (http://localhost:5173, for example, while you develop).
200 means the key is accepted. A 401 means it is not: EPX0001 for a value that is not in the
key’s format (a typo, a stray space, a truncated copy), EPX0002 for an unknown, revoked or expired
key. Fix it before trying again: 20 refused credentials within a minute lock your IP out of every
call for the rest of that minute (EPX0081). The node quickstart’s pnpm smoke starts with the same
check.
To try the flows in a browser without a server, use the project id: list the page’s origin on the
project (http://localhost:5173 for the bridge demo’s pnpm dev; the hosted demo,
https://demo.infinimesh.net, too if you connect it with your project id), or leave the list empty
while you test (Browser apps).
Test wallets
Use keys made for testing, holding nothing on any real network. On a server, or in a script:Chain-instance pins
A pin names one block, by number and hash, that only the chain you mean contains. Before the first signature or transaction on that chain, the wallet adapter reads that block and refuses unless the hash matches (WalletError, reason wrong-chain). Ask the hub team for a block of their fork: it
changes whenever they reset it. The examples read pins from .env as
PIN_EIP155_<chainId>=<blockNumber>:<blockHash>. See
Chain-instance pins.
The examples
The SDK repository has three runnable examples, each configured by a git-ignored.env copied from
its .env.example:
Start with the smoke test. It checks your key with one call, reads the catalog, then asks for a
preview and a quote on every route and runs the pre-signing checks on each quote. It needs no
funds, and signs nothing:
pnpm --filter @c8ntinuum-examples/proxy-server dev, then
pnpm --filter @c8ntinuum-examples/bridge-demo dev). Through the proxy, the demo reaches the RPCs
through its relay, POST /api/rpc/<chain>, so a keyed RPC URL stays on the server. The demo’s
Connection card can also call the test hub directly, with your project id: every route but the order
history is open that way.
Testing a refund
There is no way to force a refund: an order becomes refundable only once its deadline has passed with no fill (see Refunds). On a test hub:- Get an order nobody will fill. Ask the hub team, or open one on the escrow yourself with an output no solver will fill (an absurd amount) and a short deadline.
- Wait in real time, until the source chain’s clock is past the deadline and the hub’s
destination observer has read past it too.
checkEvmRefundsaysnot-yetuntil then. - Refund it with
refundEvmOrder(orpnpm refund --id <onchainOrderId>), and check that the escrow paid the wrapped coin back.
Before going live
- Use the production hub’s origin, and a secret key made for production, kept on your servers only.
- List your production pages’ origins on your project, if your pages use the project id.
- Keep pins only for test chains: a real network’s chain id is unique.
- Put your own authentication in
resolveUserif you serve pages throughcreateInteropProxy. - Run the smoke test against production before you open the flow to users.