TillsafeDocstillsafe.comRequest early access

Accepting USDT on TRON and BNB Chain

The two networks most payers use for USDT - asset codes, amounts, finality, fees, and how wrong-network mistakes are caught.

Most USDT that people send from exchanges travels on TRON (TRC20) or BNB Smart Chain (BEP20): both are fast and cost little. Tillsafe treats them as first-class networks: they are the default test-mode assets, and the checkout names them the way exchanges do.

Asset codes

NetworkPayers seeTest modeLive mode
TRONTRON (TRC20)USDT@tron:nileUSDT@tron:mainnet
BNB Smart ChainBNB Smart Chain (BEP20)USDT@eip155:97USDT@eip155:56

network_name on each payment option carries that label ("TRON Nile testnet (TRC20)" and "BNB Smart Chain testnet (BEP20)" in test mode), because it is what payers look for on an exchange's withdrawal screen.

To offer exactly these two, list them when you create an invoice:

json
{
  "amount": "30.00",
  "currency": "USD",
  "assets": ["USDT@tron:mainnet", "USDT@eip155:56"],
  "description": "Order #1001"
}

or make them your account's defaults once, with POST /v1/merchant/settings:

json
{ "default_assets": ["USDT@tron:mainnet", "USDT@eip155:56"] }

Both are priced 1:1 with USD: a USD invoice can be paid in either, or partly in each.

The tokens

DetailsTRONBNB Smart Chain
Contract (mainnet)TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t0x55d398326f99059fF775485246999027B3197955
IssuerTetherBinance ("Binance-Peg BSC-USD"), the USDT that exchanges send on BEP20
Decimals618

A payment counts only if it is that contract's token. A look-alike token with the same name is ignored.

The decimals differ, but you never handle them: amount_due is always in whole tokens, as a decimal string ("30" for 30 USDT on either network). Only the BEP20 payment_uri, an EIP-681 wallet link, carries base units (uint256=30000000000000000000). TRON has no standard payment link, so its payment_uri is null and the checkout shows the address and a QR code.

How fast a payment is final

NetworkCredited atTypically
TRONfinal (a solidified block)about a minute (19 blocks)
BNB Smart Chainfinal (fast finality)a few seconds

There is no amount threshold on either: every payment waits for final. A single payment worth US$250,000 or more is also held for review. See finality per chain.

Fees

  • The payer pays the network fee of their own transfer. From an exchange, the exchange deducts its withdrawal fee, which is why a payer often sends a little less than asked. For exchanges whose fee and network label Tillsafe has checked, the checkout shows the payer both (GET /v1/checkout/exchanges).
  • A short payment is not lost. It leaves the invoice partially_paid, and the payer tops it up at the same address. To accept small shortfalls as full payment, set underpay_tolerance_bps (underpaid, overpaid, late).
  • A tiny excess is kept. An excess under 0.01 USDT leaves the invoice simply paid; 0.01 or more is overpaid, and refundable.
  • Paying from a wallet on TRON needs energy. A TRON wallet with no staked energy burns TRX for the transfer; the checkout warns a connected TronLink wallet that holds too little.

Moving the money on

In live mode your deposit addresses are your own wallet addresses (an EOA pool), and the USDT stays on them, under your keys, until you sweep it to your treasury:

  • BNB Smart Chain: each sweep needs a little BNB for gas on the address being swept, sent from a gas wallet you keep topped up.
  • TRON: a sweep needs about 65,000 energy (about 130,000 when the treasury holds no USDT yet), paid by burning TRX or with staked or rented energy, and each new address costs about 1.1 TRX once to activate.

Sweeping pool addresses covers the routine. Forwarder addresses, which would forward on their own, are not deployed on a public network yet.

Wrong-network mistakes

  • BEP20 sent on another EVM network. An invoice's address is the same on every EVM network your account has enabled, so USDT sent on, say, Ethereum instead of BNB Smart Chain is still credited, at the same price. This only works on networks your account has payout addresses for.
  • TRC20 and BEP20 confused. A TRON address and an EVM address are different kinds of address, so a TRC20 payment cannot arrive at a BEP20 address or the other way round, and it cannot be rescued. The checkout says, next to the address, which network to choose and that no other network can reach it.

See wrong chain.

Paying from a browser wallet

The checkout's Pay with wallet works on both networks: TronLink on TRON, and MetaMask or any EIP-6963 wallet on BNB Smart Chain (the checkout adds the network to the wallet if it is missing). TronLink cannot be switched between networks by a web page, so the payer selects TRON mainnet (or Nile, in test mode) in the wallet. See connected wallet.

Refunds and frozen addresses

Tether can freeze addresses. When a payer claims a refund, the address they give is checked against the token issuer's blacklist (on mainnet) and the OFAC list before you send anything; a match puts the refund in review. See refunds.