为 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 中列引用的列索引)