guide · 11 min read · 2026-05-15
How to swap native BTC to ETH without a CEX (2026 step-by-step)
You hold Bitcoin in self-custody. You want Ether on Arbitrum, Base or Ethereum mainnet. You refuse to deposit on a centralized exchange, hand over a passport scan, and re-link your face to your wallet on the way out. In 2026 there are three production paths that do this without a single sign-up — but only one moves real BTC out of your wallet and lands real ETH in your other wallet without a custodial wrapper. This guide is the click-by-click version of how to actually do it, and what fails.
Why not just use a CEX?
Centralized exchanges are still the path of least resistance for a BTC-to-ETH conversion, and for many users that's fine. The reasons people opt out of that path are practical, not ideological:
- The KYC trail is permanent.Once your wallet has received a withdrawal from a KYC'd account, every subsequent address you fund from that wallet is one chain-hop from your real identity. Chain analytics firms sell exactly this graph to law enforcement, lenders, and adversarial counterparties.
- Withdrawal freezes and tier limits. Coinbase, Binance, Kraken and OKX all freeze withdrawals during incidents, compliance reviews, or when their risk engines flag a deposit that came from a flagged address upstream of yours. Your funds are theirs to release.
- Counterparty risk.Mt. Gox, QuadrigaCX, FTX, Celsius, BlockFi, Voyager, Genesis. The list of exchanges that held customer assets and failed to return them is longer every year. "Not your keys, not your coins" is the most expensively-learned lesson in the asset class.
- Geographic restrictions.Russia, Iran, Cuba, parts of the United States, and an expanding set of jurisdictions are blocked from major exchanges. A non-custodial swap doesn't ask where you live.
- Tax-event surface. In some jurisdictions every CEX deposit and withdrawal is a reportable event, which means a BTC-to-ETH conversion via a CEX is two taxable transfers plus a sale, where the same conversion through a peer-to-peer or non-custodial swap is one disposal. Your accountant will tell you this matters; ask before assuming.
The three production routes in 2026
Three protocols actually solve this problem in production today. Each one fits a different shape of the same need.
THORChain — native BTC out, native ETH in
THORChain is the only system here that holds real BTC in pooled, cryptoeconomically-secured vaults run by an anonymous, bond-slashed validator set. You broadcast a Bitcoin transaction with a small OP_RETURN memo telling the network what asset you want and where to send it; ten to thirty minutes later, the equivalent ETH lands at your Ethereum address. No wrapper, no BitGo, no email confirmation.
LiFi via WBTC — fast, but introduces a custodian
LiFi is a meta-aggregator over dozens of EVM bridges and DEXes. For BTC-to-ETH it can't move real Bitcoin, because LiFi only routes assets that already live on EVM chains. The common workaround: wrap your BTC into WBTC at a custodian like BitGo, then let LiFi swap WBTC to ETH on Uniswap or Curve in seconds. Faster than THORChain, but the wrap step is a custody handoff. If BitGo gets compromised, paused, or pressured by regulators, your WBTC redemption is at their discretion.
Relay — only useful if your BTC is already on EVM
Relay is an intent / solver network that excels at L2-to-L2 stablecoin moves. For native Bitcoin in a Bitcoin wallet, Relay is not the right tool — it has no native BTC inbound. If you already hold WBTC on Ethereum, BTC.b on Avalanche, or cbBTC on Base, Relay can swap that to ETH on another chain in seconds. For a starting balance of native BTC sitting in Sparrow, skip Relay and use one of the other two.
Quick comparison
- Speed. Relay (seconds) > LiFi (5-10 min once you have WBTC) > THORChain (15-30 min total including BTC confirmations).
- Trust assumptions. THORChain (validator bond slashing, no wrapper) > Relay (solver inventory, no wrapper if assets already on EVM) > LiFi-via-WBTC (BitGo custody on the wrap, then DEX/bridge risk).
- Total fee for ~$5K trade. THORChain typically 30-60 bps all-in. LiFi 30-100 bps depending on the bridge it picks. Relay 10-30 bps.
- Native BTC support. THORChain only.
- Liquidity ceiling. THORChain pools are finite (typically $30-80M per asset in 2026); LiFi inherits the depth of the underlying bridges and DEXes; Relay depends on solver inventory at the moment of quote.
For the rest of this guide, the headline route is THORChain — it's the one almost everyone arrives here looking for, and it's the only one that preserves Bitcoin self-custody at both ends. The LiFi-via-WBTC variant is at the bottom for users who'd rather accept a custody hop in exchange for speed.
Step-by-step: BTC to ETH on Arbitrum via THORChain
This is the route. Read the whole sequence before you send anything; the failure modes at the bottom are unforgiving and a misformatted memo is the most common way users strand funds.
Step 1: prepare a self-custody BTC wallet that supports OP_RETURN
THORChain identifies what you want by reading a small data field (OP_RETURN) attached to your inbound Bitcoin transaction. Your wallet must let you set this field.
- Sparrow (desktop, recommended). Full PSBT support, hardware-wallet integration, an explicit "Add OP_RETURN output" field in the send dialog. The least-painful option for one-off swaps.
- BlueWallet (mobile). Has a built-in THORChain swap flow that constructs the memo for you. Easier on a phone; less control over the raw transaction.
- Electrum (desktop). Supports
OP_RETURNvia the "Tools → Pay to many" or coin-control advanced fields. More fiddly than Sparrow but works. - Bitcoin Core. Full control, raw transaction building, no UI hand-holding. For users who already know what
createrawtransactiondoes.
What does not work:exchange-custody balances (Coinbase, Binance, Kraken), most browser-extension wallets that wrap an exchange backend, and any custodian-managed BTC. Their outbound transactions don't carry custom OP_RETURN data, and even if they did the wallet UI typically strips it. If you send from these, your BTC will arrive at the THORChain vault, the swap will not fire because the memo is absent, and recovery becomes a manual back-and-forth with the exchange's support team. Sparrow or BlueWallet first.
Verify your wallet exposes the field before sending real funds. Build a draft transaction with a tiny OP_RETURN payload and confirm the wallet preview shows the data output. If you can't see it in the preview, it isn't being broadcast.
Step 2: get the inbound vault address and construct the memo
THORChain's vaults are run by a rotating set of validators. The deposit address is not static. Fetch it fresh, right before you send, from one of:
- The Ropil swap interface — connect or paste your Ethereum address, select BTC as source and ETH on your destination chain, and the widget surfaces the current inbound address along with a fully-constructed memo.
- An open-source THORChain client like Asgardex or THORSwap, which call the same THORNode API.
- The
/inbound_addressesendpoint of any public THORNode, returned as JSON. The vault for each chain is theaddressfield of the matching entry; verify thehaltedflag isfalsebefore using it.
The memo for a market swap follows this format:
=:ASSET:DESTADDR:LIM:AFFILIATE:FEE
For BTC to ETH on Ethereum mainnet, with a 1% slippage tolerance and no affiliate, that becomes:
=:ETH.ETH:0xYourEthAddress:0/1/0
Field by field:
=— the function.=is a market swap;SWAPandsare accepted as legacy aliases. For a limit-price swap that refunds if the price moves, the function is=<.ETH.ETH— the destination asset. Format isCHAIN.SYMBOL. THORChain accepts shortened notation (e/ETH) to keep the memo under the 80-byteOP_RETURNlimit; for ETH-on-Ethereum the full form fits comfortably.0xYourEthAddress— your Ethereum destination address, in standard EVM format. THORNames work here too; if you registered one, you can use the name in place of the hex address.0/1/0— theLIM/INTERVAL/QUANTITYtriple.0for LIM means "no minimum, accept the market price"; the other two zeros disable streaming-swap intervals. For a minimum-output swap, set LIM to the minimum acceptable output in 1e8 (eight-decimal) format.- AFFILIATE(optional) — a registered THORName that earns a kickback on the swap. Ropil's THORName is
ropil; we set this for swaps routed through our interface, and the affiliate fee funds infrastructure costs. You can omit it. - FEE (optional) — affiliate fee in basis points, 0-1000. Ignored if AFFILIATE is empty.
For ETH on Arbitrum specifically, you don't use this route directly — THORChain doesn't hold ETH on Arbitrum natively. The standard pattern is: swap BTC to ETH on Ethereum mainnet via THORChain, then bridge ETH to Arbitrum via the canonical Arbitrum bridge or a fast-bridge like Hop or Across. The Ropil widget chains the two for you and shows the combined cost.
Step 3: send the BTC with the memo embedded
In Sparrow: open a new send, paste the inbound vault address, enter the BTC amount, click "Add OP_RETURN", paste the full memo string, set a fee rate appropriate for the current mempool (sat/vB shown live in the wallet), preview the transaction, double-check the data output is present, and broadcast.
In BlueWallet's built-in swap: select THORChain, enter the destination address, the wallet builds and broadcasts the memo for you. Verify the memo string in the confirmation screen matches the format above; this is the single moment to catch a bug.
Two operational warnings before you click broadcast:
- The vault address rotates.Validator churn re-derives vault addresses periodically. An address you copied an hour ago may no longer be the active inbound. If you fetched the address during this session, fetch it again right before signing — and never reuse a vault address from a bookmark, screenshot, or guide. A wrong-vault deposit lands in nobody's wallet and the recovery path is slow.
- If the memo is absent or unparseable, the vault still receives your BTC. The protocol attempts to refund the sender in this case, but it's manual, prioritised low, and can take 24-72 hours or longer if the attempted refund itself fails. The defensive habit: paste the memo, then re-read it character by character before signing.
Step 4: wait for confirmations and swap execution
Once broadcast, the timeline is roughly:
- 0-15 min: Your transaction sits in the Bitcoin mempool, waiting for inclusion in a block. THORChain requires a small number of confirmations (typically 1-2 for modest amounts, more for very large swaps) before it acts.
- 15-25 min:THORChain's observer set registers the inbound, parses the memo, computes the swap at the live pool price, and queues the outbound transaction.
- 25-30 min: The outbound ETH transaction fires from the THORChain Ethereum vault to your destination address. You can track it on thorchain.net or any THORChain explorer using your inbound BTC tx hash.
If the swap takes materially longer (say, more than an hour after confirmation), check the THORChain network status — pools occasionally halt for upgrades or after liquidity events, and queued swaps wait until the halt clears.
Step 5: ETH arrives
The outbound transaction lands in your Ethereum wallet. You did not authenticate to anyone, you did not deposit on an exchange, and the BTC-side and ETH-side wallets share no relationship in any KYC database. The on-chain link from your BTC sender to your ETH receiver passes through THORChain's vaults, which an analytics firm can trace, but neither end is tied to your real identity through a sign-up event.
Step-by-step: BTC to ETH via LiFi (when speed beats purity)
This route assumes you're willing to accept a wrapping step. Two variants:
(a) You already hold WBTC, BTC.b, or cbBTC on an EVM chain. Easy: visit ropil.xyz, connect your wallet (Rabby, MetaMask, or any standard EVM wallet), select your wrapped-BTC asset on its current chain as the source, ETH on your destination chain as the target, and the LiFi route resolves in seconds. Sign one transaction in your wallet; the swap and bridge complete in 5-10 minutes typical. Total cost is the LiFi route fee (typically 0.1-0.3% all-in for liquid pairs) plus gas on the source and destination chains.
(b) You hold native BTC and want speed over self-custody purity.Wrap to WBTC at a custodian — BitGo is the dominant issuer — then run variant (a). Wrapping requires you to use a CeFi-style wrap service (a centralised counterparty mints WBTC against your custodial BTC deposit). The cleanest on-chain wrap UIs are exchange-style and re-introduce the KYC and counterparty risk you're probably here to avoid. If you've decided to take that trade-off anyway, the speed advantage over THORChain is real: 5-10 minutes vs 25-30 minutes, no OP_RETURN footgun, no vault rotation. For routine sub-$1K conversions some users prefer this; the decision is yours.
Common gotchas
The failure modes for this kind of swap are concentrated in a few specific places. None of them are subtle once you know them; all of them are catastrophic if you don't.
Wrong, dropped, or stripped memo
The single most common way users strand funds. The memo is a free-form string and any error — a typo in the destination address, the wrong chain identifier, an extra space, the field silently truncated to fit OP_RETURN's 80-byte limit — and the swap doesn't fire. Triple-check the memo in the wallet's preview screen, not just at the moment of paste. If the wallet's preview doesn't show OP_RETURNas a separate output, the data isn't being broadcast.
Slippage on volatile pairs
BTC and ETH are correlated but not pegged, and the cross-rate moves several percent in a normal day. THORChain quotes are valid at the moment they're computed; by the time your Bitcoin transaction confirms, the price may have drifted. Set a slippage tolerance with margin — 1-2% for routine size, more for large trades or volatile market conditions. The LIM field in the memo enforces this: if the available output drops below your floor at execution time, the swap refunds instead of filling.
Vault rotation
Repeating from earlier because it costs people money: the inbound vault address is not static. Fetching it from a bookmark, a screenshot, or a guide is how you send BTC to a retired vault. Every send needs a fresh fetch. If you're using the Ropil widget or a THORChain-native client, the address shown is fetched live; if you're building the transaction by hand, hit the /inbound_addresses endpoint immediately before signing.
Outbound chain congestion
Your ETH outbound is broadcast by the THORChain Ethereum vault with a fee chosen at the moment of broadcast. If mainnet gas spikes between broadcast and inclusion, the transaction may sit pending for an extended window. Arbitrum sequencer outages (rare but real) can also delay an outbound to L2. The transaction hash is visible immediately on Etherscan or Arbiscan; if it's pending for hours, it will eventually land or be replaced — funds are not lost, just delayed.
Sending from an exchange wallet
Repeating the warning because it's catastrophic. Coinbase, Binance, Kraken, OKX, KuCoin and similar custodial wallets don't broadcast custom OP_RETURNdata — they strip it or refuse to attach it. A swap initiated from such a wallet looks normal, the BTC is sent, the vault receives it, and the swap silently fails because there's no memo to parse. Recovery requires the exchange's support team to cooperate with THORChain's manual refund process and is measured in weeks, not hours. Do not initiate a THORChain swap from an exchange.
Costs breakdown
A worked example for a 0.05 BTC swap to ETH on Ethereum mainnet via THORChain at indicative 2026 numbers:
- Bitcoin network fee. One sat/vB or whatever your wallet picks for confirmation in the next block. Typically $1-3 for a small transaction; can spike to $10+ during mempool congestion. You pay this directly on the outbound from your BTC wallet.
- THORChain pool fee. A combined liquidity-pool spread plus an outbound network fee, deducted from the swapped amount before delivery. For BTC→ETH typically 30-60 bps on the trade, plus a small fixed Ethereum gas cost ($2-15 depending on mainnet conditions) deducted in ETH terms.
- Aggregator / affiliate fee. Ropil takes a 30 bps integrator fee on swaps routed through our interface, implemented as the THORChain affiliate field. For LiFi-routed swaps LiFi takes its own 25 bps separately. These are listed as a line item on the quote card before you sign.
- Destination chain gas (if bridging onward). If you're landing on Arbitrum or Base via a follow-on bridge, expect $0.10-1.00 per transaction in gas on those L2s. On Ethereum mainnet itself, plan for $5-50 per follow-on transaction depending on conditions.
For 0.05 BTC at indicative values: total deductions across the stack land in the 0.5-1.0% range for a routine market swap, comparable to or slightly above CEX trading fees once you net out CEX deposit/withdrawal costs. The marginal cost of opting out of KYC is small.
What can go wrong, and how Ropil handles it
Ropil is non-custodial. We never hold your funds at any point. The swap is a transaction signed from your wallet to the engine's contract or vault, and the engine — THORChain or LiFi — owns the execution surface from that moment on. This is the right design for a swap aggregator and it has a specific consequence: we cannot reverse a transaction, refund a stuck swap, or recover funds sent to a wrong address. The protocols that actually move the assets own that surface.
For THORChain refunds: if the memo is absent, unparseable, or the swap exceeds the slippage limit, the vault attempts to return the BTC to the original sender. This is slow (24-72 hours typical, longer in pool-halt scenarios) but works. The BTC arrives at the address that signed the inbound transaction.
For LiFi route failures:the swap result page includes a status URL (LiFi's scanner) that tracks every hop in the route. If a bridge step stalls, the link shows where and offers a continuation or refund flow per the underlying bridge's rules.
If something genuinely sideways happens: email helloropil+support@proton.me with the inbound transaction hash and the destination address. We can't recover funds, but we can route the issue to the right protocol team and we keep a runbook of the most common stuck-swap scenarios. Most reports turn out to be a slow Bitcoin confirmation or a pool halt that resolves on its own; the residue is the genuinely-stuck cases that need protocol-level escalation.
Try it with a small first swap
The standard advice for any new on-chain workflow: a confirmation swap before the real one. Send 0.001 BTC (around $60-100 at current prices), confirm the ETH arrives at your destination address, and only then size up. The marginal cost of the test swap is small relative to the cost of discovering a wallet bug or a memo typo on a 1 BTC transaction.
The Ropil interface lives at ropil.xyz. For background on how the three engines we route to compare on coverage and trust, see the cross-chain swap routing guide; for the security side of why we're careful about which bridges land in our route set, see the bridge postmortem catalogue.
Questions or feedback? hello@ropil.xyz