Last updated: 2026-08-05. Tooling, install paths and timelock behaviour re-verified against the project's own documentation on that date.
⚡ What Are Atomic Swaps?
An atomic swap trades Bitcoin for Monero directly between two peers. No exchange account, no identity document, no custodian holding either side of the trade. Each side keeps its own keys the whole way through. [1]
"Atomic" describes the cryptography, not a money-back guarantee. A swap either completes or is cancelled, and a cancelled swap has to be refunded inside a fixed window. Miss that window and the Bitcoin is gone. The timelocks are set out below. [1]
⚠️ The software was renamed
This guide previously covered UnstoppableSwap. The project renamed itself to eigenwallet: unstoppableswap.net now resolves to eigenwallet.org, development moved from UnstoppableSwap/core to eigenwallet/core, and the old unstoppableswap-gui repository is archived with its last push on 2024-11-15. Any guide still pointing at the old GUI repository is pointing at dead code. [15] [21]
Why Atomic Swaps Matter
The Exchange Problem
- Centralized exchanges: identity verification ties a legal name to every deposit and withdrawal address
- Instant exchangers: custodial by construction, since the operator holds the coins between the two legs
- Face-to-face P2P trades: either trust the counterparty or trust an escrow agent
- Mixers: a recurring enforcement target, which makes them an unreliable long-term tool
What the Protocol Actually Provides
- No third party holds both sides of the trade at any point [1]
- No account, no personal information, no deposit address controlled by a company [2]
- Every maker sets its own rate, and the taker picks which offer to accept [2]
⚠️ Current Limitations
- One direction. The desktop app always runs as the taker, selling Bitcoin for the maker's Monero. XMR to BTC is not offered. [1] The team behind the original implementation wrote that a protocol where Monero moves first was blocked on advances in Monero itself. [14]
- Liquidity is per maker. There is no order book, only individual makers with their own minimums, maximums and markups. [2]
- Refunds are time-limited. See the timelock section below. [1]
- Some makers hold back an anti-spam deposit on refunded swaps, so a refund is not always 100%. [4]
- Desktop only. There are no precompiled binaries for arm64 Linux. [3]
How the Swap Actually Works
Roles
The protocol splits each swap into two roles. The taker holds Bitcoin and wants Monero. The maker holds Monero and sells it for Bitcoin. The eigenwallet desktop app always runs as the taker. [1]
It is not an HTLC
BTC↔XMR swaps are widely described as Hash Time-Locked Contracts. That description is wrong, and this page carried it until this revision. An HTLC needs both chains to enforce "reveal the preimage before block X". Monero has no contract scripting, so nothing on the Monero side can enforce anything of the kind.
The protocol implemented here uses adaptor signatures on the Bitcoin side instead. The published paper describes it as applying "adaptor signatures on Bitcoin to procure atomic swaps between Monero and Bitcoin", and the original implementation states that it builds section 3 of that paper. [13] [14]
What holds the money
- Bitcoin side: the taker's Bitcoin is locked into a shared output that requires signatures from both parties, a 2-of-2 multisig. [2] [13]
- Monero side: the maker's Monero goes to an output whose spend key is the sum of one secret held by each party. Neither party alone can spend it. [13]
The atomicity comes from tying those two facts together. Spending the Bitcoin publishes a signature, and that signature carries the missing half of the Monero spend key. Whoever takes one side hands over the other.
The Bitcoin transactions
| Transaction | Effect | Who publishes it | When |
|---|---|---|---|
| Lock | Moves the taker's Bitcoin into the 2-of-2 output | Taker | At the start of the swap |
| Redeem | Pays the locked Bitcoin to the maker, and reveals the maker's Monero key share on chain | Maker | Before the swap is cancelled |
| Cancel | Ends the normal path. It does not return any Bitcoin | Either party | After the cancel timelock, 24 Bitcoin confirmations, roughly 4 hours |
| Refund | Returns the Bitcoin to the taker, and lets the maker recover the Monero | Taker only | After the cancel transaction confirms, inside the 144-block window |
| Punish | Pays the locked Bitcoin to the maker | Maker | Once the punish timelock, 144 Bitcoin blocks, roughly 24 hours, has expired |
All five are constructed and signed during swap setup, which is why either side can publish the cancel transaction later without cooperation. [1] The current codebase adds further Bitcoin transactions for the anti-spam deposit mechanism and for early refunds. [12]
The completed path, in order
- The taker's Bitcoin is locked in the 2-of-2 address.
- The maker locks the Monero.
- The maker redeems the Bitcoin.
- The taker redeems the Monero using a key revealed in step 3. [2]
On timings, the documentation says the Bitcoin lock transaction usually takes around 10 minutes to confirm, with the Monero lock confirming about 2 minutes after that. [2]
Atomic Swap Tools
eigenwallet (the maintained option)
Desktop wallet and swap client for BTC to XMR
What it is:
- A Monero and Bitcoin wallet with an atomic swap client built in [1]
- Formerly UnstoppableSwap, live in some form for over three years [21]
- Ships an in-process Tor client, so no separate Tor daemon is required [11]
- Release 4.13.3 was published on 2026-08-05, with a detached
.ascsignature for every binary [8]
Download targets:
- Windows:
.exeinstaller - macOS:
.dmg, separate builds for Apple silicon and Intel - Linux x86_64: AppImage or
.deb. The documentation warns the AppImage may fail on distributions older than Ubuntu 24, and points to the Flatpak instead - Flatpak:
org.eigenwallet.app - Arch: the community-maintained
eigenwallet-binAUR package, which the project explicitly does not vouch for - Linux arm64: no precompiled binaries [3]
Install and verify (Linux AppImage):
# Import the project signing key
wget https://raw.githubusercontent.com/eigenwallet/core/master/utils/gpg_keys/binarybaron_and_einliterflasche.asc
gpg --import binarybaron_and_einliterflasche.asc
# Download a binary and its detached signature
# The signature URL is the binary URL with .asc appended
wget https://github.com/eigenwallet/core/releases/download/4.13.3/eigenwallet_4.13.3_amd64.AppImage
wget https://github.com/eigenwallet/core/releases/download/4.13.3/eigenwallet_4.13.3_amd64.AppImage.asc
# Verify BEFORE running anything
gpg --verify eigenwallet_4.13.3_amd64.AppImage.asc eigenwallet_4.13.3_amd64.AppImage
chmod +x eigenwallet_4.13.3_amd64.AppImage
./eigenwallet_4.13.3_amd64.AppImage Install via Flatpak:
flatpak remote-add --if-not-exists eigenwallet https://eigenwallet.github.io/core/eigenwallet.flatpakrepo
flatpak install flathub org.gnome.Platform//47
flatpak install eigenwallet org.eigenwallet.app
flatpak run org.eigenwallet.app A good verification prints a "Good signature" line naming the project key. Anything else means stop. [3] [9]
Tools this guide no longer recommends
comit-network/xmr-btc-swap
The original implementation. Its README now opens with a caution that the repository is unmaintained and that eigenwallet should be used instead. It also states that the fork "has introduced network-level breaking changes, making it incompatible with peers running this repository", so a node built from it cannot find anyone to swap with. The old releases/download/latest/asb path returns 404. [14]
farcaster-project/farcaster-node
Dormant. The most recent release, v0.8.4, is dated 2023-01-16 and the last commit to the default branch landed on 2024-08-11. Not a sensible place to point mainnet funds. [16]
UnstoppableSwap/unstoppableswap-gui
Archived, last push 2024-11-15, superseded by the Tauri-based app in eigenwallet/core. [15]
Running a maker (advanced)
Makers run the Automated Swap Backend, asb, which buys Bitcoin and sells Monero for a markup. The project ships an orchestrator binary that runs a wizard and writes a Docker Compose environment containing the ASB, a controller REPL, electrs, bitcoind and monerod. [6]
# Place the orchestrator binary in an empty directory and run the wizard
./orchestrator
# From the generated directory
docker compose up -d --build
docker compose attach asb-controller The markup lives in the maker section of the generated config.toml. The documented sample configuration uses ask_spread = 0.02, meaning 2% over the mean of the configured price tickers, but each maker chooses its own value. [6]
Being a maker means holding Monero inventory, exposing a service, and carrying the operational risk of both chains. It is not a passive income setup.
Complete Swap Tutorial
Preparation
- Install and verify eigenwallet using the signature check above
- Have a Monero destination, either the wallet built into the app or an external one
- Have Bitcoin ready. The documentation puts the practical minimum at around 0.0003 BTC, and notes rates are usually better from around 0.003 BTC [2]
- Clear roughly 28 hours in which the machine can be brought online again, for the reasons in the timelock section
- Back up the app's seed phrase. Its Bitcoin wallet is self-custodial [2]
⚠️ The app swaps the whole balance
The documentation is explicit: "The app will swap all available Bitcoin, so only deposit as much as you want to swap." The deposit goes into eigenwallet's own internal Bitcoin wallet first, not straight to a counterparty. Deposit the swap amount, not the contents of your savings. [2]
Making the swap
Step 1: Review the offers
On the Swap page, open the offer list. Each offer comes from a different maker and differs in minimum amount, maximum amount, markup and anti-spam deposit. A maker charging a 3% markup is quoting 3% above the rate on centralized exchanges. Lower is better. [2]
Step 2: Deposit Bitcoin
Send the amount to be swapped to the address shown at the top of the page. That address belongs to the app's internal self-custodial wallet. [2]
Step 3: Select and confirm
Offers requiring more Bitcoin than is deposited stay greyed out. After selecting one there are a few minutes to confirm, and the confirmation screen shows the Bitcoin amount sent, the Monero amount received, the final rate, Bitcoin network fees and the anti-spam lock ratio. [2]
Step 4: The four stages
- Locking the Bitcoin: the funds move into the 2-of-2 multisig address
- Maker locks the Monero
- Maker redeems the Bitcoin
- Redeeming the Monero, using the key revealed in the previous stage [2]
💡 Anti-spam deposits
Some makers require an anti-spam deposit. It costs nothing on a completed swap: the mechanism only activates on a refund, where the taker receives a partial refund at first. In the documentation's own framing, "an anti-spam deposit of 2% means you are guaranteed a 98% refund". [2]
That slice can be reclaimed after 30 minutes, which is 3 Bitcoin blocks, and during that window the maker can exercise the option to withhold it. It sits in a shared lock rather than going to the maker, so a maker can only return it, never spend it. [5]
Tor and Node Settings
The app embeds an Arti Tor client rather than requiring a system Tor daemon. [11] The defaults shipped in the interface are worth checking before a first swap, because they are not uniformly private: [10]
- Tor for peer-to-peer connections: on by default
- Routing Monero wallet traffic through Tor: off by default
- Monero RPC pool: on by default, so Monero queries go to shared remote nodes rather than a node under your control
Those last two defaults are the ones that leak. A remote node sees which addresses a wallet asks about, and without Monero-side Tor it also sees the IP asking. Turning on Monero-over-Tor, or pointing the wallet at your own node, closes that gap. [10]
💡 Related
Running your own Monero node removes the remote-node dependency entirely. Makers can also register onion services so their backend is reachable without exposing a server IP. [6]
Finding Liquidity
Where offers come from
Rate discovery
Security Best Practices
🔐 Critical Security Rules
- Verify the signature before the first run. Every release binary has a matching
.ascfile [3] - Check the Tor and node settings before the first swap, not after [10]
- Start small. Around 0.0003 BTC is enough to walk the whole path once [2]
- Keep the swap id. It is what a maker needs to release a withheld anti-spam deposit, so record it rather than discarding it [5]
- Ignore private "support" messages. The project warns that scammers pose as support and that the developers never ask anyone to join a separate support server or to reveal a seed phrase or private key [4]
- Deposit only the swap amount. The app swaps the entire internal balance [2]
Common Attacks and Defenses
Time Pressure
Risk: the whole punish design is time-based. A swap begun before a long trip is a swap that can pass its refund window unattended.
Defense: only start swaps that can be revisited inside the cancel plus refund period, roughly 28 hours in total. [1]
Fee Spikes
Risk: Bitcoin fee estimation that undershoots real mempool conditions delays confirmations and pushes a swap toward the cancel path. The ASB even exposes a fee multiplier setting as a margin against exactly that. [6]
Defense: check mempool conditions before starting, and avoid starting during a fee spike.
Node-Level Observation
Risk: shared remote nodes see the queries a wallet makes, and the default Monero configuration uses a pool of them. [10]
Defense: run your own Bitcoin and Monero nodes, or at minimum enable Monero-over-Tor.
When Things Go Wrong
Swap stuck
Already punished
- The Bitcoin is gone, but the Monero may still be recoverable
- Resuming the swap sends the maker a cooperative redeem request automatically
- Most makers cooperate, since the alternative is Monero locked forever
- There is no deadline, but the odds worsen with time [1]
⚠️ You can lose your Bitcoin if you walk away
Atomic swaps are atomic in the sense that a swap either completes or is cancelled. That is not the same as a guaranteed refund, and this page previously said it was. Per the maintainer's own documentation, there are two timelocks: a cancel timelock at 24 Bitcoin confirmations, roughly 4 hours, and a punish timelock at 144 Bitcoin blocks, roughly 24 hours. Miss the refund window and, in their words, "you will lose your Bitcoin" and "you cannot refund the Bitcoin anymore. It has been taken by the maker." Some makers voluntarily help recover funds afterwards; the documentation says plainly, "do not rely on this." The practical consequence is that the application has to run again inside that window. The documentation states it needs to run for only a few minutes at any point during the refund window rather than continuously, but if it never runs, nothing refunds the Bitcoin on your behalf. [1]
Alternative Privacy Methods
Other Ways to Get Monero Without an Exchange Account
| Method | What it is | Cost | Status, checked 2026-08-05 |
|---|---|---|---|
| eigenwallet atomic swaps | BTC to XMR, peer to peer, no account | Per-offer maker markup plus Bitcoin network fees | Active, release 4.13.3 published 2026-08-05 [8] |
| Haveno | Non-custodial P2P exchange platform built on Monero and Tor | Set by whichever network is joined | Mainnet use goes through third-party installers and networks, and the project states it endorses none of them [17] |
| Bisq | P2P exchange with an XMR market | Combined BTC trading fee 1.3%, being 0.15% maker and 1.15% taker, or roughly 0.65% paid in BSQ [19] | Running, but XMR auto-confirmation stays disabled pending a security audit after the May 2026 incident [20] |
| Mining Monero | Earning XMR directly from the network | Hardware and electricity | Active |
| LocalMonero | Former P2P marketplace | Not applicable | Dead. New trades were disabled on 2024-05-14 and the site was scheduled for takedown after 2024-11-07 [18] |
⚠️ LocalMonero announced its wind-down in May 2024 and the domain now serves only that notice. Sites trading on the name are not the original operator. [18]
What Is Actually Changing
Open work
- The reverse direction: XMR to BTC is still not offered. The app runs only as the taker selling Bitcoin [1], and the original implementation's authors described the Monero-first protocol as blocked on Monero-side advances [14]
- Refund semantics moved: takers were previously always guaranteed a full refund. Anti-spam deposits replaced that guarantee with a partial one, because unconditional free refunds let takers use swaps as a free option and let attackers tie up maker reserves [4]
- Maker discovery is being reworked, and the documentation page covering it is marked out of date [7]
Constraints that are not going away
Where This Leaves You
An atomic swap converts a permanently traceable Bitcoin history into a Monero balance without an intermediary. That is a genuine capability and there is no equivalent on a centralized exchange, where the swap and the identity check arrive together.
It costs more than an exchange, it is slower, and it demands attention at two specific points: verifying the binary before running it, and coming back inside the refund window if the swap does not complete. Those are not optional extras. The second one is the difference between a refund and a loss.
Small first swap, own nodes where possible, and a clear understanding of the timelocks beats a large first attempt every time.
Start Swapping
- Download eigenwallet from the project's release page and verify the
.ascsignature [3] - Check the Tor and Monero node settings before depositing anything [10]
- Deposit only what is being swapped, from around 0.0003 BTC [2]
- Note the two deadlines: cancel at roughly 4 hours, refund window closing roughly 24 hours after that [1]
- Scale up only after a completed test swap
References
- eigenwallet Docs, Atomic Swap protocol explained: cancel, refund, punish and cooperative redeem
- eigenwallet Docs, How to make your first swap
- eigenwallet Docs, Installation and verifying release binaries
- eigenwallet Docs, Anti-spam deposit
- eigenwallet Docs, FAQ: anti-spam deposit
- eigenwallet Docs, An Overview of Becoming a Maker
- eigenwallet Docs, Maker discovery
- eigenwallet/core, release 4.13.3 assets and signatures
- eigenwallet/core, release signing key
- eigenwallet/core, default interface settings including Tor and node options
- eigenwallet/core, embedded Arti Tor client
- eigenwallet/core, Bitcoin transaction modules: lock, redeem, cancel, refund, punish
- Hoenisch and Soriano del Pino, Atomic Swaps between Bitcoin and Monero, arXiv 2101.12332
- comit-network/xmr-btc-swap, README unmaintained caution and protocol reference
- unstoppableswap-gui, archived repository
- farcaster-project/farcaster-node, release v0.8.4 of 2023-01-16
- Haveno, Haveno is ready for mainnet
- LocalMonero, LocalMonero and AgoraDesk will be winding down operations
- Bisq Wiki, Trading fees
- Bisq, Where Bisq Stands After the May 1, 2026 Security Incident
- eigenwallet, UnstoppableSwap is now eigenwallet