Relay 报价里要签什么:核对步骤、金额与 protocol.v2 订单
链小知 · 进阶 · 核验 · 依官方文档整理
从已有 quote/v2 文件读取交易或签名步骤,核对输入、目标底线和订单字段,避免把 approve 或签名完成当跨链成功。
开始前准备
- 准备脱敏 quote/v2 原请求/响应、保存时间、原定来源付款账户及目标收款地址;有 protocol.v2 时另准备集成方独立保存的链/合约配置。
- 本篇按当前 REST 正文与嵌入schema,限已有文件检查;订单哈希重算与 calldata 校验交由可信本地集成环境,不运行示例、不提供 key、不签名或广播。
1. 核对版本与报价方向
记录 POST /quote/v2 的 originChainId/destinationChainId、originCurrency/destinationCurrency、user/recipient、tradeType/amount。EXACT_INPUT 是输入基准,EXACT_OUTPUT 是输出基准,EXPECTED_OUTPUT 另留其类型,不能一律当发送数量。
当前警告自2026-10-02每次 quote/v2 需有效 x-api-key,虽 header schema 仍写 optional。已有文件核对不需填写 key;没有新的合法报价时不把旧记录写成当前可执行。recipient 省略的通用默认是 user,但仍与实际响应核对。
检查结果:记录版本、两侧链与币、付款/收款人和交易类型。
2. 按原始单位核对输出底线
用 details.currencyIn/currencyOut 的 currency.chainId/address/decimals 与原请求对齐,保留 amount/amountFormatted/minimumAmount。amount 是最小单位整数string;slippageTolerance 是 bps字符串,50为0.5%,与LI.FI的0.005格式不同。
预期与最低收到分开,不以 amountUsd 或品牌验证标记代替数量/合约身份。输入与输出精度不同各自换算,缺精度或 minimumAmount 时标未核实,不假设默认50或所有路线都有相同滑点。
检查结果:方向、身份、原整数和显示数量一致,底线单独显示。
3. 逐项识别交易和签名权限
按 steps[].id/kind/items 作表:approve/approval、deposit、swap、send 是交易步骤;authorize、authorize1、authorize2 是不同签名情形。approve 完成仍需 deposit 或 swap,签名也可能允许转移代币,不等于无资产权限。
transaction item 记 item.data.chainId/from/to/value,以及 item.data.data(calldata);signature item 记 signatureKind/domain/chainId/verifyingContract、允许的 amount/期限与 post 目标。历史 deposit 示例地址不得复用。无 items/空数组与有 item 却缺 data 不同,后者保留待更新状态。
检查结果:每步骤的实际权限和链可核对,不按 description 的旧“relayer”字眼猜资金目的地。
4. 有 protocol.v2 时核对订单属性
先看是否包含 protocol.v2:只对此版本且非 deposit-address 使用官方订单校验流程。对 orderData.inputs[].payment 的链/币/amount 与 output.payments[] recipient/currency/minimumAmount、output.chainId 对照原意图,deadline 是 Unix 秒。
minimumAmount 是结算底线,expectedAmount 是估计。再由集成方以独立保存的链到VM映射重算 orderId;没有映射或哈希核验结果只能确认可读字段,不能给订单“已验证”标签。缺 protocol.v2 也不编造兼容校验。
检查结果:订单字段与原意图匹配,字段核对与密码学验证分开。
5. 把交易绑定到独立的合约配置
有可信集成核验记录时,核对 canonical depository 来自独立 chains 配置,而不是拿当前 quote.protocol.v2.paymentDetails.depository 证明 quote 自己。Input Validation旧字段路径与当前quote结构不同,按实际版本保留。检查 deposit ID 对应重算 orderId,付款人来自原应用状态,货币、depositNative/Erc20 函数与 value/token amount 均匹配订单。
单独 solver 签名只承诺 orderID,不证明价格、合约目的地或会成功填充。缺 calldata解码、独立合约配置或协议版本则列为未验,不自行安装脚本、改转账目标或提交旧 requests/signature 接口;该旧接口正文称已移除。
检查结果:已有集成证据能说明链、合约、订单、付款币与数量;不能完成的校验明确列出。
6. 分开费用、步骤完成与 fill 结果
quote details.expandedPriceImpact 分解费用,其平台项名 relay;requests/v3 对应 data.fees.quoted/actual 的 platform。旧 quote.fees 已deprecated且不反映总成本;普通自发来源 Gas 另外付,gasless 也不是全部免费。
本地 items.status=complete 或签名 post 成功不替代 fill 成功。记录 check 的真实 method/endpoint 与 requestId,按 v3 的字符串 status 判 waiting/pending/submitted/success/refund/failure,旧boolean说明和旧路径不能混用;最后还需目标交易证据。
检查结果:交付权限/订单/费用检查表,执行与到账另有状态记录。
怎样确认完成
- 输出原意图、最低输出、步骤权限和订单未验项;有独立核验记录才标对应检查通过。
- 全部documentation;未取报价、运行订单哈希/解码、签名、交易、调用业务API或测试实际到账。
常见错误与边界
- 签名步骤可授权代币转移;approve成功不是跨链完成。
- 用同一报价自己的合约地址或签名者作信任依据,会形成自证。
- protocol.v2 校验不覆盖 deposit address;检查通过也不保证 fill。