Docs

Agents

spaceturtle

Reference

Devnet reference

Every devnet address, route and price, and the faucet that funds you.

Every address, endpoint and price for the public TOON devnet, in one place. These are testnets. Base Sepolia and Solana devnet carry no real value, and the USDC on both is a mock mint anyone can draw from the faucet.

The live values come from the node

Ask the node, not this page:

curl -s https://proxy.ario.devnet.toonprotocol.dev/ilp | jq

GET /ilp is free and unauthenticated. Its batchSettlements are the x402 channel terms the node is paid under, one per chain, and voucherSigners the keys it expects vouchers from. The tables below are a convenience. When the two disagree, the node is right, and the client never consults a preset in preference to the document a node answers with.

Nodes

Three nodes, six routes. Each node is the receiver of its own channels, so a channel opened with one buys nothing at the others.

NodeClient-edge URLRoutePriceCarriage
Storehttps://proxy.ario.devnet.toonprotocol.devg.toon.store1000 + 10 per KiBHTTP or BTP
Gas stationhttps://proxy.gas.devnet.toonprotocol.devg.toon.gas1000 (0.001 USDC)HTTP or BTP
Relayhttps://proxy.relay.devnet.toonprotocol.devg.toon.relay1 (0.000001 USDC)BTP only
g.toon.relay.ephemeralfreeHTTP or BTP
g.toon.relay.store1001 + 10 per KiBHTTP or BTP
g.toon.relay.gas1001HTTP or BTP

The last two are forwarded: the relay carries the packet to the store or the gas station and charges its own hop on top. Forwarding runs one way. A forwarded route needs one thing a direct one does not: the payload is sealed to the connector that terminates the route, so you name the far node yourself with sealTo. Seal to the relay instead and the packet is undeliverable (F01).

const answer = await client.send(
  'g.toon.relay.gas',
  { body: 'hello' },
  { sealTo: 'https://proxy.gas.devnet.toonprotocol.dev' }
);

Chains

EVMSolana
NetworkBase Sepolia, eip155:84532Solana devnet
RPChttps://base-sepolia-rpc.publicnode.comhttps://api.devnet.solana.com
Channel contract0x4020074e9dF2ce1deE5A9C1b5c3f541D02a10003, x402BatchSettlementCHNLxYvVA28MJP9PrFuDXccuoGXAx7jBacfLEkahyGsX, payment-channels
Token0x0C996d7c934c79a6255254875607Fe69df25C0E1, devnet USDC (Circle FiatToken v2.2, ERC-3009), 6 decimals34eSxY7qxQ4GzyhDJ8GpUcTz1WWzruGbJbR8q6TtxfQU, mock USDC mint, 6 decimals
Facilitatorhttps://onboard.devnet.toonprotocol.dev, TOON's Onboardernone needed: the node sponsors opens
FundsUSDC from the faucet; Base Sepolia ETH from a public faucet, only to leave a channelUSDC from the faucet; devnet SOL from solana airdrop, only to leave a channel

The faucet

faucet.devnet.toonprotocol.dev mints devnet USDC on both chains to any address. npx toon-client faucet calls it for the wallet in your keystore. The devnet USDC on Base Sepolia is minter-gated, so it comes from the faucet or nowhere.

Mainnet

The node that serves toon.ar.io settles on Base mainnet and Solana mainnet-beta, in USDC, on the same contract and program at the same addresses. Its prices are on the ecosystem page and at its own GET /ilp. There is no mainnet faucet; a mainnet payer funds its own wallet with USDC.

Written from toon-client/docs/devnet.md and connector/docs/guide/get-paid.md. The same values ship as DEVNET in @toon-protocol/client.