BSC
BNB Smart Chain.
| Slug | bsc |
| Address format | EIP-55 checksummed hex, 0x… |
| Account path | m/44'/60'/0' — shared with Ethereum |
| Cloud stores | Ethereum's xpub. No separate key |
| Derivation | ✅ M/0/{i} — public, no Edge required |
| Confirmations | 15 |
| Tokens | BEP-20 |
| Explorer | https://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 | |
|---|---|
gasPriceGwei | Current network price |
gasUnits | 21,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:
| Token | Contract | Decimals |
|---|---|---|
| USDT | 0x55d398326f99059fF775485246999027B3197955 | 18 |
| USDC | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d | 18 |
| FDUSD | 0xc5f0f7b66764F6ec8C8Dff7BA683102295E16409 | 18 |
| USDD | 0x45E51bc23D592EB2DBA86da3985299f7895d66Ba | 18 |
| cNGN | 0xa8AEA66B361a8d53e8865c62D142167Af28Af058 | 6 |
This is the single most expensive mistake available on this chain.
| Ethereum | BSC | |
|---|---|---|
| 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 whatexplorerUrlon 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
chainfield 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.