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

NetworkvmNative coinTokensids
ethereumevmETHETH, USDC, USDT, WETH1–4
baseevmETHETH, USDC, USDT10–12
bnbchainevmBNBBNB, USDC, USDT20–22
arbitrumevmETHETH, USDC, USDT30–32
optimismevmETHETH, USDC, USDT40–42
sepoliaevmETHETH60
arbitrum-sepoliaevmETHETH, USDC70–71
hyperevmevmHYPEHYPE130
hyperevm-testnetevmHYPEHYPE140
robinhoodevmETHETH150
robinhood-testnetevmETHETH160
solanasvmSOLSOL, USDC, USDT, WSOL100–103
solana-testnetsvmSOLSOL110
solana-devnetsvmSOLSOL120

Token contract addresses

The 14 native coins all carry a placeholder address. The remaining 15 tokens each have a real contract address:

idNetworkSymbolNamedecimalscontractAddress
2ethereumUSDCUSD Coin60xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
3ethereumUSDTTether USD60xdAC17F958D2ee523a2206206994597C13D831ec7
4ethereumWETHWrapped Ether180xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
11baseUSDCUSD Coin60x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
12baseUSDTTether USD60xfde4C96c8593536E31F229EA8f37b2ADa2699bb2
21bnbchainUSDCBinance-Peg USD Coin180x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d
22bnbchainUSDTBinance-Peg Tether USD180x55d398326f99059fF775485246999027B3197955
31arbitrumUSDCUSD Coin60xaf88d065e77c8cC2239327C5EDb3A432268e5831
32arbitrumUSDTTether USD60xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9
41optimismUSDCUSD Coin60x0b2C639c533813f4Aa9D7837CAf62653d097Ff85
42optimismUSDTTether USD60x94b008aA00579c1307B0EF2c499aD98a8ce58e58
71arbitrum-sepoliaUSDCUSD Coin60x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d
101solanaUSDCUSD Coin6EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
102solanaUSDTTether USD6Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
103solanaWSOLWrapped SOL9So11111111111111111111111111111111111111112

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>>
builtin-assets.ts
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 tokens

AssetInit

The literal shape of a built-in entry.

FieldTypeRequiredNotes
idnumberyesReserved built-in id.
symbolstringyes
namestringyes
decimalsnumberyes
contractAddressstring | nullyesThe native placeholder for gas coins; a real address otherwise.
displayDecimalsnumbernoDefaults to decimals.
displayStatusbooleannoDefaults 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.

vmNative placeholder
evm0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
svmSo11111111111111111111111111111111111111111

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.

drop-guard.ts
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.

See also

Last updated on