├── LOGS
└── 1.txt
├── README.md
├── abi
├── Token.txt
├── Token_remove.txt
├── arb.txt
├── bridge_nft.txt
├── refuel.txt
├── rpc.txt
└── sushi.txt
├── main.py
├── modules
├── arbswap.py
├── bridge.py
├── retry.py
├── rpcswap.py
├── slingshot.py
├── sushiswap.py
├── swaps.py
├── tg_bot.py
├── wallet.py
└── zerius.py
├── private_keys.txt
├── requirements.txt
└── settings.py
/LOGS/1.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://t.me/developercode1)
2 | [](https://www.python.org/downloads/release/python-31010/)
3 |
4 |
5 |

6 |
ARRBITRUM NOVA AIO
7 |
Софт на ARBITRUM NOVA - позволяет вам очень быстро и дешево прогреть свои аккаунты в данной сети - плюс не исключено, что вы можете получить дроп от этой сети. Приуствуют как DEX свапы и ликвидность, так и различные NFT
8 |
9 |
10 | ---
11 |
12 | 🤠👉 Наш канал: [PYTHON DAO](https://t.me/developercode1)
13 |
14 | 🤗 Поддержка: elez-dev.eth
15 |
16 | ---
17 | 🙊 INFO
18 |
19 | Для работы нужен [Python 3.10.10](https://www.python.org/downloads/release/python-31010/)
20 |
21 | В данном гайде подробно описано как установить Python + Сам гайд на этот софт - [link](https://mirror.xyz/wiedzmin.eth/Z06W81VrxO9KI88vkcxeW0Lc8f2nBo5Wdyqce0HTNm8)
22 |
23 | ---
24 | Файл private_keys.txt - заполняем приватными ключами
25 |
26 | Все настройки происходят в файле _settings.py_ - каждая строчка подписана
27 |
28 | ---
29 | 🚀 УСТАНОВКА СОФТА
30 |
31 | ```
32 | git clone https://github.com/Elez-dev/arbitrum_nova.git
33 |
34 | cd arbitrum_nova-master
35 |
36 | pip3.10 install -r requirements.txt
37 |
38 | python3.10 main.py
39 | ```
40 | ---
41 | 🤖 ВОЗМОЖНОСТИ СОФТА:
42 |
43 | 1 - Main bridge from Ethereum to Nova
44 |
45 | 2 - Swaps on DEX + Liquidity
46 |
47 | 3 - Remove Liquidity
48 |
49 | 4 - Mint NFT
50 |
51 | 5 - Bridge NFT
52 |
53 | 6 - Mint + bridge NFT
54 |
55 | 7 - Refuel
56 |
57 | 8 - Check price for bridge NFT
58 |
59 | 9 - Check price for LayerZero Refuel
60 |
61 |
62 | ---
63 | ❤️ По всем вопросам в наш чат - https://t.me/pythondao
64 |
65 | ---
66 | EN
67 |
68 | This guide details how to install Python + The guide itself on this software - [link](https://mirror.xyz/wiedzmin.eth/Z06W81VrxO9KI88vkcxeW0Lc8f2nBo5Wdyqce0HTNm8)
69 |
--------------------------------------------------------------------------------
/abi/Token.txt:
--------------------------------------------------------------------------------
1 | [{"inputs":[],"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":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
2 |
--------------------------------------------------------------------------------
/abi/Token_remove.txt:
--------------------------------------------------------------------------------
1 | [{"inputs":[],"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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"}]
--------------------------------------------------------------------------------
/abi/arb.txt:
--------------------------------------------------------------------------------
1 | [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_factory","internalType":"address"},{"type":"address","name":"_WETH","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WETH","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":"amountETH","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"addLiquidityETH","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountTokenDesired","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountETHMin","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":"amountETH","internalType":"uint256"}],"name":"removeLiquidityETH","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountETHMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountETH","internalType":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountETHMin","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":"amountETH","internalType":"uint256"}],"name":"removeLiquidityETHWithPermit","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountETHMin","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":"amountETH","internalType":"uint256"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountETHMin","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":"swapETHForExactTokens","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":"swapExactETHForTokens","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":"swapExactETHForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForETH","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":"swapExactTokensForETHSupportingFeeOnTransferTokens","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":"swapTokensForExactETH","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"}]
2 |
--------------------------------------------------------------------------------
/abi/bridge_nft.txt:
--------------------------------------------------------------------------------
1 | [{"inputs":[{"internalType":"uint256","name":"_minGasToTransfer","type":"uint256"},{"internalType":"address","name":"_lzEndpoint","type":"address"},{"internalType":"uint256","name":"_startMintId","type":"uint256"},{"internalType":"uint256","name":"_endMintId","type":"uint256"},{"internalType":"uint256","name":"_mintFee","type":"uint256"},{"internalType":"uint256","name":"_bridgeFee","type":"uint256"},{"internalType":"address","name":"_feeCollector","type":"address"},{"internalType":"uint256","name":"_referralEarningBips","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"errorCode","type":"uint256"}],"name":"ZeriusONFT721_CoreError","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"oldBridgeFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newBridgeFee","type":"uint256"}],"name":"BridgeFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"uint16","name":"dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BridgeFeeEarned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_hashedPayload","type":"bytes32"}],"name":"CreditCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_hashedPayload","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"CreditStored","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"newEraningBips","type":"uint256"}],"name":"EarningBipsForReferrerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"referrers","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"newEraningBips","type":"uint256"}],"name":"EarningBipsForReferrersChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldFeeCollector","type":"address"},{"indexed":true,"internalType":"address","name":"newFeeCollector","type":"address"}],"name":"FeeCollectorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collector","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimedAmount","type":"uint256"}],"name":"FeeEarningsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"_reason","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"oldMintFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newMintFee","type":"uint256"}],"name":"MintFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeEarnings","type":"uint256"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"referrerEarnings","type":"uint256"}],"name":"ONFTMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":true,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":true,"internalType":"address","name":"_toAddress","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"ReceiveFromChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"oldReferralEarningBips","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newReferralEarningBips","type":"uint256"}],"name":"ReferralEarningBipsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimedAmount","type":"uint256"}],"name":"ReferrerEarningsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"name":"RetryMessageSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"bytes","name":"_toAddress","type":"bytes"},{"indexed":false,"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"SendToChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_dstChainIdToBatchLimit","type":"uint256"}],"name":"SetDstChainIdToBatchLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_dstChainIdToTransferGas","type":"uint256"}],"name":"SetDstChainIdToTransferGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"_type","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"_minDstGas","type":"uint256"}],"name":"SetMinDstGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_minGasToTransferAndStore","type":"uint256"}],"name":"SetMinGasToTransferAndStore","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"precrime","type":"address"}],"name":"SetPrecrime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_path","type":"bytes"}],"name":"SetTrustedRemote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"SetTrustedRemoteAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oldTokenURI","type":"string"},{"indexed":true,"internalType":"string","name":"newTokenURI","type":"string"},{"indexed":false,"internalType":"string","name":"fileExtension","type":"string"}],"name":"TokenURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newState","type":"bool"}],"name":"TokenURILocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_PAYLOAD_SIZE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_INVALID_COLLECTOR_ADDRESS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_INVALID_REFERER","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_INVALID_TOKEN_ID","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_INVALID_URI_LOCK_STATE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_MINT_EXCEEDS_LIMIT","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_MINT_INVALID_FEE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_NOTHING_TO_CLAIM","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_NOT_FEE_COLLECTOR","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERROR_REFERRAL_BIPS_TOO_HIGH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIFTY_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FUNCTION_TYPE_SEND","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_HUNDRED_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimFeeEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReferrerEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"clearCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"dstChainIdToBatchLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"dstChainIdToTransferGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bool","name":"_useZro","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendBatchFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bool","name":"_useZro","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"}],"name":"failedMessages","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeClaimedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeEarnedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_configType","type":"uint256"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"}],"name":"getTrustedRemoteAddress","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"isTrustedRemote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"minDstGasLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minGasToTransferAndStore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"nonblockingLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"payloadSizeLimitLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"precrime","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralEarningBips","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referredTransactionsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrersClaimedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrersEarnedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrersEarningBips","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"sendBatchFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"sendFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bridgeFee","type":"uint256"}],"name":"setBridgeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_dstChainIdToBatchLimit","type":"uint256"}],"name":"setDstChainIdToBatchLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_dstChainIdToTransferGas","type":"uint256"}],"name":"setDstChainIdToTransferGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"earningBips","type":"uint256"}],"name":"setEarningBipsForReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"referrers","type":"address[]"},{"internalType":"uint256","name":"earningBips","type":"uint256"}],"name":"setEarningBipsForReferrersBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeCollector","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint16","name":"_packetType","type":"uint16"},{"internalType":"uint256","name":"_minGas","type":"uint256"}],"name":"setMinDstGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minGasToTransferAndStore","type":"uint256"}],"name":"setMinGasToTransferAndStore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFee","type":"uint256"}],"name":"setMintFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"uint256","name":"_size","type":"uint256"}],"name":"setPayloadSizeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_precrime","type":"address"}],"name":"setPrecrime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referralEarninBips","type":"uint256"}],"name":"setReferralEarningBips","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newTokenBaseURI","type":"string"},{"internalType":"string","name":"_fileExtension","type":"string"}],"name":"setTokenBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"locked","type":"bool"}],"name":"setTokenBaseURILocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_path","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes","name":"_remoteAddress","type":"bytes"}],"name":"setTrustedRemoteAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"storedCredits","outputs":[{"internalType":"uint16","name":"srcChainId","type":"uint16"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"creditsRemain","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBaseURILocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}]
--------------------------------------------------------------------------------
/abi/refuel.txt:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "inputs": [
4 | {
5 | "internalType": "address",
6 | "name": "_lzEndpoint",
7 | "type": "address"
8 | }
9 | ],
10 | "stateMutability": "nonpayable",
11 | "type": "constructor"
12 | },
13 | {
14 | "anonymous": false,
15 | "inputs": [
16 | {
17 | "indexed": false,
18 | "internalType": "uint16",
19 | "name": "_srcChainId",
20 | "type": "uint16"
21 | },
22 | {
23 | "indexed": false,
24 | "internalType": "bytes",
25 | "name": "_srcAddress",
26 | "type": "bytes"
27 | },
28 | {
29 | "indexed": false,
30 | "internalType": "uint64",
31 | "name": "_nonce",
32 | "type": "uint64"
33 | },
34 | {
35 | "indexed": false,
36 | "internalType": "bytes",
37 | "name": "_payload",
38 | "type": "bytes"
39 | },
40 | {
41 | "indexed": false,
42 | "internalType": "bytes",
43 | "name": "_reason",
44 | "type": "bytes"
45 | }
46 | ],
47 | "name": "MessageFailed",
48 | "type": "event"
49 | },
50 | {
51 | "anonymous": false,
52 | "inputs": [
53 | {
54 | "indexed": true,
55 | "internalType": "address",
56 | "name": "previousOwner",
57 | "type": "address"
58 | },
59 | {
60 | "indexed": true,
61 | "internalType": "address",
62 | "name": "newOwner",
63 | "type": "address"
64 | }
65 | ],
66 | "name": "OwnershipTransferred",
67 | "type": "event"
68 | },
69 | {
70 | "anonymous": false,
71 | "inputs": [
72 | {
73 | "indexed": false,
74 | "internalType": "uint16",
75 | "name": "_srcChainId",
76 | "type": "uint16"
77 | },
78 | {
79 | "indexed": false,
80 | "internalType": "bytes",
81 | "name": "_srcAddress",
82 | "type": "bytes"
83 | },
84 | {
85 | "indexed": false,
86 | "internalType": "uint64",
87 | "name": "_nonce",
88 | "type": "uint64"
89 | },
90 | {
91 | "indexed": false,
92 | "internalType": "bytes32",
93 | "name": "_payloadHash",
94 | "type": "bytes32"
95 | }
96 | ],
97 | "name": "RetryMessageSuccess",
98 | "type": "event"
99 | },
100 | {
101 | "anonymous": false,
102 | "inputs": [
103 | {
104 | "indexed": false,
105 | "internalType": "uint16",
106 | "name": "_dstChainId",
107 | "type": "uint16"
108 | },
109 | {
110 | "indexed": false,
111 | "internalType": "uint16",
112 | "name": "_type",
113 | "type": "uint16"
114 | },
115 | {
116 | "indexed": false,
117 | "internalType": "uint256",
118 | "name": "_minDstGas",
119 | "type": "uint256"
120 | }
121 | ],
122 | "name": "SetMinDstGas",
123 | "type": "event"
124 | },
125 | {
126 | "anonymous": false,
127 | "inputs": [
128 | {
129 | "indexed": false,
130 | "internalType": "address",
131 | "name": "precrime",
132 | "type": "address"
133 | }
134 | ],
135 | "name": "SetPrecrime",
136 | "type": "event"
137 | },
138 | {
139 | "anonymous": false,
140 | "inputs": [
141 | {
142 | "indexed": false,
143 | "internalType": "uint16",
144 | "name": "_remoteChainId",
145 | "type": "uint16"
146 | },
147 | {
148 | "indexed": false,
149 | "internalType": "bytes",
150 | "name": "_path",
151 | "type": "bytes"
152 | }
153 | ],
154 | "name": "SetTrustedRemote",
155 | "type": "event"
156 | },
157 | {
158 | "anonymous": false,
159 | "inputs": [
160 | {
161 | "indexed": false,
162 | "internalType": "uint16",
163 | "name": "_remoteChainId",
164 | "type": "uint16"
165 | },
166 | {
167 | "indexed": false,
168 | "internalType": "bytes",
169 | "name": "_remoteAddress",
170 | "type": "bytes"
171 | }
172 | ],
173 | "name": "SetTrustedRemoteAddress",
174 | "type": "event"
175 | },
176 | {
177 | "inputs": [],
178 | "name": "DEFAULT_PAYLOAD_SIZE_LIMIT",
179 | "outputs": [
180 | {
181 | "internalType": "uint256",
182 | "name": "",
183 | "type": "uint256"
184 | }
185 | ],
186 | "stateMutability": "view",
187 | "type": "function"
188 | },
189 | {
190 | "inputs": [],
191 | "name": "FUNCTION_TYPE_SEND",
192 | "outputs": [
193 | {
194 | "internalType": "uint16",
195 | "name": "",
196 | "type": "uint16"
197 | }
198 | ],
199 | "stateMutability": "view",
200 | "type": "function"
201 | },
202 | {
203 | "inputs": [
204 | {
205 | "internalType": "uint16",
206 | "name": "_dstChainId",
207 | "type": "uint16"
208 | },
209 | {
210 | "internalType": "bytes",
211 | "name": "payload",
212 | "type": "bytes"
213 | },
214 | {
215 | "internalType": "bytes",
216 | "name": "_adapterParams",
217 | "type": "bytes"
218 | }
219 | ],
220 | "name": "estimateSendFee",
221 | "outputs": [
222 | {
223 | "internalType": "uint256",
224 | "name": "nativeFee",
225 | "type": "uint256"
226 | },
227 | {
228 | "internalType": "uint256",
229 | "name": "zroFee",
230 | "type": "uint256"
231 | }
232 | ],
233 | "stateMutability": "view",
234 | "type": "function"
235 | },
236 | {
237 | "inputs": [
238 | {
239 | "internalType": "uint16",
240 | "name": "",
241 | "type": "uint16"
242 | },
243 | {
244 | "internalType": "bytes",
245 | "name": "",
246 | "type": "bytes"
247 | },
248 | {
249 | "internalType": "uint64",
250 | "name": "",
251 | "type": "uint64"
252 | }
253 | ],
254 | "name": "failedMessages",
255 | "outputs": [
256 | {
257 | "internalType": "bytes32",
258 | "name": "",
259 | "type": "bytes32"
260 | }
261 | ],
262 | "stateMutability": "view",
263 | "type": "function"
264 | },
265 | {
266 | "inputs": [
267 | {
268 | "internalType": "uint16",
269 | "name": "_srcChainId",
270 | "type": "uint16"
271 | },
272 | {
273 | "internalType": "bytes",
274 | "name": "_srcAddress",
275 | "type": "bytes"
276 | }
277 | ],
278 | "name": "forceResumeReceive",
279 | "outputs": [],
280 | "stateMutability": "nonpayable",
281 | "type": "function"
282 | },
283 | {
284 | "inputs": [
285 | {
286 | "internalType": "uint16",
287 | "name": "_version",
288 | "type": "uint16"
289 | },
290 | {
291 | "internalType": "uint16",
292 | "name": "_chainId",
293 | "type": "uint16"
294 | },
295 | {
296 | "internalType": "address",
297 | "name": "",
298 | "type": "address"
299 | },
300 | {
301 | "internalType": "uint256",
302 | "name": "_configType",
303 | "type": "uint256"
304 | }
305 | ],
306 | "name": "getConfig",
307 | "outputs": [
308 | {
309 | "internalType": "bytes",
310 | "name": "",
311 | "type": "bytes"
312 | }
313 | ],
314 | "stateMutability": "view",
315 | "type": "function"
316 | },
317 | {
318 | "inputs": [],
319 | "name": "getFee",
320 | "outputs": [
321 | {
322 | "internalType": "uint256",
323 | "name": "",
324 | "type": "uint256"
325 | }
326 | ],
327 | "stateMutability": "view",
328 | "type": "function"
329 | },
330 | {
331 | "inputs": [
332 | {
333 | "internalType": "uint16",
334 | "name": "_remoteChainId",
335 | "type": "uint16"
336 | }
337 | ],
338 | "name": "getTrustedRemoteAddress",
339 | "outputs": [
340 | {
341 | "internalType": "bytes",
342 | "name": "",
343 | "type": "bytes"
344 | }
345 | ],
346 | "stateMutability": "view",
347 | "type": "function"
348 | },
349 | {
350 | "inputs": [
351 | {
352 | "internalType": "uint16",
353 | "name": "_srcChainId",
354 | "type": "uint16"
355 | },
356 | {
357 | "internalType": "bytes",
358 | "name": "_srcAddress",
359 | "type": "bytes"
360 | }
361 | ],
362 | "name": "isTrustedRemote",
363 | "outputs": [
364 | {
365 | "internalType": "bool",
366 | "name": "",
367 | "type": "bool"
368 | }
369 | ],
370 | "stateMutability": "view",
371 | "type": "function"
372 | },
373 | {
374 | "inputs": [],
375 | "name": "lzEndpoint",
376 | "outputs": [
377 | {
378 | "internalType": "contract ILayerZeroEndpoint",
379 | "name": "",
380 | "type": "address"
381 | }
382 | ],
383 | "stateMutability": "view",
384 | "type": "function"
385 | },
386 | {
387 | "inputs": [
388 | {
389 | "internalType": "uint16",
390 | "name": "_srcChainId",
391 | "type": "uint16"
392 | },
393 | {
394 | "internalType": "bytes",
395 | "name": "_srcAddress",
396 | "type": "bytes"
397 | },
398 | {
399 | "internalType": "uint64",
400 | "name": "_nonce",
401 | "type": "uint64"
402 | },
403 | {
404 | "internalType": "bytes",
405 | "name": "_payload",
406 | "type": "bytes"
407 | }
408 | ],
409 | "name": "lzReceive",
410 | "outputs": [],
411 | "stateMutability": "nonpayable",
412 | "type": "function"
413 | },
414 | {
415 | "inputs": [
416 | {
417 | "internalType": "uint16",
418 | "name": "",
419 | "type": "uint16"
420 | },
421 | {
422 | "internalType": "uint16",
423 | "name": "",
424 | "type": "uint16"
425 | }
426 | ],
427 | "name": "minDstGasLookup",
428 | "outputs": [
429 | {
430 | "internalType": "uint256",
431 | "name": "",
432 | "type": "uint256"
433 | }
434 | ],
435 | "stateMutability": "view",
436 | "type": "function"
437 | },
438 | {
439 | "inputs": [
440 | {
441 | "internalType": "uint16",
442 | "name": "_srcChainId",
443 | "type": "uint16"
444 | },
445 | {
446 | "internalType": "bytes",
447 | "name": "_srcAddress",
448 | "type": "bytes"
449 | },
450 | {
451 | "internalType": "uint64",
452 | "name": "_nonce",
453 | "type": "uint64"
454 | },
455 | {
456 | "internalType": "bytes",
457 | "name": "_payload",
458 | "type": "bytes"
459 | }
460 | ],
461 | "name": "nonblockingLzReceive",
462 | "outputs": [],
463 | "stateMutability": "nonpayable",
464 | "type": "function"
465 | },
466 | {
467 | "inputs": [],
468 | "name": "owner",
469 | "outputs": [
470 | {
471 | "internalType": "address",
472 | "name": "",
473 | "type": "address"
474 | }
475 | ],
476 | "stateMutability": "view",
477 | "type": "function"
478 | },
479 | {
480 | "inputs": [
481 | {
482 | "internalType": "uint16",
483 | "name": "",
484 | "type": "uint16"
485 | }
486 | ],
487 | "name": "payloadSizeLimitLookup",
488 | "outputs": [
489 | {
490 | "internalType": "uint256",
491 | "name": "",
492 | "type": "uint256"
493 | }
494 | ],
495 | "stateMutability": "view",
496 | "type": "function"
497 | },
498 | {
499 | "inputs": [],
500 | "name": "precrime",
501 | "outputs": [
502 | {
503 | "internalType": "address",
504 | "name": "",
505 | "type": "address"
506 | }
507 | ],
508 | "stateMutability": "view",
509 | "type": "function"
510 | },
511 | {
512 | "inputs": [
513 | {
514 | "internalType": "uint16",
515 | "name": "_dstChainId",
516 | "type": "uint16"
517 | },
518 | {
519 | "internalType": "bytes",
520 | "name": "_toAddress",
521 | "type": "bytes"
522 | },
523 | {
524 | "internalType": "bytes",
525 | "name": "_adapterParams",
526 | "type": "bytes"
527 | }
528 | ],
529 | "name": "refuel",
530 | "outputs": [],
531 | "stateMutability": "payable",
532 | "type": "function"
533 | },
534 | {
535 | "inputs": [],
536 | "name": "renounceOwnership",
537 | "outputs": [],
538 | "stateMutability": "nonpayable",
539 | "type": "function"
540 | },
541 | {
542 | "inputs": [
543 | {
544 | "internalType": "uint16",
545 | "name": "_srcChainId",
546 | "type": "uint16"
547 | },
548 | {
549 | "internalType": "bytes",
550 | "name": "_srcAddress",
551 | "type": "bytes"
552 | },
553 | {
554 | "internalType": "uint64",
555 | "name": "_nonce",
556 | "type": "uint64"
557 | },
558 | {
559 | "internalType": "bytes",
560 | "name": "_payload",
561 | "type": "bytes"
562 | }
563 | ],
564 | "name": "retryMessage",
565 | "outputs": [],
566 | "stateMutability": "payable",
567 | "type": "function"
568 | },
569 | {
570 | "inputs": [
571 | {
572 | "internalType": "uint16",
573 | "name": "_version",
574 | "type": "uint16"
575 | },
576 | {
577 | "internalType": "uint16",
578 | "name": "_chainId",
579 | "type": "uint16"
580 | },
581 | {
582 | "internalType": "uint256",
583 | "name": "_configType",
584 | "type": "uint256"
585 | },
586 | {
587 | "internalType": "bytes",
588 | "name": "_config",
589 | "type": "bytes"
590 | }
591 | ],
592 | "name": "setConfig",
593 | "outputs": [],
594 | "stateMutability": "nonpayable",
595 | "type": "function"
596 | },
597 | {
598 | "inputs": [
599 | {
600 | "internalType": "uint256",
601 | "name": "_fee",
602 | "type": "uint256"
603 | }
604 | ],
605 | "name": "setFee",
606 | "outputs": [],
607 | "stateMutability": "nonpayable",
608 | "type": "function"
609 | },
610 | {
611 | "inputs": [
612 | {
613 | "internalType": "uint16",
614 | "name": "_dstChainId",
615 | "type": "uint16"
616 | },
617 | {
618 | "internalType": "uint16",
619 | "name": "_packetType",
620 | "type": "uint16"
621 | },
622 | {
623 | "internalType": "uint256",
624 | "name": "_minGas",
625 | "type": "uint256"
626 | }
627 | ],
628 | "name": "setMinDstGas",
629 | "outputs": [],
630 | "stateMutability": "nonpayable",
631 | "type": "function"
632 | },
633 | {
634 | "inputs": [
635 | {
636 | "internalType": "uint16",
637 | "name": "_dstChainId",
638 | "type": "uint16"
639 | },
640 | {
641 | "internalType": "uint256",
642 | "name": "_size",
643 | "type": "uint256"
644 | }
645 | ],
646 | "name": "setPayloadSizeLimit",
647 | "outputs": [],
648 | "stateMutability": "nonpayable",
649 | "type": "function"
650 | },
651 | {
652 | "inputs": [
653 | {
654 | "internalType": "address",
655 | "name": "_precrime",
656 | "type": "address"
657 | }
658 | ],
659 | "name": "setPrecrime",
660 | "outputs": [],
661 | "stateMutability": "nonpayable",
662 | "type": "function"
663 | },
664 | {
665 | "inputs": [
666 | {
667 | "internalType": "uint16",
668 | "name": "_version",
669 | "type": "uint16"
670 | }
671 | ],
672 | "name": "setReceiveVersion",
673 | "outputs": [],
674 | "stateMutability": "nonpayable",
675 | "type": "function"
676 | },
677 | {
678 | "inputs": [
679 | {
680 | "internalType": "uint16",
681 | "name": "_version",
682 | "type": "uint16"
683 | }
684 | ],
685 | "name": "setSendVersion",
686 | "outputs": [],
687 | "stateMutability": "nonpayable",
688 | "type": "function"
689 | },
690 | {
691 | "inputs": [
692 | {
693 | "internalType": "uint16",
694 | "name": "_remoteChainId",
695 | "type": "uint16"
696 | },
697 | {
698 | "internalType": "bytes",
699 | "name": "_path",
700 | "type": "bytes"
701 | }
702 | ],
703 | "name": "setTrustedRemote",
704 | "outputs": [],
705 | "stateMutability": "nonpayable",
706 | "type": "function"
707 | },
708 | {
709 | "inputs": [
710 | {
711 | "internalType": "uint16",
712 | "name": "_remoteChainId",
713 | "type": "uint16"
714 | },
715 | {
716 | "internalType": "bytes",
717 | "name": "_remoteAddress",
718 | "type": "bytes"
719 | }
720 | ],
721 | "name": "setTrustedRemoteAddress",
722 | "outputs": [],
723 | "stateMutability": "nonpayable",
724 | "type": "function"
725 | },
726 | {
727 | "inputs": [
728 | {
729 | "internalType": "address",
730 | "name": "newOwner",
731 | "type": "address"
732 | }
733 | ],
734 | "name": "transferOwnership",
735 | "outputs": [],
736 | "stateMutability": "nonpayable",
737 | "type": "function"
738 | },
739 | {
740 | "inputs": [
741 | {
742 | "internalType": "uint16",
743 | "name": "",
744 | "type": "uint16"
745 | }
746 | ],
747 | "name": "trustedRemoteLookup",
748 | "outputs": [
749 | {
750 | "internalType": "bytes",
751 | "name": "",
752 | "type": "bytes"
753 | }
754 | ],
755 | "stateMutability": "view",
756 | "type": "function"
757 | },
758 | {
759 | "inputs": [],
760 | "name": "withdraw",
761 | "outputs": [],
762 | "stateMutability": "payable",
763 | "type": "function"
764 | }
765 | ]
766 |
767 |
--------------------------------------------------------------------------------
/abi/rpc.txt:
--------------------------------------------------------------------------------
1 | [{"type": "function", "name": "swapTokensForExactETH", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "removeLiquidityETH", "inputs": [{"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "WETH", "inputs": [], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "removeLiquidity", "inputs": [{"type": "address"}, {"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapExactTokensForTokens", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapExactTokensForETHSupportingFeeOnTransferTokens", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapExactETHForTokens", "inputs": [{"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapTokensForExactTokens", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "getAmountsIn", "inputs": [{"type": "uint256"}, {"type": "address[]"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "quote", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapExactTokensForETH", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapExactETHForTokensSupportingFeeOnTransferTokens", "inputs": [{"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "removeLiquidityETHSupportingFeeOnTransferTokens", "inputs": [{"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "addLiquidity", "inputs": [{"type": "address"}, {"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "getAmountsOut", "inputs": [{"type": "uint256"}, {"type": "address[]"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "factory", "inputs": [], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "getAmountIn", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "removeLiquidityWithPermit", "inputs": [{"type": "address"}, {"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}, {"type": "bool"}, {"type": "uint8"}, {"type": "bytes32"}, {"type": "bytes32"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "addLiquidityETH", "inputs": [{"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "swapETHForExactTokens", "inputs": [{"type": "uint256"}, {"type": "address[]"}, {"type": "address"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "getAmountOut", "inputs": [{"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "removeLiquidityETHWithPermit", "inputs": [{"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}, {"type": "bool"}, {"type": "uint8"}, {"type": "bytes32"}, {"type": "bytes32"}], "outputs": [{"type": "unknown"}]}, {"type": "function", "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens", "inputs": [{"type": "address"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "uint256"}, {"type": "address"}, {"type": "uint256"}, {"type": "bool"}, {"type": "uint8"}, {"type": "bytes32"}, {"type": "bytes32"}], "outputs": [{"type": "unknown"}]}]
--------------------------------------------------------------------------------
/abi/sushi.txt:
--------------------------------------------------------------------------------
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"}]
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | from web3 import Web3
2 | from requests.adapters import Retry
3 | from threading import Thread
4 | from settings import *
5 | from modules.zerius import Zerius
6 | from modules.swaps import Swaps
7 | from modules.bridge import OfBridge
8 | import logging
9 | import requests
10 | import random
11 | import time
12 | import threading
13 |
14 |
15 | def shuffle(wallets_list):
16 | if shuffle_wallets is True:
17 | numbered_wallets = list(enumerate(wallets_list, start=1))
18 | random.shuffle(numbered_wallets)
19 | elif shuffle_wallets is False:
20 | numbered_wallets = list(enumerate(wallets_list, start=1))
21 | else:
22 | raise ValueError("\nНеверное значение переменной 'shuffle_wallets'. Ожидается 'True' or 'False'.")
23 | return numbered_wallets
24 |
25 |
26 | class Worker(Thread):
27 | def __init__(self, action):
28 | super().__init__()
29 | self.action = action
30 |
31 | def run(self):
32 |
33 | log = logging.getLogger(threading.current_thread().name)
34 | console_out = logging.StreamHandler()
35 | basic_format1 = logging.Formatter('%(asctime)s : [%(name)s] : %(message)s')
36 | basic_format = logging.Formatter('%(asctime)s : %(message)s')
37 | console_out.setFormatter(basic_format1)
38 | file_handler = logging.FileHandler(f"LOGS/{threading.current_thread().name}.txt", 'a', 'utf-8')
39 | file_handler.setFormatter(basic_format)
40 | log.setLevel(logging.DEBUG)
41 | log.addHandler(console_out)
42 | log.addHandler(file_handler)
43 |
44 | while keys_list:
45 | account = keys_list.pop(0)
46 | number = account[0]
47 | private_key = account[1]
48 | retries = Retry(total=10, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
49 | adapter = requests.adapters.HTTPAdapter(max_retries=retries)
50 | session = requests.Session()
51 | session.mount('http://', adapter)
52 | session.mount('https://', adapter)
53 | web3 = Web3(Web3.HTTPProvider(RPC_NOVA, request_kwargs={'timeout': 60}, session=session))
54 | address = web3.eth.account.from_key(private_key).address
55 |
56 | log.info('----------------------------------------------------------------------------')
57 | log.info(f'| Сейчас работает аккаунт - {address} |')
58 | log.info('----------------------------------------------------------------------------\n\n')
59 |
60 | str_number = f'{number} / {all_wallets}'
61 |
62 | if self.action == 1:
63 |
64 | web3 = Web3(Web3.HTTPProvider(RPC_ETH, request_kwargs={'timeout': 60}, session=session))
65 |
66 | bridge = OfBridge(private_key, web3, str_number, log)
67 | value = random.uniform(prescale_bridge_min, prescale_bridge_max)
68 | bridge.deposit(value)
69 | time.sleep(random.randint(time_delay_min, time_delay_max))
70 |
71 | if self.action == 2:
72 | swap = Swaps(private_key, web3, str_number, log)
73 | swap.swap()
74 |
75 | elif self.action == 3:
76 | swap = Swaps(private_key, web3, str_number, log)
77 | swap.remove_liquidity()
78 |
79 | elif self.action == 4:
80 | nft = Zerius(private_key, web3, str_number, log)
81 | number = random.randint(number_nft_min, number_nft_max)
82 | log.info(f'Количество NFT для минта - {number}\n')
83 | for i in range(number):
84 | log.info(f'NFT #{i}')
85 | nft.mint_nft()
86 | time.sleep(random.randint(time_delay_min, time_delay_max))
87 |
88 | elif self.action == 5:
89 | nft = Zerius(private_key, web3, str_number, log)
90 | nft.bridge_nft()
91 | time.sleep(random.randint(time_delay_min, time_delay_max))
92 |
93 | elif self.action == 6:
94 | nft = Zerius(private_key, web3, str_number, log)
95 | nft.mint_nft()
96 | time.sleep(random.randint(time_delay_min, time_delay_max))
97 | nft.bridge_nft()
98 | time.sleep(random.randint(time_delay_min, time_delay_max))
99 |
100 | elif self.action == 7:
101 | nft = Zerius(private_key, web3, str_number, log)
102 | nft.refuel()
103 | time.sleep(random.randint(time_delay_min, time_delay_max))
104 |
105 | elif self.action == 8:
106 | dick = {}
107 | nft = Zerius(private_key, web3, str_number, log)
108 | for chain in chain_arr:
109 | price = nft.check_price_nft(chain)
110 | dick.update({chain: price})
111 | time.sleep(1)
112 | min_key = min(dick, key=dick.get)
113 | min_value = dick[min_key]
114 | log.info('')
115 | log.info(f'Cheapest network {min_key} - {min_value} ETH')
116 | return
117 |
118 | elif self.action == 9:
119 | dick = {}
120 | nft = Zerius(private_key, web3, str_number, log)
121 | for chain in gas_chain_arr:
122 | price = nft.check_price_gas(chain)
123 | dick.update({chain: price})
124 | time.sleep(1)
125 |
126 | min_key = min(dick, key=dick.get)
127 | min_value = dick[min_key]
128 | log.info('')
129 | log.info(f'Cheapest network {min_key} - {min_value} ETH')
130 | return
131 |
132 | session.close()
133 | delay = random.randint(TIME_DELAY_ACC_MIN, TIME_DELAY_ACC_MAX)
134 | log.info(f'Аккаунт завершен, сплю {delay} секунд и перехожу к следующему')
135 | time.sleep(delay)
136 |
137 |
138 | if __name__ == '__main__':
139 | with open("private_keys.txt", "r") as f:
140 | list1 = [row.strip() for row in f if row.strip()]
141 | keys_list = shuffle(list1)
142 | all_wallets = len(keys_list)
143 | print(f'Number of wallets: {all_wallets}\n')
144 |
145 | while True:
146 | print('1 - Main bridge from Ethereum to Nova')
147 | print('2 - Swap')
148 | print('3 - Remove liquidity')
149 | print('4 - Mint NFT')
150 | print('5 - Bridge NFT')
151 | print('6 - Mint + bridge NFT')
152 | print('7 - Refuel')
153 | print('8 - Check price for bridge NFT')
154 | print('9 - Check price for Refuel\n')
155 | var = int(input('Select module: '))
156 | if var in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
157 | break
158 |
159 | for _ in range(number_of_threads):
160 | worker = Worker(var)
161 | worker.start()
162 | time.sleep(random.randint(TIME_DELAY_MIN, TIME_DELAY_MAX))
163 |
--------------------------------------------------------------------------------
/modules/arbswap.py:
--------------------------------------------------------------------------------
1 | from web3 import Web3
2 | from settings import remainder_eth, SLIPPAGE, swap_decimal
3 | from modules.wallet import Wallet, from_wei
4 | from modules.retry import exception_handler
5 | import json as js
6 | import time
7 |
8 |
9 | class ArbSwap(Wallet):
10 |
11 | def __init__(self, private_key, web3, number, log):
12 | super().__init__(private_key, web3, number, log)
13 | self.token_remove_abi = js.load(open('./abi/Token_remove.txt'))
14 | self.address = Web3.to_checksum_address('0xee01c0cd76354c383b8c7b4e65ea88d00b06f36f')
15 | self.abi = js.load(open('./abi/arb.txt'))
16 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi)
17 |
18 | @exception_handler('Buy token ArbSwap')
19 | def buy_token(self, token_to_buy, prescale):
20 | self.log.info(f'Buy {token_to_buy["name"]} token on ArbSwap')
21 |
22 | balance = self.web3.eth.get_balance(self.address_wallet) - Web3.to_wei(remainder_eth, 'ether')
23 | if balance < 0:
24 | self.log.info('Insufficient funds')
25 | return 'balance'
26 |
27 | value = int(balance * prescale)
28 | value_wei = round(Web3.from_wei(value, 'ether'), swap_decimal)
29 | value = Web3.to_wei(value_wei, 'ether')
30 |
31 | amount_out = self.contract.functions.getAmountsOut(value, [self.ETH, token_to_buy['address']]).call()[1]
32 | min_tokens = int(amount_out - (amount_out * SLIPPAGE // 100))
33 | min_tok = round(from_wei(token_to_buy["decimal"], min_tokens), 5)
34 |
35 | contract_txn = self.contract.functions.swapExactETHForTokens(
36 | min_tokens,
37 | [self.ETH, token_to_buy['address']],
38 | self.address_wallet,
39 | (int(time.time()) + 10000) # deadline
40 | ).build_transaction({
41 | 'from': self.address_wallet,
42 | 'value': value,
43 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
44 | })
45 |
46 | self.send_transaction_and_wait(contract_txn, f'Buy {min_tok} {token_to_buy["name"]} ArbSwap')
47 |
48 | @exception_handler('Sold token ArbSwap')
49 | def sold_token(self, token_to_sold):
50 | self.log.info(f'Sold {token_to_sold["name"]} token on ArbSwap')
51 |
52 | token_contract = self.web3.eth.contract(address=token_to_sold['address'], abi=self.token_abi)
53 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
54 | if token_balance == 0:
55 | self.log.info(f'Balance {token_to_sold["name"]} - 0\n')
56 | return
57 |
58 | decimal = token_contract.functions.decimals().call()
59 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
60 | if allowance < 10000 * 10 ** decimal:
61 | self.log.info('Нужен аппрув, делаю')
62 | self.approve(token_to_sold['address'], self.address)
63 | time.sleep(60)
64 |
65 | amount_out = self.contract.functions.getAmountsOut(token_balance, [token_to_sold['address'], self.ETH]).call()[1]
66 | min_tokens = int(amount_out - (amount_out * SLIPPAGE // 100))
67 | min_tok = round(from_wei(token_to_sold["decimal"], token_balance), 5)
68 |
69 | contract_txn = self.contract.functions.swapExactTokensForETH(
70 | token_balance,
71 | min_tokens,
72 | [token_to_sold['address'], self.ETH],
73 | self.address_wallet,
74 | (int(time.time()) + 10000) # deadline
75 | ).build_transaction({
76 | 'from': self.address_wallet,
77 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
78 | })
79 |
80 | self.send_transaction_and_wait(contract_txn, f'Sold {min_tok} {token_to_sold["name"]} ArbSwap')
81 |
82 | @exception_handler('Add liquidity ArbSwap')
83 | def add_liquidity(self, token_to_add):
84 | self.log.info(f'Add Liquidity {token_to_add["name"]} token on ArbSwap')
85 |
86 | token_contract = self.web3.eth.contract(address=token_to_add['address'], abi=self.token_abi)
87 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
88 | if token_balance == 0:
89 | self.log.info(f'Balance {token_to_add["name"]} - 0\n')
90 | return
91 | decimal = token_contract.functions.decimals().call()
92 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
93 | if allowance < 10000 * 10 ** decimal:
94 | self.log.info('Нужен аппрув, делаю')
95 | self.approve(token_to_add['address'], self.address)
96 | time.sleep(60)
97 |
98 | amount_out = self.contract.functions.getAmountsOut(token_balance, [token_to_add['address'], self.ETH]).call()[1]
99 | amount_out_eth = int(amount_out - (amount_out * SLIPPAGE // 100))
100 | min_tok = round(from_wei(token_to_add["decimal"], token_balance), 5)
101 |
102 | contract_txn = self.contract.functions.addLiquidityETH(
103 | token_to_add['address'],
104 | token_balance,
105 | int(token_balance - (token_balance * SLIPPAGE // 100)),
106 | amount_out_eth,
107 | self.address_wallet,
108 | (int(time.time()) + 10000), # deadline
109 | ).build_transaction({
110 | 'from': self.address_wallet,
111 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
112 | 'value': amount_out
113 | })
114 |
115 | self.send_transaction_and_wait(contract_txn, f'Add {min_tok} {token_to_add["name"]} ArbSwap')
116 |
117 | @exception_handler('Remove Liquidity ArbSwap')
118 | def remove_liquidity(self, token_to_remove):
119 | self.log.info(f'Remove Liquidity {token_to_remove["name"]} token on ArbSwap')
120 |
121 | token_contract = self.web3.eth.contract(address=token_to_remove['lp arbswap'], abi=self.token_remove_abi)
122 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
123 | if token_balance == 0:
124 | self.log.info(f'Balance {token_to_remove["name"]} - 0\n')
125 | return 'token 0'
126 | decimal = token_contract.functions.decimals().call()
127 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
128 | if allowance < 10000 * 10 ** decimal:
129 | self.log.info('Нужен аппрув, делаю')
130 | self.approve(token_to_remove['lp arbswap'], self.address)
131 | time.sleep(60)
132 |
133 | price_eth1, price_token1, _ = token_contract.functions.getReserves().call()
134 | price_eth = int(price_eth1 / token_balance)
135 | price_token = int(price_token1 / token_balance)
136 |
137 | amount_eth_min = int(price_eth - (price_eth * SLIPPAGE // 100))
138 | amount_token_min = int(price_token - (price_token * SLIPPAGE // 100))
139 |
140 | contract_txn = self.contract.functions.removeLiquidityETH(
141 | token_to_remove['address'],
142 | token_balance,
143 | amount_token_min,
144 | amount_eth_min,
145 | self.address_wallet,
146 | (int(time.time()) + 10000), # deadline
147 | ).build_transaction({
148 | 'from': self.address_wallet,
149 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet)
150 | })
151 | self.send_transaction_and_wait(contract_txn, f'Remove {token_to_remove["name"]} ArbSwap')
152 |
--------------------------------------------------------------------------------
/modules/bridge.py:
--------------------------------------------------------------------------------
1 | from modules.wallet import Wallet
2 | from web3 import Web3
3 | from settings import remainder_eth, bridge_decimal
4 | from modules.retry import exception_handler
5 | import time
6 |
7 |
8 | class OfBridge(Wallet):
9 |
10 | def __init__(self, private_key, web3, number, log):
11 | super().__init__(private_key, web3, number, log)
12 | self.address = Web3.to_checksum_address('0xc4448b71118c9071Bcb9734A0EAc55D18A153949')
13 |
14 | @exception_handler('Deposit Eth from Ethereum to Arbitrum Nova')
15 | def deposit(self, prescale):
16 | gas = 200_000
17 | gas_cost = self.web3.eth.gas_price * gas
18 | balance = self.web3.eth.get_balance(self.address_wallet) - Web3.to_wei(remainder_eth, 'ether') - gas_cost
19 | if balance < 0:
20 | self.log.info('Insufficient funds')
21 | return 'balance'
22 | value = int(balance * prescale)
23 | value_wei = round(Web3.from_wei(value, 'ether'), bridge_decimal)
24 | value = Web3.to_wei(value_wei, 'ether')
25 | self.log.info(f'Deposit {value_wei} Eth from Ethereum to Arbitrum Nova')
26 |
27 | txn = {
28 | 'chainId': 1,
29 | 'data': '0x439370b1',
30 | 'from': self.address_wallet,
31 | 'to': self.address,
32 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
33 | 'value': value
34 | }
35 |
36 | gas = self.web3.eth.estimate_gas(txn)
37 | txn.update({'gas': gas})
38 |
39 | self.send_transaction_and_wait(txn, f'Deposit {value_wei} Eth from Ethereum to Arbitrum Nova')
40 |
--------------------------------------------------------------------------------
/modules/retry.py:
--------------------------------------------------------------------------------
1 | from web3.exceptions import TransactionNotFound
2 | from modules.tg_bot import TgBot
3 | from settings import RETRY_COUNT
4 | import time
5 |
6 |
7 | def exception_handler(lable):
8 | def decorator(func):
9 | def wrapper(self, *args, **kwargs):
10 | for _ in range(RETRY_COUNT):
11 | try:
12 | return func(self, *args, **kwargs)
13 | except TransactionNotFound:
14 | self.log.info('Транзакция не смайнилась за долгий промежуток времени, пытаюсь еще раз')
15 | if TgBot.TG_BOT_SEND is True:
16 | TgBot.send_message_error(self, self.number, lable, self.address_wallet,
17 | 'Транзакция не смайнилась за долгий промежуток времени, пытаюсь еще раз')
18 | time.sleep(30)
19 | except ConnectionError:
20 | self.log.info('Ошибка подключения к интернету или проблемы с РПЦ')
21 | if TgBot.TG_BOT_SEND is True:
22 | TgBot.send_message_error(self, self.number, lable, self.address_wallet,
23 | 'Ошибка подключения к интернету или проблемы с РПЦ')
24 | time.sleep(30)
25 | except Exception as error:
26 | if isinstance(error.args[0], dict):
27 | if 'nsufficient' in error.args[0]['message']:
28 | self.log.info('Ошибка, скорее всего нехватает комсы')
29 | if TgBot.TG_BOT_SEND is True:
30 | TgBot.send_message_error(self, self.number, lable, self.address_wallet,
31 | 'Ошибка, скорее всего нехватает комсы')
32 | return 'balance'
33 | else:
34 | self.log.info(error)
35 | time.sleep(30)
36 | else:
37 | self.log.info(error)
38 | time.sleep(30)
39 | return wrapper
40 | return decorator
41 |
--------------------------------------------------------------------------------
/modules/rpcswap.py:
--------------------------------------------------------------------------------
1 | from web3 import Web3
2 | from settings import remainder_eth, SLIPPAGE, swap_decimal
3 | from modules.wallet import Wallet, from_wei
4 | from modules.retry import exception_handler
5 | import json as js
6 | import time
7 |
8 |
9 | class RpcSwap(Wallet):
10 |
11 | def __init__(self, private_key, web3, number, log):
12 | super().__init__(private_key, web3, number, log)
13 | self.address = Web3.to_checksum_address('0x28e0f3ebab59a998c4f1019358388b5e2ca92cfa')
14 | self.abi = js.load(open('./abi/arb.txt'))
15 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi)
16 | self.token_remove_abi = js.load(open('./abi/Token_remove.txt'))
17 |
18 | @exception_handler('Buy token on RpcSwap')
19 | def buy_token(self, token_to_buy, prescale):
20 | self.log.info(f'Buy {token_to_buy["name"]} token on RpcSwap')
21 |
22 | balance = self.web3.eth.get_balance(self.address_wallet) - Web3.to_wei(remainder_eth, 'ether')
23 | if balance < 0:
24 | self.log.info('Insufficient funds')
25 | return 'balance'
26 | value = int(balance * prescale)
27 | value_wei = round(Web3.from_wei(value, 'ether'), swap_decimal)
28 | value = Web3.to_wei(value_wei, 'ether')
29 |
30 | amount_out = self.contract.functions.getAmountsOut(value, [self.ETH, token_to_buy['address']]).call()[1]
31 | min_tokens = int(amount_out - (amount_out * SLIPPAGE // 100))
32 | min_tok = round(from_wei(token_to_buy["decimal"], min_tokens), 5)
33 |
34 | contract_txn = self.contract.functions.swapExactETHForTokens(
35 | min_tokens,
36 | [self.ETH, token_to_buy['address']],
37 | self.address_wallet,
38 | (int(time.time()) + 10000) # deadline
39 | ).build_transaction({
40 | 'from': self.address_wallet,
41 | 'value': value,
42 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
43 | })
44 |
45 | self.send_transaction_and_wait(contract_txn, f'Buy {min_tok} {token_to_buy["name"]} RpcSwap')
46 |
47 | @exception_handler('Sold token on RpcSwap')
48 | def sold_token(self, token_to_sold):
49 | self.log.info(f'Sold {token_to_sold["name"]} token on RpcSwap')
50 |
51 | token_contract = self.web3.eth.contract(address=token_to_sold['address'], abi=self.token_abi)
52 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
53 | if token_balance == 0:
54 | self.log.info(f'Balance {token_to_sold["name"]} - 0\n')
55 | return
56 | decimal = token_contract.functions.decimals().call()
57 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
58 | if allowance < 10000 * 10 ** decimal:
59 | self.log.info('Нужен аппрув, делаю')
60 | self.approve(token_to_sold['address'], self.address)
61 | time.sleep(60)
62 |
63 | amount_out = self.contract.functions.getAmountsOut(token_balance, [token_to_sold['address'], self.ETH]).call()[1]
64 | min_tokens = int(amount_out - (amount_out * SLIPPAGE // 100))
65 | min_tok = round(from_wei(token_to_sold["decimal"], token_balance), 5)
66 |
67 | contract_txn = self.contract.functions.swapExactTokensForETH(
68 | token_balance,
69 | min_tokens,
70 | [token_to_sold['address'], self.ETH],
71 | self.address_wallet,
72 | (int(time.time()) + 10000) # deadline
73 | ).build_transaction({
74 | 'from': self.address_wallet,
75 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
76 | })
77 |
78 | self.send_transaction_and_wait(contract_txn, f'Sold {min_tok} {token_to_sold["name"]} RpcSwap')
79 |
80 | @exception_handler('Add Liquidity on RPCswap')
81 | def add_liquidity(self, token_to_add):
82 | self.log.info(f'Add Liquidity {token_to_add["name"]} token on RPCswap')
83 |
84 | token_contract = self.web3.eth.contract(address=token_to_add['address'], abi=self.token_abi)
85 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
86 | if token_balance == 0:
87 | self.log.info(f'Balance {token_to_add["name"]} - 0\n')
88 | return
89 | decimal = token_contract.functions.decimals().call()
90 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
91 | if allowance < 10000 * 10 ** decimal:
92 | self.log.info('Нужен аппрув, делаю')
93 | self.approve(token_to_add['address'], self.address)
94 | time.sleep(60)
95 |
96 | amount_out = self.contract.functions.getAmountsOut(token_balance, [token_to_add['address'], self.ETH]).call()[1]
97 | amount_out_eth = int(amount_out - (amount_out * SLIPPAGE // 100))
98 | min_tok = round(from_wei(token_to_add["decimal"], token_balance), 5)
99 |
100 | contract_txn = self.contract.functions.addLiquidityETH(
101 | token_to_add['address'],
102 | token_balance,
103 | int(token_balance - (token_balance * SLIPPAGE // 100)),
104 | amount_out_eth,
105 | self.address_wallet,
106 | (int(time.time()) + 10000), # deadline
107 | ).build_transaction({
108 | 'from': self.address_wallet,
109 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
110 | 'value': amount_out
111 | })
112 |
113 | self.send_transaction_and_wait(contract_txn, f'Add {min_tok} {token_to_add["name"]} RPCswap')
114 |
115 | @exception_handler('Remove Liquidity on RPCswap')
116 | def remove_liquidity(self, token_to_remove):
117 | self.log.info(f'Remove Liquidity {token_to_remove["name"]} token on RPCswap')
118 |
119 | token_contract = self.web3.eth.contract(address=token_to_remove['lp rpc'], abi=self.token_remove_abi)
120 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
121 | if token_balance == 0:
122 | self.log.info(f'Balance {token_to_remove["name"]} - 0\n')
123 | return 'token 0'
124 | decimal = token_contract.functions.decimals().call()
125 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
126 | if allowance < 10000 * 10 ** decimal:
127 | self.log.info('Нужен аппрув, делаю')
128 | self.approve(token_to_remove['lp rpc'], self.address)
129 | time.sleep(60)
130 |
131 | price_eth1, price_token1, _ = token_contract.functions.getReserves().call()
132 | price_eth = int(price_eth1 / token_balance)
133 | price_token = int(price_token1 / token_balance)
134 |
135 | amount_eth_min = int(price_eth - (price_eth * SLIPPAGE // 100))
136 | amount_token_min = int(price_token - (price_token * SLIPPAGE // 100))
137 |
138 | contract_txn = self.contract.functions.removeLiquidityETH(
139 | token_to_remove['address'],
140 | token_balance,
141 | amount_token_min,
142 | amount_eth_min,
143 | self.address_wallet,
144 | (int(time.time()) + 10000), # deadline
145 | ).build_transaction({
146 | 'from': self.address_wallet,
147 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet)
148 | })
149 |
150 | self.send_transaction_and_wait(contract_txn, f'Remove {token_to_remove["name"]} RPCswap')
151 |
--------------------------------------------------------------------------------
/modules/slingshot.py:
--------------------------------------------------------------------------------
1 | from web3 import Web3
2 | from settings import remainder_eth, swap_decimal
3 | from modules.wallet import Wallet, from_wei
4 | from modules.retry import exception_handler
5 | import requests
6 | import time
7 |
8 |
9 | class Slingshot(Wallet):
10 |
11 | def __init__(self, private_key, web3, number, log):
12 | super().__init__(private_key, web3, number, log)
13 | self.ETH = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'
14 | self.url = 'https://slingshot.finance/api/v3/trade/'
15 |
16 | @exception_handler('Buy token Slingshot')
17 | def buy_token(self, token_to_buy, prescale):
18 | self.log.info(f'Buy {token_to_buy["name"]} token on Slingshot')
19 |
20 | balance = self.web3.eth.get_balance(self.address_wallet) - Web3.to_wei(remainder_eth, 'ether')
21 | if balance < 0:
22 | self.log.info('Insufficient funds')
23 | return 'balance'
24 | value = int(balance * prescale)
25 | value_wei = round(Web3.from_wei(value, 'ether'), swap_decimal)
26 | value = Web3.to_wei(value_wei, 'ether')
27 |
28 | json = {
29 | 'from': self.ETH,
30 | 'fromAmount': str(value),
31 | 'gasOptimized': True,
32 | 'limit': '99',
33 | 'recipient': self.address_wallet,
34 | 'source': 'web',
35 | 'threeHop': True,
36 | 'to': token_to_buy['address'],
37 | 'useGasAwareV2': True,
38 | '_unsafe': False
39 | }
40 | headers = {
41 | 'accept': '*/*',
42 | 'liquidityzone': 'nova',
43 | 'origin': 'https://app.slingshot.finance',
44 | 'referer': 'https://app.slingshot.finance/',
45 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
46 | }
47 |
48 | res = requests.post(url=self.url, json=json, headers=headers)
49 | json_data = res.json()
50 |
51 | min_tok = round(from_wei(token_to_buy['decimal'], int(json_data['estimatedOutput'])), 5)
52 |
53 | txn = {
54 | 'chainId': 42170,
55 | 'data': json_data['txData'],
56 | 'from': self.address_wallet,
57 | 'to': Web3.to_checksum_address('0x970bec30E2c5A1e435761332bD3659ad6745D839'),
58 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
59 | 'maxFeePerGas': self.web3.eth.gas_price,
60 | 'maxPriorityFeePerGas': self.web3.eth.max_priority_fee,
61 | 'value': value
62 | }
63 |
64 | gas = self.web3.eth.estimate_gas(txn)
65 | txn.update({'gas': gas})
66 |
67 | self.send_transaction_and_wait(txn, f'Buy {min_tok} {token_to_buy["name"]} Slingshot')
68 |
69 | @exception_handler('Sold token Slingshot')
70 | def sold_token(self, token_to_sold):
71 | self.log.info(f'Sold {token_to_sold["name"]} token on Slingshot')
72 |
73 | token_contract = self.web3.eth.contract(address=token_to_sold['address'], abi=self.token_abi)
74 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
75 | if token_balance == 0:
76 | self.log.info(f'Balance {token_to_sold["name"]} - 0\n')
77 | return
78 | decimal = token_contract.functions.decimals().call()
79 | spender = Web3.to_checksum_address('0xa135b6189d2e073dfbc33c30c86bb4ecea4e2ee5')
80 | allowance = token_contract.functions.allowance(self.address_wallet, spender).call()
81 | if allowance < 10000 * 10 ** decimal:
82 | self.log.info('Нужен аппрув, делаю')
83 | self.approve(token_to_sold['address'], spender)
84 | time.sleep(60)
85 |
86 | json = {
87 | 'from': token_to_sold['address'],
88 | 'fromAmount': str(token_balance),
89 | 'gasOptimized': True,
90 | 'limit': '99',
91 | 'recipient': self.address_wallet,
92 | 'source': 'web',
93 | 'threeHop': True,
94 | 'to': self.ETH,
95 | 'useGasAwareV2': True,
96 | '_unsafe': False
97 | }
98 | headers = {
99 | 'accept': '*/*',
100 | 'liquidityzone': 'nova',
101 | 'origin': 'https://app.slingshot.finance',
102 | 'referer': 'https://app.slingshot.finance/',
103 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
104 | }
105 |
106 | res = requests.post(url=self.url, json=json, headers=headers)
107 | json_data = res.json()
108 |
109 | min_tok = round(from_wei(int(token_to_sold["decimal"]), token_balance), 5)
110 |
111 | txn = {
112 | 'chainId': 42170,
113 | 'data': json_data['txData'],
114 | 'from': self.address_wallet,
115 | 'to': Web3.to_checksum_address('0x970bec30E2c5A1e435761332bD3659ad6745D839'),
116 | 'maxFeePerGas': self.web3.eth.gas_price,
117 | 'maxPriorityFeePerGas': self.web3.eth.max_priority_fee,
118 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
119 | }
120 |
121 | gas = self.web3.eth.estimate_gas(txn)
122 | txn.update({'gas': gas})
123 |
124 | self.send_transaction_and_wait(txn, f'Sold {min_tok} {token_to_sold["name"]} Slingshot')
125 |
--------------------------------------------------------------------------------
/modules/sushiswap.py:
--------------------------------------------------------------------------------
1 | from web3 import Web3
2 | from settings import remainder_eth, SLIPPAGE, swap_decimal
3 | from modules.wallet import Wallet, from_wei
4 | from modules.retry import exception_handler
5 | import json as js
6 | import time
7 |
8 |
9 | class SushiSwap(Wallet):
10 |
11 | def __init__(self, private_key, web3, number, log):
12 | super().__init__(private_key, web3, number, log)
13 | self.address = Web3.to_checksum_address('0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506')
14 | self.abi = js.load(open('./abi/sushi.txt'))
15 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi)
16 | self.token_remove_abi = js.load(open('./abi/Token_remove.txt'))
17 |
18 | @exception_handler('Buy token on SushiSwap')
19 | def buy_token(self, token_to_buy, prescale):
20 | self.log.info(f'Buy {token_to_buy["name"]} token on SushiSwap')
21 |
22 | balance = self.web3.eth.get_balance(self.address_wallet) - Web3.to_wei(remainder_eth, 'ether')
23 | if balance < 0:
24 | self.log.info('Insufficient funds')
25 | return 'balance'
26 | value = int(balance * prescale)
27 | value_wei = round(Web3.from_wei(value, 'ether'), swap_decimal)
28 | value = Web3.to_wei(value_wei, 'ether')
29 |
30 | amount_out = self.contract.functions.getAmountsOut(value, (self.ETH, token_to_buy['address'])).call()[1]
31 | min_tokens = int(amount_out - (amount_out * SLIPPAGE // 100))
32 | min_tok = round(from_wei(token_to_buy["decimal"], min_tokens), 5)
33 |
34 | contract_txn = self.contract.functions.swapExactETHForTokens(
35 | min_tokens,
36 | [self.ETH, token_to_buy['address']],
37 | self.address_wallet,
38 | (int(time.time()) + 10000) # deadline
39 | ).build_transaction({
40 | 'from': self.address_wallet,
41 | 'value': value,
42 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
43 | })
44 |
45 | self.send_transaction_and_wait(contract_txn, f'Buy {min_tok} {token_to_buy["name"]} SushiSwap')
46 |
47 | @exception_handler('Sold token SushiSwap')
48 | def sold_token(self, token_to_sold):
49 | self.log.info(f'Sold {token_to_sold["name"]} token on SushiSwap')
50 |
51 | token_contract = self.web3.eth.contract(address=token_to_sold['address'], abi=self.token_abi)
52 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
53 | if token_balance == 0:
54 | self.log.info(f'Balance {token_to_sold["name"]} - 0\n')
55 | return
56 | decimal = token_contract.functions.decimals().call()
57 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
58 | if allowance < 10000 * 10 ** decimal:
59 | self.log.info('Нужен аппрув, делаю')
60 | self.approve(token_to_sold['address'], self.address)
61 | time.sleep(60)
62 |
63 | amount_out = self.contract.functions.getAmountsOut(token_balance, [token_to_sold['address'], self.ETH]).call()[1]
64 | min_tokens = int(amount_out - (amount_out * SLIPPAGE // 100))
65 | min_tok = round(from_wei(token_to_sold["decimal"], token_balance), 5)
66 |
67 | contract_txn = self.contract.functions.swapExactTokensForETH(
68 | token_balance,
69 | min_tokens,
70 | [token_to_sold['address'], self.ETH],
71 | self.address_wallet,
72 | (int(time.time()) + 10000) # deadline
73 | ).build_transaction({
74 | 'from': self.address_wallet,
75 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
76 | })
77 |
78 | self.send_transaction_and_wait(contract_txn, f'Sold {min_tok} {token_to_sold["name"]} SushiSwap')
79 |
80 | @exception_handler('Add token SushiSwap')
81 | def add_liquidity(self, token_to_add):
82 | self.log.info(f'Add Liquidity {token_to_add["name"]} token on SushiSwap')
83 |
84 | token_contract = self.web3.eth.contract(address=token_to_add['address'], abi=self.token_abi)
85 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
86 | if token_balance == 0:
87 | self.log.info(f'Balance {token_to_add["name"]} - 0\n')
88 | return
89 | decimal = token_contract.functions.decimals().call()
90 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
91 | if allowance < 10000 * 10 ** decimal:
92 | self.log.info('Нужен аппрув, делаю')
93 | self.approve(token_to_add['address'], self.address)
94 | time.sleep(60)
95 |
96 | amount_out = self.contract.functions.getAmountsOut(token_balance, [token_to_add['address'], self.ETH]).call()[1]
97 | amount_out_eth = int(amount_out - (amount_out * SLIPPAGE // 100))
98 | min_tok = round(from_wei(token_to_add["decimal"], token_balance), 5)
99 |
100 | contract_txn = self.contract.functions.addLiquidityETH(
101 | token_to_add['address'],
102 | token_balance,
103 | int(token_balance - (token_balance * SLIPPAGE // 100)),
104 | amount_out_eth,
105 | self.address_wallet,
106 | (int(time.time()) + 10000), # deadline
107 | ).build_transaction({
108 | 'from': self.address_wallet,
109 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
110 | 'value': amount_out
111 | })
112 |
113 | self.send_transaction_and_wait(contract_txn, f'Add {min_tok} {token_to_add["name"]} SushiSwap')
114 |
115 | @exception_handler('Remove liquidity SushiSwap')
116 | def remove_liquidity(self, token_to_remove):
117 | self.log.info(f'Remove Liquidity {token_to_remove["name"]} token on SushiSwap')
118 |
119 | token_contract = self.web3.eth.contract(address=token_to_remove['lp sushi'], abi=self.token_remove_abi)
120 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call()
121 | if token_balance == 0:
122 | self.log.info(f'Balance {token_to_remove["name"]} - 0\n')
123 | return 'token 0'
124 | decimal = token_contract.functions.decimals().call()
125 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call()
126 | if allowance < 10000 * 10 ** decimal:
127 | self.log.info('Нужен аппрув, делаю')
128 | self.approve(token_to_remove['lp sushi'], self.address)
129 | time.sleep(60)
130 |
131 | price_eth1, price_token1, _ = token_contract.functions.getReserves().call()
132 | price_eth = int(price_eth1 / token_balance)
133 | price_token = int(price_token1 / token_balance)
134 |
135 | amount_eth_min = int(price_eth - (price_eth * SLIPPAGE // 100))
136 | amount_token_min = int(price_token - (price_token * SLIPPAGE // 100))
137 |
138 | contract_txn = self.contract.functions.removeLiquidityETH(
139 | token_to_remove['address'],
140 | token_balance,
141 | amount_token_min,
142 | amount_eth_min,
143 | self.address_wallet,
144 | (int(time.time()) + 10000), # deadline
145 | ).build_transaction({
146 | 'from': self.address_wallet,
147 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet)
148 | })
149 |
150 | self.send_transaction_and_wait(contract_txn, f'Remove {token_to_remove["name"]} SushiSwap')
151 |
--------------------------------------------------------------------------------
/modules/swaps.py:
--------------------------------------------------------------------------------
1 | from modules.wallet import Wallet
2 | from modules.arbswap import ArbSwap
3 | from modules.rpcswap import RpcSwap
4 | from modules.slingshot import Slingshot
5 | from modules.sushiswap import SushiSwap
6 | from settings import *
7 | from web3 import Web3
8 | import random
9 | import time
10 |
11 |
12 | token_arr = [
13 |
14 | {
15 | 'name': 'USDC',
16 | 'address': Web3.to_checksum_address('0x750ba8b76187092B0D1E87E28daaf484d1b5273b'),
17 | 'decimal': 6,
18 | 'lp arbswap': Web3.to_checksum_address('0xdBA61558A49c0A836A4106502cFbe5870DAD1743'),
19 | 'lp rpc': Web3.to_checksum_address('0x66Ec0a03409E63Ae5b38f7bC5185F72e7191B17d'),
20 | 'lp sushi': Web3.to_checksum_address('0x26d96cfC6DF8262b1bb327a2df0eDE02FDfC8874'),
21 | },
22 |
23 | {
24 | 'name': 'DAI',
25 | 'address': Web3.to_checksum_address('0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1'),
26 | 'decimal': 18,
27 | 'lp arbswap': Web3.to_checksum_address('0x3a94C233A80d7aDA126C1a7A6657de4513AD5D76'),
28 | 'lp rpc': Web3.to_checksum_address('0xCBFb05f74A0cf83BD8C091c5B6CFa46769e8E6a1'),
29 | 'lp sushi': Web3.to_checksum_address('0x5c7966CebD4027266bd5163a8aB04331Ade9C78c'),
30 | },
31 |
32 | {
33 | 'name': 'WBTC',
34 | 'address': Web3.to_checksum_address('0x1d05e4e72cd994cdf976181cfb0707345763564d'),
35 | 'decimal': 8,
36 | },
37 |
38 | {
39 | 'name': 'ARB',
40 | 'address': Web3.to_checksum_address('0xf823C3cD3CeBE0a1fA952ba88Dc9EEf8e0Bf46AD'),
41 | 'decimal': 18,
42 | 'lp arbswap': Web3.to_checksum_address('0x9Edb75c256d991D7b418fb81af6695c884495884'),
43 | 'lp rpc': Web3.to_checksum_address('0xE1e16731E0F7F642Ec073AD1d10cba693ef272e8'),
44 | 'lp sushi': Web3.to_checksum_address('0x39EC31B1D7eeC08F1b1af15b18826BFE4e26Af1D'),
45 | }
46 | ]
47 |
48 | token_arr1 = token_arr.copy()
49 | del token_arr1[2]
50 |
51 |
52 | class Swaps(Wallet):
53 | def __init__(self, private_key, web3, str_number, log):
54 | super().__init__(private_key, web3, str_number, log)
55 |
56 | def swap(self):
57 | arr_buy = []
58 |
59 | if SLINGSHOT is True:
60 | sling = Slingshot(self.private_key, self.web3, self.number, self.log)
61 | arr_buy.append(sling)
62 | if SUSHISWAP is True:
63 | sushi = SushiSwap(self.private_key, self.web3, self.number, self.log)
64 | arr_buy.append(sushi)
65 | if ARBSWAP is True:
66 | arb = ArbSwap(self.private_key, self.web3, self.number, self.log)
67 | arr_buy.append(arb)
68 | if RPCSWAP is True:
69 | rpc = RpcSwap(self.private_key, self.web3, self.number, self.log)
70 | arr_buy.append(rpc)
71 |
72 | len_way = len(arr_buy)
73 | random.shuffle(arr_buy)
74 |
75 | if liquiditi_sushi is True and SUSHISWAP is True:
76 | if len_way == 1:
77 | liquidity_sushi_index = 0
78 | else:
79 | liquidity_sushi_index = random.randint(0, len_way - 1)
80 |
81 | if liquiditi_arb is True and ARBSWAP is True:
82 | if len_way == 1:
83 | liquidity_arb_index = 0
84 | else:
85 | liquidity_arb_index = random.randint(0, len_way - 1)
86 |
87 | if liquiditi_rpc is True and RPCSWAP is True:
88 | if len_way == 1:
89 | liquidity_rpc_index = 0
90 | else:
91 | liquidity_rpc_index = random.randint(0, len_way - 1)
92 |
93 | flag_liquiditi_sushi = False
94 | flag_liquiditi_arb = False
95 | flag_liquiditi_rpc = False
96 |
97 | total_number_of_repetitions = random.randint(total_number_of_repetitions_min, total_number_of_repetitions_max)
98 |
99 | for i in range(total_number_of_repetitions):
100 |
101 | if len_way == 1:
102 |
103 | token_to_swap = random.choice(token_arr)
104 |
105 | value_swap = round(random.uniform(prescale_swap_min, prescale_swap_max), swap_decimal)
106 | res = arr_buy[0].buy_token(token_to_swap, value_swap)
107 | if res == 'balance':
108 | break
109 | time.sleep(random.randint(time_delay_min, time_delay_max))
110 |
111 | res = arr_buy[0].sold_token(token_to_swap)
112 | if res == 'balance':
113 | break
114 | time.sleep(random.randint(time_delay_min, time_delay_max))
115 |
116 | if liquiditi_sushi is True and flag_liquiditi_sushi is False:
117 | token_to_swap = random.choice(token_arr1)
118 | value_liquid = random.uniform(liquidity_prescale_min, liquidity_prescale_max)
119 | res = sushi.buy_token(token_to_swap, value_liquid)
120 | if res == 'balance':
121 | break
122 | time.sleep(random.randint(time_delay_min, time_delay_max))
123 | res = sushi.add_liquidity(token_to_swap)
124 | if res == 'balance':
125 | break
126 | time.sleep(random.randint(time_delay_min, time_delay_max))
127 | flag_liquiditi_sushi = True
128 |
129 | if liquiditi_rpc is True and flag_liquiditi_rpc is False:
130 | token_to_swap = random.choice(token_arr1)
131 | value_liquid = random.uniform(liquidity_prescale_min, liquidity_prescale_max)
132 | res = rpc.buy_token(token_to_swap, value_liquid)
133 | if res == 'balance':
134 | break
135 | time.sleep(random.randint(time_delay_min, time_delay_max))
136 | res = rpc.add_liquidity(token_to_swap)
137 | if res == 'balance':
138 | break
139 | time.sleep(random.randint(time_delay_min, time_delay_max))
140 | flag_liquiditi_rpc = True
141 |
142 | if liquiditi_arb is True and flag_liquiditi_arb is False:
143 | token_to_swap = random.choice(token_arr1)
144 | value_liquid = random.uniform(liquidity_prescale_min, liquidity_prescale_max)
145 | res = arb.buy_token(token_to_swap, value_liquid)
146 | if res == 'balance':
147 | break
148 | time.sleep(random.randint(time_delay_min, time_delay_max))
149 | res = arb.add_liquidity(token_to_swap)
150 | if res == 'balance':
151 | break
152 | time.sleep(random.randint(time_delay_min, time_delay_max))
153 | flag_liquiditi_arb = True
154 |
155 | else:
156 |
157 | for j in range(len_way - 1):
158 |
159 | number_of_repetitions = random.randint(number_of_repetitions_min, number_of_repetitions_max)
160 | for k in range(number_of_repetitions):
161 |
162 | token_to_swap = random.choice(token_arr)
163 |
164 | self.log.info(f'Круг на конкретной свапалке - {k + 1}')
165 | value_swap = round(random.uniform(prescale_swap_min, prescale_swap_max), swap_decimal)
166 | res = arr_buy[j].buy_token(token_to_swap, value_swap)
167 | if res == 'balance':
168 | break
169 | time.sleep(random.randint(time_delay_min, time_delay_max))
170 |
171 | res = arr_buy[j].sold_token(token_to_swap)
172 | if res == 'balance':
173 | break
174 | time.sleep(random.randint(time_delay_min, time_delay_max))
175 |
176 | if FLAG is True:
177 | break
178 |
179 | if liquiditi_sushi is True and flag_liquiditi_sushi is False:
180 | if liquidity_sushi_index == j:
181 | token_to_swap = random.choice(token_arr1)
182 | value_liquid = random.uniform(liquidity_prescale_min, liquidity_prescale_max)
183 | res = sushi.buy_token(token_to_swap, value_liquid)
184 | if res == 'balance':
185 | break
186 | time.sleep(random.randint(time_delay_min, time_delay_max))
187 | res = sushi.add_liquidity(token_to_swap)
188 | if res == 'balance':
189 | break
190 | time.sleep(random.randint(time_delay_min, time_delay_max))
191 | flag_liquiditi_sushi = True
192 |
193 | if liquiditi_rpc is True and flag_liquiditi_rpc is False:
194 | if liquidity_rpc_index == j:
195 | token_to_swap = random.choice(token_arr1)
196 | value_liquid = random.uniform(liquidity_prescale_min, liquidity_prescale_max)
197 | res = rpc.buy_token(token_to_swap, value_liquid)
198 | if res == 'balance':
199 | break
200 | time.sleep(random.randint(time_delay_min, time_delay_max))
201 | res = rpc.add_liquidity(token_to_swap)
202 | if res == 'balance':
203 | break
204 | time.sleep(random.randint(time_delay_min, time_delay_max))
205 | flag_liquiditi_rpc = True
206 |
207 | if liquiditi_arb is True and flag_liquiditi_arb is False:
208 | if liquidity_arb_index == j:
209 | token_to_swap = random.choice(token_arr1)
210 | value_liquid = random.uniform(liquidity_prescale_min, liquidity_prescale_max)
211 | res = arb.buy_token(token_to_swap, value_liquid)
212 | if res == 'balance':
213 | break
214 | time.sleep(random.randint(time_delay_min, time_delay_max))
215 | res = arb.add_liquidity(token_to_swap)
216 | if res == 'balance':
217 | break
218 | time.sleep(random.randint(time_delay_min, time_delay_max))
219 | flag_liquiditi_arb = True
220 |
221 | random.shuffle(arr_buy)
222 |
223 | def remove_liquidity(self):
224 | dexs = []
225 | if SUSHISWAP is True:
226 | sushi = SushiSwap(self.private_key, self.web3, self.number, self.log)
227 | dexs.append(sushi)
228 |
229 | if ARBSWAP is True:
230 | arb = ArbSwap(self.private_key, self.web3, self.number, self.log)
231 | dexs.append(arb)
232 |
233 | if RPCSWAP is True:
234 | rpc = RpcSwap(self.private_key, self.web3, self.number, self.log)
235 | dexs.append(rpc)
236 |
237 | random.shuffle(dexs)
238 | for dex in dexs:
239 | for token in token_arr1:
240 | res = dex.remove_liquidity(token)
241 | if res != 'token 0':
242 | time.sleep(random.randint(time_delay_min, time_delay_max))
243 | else:
244 | time.sleep(1)
245 |
--------------------------------------------------------------------------------
/modules/tg_bot.py:
--------------------------------------------------------------------------------
1 | import telebot
2 | from settings import Telegram
3 |
4 |
5 | class TgBot(Telegram):
6 | def send_message_success(self, number, text, address, link):
7 | try:
8 | str_send = f'[{number}]\n✅ {text}\nАккаунт: {address}\nTx hash '
9 | bot = telebot.TeleBot(Telegram.TG_TOKEN)
10 | bot.send_message(Telegram.TG_ID, str_send, parse_mode='html', disable_web_page_preview=True)
11 | except Exception as error:
12 | print(error)
13 |
14 | def send_message_error(self, number, text, address, errorr):
15 | try:
16 | str_send = f'[{number}]\n❌ {text}\nАккаунт: {address}\n{errorr}'
17 | bot = telebot.TeleBot(Telegram.TG_TOKEN)
18 | bot.send_message(Telegram.TG_ID, str_send, parse_mode='html', disable_web_page_preview=True)
19 | except Exception as error:
20 | print(error)
21 |
--------------------------------------------------------------------------------
/modules/wallet.py:
--------------------------------------------------------------------------------
1 | from web3 import Web3
2 | import json as js
3 | import time
4 | from modules.tg_bot import TgBot
5 | from modules.retry import exception_handler
6 |
7 |
8 | class Wallet(TgBot):
9 | def __init__(self, private_key, web3, number, log):
10 | self.private_key = private_key
11 | self.number = number
12 | self.log = log
13 | self.web3 = web3
14 | self.address_wallet = self.web3.eth.account.from_key(private_key).address
15 | self.token_abi = js.load(open('./abi/Token.txt'))
16 | self.ETH = Web3.to_checksum_address('0x722e8bdd2ce80a4422e880164f2079488e115365')
17 |
18 | def send_transaction_and_wait(self, tx, message):
19 | signed_txn = self.web3.eth.account.sign_transaction(tx, private_key=self.private_key)
20 | tx_hash = self.web3.eth.send_raw_transaction(signed_txn.rawTransaction)
21 | self.log.info('Отправил транзакцию')
22 | time.sleep(5)
23 | tx_receipt = self.web3.eth.wait_for_transaction_receipt(tx_hash, timeout=300, poll_latency=10)
24 | if tx_receipt.status == 1:
25 | self.log.info(f'Транзакция смайнилась успешно')
26 | if TgBot.TG_BOT_SEND is True:
27 | TgBot.send_message_success(self, self.number, message, self.address_wallet, f'https://nova.arbiscan.io/tx/{tx_hash.hex()}')
28 | else:
29 | self.log.info('Транзакция сфейлилась, пытаюсь еще раз')
30 | if TgBot.TG_BOT_SEND is True:
31 | TgBot.send_message_error(self, self.number, message, self.address_wallet, 'Транзакция сфейлилась, пытаюсь еще раз')
32 | raise ValueError('')
33 |
34 | self.log.info(f'[{self.number}] {message} || https://nova.arbiscan.io/tx/{tx_hash.hex()}\n')
35 | return tx_hash
36 |
37 | @exception_handler(lable='approve')
38 | def approve(self, token_to_approve, address_to_approve):
39 | token_contract = self.web3.eth.contract(address=token_to_approve, abi=self.token_abi)
40 | max_amount = 2 ** 256 - 1
41 | dick = {
42 | 'from': self.address_wallet,
43 | 'gasPrice': self.web3.eth.gas_price,
44 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet),
45 | }
46 | txn = token_contract.functions.approve(address_to_approve, max_amount).build_transaction(dick)
47 |
48 | self.send_transaction_and_wait(txn, 'approve')
49 |
50 |
51 | def to_wei(decimal, amount):
52 | if decimal == 6:
53 | unit = 'picoether'
54 | else:
55 | unit = 'ether'
56 |
57 | return Web3.to_wei(amount, unit)
58 |
59 |
60 | def from_wei(decimal, amount):
61 | if decimal == 6:
62 | unit = 'picoether'
63 | elif decimal == 8:
64 | return float(amount / 10 ** 8)
65 | else:
66 | unit = 'ether'
67 |
68 | return Web3.from_wei(amount, unit)
69 |
--------------------------------------------------------------------------------
/modules/zerius.py:
--------------------------------------------------------------------------------
1 | from modules.wallet import Wallet
2 | from modules.retry import exception_handler
3 | from web3 import Web3
4 | from eth_abi.packed import encode_packed
5 | from settings import chain_arr, nft_random_chain, nft_chain_to, gas_random_chain, gas_chain_to, gas_chain_arr, value_from, value_to, value_decimal
6 | import json as js
7 | import random
8 |
9 |
10 | LAYERZERO_CHAINS_ID = {
11 | 'avalanche' : 106,
12 | 'polygon' : 109,
13 | 'ethereum' : 101,
14 | 'bsc' : 102,
15 | 'arbitrum' : 110,
16 | 'optimism' : 111,
17 | 'fantom' : 112,
18 | 'aptos' : 108,
19 | 'harmony' : 116,
20 | 'celo' : 125,
21 | 'moonbeam' : 126,
22 | 'fuse' : 138,
23 | 'gnosis' : 145,
24 | 'klaytn' : 150,
25 | 'metis' : 151,
26 | 'core' : 153,
27 | 'polygon_zkevm': 158,
28 | 'canto' : 159,
29 | 'moonriver' : 167,
30 | 'tenet' : 173,
31 | 'nova' : 175,
32 | 'kava' : 177,
33 | 'meter' : 176,
34 | 'base' : 184,
35 | 'zora' : 195,
36 | 'scroll' : 214,
37 | 'zksync' : 165,
38 | 'linea' : 183,
39 | 'mantle' : 181,
40 | }
41 |
42 | REFUEL_CONTRACTS = {
43 | 'optimism' : '0x2076BDd52Af431ba0E5411b3dd9B5eeDa31BB9Eb',
44 | 'bsc' : '0x5B209E7c81DEaad0ffb8b76b696dBb4633A318CD',
45 | 'arbitrum' : '0x412aea168aDd34361aFEf6a2e3FC01928Fba1248',
46 | 'polygon' : '0x2ef766b59e4603250265EcC468cF38a6a00b84b3',
47 | 'polygon_zkevm' : '0xBAf5C493a4c364cBD2CA83C355E75F0ff7042945',
48 | 'zksync' : '0xec8afef7afe586eb523c228b6baf3171b1f6dd95',
49 | 'avalanche' : '0x5B209E7c81DEaad0ffb8b76b696dBb4633A318CD',
50 | 'gnosis' : '0x1fe2c567169d39CCc5299727FfAC96362b2Ab90E',
51 | 'fantom' : '0xBFd3539e4e0b1B29e8b08d17f30F1291C837a18E',
52 | 'nova' : '0x3Fc5913D35105f338cEfcB3a7a0768c48E2Ade8E',
53 | 'harmony' : '0x5B209E7c81DEaad0ffb8b76b696dBb4633A318CD',
54 | 'core' : '0xB47D82aA70f839dC27a34573f135eD6dE6CED9A5',
55 | 'celo' : '0xFF21d5a3a8e3E8BA2576e967888Deea583ff02f8',
56 | 'moonbeam' : '0xb0bea3bB2d6EDDD2014952ABd744660bAeF9747d',
57 | 'base' : '0x9415AD63EdF2e0de7D8B9D8FeE4b939dd1e52F2C',
58 | 'scroll' : '0xB074f8D92b930D3415DA6bA80F6D38f69ee4B9cf',
59 | 'zora' : '0x1fe2c567169d39CCc5299727FfAC96362b2Ab90E',
60 | 'linea' : '0x5B209E7c81DEaad0ffb8b76b696dBb4633A318CD',
61 | 'metis' : '0x1b07F1f4F860e72c9367e718a30e38130114AD22',
62 | 'mantle' : '0x4F1C698e5cA32b28030E9d9F17C164F27aB5D866',
63 | }
64 |
65 |
66 | class Zerius(Wallet):
67 |
68 | def __init__(self, private_key, web3, number, log):
69 | super().__init__(private_key, web3, number, log)
70 | self.address_bridge = Web3.to_checksum_address('0x5188368a92b49f30f4cf9bef64635bcf8459c7a7')
71 | self.abi_bridge = js.load(open('./abi/bridge_nft.txt'))
72 | self.contract_bridge = self.web3.eth.contract(address=self.address_bridge, abi=self.abi_bridge)
73 |
74 | self.address_refuel = Web3.to_checksum_address('0x3Fc5913D35105f338cEfcB3a7a0768c48E2Ade8E')
75 | self.abi_refuel = js.load(open('./abi/refuel.txt'))
76 | self.contract_refuel = self.web3.eth.contract(address=self.address_refuel, abi=self.abi_refuel)
77 |
78 | @exception_handler('Mint NFT on Zerius')
79 | def mint_nft(self):
80 |
81 | txn = self.contract_bridge.functions.mint(Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C')).build_transaction({
82 | 'from': self.address_wallet,
83 | 'value': Web3.to_wei(0.000011, 'ether'),
84 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet)
85 | })
86 |
87 | self.send_transaction_and_wait(txn, 'Mint NFT on Zerius')
88 |
89 | @exception_handler('Bridge NFT on Zerius')
90 | def bridge_nft(self):
91 |
92 | if nft_random_chain is True:
93 | to_chain = random.choice(chain_arr)
94 | else:
95 | to_chain = nft_chain_to
96 |
97 | count = self.contract_bridge.functions.balanceOf(self.address_wallet).call()
98 | tokens_arr = [self.contract_bridge.functions.tokenOfOwnerByIndex(self.address_wallet, i).call() for i in range(count)]
99 | token_id = random.choice(tokens_arr)
100 |
101 | min_dst_gas = self.contract_bridge.functions.minDstGasLookup(LAYERZERO_CHAINS_ID[to_chain], 1).call()
102 |
103 | if min_dst_gas == 0:
104 | self.log.info(f'You cannot bridge on the {to_chain} network')
105 | if nft_random_chain is True:
106 | self.log.info(f'I choose another network and try again')
107 | raise ValueError('')
108 | else:
109 | return
110 |
111 | adapter_params = encode_packed(
112 | ["uint16", "uint256"],
113 | [1, min_dst_gas]
114 | )
115 |
116 | native_fee, _ = self.contract_bridge.functions.estimateSendFee(
117 | LAYERZERO_CHAINS_ID[to_chain],
118 | self.address_wallet,
119 | token_id,
120 | False,
121 | adapter_params
122 | ).call()
123 |
124 | contract_txn = self.contract_bridge.functions.sendFrom(
125 | self.address_wallet,
126 | LAYERZERO_CHAINS_ID[to_chain],
127 | self.address_wallet,
128 | token_id,
129 | self.address_wallet,
130 | '0x0000000000000000000000000000000000000000',
131 | adapter_params
132 | ).build_transaction(
133 | {
134 | "from": self.address_wallet,
135 | "value": native_fee,
136 | "nonce": self.web3.eth.get_transaction_count(self.address_wallet),
137 | }
138 | )
139 |
140 | self.send_transaction_and_wait(contract_txn, f'Bridge {token_id} NFT to {to_chain}')
141 |
142 | @exception_handler('Check price')
143 | def check_price_nft(self, to_chain):
144 |
145 | min_dst_gas = self.contract_bridge.functions.minDstGasLookup(LAYERZERO_CHAINS_ID[to_chain], 1).call()
146 |
147 | if min_dst_gas == 0:
148 | self.log.info(f'You cannot bridge on the {to_chain} network')
149 | return 1000
150 |
151 | adapter_params = encode_packed(
152 | ["uint16", "uint256"],
153 | [1, min_dst_gas]
154 | )
155 |
156 | native_fee, _ = self.contract_bridge.functions.estimateSendFee(
157 | LAYERZERO_CHAINS_ID[to_chain],
158 | self.address_wallet,
159 | 1,
160 | False,
161 | adapter_params
162 | ).call()
163 |
164 | self.log.info(f'{to_chain} network bridge costs - {Web3.from_wei(native_fee, "ether")} ETH')
165 |
166 | return {Web3.from_wei(native_fee, "ether")}
167 |
168 | @exception_handler('Refuel')
169 | def refuel(self):
170 |
171 | if gas_random_chain is True:
172 | to_chain = random.choice(gas_chain_arr)
173 | else:
174 | to_chain = gas_chain_to
175 |
176 | amount = Web3.to_wei(round(random.uniform(value_from, value_to), value_decimal), 'ether')
177 |
178 | min_dst_gas = self.contract_refuel.functions.minDstGasLookup(LAYERZERO_CHAINS_ID[to_chain], 0).call()
179 |
180 | if min_dst_gas == 0:
181 | self.log.info(f'You cannot get gas on the {to_chain} network')
182 | if gas_random_chain is True:
183 | self.log.info(f'I choose another network and try again')
184 | raise ValueError('')
185 | else:
186 | return
187 |
188 | adapter_params = encode_packed(
189 | ["uint16", "uint256", "uint256", "address"],
190 | [2, min_dst_gas, amount, self.address_wallet]
191 | )
192 |
193 | dst_contract_address = encode_packed(["address"], [REFUEL_CONTRACTS[to_chain]])
194 | send_value = self.contract_refuel.functions.estimateSendFee(LAYERZERO_CHAINS_ID[to_chain], dst_contract_address, adapter_params).call()
195 |
196 | contract_txn = self.contract_refuel.functions.refuel(
197 | LAYERZERO_CHAINS_ID[to_chain],
198 | dst_contract_address,
199 | adapter_params
200 | ).build_transaction(
201 | {
202 | "from": self.address_wallet,
203 | "value": send_value[0],
204 | "nonce": self.web3.eth.get_transaction_count(self.address_wallet),
205 | }
206 | )
207 |
208 | self.send_transaction_and_wait(contract_txn, f'Refuel to {to_chain}')
209 |
210 | @exception_handler('Check refuel')
211 | def check_price_gas(self, to_chain):
212 |
213 | min_dst_gas = self.contract_refuel.functions.minDstGasLookup(LAYERZERO_CHAINS_ID[to_chain], 0).call()
214 |
215 | if min_dst_gas == 0:
216 | self.log.info(f'You cannot get refuel on the {to_chain} network')
217 | return 1000
218 |
219 | amount = Web3.to_wei(0.000000000000001, 'ether')
220 |
221 | adapter_params = encode_packed(
222 | ["uint16", "uint256", "uint256", "address"],
223 | [2, min_dst_gas, amount, self.address_wallet]
224 | )
225 |
226 | dst_contract_address = encode_packed(["address"], [REFUEL_CONTRACTS[to_chain]])
227 |
228 | send_value = self.contract_refuel.functions.estimateSendFee(LAYERZERO_CHAINS_ID[to_chain], dst_contract_address, adapter_params).call()
229 |
230 | self.log.info(f'{to_chain} network refuel costs - {Web3.from_wei(send_value[0], "ether")} ETH')
231 |
232 | return Web3.from_wei(send_value[0], "ether")
233 |
--------------------------------------------------------------------------------
/private_keys.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Elez-dev/arbitrum_nova/7fb80db45e71cf9e6747fd2d0f6ac983b00c57dd/private_keys.txt
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | web3==6.11.0
2 | requests==2.31.0
3 | telebot==0.0.5
4 | tqdm==4.66.1
--------------------------------------------------------------------------------
/settings.py:
--------------------------------------------------------------------------------
1 |
2 | RPC_NOVA = "https://nova.arbitrum.io/rpc"
3 | RPC_ETH = "https://rpc.ankr.com/eth"
4 |
5 |
6 | class Telegram:
7 | TG_BOT_SEND = False # Включить уведомления в тг или нет [True or False]
8 | TG_TOKEN = '' # API токен тг-бота - создать его можно здесь - https://t.me/BotFather
9 | TG_ID = 0 # id твоего телеграмма можно узнать тут - https://t.me/getmyid_bot
10 |
11 |
12 | SLINGSHOT = True
13 | ARBSWAP = True
14 | RPCSWAP = True
15 | SUSHISWAP = True
16 |
17 | remainder_eth = 0 # Сколько ETH оставлять на аккаунте (Нужно чтобы хватило на комсу при продаже токенов)
18 | SLIPPAGE = 5 # %
19 |
20 | shuffle_wallets = True # Перемешивание кошельков
21 |
22 | number_of_threads = 1 # Количество потоков
23 |
24 | time_delay_min = 50 # Максимальная и
25 | time_delay_max = 100 # Минимальная задержка между ТРАНЗАКЦИЯМИ
26 |
27 | TIME_DELAY_MIN = 5 # Минимальное и
28 | TIME_DELAY_MAX = 10 # Максимальное время задержки между ПОТОКАМИ
29 |
30 | TIME_DELAY_ACC_MIN = 100 # Минимальная и
31 | TIME_DELAY_ACC_MAX = 200 # Максимальная задержка между АККАУНТАМИ
32 |
33 | FLAG = True # Если свапалок включено несколько, но надо только какую то одну рандомную
34 |
35 | RETRY_COUNT = 5 # Кол-во повторений при ошибках
36 |
37 | # Выбор суммы свапа и количества повторений -----------------------------------------------------------------------------------------------------------------------------------------------
38 |
39 | prescale_swap_min = 0.001 # Минимальный
40 | prescale_swap_max = 0.002 # Максимальный множитель свапа баланса -> Будет среднее (Берется вся сумма вашего баланса и умножается на данный множитель
41 | # 1 - Своп всего баланса, 0.5 - 50% от текущего баланса, 0.1 - 10% от текущего баланса
42 |
43 | swap_decimal = 8 # Округление, количество знаов после запятой
44 |
45 | total_number_of_repetitions_min = 1 # Минимальное и
46 | total_number_of_repetitions_max = 1 # Максимальное количество повторений (Кругов) (Всех свапалок)
47 |
48 | number_of_repetitions_min = 1 # Минимальное и
49 | number_of_repetitions_max = 1 # Максимальное количество повторений для одной свапалки (Если включено несколько свапалок то
50 | # будет работать для каждой включеной!!!
51 | # Если включена только одна свапалка то этот параметр учитываться небудет)
52 |
53 | # Liquidity ---------------------------------------------------------------------------------------------------------------------------------------------------------
54 |
55 | liquiditi_sushi = True # Ликвидность SushiSwap [True or False]
56 | liquiditi_arb = True # Ликвидность ArbSwap [True or False]
57 | liquiditi_rpc = True # Ликвидность RPCswap [True or False]
58 |
59 | liquidity_prescale_min = 0.001 # Минимальное и
60 | liquidity_prescale_max = 0.002 # Максимальное значение в токенах ETH -> Будет рандомное среднее
61 |
62 | liquidity_decimal = 8 # Округление, количество знаов после запятой
63 |
64 | # Official Bridge -------------------------------------------------------------------------------------------------------------------------------------------------------
65 |
66 | prescale_bridge_min = 0.6 # Минимальный
67 | prescale_bridge_max = 0.4 # Максимальный множитель бриджа баланса -> Будет среднее (Берется вся сумма вашего баланса и умножается на данный множитель)
68 | # 1 - Бридж всего баланса, 0.5 - 50% от текущего баланса, 0.1 - 10% от текущего баланса
69 |
70 | bridge_decimal = 5 # Округление, количество знаов после запятой
71 |
72 | # Mint NFT ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
73 |
74 | number_nft_min = 1 # Минимальное и
75 | number_nft_max = 1 # Максимальное количество нфт для минта
76 |
77 | # Bridge NFT ---------------------------------------------------------------------------------------------------------------------------------------------
78 |
79 | nft_random_chain = False # Рандомный выбор сети для бриджа из списка ниже True/False
80 | chain_arr = ['avalanche', 'polygon', 'ethereum', 'bsc', 'arbitrum',
81 | 'optimism', 'fantom', 'aptos', 'celo',
82 | 'moonbeam', 'fuse', 'gnosis', 'klaytn', 'metis',
83 | 'core', 'polygon_zkevm', 'canto', 'moonriver', 'tenet',
84 | 'kava', 'meter', 'base', 'zora', 'scroll', 'zksync', 'linea', 'mantle']
85 |
86 | nft_chain_to = 'polygon' # Ручной выбор, если nft_random_chain = False
87 |
88 | # Get GAS ---------------------------------------------------------------------------------------------------------------------------------------------------------
89 |
90 | gas_random_chain = False # Рандомный выбор сети для бриджа из списка ниже True/False
91 | gas_chain_arr = ['avalanche', 'polygon', 'ethereum', 'bsc', 'arbitrum',
92 | 'optimism', 'fantom', 'aptos', 'moonbeam', 'fuse', 'klaytn', 'metis',
93 | 'moonriver', 'tenet', 'kava', 'meter', 'base', 'zksync', 'mantle']
94 |
95 |
96 | gas_chain_to = 'moonbeam' # Ручной выбор, если gas_random_chain = False
97 |
98 | value_from = 0.00000001 # Obtain from a certain amount of native token of the to_chain network
99 | value_to = 0.0000001 # Obtain up to a certain amount of native token of the to_chain network
100 | value_decimal = 9
101 |
--------------------------------------------------------------------------------