Skip to main content

Overview

This guide walks through swapping native on-chain Bitcoin to tBTC on Ethereum or Arbitrum. The flow is:
  1. Create swap: get a Taproot (P2TR) HTLC address to send BTC to
  2. Send BTC: fund the HTLC with an on-chain transaction
  3. Claim tBTC: receive tBTC on the EVM chain once the BTC confirms
On-chain swaps require waiting for Bitcoin confirmations (typically 1–6 blocks) before the server funds the EVM side. For instant swaps, consider using Lightning or Arkade as the source instead.
tBTC is a 1:1 Bitcoin-backed ERC-20 with 18 decimals, so target amounts are denominated in wei-style units rather than sats.

Create Swap

First create a client (see Setup & Initialization), then create the swap. Use Asset.TBTC_ETHEREUM or Asset.TBTC_ARBITRUM as the target:

Send BTC

Send on-chain Bitcoin to the HTLC address returned in the response:
Send the exact source_amount to the exact btc_htlc_address or the swap will fail and you will have to refund.

Monitor Swap Status

After broadcasting the BTC transaction, wait for it to confirm and for the server to fund the EVM HTLC. You can either subscribe to real-time updates or poll:

Claim tBTC

Once the status is serverfunded, claim your tBTC. Claiming is gasless on both Ethereum and Arbitrum via EIP-712 signatures.

Verify Completion



Recovering Failed Swaps

If you send BTC but the server never funds the EVM side (or the swap expires), you can reclaim your Bitcoin once the HTLC timelock passes. See Refund an on-chain HTLC.