跳转到主要内容
LI.FI 提供原生比特币、主要 EVM 链和 Solana 之间的无缝原生比特币桥接和交换。

请求报价

可以使用与 EVM 相同的端点请求比特币的报价。唯一的区别是当源链是比特币时的交易数据。
当源链是比特币时,fromAddress 需要有足够的 UTXO 来覆盖请求的交易金额,否则不会返回报价。此检查是为了在比特币上构建交易,其中检查并以最有效的方式组合用户钱包的 UTXO。

执行交易

交易数据

在检索报价后,需要将资金发送到响应中提供的 BTC 金库地址,并附上备注。
  • 备注功能:类似于 Thorchain,LI.FI 使用备注进行 BTC 到 EVM 的交换。BTC 交易中的备注指定交换的目标地址和链。
  • 交易处理:从 BTC 离开并转到 EVM 的交易需要发送到 EVM 地址。备注确保交换详细信息由验证器正确处理。
注意:仅在合理时间内(~30 分钟)发送交易。始终建议请求最新的报价以确保获得最新信息。
修改比特币交易数据的风险修改从我们 API 收到的 PSBT 或原始比特币交易数据(例如删除输出、更改金额或编辑操作码/脚本)可能会使签名或支出条件无效,并导致资金的不可逆转损失。除非您是专家并且已经明确与我们确认您打算进行的修改,否则请勿更改 PSBT。
transactionRequest 对象中的 data 是 PSBT(部分签名的比特币交易),需要通过解码 PSBT 来检索备注。

从 PSBT 检索备注

可以使用任何库(如 bitcoinjsscure-btc-signer)解码 PSBT。 这是使用 bitcoinjs 的示例:
const psbtHex = transactionRequest.data;

// 从十六进制数据创建 PSBT 对象
const psbt = Psbt.fromHex(psbtHex, { network: networks.bitcoin });

// 在交易输出中查找 OP_RETURN 输出
const opReturnOutput = psbt.txOutputs.find((output) => {
  if (output?.script) {
    // 将输出脚本转换为十六进制字符串以进行检查
    const scriptHex = Array.from(output.script)
      .map((b) => b.toString(16).padStart(2, "0"))
      .join("");

    // 检查脚本是否以 OP_RETURN 操作码(0x6a)开头
    return scriptHex.startsWith("6a");
  }
  return false;
});

// 如果存在 OP_RETURN 输出,则将其脚本数据解码为 UTF-8 文本(备注)
const memo = opReturnOutput?.script
  ? new TextDecoder().decode(
      new Uint8Array(Object.values(opReturnOutput.script))
    )
  : undefined;
I