---
title: "Deployments"
description: "Testnet deployment policy, asset registry, pool composition"
audience: tech
type: reference
status: live
lang: en
updated: "2026-08-29"
publish: true
---
# Deployments

BTR runs on one live chain today: the Arc public testnet, chainId `5042002`. Six further chains are deployment targets and are listed below with no addresses, so that an integrator can see what is coming and can tell it apart from what is live. This section records what is deployed there, which assets the four pools list, and how each testnet asset maps to the mainnet token it imitates. Every address and roster on these pages is generated from the per-chain deployment artifacts, so a redeploy regenerates them rather than anyone editing them by hand.

---

## 1. Testnet policy

Every chain is a row, keyed by chainId. Adding a chain adds a row.

| Chain | chainId | Status | Notes |
|---|---|---|---|
| Arc Testnet | `5042002` | Live public testnet | Routing hub **USDC.b** (mintable faucet twin). Native USDC (`0x3600…`) is Circle's testnet / gas token, not faucet-mintable |
| Arc | `5042` | Planned | Native gas **USDC** |
| Ethereum | `1` | Planned | Native gas **ETH** |
| BNB Chain | `56` | Planned | Native gas **BNB** |
| Base | `8453` | Planned | Native gas **ETH** |
| Arbitrum | `42161` | Planned | Native gas **ETH** |
| X Layer | `196` | Planned | Native gas **OKB** |
| Monad | `143` | Planned | Native gas **MON** |
| Robinhood Chain | `4663` | Planned | Native gas **ETH** |

Planned means the chain is a deployment target awaiting its launch. Rows populate in
[Contract Addresses](/docs/2-1-contract-addresses) at deploy time, generated from that chain's
artifacts; until then, point an integration at Arc testnet.

Native gas differs across them and is not ETH everywhere: BNB Chain pays in BNB, X Layer in OKB,
Monad in MON. Quoting a fee in ETH on X Layer is a three-orders-of-magnitude error. Arc is its own
case again: gas there is native USDC. The authority for every one of these is the SDK chain
registry (`@btr-protocol/sdk`, `src/eth/chains.ts`), not this table.

The app is chain-agnostic: it reads the published per-chain deployment artifacts for whichever chain is selected. Docs do the same - [Contract Addresses](/docs/2-1-contract-addresses) is generated per chainId.

On testnet chains, pool assets are **BTR-deployed ERC-20 mocks** except official Circle USDC/EURC. Mocks are mainnet-faithful:

- same `decimals` as the mainnet reference token;
- EIP-2612 `permit` where the mainnet token has it (per-asset oddities in [Asset Registry](/docs/2-2-asset-registry));
- minted via on-app **Faucet** (`TestnetFaucet`) under daily caps.

Mainnet addresses are **reference metadata only**: they pin the NXR feed mapping and the mock fidelity target (decimals, permit behavior).

Marks for every listed asset arrive via the signed keeper push pipeline; provenance and on-chain verification in [Oracle Price-Push Security](/docs/3-6-oracle-price-push-security).

Addresses are generated per chain from the deployment artifacts, never hand-typed. Which of them can change, and under what delay: [Contract Addresses §Upgradeability](/docs/2-1-contract-addresses#upgradeability).

---

## 2. Pages

| Page | Content |
|------|---------|
| [2.1. Contract Addresses](/docs/2-1-contract-addresses) | Generated addresses, one section per chainId |
| [2.2. Asset Registry](/docs/2-2-asset-registry) | Assets: mainnet reference, decimals, NXR feed route |
| [2.3. Pool Composition](/docs/2-3-pool-composition) | Stable / FX / Crypto / Stocks cores; hub = USDC.b |
