跳转到主要内容
作为跨链生态系统中的求解器,您可能专注于:
  • 访问可靠的订单流
  • 最小化用户托管解锁时间以减少库存要求
  • 在流动性来源方面具有灵活性

LI.FI 意图如何帮助

  • 直接访问 LI.FI 的大量订单流
  • 自由使用任何流动性来源进行求解(例如,DEX、CEX 或您自己的库存)
  • 快速的用户托管解锁时间(通常少于 2 分钟)
  • 由于快速还款周期而降低资本要求

求解意图

LI.FI 意图是一个完全无需许可的系统。由于系统是组件化的,并且组件与其他组件没有固有的信任元素,因此用户可以根据需要混合和匹配它们。因此,一旦收到订单,您就必须完整验证订单。一般流程是:
  1. 赞助商签署 LI.FI 意图兼容的锁并将其发送到 LI.FI 订单服务器。
  2. LI.FI 订单服务器初步验证订单并获取订单的分配者共同签名。然后将其广播给求解器。
  3. 求解器将订单的输出提交到输出结算合约,启动预言机系统。
    输出结算 表示为 output.settler
  4. 证明通过验证层传递到输入链。
    预言机系统 在订单结构中表示为 localOracleoutput.oracle
  5. 求解器将订单提交到输入结算合约,验证交付并解锁关联的输入代币。

订单类型

LI.FI 使用三种订单结构,从最简洁到最详细列出:
  1. BatchClaim:允许索取输入资产的签名意图。
  2. StandardOrder:包含足够信息以传达意图的链上定义。
  3. 订单服务器响应:包含可能对求解器有帮助的附加信息的充实订单。
除非您正在验证订单签名,否则您不会与 BatchClaim 交互。所有链上交互都使用 StandardOrder 来标准化接口。但是,StandardOrder 不包含足够的信息来填充意图。因此,它在链下使用 InputSolversignatures 等进行充实。

收集订单

LI.FI 意图提供两种接收订单的方式:
  1. 推荐:通过 WebSocket 连接到订单服务器。
  2. 替代方案:通过存款接口监控链上存款。
订单服务器是大多数求解器的推荐集成界面。但是,如果您对最低延迟、去中心化和无需许可的订单发现感兴趣,您可以在链上读取一些订单。并非所有订单都可以在链上发现。从任一来源,您将收到一个 StandardOrder 和其他要在所有 VM 上提交的填充详细信息:
struct StandardOrder {
    address user;
    uint256 nonce;
    uint256 originChainId;
    uint32 expires;
    uint32 fillDeadline;
    address inputOracle;
    uint256[2][] inputs;
    MandateOutput[] outputs;
}
其中 uint256[2][] inputs === [uint256 tokenId, uint256 amount][]MandateOutput 是:
struct MandateOutput {
    bytes32 oracle;
    bytes32 settler;
    uint256 chainId;
    bytes32 token;
    uint256 amount;
    bytes32 recipient;
    bytes call;
    bytes context;
}
有关收集订单的更多信息,查看订单收集指南 →

填充意图

要填充意图,必须执行所有 MandateOutput。每个 MandateOutput 都是一个独立的执行描述。
  • output.settler 使用其关联的上下文定义执行,并应在其接口上调用。目前,只实现了一个 OutputSettler:OutputSettlerCoin.sol,它有两个填充接口:
/// @notice 用于实现自己的批处理功能
function fill(
    uint32 fillDeadline,
    bytes32 orderId,
    MandateOutput calldata output,
    bytes32 proposedSolver
) external returns (bytes32 actualSolver);

/// @notice 用于批量填充整个订单。
function fillOrderOutputs(
    uint32 fillDeadline,
    bytes32 orderId,
    MandateOutput[] calldata outputs,
    bytes32 proposedSolver
) external;
有关填充意图的更多信息,查看 EVM 订单填充指南 →

验证填充

填充意图后,必须将填充证明发送到输入链。订单使用的预言机系统通过 localOracleoutput.oracle 指定。这些应该匹配。但是,验证已填充的输出高度依赖于预言机。有关更多信息,查看预言机系统架构 -> ->

结算订单

最后,意图必须在到期之前结算。这是通过在指定的 InputSettler 上调用 finalise[withSignature] 来实现的。调用者必须是填充时设置的指定求解器。
struct SolveParams(
    uint32 timestamp;
    bytes32 solver;
)
// 对于 Compact 输入结算器
function finalise(
    StandardOrder calldata order,
    bytes calldata signatures,
    SolveParams[] calldata solveParams,
    bytes32 destination,
    bytes calldata call
) external;
// 或对于托管输入结算器
function finalise(
    StandardOrder calldata order,
    SolveParams[] calldata solveParams,
    bytes32 destination,
    bytes calldata call
) external;
有关结算订单的更多信息,查看订单结算指南 →
I