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

  1. The taker's Bitcoin is locked in the 2-of-2 address.
  2. The maker locks the Monero.
  3. The maker redeems the Bitcoin.
  4. 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

1

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 .asc signature for every binary [8]

Download targets:

  • Windows: .exe installer
  • 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-bin AUR 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]

2

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]

3

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

  1. Install and verify eigenwallet using the signature check above
  2. Have a Monero destination, either the wallet built into the app or an external one
  3. 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]
  4. Clear roughly 28 hours in which the machine can be brought online again, for the reasons in the timelock section
  5. 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

  1. Locking the Bitcoin: the funds move into the 2-of-2 multisig address
  2. Maker locks the Monero
  3. Maker redeems the Bitcoin
  4. 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

  • Independent makers, each setting its own rate [2]
  • A public registry maintained by volunteers, shown in the app by default [7]
  • Rendezvous points that makers register with [7]
  • The docs note discovery is now mostly automatic [7]

Rate discovery

  • Compare the markup shown per offer [2]
  • Enable fiat prices in settings to see markups at all [2]
  • Larger amounts tend to get better rates, from around 0.003 BTC [2]
  • There is no single market spread, since every maker prices independently [6]

Becoming a maker

  • Run the ASB through the orchestrator [6]
  • Requires Monero inventory plus Bitcoin and Monero nodes [6]
  • Markup is set in the config, sample value 2% [6]
  • You carry the counterparty and uptime risk

Security Best Practices

🔐 Critical Security Rules

  1. Verify the signature before the first run. Every release binary has a matching .asc file [3]
  2. Check the Tor and node settings before the first swap, not after [10]
  3. Start small. Around 0.0003 BTC is enough to walk the whole path once [2]
  4. 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]
  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]
  6. 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

  • Reopen the app and resume the swap
  • The app drives the cancel and refund transactions itself
  • It needs to run for only a few minutes at some point inside the refund window, not continuously [1]
  • The command line binary swap ships in the same release, but the desktop app does not need it [8]

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]

Deposit withheld

  • Wait out the 30 minute, 3 block, release window first [5]
  • If it is withheld, contact the maker with the swap id
  • Use the project's official Discord or Matrix channels only [4]
  • Nobody legitimate will ask for a seed phrase [5]

⚠️ 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

  • Bitcoin block times set the floor on every timelock [1]
  • Liquidity depends on individual makers choosing to run a backend [6]
  • The privacy of the Monero leg still depends on which node the wallet talks to [10]

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

  1. Download eigenwallet from the project's release page and verify the .asc signature [3]
  2. Check the Tor and Monero node settings before depositing anything [10]
  3. Deposit only what is being swapped, from around 0.0003 BTC [2]
  4. Note the two deadlines: cancel at roughly 4 hours, refund window closing roughly 24 hours after that [1]
  5. Scale up only after a completed test swap

References

  1. eigenwallet Docs, Atomic Swap protocol explained: cancel, refund, punish and cooperative redeem
  2. eigenwallet Docs, How to make your first swap
  3. eigenwallet Docs, Installation and verifying release binaries
  4. eigenwallet Docs, Anti-spam deposit
  5. eigenwallet Docs, FAQ: anti-spam deposit
  6. eigenwallet Docs, An Overview of Becoming a Maker
  7. eigenwallet Docs, Maker discovery
  8. eigenwallet/core, release 4.13.3 assets and signatures
  9. eigenwallet/core, release signing key
  10. eigenwallet/core, default interface settings including Tor and node options
  11. eigenwallet/core, embedded Arti Tor client
  12. eigenwallet/core, Bitcoin transaction modules: lock, redeem, cancel, refund, punish
  13. Hoenisch and Soriano del Pino, Atomic Swaps between Bitcoin and Monero, arXiv 2101.12332
  14. comit-network/xmr-btc-swap, README unmaintained caution and protocol reference
  15. unstoppableswap-gui, archived repository
  16. farcaster-project/farcaster-node, release v0.8.4 of 2023-01-16
  17. Haveno, Haveno is ready for mainnet
  18. LocalMonero, LocalMonero and AgoraDesk will be winding down operations
  19. Bisq Wiki, Trading fees
  20. Bisq, Where Bisq Stands After the May 1, 2026 Security Incident
  21. eigenwallet, UnstoppableSwap is now eigenwallet