为 swapExactTokensForTokens 估算 gas 时出错

Posted

技术标签:

【中文标题】为 swapExactTokensForTokens 估算 gas 时出错【英文标题】:Error on estimating gas for swapExactTokensForTokens 【发布时间】:2021-08-14 22:25:30 【问题描述】:

我是区块链新手,我正在尝试使用 web3.js。 我试图计算将 WBNB 换成 DAI 的气体,但我一直出错。 这是我的代码:

let routerContract = new puWeb3.eth.Contract(Config.PANCAKESWAP_ROUTER_V2_ABI, Config.PANCAKESWAP_ROUTER_V2_ADDRESS);
let tokenContract = new puWeb3.eth.Contract(Config.TOKEN_ABI, Config.WBNB_ADDRESS);

let amountIn = puWeb3.utils.toWei('0.01', 'ether');
let amountOutMin = await routerContract.methods.getAmountsOut(amountIn, [Config.WBNB_ADDRESS, Config.DAI_ADDRESS]).call();
amountIn = amountOutMin[0];
amountOutMin = amountOutMin[1];

console.log(amountIn+" WBNB ----> "+amountOutMin+" DAI");

// Set deadline 1 minute from now
let now = parseInt(Date.now()/1000);
let deadline = now + 60 

// Encode data
let encodedABI = routerContract.methods.swapExactTokensForTokens(amountIn, amountOutMin, [Config.WBNB_ADDRESS, Config.DAI_ADDRESS], Config.ACCOUNT_ADDRESS, deadline).encodeABI();

//Estimate gas
let estimateGas = await puWeb3.eth.estimateGas(
    from: Config.ACCOUNT_ADDRESS,   
    to: Config.PANCAKESWAP_ROUTER_V2_ADDRESS,    
    data: encodedABI,
);

错误是: 返回错误:执行恢复:TransferHelper: TRANSFER_FROM_FAILED

谁能告诉我我做错了什么?谢谢。

【问题讨论】:

【参考方案1】:

在我批准输入代币进行交换后,我终于设法获得了估计的 gas 并进行了交易。 您需要 2 笔交易:

    先发送一笔交易,以输入金额批准输入token

    // Encode data
    let encodedABI = tokenContract.methods.approve(Config.PANCAKESWAP_ROUTER_V2_ADDRESS, puWeb3.utils.toHex(amountIn)).encodeABI();
    

    批准交易后,发送交易到swap

【讨论】:

以上是关于为 swapExactTokensForTokens 估算 gas 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在合约中调用 uniswap swapExactTokensForTokens 失败

ethers.js swapExactETHForTokens 和 swapExactTokensForTokens on pancake swap

在 swapExactTokensForTokens (UniswapV2Router02, web3.js) 期间恢复交易

将 A 转换为 1 B 转换为 2 ... Z 转换为 26,然后将 AA 转换为 27 AB 转换为 28(Excel 中列引用的列索引)

考试错题

SQL判断字段是不是为空,为NULL