I'm new to web3 programming and all. So, I've been trying to. build a trading bot. I am testing using goerli testnet.
Here is my code.
const ethers = require('ethers');
const addresses = {
WETH: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
router: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',
recipient: '0x...',
// Add the contract address of the token you want to trade
tokenToBuy: '0x...', // Replace with the actual contract address
};
const privateKey = '0x0...';
const provider = new ethers.providers.WebSocketProvider('wss://goerli.infura.io/ws/v3/...');
const wallet = new ethers.Wallet(privateKey, provider);
const account = wallet.connect(provider);
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
);
// Specify the token you want to buy
const tokenIn = addresses.WETH; // You are buying with WETH
const tokenOut = addresses.tokenToBuy;
async function buyToken() {
const gasPrice = await provider.getGasPrice();
const amountIn = ethers.utils.parseUnits('0.02', 'ether');
const amounts = await router.getAmountsOut(amountIn, [tokenIn, tokenOut]);
const amountOutMin = amounts[1].sub(amounts[1].div(10));
console.log(`
Buying existing token
=====================
tokenIn: ${amountIn.toString()} ${tokenIn} (WETH)
tokenOut: ${amountOutMin.toString()} ${tokenOut}
`);
const tx = await router.swapExactTokensForTokens(
amountIn,
amountOutMin,
[tokenIn, tokenOut],
addresses.recipient,
Date.now() + 1000 * 60 * 10,
{
gasPrice: gasPrice,
gasLimit: 30000,
},
);
const receipt = await tx.wait();
console.log('Transaction receipt');
console.log(receipt);
}
// Call the function to execute the trade
buyToken();
I get this error when I run it
Error: cannot estimate gas; transaction may fail or may require manual gas limit (error={"code":-32000,"response":"{"jsonrpc":"2.0","id":3,"error":{"code":-32000,"message":"execution reverted"}}"}, method="call", transaction={"from":"0x...","to":"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D","data":"0xd06ca61f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000...000000000000000000000000a......"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.0.24) at Logger.makeError (.../uniswap-bot/node_modules/@ethersproject/logger/lib/index.js:180:21) at Logger.throwError (...uniswap-bot/node_modules/@ethersproject/logger/lib/index.js:189:20) at checkError (...uniswap-bot/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:107:16) at WebSocketProvider. (...uniswap-bot/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:523:47) at step (.../uniswap-bot/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) at Object.throw (...uniswap-bot/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) at rejected (.../uniswap-bot/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { reason: 'cannot estimate gas; transaction may fail or may require manual gas limit', code: 'UNPREDICTABLE_GAS_LIMIT', error: Error: execution reverted at WebSocketProvider._this._websocket.onmessage (.../uniswap-bot/node_modules/@ethersproject/providers/lib/websocket-provider.js:123:33) at WebSocket.onMessage (.../uniswap-bot/node_modules/ws/lib/event-target.js:120:16) at WebSocket.emit (node:events:514:28) at Receiver.receiverOnMessage (.../uniswap-bot/node_modules/ws/lib/websocket.js:801:20) at Receiver.emit (node:events:514:28) at Receiver.dataMessage (.../uniswap-bot/node_modules/ws/lib/receiver.js:436:14) at Receiver.getData (.../uniswap-bot/node_modules/ws/lib/receiver.js:366:17) at Receiver.startLoop (.../uniswap-bot/node_modules/ws/lib/receiver.js:142:22) at Receiver._write (.../uniswap-bot/node_modules/ws/lib/receiver.js:77:10) at writeOrBuffer (node:internal/streams/writable:392:12) { code: -32000, response: '{"jsonrpc":"2.0","id":3,"error":{"code":-32000,"message":"execution reverted"}}' }, method: 'call', transaction: { from: '0x6B9AC3A905897F153484A801005017f8206F7567', to: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D', data: '0xd06ca61f00000000000000000000000000000000000000000000000000470de4df82000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000...2000000000000000000000000a...' } }
Can anyone tell what's wrong?
I've tried different gasLimits