Skip to main content
LI.FI offers seamless native Bitcoin bridging and swaps between native Bitcoin, major EVM chains and Solana.

Requesting a quote

A quote for Bitcoin can be requested using the same endpoints as EVM. The only difference will be the transaction data when source chain is Bitcoin.
fromAddress when source chain is Bitcoin supports flexible formats for maximum convenience:
  • Single Bitcoin address: bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh
  • Multiple addresses (semicolon-separated): address1;address2;address3
  • Extended public key (xpub): xpub6CUG...
  • Multiple xpubs: xpub1,xpub2
  • Combination of xpubs and addresses: xpub1;address1;address2
UTXO Collection: The system builds transaction inputs by collecting UTXOs from:
  • Provided addresses directly, OR
  • Addresses derived from the provided xpub(s) that contain UTXOs
The fromAddress must have enough UTXOs to cover the requested transaction amount, otherwise no quote will be returned. UTXOs are checked and combined in the most efficient way to build the transaction.Transaction Signing: All input addresses (wallets) that contribute UTXOs to the transaction must sign the PSBT. This ensures that funds from each participating address are properly authorized.Refund Address: The third output in the PSBT is a refund/change output that will be returned to the address that contributed the most significant input to the transaction.

Executing a transaction

Transaction data

After retrieving the quote, the funds need to be sent to the BTC vault address provided in the response, along with a memo.
  • Memo Functionality: Similar to Thorchain, LI.FI uses memos for BTC to EVM swaps. The memo in the BTC transaction specifies the swap’s destination address and chain.
  • Transaction Handling: The transaction that leaves BTC and goes to EVM needs to be sent to an EVM address. The memo ensures that the swap details are correctly processed by the validators.
NOTE: Only send transactions in a timely manner (~30min). It is always recommended to request an up-to-date quote to ensure to get the latest information.
Risk of modifying Bitcoin transaction dataModifying PSBT or raw Bitcoin transaction data received from our API (for example removing outputs, changing amounts, or editing opcodes/scripts) can invalidate signatures or spending conditions and lead to irreversible loss of funds.Do not alter PSBTs unless you are an expert and have explicitly confirmed with us the modification you intend to make.
data in transactionRequest object is PSBT (partially signed bitcoin transaction) and memo needs to be retrieved from PSBT by decoding it.

Retrieving memo from PSBT

PSBT can be decoded using any library like bitcoinjs or scure-btc-signer. Here’s an example using bitcoinjs
const psbtHex = transactionRequest.data;

// Create PSBT object from hex data
const psbt = Psbt.fromHex(psbtHex, { network: networks.bitcoin });

// Find OP_RETURN output in the transaction outputs
const opReturnOutput = psbt.txOutputs.find((output) => {
  if (output?.script) {
    // Convert the output script to hex string for checking
    const scriptHex = Array.from(output.script)
      .map((b) => b.toString(16).padStart(2, "0"))
      .join("");

    // Check if script starts with OP_RETURN opcode (0x6a)
    return scriptHex.startsWith("6a");
  }
  return false;
});

// If an OP_RETURN output exists, decode its script data as UTF-8 text (memo)
const memo = opReturnOutput?.script
  ? new TextDecoder().decode(
      new Uint8Array(Object.values(opReturnOutput.script))
    )
  : undefined;