# Chains

XRP Ledger chain IDs supported by Joey over WalletConnect.

| Chain ID | Network | Explorer |
|---|---|---|
| `xrpl:0` | XRPL Mainnet | [livenet.xrpl.org](https://livenet.xrpl.org/) |
| `xrpl:1` | XRPL Testnet | [testnet.xrpl.org](https://testnet.xrpl.org/) |
| `xrpl:2` | XRPL Devnet | [devnet.xrpl.org](https://devnet.xrpl.org/) |

- **One chain per session.** Joey approves the session on whichever network is active in Joey. A request for any other chain is rejected with error `5100` (`Joey is on xrpl:N, the request is for xrpl:M`).
- **Switching networks ends the session.** If the user changes network in Joey, the session is disconnected; connect again on the new chain.
- **Joey uses its own nodes.** The RPC URLs in wc-client's chain definitions are used for display by the connect modal; Joey submits through its own configured XRP Ledger servers.

## wc-client chain definitions

```ts
import core from '@joey-wallet/wc-client/core';

const { mainnet, testnet, devnet } = core.constants.chains.xrpl;

mainnet.id; // 'xrpl:0'
testnet.id; // 'xrpl:1'
devnet.id;  // 'xrpl:2'
```

Each definition has the shape:

```ts
{
  id: 'xrpl:1',
  name: 'XRPL Testnet',
  http: ['https://s.altnet.rippletest.net:51234/'],
  ws: ['wss://s.altnet.rippletest.net:51234/'],
  nativeCurrency: { name: 'XRP', symbol: 'XRP', decimals: 6 },
  explorers: [{ name: 'XRPL Testnet Explorer', url: 'https://testnet.xrpl.org/' }],
  isDev: true,
}
```
