# Mainnet and testnet

> What works on Monad mainnet and testnet, and how Floatless keeps each network’s money and history apart.

Source: https://floatless.xyz/docs/networks

Floatless runs on two Monad networks. This page explains the difference, what works on each, how the app and its API stay on one network, and where to look up transactions and tokens.

## Mainnet and testnet in plain words

Monad mainnet is the live network, where tokens are real money. Its chain ID, the number that identifies a network, is 143. Monad testnet is a practice network with chain ID 10143. Its tokens are for testing and aren't real money.

The two networks work the same way. On each one you need MON, Monad's own token, to pay network fees, and each has its own explorer. A dollar on testnet and a dollar on mainnet are different tokens on different networks, and nothing moves between them.

## What works on each network

| Feature                            | Mainnet                         | Testnet                                |
| ---------------------------------- | ------------------------------- | -------------------------------------- |
| Sign in with a passkey or email    | Yes                             | Yes                                    |
| Currencies the app lists           | USDC, USDT0, AUSD               | USDC, AUSD and aUSDC, all test tokens  |
| Send, with checks before you sign  | Yes                             | Yes                                    |
| Spending rules registered on Monad | Yes                             | Yes                                    |
| Savings goals                      | Yes                             | Yes                                    |
| Floatless Savings on Morpho        | Live: deposit and withdraw AUSD | Labeled preview using the mainnet rate |
| Regulated dollars in aUSDC         | Not listed                      | Yes, with Cleanverse's sandbox         |
| Card, Apple Pay and bank transfers | Not available yet               | Not available yet                      |

Morpho isn't deployed on Monad testnet, so the testnet Save tab applies the live mainnet vault's rate to your testnet AUSD and labels it **Preview**. Nothing is deposited on testnet.

Regulated dollars run on Monad testnet with Cleanverse's sandbox. The mainnet app doesn't list aUSDC, and the mainnet API has no Cleanverse connection.

## How the app picks its network

Each Floatless app build is set to one network when it's built, and mainnet is the default. There's no network switch inside the app. A build talks only to its own network's API:

| Network       | Chain ID | API                                 | Explorer links open                                    |
| ------------- | -------- | ----------------------------------- | ------------------------------------------------------ |
| Monad mainnet | 143      | `https://api-mainnet.floatless.xyz` | [monadscan.com](https://monadscan.com)                 |
| Monad testnet | 10143    | `https://api.floatless.xyz`         | [testnet.monadscan.com](https://testnet.monadscan.com) |

If you build the app yourself, `EXPO_PUBLIC_MONAD_NETWORK` picks the network, `mainnet` or `testnet`, and `EXPO_PUBLIC_API_BASE_URL` points the build at a different API. Each API reads `MONAD_CHAIN_ID`, which is `143` or `10143`.

## Each network keeps its own records

The mainnet and testnet APIs are separate services, each with its own database. Your payments, spending-rule records, goals and savings history on one network never mix with the other. History entries for transactions record the chain they happened on.

Your phone keeps the networks apart too. Passkey sessions, your saved account details and any payment waiting for confirmation are stored separately for each network.

If you sign in with a passkey, your wallet address is the same on mainnet and testnet, because it comes from your passkey. Your balances aren't shared, since each network has its own tokens.

## The network check on every response

Every response from a Floatless API carries an `x-floatless-chain-id` header with that API's chain ID. The app compares it with its own network before using the response. If they differ, the app stops with a message that names both networks, for example:

```text
This app is on Monad mainnet, but the server it reached is on Monad testnet. Nothing was changed.
```

A response without the header is accepted, so older servers still work.

The app checks again before you sign anything. A payment quote must name the app's chain, and the app confirms that its own connection to Monad is on that chain too. Spending rules prepared for another network are refused before you sign them.

You can read the header yourself:

```sh
curl -si https://api-mainnet.floatless.xyz/health/ready | grep -i '^x-floatless-chain-id'
curl -si https://api.floatless.xyz/health/ready | grep -i '^x-floatless-chain-id'
```

```text
x-floatless-chain-id: 143
x-floatless-chain-id: 10143
```

The same endpoint reports the chain in its JSON body as `checks.chainId`.

## Explorers

An explorer is a website that shows what's on a blockchain: balances, transactions and contracts. The app's links open Monadscan. MonadVision is another explorer for the same networks, and Floatless's contracts are source-verified on both.

| Network | Monadscan                                              | MonadVision                                                |
| ------- | ------------------------------------------------------ | ---------------------------------------------------------- |
| Mainnet | [monadscan.com](https://monadscan.com)                 | [monadvision.com](https://monadvision.com)                 |
| Testnet | [testnet.monadscan.com](https://testnet.monadscan.com) | [testnet.monadvision.com](https://testnet.monadvision.com) |

## Tokens on each network

These are the tokens the app shows for each network.

| Network | Token | What it is                                         | Address                                                                                                                          |
| ------- | ----- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| Mainnet | USDC  | USD Coin, issued by Circle                         | [`0x754704Bc059F8C67012fEd69BC8A327a5aafb603`](https://monadscan.com/address/0x754704Bc059F8C67012fEd69BC8A327a5aafb603)         |
| Mainnet | USDT0 | Listed in the app as Tether USD                    | [`0xe7cd86e13AC4309349F30B3435a9d337750fC82D`](https://monadscan.com/address/0xe7cd86e13AC4309349F30B3435a9d337750fC82D)         |
| Mainnet | AUSD  | Agora Dollar, the currency Floatless Savings holds | [`0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a`](https://monadscan.com/address/0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a)         |
| Testnet | USDC  | Test USDC used by Cleanverse's sandbox             | [`0x534b2f3A21130d7a60830c2Df862319e593943A3`](https://testnet.monadscan.com/address/0x534b2f3A21130d7a60830c2Df862319e593943A3) |
| Testnet | aUSDC | Cleanverse's regulated test dollar                 | [`0xaC0893567D43C3E7e6e35a72803df05416C1f20D`](https://testnet.monadscan.com/address/0xaC0893567D43C3E7e6e35a72803df05416C1f20D) |
| Testnet | AUSD  | Agora's test AUSD                                  | [`0xa9012a055bd4e0eDfF8Ce09f960291C09D5322dC`](https://testnet.monadscan.com/address/0xa9012a055bd4e0eDfF8Ce09f960291C09D5322dC) |

MON has no token address on either network. It's the network's own currency, and your **Wallet balance** includes it.

## Testnet tokens and faucets

A faucet hands out free test tokens. Here's what Floatless's code points to for each test token:

- Test USDC. In the testnet app, once Cleanverse has verified you, the **Get aUSDC, verified dollars** card in **Add money** shows your Cleanverse deposit address and links to [Circle's faucet](https://faucet.circle.com) with **Get free test USDC**. Choose Monad testnet there and paste that address. The card says Cleanverse locks USDC sent there from a Cleanverse-approved source and adds the same amount of aUSDC to your wallet.
- Test AUSD. Floatless's testnet records list Agora's AUSD faucet contract at [`0xd236c18D274E54FAccC3dd9DDA4b27965a73ee6C`](https://testnet.monadscan.com/address/0xd236c18D274E54FAccC3dd9DDA4b27965a73ee6C). The app doesn't link to it.
- Test MON. Floatless doesn't provide testnet MON, and the app doesn't link to a faucet for it. You'll need some from a Monad testnet faucet to pay network fees.
