Ekubo EVM 报价能出却兑换失败:核对路由版本、正负金额、阈值和期限
链小知 · 进阶 · 核验 · 依官方文档整理
按当前Yul Router v0.8.0官方说明核已有区块报价与原交易,区分exact-in/out、聚合滑点、quote回滚和真实结算。
开始前准备
- 准备已有EVM兑换预览/脱敏报价和交易记录:chainId、报价block、输入/输出token及decimals、specifiedAmount、total_calculated、splits、目标Router/编码版本、threshold/deadline/recipient与原error。
- 本教程不适用于Starknet Cairo或其他Router编码。按官方当前Yulv0.8.0说明与原版本匹配;不请求Quoter API/RPC、不运行SDK、改阈值、签名或重发。
1. 先核链的 Live 状态和 Router 编码版本
在官方EVMV3合约表核chainId及状态。WorldChain480、MegaETH4326当前标AwaitingEIP7939,缺CLZ时swap/positionupdate会revert;相同Core地址或部署存在不代表当前可交易,不能用这两链的失败推滑点原因。
当前生产EVM交易文档指YulRouterv0.8.0;原calldata必须与同版本导出的YUL_ROUTER_ADDRESS匹配。可配置Router、旧MEVCaptureRouter与Yul不是相同调用编码;版本或目标不明时保留未知,不从地址表手工替换后重发。
检查结果:chain状态、目标和原编码版本匹配,部署与可用分开。
2. 把 exact-in 和 exact-out 的方向写清
对原记录抄specifiedToken/calculatedToken和amount原字符串。exact-input的specifiedAmount为正,指定输入币;exact-output为负,specifiedToken是输出币、calculatedToken是输入币,不能只按界面左/右排列推方向。
calculatedAmount在exact-in是正的输出,在exact-out是负的输入。各币原数量需各自decimals,例USDC精度6的1000000才是1币;原token/精度未核不取默认18。负号是路由方向,不能写钱包负余额或退款。
检查结果:端点资产、正负方向和数量精度明确,exact-out输入/输出未反转。
3. 核完整 splits 与报价区块
从已有报价按splits[].amount_specified、route[].swap.pool_key和hop类型列每条路径;多个split最终由一个Corelock聚合,不是每个中间跳都有用户转账。原报价block必须保存,同一路径在后续区块不保证相同价格或扩展行为。
Quoter字段snake_case、amount/sqrt比值字符串,与SDKcamelCase/bigint不同。只有原返回摘要或缺poolKey/config/端点时停止完整路由判断;不要把全部hop当直接Core.swap,forwarded和wrapper有不同职责,也不能复制报价字符串直接作新交易。
检查结果:全部路径、输入分配、扩展与区块有原依据,中间账不重复算收款。
4. 检查总 amount threshold 和 deadline
calculatedAmountThreshold在exact-in保护总最小输出,在exact-out保护总最大输入;结合对应正负和原单位核。它是所有split聚合后的一项检查,不是每跳相同门槛;false显式表示不设金额界限,不建议为排错取消保护。
v0.8.0 deadline为uint32 Unix秒,当deadline秒仍能执行,下一秒DeadlineExpired。省略deadline则永不过期;官方interface默认签署时按最新blocktimestamp加30分钟,不按设备时钟。截图时间/报价block与原交易deadline分开,旧编码未含此字段时不能推已有保护。
检查结果:总阈值/方向和Unix秒期限正确,未用毫秒或设备时钟误判。
5. 分清 quote、forwarded 与 direct 的结果
quote(bytes)会执行路径检查后回滚状态并返回结果,必须无ETH value,不需余额/approval;它可冒泡SlippageCheckFailed或其他扩展错误。因此quote返回数值/通过阈值不是资产转移成功,quote失败也不等用户已扣款。
direct rawcalldata才由调用者付款并付recipient,未指定recipient用caller;forwarded只把端点债务留原locker,忽略路由recipient,由caller统一结算。原交易不能用普通swap选择器解释;先按模式核回执,不为对比调用quote或发送路由。
检查结果:执行模式与对应结算/回滚范围清楚,quote和forwarded未当钱包到账。
6. 按原错误和收款记录结案
DeadlineExpired核时间,SlippageCheckFailed核聚合阈值;InvalidRoute或其他error应按原完整数据/版本核,不能统一称流动性不足。ERC20输入approval到对应Router与实际兑换分开;nativeETH标address0,原value/unusedETH返还还需回执,不能把退款说成盈利。
核已有成功交易的输出资产、recipient和真实接收量,再单列Gas与池/扩展费。YulRouter本身不收协议/集成费不意味着pool/MEV附加/Gas为零;目前只完成原记录诊断,缺原回执保持未知。
检查结果:错误及资金结算分别有证据,未把模拟/报价/approval当实际成功。
怎样确认完成
- 形成chain状态/编码版本、原方向/数量、报价block/paths、阈值/期限、mode/error与接收记录对照。
- documentation;未调用Quoter/业务API/RPC、SDK、账户/签名或资金,部署和收款仍需独立证据。
常见错误与边界
- exact-output金额为负,端点角色与exact-input相反;不能对全部金额取绝对值后忽略方向。
- v0.8.0 deadline和ABI/地址必须匹配原版本,普通swap选择器不能用于生产Yul原calldata。
- 部署存在、quote可读或路由模拟通过都不证明资产接收。