DuckyPayเอกสาร

Chains & tokens

This table is generated from the same chain registry the DuckyPay signer and contracts build against — it cannot drift from what the API actually accepts.

Supported networks#

Pass the chainId when creating a charge. Test keys work only on testnets; live keys only on mainnets.

NetworkchainIdDefault tokenStatus
Polygon — primary137USDTLive
Base8453USDCComing soon
Arbitrum One42161USDCComing soon
Polygon Amoy80002USDCTestnet

Omit token in a charge and the chain’s default token is used. Networks marked “coming soon” are wired in the registry but not yet accepting charges.

Token contracts#

Only issuer-native stablecoin contracts are supported — never bridged variants. Verify against these addresses before telling a buyer where to send funds.

Polygon (137)

TokenContract addressDecimals
USDT0xc2132D05D31c914a87C6611C10748AEb04B58e8F6
USDC0x3c499c542cEF5E3811e1192ce70d8cC03d5c33596

Base (8453)

TokenContract addressDecimals
USDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA029136

Arbitrum One (42161)

TokenContract addressDecimals
USDC0xaf88d065e77c8cC2239327C5EDb3A432268e58316

Polygon Amoy (80002)

TokenContract addressDecimals
USDC (test token)0x34D9bb299F95FA778E7e48a102c1D6D3fe8Ad14A6

Token policy#

  • Standard stablecoins only. Fee-on-transfer and rebasing tokens are not supported — the atomic split assumes 1 unit sent is 1 unit received.
  • Amounts in the API are strings in the token’s smallest unit (10000000 = 10 USDT at 6 decimals). Use toBaseUnits() from @duckypay/node to convert safely.
  • Buyers must send the exact token on the exact chain — see the warning in Payment modes.