├── .gitattributes ├── .idea ├── .gitignore ├── Limit-Sniper.iml ├── inspectionProfiles │ └── profiles_settings.xml ├── misc.xml ├── modules.xml └── vcs.xml ├── README.md ├── abi ├── factory.json ├── factory2.json ├── joeRouter.json ├── koffee.json ├── lp.json ├── pangolin.json ├── quoter.json ├── router.json ├── routerv3.json └── standard.json ├── requirements.txt ├── settings.json ├── sniper.py ├── tokens.json └── transactions.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/Limit-Sniper.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Limit Sniper 2 | A mempool sniping bot for Ethereum, Binance Smart Chain, Matic, & Fantom that is able to scan for new liquidity adds on token launches, so as to be able to buy a token as soon as liquidity is added --> in the same block 3 | 4 | *This bot was built as a learning project for me to learn how to use Web.py, Erc20, & improve my coding skills please use at your own risk!* 5 | 6 | #### Grab the Latest Release: 7 | https://github.com/CryptoGnome/Limit-Sniper/releases 8 | 9 | ## HOW TO INSTALL Sniper Bot 10 | There are 3 ways to install Sniper Bot : 11 | 12 |   13 | 14 | 15 | ### 1. Run The Python Code Locally [*this is most ideal and can work on any OS*] 16 | Here is a tutorial step-by-step: 17 | - [x] Download last Sniper Bot code on the "Code" page https://github.com/CryptoGnome/Limit-Sniper by clicking on Code > Download Zip: 18 | 19 | 20 | - [x] Unzip file 21 | - [x] Install Python on your computer : https://www.python.org/downloads/ 22 | 23 | **PLEASE ADD IT TO PATH BY CHECKING THIS OPTION:** 24 | 25 | 26 | 27 | - [x] Install Visual Studio : https://visualstudio.microsoft.com/fr/thank-you-downloading-visual-studio/?sku=Community&rel=17 28 | 29 | Please install the default package and all those options : 30 | ![image](https://user-images.githubusercontent.com/70858574/145580447-bd648d6d-c3ce-4dd9-8527-84ecfb5f30cc.png) 31 | 32 | - [x] Open **Windows Powershell** (or Mac Terminal on MacOs) 33 | 34 | - [X] Run this command to locate Sniper folder : 35 | 36 | `Get-ChildItem -Filter sniper.py -Recurse -ErrorAction SilentlyContinue -Force` 37 | 38 | - [x] It should look like this: 39 | 40 | 41 | 42 | - [X] Copy the Directory 43 | 44 | (example : `C:\Users\Administrator\Desktop\Limit-Sniper-main`) 45 | 46 | - [X] Paste the Directory after the "cd" command to navigate through the bot folder 47 | 48 | (example : `cd C:\Users\Administrator\Desktop\Limit-Sniper-main`) 49 | 50 | 51 | 52 | - [x] Run command: `pip install -r requirements.txt` --> this will install all the packages needed to run LimitSwap 53 | 54 |   55 | 56 | ✅ ✅ ✅ And it's done! ✅ ✅ ✅ 57 | 58 |   59 | 60 | - [x] Simply **double-click on "sniper.py"** and it will run, since you've installed Python 👍👍 61 | 62 |   63 | 64 | #### Pros and cons 65 | 🟢 : you are sure of the code that is running on your computer 66 | 67 | 🔴 : little bit complicated 68 | 69 |   70 |   71 | 72 | ### 2. Download the pre-compiled package [*This can lag behind current version*] 73 | That we provide on the Release page : it's a .exe file that you can run on your computer. 74 | https://github.com/CryptoGnome/Limit-Sniper/releases 75 | 76 | #### Pros and cons 77 | 🟢 : very easy to setup 78 | 79 | 🔴 : it's pre-compiled, so you cannot check the Source Code 80 | 81 |   82 |   83 | 84 | ### 3. With Docker 85 | 86 | #### Requirements 87 | MacOS and Windows users require Docker for Desktop https://www.docker.com/products/docker-desktop 88 | Ubuntu Linux require Docker installed `sudo apt-get install docker.io` 89 | 90 | #### Usage 91 | Navigate into the bot directory and build the Docker image by executing the following command: 92 | 93 | `docker build -t limit_sniper .` 94 | 95 | (For MacOS and Linux) Still within the main directory you can run Docker via: 96 | 97 | `docker run --rm --name limit-sniper -it -v $(pwd)/settings.json:/app/settings.json -v $(pwd)/tokens.json:/app/tokens.json limit_sniper` 98 | 99 | (For Windows with Powershell) 100 | 101 | `docker run --rm --name limit-sniper -it -v $PWD/settings.json:/app/settings.json -v $PWD/tokens.json:/app/tokens.json limit_sniper` 102 | 103 | If you wish to run the container in the background please include -d for detached. 104 | 105 | The streaming container logs can be visualised with `docker logs -f limit_sniper` 106 | 107 | To stop the bot `docker stop limit_sniper` 108 | 109 | #### Pros and cons 110 | 🟢 : easy to setup if you know Docker 111 | 112 | 🔴 : needs Docker 113 | 114 |   115 | 116 |   117 | 118 | ![alt text](https://gblobscdn.gitbook.com/assets%2F-MZTPzgUqGxiIf6m_uoa%2F-MdT8RECUAK42MnmqRTa%2F-MdT9crcWoeNiTkmhokB%2Fsniper-works.png) 119 | 120 | 121 | ## Developers 🔧 122 | Want to help contribute to LimitSwap, reach out on telegram all you need to do is make changes or fix bugs and we will pay developer bounties in $LIMIT for helping make the bot batter! 123 | 124 | ## Links & Socials: 125 | 126 | #### WiKi 127 | https://limitswapv3.gitbook.io/limitswap/ 128 | 129 | #### Website: 130 | https://www.limitswap.com/ 131 | 132 | #### Twitter: 133 | https://twitter.com/LimitSwap 134 | 135 | #### Telegram: 136 | https://t.me/LimitSwap 137 | -------------------------------------------------------------------------------- /abi/factory.json: -------------------------------------------------------------------------------- 1 | [{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"constant":true,"inputs":[],"name":"INIT_CODE_PAIR_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] -------------------------------------------------------------------------------- /abi/factory2.json: -------------------------------------------------------------------------------- 1 | [{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"constant":true,"inputs":[],"name":"INIT_CODE_PAIR_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] -------------------------------------------------------------------------------- /abi/joeRouter.json: -------------------------------------------------------------------------------- 1 | [{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WAVAX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WAVAX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAXSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityAVAXWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapAVAXForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactAVAXForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactAVAXForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForAVAX","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForAVAXSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactAVAX","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] -------------------------------------------------------------------------------- /abi/koffee.json: -------------------------------------------------------------------------------- 1 | [{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WKCS","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WKCS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountKCSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityKCS","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountKCS","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountKCSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityKCS","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountKCS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountKCSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityKCSSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountKCS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountKCSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityKCSWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountKCS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountKCSMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityKCSWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountKCS","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactKCSForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactKCSForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForKCS","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForKCSSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapKCSForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactKCS","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] -------------------------------------------------------------------------------- /abi/lp.json: -------------------------------------------------------------------------------- 1 | [{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] -------------------------------------------------------------------------------- /abi/pangolin.json: -------------------------------------------------------------------------------- 1 | [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_factory","internalType":"address"},{"type":"address","name":"_WAVAX","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WAVAX","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"addLiquidity","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"amountADesired","internalType":"uint256"},{"type":"uint256","name":"amountBDesired","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"addLiquidityAVAX","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountTokenDesired","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"}],"name":"getAmountIn","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"reserveIn","internalType":"uint256"},{"type":"uint256","name":"reserveOut","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"}],"name":"getAmountOut","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"reserveIn","internalType":"uint256"},{"type":"uint256","name":"reserveOut","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"getAmountsIn","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"getAmountsOut","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"quote","inputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"reserveA","internalType":"uint256"},{"type":"uint256","name":"reserveB","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"removeLiquidity","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAX","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXWithPermit","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"removeLiquidityWithPermit","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapAVAXForExactTokens","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactAVAXForTokens","inputs":[{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"swapExactAVAXForTokensSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactTokensForAVAX","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapExactTokensForAVAXSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactTokensForTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapTokensForExactAVAX","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMax","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapTokensForExactTokens","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMax","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}] -------------------------------------------------------------------------------- /abi/quoter.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [ 4 | { "internalType": "address", "name": "_factory", "type": "address" }, 5 | { "internalType": "address", "name": "_WETH9", "type": "address" } 6 | ], 7 | "stateMutability": "nonpayable", 8 | "type": "constructor" 9 | }, 10 | { 11 | "inputs": [], 12 | "name": "WETH9", 13 | "outputs": [{ "internalType": "address", "name": "", "type": "address" }], 14 | "stateMutability": "view", 15 | "type": "function" 16 | }, 17 | { 18 | "inputs": [], 19 | "name": "factory", 20 | "outputs": [{ "internalType": "address", "name": "", "type": "address" }], 21 | "stateMutability": "view", 22 | "type": "function" 23 | }, 24 | { 25 | "inputs": [ 26 | { "internalType": "bytes", "name": "path", "type": "bytes" }, 27 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" } 28 | ], 29 | "name": "quoteExactInput", 30 | "outputs": [ 31 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" } 32 | ], 33 | "stateMutability": "nonpayable", 34 | "type": "function" 35 | }, 36 | { 37 | "inputs": [ 38 | { "internalType": "address", "name": "tokenIn", "type": "address" }, 39 | { "internalType": "address", "name": "tokenOut", "type": "address" }, 40 | { "internalType": "uint24", "name": "fee", "type": "uint24" }, 41 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, 42 | { 43 | "internalType": "uint160", 44 | "name": "sqrtPriceLimitX96", 45 | "type": "uint160" 46 | } 47 | ], 48 | "name": "quoteExactInputSingle", 49 | "outputs": [ 50 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" } 51 | ], 52 | "stateMutability": "nonpayable", 53 | "type": "function" 54 | }, 55 | { 56 | "inputs": [ 57 | { "internalType": "bytes", "name": "path", "type": "bytes" }, 58 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" } 59 | ], 60 | "name": "quoteExactOutput", 61 | "outputs": [ 62 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" } 63 | ], 64 | "stateMutability": "nonpayable", 65 | "type": "function" 66 | }, 67 | { 68 | "inputs": [ 69 | { "internalType": "address", "name": "tokenIn", "type": "address" }, 70 | { "internalType": "address", "name": "tokenOut", "type": "address" }, 71 | { "internalType": "uint24", "name": "fee", "type": "uint24" }, 72 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, 73 | { 74 | "internalType": "uint160", 75 | "name": "sqrtPriceLimitX96", 76 | "type": "uint160" 77 | } 78 | ], 79 | "name": "quoteExactOutputSingle", 80 | "outputs": [ 81 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" } 82 | ], 83 | "stateMutability": "nonpayable", 84 | "type": "function" 85 | }, 86 | { 87 | "inputs": [ 88 | { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, 89 | { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, 90 | { "internalType": "bytes", "name": "path", "type": "bytes" } 91 | ], 92 | "name": "uniswapV3SwapCallback", 93 | "outputs": [], 94 | "stateMutability": "view", 95 | "type": "function" 96 | } 97 | ] -------------------------------------------------------------------------------- /abi/router.json: -------------------------------------------------------------------------------- 1 | [{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] -------------------------------------------------------------------------------- /abi/routerv3.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [ 4 | { "internalType": "address", "name": "_factory", "type": "address" }, 5 | { "internalType": "address", "name": "_WETH9", "type": "address" } 6 | ], 7 | "stateMutability": "nonpayable", 8 | "type": "constructor" 9 | }, 10 | { 11 | "inputs": [], 12 | "name": "WETH9", 13 | "outputs": [{ "internalType": "address", "name": "", "type": "address" }], 14 | "stateMutability": "view", 15 | "type": "function" 16 | }, 17 | { 18 | "inputs": [ 19 | { 20 | "components": [ 21 | { "internalType": "bytes", "name": "path", "type": "bytes" }, 22 | { "internalType": "address", "name": "recipient", "type": "address" }, 23 | { "internalType": "uint256", "name": "deadline", "type": "uint256" }, 24 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, 25 | { 26 | "internalType": "uint256", 27 | "name": "amountOutMinimum", 28 | "type": "uint256" 29 | } 30 | ], 31 | "internalType": "struct ISwapRouter.ExactInputParams", 32 | "name": "params", 33 | "type": "tuple" 34 | } 35 | ], 36 | "name": "exactInput", 37 | "outputs": [ 38 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" } 39 | ], 40 | "stateMutability": "payable", 41 | "type": "function" 42 | }, 43 | { 44 | "inputs": [ 45 | { 46 | "components": [ 47 | { "internalType": "address", "name": "tokenIn", "type": "address" }, 48 | { "internalType": "address", "name": "tokenOut", "type": "address" }, 49 | { "internalType": "uint24", "name": "fee", "type": "uint24" }, 50 | { "internalType": "address", "name": "recipient", "type": "address" }, 51 | { "internalType": "uint256", "name": "deadline", "type": "uint256" }, 52 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, 53 | { 54 | "internalType": "uint256", 55 | "name": "amountOutMinimum", 56 | "type": "uint256" 57 | }, 58 | { 59 | "internalType": "uint160", 60 | "name": "sqrtPriceLimitX96", 61 | "type": "uint160" 62 | } 63 | ], 64 | "internalType": "struct ISwapRouter.ExactInputSingleParams", 65 | "name": "params", 66 | "type": "tuple" 67 | } 68 | ], 69 | "name": "exactInputSingle", 70 | "outputs": [ 71 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" } 72 | ], 73 | "stateMutability": "payable", 74 | "type": "function" 75 | }, 76 | { 77 | "inputs": [ 78 | { 79 | "components": [ 80 | { "internalType": "bytes", "name": "path", "type": "bytes" }, 81 | { "internalType": "address", "name": "recipient", "type": "address" }, 82 | { "internalType": "uint256", "name": "deadline", "type": "uint256" }, 83 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, 84 | { 85 | "internalType": "uint256", 86 | "name": "amountInMaximum", 87 | "type": "uint256" 88 | } 89 | ], 90 | "internalType": "struct ISwapRouter.ExactOutputParams", 91 | "name": "params", 92 | "type": "tuple" 93 | } 94 | ], 95 | "name": "exactOutput", 96 | "outputs": [ 97 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" } 98 | ], 99 | "stateMutability": "payable", 100 | "type": "function" 101 | }, 102 | { 103 | "inputs": [ 104 | { 105 | "components": [ 106 | { "internalType": "address", "name": "tokenIn", "type": "address" }, 107 | { "internalType": "address", "name": "tokenOut", "type": "address" }, 108 | { "internalType": "uint24", "name": "fee", "type": "uint24" }, 109 | { "internalType": "address", "name": "recipient", "type": "address" }, 110 | { "internalType": "uint256", "name": "deadline", "type": "uint256" }, 111 | { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, 112 | { 113 | "internalType": "uint256", 114 | "name": "amountInMaximum", 115 | "type": "uint256" 116 | }, 117 | { 118 | "internalType": "uint160", 119 | "name": "sqrtPriceLimitX96", 120 | "type": "uint160" 121 | } 122 | ], 123 | "internalType": "struct ISwapRouter.ExactOutputSingleParams", 124 | "name": "params", 125 | "type": "tuple" 126 | } 127 | ], 128 | "name": "exactOutputSingle", 129 | "outputs": [ 130 | { "internalType": "uint256", "name": "amountIn", "type": "uint256" } 131 | ], 132 | "stateMutability": "payable", 133 | "type": "function" 134 | }, 135 | { 136 | "inputs": [], 137 | "name": "factory", 138 | "outputs": [{ "internalType": "address", "name": "", "type": "address" }], 139 | "stateMutability": "view", 140 | "type": "function" 141 | }, 142 | { 143 | "inputs": [ 144 | { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } 145 | ], 146 | "name": "multicall", 147 | "outputs": [ 148 | { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } 149 | ], 150 | "stateMutability": "payable", 151 | "type": "function" 152 | }, 153 | { 154 | "inputs": [], 155 | "name": "refundETH", 156 | "outputs": [], 157 | "stateMutability": "payable", 158 | "type": "function" 159 | }, 160 | { 161 | "inputs": [ 162 | { "internalType": "address", "name": "token", "type": "address" }, 163 | { "internalType": "uint256", "name": "value", "type": "uint256" }, 164 | { "internalType": "uint256", "name": "deadline", "type": "uint256" }, 165 | { "internalType": "uint8", "name": "v", "type": "uint8" }, 166 | { "internalType": "bytes32", "name": "r", "type": "bytes32" }, 167 | { "internalType": "bytes32", "name": "s", "type": "bytes32" } 168 | ], 169 | "name": "selfPermit", 170 | "outputs": [], 171 | "stateMutability": "payable", 172 | "type": "function" 173 | }, 174 | { 175 | "inputs": [ 176 | { "internalType": "address", "name": "token", "type": "address" }, 177 | { "internalType": "uint256", "name": "nonce", "type": "uint256" }, 178 | { "internalType": "uint256", "name": "expiry", "type": "uint256" }, 179 | { "internalType": "uint8", "name": "v", "type": "uint8" }, 180 | { "internalType": "bytes32", "name": "r", "type": "bytes32" }, 181 | { "internalType": "bytes32", "name": "s", "type": "bytes32" } 182 | ], 183 | "name": "selfPermitAllowed", 184 | "outputs": [], 185 | "stateMutability": "payable", 186 | "type": "function" 187 | }, 188 | { 189 | "inputs": [ 190 | { "internalType": "address", "name": "token", "type": "address" }, 191 | { "internalType": "uint256", "name": "nonce", "type": "uint256" }, 192 | { "internalType": "uint256", "name": "expiry", "type": "uint256" }, 193 | { "internalType": "uint8", "name": "v", "type": "uint8" }, 194 | { "internalType": "bytes32", "name": "r", "type": "bytes32" }, 195 | { "internalType": "bytes32", "name": "s", "type": "bytes32" } 196 | ], 197 | "name": "selfPermitAllowedIfNecessary", 198 | "outputs": [], 199 | "stateMutability": "payable", 200 | "type": "function" 201 | }, 202 | { 203 | "inputs": [ 204 | { "internalType": "address", "name": "token", "type": "address" }, 205 | { "internalType": "uint256", "name": "value", "type": "uint256" }, 206 | { "internalType": "uint256", "name": "deadline", "type": "uint256" }, 207 | { "internalType": "uint8", "name": "v", "type": "uint8" }, 208 | { "internalType": "bytes32", "name": "r", "type": "bytes32" }, 209 | { "internalType": "bytes32", "name": "s", "type": "bytes32" } 210 | ], 211 | "name": "selfPermitIfNecessary", 212 | "outputs": [], 213 | "stateMutability": "payable", 214 | "type": "function" 215 | }, 216 | { 217 | "inputs": [ 218 | { "internalType": "address", "name": "token", "type": "address" }, 219 | { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, 220 | { "internalType": "address", "name": "recipient", "type": "address" } 221 | ], 222 | "name": "sweepToken", 223 | "outputs": [], 224 | "stateMutability": "payable", 225 | "type": "function" 226 | }, 227 | { 228 | "inputs": [ 229 | { "internalType": "address", "name": "token", "type": "address" }, 230 | { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, 231 | { "internalType": "address", "name": "recipient", "type": "address" }, 232 | { "internalType": "uint256", "name": "feeBips", "type": "uint256" }, 233 | { "internalType": "address", "name": "feeRecipient", "type": "address" } 234 | ], 235 | "name": "sweepTokenWithFee", 236 | "outputs": [], 237 | "stateMutability": "payable", 238 | "type": "function" 239 | }, 240 | { 241 | "inputs": [ 242 | { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, 243 | { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, 244 | { "internalType": "bytes", "name": "_data", "type": "bytes" } 245 | ], 246 | "name": "uniswapV3SwapCallback", 247 | "outputs": [], 248 | "stateMutability": "nonpayable", 249 | "type": "function" 250 | }, 251 | { 252 | "inputs": [ 253 | { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, 254 | { "internalType": "address", "name": "recipient", "type": "address" } 255 | ], 256 | "name": "unwrapWETH9", 257 | "outputs": [], 258 | "stateMutability": "payable", 259 | "type": "function" 260 | }, 261 | { 262 | "inputs": [ 263 | { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, 264 | { "internalType": "address", "name": "recipient", "type": "address" }, 265 | { "internalType": "uint256", "name": "feeBips", "type": "uint256" }, 266 | { "internalType": "address", "name": "feeRecipient", "type": "address" } 267 | ], 268 | "name": "unwrapWETH9WithFee", 269 | "outputs": [], 270 | "stateMutability": "payable", 271 | "type": "function" 272 | }, 273 | { "stateMutability": "payable", "type": "receive" } 274 | ] -------------------------------------------------------------------------------- /abi/standard.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "constant": true, 4 | "inputs": [], 5 | "name": "name", 6 | "outputs": [ 7 | { 8 | "name": "", 9 | "type": "string" 10 | } 11 | ], 12 | "payable": false, 13 | "stateMutability": "view", 14 | "type": "function" 15 | }, 16 | { 17 | "constant": false, 18 | "inputs": [ 19 | { 20 | "name": "_spender", 21 | "type": "address" 22 | }, 23 | { 24 | "name": "_value", 25 | "type": "uint256" 26 | } 27 | ], 28 | "name": "approve", 29 | "outputs": [ 30 | { 31 | "name": "", 32 | "type": "bool" 33 | } 34 | ], 35 | "payable": false, 36 | "stateMutability": "nonpayable", 37 | "type": "function" 38 | }, 39 | { 40 | "constant": true, 41 | "inputs": [], 42 | "name": "totalSupply", 43 | "outputs": [ 44 | { 45 | "name": "", 46 | "type": "uint256" 47 | } 48 | ], 49 | "payable": false, 50 | "stateMutability": "view", 51 | "type": "function" 52 | }, 53 | { 54 | "constant": false, 55 | "inputs": [ 56 | { 57 | "name": "_from", 58 | "type": "address" 59 | }, 60 | { 61 | "name": "_to", 62 | "type": "address" 63 | }, 64 | { 65 | "name": "_value", 66 | "type": "uint256" 67 | } 68 | ], 69 | "name": "transferFrom", 70 | "outputs": [ 71 | { 72 | "name": "", 73 | "type": "bool" 74 | } 75 | ], 76 | "payable": false, 77 | "stateMutability": "nonpayable", 78 | "type": "function" 79 | }, 80 | { 81 | "constant": true, 82 | "inputs": [], 83 | "name": "decimals", 84 | "outputs": [ 85 | { 86 | "name": "", 87 | "type": "uint8" 88 | } 89 | ], 90 | "payable": false, 91 | "stateMutability": "view", 92 | "type": "function" 93 | }, 94 | { 95 | "constant": true, 96 | "inputs": [ 97 | { 98 | "name": "_owner", 99 | "type": "address" 100 | } 101 | ], 102 | "name": "balanceOf", 103 | "outputs": [ 104 | { 105 | "name": "balance", 106 | "type": "uint256" 107 | } 108 | ], 109 | "payable": false, 110 | "stateMutability": "view", 111 | "type": "function" 112 | }, 113 | { 114 | "constant": true, 115 | "inputs": [], 116 | "name": "symbol", 117 | "outputs": [ 118 | { 119 | "name": "", 120 | "type": "string" 121 | } 122 | ], 123 | "payable": false, 124 | "stateMutability": "view", 125 | "type": "function" 126 | }, 127 | { 128 | "constant": false, 129 | "inputs": [ 130 | { 131 | "name": "_to", 132 | "type": "address" 133 | }, 134 | { 135 | "name": "_value", 136 | "type": "uint256" 137 | } 138 | ], 139 | "name": "transfer", 140 | "outputs": [ 141 | { 142 | "name": "", 143 | "type": "bool" 144 | } 145 | ], 146 | "payable": false, 147 | "stateMutability": "nonpayable", 148 | "type": "function" 149 | }, 150 | { 151 | "constant": true, 152 | "inputs": [ 153 | { 154 | "name": "_owner", 155 | "type": "address" 156 | }, 157 | { 158 | "name": "_spender", 159 | "type": "address" 160 | } 161 | ], 162 | "name": "allowance", 163 | "outputs": [ 164 | { 165 | "name": "", 166 | "type": "uint256" 167 | } 168 | ], 169 | "payable": false, 170 | "stateMutability": "view", 171 | "type": "function" 172 | }, 173 | { 174 | "payable": true, 175 | "stateMutability": "payable", 176 | "type": "fallback" 177 | }, 178 | { 179 | "anonymous": false, 180 | "inputs": [ 181 | { 182 | "indexed": true, 183 | "name": "owner", 184 | "type": "address" 185 | }, 186 | { 187 | "indexed": true, 188 | "name": "spender", 189 | "type": "address" 190 | }, 191 | { 192 | "indexed": false, 193 | "name": "value", 194 | "type": "uint256" 195 | } 196 | ], 197 | "name": "Approval", 198 | "type": "event" 199 | }, 200 | { 201 | "anonymous": false, 202 | "inputs": [ 203 | { 204 | "indexed": true, 205 | "name": "from", 206 | "type": "address" 207 | }, 208 | { 209 | "indexed": true, 210 | "name": "to", 211 | "type": "address" 212 | }, 213 | { 214 | "indexed": false, 215 | "name": "value", 216 | "type": "uint256" 217 | } 218 | ], 219 | "name": "Transfer", 220 | "type": "event" 221 | } 222 | ] -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.8.1 2 | aiosignal==1.2.0 3 | async-timeout==4.0.1 4 | attrs==21.2.0 5 | base58==2.1.1 6 | bitarray==1.2.2 7 | certifi==2021.10.8 8 | charset-normalizer==2.0.7 9 | cryptocode==0.1 10 | cytoolz==0.11.2 11 | eth-abi==2.1.1 12 | eth-account==0.5.6 13 | eth-hash==0.3.2 14 | eth-keyfile==0.5.1 15 | eth-keys==0.3.3 16 | eth-rlp==0.2.1 17 | eth-typing==2.2.2 18 | eth-utils==1.10.0 19 | frozenlist==1.2.0 20 | hexbytes==0.2.2 21 | idna==3.3 22 | ipfshttpclient==0.8.0a2 23 | jsonschema==3.2.0 24 | lru-dict==1.1.7 25 | multiaddr==0.0.9 26 | multidict==5.2.0 27 | netaddr==0.8.0 28 | parsimonious==0.8.1 29 | protobuf==3.19.1 30 | pwinput==1.0.2 31 | pycryptodome==3.11.0 32 | pyrsistent==0.18.0 33 | pywin32==302; sys_platform == 'win32' 34 | requests==2.26.0 35 | rlp==2.0.1 36 | six==1.16.0 37 | toolz==0.11.2 38 | typing-extensions==4.0.0 39 | urllib3==1.26.7 40 | varint==1.0.2 41 | web3==5.24.0 42 | websockets==9.1 43 | yarl==1.7.2 44 | -------------------------------------------------------------------------------- /settings.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "LIMITWALLETPRIVATEKEY": "Private key here", 4 | "LIMITWALLETADDRESS": "wallet address here", 5 | "PRIVATEKEY": "private key of trading account here", 6 | "WALLETADDRESS": "wallet address of trading account here", 7 | "USECUSTOMNODE": "false", 8 | "CUSTOMNODE": "put your own node here if you want and make, USECUSTOMNODE = TRUE", 9 | "EXCHANGE": "pancakeswap", 10 | "DXSALE": "false", 11 | "DXPRESALECONTRACT": "0x8B9dC7c9052FC7Ac7f0AB2a84aEc238D96Eb869F" 12 | } 13 | ] -------------------------------------------------------------------------------- /sniper.py: -------------------------------------------------------------------------------- 1 | from web3 import Web3 2 | from time import sleep, time 3 | import json 4 | from decimal import Decimal 5 | import os 6 | from web3.exceptions import ABIFunctionNotFound, TransactionNotFound, BadFunctionCallOutput 7 | import logging 8 | from datetime import datetime 9 | import requests 10 | import sys 11 | import cryptocode, re, pwinput 12 | 13 | # global used to track if any settings need to be written to file 14 | settings_changed = False 15 | 16 | def timestamp(): 17 | timestamp = time() 18 | dt_object = datetime.fromtimestamp(timestamp) 19 | return dt_object 20 | 21 | 22 | """"""""""""""""""""""""""" 23 | //ERROR LOGGING 24 | """"""""""""""""""""""""""" 25 | log_format = '%(levelname)s: %(asctime)s %(message)s' 26 | logging.basicConfig(filename='./logs/errors.log', 27 | level=logging.INFO, 28 | format=log_format) 29 | 30 | 31 | logging.info("*************************************************************************************") 32 | logging.info("For Help & To Learn More About how the bot works please visit our wiki here:") 33 | logging.info("https://cryptognome.gitbook.io/limitswap/") 34 | logging.info("*************************************************************************************") 35 | 36 | 37 | 38 | """"""""""""""""""""""""""" 39 | //PRELOAD 40 | """"""""""""""""""""""""""" 41 | print(timestamp(), "Preloading Data") 42 | f = open('./settings.json', ) 43 | settings = json.load(f)[0] 44 | f.close() 45 | 46 | directory = './abi/' 47 | filename = "standard.json" 48 | file_path = os.path.join(directory, filename) 49 | with open(file_path) as json_file: 50 | standardAbi = json.load(json_file) 51 | 52 | directory = './abi/' 53 | filename = "lp.json" 54 | file_path = os.path.join(directory, filename) 55 | with open(file_path) as json_file: 56 | lpAbi = json.load(json_file) 57 | 58 | directory = './abi/' 59 | filename = "router.json" 60 | file_path = os.path.join(directory, filename) 61 | with open(file_path) as json_file: 62 | routerAbi = json.load(json_file) 63 | 64 | directory = './abi/' 65 | filename = "factory2.json" 66 | file_path = os.path.join(directory, filename) 67 | with open(file_path) as json_file: 68 | factoryAbi = json.load(json_file) 69 | 70 | directory = './abi/' 71 | filename = "koffee.json" 72 | file_path = os.path.join(directory, filename) 73 | with open(file_path) as json_file: 74 | koffeeAbi = json.load(json_file) 75 | 76 | directory = './abi/' 77 | filename = "pangolin.json" 78 | file_path = os.path.join(directory, filename) 79 | with open(file_path) as json_file: 80 | pangolinAbi = json.load(json_file) 81 | 82 | directory = './abi/' 83 | filename = "joeRouter.json" 84 | file_path = os.path.join(directory, filename) 85 | with open(file_path) as json_file: 86 | joeRouter = json.load(json_file) 87 | 88 | """"""""""""""""""""""""""" 89 | //NETWORKS SELECT 90 | """"""""""""""""""""""""""" 91 | 92 | if settings['EXCHANGE'].lower() == 'pancakeswap': 93 | if settings['USECUSTOMNODE'].lower() == 'true': 94 | my_provider = settings['CUSTOMNODE'] 95 | print(timestamp(), 'Using custom mode.') 96 | else: 97 | my_provider = "https://bsc-dataseed4.defibit.io" 98 | 99 | if not my_provider: 100 | print(timestamp(), 'Custom node empty. Exiting') 101 | exit(1) 102 | 103 | if my_provider[0].lower() == 'h': 104 | print(timestamp(), 'Using HTTPProvider') 105 | client = Web3(Web3.HTTPProvider(my_provider)) 106 | elif my_provider[0].lower() == 'w': 107 | print(timestamp(), 'Using WebsocketProvider') 108 | client = Web3(Web3.WebsocketProvider(my_provider)) 109 | else: 110 | print(timestamp(), 'Using IPCProvider') 111 | client = Web3(Web3.IPCProvider(my_provider)) 112 | 113 | print(timestamp(), "Binance Smart Chain Connected =", client.isConnected()) 114 | print(timestamp(), "Loading Smart Contracts...") 115 | 116 | routerAddress = Web3.toChecksumAddress("0x10ED43C718714eb63d5aA57B78B54704E256024E") 117 | factoryAddress = Web3.toChecksumAddress("0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73") 118 | 119 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 120 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 121 | weth = Web3.toChecksumAddress("0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c") 122 | base_symbol = "BNB" 123 | modified = False 124 | 125 | if settings['EXCHANGE'].lower() == 'traderjoe': 126 | 127 | if settings['USECUSTOMNODE'].lower() == 'true': 128 | my_provider = settings['CUSTOMNODE'] 129 | print(timestamp(), 'Using custom mode.') 130 | else: 131 | my_provider = "https://api.avax.network/ext/bc/C/rpc" 132 | 133 | client = Web3(Web3.HTTPProvider(my_provider)) 134 | print(timestamp(), "AVAX Smart Chain Connected =", client.isConnected()) 135 | print(timestamp(), "Loading Smart Contracts...") 136 | 137 | 138 | routerAddress = Web3.toChecksumAddress("0x60aE616a2155Ee3d9A68541Ba4544862310933d4") 139 | factoryAddress = Web3.toChecksumAddress("0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10") 140 | 141 | 142 | routerContract = client.eth.contract(address=routerAddress, abi=joeRouter) 143 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 144 | weth = Web3.toChecksumAddress("0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7") 145 | base_symbol = "AVAX" 146 | modified = True 147 | 148 | elif settings['EXCHANGE'].lower() == 'apeswap': 149 | if settings['USECUSTOMNODE'].lower() == 'true': 150 | my_provider = settings['CUSTOMNODE'] 151 | print(timestamp(), 'Using custom mode.') 152 | else: 153 | my_provider = "https://bsc-dataseed4.defibit.io" 154 | 155 | if not my_provider: 156 | print(timestamp(), 'Custom node empty. Exiting') 157 | exit(1) 158 | 159 | if my_provider[0].lower() == 'h': 160 | print(timestamp(), 'Using HTTPProvider') 161 | client = Web3(Web3.HTTPProvider(my_provider)) 162 | elif my_provider[0].lower() == 'w': 163 | print(timestamp(), 'Using WebsocketProvider') 164 | client = Web3(Web3.WebsocketProvider(my_provider)) 165 | else: 166 | print(timestamp(), 'Using IPCProvider') 167 | client = Web3(Web3.IPCProvider(my_provider)) 168 | 169 | print(timestamp(), "Binance Smart Chain Connected =", client.isConnected()) 170 | print(timestamp(), "Loading ApeSwap Smart Contracts...") 171 | 172 | routerAddress = Web3.toChecksumAddress("0xcF0feBd3f17CEf5b47b0cD257aCf6025c5BFf3b7") 173 | factoryAddress = Web3.toChecksumAddress("0x0841BD0B734E4F5853f0dD8d7Ea041c241fb0Da6") 174 | 175 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 176 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 177 | 178 | weth = Web3.toChecksumAddress("0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c") 179 | busd = Web3.toChecksumAddress("0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56") 180 | base_symbol = "BNB" 181 | modified = False 182 | 183 | elif settings["EXCHANGE"].lower() == 'uniswap': 184 | if settings['USECUSTOMNODE'].lower() == 'true': 185 | my_provider = settings['CUSTOMNODE'] 186 | print(timestamp(), 'Using custom mode.') 187 | else: 188 | my_provider = "https://pedantic-montalcini:lair-essay-ranger-rigid-hardy-petted@nd-857-678-344.p2pify.com" 189 | 190 | if not my_provider: 191 | print(timestamp(), 'Custom node empty. Exiting') 192 | exit(1) 193 | 194 | if my_provider[0].lower() == 'h': 195 | print(timestamp(), 'Using HTTPProvider') 196 | client = Web3(Web3.HTTPProvider(my_provider)) 197 | elif my_provider[0].lower() == 'w': 198 | print(timestamp(), 'Using WebsocketProvider') 199 | client = Web3(Web3.WebsocketProvider(my_provider)) 200 | else: 201 | print(timestamp(), 'Using IPCProvider') 202 | client = Web3(Web3.IPCProvider(my_provider)) 203 | 204 | print(timestamp(), "Uniswap Chain Connected =", client.isConnected()) 205 | print(timestamp(), "Loading Smart Contracts...") 206 | routerAddress = Web3.toChecksumAddress("0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D") 207 | factoryAddress = Web3.toChecksumAddress("0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f") 208 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 209 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 210 | weth = Web3.toChecksumAddress("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2") 211 | base_symbol = "ETH" 212 | modified = False 213 | 214 | elif settings["EXCHANGE"].lower() == 'kuswap': 215 | if settings['USECUSTOMNODE'].lower() == 'true': 216 | my_provider = settings['CUSTOMNODE'] 217 | print(timestamp(), 'Using custom mode.') 218 | else: 219 | my_provider = "https://rpc-mainnet.kcc.network" 220 | 221 | client = Web3(Web3.HTTPProvider(my_provider)) 222 | print(timestamp(), "Kucoin Chain Connected =", client.isConnected()) 223 | print(timestamp(), "Loading KuSwap Smart Contracts...") 224 | routerAddress = Web3.toChecksumAddress("0xa58350d6dee8441aa42754346860e3545cc83cda") 225 | factoryAddress = Web3.toChecksumAddress("0xAE46cBBCDFBa3bE0F02F463Ec5486eBB4e2e65Ae") 226 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 227 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 228 | weth = Web3.toChecksumAddress("0x4446Fc4eb47f2f6586f9fAAb68B3498F86C07521") 229 | base_symbol = "KCS" 230 | modified = False 231 | 232 | elif settings["EXCHANGE"].lower() == 'koffeeswap': 233 | if settings['USECUSTOMNODE'].lower() == 'true': 234 | my_provider = settings['CUSTOMNODE'] 235 | else: 236 | my_provider = "https://rpc-mainnet.kcc.network" 237 | 238 | client = Web3(Web3.HTTPProvider(my_provider)) 239 | print(timestamp(), "Kucoin Chain Connected =", client.isConnected()) 240 | print(timestamp(), "Loading KoffeeSwap Smart Contracts...") 241 | routerAddress = Web3.toChecksumAddress("0xc0fFee0000C824D24E0F280f1e4D21152625742b") 242 | factoryAddress = Web3.toChecksumAddress("0xC0fFeE00000e1439651C6aD025ea2A71ED7F3Eab") 243 | routerContract = client.eth.contract(address=routerAddress, abi=koffeeAbi) 244 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 245 | weth = Web3.toChecksumAddress("0x4446Fc4eb47f2f6586f9fAAb68B3498F86C07521") 246 | base_symbol = "KCS" 247 | modified = True 248 | 249 | elif settings["EXCHANGE"].lower() == 'spookyswap': 250 | if settings['USECUSTOMNODE'].lower() == 'true': 251 | my_provider = settings['CUSTOMNODE'] 252 | print(timestamp(), 'Using custom mode.') 253 | else: 254 | my_provider = "https://rpcapi.fantom.network" 255 | 256 | client = Web3(Web3.HTTPProvider(my_provider)) 257 | print(timestamp(), "FANTOM Chain Connected =", client.isConnected()) 258 | print(timestamp(), "Loading Smart Contracts...") 259 | routerAddress = Web3.toChecksumAddress("0xF491e7B69E4244ad4002BC14e878a34207E38c29") 260 | factoryAddress = Web3.toChecksumAddress("0x152eE697f2E276fA89E96742e9bB9aB1F2E61bE3") 261 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 262 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 263 | weth = Web3.toChecksumAddress("0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83") 264 | base_symbol = "FTM" 265 | modified = False 266 | 267 | elif settings["EXCHANGE"].lower() == 'spiritswap': 268 | if settings['USECUSTOMNODE'].lower() == 'true': 269 | my_provider = settings['CUSTOMNODE'] 270 | print(timestamp(), 'Using custom mode.') 271 | else: 272 | my_provider = "https://rpcapi.fantom.network" 273 | 274 | client = Web3(Web3.HTTPProvider(my_provider)) 275 | print(timestamp(), "FANTOM Chain Connected =", client.isConnected()) 276 | print(timestamp(), "Loading Smart Contracts...") 277 | routerAddress = Web3.toChecksumAddress("0x16327E3FbDaCA3bcF7E38F5Af2599D2DDc33aE52") 278 | factoryAddress = Web3.toChecksumAddress("0xEF45d134b73241eDa7703fa787148D9C9F4950b0") 279 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 280 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 281 | weth = Web3.toChecksumAddress("0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83") 282 | base_symbol = "FTM" 283 | modified = False 284 | 285 | elif settings["EXCHANGE"].lower() == 'quickswap': 286 | if settings['USECUSTOMNODE'].lower() == 'true': 287 | my_provider = settings['CUSTOMNODE'] 288 | print(timestamp(), 'Using custom mode.') 289 | else: 290 | my_provider = "https://rpc-mainnet.matic.network" 291 | 292 | client = Web3(Web3.HTTPProvider(my_provider)) 293 | print(timestamp(), "Matic Chain Connected =", client.isConnected()) 294 | print(timestamp(), "Loading Smart Contracts...") 295 | routerAddress = Web3.toChecksumAddress("0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff") 296 | factoryAddress = Web3.toChecksumAddress("0x5757371414417b8c6caad45baef941abc7d3ab32") 297 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 298 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 299 | weth = Web3.toChecksumAddress("0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270") 300 | base_symbol = "MATIC" 301 | modified = False 302 | 303 | elif settings["EXCHANGE"].lower() == 'waultswap': 304 | if settings['USECUSTOMNODE'].lower() == 'true': 305 | my_provider = settings['CUSTOMNODE'] 306 | print(timestamp(), 'Using custom mode.') 307 | else: 308 | my_provider = "https://rpc-waultfinance-mainnet.maticvigil.com/v1/0bc1bb1691429f1eeee66b2a4b919c279d83d6b0" 309 | 310 | client = Web3(Web3.HTTPProvider(my_provider)) 311 | print(timestamp(), "Matic Chain Connected =", client.isConnected()) 312 | print(timestamp(), "Loading Smart Contracts...") 313 | routerAddress = Web3.toChecksumAddress("0x3a1D87f206D12415f5b0A33E786967680AAb4f6d") 314 | factoryAddress = Web3.toChecksumAddress("0xa98ea6356A316b44Bf710D5f9b6b4eA0081409Ef") 315 | routerContract = client.eth.contract(address=routerAddress, abi=routerAbi) 316 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 317 | weth = Web3.toChecksumAddress("0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270") 318 | base_symbol = "MATIC" 319 | modified = False 320 | 321 | elif settings["EXCHANGE"].lower() == 'pangolin': 322 | if settings['USECUSTOMNODE'].lower() == 'true': 323 | my_provider = settings['CUSTOMNODE'] 324 | print(timestamp(), 'Using custom mode.') 325 | else: 326 | my_provider = "https://api.avax.network/ext/bc/C/rpc" 327 | 328 | client = Web3(Web3.HTTPProvider(my_provider)) 329 | print(timestamp(), "AVAX Chain Connected =", client.isConnected()) 330 | print(timestamp(), "Loading Smart Contracts...") 331 | routerAddress = Web3.toChecksumAddress("0xE54Ca86531e17Ef3616d22Ca28b0D458b6C89106") 332 | factoryAddress = Web3.toChecksumAddress("0xefa94DE7a4656D787667C749f7E1223D71E9FD88") 333 | routerContract = client.eth.contract(address=routerAddress, abi=pangolinAbi) 334 | factoryContract = client.eth.contract(address=factoryAddress, abi=factoryAbi) 335 | weth = Web3.toChecksumAddress("0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7") 336 | base_symbol = "AVAX" 337 | modified = True 338 | 339 | 340 | def get_password(): 341 | 342 | global settings_changed 343 | setnewpassword = False 344 | 345 | # Check to see if the user has a version of the settings file before private key encryption existed 346 | if 'ENCRYPTPRIVATEKEYS' not in settings: 347 | response = "" 348 | settings_changed = True 349 | while response != "y" and response != "n": 350 | print ("\nWould you like to use a password to encrypt your private keys?") 351 | response = input ("You will need to input this password each time LimitSniper is executed (y/n): ") 352 | 353 | if response == "y": 354 | settings['ENCRYPTPRIVATEKEYS'] = "true" 355 | setnewpassword = True 356 | else: 357 | settings['ENCRYPTPRIVATEKEYS'] = "false" 358 | 359 | # If the user wants to encrypt their private keys, but we don't have an encrypted private key recorded, we need to ask for a password 360 | elif settings['ENCRYPTPRIVATEKEYS'] == "true" and not settings['PRIVATEKEY'].startswith('aes:'): 361 | print ("\nPlease create a password to encrypt your private keys.") 362 | setnewpassword = True 363 | 364 | # Set a new password when necessary 365 | if setnewpassword == True: 366 | settings_changed = True 367 | passwords_differ = True 368 | while passwords_differ: 369 | pwd = pwinput.pwinput(prompt="\nType your new password: ") 370 | pwd2 = pwinput.pwinput(prompt="\nType your new password again: ") 371 | 372 | if pwd != pwd2: 373 | print ("Error, password mismatch. Try again.") 374 | else: 375 | passwords_differ = False 376 | 377 | # The user already has encrypted private keys. Accept a password so we can unencrypt them 378 | elif settings['ENCRYPTPRIVATEKEYS'] == "true": 379 | 380 | pwd = pwinput.pwinput(prompt="\nPlease specify the password to decrypt your keys: ") 381 | 382 | else: 383 | pwd = "" 384 | 385 | if not pwd.strip(): 386 | print () 387 | print ("X WARNING =-= WARNING =-= WARNING =-= WARNING =-= WARNING =-= WARNING=-= WARNING X") 388 | print ("X You are running LimitSniper without encrypting your private keys. X") 389 | print ("X Private keys are stored on disk unencrypted and can be accessed by X") 390 | print ("X anyone with access to the file system, including the Systems/VPS administrator X") 391 | print ("X and anyone with physical access to the machine or hard drives. X") 392 | print ("X WARNING =-= WARNING =-= WARNING =-= WARNING =-= WARNING =-= WARNING=-= WARNING X") 393 | print () 394 | 395 | return pwd 396 | 397 | def save_settings(pwd): 398 | 399 | global settings_changed 400 | 401 | if len(pwd) > 0: 402 | encrypted_settings = settings.copy() 403 | encrypted_settings['LIMITWALLETPRIVATEKEY'] = 'aes:' + cryptocode.encrypt(settings['LIMITWALLETPRIVATEKEY'], pwd) 404 | encrypted_settings['PRIVATEKEY'] = 'aes:' + cryptocode.encrypt(settings['PRIVATEKEY'], pwd) 405 | 406 | # MASSAGE OUTPUT - LimitSniper currently loads settings.json as a [0] element, so we need to massage our 407 | # settings.json output so that it's reasable. This should probably be fixed by us importing 408 | # the entire json file, instead of just the [0] element. 409 | if settings_changed == True: 410 | print (timestamp(), "Writing settings to file.") 411 | 412 | if settings['ENCRYPTPRIVATEKEYS'] == "true": 413 | output_settings = encrypted_settings 414 | else: 415 | output_settings = settings 416 | 417 | with open('settings.json', 'w') as f: 418 | f.write("[\n") 419 | f.write(json.dumps(output_settings, indent=4)) 420 | f.write("\n]\n") 421 | 422 | def load_wallet_settings(pwd): 423 | 424 | global settings 425 | global settings_changed 426 | 427 | # Check for limit wallet information 428 | if " " in settings['LIMITWALLETADDRESS'] or settings['LIMITWALLETADDRESS'] == "": 429 | settings_changed = True 430 | settings['LIMITWALLETADDRESS'] = input("Please provide the wallet address where you have your LIMIT: ") 431 | 432 | # Check for limit wallet private key 433 | if " " in settings['LIMITWALLETPRIVATEKEY'] or settings['LIMITWALLETPRIVATEKEY'] == "": 434 | settings_changed = True 435 | settings['LIMITWALLETPRIVATEKEY'] = input("Please provide the private key for the wallet where you have your LIMIT: ") 436 | 437 | # If the limit wallet private key is already set and encrypted, decrypt it 438 | elif settings['LIMITWALLETPRIVATEKEY'].startswith('aes:'): 439 | print (timestamp(), "Decrypting limit wallet private key.") 440 | settings['LIMITWALLETPRIVATEKEY'] = settings['LIMITWALLETPRIVATEKEY'].replace('aes:', "", 1) 441 | settings['LIMITWALLETPRIVATEKEY'] = cryptocode.decrypt(settings['LIMITWALLETPRIVATEKEY'], pwd) 442 | 443 | if settings['LIMITWALLETPRIVATEKEY'] == False: 444 | print("ERROR: Your private key decryption password is incorrect") 445 | exit(1) 446 | 447 | 448 | # Check for trading wallet information 449 | if " " in settings['WALLETADDRESS'] or settings['WALLETADDRESS'] == "": 450 | settings_changed = True 451 | settings['WALLETADDRESS'] = input("Please provide the wallet address for your trading wallet: ") 452 | 453 | # Check for trading wallet private key 454 | if " " in settings['PRIVATEKEY'] or settings['PRIVATEKEY'] == "": 455 | settings_changed = True 456 | settings['PRIVATEKEY'] = input("Please provide the private key for the wallet you want to trade with: ") 457 | 458 | # If the trading wallet private key is already set and encrypted, decrypt it 459 | elif settings['PRIVATEKEY'].startswith('aes:'): 460 | print (timestamp(), "Decrypting limit wallet private key.") 461 | settings['PRIVATEKEY'] = settings['PRIVATEKEY'].replace('aes:', "", 1) 462 | settings['PRIVATEKEY'] = cryptocode.decrypt(settings['PRIVATEKEY'], pwd) 463 | 464 | 465 | 466 | 467 | # LOAD MIDDLEWEAR HERE TO DECODE CONTRACTS 468 | from web3.middleware import geth_poa_middleware 469 | 470 | client.middleware_onion.inject(geth_poa_middleware, layer=0) 471 | 472 | 473 | def decode_key(): 474 | private_key = settings['LIMITWALLETPRIVATEKEY'] 475 | acct = client.eth.account.privateKeyToAccount(private_key) 476 | addr = acct.address 477 | return addr 478 | 479 | def auth(): 480 | my_provider2 = "https://pedantic-montalcini:lair-essay-ranger-rigid-hardy-petted@nd-857-678-344.p2pify.com" 481 | client2 = Web3(Web3.HTTPProvider(my_provider2)) 482 | #print(timestamp(), "Connected to Ethereum BlockChain =", client2.isConnected()) 483 | # Insert LIMITSWAP Token Contract Here To Calculate Staked Verification 484 | address = Web3.toChecksumAddress("0x1712aad2c773ee04bdc9114b32163c058321cd85") 485 | abi = standardAbi 486 | balanceContract = client2.eth.contract(address=address, abi=abi) 487 | decimals = balanceContract.functions.decimals().call() 488 | DECIMALS = 10 ** decimals 489 | 490 | # Exception for incorrect Key Input 491 | try: 492 | decode = decode_key() 493 | except Exception: 494 | print("There is a problem with your private key : please check if it's correct. Don't enter seed phrase !") 495 | logging.info("There is a problem with your private key : please check if it's correct. Don't enter seed phrase !") 496 | 497 | wallet_address = Web3.toChecksumAddress(decode) 498 | balance = balanceContract.functions.balanceOf(wallet_address).call() 499 | true_balance = balance / DECIMALS 500 | print(timestamp(), "Current $LIMIT Tokens Staked =", true_balance) 501 | logging.info("Current $LIMIT Tokens Staked = " + str(true_balance)) 502 | return true_balance 503 | 504 | def check_bnb_balance(): 505 | balance = client.eth.getBalance(settings['WALLETADDRESS']) 506 | print(timestamp(), "Current Wallet Balance is :", Web3.fromWei(balance, 'ether')) 507 | return balance 508 | 509 | def wait_for_tx(tx_hash): 510 | print(timestamp(), "Waiting for TX to Confirm....") 511 | timeout = time() + 45 512 | while True: 513 | print(timestamp(), ".........waiting............") 514 | sleep(1) 515 | try: 516 | txn_receipt = client.eth.getTransactionReceipt(tx_hash) 517 | return txn_receipt['status'] 518 | except Exception as e: 519 | txn_receipt = None 520 | 521 | if txn_receipt is not None and txn_receipt['blockHash'] is not None: 522 | return txn_receipt['status'] 523 | 524 | elif time() > timeout: 525 | print(timestamp(), "Transaction Timed Out, Breaking Check Cycle....") 526 | logging.info("Transaction Timed Out, Breaking Check Cycle....") 527 | break 528 | 529 | def decimals(address): 530 | try: 531 | balanceContract = client.eth.contract(address=Web3.toChecksumAddress(address), abi=standardAbi) 532 | decimals = balanceContract.functions.decimals().call() 533 | DECIMALS = 10 ** decimals 534 | except ABIFunctionNotFound: 535 | DECIMALS = 10 ** 18 536 | except ValueError as ve: 537 | logging.exception(ve) 538 | return DECIMALS 539 | 540 | def check_pool(inToken, outToken, symbol): 541 | pair_address = factoryContract.functions.getPair(inToken, outToken).call() 542 | DECIMALS = decimals(outToken) 543 | pair_contract = client.eth.contract(address=pair_address, abi=lpAbi) 544 | reserves = pair_contract.functions.getReserves().call() 545 | pooled = reserves[1] / DECIMALS 546 | print(timestamp(), "Current Liquidity Reserves:", pooled, symbol) 547 | return pooled 548 | 549 | def rug_check(address): 550 | print("Rug Check in Progress") 551 | s = requests.get( 552 | 'https://api.bscscan.com/api?module=contract&action=getsourcecode&address=' + address + '&apikey=P8DMYB4BDEYRB1PFRXS5NGP9U8673PZ7TW').json() 553 | _contract = s['result'] 554 | for verified in _contract: 555 | # print("Checking if Contract is Verifed..") 556 | 557 | if verified['ABI'] != 'Contract source code not verified': 558 | 559 | for contract in _contract: 560 | source = contract['SourceCode'] 561 | 562 | if 'TransferHelper' in verified['ABI'] or 'TransferHelper' in source: 563 | print("Our Rug code Checker has found that this contract contains has Honeypot Function Found in Code") 564 | mint = True 565 | elif 'IPayable' in verified['ABI'] or 'IPayable' in source: 566 | print("Our Rug code Checker has found that this contract was made by token generator") 567 | mint = True 568 | elif 'HelloBEP20' in verified['ABI'] or 'HelloBEP20' in source: 569 | print("Our Rug code Checker has found that this contract contains has vittominacori.github.io Generator") 570 | mint = True 571 | elif 'BEP20TOKEN' in verified['ABI'] or 'BEP20TOKEN' in source: 572 | print("Our Rug code Checker has found that this contract contains has Common Scam Contract using BEP20TOKEN Code") 573 | mint = True 574 | elif 'clearCNDAO' in verified['ABI'] or 'clearCNDAO' in source: 575 | print("Our Rug code Checker has found that this contract contains has clearCNDAO function Found in Contract") 576 | mint = True 577 | elif 'addAllow' in verified['ABI']: 578 | print("Add Allow Contract Found") 579 | mint = True 580 | elif 'removeLiquidityETHWithPermit' in verified['ABI'] or 'removeLiquidityETHWithPermit' in source: 581 | print("Our Rug code Checker has found that this contract contains has Remove Liquidty Function") 582 | mint = True 583 | elif 'transferFromMiddleware' in verified['ABI'] or 'transferFromMiddleware' in source: 584 | print("Our Rug code Checker has found that this contract contains has Transfer Middleware Fucntion") 585 | mint = True 586 | elif 'ratchetClank' in verified['ABI'] or 'ratchetClank' in source: 587 | print("Our Rug code Checker has found that this contract contains has Ratchet & Clank Scam Function") 588 | mint = True 589 | elif 'require(from == _owner' in source: 590 | print("Our Rug code Checker has found that this contract contains has Tranfer Function Scam ") 591 | mint = True 592 | elif 'contract BEP20Token' in source: 593 | print("Contract Similar to other BEP20 unedited contracts") 594 | elif 'function issue' in source or 'event Issue' in source or 'event Redeem' in source: 595 | print("Our Rug code Checker has found that this contract contains has Issue Redeem Mint Function Scam ...") 596 | mint = True 597 | 598 | else: 599 | mint = False 600 | else: 601 | mint = False 602 | 603 | return mint 604 | 605 | 606 | def scan(tokens): 607 | if settings['DXSALE'].lower() != 'true': 608 | filter = client.eth.filter({'address': routerAddress}) 609 | pending_block = client.eth.getBlock('pending', full_transactions=True) 610 | print(timestamp(), "Scanning Mempool & Waiting for New Liquidity Add Event..... Current Block: ", pending_block['number']) 611 | #pending_block = client.eth.getBlock(8831531, full_transactions=True) 612 | pending_transactions = pending_block['transactions'] 613 | to_address = routerAddress 614 | 615 | for pending in pending_transactions: 616 | 617 | if pending['to'] == to_address: 618 | tx_hash = pending['hash'] 619 | # result = tx_hash.hex() 620 | input_bytes = pending['input'] 621 | contract = client.eth.contract(address=routerAddress, abi=routerAbi) 622 | 623 | try: 624 | decoded = contract.decode_function_input(input_bytes) 625 | #print(decoded) 626 | except ValueError as ve: 627 | logging.exception(ve) 628 | break 629 | 630 | if str(decoded[ 631 | 0]) == '' or str( 632 | decoded[ 633 | 0]) == '' or str( 634 | decoded[0]) == '' or str( 635 | decoded[0]) == '': 636 | filter_contract = decoded[1] 637 | 638 | for token in tokens: 639 | 640 | try: 641 | if filter_contract['token'] == Web3.toChecksumAddress(token['ADDRESS']): 642 | token_check = True 643 | else: 644 | token_check = False 645 | 646 | except Exception as e: 647 | if filter_contract['tokenA'] == Web3.toChecksumAddress(token['ADDRESS']) or filter_contract['tokenB'] == Web3.toChecksumAddress(token['ADDRESS']): 648 | token_check = True 649 | else: 650 | token_check = False 651 | 652 | #Means the toke in in found proceed to makign buy 653 | if token_check: 654 | if token['RUGCHECK'].lower() == 'true': 655 | rug = rug_check(token['ADDRESS']) 656 | else: 657 | rug = False 658 | 659 | if not rug: 660 | if token['MULTIPLEBUYS'].lower() == 'true': 661 | count = 0 662 | timeout = int(token['BUYCOUNT']) 663 | nonce = client.eth.getTransactionCount(settings['WALLETADDRESS']) 664 | 665 | while True: 666 | if count < timeout: 667 | buy_many(pending, token, nonce) 668 | count += 1 669 | nonce += 1 670 | else: 671 | logging.info("Buy's Sent Stopping Bot") 672 | sys.exit("Buy's Sent Stopping Bot") 673 | 674 | 675 | else: 676 | nonce = client.eth.getTransactionCount(settings['WALLETADDRESS']) 677 | buy(pending, token, nonce, token['BUYAFTER_XXX_SECONDS']) 678 | logging.info("Buy Sent Stopping Bot") 679 | sys.exit("Buy Sent Stopping Bot") 680 | 681 | else: 682 | pass 683 | else: 684 | pass 685 | else: 686 | pass 687 | 688 | else: 689 | filter = client.eth.filter({'address': Web3.toChecksumAddress(settings['DXPRESALECONTRACT'])}) 690 | pending_block = client.eth.getBlock('pending', full_transactions=True) 691 | #pending_block = client.eth.getBlock(9067713, full_transactions=True) 692 | print("DXSALE MODE ENABLED: ", timestamp(), "Scanning Mempool & Waiting for New Liquidity Add Event..... Current Block: ", pending_block['number']) 693 | pending_transactions = pending_block['transactions'] 694 | to_address = Web3.toChecksumAddress(settings['DXPRESALECONTRACT']) 695 | 696 | 697 | 698 | for pending in pending_transactions: 699 | 700 | if pending['input'] == '0x267dd102': 701 | tx_hash = pending['hash'] 702 | #result = tx_hash.hex() 703 | input_bytes = pending['input'] 704 | 705 | #Check DX SALE Contract event input for 0x267dd102 which is the same when launching sale to pancakeswap 706 | if pending['input'] == '0x267dd102': 707 | 708 | for token in tokens: 709 | 710 | if token['RUGCHECK'].lower() == 'true': 711 | rug = rug_check(token['ADDRESS']) 712 | else: 713 | rug = False 714 | 715 | if not rug: 716 | if token['MULTIPLEBUYS'].lower() == 'true': 717 | count = 0 718 | timeout = int(token['BUYCOUNT']) 719 | nonce = client.eth.getTransactionCount(settings['WALLETADDRESS']) 720 | 721 | while True: 722 | if count < timeout: 723 | buy_many(pending, token, nonce) 724 | count += 1 725 | nonce += 1 726 | else: 727 | logging.info("Buy's Sent Stopping Bot") 728 | sys.exit("Buy's Sent Stopping Bot") 729 | 730 | 731 | else: 732 | nonce = client.eth.getTransactionCount(settings['WALLETADDRESS']) 733 | buy(pending, token, nonce, token['BUYAFTER_XXX_SECONDS']) 734 | print("BUY SENT - CHECK TRANSACTION TO MAKE SURE IT WAS FOR THE CORRECT CONTRACT!!!!") 735 | sleep(5) 736 | #logging.info("Buy Sent Stopping Bot") 737 | #sys.exit("Buy Sent Stopping Bot") 738 | 739 | else: 740 | pass 741 | 742 | else: 743 | pass 744 | 745 | 746 | def buy(pending, token, nonce, waitseconds): 747 | 748 | seconds = int(waitseconds) 749 | 750 | if waitseconds != '0': 751 | print("Bot will wait", waitseconds, " seconds before buy, as you entered in BUYAFTER_XXX_SECONDS parameter") 752 | sleep(seconds) 753 | 754 | deadline = int(time() + + 240) 755 | 756 | if token['USECUSTOMBASEPAIR'].lower() == 'true': 757 | base = Web3.toChecksumAddress(token['BASEADDRESS']) 758 | DECIMALS = decimals(base) 759 | amount = token['BUYAMOUNT'] * DECIMALS 760 | amount_out = routerContract.functions.getAmountsOut(amount, [base, Web3.toChecksumAddress(token['ADDRESS'])]).call()[-1] 761 | min_tokens = int(amount_out * (1 - (50 / 100))) 762 | 763 | transaction = routerContract.functions.swapExactTokensForTokens( 764 | amount, 765 | min_tokens, 766 | [base, Web3.toChecksumAddress(token['ADDRESS'])], 767 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 768 | deadline 769 | ).buildTransaction({ 770 | 'gasPrice': pending['gasPrice'], 771 | 'gas': 1500000, 772 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 773 | 'nonce': nonce 774 | }) 775 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 776 | 777 | 778 | else: 779 | amount = Web3.toWei(token['BUYAMOUNT'], 'ether') 780 | 781 | if modified == True: 782 | 783 | if settings["EXCHANGE"].lower() == 'koffeeswap': 784 | transaction = routerContract.functions.swapExactKCSForTokens( 785 | Web3.toWei(0.00000025, 'ether'), 786 | [weth, Web3.toChecksumAddress(token['ADDRESS'])], 787 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 788 | deadline 789 | ).buildTransaction({ 790 | 'gasPrice': pending['gasPrice'], 791 | 'gas': 1500000, 792 | 'value': amount, 793 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 794 | 'nonce': nonce 795 | }) 796 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 797 | 798 | if settings["EXCHANGE"].lower() == 'pangolin' or settings["EXCHANGE"].lower() == 'traderjoe': 799 | transaction = routerContract.functions.swapExactAVAXForTokens( 800 | Web3.toWei(0.00000025, 'ether'), 801 | [weth, Web3.toChecksumAddress(token['ADDRESS'])], 802 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 803 | deadline 804 | ).buildTransaction({ 805 | 'gasPrice': pending['gasPrice'], 806 | 'gas': 1500000, 807 | 'value': amount, 808 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 809 | 'nonce': nonce 810 | }) 811 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 812 | 813 | else: 814 | transaction = routerContract.functions.swapExactETHForTokens( 815 | Web3.toWei(0.00000025, 'ether'), 816 | [weth, Web3.toChecksumAddress(token['ADDRESS'])], 817 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 818 | deadline 819 | ).buildTransaction({ 820 | 'gasPrice': pending['gasPrice'], 821 | 'gas': 1500000, 822 | 'value': amount, 823 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 824 | 'nonce': nonce 825 | }) 826 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 827 | 828 | 829 | 830 | try: 831 | return client.eth.sendRawTransaction(signed_txn.rawTransaction) 832 | finally: 833 | print("Sending Buy Order for ", token['SYMBOL']) 834 | print("Transaction Hash = ", Web3.toHex(client.keccak(signed_txn.rawTransaction))) 835 | # wait for TX 836 | tx_hash = client.toHex(client.keccak(signed_txn.rawTransaction)) 837 | # wait fo tx 838 | status = wait_for_tx(tx_hash) 839 | sleep(15) 840 | 841 | 842 | def buy_many(pending, token, nonce): 843 | deadline = int(time() + + 240) 844 | 845 | 846 | if token['USECUSTOMBASEPAIR'].lower() == 'true': 847 | base = Web3.toChecksumAddress(token['BASEADDRESS']) 848 | DECIMALS = decimals(base) 849 | amount = token['BUYAMOUNT'] * DECIMALS 850 | amount_out = routerContract.functions.getAmountsOut(amount, [base, Web3.toChecksumAddress(token['ADDRESS'])]).call()[-1] 851 | min_tokens = int(amount_out * (1 - (50 / 100))) 852 | 853 | transaction = routerContract.functions.swapExactTokensForTokens( 854 | amount, 855 | min_tokens, 856 | [base, Web3.toChecksumAddress(token['ADDRESS'])], 857 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 858 | deadline 859 | ).buildTransaction({ 860 | 'gasPrice': pending['gasPrice'], 861 | 'gas': 1500000, 862 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 863 | 'nonce': nonce 864 | }) 865 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 866 | 867 | else: 868 | amount = Web3.toWei(token['BUYAMOUNT'], 'ether') 869 | if modified == True: 870 | 871 | if settings["EXCHANGE"].lower() == 'koffeeswap': 872 | transaction = routerContract.functions.swapExactKCSForTokens( 873 | Web3.toWei(0.00000025, 'ether'), 874 | [weth, Web3.toChecksumAddress(token['ADDRESS'])], 875 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 876 | deadline 877 | ).buildTransaction({ 878 | 'gasPrice': pending['gasPrice'], 879 | 'gas': 1500000, 880 | 'value': amount, 881 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 882 | 'nonce': nonce 883 | }) 884 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 885 | 886 | elif settings["EXCHANGE"].lower() == 'pangolin' or settings["EXCHANGE"].lower() == 'traderjoe': 887 | transaction = routerContract.functions.swapExactAVAXForTokens( 888 | Web3.toWei(0.00000025, 'ether'), 889 | [weth, Web3.toChecksumAddress(token['ADDRESS'])], 890 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 891 | deadline 892 | ).buildTransaction({ 893 | 'gasPrice': pending['gasPrice'], 894 | 'gas': 1500000, 895 | 'value': amount, 896 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 897 | 'nonce': nonce 898 | }) 899 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 900 | 901 | else: 902 | transaction = routerContract.functions.swapExactETHForTokens( 903 | Web3.toWei(0.00000025, 'ether'), 904 | [weth, Web3.toChecksumAddress(token['ADDRESS'])], 905 | Web3.toChecksumAddress(settings['WALLETADDRESS']), 906 | deadline 907 | ).buildTransaction({ 908 | 'gasPrice': pending['gasPrice'], 909 | 'gas': 1500000, 910 | 'value': amount, 911 | 'from': Web3.toChecksumAddress(settings['WALLETADDRESS']), 912 | 'nonce': nonce 913 | }) 914 | signed_txn = client.eth.account.signTransaction(transaction, private_key=settings['PRIVATEKEY']) 915 | 916 | try: 917 | return client.eth.sendRawTransaction(signed_txn.rawTransaction) 918 | finally: 919 | print("Sending Buy Order for ", token['SYMBOL']) 920 | print("Transaction Hash = ", Web3.toHex(client.keccak(signed_txn.rawTransaction))) 921 | sleep(0.5) 922 | 923 | 924 | 925 | def run(): 926 | 927 | userpassword = get_password() 928 | load_wallet_settings(userpassword) 929 | true_balance = auth() 930 | save_settings(userpassword) 931 | 932 | true_balance = auth() 933 | if true_balance >= 100: 934 | print(timestamp(), "Sniper Subscription Active") 935 | print("==================================================================================================================================================================") 936 | print("Please Note:") 937 | print("- bot will only detect NEW Liquidity Add Events in Mempool: liquidity already added won't be detected") 938 | print("- bot will NOT work on contracts with Bot Protection, where the add liquidity is made from the smart contract") 939 | print("==================================================================================================================================================================") 940 | 941 | while True: 942 | s = open('./tokens.json', ) 943 | tokens = json.load(s) 944 | s.close() 945 | scan(tokens) 946 | 947 | 948 | else: 949 | logging.info("You Need to Hold 100 $LIMIT tokens to use this bot!") 950 | print("You Need to Hold 100 $LIMIT tokens to use this bot!") 951 | 952 | 953 | try: 954 | run() 955 | except Exception as err: 956 | logging.exception(err) 957 | print("Uh oh, please send me this message: '" + str(err) + "'") 958 | -------------------------------------------------------------------------------- /tokens.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "SYMBOL": "TEST", 4 | "ADDRESS": "0xbdFe3fF5A9AE10234f8C1d879766930F2D82", 5 | 6 | "USECUSTOMBASEPAIR": "True", 7 | "BASESYMBOL": "USDT", 8 | "BASEADDRESS": "0xdac17f958d2ee523a2206206994597c13d831ec7", 9 | 10 | "BUYAFTER_XXX_SECONDS": "3", 11 | 12 | "BUYAMOUNT": "0.25", 13 | "MULTIPLEBUYS": "true", 14 | "BUYCOUNT": "5", 15 | "RUGCHECK": "false" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /transactions.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "hash": "test" 4 | } 5 | ] --------------------------------------------------------------------------------