Skip to main content

BSC

BNB Smart Chain.

Slugbsc
Address formatEIP-55 checksummed hex, 0x…
Account pathm/44'/60'/0'shared with Ethereum
Cloud storesEthereum's xpub. No separate key
DerivationM/0/{i} — public, no Edge required
Confirmations15
TokensBEP-20
Explorerhttps://bscscan.com/tx/{txid} · https://bscscan.com/address/{address}

The address is Ethereum's

BSC uses coin type 60', the same as Ethereum, so an address issued for eth receives on BSC without any further action. There is no separate BSC extended public key and there should be no separate BSC address.

Issue once with "chain": "eth", then tell your customer the address accepts Ethereum, BSC, Polygon, Avalanche and Base. See Ethereum.

The chain field on the webhook tells you where a deposit landed:

{ "event": "deposit_confirmed",
"data": { "chain": "bsc", "tokenSymbol": "USDT",
"tokenContract": "0x55d398326f99059fF775485246999027B3197955",
"decimals": 18, "amount": "1000000000000000000" } }

tokenContract is null for a BNB deposit and set for a token. Branch on it, not on tokenSymbol — the symbol is populated for native transfers too, so a check for its absence never fires.

Confirmations

Fifteen. BSC produces blocks roughly every 750ms with a shorter reorg window than Ethereum, so fifteen blocks is about eleven seconds — faster in wall-clock terms than Ethereum's twelve despite the higher count.

Fees

fee = gasUnits × max(gasPrice × 1.1, 3 gwei)
Field
gasPriceGweiCurrent network price
gasUnits21,000 for a transfer; roughly 45,000–65,000 for BEP-20

BSC uses legacy gas pricing, not EIP-1559, so there is a single price rather than a base fee and a tip. The × 1.1 is inclusion headroom and the 3 gwei floor is a practical minimum below which validators tend not to include a transaction.

Fees are low — typically a fraction of a cent — which changes the economics of sweeping. Dust thresholds that make sense on Ethereum are unnecessarily conservative here.

The fee is paid in BNB by the sending address, so the INSUFFICIENT_GAS case applies exactly as on Ethereum: a BEP-20 deposit address holds tokens and no BNB. See Ethereum.

BEP-20 tokens, and the decimals trap

Monitored contracts on mainnet:

TokenContractDecimals
USDT0x55d398326f99059fF775485246999027B319795518
USDC0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d18
FDUSD0xc5f0f7b66764F6ec8C8Dff7BA683102295E1640918
USDD0x45E51bc23D592EB2DBA86da3985299f7895d66Ba18
cNGN0xa8AEA66B361a8d53e8865c62D142167Af28Af0586
USDT on BSC has 18 decimals, not 6

This is the single most expensive mistake available on this chain.

EthereumBSC
One USDT is"1000000""1000000000000000000"

A withdrawal amount computed with the Ethereum scale sends one trillionth of what you meant; the same mistake in the other direction sends a trillion times too much, which fails as INSUFFICIENT_FUNDS and is therefore the harmless direction.

Read decimals from the balance or the webhook payload for the specific chain and contract. Never hardcode a scale per token symbol.

The contracts are also entirely different addresses from Ethereum's. 0xdAC17F95… — Ethereum's USDT — is not USDT on BSC and is not anything on BSC. Branch on tokenContract per chain.

Balances

{ "confirmed": "1000000000000000000", "available": "1000000000000000000",
"reserved": "0", "decimals": 18 }

available == confirmed. Nothing is immobilised on BSC.

Operational notes

  • Same address, four histories. One address has independent transaction histories on Ethereum, BSC, Polygon, Avalanche and Base. A customer looking it up on Etherscan will not see their BSC deposit. Link them to bscscan.com, which is what explorerUrl on the transaction record already does.
  • A token sent on the wrong network is a real support case. A customer who sends BSC-USDT intending Ethereum-USDT has sent a different token to the same address. It is detected as a BSC deposit and it is recoverable — the address is yours on both chains — but the amount and the contract will not be what your customer says they sent. The chain field is the answer.
  • Reverted transactions cost the fee, as on any EVM chain.
  • BSC is one of the six chains with no configured RPC endpoint in the current deployment. Derivation works — it needs no RPC — while balances, fees and broadcast return 503 CHAIN_UNAVAILABLE. Adding an endpoint is a configuration change, not a code change. Check readiness in the console before you plan around it.