> ## 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.

# Compact 订单

> 通过 The Compact 资源锁提交无 gas 的链下订单。存入一次，即可发出多个意图而无需承担每笔订单的 gas 成本。

Compact 流程使用 [The Compact](https://github.com/Uniswap/the-compact) 资源锁进行链下、无 gas 的订单提交。用户存入一次代币后，即可从该余额中发出多个意图，而无需为每笔订单支付 gas。

<Note>
  如果您要在其他桥接之外添加 LI.FI Intents，[标准托管流程](/lifi-intents/quickstart)更简单且推荐使用。当您需要无 gas 提交或正在构建资源锁原生应用时，请使用 Compact 流程。
</Note>

***

## 它与 Escrow 有何不同

|           | Escrow               | Compact                       |
| --------- | -------------------- | ----------------------------- |
| 代币锁定      | 每笔意图，每次都在链上          | 存入一次，重复使用余额                   |
| 订单提交      | 链上（`open`/`openFor`） | 链下（`POST /orders/submit`）     |
| 每笔意图的 gas | 用户支付 gas 进行锁定        | 初次存入后无 gas                    |
| 结算        | `finalise`（无需签名）     | `finaliseWithSignature`（需要签名） |
| 订单类型      | 不适用（链上检测）            | `CatalystCompactOrder`        |

***

## 合约地址

这些在所有受支持的链上都相同：

| 合约                  | 地址                                           |
| ------------------- | -------------------------------------------- |
| InputSettlerCompact | `0x0000000000cd5f7fDEc90a03a31F79E5Fbc6A9Cf` |
| The Compact         | `0x00000000000000171ede64904551eeDF3C6C9788` |
| Polymer Oracle（主网）  | `0x008C3800F3Ad9b3B662d002E90Cc00000000eE17` |
| Output Settler      | `0x75220B7600c300005038432a0000f308e0000068` |

***

## 流程

<Steps>
  <Step title="存入 The Compact">
    将代币存入 The Compact 资源锁。这是一次性的链上交易。后续意图从该余额中提取，无需额外 gas。

    有关存入和注册意图的 UI 示例，请参阅 [lintent.org 演示](https://github.com/lifinance/lintent/blob/a4aa78cd058cade732b73d83aa2843dd4e9ea24d/src/lib/utils/lifiintent/tx.ts#L199)。
  </Step>

  <Step title="请求报价">
    与托管流程相同。调用 `POST /quote/request`。在 `supportedTypes` 中包含 `"oif-resource-lock-v0"` 以表明支持 Compact。

    <CodeGroup>
      ```ts TypeScript theme={"system"}
      const response = await fetch('https://order.li.fi/quote/request', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          user: '0x0001000002210514YOUR_WALLET_ADDRESS_20_BYTES',
          intent: {
            intentType: 'oif-swap',
            inputs: [{
              user: '0x0001000002210514YOUR_WALLET_ADDRESS_20_BYTES',
              asset: '0x0001000002210514833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',  // USDC on Base
              amount: '10000000',
            }],
            outputs: [{
              receiver: '0x0001000002A4B114YOUR_WALLET_ADDRESS_20_BYTES',
              asset: '0x0001000002A4B114af88d065e77c8cC2239327C5EDb3A432268e5831',  // USDC on Arbitrum
              amount: null,
            }],
            swapType: 'exact-input',
          },
          supportedTypes: ['oif-escrow-v0', 'oif-resource-lock-v0'],
        }),
      });

      const { quotes } = await response.json();
      const bestQuote = quotes[0];
      ```
    </CodeGroup>
  </Step>

  <Step title="签署领取">
    Compact 订单通过 EIP-712 签名而非链上交易进行授权。使用 The Compact 的域分隔符签署一个 `BatchClaim`。

    ```ts TypeScript theme={"system"}
    // The claim is signed as a BatchCompact struct:
    // struct BatchCompact {
    //   address arbiter;        // InputSettlerCompact address
    //   address sponsor;        // User address
    //   uint256 nonce;          // Allocator nonce
    //   uint256 expires;        // Claim expiry
    //   uint256[2][] idsAndAmounts;
    //   Mandate mandate;        // fillDeadline, inputOracle, outputs
    // }
    ```

    有关完整的签名示例，请参阅 [lintent.org 演示](https://github.com/lifinance/lintent/blob/a4aa78cd058cade732b73d83aa2843dd4e9ea24d/src/lib/utils/lifiintent/tx.ts#L144)。
  </Step>

  <Step title="链下提交订单">
    将签名的订单提交到 `POST /orders/submit`。包含 `quoteId` 以获得优先的解算器匹配。

    <CodeGroup>
      ```bash curl theme={"system"}
      curl -X POST 'https://order.li.fi/orders/submit' \
        -H 'Content-Type: application/json' \
        -d '{
          "orderType": "CatalystCompactOrder",
          "inputSettler": "0x0000000000cd5f7fDEc90a03a31F79E5Fbc6A9Cf",
          "quoteId": "QUOTE_ID_FROM_STEP_2",
          "order": {
            "expires": 1942819670,
            "user": "0xYOUR_WALLET_ADDRESS",
            "nonce": "1004",
            "originChainId": "8453",
            "fillDeadline": 1942819670,
            "inputOracle": "0x008C3800F3Ad9b3B662d002E90Cc00000000eE17",
            "inputs": [
              ["749071750893463290574776461331093852760741783827", "10000000"]
            ],
            "outputs": [{
              "oracle": "0x000000000000000000000000008C3800F3Ad9b3B662d002E90Cc00000000eE17",
              "settler": "0x00000000000000000000000075220B7600c300005038432a0000f308e0000068",
              "chainId": "42161",
              "token": "0x000000000000000000000000af88d065e77c8cC2239327C5EDb3A432268e5831",
              "amount": "9986765",
              "recipient": "0x000000000000000000000000YOUR_WALLET_ADDRESS",
              "callbackData": "0x",
              "context": "0x"
            }]
          }
        }'
      ```
    </CodeGroup>

    <Warning>
      `CatalystCompactOrder` 提交需要 sponsor 签名或 Compact 注册的交易哈希。上面的负载是一个参考模板。您必须包含相应的签名字段。在生产环境之前，请始终在 `order-dev.li.fi` 上进行测试。
    </Warning>

    响应包含一个带有 `orderIdentifier` 和 `onChainOrderId` 的 `meta` 对象用于跟踪。
  </Step>

  <Step title="跟踪订单">
    与托管流程相同。轮询 `GET /orders/status` 直到结算。

    <CodeGroup>
      ```ts TypeScript theme={"system"}
      const trackOrder = async (orderId: string) => {
        let status: string;
        do {
          const res = await fetch(
            `https://order.li.fi/orders/status?catalystOrderId=${orderId}`
          );
          const data = await res.json();
          status = data.meta.orderStatus;
          console.log(`Status: ${status}`);

          if (status !== 'Settled' && status !== 'Expired') {
            await new Promise(r => setTimeout(r, 3000));
          }
        } while (status !== 'Settled' && status !== 'Expired');

        return status;
      };

      await trackOrder(order.meta.orderIdentifier);
      ```
    </CodeGroup>
  </Step>
</Steps>

***

## 集成示例

* [签署 BatchCompact 领取](https://github.com/lifinance/lintent/blob/a4aa78cd058cade732b73d83aa2843dd4e9ea24d/src/lib/utils/lifiintent/tx.ts#L144)（UI 示例）
* [存入和注册意图](https://github.com/lifinance/lintent/blob/a4aa78cd058cade732b73d83aa2843dd4e9ea24d/src/lib/utils/lifiintent/tx.ts#L199)（UI 示例）
* [RegisterIntentLib.sol](https://github.com/catalystsystem/catalyst-intent/blob/27ce0972c150ed113f66ae91069eb953f23d920b/src/libs/RegisterIntentLib.sol#L100-L131)（智能合约示例）

***

## 后续步骤

<CardGroup cols={2}>
  <Card title="输入结算" icon="lock" href="/lifi-intents/architecture/input-settlement">
    Compact 领取结构、注册和 Permit2 详情
  </Card>

  <Card title="资源锁" icon="database" href="/lifi-intents/knowledge-database/resource-locks">
    资源锁、sponsor、allocator 和 arbiter 的工作原理
  </Card>

  <Card title="创建并提交订单" icon="paper-plane" href="/lifi-intents/intents-api/create-and-submit">
    完整的订单构造参考和验证规则
  </Card>

  <Card title="跟踪订单状态" icon="signal" href="/lifi-intents/intents-api/track-status">
    通过 API 或链上事件监控订单
  </Card>
</CardGroup>
