You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Uniswap Universal Router执行WETH转DAI交易触发CALL_EXCEPTION错误

问题排查与解决方案

Calldata错误的可能性分析

  • 版本适配问题:确认你使用的AlphaRouter SDK版本,是否与Arbitrum链上部署的Uniswap Universal Router合约版本匹配。不同版本的Router合约(如v1/v2)的Command格式、参数顺序存在差异,版本不匹配会直接导致calldata解析失败。
  • 地址与参数校验:检查AlphaRouter返回路径中WETH、DAI的Arbitrum链地址是否正确(WETH: 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1,DAI: 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1);同时确认交易金额参数是否用对单位(必须是wei而非ether),滑点限制的数值格式是否符合合约要求。
  • 权限与状态校验:虽然你已授权Permit2,仍要确认授权的金额是否覆盖本次交易的WETH输入量,且授权未过期。可直接在分叉链上调用Permit2合约的allowance方法查询状态。

是否需要自行解析Command调用execute?

不需要。AlphaRouter生成的calldata已经是直接调用Universal Router execute方法的完整编码数据,其中封装了所有必要的Command数组和参数。自行解析重构反而容易因为参数顺序、编码格式错误触发异常,除非你需要自定义路由逻辑,否则直接使用AlphaRouter的结果即可。

进一步调试步骤

  • 开启Anvil详细日志:启动Anvil时添加--trace或--verbose参数,获取交易执行的完整栈跟踪信息,定位CALL_EXCEPTION触发的具体合约、指令位置,比如是swap合约调用失败还是Permit2授权环节出问题。
  • 拆分Command单独测试:将AlphaRouter返回的Command数组拆分,单独调用execute执行单个Command(比如先测试PERMIT2_TRANSFER_FROM,再测试V3_SWAP_EXACT_IN),定位哪一步触发错误。
  • 用Foundry手动模拟调用:使用cast call命令直接在Anvil环境中执行交易,获取更详细的错误反馈,示例命令:
    cast call <UNIVERSAL_ROUTER_ADDRESS> "<execute(bytes)>(bytes)" <GENERATED_CALDATA> --rpc-url http://localhost:8545 --from <YOUR_ADDRESS>
    
  • 检查分叉链状态:重新初始化Anvil分叉,或切换到其他Arbitrum节点提供者(如Alchemy)对比测试,排除Infura分叉节点的状态异常问题。
  • 调整Gas设置:手动将交易Gas Limit设置为3000000或更高,避免因Gas不足导致的隐性异常。

内容的提问来源于stack exchange,提问作者Devansh Purohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:54:56