DFlow路由金额不符:核执行模式、成交记录与返还资产
链小知 · 进阶 · 核验 · 依官方文档整理
用已有订单和结果对应mint、执行阶段、fills和reverts,区分预期净额、最低保护与真实收款。
开始前准备
- 准备已有脱敏请求/报价、提交签名、后续结果与收款记录,保留服务地址、时间、mint及原始单位;缺少材料的步骤记为待核。
1. 固定服务、mint和执行模式
先对应原服务是开发还是生产、inputMint/outputMint、amount和钱包对象。amount是按该mint精度缩放的整数,规范示例1 SOL=1000000000,不能将1直接当1 SOL或给所有代币套同一精度。executionMode按原响应的sync/async核;allowSyncExec/allowAsyncExec是请求许可,不替代实际模式。routePlan在同步订单应有、异步仅在开单时路线已知才有,缺它不直接写无路由。
检查结果:服务、资产、原始量与实际模式对应;未知路线未补成失败。
2. 把预期净额与最低保护分开
outAmount是扣费后预期输出,otherAmountThreshold是扣费后最低输出,minOutAmount为后者别名;预期量不等实收量,也不要再扣同一platformFee。platformFee.amount在输出资产模式下是预计费用,实际随成交变化;异步预测交易会忽略请求的platformFeeMode而以稳定币收费。predictionMarketSlippageBps作用于预测订单最低结果,不用于选路;priceImpactPct示例0.01表示1%,不是滑点bps。
检查结果:预期净额、最低量、实际费用及百分比单位分列,未重复扣费。
3. 核交易构建、提交与有效高度
原请求含userPublicKey时才会附待签名的Base64 transaction;这是交易内容,不是order-status的签名参数,也不证明已经提交。用已有提交结果对应实际交易signature。contextSlot为评估报价的slot,lastValidBlockHeight是该交易blockhash最后有效的区块高度,不能当Unix时间或把两者直接作时差。缺提交签名或高度时保留未知。
检查结果:报价对象、交易内容、提交签名和有效高度各有对应材料或缺项。
4. 只对支持的订单解释状态
数据模型示意async查询状态,但当前order-status reference明确仅支持预测市场订单的提交签名。对适用记录保留pending、expired、failed、open、pendingClose、closed原状态,不能把open/pendingClose当完成,也不能只看closed就补全额成交。400 invalid_signature和404 not_found是业务失败/未找到记录,不能写零成交或已退全款;普通现货签名不要套用这个状态接口。
检查结果:记录适用范围、原状态及错误码,未从单一枚举推全额成功。
5. 按成交mint与逐笔签名核实际数量
OrderStatusResponse.inAmount/outAmount是累计已成交的缩放整数,与报价里的最大输入/预计输出不同。fills仅在至少有一笔成交时出现;逐笔都有signature、inputMint/outputMint和inAmount/outAmount,字段说明为including fees,与报价after all fees不能直接当同一毛净口径。按同一mint、精度及原费用/链账记录核对,避免把逐笔量与累计量重复相加,也不在毛净关系未知时自行加减费用;缺fills不自行补一笔零额成交。若收款目标不是原钱包,也需对应原目标记录。
检查结果:累计成交与逐笔记录对应,mint/精度/签名和实际收款可核或明确待核。
6. 对返还资产独立收尾
订单响应revertMint表示异步开单后若回退将返给用户的资产,restrictRevertMint默认false,因此不保证就是inputMint。reverts仅在至少一笔回退时出现,记录signature、mint和amount;用实际返还mint的精度解释数量,不把不同代币原始值相加平账。isNativePredictionMarketOutput只说明输出类型,不是事件裁决或赎回凭证。最终将成交、返还、费用与钱包实收分列,缺证不补全额退款。
检查结果:成交与返还的资产、数量和结果各有依据;未由订单关闭推事件派奖。
怎样确认完成
- 形成原订单、净额保护、执行阶段、逐笔成交与返还对照,缺项单列;方法按当前静态规范整理,未验证个人成交或资金结果。
常见错误与边界
- 报价净额、最低保护、累计成交和实际钱包收款是不同对象。
- async许可、实际执行模式、支持状态查询的订单范围不能混为一项。
- 返还mint可能不同于入金,按各自精度及结果核。