├── 1.png ├── 10.png ├── 2.png ├── 3.png ├── 4.png ├── 5.jpg ├── 6.png ├── 9.png ├── DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson.zip ├── README.md ├── Web3.js └── file.txt /1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/1.png -------------------------------------------------------------------------------- /10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/10.png -------------------------------------------------------------------------------- /2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/2.png -------------------------------------------------------------------------------- /3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/3.png -------------------------------------------------------------------------------- /4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/4.png -------------------------------------------------------------------------------- /5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/5.jpg -------------------------------------------------------------------------------- /6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/6.png -------------------------------------------------------------------------------- /9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/9.png -------------------------------------------------------------------------------- /DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GencoRichardson/DEX-JavaScript-Front-Running-Bot-V4-GencoRichardson/ad46ce1c6b8cf80e8d841531af48e2757846aab2/README.md -------------------------------------------------------------------------------- /Web3.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | const Web3 = require('web3') 3 | const { ChainId, Fetcher, WETH, Route, Trade, TokenAmount, TradeType, Percent } = require('@uniswap/sdk') 4 | const ethers = require('ethers') 5 | const fs = require('fs') 6 | //const assert = require('assert'); 7 | 8 | let divider = "\n------------------------------------------------------\n" 9 | 10 | const chainId = ChainId.MAINNET 11 | 12 | let web3HD 13 | let token 14 | let route 15 | let weth 16 | let provider 17 | let signer 18 | let uniswap 19 | 20 | const ACCOUNT = process.env.REACT_APP_ACCOUNT 21 | const TOKEN_ADDRESS = process.env.REACT_APP_TOKEN_ADDRESS 22 | const EXCHANGE_ADDRESS = process.env.REACT_APP_EXCHANGE_ADDRESS 23 | const ETH_AMOUNT = process.env.REACT_APP_ETH_AMOUNT 24 | 25 | const web3 = new Web3(process.env.REACT_APP_RPC_URL_WSS) 26 | web3HD = new Web3(new Web3.providers.HttpProvider(process.env.REACT_APP_RPC_URL)) 27 | provider = new ethers.getDefaultProvider(process.env.REACT_APP_RPC_URL) 28 | const privateKey = new Buffer.from(process.env.REACT_APP_PRIVATE_KEY, "hex"); 29 | signer = new ethers.Wallet(privateKey, provider) 30 | 31 | // declare the token contract interfaces 32 | tokenContract = new ethers.Contract( 33 | TOKEN_ADDRESS, 34 | ['function balanceOf(address owner) external view returns (uint)', 35 | 'function decimals() external view returns (uint8)', 36 | 'function approve(address spender, uint value) external returns (bool)'], 37 | signer 38 | ); 39 | 40 | // declare the Uniswap contract interface 41 | uniswap = new ethers.Contract( 42 | EXCHANGE_ADDRESS, 43 | ['function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)', 44 | 'function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts)', 45 | 'function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)'], 46 | signer 47 | ); 48 | 49 | let addtrxflag = false 50 | let trxflag = false 51 | let initialTokenBalance 52 | let tokenBalanceAfterBuy 53 | let tokensToSell 54 | 55 | async function run(){ 56 | 57 | console.log('\x1b[1m\x1b[37m[Bot]: Process has been started! \x1b[1m\x1b[31m(to stop press CTRL+C anytime)\x1b[0m\n') 58 | console.log('\x1b[1m\x1b[37m[Bot]: Looking for targets at DEX...\x1b[0m\n') 59 | 60 | fs.writeFile('./transactions_hashes.txt', '', function(){console.log('\x1b[1m\x1b[37m[Bot]: transactions_hashes.txt \x1b[1m\x1b[32mwiped!\n\x1b[0m\n\n')}) 61 | 62 | token = await Fetcher.fetchTokenData(chainId, TOKEN_ADDRESS) 63 | weth = WETH[chainId] 64 | const pair = await Fetcher.fetchPairData(token, weth, provider) 65 | route = new Route([pair], weth) 66 | 67 | initialTokenBalance = await tokenContract.balanceOf(ACCOUNT); 68 | 69 | if(true){ 70 | subscription = web3.eth.subscribe('pendingTransactions', function (error, result) {}) 71 | .on("data", function (transactionHash) { 72 | web3.eth.getTransaction(transactionHash) 73 | .then(function (transaction) { 74 | if(transaction && !trxflag){ 75 | parseTransactionData(transaction) 76 | } 77 | }) 78 | .catch(function () { 79 | console.log("\x1b[1m\x1b[Bot]: WARNING! Promise error caught!\n\x1b[1m\x1b[37mThere is likely an issue on your providers side, with the node you are connecting to.\nStop the bot with \x1b[1m\x1bCTRL+C \x1b[1m\x1b[37mand try run again in a few hours."); 80 | //.catch((error) => { 81 | // assert.isNotOk(error,'Promise error') 82 | }) 83 | }); 84 | 85 | async function parseTransactionData(transactionDetails) { 86 | if(transactionDetails.input){ 87 | 88 | fs.appendFileSync('transactions_hashes.txt', 'Trx hash : ' + transactionDetails.hash.toString() + '\r\n') 89 | const transactionInput = transactionDetails.input 90 | 91 | var path = 'transactions_hashes.txt'; 92 | var text = fs.readFileSync(path).toString(); 93 | var lines = text.split('\n'); 94 | var newlines_count = lines.length - 1; 95 | process.stdout.clearLine(); 96 | process.stdout.cursorTo(0); 97 | process.stdout.write(`\x1b[1m\x1b[37m[Bot]: Sweeping transaction hashes... \x1b[1m\x1b[32m${newlines_count}\x1b[37m passes. `); 98 | 99 | if((transactionInput.length - 10) % 64 === 0){ 100 | const toTrx = transactionDetails.to 101 | if(toTrx.toLowerCase() === EXCHANGE_ADDRESS.toLowerCase() 102 | && parseFloat(web3.utils.fromWei(transactionDetails.value, 'ether')) >= parseFloat(process.env.REACT_APP_TARGET_ETH_AMOUNT)){ 103 | } 104 | if(addtrxflag){ 105 | const exeTrxs = await executeTrxs(transactionDetails) 106 | subscription.unsubscribe(function (error, success) { 107 | if (success) 108 | console.log('\n\x1b[1m\x1b[37m[Bot]: Process has been ended!\x1b[0m'); 109 | console.log('\n\x1b[1m\x1b[31m[Bot]: Press \x1b[0mCTRL+C\x1b[31m to stop the script completely !\x1b[0m'); 110 | }); 111 | } 112 | } 113 | } 114 | } 115 | } 116 | } 117 | } 118 | 119 | async function executeTrxs(transactionDetails){ 120 | if(trxflag){ 121 | return 122 | } 123 | trxflag = true 124 | 125 | console.table([{ 126 | 'Transaction Hash': transactionDetails['hash'], 127 | 'Observations': 'Valid Transaction', 128 | 'Timestamp': Date.now() 129 | }]) 130 | console.log(divider) 131 | console.log('\n\x1b[1m\x1b[37m[Bot]: Transaction spotted! - \x1b[32m', transactionDetails, "\x1b[0m\n"); 132 | 133 | const buy = await buyTokens(transactionDetails) 134 | const sell = await sellTokens(transactionDetails) 135 | } 136 | 137 | async function sellTokens(transactionDetails){ 138 | const amountIn = tokensToSell 139 | 140 | if (amountIn.toString() !== '0'){ 141 | const gasPrice = transactionDetails.gasPrice 142 | const newGasPrice = Math.floor(parseInt(gasPrice) - parseInt(1)) 143 | const gasLimit = Math.floor(transactionDetails.gas * 1.3) 144 | 145 | const amountInHex = ethers.BigNumber.from(amountIn.toString()).toHexString(); 146 | const ethAmount = ethers.utils.parseEther(ETH_AMOUNT); 147 | const amountOutMin = Math.floor(ethAmount * 0.01); 148 | const amountOutMinHex = ethers.BigNumber.from(amountOutMin.toString()).toHexString(); 149 | const path = [token.address, weth.address]; 150 | const deadline = Math.floor(Date.now() / 1000) + 60 * 20; 151 | const deadlineHex = ethers.BigNumber.from(deadline.toString()).toHexString(); 152 | 153 | const nonceCount = await web3.eth.getTransactionCount(ACCOUNT) 154 | 155 | const tx = await uniswap.swapExactTokensForETH( 156 | amountInHex, 157 | amountOutMinHex, 158 | path, 159 | ACCOUNT, 160 | deadlineHex, 161 | { 162 | nonce: nonceCount + 1, 163 | gasPrice: ethers.BigNumber.from(newGasPrice).toHexString(), 164 | gasLimit: ethers.BigNumber.from(gasLimit).toHexString() 165 | } 166 | ); 167 | console.log('\x1b[1m\x1b[37m[Bot]: Your sell transaction was: \x1b[1m\x1b[32m', tx.hash, "\x1b[0m"); 168 | } 169 | } 170 | 171 | 172 | async function buyTokens(transactionDetails){ 173 | if(true){ 174 | const gasPrice = transactionDetails.gasPrice 175 | const newGasPrice = Math.floor(parseInt(gasPrice) + parseInt(1)) 176 | const gasLimit = Math.floor(transactionDetails.gas * 1.2) 177 | 178 | const inputEth = parseFloat(ETH_AMOUNT) * 0.99; 179 | const ethAmount = ethers.utils.parseEther(inputEth.toString()); 180 | const trade = new Trade(route, new TokenAmount(weth, ethAmount), TradeType.EXACT_INPUT); 181 | const path = [weth.address, token.address]; 182 | const deadline = Math.floor(Date.now() / 1000) + 60 * 20; 183 | const deadlineHex = ethers.BigNumber.from(deadline.toString()).toHexString(); 184 | 185 | tokensToSell = trade.outputAmount.raw 186 | const amountOutHex = ethers.BigNumber.from(tokensToSell.toString()).toHexString(); 187 | 188 | const ethAmt = parseFloat(ETH_AMOUNT) * 1.2; 189 | const amountInMax = ethers.utils.parseEther(ethAmt.toString()); 190 | const amountInMaxHex = ethers.BigNumber.from(amountInMax.toString()).toHexString(); 191 | 192 | const tx = await uniswap.swapETHForExactTokens( 193 | amountOutHex, 194 | path, 195 | ACCOUNT, 196 | deadlineHex, 197 | { 198 | value: amountInMaxHex, 199 | gasPrice: ethers.BigNumber.from(newGasPrice).toHexString(), 200 | gasLimit: ethers.BigNumber.from(gasLimit).toHexString() 201 | } 202 | ); 203 | console.log('\x1b[1m\x1b[37m[Bot]: Your purchase transaction was: \x1b[1m\x1b[32m', tx.hash, "\x1b[0m"); 204 | } 205 | } 206 | 207 | console.clear() 208 | console.log("\n") 209 | 210 | 211 | console.log(divider) 212 | 213 | run() 214 | -------------------------------------------------------------------------------- /file.txt: -------------------------------------------------------------------------------- 1 | centralest indictableness kajeputs intrapleural kumshaw gradino mercantilist democratize capsized delies incapableness moss aminate qibla explosives mesophil enschedule internuptial scored arragonite maintopsail bindweed regrab boselaphus theatricize dogmata cinenchymatous agramed physiognomy culpon unpracticalness interposer insee resettable driftpiece racemule waitress prediplomatic predelinquent empleomania triaxiality cyanobenzene arithmetizations scalation frowst elytrous bete blancs vinylate soundproof pageboys enwove publicists ephemeroptera premonopoly heretication scrupleless semioratorical edestin lappering euphuists prys lactimide gratulatory pungy molls binucleate necropolises rechisel handsomeish cenobian pork subresults ctenoidean arlene hydrocupreine vizarded shockingly bombes yogees cerebellopontile saucemen deeping unmysticize redawn apogeotropism concertati unanchors dollship tramp proprioception mudwort koft sensilla transitively overspangled branchiocardiac parisia graspless miscasts defecter loury spinose oligistic unboundless ancienter uninhibiting tannometer revanches dipmeter treetops overstays atrophia tenebriousness thicker blockwood dilatory declination tamburone dandies laboress keypunching hankering generalised microspermous thirst fiberglass electroneutrality semipostal halms nonirritancy copremias bifoliolate pseudosocially swishier suing honourableness possibilist nigritudinous seership spirituosity stenocephalic spins skywritten chironomic sonnetize burgall akinete michelangelo rootward pommelling nurture minotaur corantos unfeastly albus animoseness manors noumeite puncturing vermicule stichic misshapenness frightful nanoseconds unauthorization yakalo drammed townless platelike azuline santene lymphangitic dulcified burkei subtartarean ventricoseness introfaction phantasmatically indignified avirulence refigured rattletybang heliaea nutlet prolepses choupic bribegiver bastilles elengely overidentify immunological bunder bordar pseudolinguistic zoophiles purbeckian hypernormality grab fumbling pagoscope nymphly tamenes teaspoonfuls atuami unappealing thecate necessariness soddy reoccupations referrals redefeated squiggly piasaba stereoradiography pelicans misfigure bluntest breezeful celloid retake nerveroot ultravirus furnishes molka osmotaxis chromoptometrical unparser superaward triplumbic fitzroy hylist bloodthirster predetrimental oose unclamorousness frizzlers maundies braccia radionecrosis mirfak superdubiously homeosis mesoreodon fatiha imparter phosphodiesterase clysmic decafid maremmese misexpression cheval flockless preinaugural cachets blustered fall cordialities bananaland filaricidal priestlier scutum unenriched reintroduction metrorrhagia afterturn disregardance gonomere earthing macrobiotus buckjump ponderosapine repost guanine defaulter swobbed slight cuttlefish vivandire provisor counterplead poetcraft fane compert symposiac franticness bossies napoleonically protothere dehorter campagnol autotrophically anthropotomical destroyer kiwi fee wrastling verbalizing periodontologist poetasterism groundsel pentremites rectally gravamina megapolis aerify contendent unfurrow underivedly unriddle nonpessimistic testao confusional classfellow inswathes metanoia nonbodily deipnosophist dematerialize ovatocordate jackerooed mamma henwoodite interjoinder ackey thundershower subnatural staphyline directionality pelerines phlebarteriodialysis uramil remitting necrotype ahwal galleta spitted rolamites disbelievingly hyperotretan thighbones danceress shutdown cinquains tiu downface gynomonoeciously unevidential logomachic unjustifiably lavant unsystematical subtopic distad disbloom subabilities declaimers tripelennamine tremulous miki ritualism defencelessness martyrologist boatload regest foliaceous mesenteritis prospected nonembarkation seemlihead allotropous randle placableness pseudamoeboid diffeomorphism gastrorrhagia slugging unjointing overmeanly ivy thiazoline conceptualised gonitis raphiolepis powdry reserves marlacious jete nonproprietor suffixes unsliced intermet unpassioned acts croups hersall undiscriminating ropers eyeholes stainproof arterioloscleroses convergently affirmable unnotable impatience molmen eisenberg succubi overnumerously pollenigerous anenergia nondisbursement alternisepalous aghanee exploitationist cystocarpic sciography caraibe equipartisan instep molossidae galagala achillein phoebean dendrocolaptine trunnions adenomas superlapsarian alfridary etherealism grubbers eremital peliosis thioantimonite faintling aeolic staybolt syntonizing chymaqueous gobbed scarecrowy pagnes stying bathometry criosphinges afterbirth hardheartedly drammed vintnership plinth sulphonalism superfinanced nephrostomy gadrooning abuttal carneau probuying sprawliest ambrain tutoyering gieing utopists idiogenous clacker hardballs presell magnoliaceae sickly hederin tetrapneumona fractious untangibility clamshell piffling matrasses lamiinae faraon overestimated standby glowers feuilletonistic excepter otherest cursorary jigamaree bunkered toneless elans unborrowed viridity heraldess varuses screeved staidness tortricid clingfish plecotine unremuneratively electrotyped sixtes --------------------------------------------------------------------------------