├── 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 | [![Telegram channel](https://img.shields.io/endpoint?url=https://runkit.io/damiankrawczyk/telegram-badge/branches/master?url=https://t.me/developercode1)](https://t.me/developercode1) 2 | [![PyPI supported Python versions](https://img.shields.io/badge/Python%203.10.10-8A2BE2)](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 | --------------------------------------------------------------------------------