jklepatch / eattheblocks

Source code for Eat The Blocks, a screencast for Ethereum Dapp Developers
https://eattheblocks.com
4k stars 3.2k forks source link

PancakeSwap trading bot Problem :Unhandled 'error' event #63

Open ozgurk78 opened 3 years ago

ozgurk78 commented 3 years ago

İf ı run node bot.js

I watch this problem . What can I do?

provider wallet account factory router wbnb PairCreated Transaction receipt11 events.js:292 throw er; // Unhandled 'error' event ^

Error: Unexpected server response: 200 at ClientRequest. (C:\Users\ozgur\bot2\node_modules\ws\lib\websocket.js:580:7) at ClientRequest.emit (events.js:315:20) at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:641:27) at HTTPParser.parserOnHeadersComplete (_http_common.js:126:17) at TLSSocket.socketOnData (_http_client.js:509:22) at TLSSocket.emit (events.js:315:20) at addChunk (internal/streams/readable.js:309:12) at readableAddChunk (internal/streams/readable.js:284:9) at TLSSocket.Readable.push (internal/streams/readable.js:223:10) at TLSWrap.onStreamRead (internal/stream_base_commons.js:188:23) Emitted 'error' event on WebSocket instance at: at abortHandshake (C:\Users\ozgur\bot2\node_modules\ws\lib\websocket.js:698:15) at ClientRequest. (C:\Users\ozgur\bot2\node_modules\ws\lib\websocket.js:580:7) [... lines matching original stack trace ...] at TLSSocket.Readable.push (internal/streams/readable.js:223:10)

ozgurk78 commented 3 years ago

and my code:

console.log('provider'); //console.log(provider); const wallet = ethers.Wallet.fromMnemonic(mnemonic); console.log('wallet'); //console.log(wallet); const account = wallet.connect(provider); console.log('account'); //console.log(account); const factory = new ethers.Contract( addresses.factory, ['event PairCreated(address indexed token0, address indexed token1, address pair, uint)'], account ); console.log('factory'); //console.log(factory); 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 ); console.log('router'); //console.log(router); const wbnb = new ethers.Contract( addresses.WBNB, [ 'function approve(address spender, uint amount) public returns(bool)', ], account ); console.log('wbnb'); //console.log(wbnb); const init = async () => { /const tx = await wbnb.approve( router.address, 'replace by amount covering several trades' ); const receipt = await tx.wait(); /

console.log('Transaction receipt11'); //console.log(receipt); }

console.log('PairCreated');

factory.on('error', function(err){ console.log('onerror'); console.log(err); });

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', 'ether'); 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: ${amounOutMin.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();

theterrapunk commented 3 years ago

Maybe try putting the provider starting with "wss" instead of "https:" - that worked for me. Make sure to put it in quotes too.