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 Mainnet | DEVOXPAD Testnet | |
|---|---|---|
| Chain ID | 2632500 | 7082400 |
| RPC | https://mainnet.coti.io/rpc | https://testnet.coti.io/rpc |
| Explorer | mainnet.cotiscan.io | testnet.cotiscan.io |
| COTI | Bought or bridged in | Free, from /faucet |
| Graduation | 100 COTI | 2 COTI |
| Virtual reserve | 25 COTI | 2 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.
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
| URL | What it does |
|---|---|
| devoxpad-app.vercel.app | Asks which network you want the first time, then remembers. The switch in the header changes it. |
| devoxpad-mainnet.vercel.app | Always DEVOXPAD Mainnet. Pinned by the hostname, so no cookie can change it. |
| devoxpad-testnet.vercel.app | Always 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.
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