> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tplus.cx/llms.txt
> Use this file to discover all available pages before exploring further.

# Asset fungibility

> How the same token across chains and wrappers maps to one Tplus asset.

The same underlying token across chains and wrappers maps to one Tplus asset: USDC and USDT credit as USD; ETH on Ethereum, Arbitrum, Monad, and Base credits as ETH; cbBTC and wBTC credit as BTC. Trading and collateral use the unified asset; per-chain vault balances are kept in line by [rebalancing](/funds/rebalancing). The asset registry is served by `GET /registry/assets`.

A pooled balance is identified by its Tplus asset index, `Index(n)`. A balance that is not pooled is identified by its chain-specific token address, `Address(token@chain)`, and trades as an isolated, chain-specific asset.

## Production EVM chain set

Production asset-config rows currently use this EVM chain set. Supported tokens vary by chain; use `GET /registry/assets` for per-asset availability.

| Chain    | EVM chain ID |
| -------- | -----------: |
| Ethereum |            1 |
| Arbitrum |        42161 |
| Monad    |          143 |
| Base     |         8453 |

For confirmation policy and approximate wait time, see [Deposits](/funds/deposits#chains-and-confirmation-times).

## Deposit caps and isolation

Each (asset, chain) pair has a total deposit cap and a rolling 1-hour deposit cap ([asset parameters](/funds/asset-parameters)). A deposit that breaches a cap is still credited, but as an isolated `Address(token@chain)` balance that is not fungible with the pooled asset and cannot be used for leverage until caps allow.

```text theme={null}
total_after = current_total_deposits + new_deposit
rolling_1h_after = current_rolling_1h_deposits + new_deposit
pooled = total_after <= maxDeposits && rolling_1h_after <= max1hrDeposits
```

Example: if the rolling 1-hour deposits for Arbitrum USDC are `95,000 USDC`, `max1hrDeposits = 100,000 USDC`, and a user deposits `10,000 USDC`, then `rolling_1h_after = 105,000 USDC`. The deposit is credited as isolated `Address(token@chain)` balance instead of pooled `Index(USD)`.

Isolation is not permanent. As cap capacity frees up - the rolling 1-hour window ages out, or total deposits fall back below `maxDeposits` - isolated balances are promoted back into the pooled `Index(n)` asset. Promotion is automatic, applied on the account's next deposit or withdrawal of that asset, and fills only the headroom currently available, so a large isolated balance converts in steps as capacity allows.

Continuing the example: once the earlier deposits age out of the 1-hour window, the isolated `10,000 USDC` is promoted to pooled `Index(USD)` on the account's next deposit or withdrawal - partially if only some headroom has reopened, fully once there is room for all of it.
