Settlement Model
How funds actually move through sBTC Pay, and why settlement is instant, direct, and custodial-free.
Every payment on sBTC Pay is a direct wallet-to-wallet transfer that settles in one Stacks block — typically 5–10 seconds. sBTC Pay is never in the flow of funds: the contract transfers directly between customer and merchant, with a small protocol fee split off in the same atomic transaction.
Who holds what, when
At any moment, funds are in exactly one of three places:
- Customer's wallet — before payment
- In-flight — during the ~10-second window while the TX is confirming
- Merchant's wallet + protocol fee recipient's wallet — after confirmation
There is no "sBTC Pay account" holding customer or merchant funds. The contract is a set of rules that move money directly between wallets; it never takes custody.
Compare to traditional processors
Atomic fee split
Every payment splits the amount into two transfers within a single transaction:
- Merchant receives:
amount − fee - Protocol fee: a small percentage that goes to the fee-recipient address
Both transfers succeed or both revert — the customer never loses funds without the merchant receiving them. This atomicity comes for free from Clarity's transaction semantics.
What "finality" means here
A Stacks transaction is final once it's included in a Stacks block AND that Stacks block is anchored to a Bitcoin block. In practice:
- Stacks block: ~5 seconds after broadcast (post-Nakamoto)
- Bitcoin-anchored finality: ~10 minutes (one Bitcoin block)
- Deep finality: 6 Bitcoin blocks (~1 hour)
For most commerce, Stacks-block finality (5 seconds) is enough. For high-value settlement, you may want to wait for Bitcoin anchoring. The sBTC Pay dashboard marks a payment as confirmed once the Stacks block includes it, and shows the Bitcoin-anchoring depth as it accumulates.
Refund semantics
A refund is NOT a reversal — it's a new transfer in the opposite direction, from merchant to customer. The original payment remains on-chain. This means:
- Merchant must have sufficient balance to issue the refund (contract does not force it)
- The original payment's on-chain record is permanent; the refund is its own separate record
- Partial refunds are natural — each refund is a separate transfer
sBTC vs. STX: does it matter?
The contract supports both tokens. From a settlement perspective they behave the same — both transfer atomically on the same block. The difference is economic:
- sBTC: pegged 1:1 to Bitcoin. Most merchants want this — they're effectively accepting Bitcoin without running a Lightning node or a Bitcoin-to-fiat off-ramp.
- STX: the native Stacks token. Useful for anyone in the Stacks ecosystem (e.g., selling services to other Stacks dApps) where transacting in STX avoids an extra swap.
Transaction fees (not the same as protocol fees)
There are two fees in play on every transaction:
- Protocol fee — sBTC Pay's cut. Paid in the same token as the payment (sBTC or STX). Split atomically from the payment amount.
- Transaction fee — the Stacks network fee paid to miners. Always in STX. Paid by whoever broadcasts the transaction (usually the customer for payments, merchant for refunds).
This means even if you want to accept sBTC-only, your wallet needs a small STX balance to pay the network fee when issuing refunds or administrative transactions.