eattheblocks icon indicating copy to clipboard operation
eattheblocks copied to clipboard

Error: cannot estimate gas

Open jfernandez31 opened this issue 3 years ago • 1 comments

Hi can some one please help with this?

Error: cannot estimate gas; transaction may fail or may require manual gas limit (error={"reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT","error":{"code":-32000,"response":"{"jsonrpc":"2.0","id":8,"error":{"code":-32000,"message":"gas required exceeds allowance (0)"}}"},"method":"estimateGas","transaction

here is my config

` const ethers = require('ethers');

const addresses = { WBNB: '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c', factory: '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73', router: '0x10ED43C718714eb63d5aA57B78B54704E256024E', recipient: '' }

//First address of this mnemonic must have enough BNB to pay for tx fess const mnemonic = '';

const provider = new ethers.providers.WebSocketProvider('wss://'); const wallet = ethers.Wallet.fromMnemonic(mnemonic); const account = wallet.connect(provider); const factory = new ethers.Contract( addresses.factory, ['event PairCreated(address indexed token0, address indexed token1, address pair, uint)'], account ); const router = new ethers.Contract( addresses.router, [ 'function getAmountsOut(uint amountIn, address[] memory path) public view returns (uint[] memory amounts)', 'function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)' ], account );

const wbnb = new ethers.Contract( addresses.WBNB, [ 'function approve(address spender, uint amount) public returns(bool)', ], account );

const init = async () => { const tx = await wbnb.approve( router.address, '10' ); const receipt = await tx.wait(); console.log('Transaction receipt'); console.log(receipt); }

factory.on('PairCreated', async (token0, token1, pairAddress) => { console.log(New pair detected ================= token0: ${token0} token1: ${token1} pairAddress: ${pairAddress});

//The quote currency needs to be WBNB (we will pay with WBNB) let tokenIn, tokenOut; if(token0 === addresses.WBNB) { tokenIn = token0; tokenOut = token1; }

if(token1 == addresses.WBNB) { tokenIn = token1; tokenOut = token0; }

//The quote currency is not WBNB if(typeof tokenIn === 'undefined') { return; }

//We buy for 0.1 BNB of the new token //ethers was originally created for Ethereum, both also work for BSC //'ether' === 'bnb' on BSC const amountIn = ethers.utils.parseUnits('0.01', '9'); const amounts = await router.getAmountsOut(amountIn, [tokenIn, tokenOut]); //Our execution price will be a bit different, we need some flexbility const amountOutMin = amounts[1].sub(amounts[1].div(10)); console.log(Buying new token ================= tokenIn: ${amountIn.toString()} ${tokenIn} (WBNB) tokenOut: ${amountOutMin.toString()} ${tokenOut}); const tx = await router.swapExactTokensForTokens( amountIn, amountOutMin, [tokenIn, tokenOut], addresses.recipient, Date.now() + 1000 * 60 * 10 //10 minutes ); const receipt = await tx.wait(); console.log('Transaction receipt'); console.log(receipt); });

init(); `

jfernandez31 avatar Oct 30 '21 05:10 jfernandez31

Use Estimate Function of web3js to guess the gas of any transaction...

Kali-Decoder avatar Aug 22 '22 05:08 Kali-Decoder