SatsBridge

SatsBridge — peer-to-peer bitcoin on Telegram

How a trade works, step by step

SatsBridge is a Telegram bot for trading bitcoin peer-to-peer, with the coins held in a 2-of-3 multisig escrow. This is the long version of a trade: every stage, who acts, what the clock is, and what happens when somebody stops responding.

§ 01
Setup

Before your first trade

Two things have to exist before you can fund anything: a key we can build escrow addresses from, and an address to pay you out to.

On the default setup the bot generates a recovery phrase, shows it to you once, and then discards it. What stays on our server is an account public key, which is enough to derive escrow addresses and nothing else. Write the phrase down. We cannot reissue it.

You will also pick a signing mode. External signing hands you a PSBT to sign in Sparrow, Nunchuk, or any wallet that speaks the format. Assisted signing keeps the seed on our server encrypted under a passphrase only you know, which is easier and less safe.

§ 02
The request

Taking an offer is a request, not an execution

When you take someone's offer, nothing is locked yet. The maker gets a request and can accept it, decline it with a reason, or reply and decide later. Replying opens a private thread between the two of you.

A request expires after six hours if the maker never answers, and you are told when it lapses rather than being left to guess.

Starting the trade is a two-sided handshake: one of you proposes, the other agrees. That exists so a maker who said "back in an hour" cannot be put on a funding clock while they are away. The price freezes at the moment you both agree, not when the offer was posted.

§ 03
Funding

Both sides fund the escrow

A fresh 2-of-3 address is derived for the trade. Keys are never reused across trades.

The seller sends the bitcoin being sold plus their security bond. The buyer sends a bond only. The bond is 15% of the trade by default; a maker can set it lower on their own offer, or waive it entirely for a deposit-free trade.

You get two hours to fund. If coins are already in escrow when the window runs out, nothing is auto-cancelled — it escalates to an arbitrator instead, because silently unwinding a half-funded trade is how people lose money.

§ 04
Payment

The fiat leg, which never touches us

Once both deposits confirm, the seller's payment details are revealed to the buyer — and only then. The buyer pays them directly and marks the payment sent.

Each rail carries its own settlement window, which is how long the buyer has before the trade can be disputed. UPI is four hours. Cash in person is twenty-four. The window reflects how fast that rail actually settles, not a number we picked for convenience.

Trade ceilings scale down with chargeback risk. Irreversible and low-risk rails carry the full limit, medium-risk rails half of it, and high-risk rails a quarter.

§ 05
Release

Releasing the coins

The seller confirms the money arrived. The payout transaction is built, we add our signature, and the seller adds theirs. Two of three, and it broadcasts.

Before you sign, the payout screen shows the destination addresses and amounts read back out of the actual transaction rather than from our database. If a number looks wrong, refuse and open a dispute. That check is the whole reason the screen exists.

Commission and the mining fee come out of the payout itself, so there is no separate invoice and nothing to settle afterwards.

§ 06
Disputes

When it goes wrong

Either side can open a dispute. The coins stay locked. Someone reads the trade timeline, the chat, and the on-chain state, then signs a settlement with whichever party the ruling favours. Rulings are recorded with a written justification.

Bonds are what give that teeth. A party who behaves badly can have their bond awarded against them, so the cost of stalling or lying is not zero.

If the price feed goes stale at any point, trading halts rather than pricing a trade off a number nobody can stand behind. If mining fees spike high enough that a payout would leave a dust output, settlement refuses rather than broadcasting something broken.