Skip to main content
The Avail Nexus SDK supports multiple tokens across various blockchain networks. This page provides comprehensive information about supported tokens, their decimals, and contract addresses on each network.

Token Overview

TokenNameDecimalsTypeNetworks
ETHEthereum18NativeAll EVM chains
USDCUSD Coin6Stablecoin18 networks
USDTTether USD6Stablecoin12 networks
USDMUSDm18StablecoinMegaETH
MATICPolygon18NativePolygon, Polygon Amoy
AVAXAvalanche18NativeAvalanche
BNBBNB18NativeBNB Smart Chain
MONMonad18NativeMonad, Monad Testnet
KAIAKaia18NativeKaia Mainnet
cBTCCitrea BTC18NativeCitrea (mainnet & testnet)
HYPEHype18NativeHyper EVM

USDC Contract Addresses

USD Coin (USDC) is supported on the most networks with 6 decimal places.

Mainnet

NetworkChain IDContract Address
Ethereum10xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Base84530x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Arbitrum One421610xaf88d065e77c8cc2239327c5edb3a432268e5831
Optimism100x0b2c639c533813f4aa9d7837caf62653d097ff85
Polygon1370x3c499c542cef5e3811e1192ce70d8cc03d5c3359
Avalanche431140xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
Scroll5343520x06efdbff2a14a7c8e15944d1f4a48f9f95f663a4
BNB Smart Chain560x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d
Hyper EVM9990xb88339CB7199b77E23DB6E890353E22632Ba630f
Monad1430x754704Bc059F8C67012fEd69BC8A327a5aafb603
Citrea Mainnet41140xE045e6c36cF77FAA2CfB54466D71A3aEF7bbE839

Testnet

NetworkChain IDContract Address
Sepolia111551110x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238
Base Sepolia845320x036CbD53842c5426634e7929541eC2318f3dCF7e
Arbitrum Sepolia4216140x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d
Optimism Sepolia111554200x5fd84259d66Cd46123540766Be93DFE6D43130D7
Polygon Amoy800020x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582
Monad Testnet101430xf817257fed379853cDe0fa4F97AB987181B1E5Ea
Citrea Testnet51150xb669dC8cC6D044307Ba45366C0c836eC3c7e31AA

USDT Contract Addresses

Tether USD (USDT) is available on multiple networks with 6 decimal places.

Mainnet

NetworkChain IDContract Address
Ethereum10xdac17f958d2ee523a2206206994597c13d831ec7
Arbitrum One421610xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9
Optimism100x94b008aa00579c1307b0ef2c499ad98a8ce58e58
Polygon1370xc2132d05d31c914a87c6611c10748aeb04b58e8f
Avalanche431140x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7
Scroll5343520xf55bec9cafdbe8730f096aa55dad6d22d44099df
BNB Smart Chain560x55d398326f99059fF775485246999027B3197955
Kaia Mainnet82170xd077a400968890eacc75cdc901f0356c943e4fdb
Hyper EVM9990xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb
Citrea Mainnet41140x9f3096Bac87e7F03DC09b0B416eB0DF837304dc4
MegaETH43260xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb

Testnet

NetworkChain IDContract Address
Arbitrum Sepolia4216140xF954d4A5859b37De88a91bdbb8Ad309056FB04B1
Optimism Sepolia111554200x6462693c2F21AC0E517f12641D404895030F7426
Monad Testnet101430x1c56F176D6735888fbB6f8bD9ADAd8Ad7a023a0b

USDM Contract Addresses

USDm is a stablecoin with 18 decimal places, currently only available on MegaETH.
NetworkChain IDContract Address
MegaETH43260xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7

Native Tokens

Native tokens are represented with the zero address (0x0000000000000000000000000000000000000000) in the SDK.
TokenSymbolDecimalsNetworks
EthereumETH18Ethereum, Base, Arbitrum, Optimism, Scroll, Sepolia, Base Sepolia, Arbitrum Sepolia, Optimism Sepolia, MegaETH
PolygonMATIC18Polygon, Polygon Amoy
AvalancheAVAX18Avalanche
BNBBNB18BNB Smart Chain
MonadMON18Monad, Monad Testnet
KaiaKAIA18Kaia Mainnet
Citrea BitcoincBTC18Citrea Mainnet, Citrea Testnet
HypeHYPE18Hyper EVM

Programmatic Access

Access token contract addresses programmatically:
import { 
  TOKEN_CONTRACT_ADDRESSES,
  TOKEN_METADATA,
  SUPPORTED_CHAINS 
} from '@avail-project/nexus-core';

// Get USDC address on Ethereum
const usdcOnEth = TOKEN_CONTRACT_ADDRESSES.USDC[SUPPORTED_CHAINS.ETHEREUM];
console.log(usdcOnEth); // "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"

// Get token metadata
const usdcMetadata = TOKEN_METADATA.USDC;
console.log(usdcMetadata);
// {
//   symbol: 'USDC',
//   name: 'USD Coin',
//   decimals: 6,
//   icon: 'https://...'
//   coingeckoId: 'usd-coin'
// }

// Get USDT address on Polygon
const usdtOnPolygon = TOKEN_CONTRACT_ADDRESSES.USDT[SUPPORTED_CHAINS.POLYGON];
console.log(usdtOnPolygon); // "0xc2132d05d31c914a87c6611c10748aeb04b58e8f"

Bridge Operations

When using bridge operations, you specify tokens by their symbol:
await sdk.bridge({
  token: 'USDC',  // Use symbol, not address
  amount: 100_000_000n,  // 100 USDC (6 decimals)
  toChainId: 137,
});

Swap Operations

For swap operations, you must use the contract address:
await sdk.swapWithExactIn({
  from: [
    {
      chainId: 10,
      amount: 1_000_000n,
      tokenAddress: '0x0b2c639c533813f4aa9d7837caf62653d097ff85', // USDC on Optimism
    },
  ],
  toChainId: 8453,
  toTokenAddress: '0x0000000000000000000000000000000000000000', // ETH (native)
});
Remember: Bridge operations use token symbols (e.g., 'USDC'), while swap operations use contract addresses.

Working with Decimals

Always use the correct decimal places when specifying amounts:
import { parseUnits } from '@avail-project/nexus-core';

// USDC/USDT (6 decimals)
const usdc100 = 100_000_000n; // 100 USDC
const usdc100Alt = parseUnits('100', 6); // Alternative

// ETH/Native tokens (18 decimals)
const eth1 = 1_000_000_000_000_000_000n; // 1 ETH
const eth1Alt = parseUnits('1', 18); // Alternative

// USDM (18 decimals)
const usdm50 = parseUnits('50', 18); // 50 USDM
Using incorrect decimal places will result in transferring the wrong amount. Always verify the token’s decimal count.

Build docs developers (and LLMs) love