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
| Network | Payers see | Test mode | Live mode |
|---|---|---|---|
| TRON | TRON (TRC20) | USDT@tron:nile | USDT@tron:mainnet |
| BNB Smart Chain | BNB Smart Chain (BEP20) | USDT@eip155:97 | USDT@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:
{
"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:
{ "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
| Details | TRON | BNB Smart Chain |
|---|---|---|
| Contract (mainnet) | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t | 0x55d398326f99059fF775485246999027B3197955 |
| Issuer | Tether | Binance ("Binance-Peg BSC-USD"), the USDT that exchanges send on BEP20 |
| Decimals | 6 | 18 |
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
| Network | Credited at | Typically |
|---|---|---|
| TRON | final (a solidified block) | about a minute (19 blocks) |
| BNB Smart Chain | final (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, setunderpay_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 isoverpaid, 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.