Built-in Assets
The 29 preloaded tokens and the BUILTIN_ASSETS registry (AssetInit type) — native gas coins plus USDC/USDT/WETH/WSOL across the built-in EVM and Solana networks.
Every workspace is seeded at initialization with 29 curated tokens spanning the 14 built-in networks — each network's native gas coin plus the major stablecoins and wrapped-native tokens. They are also exposed as the frozen BUILTIN_ASSETS registry so you can inspect the catalog without opening a workspace. These ids and addresses are reserved: see Assets for how imports collide with them and why they cannot be dropped.
Preloaded tokens by network
| Network | vm | Native coin | Tokens | ids |
|---|---|---|---|---|
ethereum | evm | ETH | ETH, USDC, USDT, WETH | 1–4 |
base | evm | ETH | ETH, USDC, USDT | 10–12 |
bnbchain | evm | BNB | BNB, USDC, USDT | 20–22 |
arbitrum | evm | ETH | ETH, USDC, USDT | 30–32 |
optimism | evm | ETH | ETH, USDC, USDT | 40–42 |
sepolia | evm | ETH | ETH | 60 |
arbitrum-sepolia | evm | ETH | ETH, USDC | 70–71 |
hyperevm | evm | HYPE | HYPE | 130 |
hyperevm-testnet | evm | HYPE | HYPE | 140 |
robinhood | evm | ETH | ETH | 150 |
robinhood-testnet | evm | ETH | ETH | 160 |
solana | svm | SOL | SOL, USDC, USDT, WSOL | 100–103 |
solana-testnet | svm | SOL | SOL | 110 |
solana-devnet | svm | SOL | SOL | 120 |
Token contract addresses
The 14 native coins all carry a placeholder address. The remaining 15 tokens each have a real contract address:
| id | Network | Symbol | Name | decimals | contractAddress |
|---|---|---|---|---|---|
| 2 | ethereum | USDC | USD Coin | 6 | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| 3 | ethereum | USDT | Tether USD | 6 | 0xdAC17F958D2ee523a2206206994597C13D831ec7 |
| 4 | ethereum | WETH | Wrapped Ether | 18 | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 |
| 11 | base | USDC | USD Coin | 6 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| 12 | base | USDT | Tether USD | 6 | 0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2 |
| 21 | bnbchain | USDC | Binance-Peg USD Coin | 18 | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d |
| 22 | bnbchain | USDT | Binance-Peg Tether USD | 18 | 0x55d398326f99059fF775485246999027B3197955 |
| 31 | arbitrum | USDC | USD Coin | 6 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| 32 | arbitrum | USDT | Tether USD | 6 | 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 |
| 41 | optimism | USDC | USD Coin | 6 | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 |
| 42 | optimism | USDT | Tether USD | 6 | 0x94b008aA00579c1307B0EF2c499aD98a8ce58e58 |
| 71 | arbitrum-sepolia | USDC | USD Coin | 6 | 0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d |
| 101 | solana | USDC | USD Coin | 6 | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| 102 | solana | USDT | Tether USD | 6 | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB |
| 103 | solana | WSOL | Wrapped SOL | 9 | So11111111111111111111111111111111111111112 |
The bnbchain USDC and USDT are Binance-Peg tokens with 18 decimals, unlike the 6-decimal USDC/USDT on the other chains — format balances with each asset's own decimals, never a hardcoded value.
The BUILTIN_ASSETS registry
BUILTIN_ASSETS is a frozen record, keyed by network slug, of the curated token lists. Each entry is an array of AssetInit.
const BUILTIN_ASSETS: Record<string /* network slug */, ReadonlyArray<AssetInit>>import { BUILTIN_ASSETS } from "wative-core";
import type { AssetInit } from "wative-core";
Object.keys(BUILTIN_ASSETS).length; // 14 networks
BUILTIN_ASSETS["ethereum"].map((a) => a.symbol); // ["ETH", "USDC", "USDT", "WETH"]
const total = Object.values(BUILTIN_ASSETS)
.reduce((n, list) => n + list.length, 0); // 29 tokensAssetInit
The literal shape of a built-in entry.
| Field | Type | Required | Notes |
|---|---|---|---|
id | number | yes | Reserved built-in id. |
symbol | string | yes | |
name | string | yes | |
decimals | number | yes | |
contractAddress | string | null | yes | The native placeholder for gas coins; a real address otherwise. |
displayDecimals | number | no | Defaults to decimals. |
displayStatus | boolean | no | Defaults to true. |
All fields are readonly. AssetInit differs from the constructor's AssetInitObject: it carries no network field (the network is the registry key), and its contractAddress is a required property (still nullable).
Native coins carry a placeholder address
Native gas coins have no contract, so the built-ins record a sentinel address rather than null. An Asset built from one reports native === true.
vm | Native placeholder |
|---|---|
| evm | 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE |
| svm | So11111111111111111111111111111111111111111 |
The SVM native placeholder ends in …111 and is distinct from the wrapped-SOL (WSOL) mint So11111111111111111111111111111111111111112, which ends in …112. WSOL is a real token, so asset.native is false for it.
Built-in tokens cannot be dropped
Built-in ids are protected: dropAsset rejects any of them with UNSUPPORTED_OP, because removing a native token would break balance lookups deep in the wallet flow.
await ws.dropAsset(1); // ETH — rejects: WativeError { code: "UNSUPPORTED_OP" }Imports also cannot re-use a built-in id or a built-in contract address — both collide with PARAMETER_ERROR. See Assets for the import and collision rules.