├── .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 |
4 |
5 |
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 | 
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 | 
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 | ]
--------------------------------------------------------------------------------