BNB Smart Chain (BSC)
BSC stablecoins lack EIP-3009, so Dexter supports two payment paths: standard Permit2 for compatibility and a hardened custom contract for on-chain security guarantees. Both are live, same facilitator.
Network ID
| Network | CAIP-2 identifier | Status |
|---|---|---|
| BNB Smart Chain | eip155:56 | Production |
Why BSC Has Two Paths
BSC stablecoins lack EIP-3009
USDT and USDC on BSC are Binance-Peg bridge wrappers — standard ERC-20. They don't implement transferWithAuthorization (EIP-3009), the function that powers x402 on every other EVM chain. Permit2 and exact-approval are two different solutions to this gap.
| Permit2 (standard) | exact-approval (hardened) | |
|---|---|---|
| Scheme | exact | exact-approval |
| How it works | Uniswap Permit2 + x402ExactPermit2Proxy | DexterBSCFacilitator custom contract |
| First payment | Fully gasless (facilitator sponsors the Permit2 approval via erc20ApprovalGasSponsoring) | One contract approval (~$0.02 BNB, paid by user) |
| After that | Gasless signature | Gasless signature |
| User needs BNB? | No | Yes (first payment only, ~$0.02) |
| SDK | Standard @x402/evm or @dexterai/x402 | @dexterai/x402 or custom handler |
| On-chain fee caps | No | Yes (5% MAX_FEE_BPS) |
| Token allowlist | No (any ERC-20) | Yes (USDT + USDC) |
| Pause mechanism | No | Yes |
Token Details
| Token | Contract | Symbol | Decimals |
|---|---|---|---|
| Binance-Peg USDT | 0x55d398326f99059fF775485246999027B3197955 | USDT | 18 |
| Binance-Peg USDC | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d | USDC | 18 |
18 decimals, not 6
Both BSC stablecoins use 18 decimals. 1 USDT = 1000000000000000000 (1e18), not 1000000 (1e6). The facilitator returns extra.decimals: 18 in the /supported response. The SDK handles this automatically.
Path 1: Permit2 (Standard)
The simplest integration path. Works with the unmodified @x402/evm package or @dexterai/x402 SDK. No BSC-specific code needed.
The facilitator returns scheme: "exact" with extra.assetTransferMethod: "permit2" for BSC. The upstream ExactEvmScheme routes Permit2 payloads automatically.
Contracts on BSC:
- Permit2:
0x000000000022D473030F116dDEE9F6B43aC78BA3 - x402ExactPermit2Proxy:
0x402085c248EeA27D92E8b30b2C58ed07f9E20001
Integration:
Path 2: exact-approval (Hardened)
Uses a custom smart contract with on-chain security guarantees that Permit2 does not provide at the settlement layer.
When to use this path
Use exact-approval when you want on-chain fee enforcement, token restrictions, emergency pause capability, or facilitator-only access control on settlement. For most integrations, Permit2 is simpler and sufficient.
How it works:
- One-time: User approves the DexterBSCFacilitator contract (~$0.02 BNB)
- Per payment: User signs an EIP-712
Paymentmessage with:from,to,token,amount,fee,nonce,deadline,paymentId - Settlement: Facilitator calls
executePayment()on the contract. Contract re-verifies signature, checks nonce, enforces allowlist and fee caps, moves tokens viasafeTransferFrom
Security model:
| Feature | Detail |
|---|---|
| ReentrancyGuard | nonReentrant on executePayment |
| Pausable | Owner-callable pause() and unpause() |
| Token allowlist | allowedTokens mapping, owner setTokenAllowed() |
| Fee caps | minFee floor + MAX_FEE_BPS hard cap (5%) |
| Fee separation | Fees go to feeRecipient, not the executor wallet |
| Nonce tracking | usedNonces[user][nonce] mapping, random 128-bit nonces |
| Access control | Facilitator-only on executePayment |
| SafeERC20 | All transfers — required because BSC USDT doesn't return bool |
| Proxy | TransparentUpgradeableProxy — upgradeable without re-approval |
Contract:
| Property | Value |
|---|---|
| Proxy (use this address) | 0x3D56A1A196aC81c959A1be21ABC28c173fB063B8 |
| Implementation | 0x4fC9f4340c72fCD238A61De314D7F5c4401a981a |
| ProxyAdmin | 0x44F7A1851F33b23C0179ab1f7631c4e6aBa12caC |
| Source | DexterBSCFacilitator.sol |
Integration:
Best Fit
- merchants accepting payment from BSC-native users holding USDT or USDC
- agents operating on BSC that need programmatic gasless payments
- teams that want the standard Permit2 path with zero BSC-specific code
- high-value or regulated use cases that benefit from on-chain fee caps and token restrictions (exact-approval)
Quick Support Check
Validate Before Shipping
- Confirm BSC appears twice in
/supported— oneexactkind withassetTransferMethod: "permit2"and oneexact-approvalkind. - Confirm you are using
eip155:56as the network identifier. - Confirm amounts use 18 decimals (not 6).
- Test
POST /verifyandPOST /settlewith a real BSC-targeted payment. - If using exact-approval, confirm the user has approved the DexterBSCFacilitator contract.
Proof of Operation
First two exact-approval settlements on BSC mainnet:
- USDT:
0xdfb827d7... - USDC:
0xa177e436...