Built-in Assets

The 32 preloaded tokens and the BUILTIN_ASSETS registry (AssetInit type) — native gas coins plus USDC/USDT/USDT0/WETH/WSOL across the built-in EVM and Solana networks.

Every workspace is seeded at initialization with 32 curated tokens spanning the 15 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.

Each built-in token reports asset.isBuiltin === true — the flag a UI reads to show a token as non-deletable, with only its display fields (displayStatus, displayDecimals) editable. Built-ins stay current with the library: a token added to a network in a later wative-core appears automatically in existing workspaces, and a built-in's identity (symbol, name, decimals, address) always reflects the library's current values, while your display preferences on it are preserved.

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
inkevmETHETH, USDC, USDT0170–172
solanasvmSOLSOL, USDC, USDT, WSOL100–103
solana-testnetsvmSOLSOL110
solana-devnetsvmSOLSOL120

Token contract addresses

The 15 native coins all carry a placeholder address. The remaining 17 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
171inkUSDCUSD Coin60x2D270e6886d130D724215A266106e6832161EAEd
172inkUSDT0USDT060x0200C29006150606B650577BBE7B6248F58470c1

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;            // 15 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);     // 32 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: editable display, but not droppable

Built-in tokens cannot be removed: dropping one rejects with UNSUPPORTED_OP, because removing a native token would break balance lookups deep in the wallet flow.

drop-guard.ts
const eth = ws.networks.bySlug("ethereum");
await eth.assets.drop(1); // ETH — rejects: WativeError { code: "UNSUPPORTED_OP" }

Their identity — symbol, name, decimals, contract address — is locked too: a write to one is refused with PARAMETER_ERROR. What a built-in token does allow is editing its display fields, displayStatus and displayDecimals, through network.assets.update, workspace.updateAsset, or asset.save().

An import also cannot re-use a built-in contract address — it collides with DUPLICATE_IDENTITY. See Assets for the import and collision rules.

See also

Last updated on