跳到正文
← 使用教程

Turnkey 兑换已受理却未到账:核净报价、结算与退款

链小知 · 进阶 · 核验 · 依官方文档整理

从已有报价/执行摘要区分预期净额、最低输出和实际结算,单独核跨链失败后的资金位置。

开始前准备

  • 准备已有脱敏quote、execute和status记录;不生成报价、不调用API、不签名、执行或重试兑换。
  • 保留quoteId/swapRequestId的脱敏关联、organization身份和读数时间;不写凭据、X-Stamp或私钥。

1. 先固定资产身份与计量单位

输入/输出token用CAIP-19;CAIP-2前缀相同为同链,不同EVM链为跨链,eip155与solana不同为跨协议。inputAmount按输入资产最小单位,不能与UI美元数字直接相比。

EVM↔SVM的destinationAddress是接收原始公开地址,必须匹配输出协议;同协议路由不应填它。它不是钱包account ID或CAIP标识。

检查结果:资产/链/协议/金额单位和接收地址种类有明确记录。

2. 核净报价与有效时间

outputAmount是已含Turnkey及客户服务费的预期净额,minOutputAmount是执行下限;不要再减一次服务费。50 bps示例为0.5%,不是50%。

expiresAt为毫秒epoch;过期不可执行,未过期也不保证市场路由仍可填。实际完成净额以status里的outputAmount为准,不将报价当成交保证。

检查结果:预期/最低/实际三类金额分开,记录费用已含与过期边界。

3. 把活动受理与结算分开

当前Quote V2与Execute V3通过quoteId绑定经济条件;execute活动COMPLETED只表示接受并入队广播,得到swapRequestId。

既有status记录须对应执行组织及swapRequestId。PENDING包含待广播、源链未纳入及目标链未结算;COMPLETED才表示输出资产到达,实际outputAmount仍可能滞后几秒填入。

检查结果:活动成功未升级为到账;status与原quote/execute一一关联。

4. 失败后分别核源链和退款

同链FAILED只在源交易失败分支,无refund。跨链FAILED可能是ORIGIN_TRANSACTION_FAILED或PROVIDER_FILL_FAILED;后者可在退款字段出现前先进入失败状态。

退款asset可能不同于原input,amount还会受源链兑换损失及退款Gas影响。只有已有refund对象和相应资产/链回执才记已退;没有refund时保持资金位置未知,不填原额退回。

检查结果:记录error.reason、源hash和refund身份/金额/链;未把FAILED当全额退款。

5. 核服务费之外的Gas与策略缺项

无赞助时原钱包承担源链Gas;已启用sponsor时组织承担赞助费用,源交易回滚也可能花Gas。服务费净报价不能证明网络费为0。

所读策略示例用activity.params并区分kind/type;slippage_bps省略时策略字段读取可报FieldNotUsed,不能按0解释。这里只核已有策略/费用记录,不修改配置或扩大滑点重试。

检查结果:付款方、Gas与服务费分列,省略策略字段保留缺项。

怎样确认完成

  • 得到净报价/受理/结算/失败退款与费用付款方对照。
  • 未查询认证API或验证任何实际兑换到账。

常见错误与边界

  • 官方推荐失败后继续取退款状态不等于自动退款保证;本教程只审阅已有快照,不运行轮询。
  • 每次重新报价和兑换都是新请求与新费用,不能自动补做。

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据