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

使用Nethereum估算UniSwap V3 Router exactInputSingle燃气量遇RPC错误

UniSwap V3 Router exactInputSingle 燃气估算失败排查与参数修正

核心问题排查

你的代码触发execution reverted: eth_estimateGas错误,主要源于以下3个关键问题:

1. amountIn 参数单位错误

EVM上的代币金额均以**最小单位(wei)**表示,直接用new BigInteger(0.2)会导致数值被截断为0(BigInteger仅处理整数)。需根据代币的小数位数转换:比如USDT是6位小数,0.2 USDT应转换为200000(即0.2 * 10^6);BNB是18位小数,0.2 BNB则为200000000000000000(0.2 * 10^18)。

2. 参数重复编码导致格式错误

EstimateGasAsync方法可直接接收参数对象,无需提前调用GetData生成编码数据。重复编码会让合约接收到错误的参数结构,触发revert。

3. 缺失代币授权

调用exactInputSingle前,必须先给Router合约授权转移你的tokenIn代币额度。未授权时,合约无法转移代币,燃气估算直接失败。

修正后的代码

var web3 = new Web3(account, "BSC endpoint");
var routerContract = web3.Eth.GetContract(pcsRouterAbi, pcsRouterAddress);
var exactInputSingleFunction = routerContract.GetFunction("exactInputSingle");

// 1. 先执行代币授权(仅需一次,额度足够可跳过)
var tokenInContract = web3.Eth.GetContract(erc20Abi, "0x55d398326f99059fF775485246999027B3197955");
var approveFunction = tokenInContract.GetFunction("approve");
// 授权200000个最小单位的tokenIn(以USDT为例)
var approveTx = await approveFunction.SendTransactionAsync(account.Address, null, null, pcsRouterAddress, new BigInteger(200000)); 
await web3.Eth.Transactions.WaitForTransactionReceiptAsync(approveTx);

// 2. 准备正确的参数
var deadline = UtilityMethods.DateTimeToUnixTimestamp(DateTime.UtcNow.AddMinutes(3));
// 根据tokenIn小数位数调整amountIn,此处以USDT(6位小数)的0.2为例
var amountIn = new BigInteger(200000); 

var parms = new
{
    tokenIn = "0x55d398326f99059fF775485246999027B3197955",
    tokenOut = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
    fee = new BigInteger(500),
    recipient = walletBsc.address,
    deadline = new BigInteger(deadline),
    amountIn = amountIn,
    amountOutMinimum = new BigInteger(0),
    sqrtPriceLimitX96 = new BigInteger(0)
};

// 3. 直接估算燃气,无需提前编码参数
var gas = await exactInputSingleFunction.EstimateGasAsync(parms);

额外注意事项

  • 确认tokenIn和tokenOut的地址为BSC链上的正确地址,避免误用以太坊主网地址。
  • fee参数需使用UniSwap V3/PancakeSwap V3支持的费率:500对应0.05%、3000对应0.3%、10000对应1%。
  • 若仍出现revert,可尝试使用BSC测试网或本地节点调试,通过TraceCall获取更详细的执行日志定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:35:23