The Perfect BTC/USD Swap. Now on Bitcoin.
BTC/USD is now a market that clears on Bitcoin L1, using USDT or USDC.
Selling Bitcoin has always meant leaving Bitcoin.
Not in spirit, in mechanics. To turn BTC into dollars you sent it to an exchange, or bridged it onto a chain where the stablecoins already live. Both are the same move wearing different clothes: for the time that trade takes, someone else is holding your Bitcoin, and the price you get is the price they decide to show you.
That trade now happens on Bitcoin L1. The frUSD/frBTC pool is live on mainnet, it prices BTC against USDT and USDC, and it settles in a Bitcoin transaction you sign yourself.
The difference is that there is no account to open, no venue holding your balance, and no withdrawal queue: at every step you are holding the assets in your own wallet.
Screens below are from the live app, trading against mainnet.
A dollar price, quoted by a pool and not a desk
The market is a CryptoSwap pool at alkane id 4:1778. On one side is frUSD, the dollar that settles on Bitcoin. On the other is frBTC, always redeemable 1:1 with native BTC. Both are ordinary Alkanes assets, so the market between them is an ordinary Bitcoin contract, and the price it quotes is the price it will actually fill at. For the end-user, this part doesn't even matter, they just see BTC and USDT or USDC.
The chart reads BTC/USD off that pool, and the header carries the pool's own price rather than a feed borrowed from somewhere else. The number you trade against is produced by the pool itself.
The trade is a swap, on the screen you already use
Trading BTC for dollars looks like every other swap on SUBFROST, because it is one. Pick BTC on the send side, pick USDT, USDC, or frUSD on the receive side, type an amount. The panel quotes you before you commit, and the number it shows is what your size gets, fee included, not a headline rate you have to discount in your head.
Confirm, and your wallet asks you to sign one Bitcoin transaction. That is the entire commitment: no account to open, no deposit address to fund first, no order sitting with a venue until it decides to fill it. The trade is the transaction.
USDT in, BTC out, in one instruction
The more interesting direction is the one that starts on Ethereum.
Deposit USDT or USDC into the SUBFROST bridge vault, and you can ask for the result to arrive as native BTC rather than as a stablecoin on Bitcoin. What happens underneath is three hops: your deposit is minted as frUSD, swapped into frBTC through this pool, then unwrapped into BTC.
On Ethereum your wallet asks for two calls, an approval for exactly the amount, and then the deposit itself. Everything is automated after that, and the app tracks it hop-by-hop rather than leaving you guessing where your assets are.
$100 in USDT or USDC becomes BTC in a Bitcoin wallet you control, and once the deposit confirms there is nothing further for you to do. The reverse works the same way: swap frUSD on Bitcoin to USDC or USDT on Ethereum, with the same tracker following it across.
Fixing traditional UX: One signature, or it does not ship
Selling BTC for dollars crosses three contracts with one signature. Wrap the BTC into frBTC, swap the frBTC through the pool to frUSD, and turn the frUSD into USDT or USDC on Ethereum.
Until today, a bridge would ask you to authorize each of these steps one at a time, or the platform is centralized. That is a bad product: each extra confirmation is a place where a user stops, or approves something they did not read, or walks away with the assets halfway across the bridge.
**A route that starts on Bitcoin can cross as many contracts as it needs to, and it still only requires one Bitcoin signature. **Coming from Bitcoin, your intent is compiled into that transaction before you ever see the confirmation dialog.
Coming from Ethereum, the approve and deposit are the two calls your wallet asks for, and the deposit already carries the whole Bitcoin outcome: the destination, the split, the price. Nothing after it comes back to ask you anything.
That is also why the failure modes look the way they do. When a hop cannot execute, it does not stall holding your money and it does not come back for another signature. It pays out and tells you which asset you got. Every route is built so that a failed hop leaves you holding something spendable in your wallet, rather than a balance stranded between two chains.
What it costs
Two fees do the work, and both are displayed before you commit.
The bridge takes a flat $1.99 plus 0.10% of the remainder, on the way in and on the way out. The flat part is what pays for the Ethereum side, so it is the same whether you move a $100 or $10,000, which makes one larger trip meaningfully cheaper than several small ones.
The pool then charges its own swap fee, which moves with how balanced your trade leaves the pool: 0.2% when the two sides come out even, ramping up to 0.8% when a trade pushes the reserves out of balance. That is the CryptoSwap design doing what it is for, and it means the trade that restores balance is the cheap one. A route that wraps or unwraps BTC also pays frBTC's own 0.1% fee, and any Bitcoin transaction pays the miners. Every one of those is already inside the quote you are shown.
Making it easy for you when you exit
Across every common bridge solution today there is bad UX that catches people at the very end: you land your USDT at a fresh Ethereum address and discover you have no ETH to move it. The tokens are yours and they are stuck.
We have fixed this issue by enabling users to split a portion of their proceeds into the chain's token to pay for gas. Send most of it out as a stablecoin and take a small slice as native ETH, and the address you arrive at can pay its own gas from the first block.
The split names the floor it refuses to fill below, and a conversion it cannot execute pays out as a stablecoin instead of failing the whole burn (the split part doesn't happen).
What is live today
The pool is live on mainnet and trading. Both bridge directions are live: USDC and USDT in, USDC and USDT out, with the optional BTC split on the way in and the optional ETH split on the way out. The chart, the quote, the settlement tracker and the fee breakdown are in the app now, and the same pool is readable from the command line if you would rather measure it yourself before trading.
BTC has had a price against the dollar for fifteen years, quoted everywhere except on Bitcoin. Now the quote and the settlement are the same event, on the same chain, signed by the same key.
Trade it at app.subfrost.io, or read BTCUSD Pool documentation first.