Trustless Bitcoin UTXO ownership transfer. Two wallets swap equal-amount coins through adaptor-signature atomic settlement — no operator, no coordinator, no custody, ever.
A desktop, peer-to-peer protocol wallet. This site is an information and distribution channel only: downloads, checksums, signed parameter manifests, and the tester guide. Nothing key-touching runs here, and there is no web wallet.
SwitchBitcoin settles a two-party coin swap with a novel composition of well-understood primitives: MuSig2 (BIP 327) Taproot escrows, adaptor-signature atomic settlement, ordered refund timelocks, and baked-in fees — composed so that a funded swap always has exactly two exits: it completes, or it refunds. There is no third state, and no party who can hold your coins.
skt1… rendezvous ticket over any channel you like and connect
directly — that path publishes nothing, anywhere. Or find a stranger through
public Nostr relays over Tor (testnet):
relays carry only anonymous encrypted noise; the swap itself never touches a
relay. Either way there is no operator who can front-run, censor, or fail,
and nothing in the settlement path but the two wallets.Protocol lineage: v3.16 specification, unchanged (formerly developed under the internal codename "Swap Key"; current spec document: v18). Pinned, audited cryptography only — MuSig2, adaptor signatures, and nonces come from libsecp256k1 bindings; nothing curve-related is hand-rolled.
A swap needs two people. If you already know your counterparty, you hand them a ticket and you're done. If you don't, you have to find one — without a company in the middle doing the matching. Here is how that works, in plain terms.
One line of text, skt1…. It says where to call and proves you
reached the right person. Give it to a partner however you like — it is the
whole handshake.
To be found by a stranger, your wallet pins a sealed note to several public boards: "someone would like to swap this size." No name on it, a fresh single-use key signs each one, and it is posted through Tor.
When someone answers your note, the two wallets meet on a one-shot onion address created for that rendezvous and nothing else. Neither side learns the other's IP, and the boards never learn the address.
The part worth being precise about: the relays only ever carry the "want to meet?" notes. Everything after that — the negotiation, the escrows, the settlement — runs directly between the two wallets over Tor, through the same code the hand-delivered path uses. No transaction id, no escrow, no ticket, and no onion address is ever published to a relay; that one is enforced by a test that inspects every relay-bound byte of a complete swap.
If you already have a partner, trading a ticket directly publishes nothing,
anywhere — no note on any board, no proof-of-work, no public infrastructure
touched at all. That remains the lowest-metadata way to use SwitchBitcoin, it is
supported forever, and discovery is an addition to it, never a replacement.
swap --make-onion gives you the Tor rendezvous with a hand-delivered
ticket: no relays, no IP.
Mainnet is structurally impossible in this build — no configuration reaches it. That stays true until the external cryptographer review clears. Treat every coin this software touches as expendable test money.
A safety pre-commitment fix is deliberately deferred to the cryptographer review. Until it clears, convention-mismatched attempts refuse and close through the refund path — funds come back automatically at the timelock. A refunded swap is the safety system working.
This is a novel composition, and novel compositions are where sound primitives are most often assembled unsoundly. The scoped external cryptographer review is the gate to everything beyond testnet — it is not substitutable by internal analysis, and its packet is ready and waiting.
Tor transport and discovery have since been built and run live (2026-07-27). Still open and still named: corpus fuzzing under sanitizers (host limitation; a seven-surface hostile-input sweep ran interim), third-party watchtower delegation, enclave custody, and the public relay population that keeps discovery from starting unaided. None quietly dropped.
The settlement core is implemented in full as a Rust crate — 594 automated tests green in the default configuration, 643 with the Bitcoin Core backend, lint-clean in both — and the claims below are backed by on-chain evidence recorded in the repository's artifact log:
MuSig2 / BIP 327 Tor rendezvous Nostr discovery (testnet) Taproot escrows Adaptor signatures TRUC / v3 + P2A anchors CPFP congestion backstop Signed-manifest governance
Pre-alpha tester package — 0.1.0 (git 6e5585ee0, patch "-e"), Windows x86_64:
switchbitcoin-prealpha-0.1.0-6e5585ee0-windows-gnu.zip (~8.6 MB) ·
release page.
New in "-e": a maker that had an offer taken by someone who never showed up
used to give up entirely — one no-show ended the whole session, and the
anti-griefing cooldown that was supposed to handle it could never run. A maker now
charges the cooldown and keeps serving. Also corrected: when a maker cannot publish
its rendezvous answer to enough relays it said "the taker will not see it", which we
caught being false in a live drill — the taker often does see it, and then dials an
address the maker has already torn down. Nothing is ever leased or owed in that case,
on either side, and the message now says what actually happens.
Carried over from "-d": discovery — your wallet can find a counterparty on public
Nostr relays over Tor (testnet, and read guide §6 first: it needs a Tor binary you
fetch and verify yourself, and it deliberately refuses to start until you add a third
relay). Also: ephemeral onion services were being destroyed at the instant they
were created, so no onion rendezvous could ever have worked on an earlier build —
if one timed out on you, that was us, not your network. Two further fixes from the
same live run: the discovery scan loop no longer hammers relays ~60× harder than its
own flag claimed, and the rendezvous dial ladder is now sized for real onion
descriptor propagation.
It ships the two binaries (switchbitcoin-cli,
switchbitcoin-manifest), the tester guide, the bug-report template, the
current signed manifest, the local HTML wallet UI, and SHA256SUMS — built
by a release script that refuses to package any binary failing the full test gates or
carrying a test trust root (this cut: 594 green default, 643 with the Bitcoin Core
backend, lint-clean in both).
Source code:
github.com/abysal32-arch/switchbitcoin
(MIT). switchbitcoin-cli version embeds the git commit the binary was
built from — current release 6e5585ee0, tag
v0.1.0-prealpha-e — so the hash chain can be checked against the
repository and the release page, not just this site.
Zip SHA256 (verify before extracting):
Pre-alpha testers are hand-picked. Verify the zip hash and the
per-file SHA256SUMS before running anything, and check
switchbitcoin-cli version prints the pinned trust root below.
Every wallet build pins this BIP340 x-only public key at compile time. Signed
parameter manifests that do not verify against it are refused. Cross-check the key
your binary prints (switchbitcoin-cli version) against this page:
This is the SECOND operator key (generated 2026-07-16). The first
(fbb01df4…a2191e) was retired via the documented key-loss rotation;
manifests it signed no longer verify — by design.
Settlement parameters are distributed as signed constants — never wallet settings.
Each manifest is a 169-byte BIP340-signed envelope with a strictly-increasing version;
wallets refuse replays, downgrades, and anything the pinned key didn't sign. Everyone
in a test round runs the same version; ingest with
switchbitcoin-cli manifest ingest <file>.
| Version | Files | Status |
|---|---|---|
| v3 (current) | v3.manifest · v3-params.toml (readable source) | Signed 2026-07-20 by the current operator key. Id
e962918a44f7dd644985725e035675ba7f6d2db1e42c0e7066d5b3449ece0400.
Sole change vs v2: swap tier 0.01 → 0.001 tBTC (test tier for the
live testnet4 round — units fundable from ordinary faucet drips; the
production 0.01 tier returns as a future v4). |
| v2 (history) | v2.manifest · v2-params.toml | Signed 2026-07-16 by the current operator key. Id
cdda51a9…b011300e. Sole change vs v1: onboarding delay
1–2 h (testing period; the production-scale 24–72 h returns in the
first post-testing round). Tier superseded by v3 for the testing round. |
| v1 (history) | v1.manifest · v1-params.toml | Signed by the RETIRED first key — no longer verifies, kept as the governance-history record of the 2026-07-16 rotation. |
Even a compromised operator key cannot push parameters that violate the wallet-side ordering invariant — bounds are asserted signature-blind on every compose, ingest, and load.
Start with the Tester Guide — it takes you from nothing to a completed swap (own Bitcoin Core node required; there is deliberately no hosted RPC option) and keys every troubleshooting entry to the exact strings the wallet prints.
Bugs: run switchbitcoin-cli diag (redacted by construction — no seed,
mnemonic, passphrase, or RPC secrets), fill in the bug-report template shipped in the
package, and send it through the channel you were onboarded with. Pre-alpha testers
are hand-picked; there is no public tracker yet.