Chains
OpenBitum routes payments through two backends:
- Bitcart for EVM chains and BTC.
- Solana Pay (
apps/solana) for SOL + SPL tokens.
The merchant decides per product which currencies to accept.
Supported chains and tokens (MVP)
| № | Chain | Network | Tokens | Backend | Typical confirmation | Notes |
|---|---|---|---|---|---|---|
| 1 | Bitcoin | mainnet | BTC, Lightning | Bitcart | 10–60 min on-chain · seconds for LN | LN requires BITCART_BTC_LIGHTNING=true |
| 2 | Ethereum | mainnet | ETH, USDC, USDT | Bitcart | 1–3 min | High gas — recommend Base/Polygon for sub-$50 carts |
| 3 | Base | mainnet | ETH, USDC | Bitcart | <30 s | Cheap, fast — recommended default |
| 4 | Polygon | mainnet | MATIC, USDC, USDT | Bitcart | <30 s | Cheap, mature |
| 5 | Arbitrum | mainnet | ETH, USDC | Bitcart | <30 s | L2 |
| 6 | Tron | mainnet | USDT (TRC-20) | Bitcart | ~1 min | Very cheap USDT |
| 7 | Solana | mainnet-beta | SOL, USDC, USDT | Solana Pay | <2 s finality, ~30 s for safety window | Set SOLANA_RPC_URL |
Gas behaviour
- Non-custodial: addresses derive from the merchant's xPub. The merchant pays zero gas — the buyer pays gas on top of the invoice amount.
- Bitcart shows the buyer a per-network fee estimate at the moment of invoice creation.
- For Solana Pay we use the
referencefield; SOL fee (~0.000005 SOL) is borne by the buyer.
Confirmation policy
The glue treats an invoice as paid when Bitcart reports status=complete
(default: confirmation depth per chain set by Bitcart) or when the Solana watcher sees
the transaction finalized.
Recommended depths (Bitcart defaults shown — override per store in Bitcart admin):
| № | Chain | Confirmations | |---|---|---| | 1 | BTC | 1 | | 2 | LN | n/a (instant) | | 3 | ETH / Arbitrum | 1 | | 4 | Base / Polygon | 5 | | 5 | Tron | 19 | | 6 | Solana | finalized |
Underpayment and overpayment
- Underpayment (buyer sent less than invoiced): Bitcart marks the invoice
paid_partial. The glue treats it aspending. The dashboard surfaces the gap so the merchant can manually mark it paid or refund. - Overpayment: Bitcart marks the invoice
paidif the amount is ≥ invoice value; the surplus is reflected in the order detail page so the merchant can refund manually.
Refunds are off-chain operations (manual) for the MVP — see the Refunds section in the Troubleshooting page.
Adding a new chain
EVM chains require dropping a new Bitcart daemon into docker-compose.yml. See the
template in infrastructure/bitcart-config/README.md. After the daemon is up,
add the currency code to BITCART_CRYPTOS and restart the bitcart container.
Coming after MVP launch: chain abstraction via a unified gateways/ interface so
adapters can be added without forking Bitcart.