Skip to content

The x/tokenization allowed_denoms list on mainnet, the SDK coin registry, and the canonical USDC (via Injective) versus legacy USDC.n (via Noble) policy.

x/tokenization keeps an allowlist of denoms that approval criteria (coinTransfers, backed paths, pricing) may reference. Governance updates it through MsgUpdateParams. The live list is the source of truth; the SDK's MAINNET_COINS_REGISTRY mirrors it with symbols and decimals.

bash
curl https://lcd.bitbadges.io/bitbadges/bitbadgeschain/tokenization/params
json
{
  "params": {
    "allowed_denoms": [
      "ubadge",
      "ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349",
      "ibc/A4DB47A9D3CF9A068D454513891B526702455D3EF08FB9EB558C561F9DC2B701",
      "ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B8518",
      "badges:49:chaosnet",
      "ibc/E1116484B327AEE59CDC3DA73D319834781A13DB2A7DFC1F38A30CD45ABF58B8"
    ],
    "affiliate_percentage": "0"
  }
}

Ask your agent:

text
List every denom BitBadges accepts for payments and pools, with decimals, and tell me the current USDC price of BADGE.

The bb assets list and bb assets price commands read the registry and the pool prices on this page.

Allowlist (Mainnet, 2026-09-06)

SymbolDenomDecimalsRouteStatus
BADGEubadge9nativecanonical
USDCibc/E1116484B327AEE59CDC3DA73D319834781A13DB2A7DFC1F38A30CD45ABF58B86transfer/channel-40/erc20:0xa00C59fF5a080D2b954d0c75e46E22a0c371235a (Injective)canonical, use for everything new
USDC.nibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E3496transfer/channel-2/uusdc (Noble)legacy, deprecated for new use
ATOMibc/A4DB47A9D3CF9A068D454513891B526702455D3EF08FB9EB558C561F9DC2B7016Cosmos Hub, channel-3supported
OSMOibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE12566649D0C2F97716B85186Osmosis, channel-0supported
CHAOSbadges:49:chaosnet9wrapped collection 49supported, worthless test asset

Any other ibc/ denom that arrives (for example Osmosis's alloyed allUSDC or a bridged voucher of it) is unregistered: it is not allowlisted, carries no rate limits, and cannot back a collection.

The Two USDC Routes

An IBC denom is the hash of the token's full transfer path, so the same asset arriving by two routes has two denoms. Treat them as separate balances; they never aggregate.

Canonical USDC is Circle's native USDC on Injective (erc20 contract 0xa00C59fF5a080D2b954d0c75e46E22a0c371235a, CCTP-enabled), sent one IBC hop from Injective over channel-40. It is not a Noble voucher forwarded through Injective. The erc20 address in the trace is checksummed and the denom hash is case-sensitive. Use it for pricing, payment requests, subscriptions, prediction markets, pool creation, and backed collections. From [email protected], the bare symbol USDC (in the SDK registry, in bb --denom USDC, in "denom": "USDC" JSON) resolves to ibc/E1116484....

The canonical route is proven and its allowlisting shipped with governance proposal 45, but circulating supply is still small. Skip Go indexes the denom on bitbadges-1 (labeled USDC.inj in Skip's data, USDC in the BitBadges app) and can route native Injective USDC to BitBadges as a direct transfer. Routes that start from Noble or Ethereum USDC wait on Skip swap-venue coverage and pool liquidity; until then, get to native USDC on Injective first (CCTP or a swap there).

USDC.n is the original Noble-direct denom, kept only for existing balances and collections. The .n suffix is Skip Go's ecosystem-wide symbol for the Noble voucher; earlier drafts spelled it USDC.noble, and the CLI, SDK builders, and MCP builder tools still accept USDC.noble as typed input (output is always USDC.n).

  • Existing balances stay usable and spendable, priced at $1, and Skip-supported so holders can swap out.
  • channel-2 stays open; no decommissioning is planned.
  • The 16 collections with backed paths on it keep working. A backed path's escrow address derives from the denom string, so those collections cannot be repointed. That is also why a new backed collection on USDC.n is harmful: it would be stuck there. New backed collections use canonical USDC.
  • Do not use it for anything new.

SDK Registry

MAINNET_COINS_REGISTRY in bitbadges (src/common/constants.ts) carries the same six entries with label, symbol, decimals, baseDenom, image, skipGoSupported, and, from 0.43.0, deprecated and deprecationNote on USDC.n.

ts
import { MAINNET_COINS_REGISTRY } from 'bitbadges';

const usdc = MAINNET_COINS_REGISTRY['ibc/E1116484B327AEE59CDC3DA73D319834781A13DB2A7DFC1F38A30CD45ABF58B8'];
// { label: 'USDC', symbol: 'USDC', decimals: '6', skipGoSupported: true,
//   baseDenom: 'ibc/E1116484B327AEE59CDC3DA73D319834781A13DB2A7DFC1F38A30CD45ABF58B8',
//   image: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/_non-cosmos/ethereum/images/usdc.png' }

const legacy = MAINNET_COINS_REGISTRY['ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349'];
// { label: 'USDC.n', symbol: 'USDC.n', decimals: '6', skipGoSupported: true, deprecated: true,
//   baseDenom: 'ibc/F082B65C88E4B6D5EF1DB243CDA1D331D002759E938A0F5CD3FFDC5D53B3E349',
//   deprecationNote: 'Legacy Noble-routed USDC. Existing balances stay fully usable, use canonical USDC (via Injective) for everything new.' }

CHAOS and BADGE use 9 decimals; the three IBC stablecoins and ATOM and OSMO use 6. CHAOS is not Skip-supported. Images point at the Cosmos chain registry.

Edit this page on GitHub