DEVOXPAD
Documentation

Mainnet and testnet

One DEVOXPAD, two chains, and what does and does not cross between them.

Switching

DEVOXPAD runs on both COTI networks from the same build. The switch sits in the header, next to Connect. Mainnet is the default.

DEVOXPAD MainnetDEVOXPAD Testnet
Chain ID26325007082400
RPChttps://mainnet.coti.io/rpchttps://testnet.coti.io/rpc
Explorermainnet.cotiscan.iotestnet.cotiscan.io
COTIBought or bridged inFree, from /faucet
Graduation100 COTI2 COTI
Virtual reserve25 COTI2 COTI

Choosing a network sets a cookie and reloads the page. The reload is deliberate: the network reaches the server as well as the browser, and reloading is what stops a stale balance from one chain sitting next to a fresh label from the other.

Nothing crosses between them

Separate contracts, separate launches, separate balances, separate AES keys. A token launched on testnet does not exist on mainnet, and testnet COTI is not worth anything anywhere.

Three addresses

URLWhat it does
devoxpad-app.vercel.appAsks which network you want the first time, then remembers. The switch in the header changes it.
devoxpad-mainnet.vercel.appAlways DEVOXPAD Mainnet. Pinned by the hostname, so no cookie can change it.
devoxpad-testnet.vercel.appAlways DEVOXPAD Testnet, pinned the same way.

The pinned pair exist because a cookie is a private fact. A link to devoxpad-mainnet.vercel.app means mainnet for whoever opens it, whatever they last chose, which is the one thing a remembered preference can never promise. On those two the header switch becomes a link to the other host rather than a setting.

Why not mainnet.devoxpad-app.vercel.app

That was the intended shape and Vercel will not issue it: it reserves the *.vercel.app namespace and refuses to delegate a subdomain of a project URL. A dedicated project per network is what it does allow. On a custom domain the true subdomains would work, and the app already recognises mainnet. and testnet. prefixes, so moving there would need no code change.

What your wallet does

Switching asks your wallet to move chains too, and adds the network first if it has never seen it. Declining is a normal answer: the app still moves, and the banner that appears offers the switch again when you are ready.

Your COTI AES key is derived per network, because each chain runs its own MPC network and its own onboarding contract. A key from one will not decrypt the other, so unlocking happens once per network rather than once per address.

Asking the API for one network

Every read endpoint accepts ?network=mainnet or ?network=testnet. Without it, the cookie decides, and without a cookie the deployment default does.

curl "https://devoxpad-app.vercel.app/api/tokens?network=mainnet"
curl "https://devoxpad-app.vercel.app/api/config?network=testnet&digest=1"
curl "https://devoxpad-app.vercel.app/api/bridge/assets?network=mainnet"

An explicit ?network= always wins over the cookie, so a link you paste to someone else means the same thing on their screen as it did on yours.

In Telegram

The bot keeps its own network per chat, so it can be pointed at mainnet while your browser is on testnet. /start shows the current network with the two buttons under it, and /switch brings them back any time.

/switch             two buttons: mainnet or testnet
/network            which chain this chat is on
/network mainnet    switch to DEVOXPAD Mainnet
/network testnet    switch to DEVOXPAD Testnet
Mainnet and testnet · DEVOXPAD