> ## Documentation Index
> Fetch the complete documentation index at: https://docs.li.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# 比特币交易示例

## 通过 API 请求比特币特定信息

### 链

```JS theme={"system"}
curl --request GET \
     --url 'https://li.quest/v1/chains?chainTypes=UTXO' \
     --header 'accept: application/json'
```

### 工具

```JS theme={"system"}
curl --request GET \
  --url 'https://li.quest/v1/tools?chains=20000000000001' \
  --header 'accept: application/json'
```

### 代币

```JS theme={"system"}
curl --request GET \
     --url 'https://li.quest/v1/tokens?chains=BTC' \
     --header 'accept: application/json'
```

### 代币详情

```JS theme={"system"}
curl --request GET \
     --url 'https://li.quest/v1/token?chain=20000000000001&token=bitcoin' \
     --header 'accept: application/json'
```

## 请求报价

### 比特币到以太坊

报价和路由请求到 LI.FI API 的结构相同，分别对应链和代币地址的变量

<CodeGroup>
  ```javascript /quote theme={"system"}
  curl --request GET \
       --url 'https://li.quest/v1/quote?fromAddress=bc1qmdpxhzarlxrygtvlxrkkl0eqguszkzqdgg4py5&fromAmount=500000&fromChain=BTC&fromToken=bitcoin&toAddress=0x39333638696578786b61393361726b63717a6773&toChain=1&toToken=0x0000000000000000000000000000000000000000' \
       --header 'accept: application/json'
  ```

  ```javascript /routes theme={"system"}
  curl --request POST \
       --url https://li.quest/v1/advanced/routes \
       --header 'accept: application/json' \
       --header 'content-type: application/json' \
       --data '
  {
    "toTokenAddress": "0x0000000000000000000000000000000000000000",
    "fromTokenAddress": "bitcoin",
    "fromChainId": 20000000000001,
    "fromAmount": "10000000",
    "toChainId": 1,
    "fromAddress": "YOUR_BTC_WALLET",
    "toAddress": "YOUR_EVM_WALLET"
  }
  '
  ```
</CodeGroup>

### 以太坊到比特币

<CodeGroup>
  ```javascript /quote theme={"system"}
  curl --request GET \
       --url 'https://li.quest/v1/quote?fromChain=1&toChain=20000000000001&fromToken=0x0000000000000000000000000000000000000000&toToken=bitcoin&fromAddress=0x552008c0f6870c2f77e5cC1d2eb9bdff03e30Ea0&toAddress=bc1qmdpxhzarlxrygtvlxrkkl0eqguszkzqdgg4py5&fromAmount=500000000000000000' \
       --header 'accept: application/json'
  ```

  ```javascript /routes theme={"system"}
  curl --request POST \
       --url https://li.quest/v1/advanced/routes \
       --header 'accept: application/json' \
       --header 'content-type: application/json' \
       --data '
  {
    "toTokenAddress": "bitcoin",
    "fromTokenAddress": "0x0000000000000000000000000000000000000000",
    "fromChainId": 1,
    "fromAmount": "500000000000000000",
    "toChainId": 20000000000001,
    "fromAddress": "YOUR_EVM_WALLET",
    "toAddress": "YOUR_BTC_WALLET"
  }
  '
  ```
</CodeGroup>

## 执行交易

### 构建自定义比特币交易

合作伙伴可能想要构建自定义比特币交易，以选择特定的 UTXO，原因包括币控制、UTXO 合并或费用优化等。

**构建自定义交易时的要求：**

* 保留 API 响应中的确切输出结构和顺序
* 确保选定的 UTXO 有足够的价值来覆盖：
  * 桥接存款金额（第一个输出）
  * 如果桥接要求，则退款输出（第三个输出，必须高于尘埃阈值）
  * 集成商费用（额外输出）

**关键：** 输出顺序和结构不能被修改。偏离 API 响应结构将导致交易卡住或失败。

### 交易数据

**比特币到以太坊、雪崩或 BNB 智能链（BSC）**

获取报价后，需要将资金发送到响应中提供的 BTC 保管地址，并附上备注。

**备注功能：** 类似于 Thorchain，LI.FI 使用备注进行 BTC 到 EVM 的交换。根据工具，BTC 交易中的备注指定了要执行的桥接特定交易数据和内部 LI.FI 的跟踪详情。

**交易处理：** 离开 BTC 并前往 EVM 的交易需要被发送到一个 EVM 地址。备注确保交换详情被验证者正确处理。

<Note>
  注意：只在及时的情况下发送交易（约 30 分钟）。始终建议请求最新的报价，以确保获取最新信息。
</Note>

<Warning>
  **修改比特币交易数据的风险**

  修改我们 API 收到的 PSBT 或原始比特币交易数据（例如移除输出、更改金额或编辑操作码/脚本）可能会使签名或支出条件无效，并导致资金不可逆转的损失。

  除非您是专家，并且已与我们明确确认您打算进行的修改，否则不要更改 PSBT。
</Warning>

以下是交易数据的示例

```JS theme={"system"}
"transactionRequest": {
    "to": "bc1qawcdxplxprc64fh38ryy4crndmfgwrffpac743", //发送 BTC 到的 thorswap 保管地址
    "data": "=:ETH.USDC:0x29DaCdF7cCaDf4eE67c923b4C22255A4B2494eD7::lifi:0|0x4977d81c2a5d6bd8",
    "value": "500000"
  }
```

### 从 PSBT 提取交易数据

在使用选定的 UTXO 构建自定义比特币交易时，合作伙伴需要从 API 返回的 PSBT（部分签名的比特币交易）中提取备注和其他交易详情。

**关键信息：**

* 备注包含在 PSBT 的 **OP\_RETURN 输出**（第二个输出）中
* 这个备注必须完全按照提供的来保留 - 它包含了桥接特定的调用数据和 LI.FI 的跟踪详情
* 存款人地址在第一个输出中
* 退款地址（如果需要）在第三个输出中

合作伙伴可以解析 PSBT 以提取这些值，并在保持确切输出结构的同时，用他们选定的 UTXO 重构交易。

### 每个工具的比特币交易要求

<Warning>
  **关键：输出结构不能被修改**

  API 提供的输出顺序和结构必须完全复制。更改顺序、移除输出或修改金额将导致交易卡住。构建自定义交易的合作伙伴必须保留确切的结构，同时只更改输入 UTXO。
</Warning>

输出结构的一般要求如下：

* **第一个输出：** 桥接金额发送到桥接存款人地址
* **第二个输出：** 包含具有桥接特定和 LI.FI 跟踪详情的备注的 OP\_RETURN（必须完全保留）
* **第三个输出：** 退款输出返回给发送者的地址（对某些桥是可选的，对其他桥是必须的 - 见下文详情）
* **剩余输出：** 集成商特定的费用转移

**尘埃阈值要求：**

所有包含价值的输出必须超过尘埃阈值，这由输出地址类型决定：

* Pay To Witness Public Key Hash (p2wpkh) - 294 sats
* Pay To Witness Script Hash (p2wsh) - 330 sats
* Pay To Script Hash (p2sh) - 540 sats
* Pay To Public Key Hash (p2pkh) - 546 sats
* Pay To Taproot (p2tr) - 330 sats

#### 桥接要求摘要

**Thorswap**
备注（OP\_RETURN 输出）包含要执行的 Thorswap 调用数据和 LI.FI 跟踪 id。保留两者都很重要，以避免交易卡住或失败。

```JS theme={"system"}
// 备注示例 =:ETH.USDC:0x29DaCdF7cCaDf4eE67c923b4C22255A4B2494eD7::lifi:0|0x4977d81c2a5d6bd8
```

**Unit**
Unit 桥接在备注中没有任何桥接特定的详情，因此它只包含 LI.FI 跟踪详情。

```JS theme={"system"}
// 备注示例 =|lifi02bf57fe
```

**Symbiosis**
Symbiosis 桥接在备注中没有任何桥接特定的详情，因此它只包含 LI.FI 跟踪详情。

```JS theme={"system"}
// 备注示例 =|lifi02bf57fe
```

<Warning>
  不正确的交易结构将导致需要手动退款干预的卡住转账。确保输出顺序与 API 响应完全匹配。
</Warning>

**Relay**
备注（OP\_RETURN 输出）包含要执行的 Relay 调用数据和 LI.FI 跟踪 id。保留两者都很重要，以避免交易卡住或失败。

```JS theme={"system"}
// 备注示例 0x986c2efd25b8887e9c187cfe2162753567339b6313e7137b749e83d4a1a79b03=|lifi92c9cbbc5
```

**Chainflip**
Chainflip PSBT 需要如上所述有三个输出。如果跳过退款输出，交易将不会被正确处理。备注（OP\_RETURN 输出）包含要执行的 Chainflip 负载和 LI.FI 跟踪 id。保留两者都很重要，以避免交易卡住或失败。

```JS theme={"system"}
// 备注示例 0x01071eb6638de8c571c787d7bc24f98bfa735425731c6400f4c5ef05000000000000000000000000ff010002001e0200=|lifi92c9cbbc5
```

<Warning>
  **CRITICAL: Chainflip 资金损失风险**

  Chainflip 交易如果输出结构不正确，将导致**永久、无法恢复的资金损失**。与其他桥接不同，Chainflip 不能手动退款卡住的交易。

  **强制要求：**

  * 所有三个输出必须按确切顺序出现：(1) 存款金额，(2) OP\_RETURN 备注，(3) 退款输出
  * 退款输出（第三个输出）是强制性的，必须高于尘埃阈值
  * 不要修改、移除或重新排序 API 响应中的任何输出

  未能完全遵守这些要求将导致不可逆转的资金损失，没有恢复选项。
</Warning>
