From 9fb0b009dbd4ae91cdcea2f2e6afe4c9370842aa Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 7 Apr 2024 21:10:53 +0100 Subject: [PATCH 1/9] update --- .gitignore | 169 +++ README.md | 59 + accounts.txt | 0 config.py | 306 +++++ data/abi/aave/abi.json | 1 + data/abi/alien/abi.json | 1 + data/abi/base/bridge.json | 1 + data/abi/base/weth.json | 1 + data/abi/baseswap/router.json | 1 + data/abi/bridge/deposit.json | 1 + data/abi/bridge/oracle.json | 315 +++++ data/abi/bridge/withdraw.json | 666 +++++++++++ data/abi/bungee/abi.json | 525 +++++++++ data/abi/dmail/abi.json | 964 ++++++++++++++++ data/abi/erc20_abi.json | 1 + data/abi/gnosis/abi.json | 198 ++++ data/abi/l2pass/abi.json | 1 + data/abi/l2telegraph/bridge_nft.json | 584 ++++++++++ data/abi/l2telegraph/send_message.json | 225 ++++ data/abi/layerbank/abi.json | 1 + data/abi/maverick/position.json | 430 +++++++ data/abi/maverick/router.json | 1082 ++++++++++++++++++ data/abi/mintfun/abi.json | 41 + data/abi/moonwell/abi.json | 112 ++ data/abi/nft-origins/abi.json | 665 +++++++++++ data/abi/nft2me/abi.json | 24 + data/abi/omnisea/abi.json | 175 +++ data/abi/pancake/factory.json | 1 + data/abi/pancake/pool.json | 713 ++++++++++++ data/abi/pancake/quoter.json | 1 + data/abi/pancake/router.json | 1271 ++++++++++++++++++++ data/abi/rai/abi.json | 1 + data/abi/rocketsam/abi.json | 994 ++++++++++++++++ data/abi/rubyscore/abi.json | 13 + data/abi/scroll/weth.json | 643 +++++++++++ data/abi/skydrome/abi.json | 1 + data/abi/stargate/bridge.json | 1 + data/abi/stargate/router.json | 1 + data/abi/syncswap/classic_pool.json | 151 +++ data/abi/syncswap/classic_pool_data.json | 924 +++++++++++++++ data/abi/syncswap/router.json | 1178 +++++++++++++++++++ data/abi/uniswap/factory.json | 1 + data/abi/uniswap/quoter.json | 1 + data/abi/uniswap/router.json | 1 + data/abi/woofi/router.json | 400 +++++++ data/abi/zebra/abi.json | 1 + data/abi/zerius/abi.json | 1 + data/abi/zkstars/abi.json | 552 +++++++++ data/deploy/abi.json | 2 + data/deploy/bytecode.txt | 1 + data/rpc.json | 54 + logging.log | 22 + main.py | 213 ++++ modules/__init__.py | 56 + modules/aave.py | 113 ++ modules/account.py | 232 ++++ modules/alienswap.py | 104 ++ modules/ambient.py | 118 ++ modules/base.py | 129 +++ modules/baseswap.py | 103 ++ modules/bungee.py | 75 ++ modules/deploy.py | 32 + modules/dmail.py | 49 + modules/inch.py | 91 ++ modules/l2pass.py | 33 + modules/l2telegraph.py | 108 ++ modules/layerbank.py | 92 ++ modules/layerswap.py | 194 ++++ modules/maverick.py | 142 +++ modules/mintfun.py | 38 + modules/moonwell.py | 83 ++ modules/multiswap.py | 130 +++ modules/nftorigins.py | 57 + modules/nfts2me.py | 35 + modules/nitro.py | 97 ++ modules/odos.py | 128 +++ modules/omnisea.py | 47 + modules/openocean.py | 94 ++ modules/orbiter.py | 109 ++ modules/pancake.py | 156 +++ modules/rai.py | 54 + modules/rocketsam.py | 97 ++ modules/routes.py | 54 + modules/rubyscore.py | 28 + modules/safe.py | 64 ++ modules/scroll.py | 168 +++ modules/skydrome.py | 121 ++ modules/stargate.py | 87 ++ modules/swap_tokens.py | 95 ++ modules/syncswap.py | 115 ++ modules/transfer.py | 44 + modules/tx_checker.py | 62 + modules/uniswap.py | 155 +++ modules/woofi.py | 83 ++ modules/xyswap.py | 135 +++ modules/zebra.py | 117 ++ modules/zerius.py | 108 ++ modules/zkstars.py | 51 + modules_settings.py | 1336 ++++++++++++++++++++++ requirements.txt | Bin 0 -> 194 bytes run_swaps.py | 187 +++ settings.py | 45 + utils/__init__.py | 0 utils/bungee_data.py | 12 + utils/gas_checker.py | 63 + utils/helpers.py | 28 + utils/sleeping.py | 12 + 107 files changed, 19657 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 accounts.txt create mode 100644 config.py create mode 100644 data/abi/aave/abi.json create mode 100644 data/abi/alien/abi.json create mode 100644 data/abi/base/bridge.json create mode 100644 data/abi/base/weth.json create mode 100644 data/abi/baseswap/router.json create mode 100644 data/abi/bridge/deposit.json create mode 100644 data/abi/bridge/oracle.json create mode 100644 data/abi/bridge/withdraw.json create mode 100644 data/abi/bungee/abi.json create mode 100644 data/abi/dmail/abi.json create mode 100644 data/abi/erc20_abi.json create mode 100644 data/abi/gnosis/abi.json create mode 100644 data/abi/l2pass/abi.json create mode 100644 data/abi/l2telegraph/bridge_nft.json create mode 100644 data/abi/l2telegraph/send_message.json create mode 100644 data/abi/layerbank/abi.json create mode 100644 data/abi/maverick/position.json create mode 100644 data/abi/maverick/router.json create mode 100644 data/abi/mintfun/abi.json create mode 100644 data/abi/moonwell/abi.json create mode 100644 data/abi/nft-origins/abi.json create mode 100644 data/abi/nft2me/abi.json create mode 100644 data/abi/omnisea/abi.json create mode 100644 data/abi/pancake/factory.json create mode 100644 data/abi/pancake/pool.json create mode 100644 data/abi/pancake/quoter.json create mode 100644 data/abi/pancake/router.json create mode 100644 data/abi/rai/abi.json create mode 100644 data/abi/rocketsam/abi.json create mode 100644 data/abi/rubyscore/abi.json create mode 100644 data/abi/scroll/weth.json create mode 100644 data/abi/skydrome/abi.json create mode 100644 data/abi/stargate/bridge.json create mode 100644 data/abi/stargate/router.json create mode 100644 data/abi/syncswap/classic_pool.json create mode 100644 data/abi/syncswap/classic_pool_data.json create mode 100644 data/abi/syncswap/router.json create mode 100644 data/abi/uniswap/factory.json create mode 100644 data/abi/uniswap/quoter.json create mode 100644 data/abi/uniswap/router.json create mode 100644 data/abi/woofi/router.json create mode 100644 data/abi/zebra/abi.json create mode 100644 data/abi/zerius/abi.json create mode 100644 data/abi/zkstars/abi.json create mode 100644 data/deploy/abi.json create mode 100644 data/deploy/bytecode.txt create mode 100644 data/rpc.json create mode 100644 logging.log create mode 100644 main.py create mode 100644 modules/__init__.py create mode 100644 modules/aave.py create mode 100644 modules/account.py create mode 100644 modules/alienswap.py create mode 100644 modules/ambient.py create mode 100644 modules/base.py create mode 100644 modules/baseswap.py create mode 100644 modules/bungee.py create mode 100644 modules/deploy.py create mode 100644 modules/dmail.py create mode 100644 modules/inch.py create mode 100644 modules/l2pass.py create mode 100644 modules/l2telegraph.py create mode 100644 modules/layerbank.py create mode 100644 modules/layerswap.py create mode 100644 modules/maverick.py create mode 100644 modules/mintfun.py create mode 100644 modules/moonwell.py create mode 100644 modules/multiswap.py create mode 100644 modules/nftorigins.py create mode 100644 modules/nfts2me.py create mode 100644 modules/nitro.py create mode 100644 modules/odos.py create mode 100644 modules/omnisea.py create mode 100644 modules/openocean.py create mode 100644 modules/orbiter.py create mode 100644 modules/pancake.py create mode 100644 modules/rai.py create mode 100644 modules/rocketsam.py create mode 100644 modules/routes.py create mode 100644 modules/rubyscore.py create mode 100644 modules/safe.py create mode 100644 modules/scroll.py create mode 100644 modules/skydrome.py create mode 100644 modules/stargate.py create mode 100644 modules/swap_tokens.py create mode 100644 modules/syncswap.py create mode 100644 modules/transfer.py create mode 100644 modules/tx_checker.py create mode 100644 modules/uniswap.py create mode 100644 modules/woofi.py create mode 100644 modules/xyswap.py create mode 100644 modules/zebra.py create mode 100644 modules/zerius.py create mode 100644 modules/zkstars.py create mode 100644 modules_settings.py create mode 100644 requirements.txt create mode 100644 run_swaps.py create mode 100644 settings.py create mode 100644 utils/__init__.py create mode 100644 utils/bungee_data.py create mode 100644 utils/gas_checker.py create mode 100644 utils/helpers.py create mode 100644 utils/sleeping.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f6e8b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,169 @@ +# Created by https://www.toptal.com/developers/gitignore/api/macos,pycharm,venv +# Edit at https://www.toptal.com/developers/gitignore?templates=macos,pycharm,venv + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### PyCharm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### PyCharm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +### venv ### +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +.Python +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +.venv +pip-selfcheck.json + +# End of https://www.toptal.com/developers/gitignore/api/macos,pycharm,venv +poetry.lock +pyproject.toml +__pycache__/ +*/__pycache__/ +.idea/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d0fb025 --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +

Base Soft

+ +📍 Данный скрипт облегчает работу с фермой для Base + +🔔 Subscribe to me: https://t.me/sybilwave + +🤑 Donate me: 0x00000b0ddce0bfda4531542ad1f2f5fad7b9cde9 + +--- +

🚀 Запуск

+ +``` +git clone https://github.com/czbag/base.git + +cd base + +pip install -r requirements.txt + +python main.py +``` +--- +

🚨 Возможности

+ +1. Депозит и вывод ETH через официальный мост + +2. Бридж через Orbiter + +3. Врап/анврап ETH + +4. Свапы через Uniswap, PancakeSwap, Woofi, Baseswap, AlienSwap, Maverick, Odos, 1inch, Xy.Finance, OpenOcean (для агрегаторов включена рефка, 1% от суммы транзы идет мне, приходят не с вашего кошелька, а с контракта агрегатора, можно вырубить в конфиге) + +5. Bungee Refuel + +6. Aave (депозит/вывод) + +7. Минт free NFT на Mint.Fun (работает с функцией контракта "mint", другие не прокатят, смотрите в Rabby или в эксплорере) + +8. Mint + Brdige NFT через L2Telegraph (только в arb nova) + +9. Отправка месседжей через L2Telegraph (только в arb nova) + +10. Слив токенов в ETH + +11. Возможность мультисвапов - совершает указанное количество обменов в указанных дексах + +12. Кастомные роуты - действия которые будут выполняться последовательно, либо в рандомном порядке + +13. Чекер количества транз + +--- +

⚙️ Настройка

+ +1) Все основные настройки производятся в файле settings.py, внутри присутствует информация, что и где писать + +2) В файле accounts.txt указываем свои приватные ключи + +3) В файле rpc.json по пути data/rpc.json можем менять rpc на свои + +Инфа по апдейтам да и просто лайф блог –– https://t.me/sybilwave diff --git a/accounts.txt b/accounts.txt new file mode 100644 index 0000000..e69de29 diff --git a/config.py b/config.py new file mode 100644 index 0000000..6662299 --- /dev/null +++ b/config.py @@ -0,0 +1,306 @@ +import json + +with open('data/rpc.json') as file: + RPC = json.load(file) + +with open('data/abi/erc20_abi.json') as file: + ERC20_ABI = json.load(file) + +<<<<<<< HEAD +with open('data/abi/bridge/deposit.json') as file: + DEPOSIT_ABI = json.load(file) + +with open('data/abi/bridge/withdraw.json') as file: + WITHDRAW_ABI = json.load(file) + +with open('data/abi/bridge/oracle.json') as file: + ORACLE_ABI = json.load(file) + +with open('data/abi/scroll/weth.json') as file: + WETH_ABI = json.load(file) + +with open("data/abi/syncswap/router.json", "r") as file: + SYNCSWAP_ROUTER_ABI = json.load(file) + +with open('data/abi/syncswap/classic_pool.json') as file: + SYNCSWAP_CLASSIC_POOL_ABI = json.load(file) + +with open('data/abi/syncswap/classic_pool_data.json') as file: + SYNCSWAP_CLASSIC_POOL_DATA_ABI = json.load(file) + +with open("data/abi/skydrome/abi.json", "r") as file: + SKYDROME_ROUTER_ABI = json.load(file) + +with open("data/abi/zebra/abi.json", "r") as file: + ZEBRA_ROUTER_ABI = json.load(file) +======= +with open("accounts.txt", "r") as file: + ACCOUNTS = [row.strip() for row in file] + +with open('data/abi/base/bridge.json') as file: + BASE_BRIDGE_ABI = json.load(file) + +with open('data/abi/base/weth.json') as file: + WETH_ABI = json.load(file) + +with open("data/abi/uniswap/router.json", "r") as file: + UNISWAP_ROUTER_ABI = json.load(file) + +with open("data/abi/pancake/factory.json", "r") as file: + UNISWAP_FACTORY_ABI = json.load(file) + +with open("data/abi/uniswap/quoter.json", "r") as file: + UNISWAP_QUOTER_ABI = json.load(file) + +with open("data/abi/pancake/router.json", "r") as file: + PANCAKE_ROUTER_ABI = json.load(file) + +with open("data/abi/pancake/factory.json", "r") as file: + PANCAKE_FACTORY_ABI = json.load(file) + +with open("data/abi/pancake/quoter.json", "r") as file: + PANCAKE_QUOTER_ABI = json.load(file) + +with open("data/abi/woofi/router.json", "r") as file: + WOOFI_ROUTER_ABI = json.load(file) + +with open("data/abi/baseswap/router.json", "r") as file: + BASESWAP_ROUTER_ABI = json.load(file) + +with open("data/abi/alien/abi.json", "r") as file: + ALIEN_ROUTER_ABI = json.load(file) + +with open("data/abi/maverick/position.json", "r") as file: + MAVERICK_POSITION_ABI = json.load(file) + +with open("data/abi/maverick/router.json", "r") as file: + MAVERICK_ROUTER_ABI = json.load(file) + +with open("data/abi/bungee/abi.json", "r") as file: + BUNGEE_ABI = json.load(file) + +with open("data/abi/stargate/bridge.json", "r") as file: + STARGATE_BRIDGE_ABI = json.load(file) + +with open("data/abi/stargate/router.json", "r") as file: + STARGATE_ROUTER_ABI = json.load(file) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + +with open("data/abi/aave/abi.json", "r") as file: + AAVE_ABI = json.load(file) + +<<<<<<< HEAD +with open("data/abi/layerbank/abi.json", "r") as file: + LAYERBANK_ABI = json.load(file) + +with open("data/abi/zerius/abi.json", "r") as file: + ZERIUS_ABI = json.load(file) + +with open("data/abi/l2pass/abi.json", "r") as file: + L2PASS_ABI = json.load(file) + +with open("data/abi/dmail/abi.json", "r") as file: + DMAIL_ABI = json.load(file) + +with open("data/abi/omnisea/abi.json", "r") as file: + OMNISEA_ABI = json.load(file) + +with open("data/abi/nft2me/abi.json", "r") as file: + NFTS2ME_ABI = json.load(file) +======= +with open("data/abi/moonwell/abi.json", "r") as file: + MOONWELL_ABI = json.load(file) + +with open("data/abi/l2telegraph/send_message.json", "r") as file: + L2TELEGRAPH_MESSAGE_ABI = json.load(file) + +with open("data/abi/l2telegraph/bridge_nft.json", "r") as file: + L2TELEGRAPH_NFT_ABI = json.load(file) + +with open("data/abi/mintfun/abi.json", "r") as file: + MINTFUN_ABI = json.load(file) + +with open("data/abi/rai/abi.json", "r") as file: + RAI_ABI = json.load(file) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + +with open("data/abi/gnosis/abi.json", "r") as file: + SAFE_ABI = json.load(file) + +<<<<<<< HEAD +with open("data/deploy/abi.json", "r") as file: + DEPLOYER_ABI = json.load(file) + +with open("data/deploy/bytecode.txt", "r") as file: + DEPLOYER_BYTECODE = file.read() +======= +with open("data/abi/zerius/abi.json", "r") as file: + ZERIUS_ABI = json.load(file) + +with open("data/abi/nft2me/abi.json", "r") as file: + NFTS2ME_ABI = json.load(file) + +with open("data/abi/dmail/abi.json", "r") as file: + DMAIL_ABI = json.load(file) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + +with open("data/abi/zkstars/abi.json", "r") as file: + ZKSTARS_ABI = json.load(file) + +<<<<<<< HEAD +with open("data/abi/rubyscore/abi.json", "r") as file: + RUBYSCORE_VOTE_ABI = json.load(file) + +ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" + +BRIDGE_CONTRACTS = { + "deposit": "0xf8b1378579659d8f7ee5f3c929c2f3e332e41fd6", + "withdraw": "0x4C0926FF5252A435FD19e10ED15e5a249Ba19d79", + "oracle": "0x987e300fDfb06093859358522a79098848C33852" +} + +ORBITER_CONTRACT = "0x80c67432656d59144ceff962e8faf8926599bcf8" + +SCROLL_TOKENS = { + "ETH": "0x5300000000000000000000000000000000000004", + "WETH": "0x5300000000000000000000000000000000000004", + "USDC": "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4" +} + +SYNCSWAP_CONTRACTS = { + "router": "0x80e38291e06339d10aab483c65695d004dbd5c69", + "classic_pool": "0x37BAc764494c8db4e54BDE72f6965beA9fa0AC2d" +} + +SKYDROME_CONTRACTS = { + "router": "0xAA111C62cDEEf205f70E6722D1E22274274ec12F" +} + +ZEBRA_CONTRACTS = { + "router": "0x0122960d6e391478bfe8fb2408ba412d5600f621" +} + +AMBIENT_CONTRACTS = { + "router": "0xaaaaaaaacb71bf2c8cae522ea5fa455571a74106", + "impact": "0xc2c301759B5e0C385a38e678014868A33E2F3ae3" +} + +XYSWAP_CONTRACT = { + "router": "0x22bf2a9fcaab9dc96526097318f459ef74277042", + "use_ref": False # If you use True, you support me 1% of the transaction amount +} + +AAVE_CONTRACT = "0xff75a4b698e3ec95e608ac0f22a03b8368e05f5d" + +AAVE_WETH_CONTRACT = "0xf301805be1df81102c957f6d4ce29d2b8c056b2a" + +LAYERBANK_CONTRACT = "0xec53c830f4444a8a56455c6836b5d2aa794289aa" + +LAYERBANK_WETH_CONTRACT = "0x274C3795dadfEbf562932992bF241ae087e0a98C" + +ZERIUS_CONTRACT = "0xeb22c3e221080ead305cae5f37f0753970d973cd" + +DMAIL_CONTRACT = "0x47fbe95e981c0df9737b6971b451fb15fdc989d9" + +OMNISEA_CONTRACT = "0x46ce46951d12710d85bc4fe10bb29c6ea5012077" + +SAFE_CONTRACT = "0xa6b71e26c5e0845f74c812102ca7114b6a896ab2" + +RUBYSCORE_VOTE_CONTRACT = "0xe10Add2ad591A7AC3CA46788a06290De017b9fB4" +======= +with open("data/abi/rocketsam/abi.json", "r") as file: + ROCKETSAM_ABI = json.load(file) + +ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" + +BASE_BRIDGE_CONTRACT = "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e" + +ORBITER_CONTRACT = "" + +BASE_TOKENS = { + "ETH": "0x4200000000000000000000000000000000000006", + "WETH": "0x4200000000000000000000000000000000000006", + "USDBC": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", + "USDC": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + "DAI": "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb", +} + +UNISWAP_CONTRACTS = { + "router": "0x2626664c2603336E57B271c5C0b26F421741e481", + "factory": "0x33128a8fC17869897dcE68Ed026d694621f6FDfD", + "quoter": "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a", +} + +PANCAKE_CONTRACTS = { + "router": "0x678Aa4bF4E210cf2166753e054d5b7c31cc7fa86", + "factory": "0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865", + "quoter": "0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997" +} + +WOOFI_CONTRACTS = { + "router": "0x27425e9fb6a9a625e8484cfd9620851d1fa322e5" +} + +BASESWAP_CONTRACTS = { + "router": "0x327Df1E6de05895d2ab08513aaDD9313Fe505d86" +} + +ALIEN_CONTRACTS = { + "router": "0x8c1a3cf8f83074169fe5d7ad50b978e1cd6b37c7" +} + +ODOS_CONTRACT = { + "router": "0x19ceead7105607cd444f5ad10dd51356436095a1", + "use_ref": True # If you use True, you support me 1% of the transaction amount +} + +INCH_CONTRACT = { + "router": "0x1111111254eeb25477b68fb85ed929f73a960582", + "use_ref": True # If you use True, you support me 1% of the transaction amount +} + +OPENOCEAN_CONTRACT = { + "router": "0x6352a56caadc4f1e25cd6c75970fa768a3304e64", + "use_ref": True # If you use True, you support me 1% of the transaction amount +} + +XYSWAP_CONTRACT = { + "router": "0x6acd0ec9405ccb701c57a88849c4f1cd85a3f3ab", + "use_ref": True # If you use True, you support me 1% of the transaction amount +} + +MAVERICK_CONTRACTS = { + "router": "0x32AED3Bce901DA12ca8489788F3A99fCe1056e14", + "pool": "0x06e6736ca9e922766279a22b75a600fe8b8473b6", + "pool_information": "0x6E230D0e457Ea2398FB3A22FB7f9B7F68F06a14d", +} + +BUNGEE_CONTRACT = "0xe8c5b8488feafb5df316be73ede3bdc26571a773" + +STARGATE_CONTRACTS = { + "router": "0xAF54BE5B6eEc24d6BFACf1cce4eaF680A8239398", + "bridge": "0x50b6ebc2103bfec165949cc946d739d5650d7ae4" +} + +AAVE_CONTRACT = "0x18cd499e3d7ed42feba981ac9236a278e4cdc2ee" + +AAVE_WETH_CONTRACT = "0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7" + +MOONWELL_CONTRACT = "0x70778cfcFC475c7eA0f24cC625Baf6EaE475D0c9" + +MOONWELL_WETH_CONTRACT = "0x628ff693426583D9a7FB391E54366292F509D457" + +MINTFUN_CONTRACT = "0xf39ac57beaf8f97b89db7a9203a4e47c17cf4391" + +L2TELEGRAPH_MESSAGE_CONTRACT = "0x64e0f6164ac110b67df9a4848707ffbcb86c87a9" + +L2TELEGRAPH_NFT_CONTRACT = "0x36a358b3ba1fb368e35b71ea40c7f4ab89bfd8e1" + +RAI_CONTRACT = "0xbc097e42bf1e6531c32c5cee945e0c014fa21964" + +SAFE_CONTRACT = "0xc22834581ebc8527d974f8a1c97e1bea4ef910bc" + +ZERIUS_CONTRACT = "0x178608ffe2cca5d36f3fc6e69426c4d3a5a74a41" + +DMAIL_CONTRACT = "0x47fbe95e981C0Df9737B6971B451fB15fdC989d9" +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 diff --git a/data/abi/aave/abi.json b/data/abi/aave/abi.json new file mode 100644 index 0000000..6e218c2 --- /dev/null +++ b/data/abi/aave/abi.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"weth","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"borrowETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyEtherTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getWETHAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repayETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"withdrawETHWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/data/abi/alien/abi.json b/data/abi/alien/abi.json new file mode 100644 index 0000000..383ca61 --- /dev/null +++ b/data/abi/alien/abi.json @@ -0,0 +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"}] \ No newline at end of file diff --git a/data/abi/base/bridge.json b/data/abi/base/bridge.json new file mode 100644 index 0000000..cfff649 --- /dev/null +++ b/data/abi/base/bridge.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"contract L2OutputOracle","name":"_l2Oracle","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"bool","name":"_paused","type":"bool"},{"internalType":"contract SystemConfig","name":"_config","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"version","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"opaqueData","type":"bytes"}],"name":"TransactionDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"withdrawalHash","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"WithdrawalFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"withdrawalHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"WithdrawalProven","type":"event"},{"inputs":[],"name":"GUARDIAN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"L2_ORACLE","outputs":[{"internalType":"contract L2OutputOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM_CONFIG","outputs":[{"internalType":"contract SystemConfig","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint64","name":"_gasLimit","type":"uint64"},{"internalType":"bool","name":"_isCreation","type":"bool"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"depositTransaction","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"donateETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Types.WithdrawalTransaction","name":"_tx","type":"tuple"}],"name":"finalizeWithdrawalTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"finalizedWithdrawals","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"}],"name":"isOutputFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Sender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"_byteCount","type":"uint64"}],"name":"minimumGasLimit","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"params","outputs":[{"internalType":"uint128","name":"prevBaseFee","type":"uint128"},{"internalType":"uint64","name":"prevBoughtGas","type":"uint64"},{"internalType":"uint64","name":"prevBlockNum","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Types.WithdrawalTransaction","name":"_tx","type":"tuple"},{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"},{"components":[{"internalType":"bytes32","name":"version","type":"bytes32"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"},{"internalType":"bytes32","name":"messagePasserStorageRoot","type":"bytes32"},{"internalType":"bytes32","name":"latestBlockhash","type":"bytes32"}],"internalType":"struct Types.OutputRootProof","name":"_outputRootProof","type":"tuple"},{"internalType":"bytes[]","name":"_withdrawalProof","type":"bytes[]"}],"name":"proveWithdrawalTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"provenWithdrawals","outputs":[{"internalType":"bytes32","name":"outputRoot","type":"bytes32"},{"internalType":"uint128","name":"timestamp","type":"uint128"},{"internalType":"uint128","name":"l2OutputIndex","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/data/abi/base/weth.json b/data/abi/base/weth.json new file mode 100644 index 0000000..a515ba4 --- /dev/null +++ b/data/abi/base/weth.json @@ -0,0 +1 @@ +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/baseswap/router.json b/data/abi/baseswap/router.json new file mode 100644 index 0000000..383ca61 --- /dev/null +++ b/data/abi/baseswap/router.json @@ -0,0 +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"}] \ No newline at end of file diff --git a/data/abi/bridge/deposit.json b/data/abi/bridge/deposit.json new file mode 100644 index 0000000..63015df --- /dev/null +++ b/data/abi/bridge/deposit.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DepositERC20","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DepositETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FinalizeWithdrawERC20","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FinalizeWithdrawETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","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":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefundERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefundETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldDefaultERC20Gateway","type":"address"},{"indexed":true,"internalType":"address","name":"newDefaultERC20Gateway","type":"address"}],"name":"SetDefaultERC20Gateway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"oldGateway","type":"address"},{"indexed":true,"internalType":"address","name":"newGateway","type":"address"}],"name":"SetERC20Gateway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldETHGateway","type":"address"},{"indexed":true,"internalType":"address","name":"newEthGateway","type":"address"}],"name":"SetETHGateway","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20AndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETHAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ethGateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"finalizeWithdrawERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"finalizeWithdrawETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gatewayInContext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Address","type":"address"}],"name":"getL2ERC20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ethGateway","type":"address"},{"internalType":"address","name":"_defaultERC20Gateway","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"requestERC20","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDefaultERC20Gateway","type":"address"}],"name":"setDefaultERC20Gateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address[]","name":"_gateways","type":"address[]"}],"name":"setERC20Gateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newEthGateway","type":"address"}],"name":"setETHGateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/bridge/oracle.json b/data/abi/bridge/oracle.json new file mode 100644 index 0000000..d8c88a2 --- /dev/null +++ b/data/abi/bridge/oracle.json @@ -0,0 +1,315 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "txGas", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "txGasContractCreation", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "zeroGas", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonZeroGas", + "type": "uint256" + } + ], + "name": "IntrinsicParamsUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldL2BaseFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newL2BaseFee", + "type": "uint256" + } + ], + "name": "L2BaseFeeUpdated", + "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": false, + "internalType": "address", + "name": "_oldWhitelist", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_newWhitelist", + "type": "address" + } + ], + "name": "UpdateWhitelist", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "calculateIntrinsicGasFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "estimateCrossDomainMessageFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_txGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_txGasContractCreation", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_zeroGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_nonZeroGas", + "type": "uint64" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "intrinsicParams", + "outputs": [ + { + "internalType": "uint64", + "name": "txGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "txGasContractCreation", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "zeroGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "nonZeroGas", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2BaseFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_txGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_txGasContractCreation", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_zeroGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "_nonZeroGas", + "type": "uint64" + } + ], + "name": "setIntrinsicParams", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newL2BaseFee", + "type": "uint256" + } + ], + "name": "setL2BaseFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newWhitelist", + "type": "address" + } + ], + "name": "updateWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "whitelist", + "outputs": [ + { + "internalType": "contract IWhitelist", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/bridge/withdraw.json b/data/abi/bridge/withdraw.json new file mode 100644 index 0000000..e8d8e7c --- /dev/null +++ b/data/abi/bridge/withdraw.json @@ -0,0 +1,666 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "FinalizeDepositERC20", + "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": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "FinalizeDepositETH", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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": "address", + "name": "oldDefaultERC20Gateway", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newDefaultERC20Gateway", + "type": "address" + } + ], + "name": "SetDefaultERC20Gateway", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "oldGateway", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGateway", + "type": "address" + } + ], + "name": "SetERC20Gateway", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldETHGateway", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newEthGateway", + "type": "address" + } + ], + "name": "SetETHGateway", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "WithdrawERC20", + "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": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "WithdrawETH", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "ERC20Gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultERC20Gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ethGateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "finalizeDepositERC20", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "finalizeDepositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getERC20Gateway", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l2Address", + "type": "address" + } + ], + "name": "getL1ERC20Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "getL2ERC20Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_ethGateway", + "type": "address" + }, + { + "internalType": "address", + "name": "_defaultERC20Gateway", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newDefaultERC20Gateway", + "type": "address" + } + ], + "name": "setDefaultERC20Gateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_tokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_gateways", + "type": "address[]" + } + ], + "name": "setERC20Gateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newEthGateway", + "type": "address" + } + ], + "name": "setETHGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "withdrawERC20", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "withdrawERC20", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "withdrawERC20AndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "withdrawETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "withdrawETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_gasLimit", + "type": "uint256" + } + ], + "name": "withdrawETHAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/bungee/abi.json b/data/abi/bungee/abi.json new file mode 100644 index 0000000..2dddc03 --- /dev/null +++ b/data/abi/bungee/abi.json @@ -0,0 +1,525 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "destinationReceiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Donation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "GrantSender", + "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": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RevokeSender", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "srcChainTxHash", + "type": "bytes32" + } + ], + "name": "Send", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawal", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isEnabled", + "type": "bool" + } + ], + "internalType": "struct GasMovr.ChainData[]", + "name": "_routes", + "type": "tuple[]" + } + ], + "name": "addRoutes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable[]", + "name": "receivers", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "srcChainTxHashes", + "type": "bytes32[]" + }, + { + "internalType": "uint256", + "name": "perUserGasAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxLimit", + "type": "uint256" + } + ], + "name": "batchSendNativeToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "chainConfig", + "outputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isEnabled", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "destinationChainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "depositNativeToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + } + ], + "name": "getChainData", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isEnabled", + "type": "bool" + } + ], + "internalType": "struct GasMovr.ChainData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "grantSenderRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "revokeSenderRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "srcChainTxHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "perUserGasAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxLimit", + "type": "uint256" + } + ], + "name": "sendNativeToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "senders", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_isEnabled", + "type": "bool" + } + ], + "name": "setIsEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setPause", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "setUnPause", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "withdrawBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "withdrawFullBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/data/abi/dmail/abi.json b/data/abi/dmail/abi.json new file mode 100644 index 0000000..80f3d62 --- /dev/null +++ b/data/abi/dmail/abi.json @@ -0,0 +1,964 @@ +[ + { + "name": null, + "type": "constructor", + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "name": "AdminChanged", + "anonymous": false, + "inputs": [ + { + "name": "previousAdmin", + "type": "address", + "indexed": false, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "newAdmin", + "type": "address", + "indexed": false, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "Approval", + "anonymous": false, + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "BeaconUpgraded", + "anonymous": false, + "inputs": [ + { + "name": "beacon", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "Initialized", + "anonymous": false, + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint8", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "Message", + "anonymous": false, + "inputs": [ + { + "name": "subject", + "type": "string", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "string", + "_isParamType": true + }, + { + "name": "from_address", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "to", + "type": "string", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "string", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "OwnershipTransferred", + "anonymous": false, + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "Paused", + "anonymous": false, + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": false, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "Transfer", + "anonymous": false, + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "to", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "Unpaused", + "anonymous": false, + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": false, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "name": "Upgraded", + "anonymous": false, + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "type": "event", + "_isFragment": true + }, + { + "type": "function", + "name": "allowance", + "constant": true, + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "spender", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "outputs": [ + { + "name": null, + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "approve", + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "amount", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [ + { + "name": null, + "type": "bool", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bool", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "balanceOf", + "constant": true, + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "outputs": [ + { + "name": null, + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "burn", + "constant": false, + "inputs": [ + { + "name": "amount", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "burnFrom", + "constant": false, + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "amount", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "decimals", + "constant": true, + "inputs": [], + "outputs": [ + { + "name": null, + "type": "uint8", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint8", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "decreaseAllowance", + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "subtractedValue", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [ + { + "name": null, + "type": "bool", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bool", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "increaseAllowance", + "constant": false, + "inputs": [ + { + "name": "spender", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "addedValue", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [ + { + "name": null, + "type": "bool", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bool", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "initialize", + "constant": false, + "inputs": [], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "mint", + "constant": false, + "inputs": [ + { + "name": "to", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "amount", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "name", + "constant": true, + "inputs": [], + "outputs": [ + { + "name": null, + "type": "string", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "string", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "owner", + "constant": true, + "inputs": [], + "outputs": [ + { + "name": null, + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "pause", + "constant": false, + "inputs": [], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "paused", + "constant": true, + "inputs": [], + "outputs": [ + { + "name": null, + "type": "bool", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bool", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "proxiableUUID", + "constant": true, + "inputs": [], + "outputs": [ + { + "name": null, + "type": "bytes32", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bytes32", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "renounceOwnership", + "constant": false, + "inputs": [], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "send_mail", + "constant": false, + "inputs": [ + { + "name": "to", + "type": "string", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "string", + "_isParamType": true + }, + { + "name": "subject", + "type": "string", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "string", + "_isParamType": true + } + ], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "symbol", + "constant": true, + "inputs": [], + "outputs": [ + { + "name": null, + "type": "string", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "string", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "totalSupply", + "constant": true, + "inputs": [], + "outputs": [ + { + "name": null, + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "view", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "transfer", + "constant": false, + "inputs": [ + { + "name": "to", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "amount", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [ + { + "name": null, + "type": "bool", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bool", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "transferFrom", + "constant": false, + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "to", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "amount", + "type": "uint256", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "uint256", + "_isParamType": true + } + ], + "outputs": [ + { + "name": null, + "type": "bool", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bool", + "_isParamType": true + } + ], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "transferOwnership", + "constant": false, + "inputs": [ + { + "name": "newOwner", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "unpause", + "constant": false, + "inputs": [], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "upgradeTo", + "constant": false, + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + } + ], + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "type": "function", + "name": "upgradeToAndCall", + "constant": false, + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "address", + "_isParamType": true + }, + { + "name": "data", + "type": "bytes", + "indexed": null, + "components": null, + "arrayLength": null, + "arrayChildren": null, + "baseType": "bytes", + "_isParamType": true + } + ], + "outputs": [], + "payable": true, + "stateMutability": "payable", + "gas": null, + "_isFragment": true + } +] \ No newline at end of file diff --git a/data/abi/erc20_abi.json b/data/abi/erc20_abi.json new file mode 100644 index 0000000..517a4e3 --- /dev/null +++ b/data/abi/erc20_abi.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"}],"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"setupDecimals","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/gnosis/abi.json b/data/abi/gnosis/abi.json new file mode 100644 index 0000000..59204fa --- /dev/null +++ b/data/abi/gnosis/abi.json @@ -0,0 +1,198 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "singleton", + "type": "address" + } + ], + "name": "ProxyCreation", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_singleton", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "saltNonce", + "type": "uint256" + } + ], + "name": "calculateCreateProxyWithNonceAddress", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "singleton", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "createProxy", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_singleton", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "saltNonce", + "type": "uint256" + }, + { + "internalType": "contract IProxyCreationCallback", + "name": "callback", + "type": "address" + } + ], + "name": "createProxyWithCallback", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_singleton", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initializer", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "saltNonce", + "type": "uint256" + } + ], + "name": "createProxyWithNonce", + "outputs": [ + { + "internalType": "contract GnosisSafeProxy", + "name": "proxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proxyCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "fallbackHandler", + "type": "address" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "payment", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "paymentReceiver", + "type": "address" + } + ], + "name": "setup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/l2pass/abi.json b/data/abi/l2pass/abi.json new file mode 100644 index 0000000..bb183ad --- /dev/null +++ b/data/abi/l2pass/abi.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"uint256","name":"minGasToStore","type":"uint256"},{"internalType":"uint256","name":"defaultGasLimit","type":"uint256"},{"internalType":"address","name":"layerZeroEndpoint","type":"address"},{"internalType":"uint256","name":"startMintId","type":"uint256"},{"internalType":"uint256","name":"endMintId","type":"uint256"},{"internalType":"uint256","name":"mintPrice_","type":"uint256"},{"internalType":"uint256","name":"sendPrice_","type":"uint256"},{"internalType":"uint8","name":"chainId","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"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":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":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":"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":false,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"address","name":"referral","type":"address"}],"name":"Referral","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":"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEFAULT_PAYLOAD_SIZE_LIMIT","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":[{"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":"claimFunds","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":[{"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":"uint256","name":"id","type":"uint256"}],"name":"getVisitedChains","outputs":[{"internalType":"uint8[]","name":"visitedChains","type":"uint8[]"}],"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":[],"name":"metadataGenerator","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"mintWithReferral","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextMintId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":[],"name":"sendPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":"metadataGenerator_","type":"address"}],"name":"setMetadataGenerator","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":"mintPrice_","type":"uint256"}],"name":"setMintPrice","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":"sendPrice_","type":"uint256"}],"name":"setSendPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","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":[{"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":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","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"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"visitedChainsMask","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/data/abi/l2telegraph/bridge_nft.json b/data/abi/l2telegraph/bridge_nft.json new file mode 100644 index 0000000..3a036fc --- /dev/null +++ b/data/abi/l2telegraph/bridge_nft.json @@ -0,0 +1,584 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + }, + { + "internalType": "uint256", + "name": "startId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_max", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "_srcChainId", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "counter", + "type": "uint256" + } + ], + "name": "ReceiveNFT", + "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": [ + { + "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": "cost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_dstChainId", + "type": "uint16" + }, + { + "internalType": "bytes", + "name": "_destination", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "crossChain", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "endpoint", + "outputs": [ + { + "internalType": "contract ILayerZeroEndpoint", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_dstChainId", + "type": "uint16" + }, + { + "internalType": "address", + "name": "_userApplication", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInZRO", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_adapterParams", + "type": "bytes" + } + ], + "name": "estimateFees", + "outputs": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "zroFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "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": "_from", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + } + ], + "name": "lzReceive", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "mint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "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": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "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": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newCost", + "type": "uint256" + } + ], + "name": "setCost", + "outputs": [], + "stateMutability": "nonpayable", + "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": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "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": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/l2telegraph/send_message.json b/data/abi/l2telegraph/send_message.json new file mode 100644 index 0000000..e03593d --- /dev/null +++ b/data/abi/l2telegraph/send_message.json @@ -0,0 +1,225 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_endpoint", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "cost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "endpoint", + "outputs": [ + { + "internalType": "contract ILayerZeroEndpoint", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_dstChainId", + "type": "uint16" + }, + { + "internalType": "address", + "name": "_userApplication", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "_payInZRO", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_adapterParams", + "type": "bytes" + } + ], + "name": "estimateFees", + "outputs": [ + { + "internalType": "uint256", + "name": "nativeFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "zroFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "lastMessage", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_dstChainId", + "type": "uint16" + }, + { + "internalType": "bytes", + "name": "_from", + "type": "bytes" + }, + { + "internalType": "uint64", + "name": "", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + } + ], + "name": "lzReceive", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "internalType": "uint16", + "name": "destChainId", + "type": "uint16" + }, + { + "internalType": "bytes", + "name": "_destination", + "type": "bytes" + } + ], + "name": "sendMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newCost", + "type": "uint256" + } + ], + "name": "setCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/layerbank/abi.json b/data/abi/layerbank/abi.json new file mode 100644 index 0000000..3aaf135 --- /dev/null +++ b/data/abi/layerbank/abi.json @@ -0,0 +1 @@ +[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"BorrowCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCloseFactor","type":"uint256"}],"name":"CloseFactorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newCollateralFactor","type":"uint256"}],"name":"CollateralFactorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newKeeper","type":"address"}],"name":"KeeperUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLABDistributor","type":"address"}],"name":"LABDistributorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLeverager","type":"address"}],"name":"LeveragerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newLiquidationIncentive","type":"uint256"}],"name":"LiquidationIncentiveUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lToken","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"MarketEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lToken","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"MarketExited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lToken","type":"address"}],"name":"MarketListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"lToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"uAmount","type":"uint256"}],"name":"MarketRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"lToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"uAmount","type":"uint256"}],"name":"MarketSupply","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRebateDistributor","type":"address"}],"name":"RebateDistributorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"SupplyCapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newValidator","type":"address"}],"name":"ValidatorUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accountLiquidityOf","outputs":[{"internalType":"uint256","name":"collateralInUSD","type":"uint256"},{"internalType":"uint256","name":"supplyInUSD","type":"uint256"},{"internalType":"uint256","name":"borrowInUSD","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allMarkets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"borrowBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"lToken","type":"address"}],"name":"checkMembership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimLab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"market","type":"address"}],"name":"claimLab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"claimLabBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockDuration","type":"uint256"}],"name":"compoundLab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"lTokens","type":"address[]"}],"name":"enterMarkets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"}],"name":"exitMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_priceCalculator","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"labDistributor","outputs":[{"internalType":"contract ILABDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leverager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lTokenBorrowed","type":"address"},{"internalType":"address","name":"lTokenCollateral","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"liquidateBorrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"liquidationIncentive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"lToken","type":"address"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"collateralFactor","type":"uint256"}],"name":"listMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"}],"name":"marketInfoOf","outputs":[{"components":[{"internalType":"bool","name":"isListed","type":"bool"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"collateralFactor","type":"uint256"}],"internalType":"struct Constant.MarketInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketInfos","outputs":[{"internalType":"bool","name":"isListed","type":"bool"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"collateralFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"marketListOf","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"marketListOfUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"markets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceCalculator","outputs":[{"internalType":"contract IPriceCalculator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebateDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"lAmount","type":"uint256"}],"name":"redeemToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"uAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"lToken","type":"address"}],"name":"removeMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"repayBorrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCloseFactor","type":"uint256"}],"name":"setCloseFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"newCollateralFactor","type":"uint256"}],"name":"setCollateralFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_labDistributor","type":"address"}],"name":"setLABDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_leverager","type":"address"}],"name":"setLeverager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidationIncentive","type":"uint256"}],"name":"setLiquidationIncentive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"lTokens","type":"address[]"},{"internalType":"uint256[]","name":"newBorrowCaps","type":"uint256[]"}],"name":"setMarketBorrowCaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"lTokens","type":"address[]"},{"internalType":"uint256[]","name":"newSupplyCaps","type":"uint256[]"}],"name":"setMarketSupplyCaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_priceCalculator","type":"address"}],"name":"setPriceCalculator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rebateDistributor","type":"address"}],"name":"setRebateDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"uAmount","type":"uint256"}],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"supplier","type":"address"},{"internalType":"address","name":"lToken","type":"address"},{"internalType":"uint256","name":"uAmount","type":"uint256"}],"name":"supplyBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"usersOfMarket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"validator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/data/abi/maverick/position.json b/data/abi/maverick/position.json new file mode 100644 index 0000000..8b52f3d --- /dev/null +++ b/data/abi/maverick/position.json @@ -0,0 +1,430 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + } + ], + "name": "PRBMathUD60x18__SqrtOverflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "prod1", + "type": "uint256" + } + ], + "name": "PRBMath__MulDivFixedPointOverflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "prod1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "denominator", + "type": "uint256" + } + ], + "name": "PRBMath__MulDivOverflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + } + ], + "name": "activeTickLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "sqrtPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveB", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "exactOutput", + "type": "bool" + } + ], + "name": "calculateMultihopSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "returnAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "bool", + "name": "tokenAIn", + "type": "bool" + }, + { + "internalType": "bool", + "name": "exactOutput", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "sqrtPriceLimit", + "type": "uint256" + } + ], + "name": "calculateSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "returnAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint128", + "name": "startBinIndex", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "endBinIndex", + "type": "uint128" + } + ], + "name": "getActiveBins", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "id", + "type": "uint128" + }, + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "lowerTick", + "type": "int32" + }, + { + "internalType": "uint128", + "name": "reserveA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "reserveB", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "mergeId", + "type": "uint128" + } + ], + "internalType": "struct IPoolInformation.BinInfo[]", + "name": "bins", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IPoolPositionSlim", + "name": "poolPosition", + "type": "address" + }, + { + "internalType": "uint256", + "name": "lpTokenAmount", + "type": "uint256" + } + ], + "name": "getAddLiquidityParams", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "pos", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isDelta", + "type": "bool" + }, + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + } + ], + "internalType": "struct IPool.AddLiquidityParams[]", + "name": "addParams", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "binLpTokenAmount0", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint128", + "name": "binId", + "type": "uint128" + } + ], + "name": "getBinDepth", + "outputs": [ + { + "internalType": "uint256", + "name": "depth", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "int32", + "name": "tick", + "type": "int32" + } + ], + "name": "getBinsAtTick", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "reserveA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "reserveB", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "mergeBinBalance", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "mergeId", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "totalSupply", + "type": "uint128" + }, + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "lowerTick", + "type": "int32" + } + ], + "internalType": "struct IPool.BinState[]", + "name": "bins", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + } + ], + "name": "getSqrtPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "sqrtPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "swapCallback", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "int32", + "name": "tick", + "type": "int32" + } + ], + "name": "tickLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "sqrtPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveB", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/maverick/router.json b/data/abi/maverick/router.json new file mode 100644 index 0000000..972a496 --- /dev/null +++ b/data/abi/maverick/router.json @@ -0,0 +1,1082 @@ +[ + { + "inputs": [ + { + "internalType": "contract IFactory", + "name": "_factory", + "type": "address" + }, + { + "internalType": "contract IWETH9", + "name": "_WETH9", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "WETH9", + "outputs": [ + { + "internalType": "contract IWETH9", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountB", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "addLiquidityCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "pos", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isDelta", + "type": "bool" + }, + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + } + ], + "internalType": "struct IPool.AddLiquidityParams[]", + "name": "params", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "minTokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokenBAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidityToPool", + "outputs": [ + { + "internalType": "uint256", + "name": "receivingTokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenBAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "deltaLpBalance", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "binId", + "type": "uint128" + }, + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "lowerTick", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isActive", + "type": "bool" + } + ], + "internalType": "struct IPool.BinDelta[]", + "name": "binDeltas", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "pos", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isDelta", + "type": "bool" + }, + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + } + ], + "internalType": "struct IPool.AddLiquidityParams[]", + "name": "params", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "minTokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokenBAmount", + "type": "uint256" + }, + { + "internalType": "int32", + "name": "minActiveTick", + "type": "int32" + }, + { + "internalType": "int32", + "name": "maxActiveTick", + "type": "int32" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addLiquidityWTickLimits", + "outputs": [ + { + "internalType": "uint256", + "name": "receivingTokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenBAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "deltaLpBalance", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "binId", + "type": "uint128" + }, + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "lowerTick", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isActive", + "type": "bool" + } + ], + "internalType": "struct IPool.BinDelta[]", + "name": "binDeltas", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMinimum", + "type": "uint256" + } + ], + "internalType": "struct IRouter.ExactInputParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactInput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMinimum", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sqrtPriceLimitD18", + "type": "uint256" + } + ], + "internalType": "struct ISlimRouter.ExactInputSingleParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactInputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMaximum", + "type": "uint256" + } + ], + "internalType": "struct IRouter.ExactOutputParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactOutput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMaximum", + "type": "uint256" + } + ], + "internalType": "struct ISlimRouter.ExactOutputSingleParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactOutputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract IFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tickSpacing", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "lookback", + "type": "int256" + }, + { + "internalType": "int32", + "name": "activeTick", + "type": "int32" + }, + { + "internalType": "contract IERC20", + "name": "tokenA", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenB", + "type": "address" + } + ], + "internalType": "struct IRouter.PoolParams", + "name": "poolParams", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "pos", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isDelta", + "type": "bool" + }, + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + } + ], + "internalType": "struct IPool.AddLiquidityParams[]", + "name": "addParams", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "minTokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokenBAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "getOrCreatePoolAndAddLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "receivingTokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenBAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "deltaLpBalance", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "binId", + "type": "uint128" + }, + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "lowerTick", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isActive", + "type": "bool" + } + ], + "internalType": "struct IPool.BinDelta[]", + "name": "binDeltas", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint128[]", + "name": "binIds", + "type": "uint128[]" + }, + { + "internalType": "uint32", + "name": "maxRecursion", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "migrateBinsUpStack", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "position", + "outputs": [ + { + "internalType": "contract IPosition", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "refundETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "binId", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + } + ], + "internalType": "struct IPool.RemoveLiquidityParams[]", + "name": "params", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "minTokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTokenBAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenBAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "deltaA", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "deltaB", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "deltaLpBalance", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "binId", + "type": "uint128" + }, + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "int32", + "name": "lowerTick", + "type": "int32" + }, + { + "internalType": "bool", + "name": "isActive", + "type": "bool" + } + ], + "internalType": "struct IPool.BinDelta[]", + "name": "binDeltas", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "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": "selfPermit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowed", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowedIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "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": "selfPermitIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountToPay", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "swapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "sweepToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "unwrapWETH9", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/data/abi/mintfun/abi.json b/data/abi/mintfun/abi.json new file mode 100644 index 0000000..ddcf850 --- /dev/null +++ b/data/abi/mintfun/abi.json @@ -0,0 +1,41 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "quantity", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "quantity", + "type": "address" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/moonwell/abi.json b/data/abi/moonwell/abi.json new file mode 100644 index 0000000..4d5fe79 --- /dev/null +++ b/data/abi/moonwell/abi.json @@ -0,0 +1,112 @@ +[ + { + "inputs": [ + { + "internalType": "contract WETH9", + "name": "_weth", + "type": "address" + }, + { + "internalType": "contract MErc20", + "name": "_mToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "mToken", + "outputs": [ + { + "internalType": "contract MErc20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + } + ], + "name": "repayBorrowBehalf", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "contract WETH9", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/nft-origins/abi.json b/data/abi/nft-origins/abi.json new file mode 100644 index 0000000..a55eb84 --- /dev/null +++ b/data/abi/nft-origins/abi.json @@ -0,0 +1,665 @@ +[ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "_root", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ERC721EnumerableForbiddenBatchMint", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC721IncorrectOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ERC721InsufficientApproval", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC721InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "ERC721InvalidOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC721InvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC721InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC721InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ERC721NonexistentToken", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "ERC721OutOfBoundsIndex", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuardReentrantCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "StringsInsufficientHexLength", + "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": "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": [ + { + "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": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "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": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "metadata", + "outputs": [ + { + "internalType": "address", + "name": "deployer", + "type": "address" + }, + { + "internalType": "address", + "name": "firstDeployedContract", + "type": "address" + }, + { + "internalType": "address", + "name": "bestDeployedContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rarityData", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "deployer", + "type": "address" + }, + { + "internalType": "address", + "name": "firstDeployedContract", + "type": "address" + }, + { + "internalType": "address", + "name": "bestDeployedContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rarityData", + "type": "uint256" + } + ], + "internalType": "struct ScrollGenesisNFT.Metadata", + "name": "meta", + "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mintData", + "outputs": [ + { + "internalType": "uint64", + "name": "mintAt", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "root", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "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": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "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": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "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" + } +] \ No newline at end of file diff --git a/data/abi/nft2me/abi.json b/data/abi/nft2me/abi.json new file mode 100644 index 0000000..bb15229 --- /dev/null +++ b/data/abi/nft2me/abi.json @@ -0,0 +1,24 @@ +[ + { + "name": null, + "type": "constructor", + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "gas": null, + "_isFragment": true + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/omnisea/abi.json b/data/abi/omnisea/abi.json new file mode 100644 index 0000000..bb002d2 --- /dev/null +++ b/data/abi/omnisea/abi.json @@ -0,0 +1,175 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_scheduler", + "type": "address" + }, + { + "internalType": "address", + "name": "_universalONFT", + "type": "address" + }, + { + "internalType": "address", + "name": "_omniseaERC721Psi", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "collection", + "type": "address" + } + ], + "name": "Created", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "uri", + "type": "string" + }, + { + "internalType": "string", + "name": "tokensURI", + "type": "string" + }, + { + "internalType": "uint24", + "name": "maxSupply", + "type": "uint24" + }, + { + "internalType": "bool", + "name": "isZeroIndexed", + "type": "bool" + }, + { + "internalType": "uint24", + "name": "royaltyAmount", + "type": "uint24" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "internalType": "struct CreateParams", + "name": "_params", + "type": "tuple" + } + ], + "name": "create", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "drops", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "omniseaERC721Psi", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "scheduler", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "manager_", + "type": "address" + } + ], + "name": "setManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "universalONFT", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/pancake/factory.json b/data/abi/pancake/factory.json new file mode 100644 index 0000000..6a1ab5f --- /dev/null +++ b/data/abi/pancake/factory.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_poolDeployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":true,"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"FeeAmountEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":false,"internalType":"bool","name":"whitelistRequested","type":"bool"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"FeeAmountExtraInfoUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":false,"internalType":"int24","name":"tickSpacing","type":"int24"},{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lmPoolDeployer","type":"address"}],"name":"SetLmPoolDeployer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"verified","type":"bool"}],"name":"WhiteListAdded","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Requested","type":"uint128"},{"internalType":"uint128","name":"amount1Requested","type":"uint128"}],"name":"collectProtocol","outputs":[{"internalType":"uint128","name":"amount0","type":"uint128"},{"internalType":"uint128","name":"amount1","type":"uint128"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"}],"name":"createPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"enableFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"","type":"uint24"}],"name":"feeAmountTickSpacing","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"","type":"uint24"}],"name":"feeAmountTickSpacingExtraInfo","outputs":[{"internalType":"bool","name":"whitelistRequested","type":"bool"},{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint24","name":"","type":"uint24"}],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lmPoolDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"bool","name":"whitelistRequested","type":"bool"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFeeAmountExtraInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint32","name":"feeProtocol0","type":"uint32"},{"internalType":"uint32","name":"feeProtocol1","type":"uint32"}],"name":"setFeeProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"lmPool","type":"address"}],"name":"setLmPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lmPoolDeployer","type":"address"}],"name":"setLmPoolDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"verified","type":"bool"}],"name":"setWhiteListAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/pancake/pool.json b/data/abi/pancake/pool.json new file mode 100644 index 0000000..113b80d --- /dev/null +++ b/data/abi/pancake/pool.json @@ -0,0 +1,713 @@ +[ + { + "inputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "Burn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0In", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1In", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0Out", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1Out", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "Swap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint112", + "name": "reserve0", + "type": "uint112" + }, + { + "indexed": false, + "internalType": "uint112", + "name": "reserve1", + "type": "uint112" + } + ], + "name": "Sync", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MINIMUM_LIQUIDITY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "burn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getReserves", + "outputs": [ + { + "internalType": "uint112", + "name": "_reserve0", + "type": "uint112" + }, + { + "internalType": "uint112", + "name": "_reserve1", + "type": "uint112" + }, + { + "internalType": "uint32", + "name": "_blockTimestampLast", + "type": "uint32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "_token0", + "type": "address" + }, + { + "internalType": "address", + "name": "_token1", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "kLast", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "price0CumulativeLast", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "price1CumulativeLast", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "skim", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Out", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Out", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "sync", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/pancake/quoter.json b/data/abi/pancake/quoter.json new file mode 100644 index 0000000..c319cc7 --- /dev/null +++ b/data/abi/pancake/quoter.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_deployer","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH9","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"path","type":"bytes"}],"name":"pancakeV3SwapCallback","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"quoteExactInput","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint160[]","name":"sqrtPriceX96AfterList","type":"uint160[]"},{"internalType":"uint32[]","name":"initializedTicksCrossedList","type":"uint32[]"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IQuoterV2.QuoteExactInputSingleParams","name":"params","type":"tuple"}],"name":"quoteExactInputSingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceX96After","type":"uint160"},{"internalType":"uint32","name":"initializedTicksCrossed","type":"uint32"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"quoteExactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint160[]","name":"sqrtPriceX96AfterList","type":"uint160[]"},{"internalType":"uint32[]","name":"initializedTicksCrossedList","type":"uint32[]"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IQuoterV2.QuoteExactOutputSingleParams","name":"params","type":"tuple"}],"name":"quoteExactOutputSingle","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceX96After","type":"uint160"},{"internalType":"uint32","name":"initializedTicksCrossed","type":"uint32"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/pancake/router.json b/data/abi/pancake/router.json new file mode 100644 index 0000000..cc8a921 --- /dev/null +++ b/data/abi/pancake/router.json @@ -0,0 +1,1271 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_factoryV2", + "type": "address" + }, + { + "internalType": "address", + "name": "_deployer", + "type": "address" + }, + { + "internalType": "address", + "name": "_factoryV3", + "type": "address" + }, + { + "internalType": "address", + "name": "_positionManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableFactory", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableInfo", + "type": "address" + }, + { + "internalType": "address", + "name": "_WETH9", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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": "address", + "name": "factory", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "info", + "type": "address" + } + ], + "name": "SetStableSwap", + "type": "event" + }, + { + "inputs": [], + "name": "WETH9", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "approveMax", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "approveMaxMinusOne", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "approveZeroThenMax", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "approveZeroThenMaxMinusOne", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "callPositionManager", + "outputs": [ + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "paths", + "type": "bytes[]" + }, + { + "internalType": "uint128[]", + "name": "amounts", + "type": "uint128[]" + }, + { + "internalType": "uint24", + "name": "maximumTickDivergence", + "type": "uint24" + }, + { + "internalType": "uint32", + "name": "secondsAgo", + "type": "uint32" + } + ], + "name": "checkOracleSlippage", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "uint24", + "name": "maximumTickDivergence", + "type": "uint24" + }, + { + "internalType": "uint32", + "name": "secondsAgo", + "type": "uint32" + } + ], + "name": "checkOracleSlippage", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deployer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMinimum", + "type": "uint256" + } + ], + "internalType": "struct IV3SwapRouter.ExactInputParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactInput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMinimum", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + } + ], + "internalType": "struct IV3SwapRouter.ExactInputSingleParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactInputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "flag", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "exactInputStableSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "path", + "type": "bytes" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMaximum", + "type": "uint256" + } + ], + "internalType": "struct IV3SwapRouter.ExactOutputParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactOutput", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMaximum", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + } + ], + "internalType": "struct IV3SwapRouter.ExactOutputSingleParams", + "name": "params", + "type": "tuple" + } + ], + "name": "exactOutputSingle", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "flag", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "exactOutputStableSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factoryV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "getApprovalType", + "outputs": [ + { + "internalType": "enum IApproveAndCall.ApprovalType", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + } + ], + "internalType": "struct IApproveAndCall.IncreaseLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "increaseLiquidity", + "outputs": [ + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "uint24", + "name": "fee", + "type": "uint24" + }, + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct IApproveAndCall.MintParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "previousBlockhash", + "type": "bytes32" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Delta", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Delta", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "pancakeV3SwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "positionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "pull", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "refundETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "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": "selfPermit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowed", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowedIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "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": "selfPermitIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_info", + "type": "address" + } + ], + "name": "setStableSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stableSwapFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stableSwapInfo", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "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" + } + ], + "name": "swapExactTokensForTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInMax", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "path", + "type": "address[]" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "swapTokensForExactTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "sweepToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + } + ], + "name": "sweepToken", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeBips", + "type": "uint256" + }, + { + "internalType": "address", + "name": "feeRecipient", + "type": "address" + } + ], + "name": "sweepTokenWithFee", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "feeBips", + "type": "uint256" + }, + { + "internalType": "address", + "name": "feeRecipient", + "type": "address" + } + ], + "name": "sweepTokenWithFee", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "unwrapWETH9", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "feeBips", + "type": "uint256" + }, + { + "internalType": "address", + "name": "feeRecipient", + "type": "address" + } + ], + "name": "unwrapWETH9WithFee", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountMinimum", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeBips", + "type": "uint256" + }, + { + "internalType": "address", + "name": "feeRecipient", + "type": "address" + } + ], + "name": "unwrapWETH9WithFee", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "wrapETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/data/abi/rai/abi.json b/data/abi/rai/abi.json new file mode 100644 index 0000000..c90ef03 --- /dev/null +++ b/data/abi/rai/abi.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"contract IController","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"_portfolio","type":"address"},{"indexed":false,"internalType":"address","name":"_manager","type":"address"},{"indexed":false,"internalType":"string","name":"_name","type":"string"},{"indexed":false,"internalType":"string","name":"_symbol","type":"string"}],"name":"PortfolioCreated","type":"event"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"addTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_components","type":"address[]"},{"internalType":"int256[]","name":"_units","type":"int256[]"},{"internalType":"address[]","name":"_modules","type":"address[]"},{"internalType":"address","name":"_manager","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"create","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllowedTokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/rocketsam/abi.json b/data/abi/rocketsam/abi.json new file mode 100644 index 0000000..76f49f4 --- /dev/null +++ b/data/abi/rocketsam/abi.json @@ -0,0 +1,994 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_poolId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_feeCollector", + "type": "address" + }, + { + "internalType": "uint16", + "name": "_refBips", + "type": "uint16" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EnforcedPause", + "type": "error" + }, + { + "inputs": [], + "name": "ExpectedPause", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "errorCode", + "type": "uint256" + } + ], + "name": "Pool_CoreError", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuardReentrantCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "errorCode", + "type": "uint8" + } + ], + "name": "ReferralSystem_CoreError", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint16", + "name": "oldRefBips", + "type": "uint16" + }, + { + "indexed": true, + "internalType": "uint16", + "name": "newRefBips", + "type": "uint16" + } + ], + "name": "CommonRefBipsChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeEarned", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "referrer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "referrerShare", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "valuesCount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "maxFee", + "type": "uint256" + } + ], + "name": "FeeChanged", + "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": "feeCollector", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FeeEarningsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "oldMaxFee", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "newMaxFee", + "type": "uint256" + } + ], + "name": "MaxFeeChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "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": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "referrer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ReferralEarningsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "referrer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "oldRefBips", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "newRefBips", + "type": "uint16" + } + ], + "name": "ReferrerBipsChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address[]", + "name": "referrers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "newRefBips", + "type": "uint16" + } + ], + "name": "ReferrersBatchBipsChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "ERROR_INCORRECT_FEE_VALUES", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERROR_INVALID_BALANCE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERROR_INVALID_COLLECTOR", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERROR_INVALID_DEPOSIT", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERROR_INVALID_REFERRER", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERROR_INVALID_REF_BIPS", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ERROR_INVALID_REF_EARNINGS", + "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": "ONE_HUNDRED_PERCENT", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "addressStatistic", + "outputs": [ + { + "internalType": "uint256", + "name": "depositsCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "depositsVolume", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balances", + "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": [], + "name": "commonRefBips", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_referrer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "depositWithReferrer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "depositsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "depositsVolume", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "estimateProtocolFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_referrer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "estimateReferrerShare", + "outputs": [ + { + "internalType": "uint256", + "name": "referrerEarnings", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "fee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feeClaimed", + "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": "feeEarned", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "referrerBips", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "referrers", + "outputs": [ + { + "internalType": "uint256", + "name": "txCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "earnedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_commonRefBips", + "type": "uint16" + } + ], + "name": "setCommonRefBips", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_values", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_fees", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "_maxFee", + "type": "uint256" + } + ], + "name": "setFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_feeCollector", + "type": "address" + } + ], + "name": "setFeeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxFee", + "type": "uint256" + } + ], + "name": "setMaxFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_referrer", + "type": "address" + }, + { + "internalType": "uint16", + "name": "_refBips", + "type": "uint16" + } + ], + "name": "setRefBips", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_referrers", + "type": "address[]" + }, + { + "internalType": "uint16", + "name": "_refBips", + "type": "uint16" + } + ], + "name": "setRefBipsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "values", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/rubyscore/abi.json b/data/abi/rubyscore/abi.json new file mode 100644 index 0000000..efe676e --- /dev/null +++ b/data/abi/rubyscore/abi.json @@ -0,0 +1,13 @@ +[ + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "vote", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/scroll/weth.json b/data/abi/scroll/weth.json new file mode 100644 index 0000000..33f62f2 --- /dev/null +++ b/data/abi/scroll/weth.json @@ -0,0 +1,643 @@ +[ + { + "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": "_account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "BridgeBurn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], + "name": "BridgeInitialize", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "BridgeMint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], + "name": "Initialize", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "bridgeBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "bridgeMint", + "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": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "depositTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "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": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l1Address", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Bridge", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "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": "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": "amount", + "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": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "withdrawTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/data/abi/skydrome/abi.json b/data/abi/skydrome/abi.json new file mode 100644 index 0000000..ee1abf9 --- /dev/null +++ b/data/abi/skydrome/abi.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"UNSAFE_swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"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":"bool","name":"stable","type":"bool"},{"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":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.route[]","name":"routes","type":"tuple[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"}],"name":"quoteAddLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"quoteRemoveLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"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":"bool","name":"stable","type":"bool"},{"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":"bool","name":"stable","type":"bool"},{"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":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"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":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"sortTokens","outputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.route[]","name":"routes","type":"tuple[]"},{"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":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.route[]","name":"routes","type":"tuple[]"},{"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"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct Router.route[]","name":"routes","type":"tuple[]"},{"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":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSimple","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/data/abi/stargate/bridge.json b/data/abi/stargate/bridge.json new file mode 100644 index 0000000..58eaa25 --- /dev/null +++ b/data/abi/stargate/bridge.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_stargateEthVault","type":"address"},{"internalType":"address","name":"_stargateRouter","type":"address"},{"internalType":"uint16","name":"_poolId","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"addLiquidityETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"poolId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stargateEthVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stargateRouter","outputs":[{"internalType":"contract IStargateRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_amountLD","type":"uint256"},{"internalType":"uint256","name":"_minAmountLD","type":"uint256"}],"name":"swapETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"components":[{"internalType":"uint256","name":"amountLD","type":"uint256"},{"internalType":"uint256","name":"minAmountLD","type":"uint256"}],"internalType":"struct RouterETH.SwapAmount","name":"_swapAmount","type":"tuple"},{"components":[{"internalType":"uint256","name":"dstGasForCall","type":"uint256"},{"internalType":"uint256","name":"dstNativeAmount","type":"uint256"},{"internalType":"bytes","name":"dstNativeAddr","type":"bytes"}],"internalType":"struct IStargateRouter.lzTxObj","name":"_lzTxParams","type":"tuple"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"swapETHAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/data/abi/stargate/router.json b/data/abi/stargate/router.json new file mode 100644 index 0000000..ab61ff3 --- /dev/null +++ b/data/abi/stargate/router.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_layerZeroEndpoint","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint8","name":"msgType","type":"uint8"},{"indexed":false,"internalType":"uint64","name":"nonce","type":"uint64"}],"name":"SendMsg","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveTokenSpender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"bridgeLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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":"uint16","name":"","type":"uint16"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"gasLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"layerZeroEndpoint","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint8","name":"_functionType","type":"uint8"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"bytes","name":"_transferAndCallPayload","type":"bytes"},{"components":[{"internalType":"uint256","name":"dstGasForCall","type":"uint256"},{"internalType":"uint256","name":"dstNativeAmount","type":"uint256"},{"internalType":"bytes","name":"dstNativeAddr","type":"bytes"}],"internalType":"struct IStargateRouter.lzTxObj","name":"_lzTxParams","type":"tuple"}],"name":"quoteLayerZeroFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_srcPoolId","type":"uint256"},{"internalType":"uint256","name":"_dstPoolId","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"components":[{"internalType":"uint256","name":"credits","type":"uint256"},{"internalType":"uint256","name":"idealBalance","type":"uint256"}],"internalType":"struct Pool.CreditObj","name":"_c","type":"tuple"},{"internalType":"uint256","name":"_amountSD","type":"uint256"},{"internalType":"bytes","name":"_to","type":"bytes"},{"components":[{"internalType":"uint256","name":"dstGasForCall","type":"uint256"},{"internalType":"uint256","name":"dstNativeAmount","type":"uint256"},{"internalType":"bytes","name":"dstNativeAddr","type":"bytes"}],"internalType":"struct IStargateRouter.lzTxObj","name":"_lzTxParams","type":"tuple"}],"name":"redeemLocal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"components":[{"internalType":"uint256","name":"credits","type":"uint256"},{"internalType":"uint256","name":"idealBalance","type":"uint256"}],"internalType":"struct Pool.CreditObj","name":"_c","type":"tuple"},{"components":[{"internalType":"uint256","name":"dstGasForCall","type":"uint256"},{"internalType":"uint256","name":"dstNativeAmount","type":"uint256"},{"internalType":"bytes","name":"dstNativeAddr","type":"bytes"}],"internalType":"struct IStargateRouter.lzTxObj","name":"_lzTxParams","type":"tuple"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"redeemLocalCallback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_srcPoolId","type":"uint256"},{"internalType":"uint256","name":"_dstPoolId","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"components":[{"internalType":"uint256","name":"credits","type":"uint256"},{"internalType":"uint256","name":"idealBalance","type":"uint256"}],"internalType":"struct Pool.CreditObj","name":"_c","type":"tuple"}],"name":"sendCredits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_bridgeAddress","type":"bytes"}],"name":"setBridge","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":"_chainId","type":"uint16"},{"internalType":"uint8","name":"_functionType","type":"uint8"},{"internalType":"uint256","name":"_gasAmount","type":"uint256"}],"name":"setGasAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setUseLayerZeroToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_srcPoolId","type":"uint256"},{"internalType":"uint256","name":"_dstPoolId","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"components":[{"internalType":"uint256","name":"credits","type":"uint256"},{"internalType":"uint256","name":"idealBalance","type":"uint256"}],"internalType":"struct Pool.CreditObj","name":"_c","type":"tuple"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"eqFee","type":"uint256"},{"internalType":"uint256","name":"eqReward","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"protocolFee","type":"uint256"},{"internalType":"uint256","name":"lkbRemove","type":"uint256"}],"internalType":"struct Pool.SwapObj","name":"_s","type":"tuple"},{"components":[{"internalType":"uint256","name":"dstGasForCall","type":"uint256"},{"internalType":"uint256","name":"dstNativeAmount","type":"uint256"},{"internalType":"bytes","name":"dstNativeAddr","type":"bytes"}],"internalType":"struct IStargateRouter.lzTxObj","name":"_lzTxParams","type":"tuple"},{"internalType":"bytes","name":"_to","type":"bytes"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useLayerZeroToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/data/abi/syncswap/classic_pool.json b/data/abi/syncswap/classic_pool.json new file mode 100644 index 0000000..1db49a3 --- /dev/null +++ b/data/abi/syncswap/classic_pool.json @@ -0,0 +1,151 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_master", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidTokens", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "createPool", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getDeployData", + "outputs": [ + { + "internalType": "bytes", + "name": "deployData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "getSwapFee", + "outputs": [ + { + "internalType": "uint24", + "name": "swapFee", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "master", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/syncswap/classic_pool_data.json b/data/abi/syncswap/classic_pool_data.json new file mode 100644 index 0000000..cbda4c9 --- /dev/null +++ b/data/abi/syncswap/classic_pool_data.json @@ -0,0 +1,924 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Expired", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientLiquidityMinted", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "Overflow", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "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": false, + "internalType": "uint256", + "name": "liquidity", + "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" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "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": "uint256", + "name": "reserve0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reserve1", + "type": "uint256" + } + ], + "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": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "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": "_amount", + "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": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_callbackData", + "type": "bytes" + } + ], + "name": "burn", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount[]", + "name": "_amounts", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_callbackData", + "type": "bytes" + } + ], + "name": "burnSingle", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount", + "name": "_tokenAmount", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amountOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "getAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "_amountIn", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "getAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "_amountOut", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAssets", + "outputs": [ + { + "internalType": "address[]", + "name": "assets", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFee", + "outputs": [ + { + "internalType": "uint24", + "name": "_protocolFee", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "_reserve0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_reserve1", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenOut", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "getSwapFee", + "outputs": [ + { + "internalType": "uint24", + "name": "_swapFee", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "invariantLast", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "master", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_callbackData", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "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": "_amount", + "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": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "permit2", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "poolType", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reserve0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reserve1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_callbackData", + "type": "bytes" + } + ], + "name": "swap", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount", + "name": "_tokenAmount", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "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": "_amount", + "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": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/syncswap/router.json b/data/abi/syncswap/router.json new file mode 100644 index 0000000..26d9109 --- /dev/null +++ b/data/abi/syncswap/router.json @@ -0,0 +1,1178 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_vault", + "type": "address" + }, + { + "internalType": "address", + "name": "_wETH", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ApproveFailed", + "type": "error" + }, + { + "inputs": [], + "name": "Expired", + "type": "error" + }, + { + "inputs": [], + "name": "NotEnoughLiquidityMinted", + "type": "error" + }, + { + "inputs": [], + "name": "TooLittleReceived", + "type": "error" + }, + { + "inputs": [], + "name": "TransferFromFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SyncSwapRouter.TokenInput[]", + "name": "inputs", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "minLiquidity", + "type": "uint256" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SyncSwapRouter.TokenInput[]", + "name": "inputs", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "minLiquidity", + "type": "uint256" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "addLiquidity2", + "outputs": [ + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SyncSwapRouter.TokenInput[]", + "name": "inputs", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "minLiquidity", + "type": "uint256" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "approveAmount", + "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" + } + ], + "internalType": "struct IRouter.SplitPermitParams[]", + "name": "permits", + "type": "tuple[]" + } + ], + "name": "addLiquidityWithPermit", + "outputs": [ + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct SyncSwapRouter.TokenInput[]", + "name": "inputs", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "minLiquidity", + "type": "uint256" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "approveAmount", + "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" + } + ], + "internalType": "struct IRouter.SplitPermitParams[]", + "name": "permits", + "type": "tuple[]" + } + ], + "name": "addLiquidityWithPermit2", + "outputs": [ + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "burnLiquidity", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount[]", + "name": "amounts", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "burnLiquiditySingle", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount", + "name": "amountOut", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "approveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IRouter.ArrayPermitParams", + "name": "permit", + "type": "tuple" + } + ], + "name": "burnLiquiditySingleWithPermit", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount", + "name": "amountOut", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "approveAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IRouter.ArrayPermitParams", + "name": "permit", + "type": "tuple" + } + ], + "name": "burnLiquidityWithPermit", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount[]", + "name": "amounts", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "createPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "enteredPools", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "enteredPoolsLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isPoolEntered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "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": "selfPermit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "selfPermit2", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "selfPermit2IfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowed", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "selfPermitAllowedIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "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": "selfPermitIfNecessary", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingPool", + "type": "address" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "onBehalf", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "internalType": "struct IRouter.SwapStep[]", + "name": "steps", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "internalType": "struct IRouter.SwapPath[]", + "name": "paths", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount", + "name": "amountOut", + "type": "tuple" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "address", + "name": "callback", + "type": "address" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "internalType": "struct IRouter.SwapStep[]", + "name": "steps", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + } + ], + "internalType": "struct IRouter.SwapPath[]", + "name": "paths", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "amountOutMin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "approveAmount", + "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" + } + ], + "internalType": "struct IRouter.SplitPermitParams", + "name": "permit", + "type": "tuple" + } + ], + "name": "swapWithPermit", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IPool.TokenAmount", + "name": "amountOut", + "type": "tuple" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/data/abi/uniswap/factory.json b/data/abi/uniswap/factory.json new file mode 100644 index 0000000..6a1ab5f --- /dev/null +++ b/data/abi/uniswap/factory.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_poolDeployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":true,"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"FeeAmountEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":false,"internalType":"bool","name":"whitelistRequested","type":"bool"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"FeeAmountExtraInfoUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":true,"internalType":"uint24","name":"fee","type":"uint24"},{"indexed":false,"internalType":"int24","name":"tickSpacing","type":"int24"},{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lmPoolDeployer","type":"address"}],"name":"SetLmPoolDeployer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"verified","type":"bool"}],"name":"WhiteListAdded","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Requested","type":"uint128"},{"internalType":"uint128","name":"amount1Requested","type":"uint128"}],"name":"collectProtocol","outputs":[{"internalType":"uint128","name":"amount0","type":"uint128"},{"internalType":"uint128","name":"amount1","type":"uint128"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"}],"name":"createPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"}],"name":"enableFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"","type":"uint24"}],"name":"feeAmountTickSpacing","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"","type":"uint24"}],"name":"feeAmountTickSpacingExtraInfo","outputs":[{"internalType":"bool","name":"whitelistRequested","type":"bool"},{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint24","name":"","type":"uint24"}],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lmPoolDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"bool","name":"whitelistRequested","type":"bool"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFeeAmountExtraInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint32","name":"feeProtocol0","type":"uint32"},{"internalType":"uint32","name":"feeProtocol1","type":"uint32"}],"name":"setFeeProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"lmPool","type":"address"}],"name":"setLmPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lmPoolDeployer","type":"address"}],"name":"setLmPoolDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"verified","type":"bool"}],"name":"setWhiteListAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/uniswap/quoter.json b/data/abi/uniswap/quoter.json new file mode 100644 index 0000000..c319cc7 --- /dev/null +++ b/data/abi/uniswap/quoter.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_deployer","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH9","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH9","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"path","type":"bytes"}],"name":"pancakeV3SwapCallback","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"quoteExactInput","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint160[]","name":"sqrtPriceX96AfterList","type":"uint160[]"},{"internalType":"uint32[]","name":"initializedTicksCrossedList","type":"uint32[]"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IQuoterV2.QuoteExactInputSingleParams","name":"params","type":"tuple"}],"name":"quoteExactInputSingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceX96After","type":"uint160"},{"internalType":"uint32","name":"initializedTicksCrossed","type":"uint32"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"quoteExactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint160[]","name":"sqrtPriceX96AfterList","type":"uint160[]"},{"internalType":"uint32[]","name":"initializedTicksCrossedList","type":"uint32[]"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}],"internalType":"struct IQuoterV2.QuoteExactOutputSingleParams","name":"params","type":"tuple"}],"name":"quoteExactOutputSingle","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint160","name":"sqrtPriceX96After","type":"uint160"},{"internalType":"uint32","name":"initializedTicksCrossed","type":"uint32"},{"internalType":"uint256","name":"gasEstimate","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/data/abi/uniswap/router.json b/data/abi/uniswap/router.json new file mode 100644 index 0000000..430f298 --- /dev/null +++ b/data/abi/uniswap/router.json @@ -0,0 +1 @@ +[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_factoryV2","internalType":"address"},{"type":"address","name":"factoryV3","internalType":"address"},{"type":"address","name":"_positionManager","internalType":"address"},{"type":"address","name":"_WETH9","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WETH9","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"approveMax","inputs":[{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"approveMaxMinusOne","inputs":[{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"approveZeroThenMax","inputs":[{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"approveZeroThenMaxMinusOne","inputs":[{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes","name":"result","internalType":"bytes"}],"name":"callPositionManager","inputs":[{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[],"name":"checkOracleSlippage","inputs":[{"type":"bytes[]","name":"paths","internalType":"bytes[]"},{"type":"uint128[]","name":"amounts","internalType":"uint128[]"},{"type":"uint24","name":"maximumTickDivergence","internalType":"uint24"},{"type":"uint32","name":"secondsAgo","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[],"name":"checkOracleSlippage","inputs":[{"type":"bytes","name":"path","internalType":"bytes"},{"type":"uint24","name":"maximumTickDivergence","internalType":"uint24"},{"type":"uint32","name":"secondsAgo","internalType":"uint32"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"}],"name":"exactInput","inputs":[{"type":"tuple","name":"params","internalType":"struct IV3SwapRouter.ExactInputParams","components":[{"type":"bytes","name":"path","internalType":"bytes"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMinimum","internalType":"uint256"}]}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"}],"name":"exactInputSingle","inputs":[{"type":"tuple","name":"params","internalType":"struct IV3SwapRouter.ExactInputSingleParams","components":[{"type":"address","name":"tokenIn","internalType":"address"},{"type":"address","name":"tokenOut","internalType":"address"},{"type":"uint24","name":"fee","internalType":"uint24"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMinimum","internalType":"uint256"},{"type":"uint160","name":"sqrtPriceLimitX96","internalType":"uint160"}]}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"}],"name":"exactOutput","inputs":[{"type":"tuple","name":"params","internalType":"struct IV3SwapRouter.ExactOutputParams","components":[{"type":"bytes","name":"path","internalType":"bytes"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMaximum","internalType":"uint256"}]}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"}],"name":"exactOutputSingle","inputs":[{"type":"tuple","name":"params","internalType":"struct IV3SwapRouter.ExactOutputSingleParams","components":[{"type":"address","name":"tokenIn","internalType":"address"},{"type":"address","name":"tokenOut","internalType":"address"},{"type":"uint24","name":"fee","internalType":"uint24"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMaximum","internalType":"uint256"},{"type":"uint160","name":"sqrtPriceLimitX96","internalType":"uint160"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factoryV2","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint8","name":"","internalType":"enum IApproveAndCall.ApprovalType"}],"name":"getApprovalType","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes","name":"result","internalType":"bytes"}],"name":"increaseLiquidity","inputs":[{"type":"tuple","name":"params","internalType":"struct IApproveAndCall.IncreaseLiquidityParams","components":[{"type":"address","name":"token0","internalType":"address"},{"type":"address","name":"token1","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"uint256","name":"amount0Min","internalType":"uint256"},{"type":"uint256","name":"amount1Min","internalType":"uint256"}]}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes","name":"result","internalType":"bytes"}],"name":"mint","inputs":[{"type":"tuple","name":"params","internalType":"struct IApproveAndCall.MintParams","components":[{"type":"address","name":"token0","internalType":"address"},{"type":"address","name":"token1","internalType":"address"},{"type":"uint24","name":"fee","internalType":"uint24"},{"type":"int24","name":"tickLower","internalType":"int24"},{"type":"int24","name":"tickUpper","internalType":"int24"},{"type":"uint256","name":"amount0Min","internalType":"uint256"},{"type":"uint256","name":"amount1Min","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"}]}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes[]","name":"","internalType":"bytes[]"}],"name":"multicall","inputs":[{"type":"bytes32","name":"previousBlockhash","internalType":"bytes32"},{"type":"bytes[]","name":"data","internalType":"bytes[]"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes[]","name":"","internalType":"bytes[]"}],"name":"multicall","inputs":[{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bytes[]","name":"data","internalType":"bytes[]"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes[]","name":"results","internalType":"bytes[]"}],"name":"multicall","inputs":[{"type":"bytes[]","name":"data","internalType":"bytes[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"positionManager","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"pull","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"refundETH","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"selfPermit","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"selfPermitAllowed","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"nonce","internalType":"uint256"},{"type":"uint256","name":"expiry","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"selfPermitAllowedIfNecessary","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"nonce","internalType":"uint256"},{"type":"uint256","name":"expiry","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"selfPermitIfNecessary","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"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":"amountOut","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":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountIn","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":"function","stateMutability":"payable","outputs":[],"name":"sweepToken","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountMinimum","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"sweepToken","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountMinimum","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"sweepTokenWithFee","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountMinimum","internalType":"uint256"},{"type":"uint256","name":"feeBips","internalType":"uint256"},{"type":"address","name":"feeRecipient","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"sweepTokenWithFee","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountMinimum","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"feeBips","internalType":"uint256"},{"type":"address","name":"feeRecipient","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"uniswapV3SwapCallback","inputs":[{"type":"int256","name":"amount0Delta","internalType":"int256"},{"type":"int256","name":"amount1Delta","internalType":"int256"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"unwrapWETH9","inputs":[{"type":"uint256","name":"amountMinimum","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"unwrapWETH9","inputs":[{"type":"uint256","name":"amountMinimum","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"unwrapWETH9WithFee","inputs":[{"type":"uint256","name":"amountMinimum","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"feeBips","internalType":"uint256"},{"type":"address","name":"feeRecipient","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"unwrapWETH9WithFee","inputs":[{"type":"uint256","name":"amountMinimum","internalType":"uint256"},{"type":"uint256","name":"feeBips","internalType":"uint256"},{"type":"address","name":"feeRecipient","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"wrapETH","inputs":[{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}] \ No newline at end of file diff --git a/data/abi/woofi/router.json b/data/abi/woofi/router.json new file mode 100644 index 0000000..624282b --- /dev/null +++ b/data/abi/woofi/router.json @@ -0,0 +1,400 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address", + "name": "_pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "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": false, + "internalType": "address", + "name": "newPool", + "type": "address" + } + ], + "name": "WooPoolChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum IWooRouterV2.SwapType", + "name": "swapType", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "rebateTo", + "type": "address" + } + ], + "name": "WooRouterSwap", + "type": "event" + }, + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approveTarget", + "type": "address" + }, + { + "internalType": "address", + "name": "swapTarget", + "type": "address" + }, + { + "internalType": "address", + "name": "fromToken", + "type": "address" + }, + { + "internalType": "address", + "name": "toToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "fromAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minToAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "externalSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "realToAmount", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stuckToken", + "type": "address" + } + ], + "name": "inCaseTokenGotStuck", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fromToken", + "type": "address" + }, + { + "internalType": "address", + "name": "toToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "fromAmount", + "type": "uint256" + } + ], + "name": "querySwap", + "outputs": [ + { + "internalType": "uint256", + "name": "toAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quoteToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPool", + "type": "address" + } + ], + "name": "setPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "name": "setWhitelisted", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fromToken", + "type": "address" + }, + { + "internalType": "address", + "name": "toToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "fromAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minToAmount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "rebateTo", + "type": "address" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "realToAmount", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fromToken", + "type": "address" + }, + { + "internalType": "address", + "name": "toToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "fromAmount", + "type": "uint256" + } + ], + "name": "tryQuerySwap", + "outputs": [ + { + "internalType": "uint256", + "name": "toAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wooPool", + "outputs": [ + { + "internalType": "contract IWooPPV2", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/data/abi/zebra/abi.json b/data/abi/zebra/abi.json new file mode 100644 index 0000000..ae5cab0 --- /dev/null +++ b/data/abi/zebra/abi.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"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":"view","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":"view","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"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":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapMininng","type":"address"}],"name":"setSwapMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"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":[],"name":"swapMining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/data/abi/zerius/abi.json b/data/abi/zerius/abi.json new file mode 100644 index 0000000..08ae6ac --- /dev/null +++ b/data/abi/zerius/abi.json @@ -0,0 +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"}] \ No newline at end of file diff --git a/data/abi/zkstars/abi.json b/data/abi/zkstars/abi.json new file mode 100644 index 0000000..cdceeb7 --- /dev/null +++ b/data/abi/zkstars/abi.json @@ -0,0 +1,552 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "baseURI_", + "type": "string" + }, + { + "internalType": "uint256", + "name": "ref_precent_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC721IncorrectOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ERC721InsufficientApproval", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC721InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "ERC721InvalidOperator", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC721InvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC721InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC721InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ERC721NonexistentToken", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuardReentrantCall", + "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": "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": [ + { + "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": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRefPercent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "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": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "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": "address payable", + "name": "ref", + "type": "address" + } + ], + "name": "safeMint", + "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": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "setPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPercent", + "type": "uint256" + } + ], + "name": "setRefPercent", + "outputs": [], + "stateMutability": "nonpayable", + "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": [ + { + "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 payable", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/data/deploy/abi.json b/data/deploy/abi.json new file mode 100644 index 0000000..32960f8 --- /dev/null +++ b/data/deploy/abi.json @@ -0,0 +1,2 @@ +[ +] \ No newline at end of file diff --git a/data/deploy/bytecode.txt b/data/deploy/bytecode.txt new file mode 100644 index 0000000..99e07d0 --- /dev/null +++ b/data/deploy/bytecode.txt @@ -0,0 +1 @@ +0x \ No newline at end of file diff --git a/data/rpc.json b/data/rpc.json new file mode 100644 index 0000000..f1df234 --- /dev/null +++ b/data/rpc.json @@ -0,0 +1,54 @@ +{ + "ethereum": { + "rpc": [ + "https://rpc.ankr.com/eth" + ], + "explorer": "https://etherscan.io/tx/", + "token": "ETH" + }, + "arbitrum": { + "rpc": [ + "https://rpc.ankr.com/arbitrum" + ], + "explorer": "https://arbiscan.io/tx/", + "token": "ETH" + }, + "optimism": { + "rpc": [ + "https://rpc.ankr.com/optimism" + ], + "explorer": "https://optimistic.etherscan.io/tx/", + "token": "ETH" + }, + "polygon_zkevm": { + "rpc": [ + "https://rpc.ankr.com/polygon_zkevm" + ], + "explorer": "https://zkevm.polygonscan.com/tx/", + "token": "ETH" + }, + "zksync": { + "rpc": [ + "https://rpc.ankr.com/zksync_era" + ], + "explorer": "https://explorer.zksync.io/tx/", + "token": "ETH" + }, + "base": { + "rpc": [ + "https://rpc.ankr.com/base" + ], + "explorer": "https://basescan.org/tx/", + "token": "ETH" +<<<<<<< HEAD + }, + "scroll": { + "rpc": [ + "https://rpc.scroll.io" + ], + "explorer": "https://scrollscan.com/tx/", + "token": "ETH" +======= +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + } +} diff --git a/logging.log b/logging.log new file mode 100644 index 0000000..fcd13f0 --- /dev/null +++ b/logging.log @@ -0,0 +1,22 @@ +2024-04-07 20:19:12.021 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds +2024-04-07 20:19:12.024 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds +2024-04-07 20:19:12.024 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds +2024-04-07 20:21:56.075 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds +2024-04-07 20:21:56.076 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds +2024-04-07 20:21:56.077 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds +2024-04-07 20:23:03.416 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds +2024-04-07 20:23:03.417 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds +2024-04-07 20:23:03.418 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds +2024-04-07 20:23:03.418 | INFO | main:main:52 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 +2024-04-07 20:23:04.924 | INFO | modules.syncswap:swap:72 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Swap on SyncSwap – USDC -> ETH | 0.000194 USDC +2024-04-07 20:23:06.688 | SUCCESS | modules.account:approve:123 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Make approve +2024-04-07 20:23:08.009 | ERROR | utils.helpers:wrapper:14 - Error | {'code': -32000, 'message': 'insufficient funds for transfer'} +2024-04-07 20:23:08.009 | INFO | utils.sleeping:sleep:10 - 💤 Sleep 18 s. +2024-04-07 20:23:16.668 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds +2024-04-07 20:23:16.669 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds +2024-04-07 20:23:16.670 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds +2024-04-07 20:23:16.670 | INFO | main:main:52 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 +2024-04-07 20:23:18.521 | INFO | modules.syncswap:swap:72 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Swap on SyncSwap – USDC -> ETH | 0.000151 USDC +2024-04-07 20:23:20.797 | SUCCESS | modules.account:approve:123 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Make approve +2024-04-07 20:23:22.489 | ERROR | utils.helpers:wrapper:14 - Error | {'code': -32000, 'message': 'insufficient funds for transfer'} +2024-04-07 20:23:22.490 | INFO | utils.sleeping:sleep:10 - 💤 Sleep 18 s. diff --git a/main.py b/main.py new file mode 100644 index 0000000..6ea10d7 --- /dev/null +++ b/main.py @@ -0,0 +1,213 @@ +import random +<<<<<<< HEAD +import time +from typing import Union +import asyncio + +from loguru import logger + + +async def run_module(module, wallet_number, key, recipient: Union[str, None] = None, settings: dict = {}): + try: + await module( + wallet_number, + key, + recipient, + from_token=settings.get('from_token'), + to_token=settings.get('to_token'), + min_amount=settings.get('min_amount'), + max_amount=settings.get('max_amount'), + slippage=settings.get('slippage'), + all_amount=settings.get('all_amount'), + min_percent=settings.get('min_percent'), + max_percent=settings.get('max_percent'), + ) + + except Exception as e: + logger.error(e) + + +def _async_run_module(module, wallet_number, key, recipient, settings): + asyncio.run(run_module(module, wallet_number, key, recipient, settings)) + + +def main( + websites, + wallets, + website_settings, + wait_between_wallets_max=30, + wait_between_wallets_min=20, + wait_between_websites_max=20, + wait_between_websites_min=5, + wait_between_cycles_max=((12*60*60)+90), + wait_between_cycles_min=((12*60*60)+5), + ): + + + while True: + # iterate through the wallets + for _, wallet_key in enumerate(wallets, start=1): + # website transactions to perform at each website + # iterate through websites + for tuple in zip(websites, website_settings): + logger.info(f"Running module {tuple[0].__name__} with wallet {wallet_key}") + _async_run_module( + tuple[0], + _, + wallet_key, + None, + tuple[1] + ) + + # wait between website actions + random_wait = random.randint(wait_between_websites_min, wait_between_websites_max) + logger.info(f"Waiting between websites for {random_wait} seconds") + time.sleep(random_wait) + + # wait between wallets + random_wait = random.randint(wait_between_wallets_min, wait_between_wallets_max) + logger.info(f"Waiting between wallets for {random_wait} seconds") + time.sleep(random_wait) + + # wait between cycles + random_wait = random.randint(wait_between_cycles_min, wait_between_cycles_max) + logger.info(f"Waiting between cycles for {random_wait} seconds") + time.sleep(random_wait) + + # change all the settings + logger.info(f"Switching from_token and to_token") + for setting in website_settings: + # ETH to USDC or back + setting['from_token'], setting['to_token'] = setting['to_token'], setting['from_token'] +======= +import sys +import time +from concurrent.futures import ThreadPoolExecutor + +import questionary +from loguru import logger +from questionary import Choice + +from config import ACCOUNTS +from settings import ( + RANDOM_WALLET, + SLEEP_TO, + SLEEP_FROM, + QUANTITY_THREADS, + THREAD_SLEEP_FROM, + THREAD_SLEEP_TO, REMOVE_WALLET, +) +from modules_settings import * +from utils.helpers import remove_wallet +from utils.sleeping import sleep + + +def get_module(): + result = questionary.select( + "Select a method to get started", + choices=[ + Choice("1) Make bridge to Base", bridge_base), + Choice("2) Make bridge on Orbiter", bridge_orbiter), + Choice("3) Wrap ETH", wrap_eth), + Choice("4) Unwrap ETH", unwrap_eth), + Choice("5) Swap on Uniswap", swap_uniswap), + Choice("6) Swap on Pancake", swap_pancake), + Choice("7) Swap on WooFi", swap_woofi), + Choice("8) Swap on BaseSwap", swap_baseswap), + Choice("9) Swap on AlienSwap", swap_alienswap), + Choice("10) Swap on Maverick", swap_maverick), + Choice("11) Swap on Odos", swap_odos), + Choice("12) Swap on 1inch", swap_inch), + Choice("13) Swap on OpenOcean", swap_openocean), + Choice("14) Swap on XYSwap", swap_xyswap), + Choice("15) Bungee Refuel", bungee_refuel), + Choice("16) Stargate bridge", stargate_bridge), + Choice("17) Deposit Aave", deposit_aave), + Choice("18) Withdraw Aave", withdraw_aave), + Choice("19) Deposit MoonWell", deposit_moonwell), + Choice("20) Withdraw MoonWell", withdraw_moonwell), + Choice("21) Deposit RocketSam", deposit_rocketsam), + Choice("22) Withdraw RocketSam", withdraw_rocketsam), + Choice("23) Mint NFT on MintFun", mint_mintfun), + Choice("24) Mint and Bridge Zerius NFT", mint_zerius), + Choice("25) Mint ZkStars NFT", mint_zkstars), + Choice("26) Dmail sending mail", send_mail), + Choice("27) Send message L2Telegraph", send_message), + Choice("28) Mint and bridge NFT L2Telegraph", bridge_nft), + Choice("29) Create portfolio on Ray", create_portfolio), + Choice("30) Create gnosis safe", create_safe), + Choice("31) Mint NFT on NFTS2ME", mint_nft), + Choice("32) Swap tokens to ETH", swap_tokens), + Choice("33) Use Multiswap", swap_multiswap), + Choice("34) Use custom routes", custom_routes), + Choice("35) Check transaction count", "tx_checker"), + Choice("36) Exit", "exit"), + ], + qmark="⚙️ ", + pointer="✅ " + ).ask() + if result == "exit": + print("\n❤️ Subscribe to me – https://t.me/sybilwave\n") + print("🤑 Donate me: 0x00000b0ddce0bfda4531542ad1f2f5fad7b9cde9") + sys.exit() + return result + + +def get_wallets(): + wallets = [ + { + "id": _id, + "key": key, + } for _id, key in enumerate(ACCOUNTS, start=1) + ] + + return wallets + + +async def run_module(module, account_id, key): + try: + await module(account_id, key) + except Exception as e: + logger.error(e) + + if REMOVE_WALLET: + remove_wallet(key) + + await sleep(SLEEP_FROM, SLEEP_TO) + + +def _async_run_module(module, account_id, key): + asyncio.run(run_module(module, account_id, key)) + + +def main(module): + wallets = get_wallets() + + if RANDOM_WALLET: + random.shuffle(wallets) + + with ThreadPoolExecutor(max_workers=QUANTITY_THREADS) as executor: + for _, account in enumerate(wallets, start=1): + executor.submit( + _async_run_module, + module, + account.get("id"), + account.get("key"), + ) + time.sleep(random.randint(THREAD_SLEEP_FROM, THREAD_SLEEP_TO)) + + +if __name__ == '__main__': + print("❤️ Subscribe to me – https://t.me/sybilwave\n") + + logger.add("logging.log") + + module = get_module() + if module == "tx_checker": + get_tx_count() + else: + main(module) + + print("\n❤️ Subscribe to me – https://t.me/sybilwave\n") + print("🤑 Donate me: 0x00000b0ddce0bfda4531542ad1f2f5fad7b9cde9") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 diff --git a/modules/__init__.py b/modules/__init__.py new file mode 100644 index 0000000..ccce43d --- /dev/null +++ b/modules/__init__.py @@ -0,0 +1,56 @@ +from .account import Account +<<<<<<< HEAD +from .scroll import Scroll +from .orbiter import Orbiter +from .nitro import Nitro +from .layerswap import LayerSwap +from .skydrome import Skydrome +from .zebra import Zebra +from .syncswap import SyncSwap +from .xyswap import XYSwap +from .aave import Aave +from .layerbank import LayerBank +from .zerius import Zerius +from .l2pass import L2Pass +from .zkstars import ZkStars +from .dmail import Dmail +from .omnisea import Omnisea +from .nfts2me import Minter +from .rubyscore import RubyScore +from .safe import GnosisSafe +from .deploy import Deployer +from .swap_tokens import SwapTokens +from .multiswap import Multiswap +from .routes import Routes +from .transfer import Transfer +======= +from .base import Base +from .orbiter import Orbiter +from .uniswap import Uniswap +from .pancake import Pancake +from .woofi import WooFi +from .baseswap import BaseSwap +from .alienswap import AlienSwap +from .odos import Odos +from .inch import Inch +from .openocean import OpenOcean +from .xyswap import XYSwap +from .maverick import Maverick +from .bungee import Bungee +from .stargate import Stargate +from .aave import Aave +from .moonwell import MoonWell +from .rocketsam import RocketSam +from .l2telegraph import L2Telegraph +from .mintfun import MintFun +from .zerius import Zerius +from .zkstars import ZkStars +from .rai import Rai +from .safe import GnosisSafe +from .nfts2me import Minter +from .dmail import Dmail +from .swap_tokens import SwapTokens +from .multiswap import Multiswap +from .routes import Routes +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 +from .tx_checker import check_tx diff --git a/modules/aave.py b/modules/aave.py new file mode 100644 index 0000000..9c29e93 --- /dev/null +++ b/modules/aave.py @@ -0,0 +1,113 @@ +from typing import Dict + +from loguru import logger +from config import AAVE_CONTRACT, AAVE_WETH_CONTRACT, AAVE_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from utils.sleeping import sleep +from .account import Account + + +class Aave(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + self.contract = self.get_contract(AAVE_CONTRACT, AAVE_ABI) + + async def get_deposit_amount(self): + aave_weth_contract = self.get_contract(AAVE_WETH_CONTRACT) + + amount = await aave_weth_contract.functions.balanceOf(self.address).call() + + return amount + + @retry + @check_gas + async def deposit( + self, + min_amount: float, + max_amount: float, + decimal: int, + sleep_from: int, + sleep_to: int, + make_withdraw: bool, + all_amount: bool, + min_percent: int, + max_percent: int + ) -> None: + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Make deposit on Aave | {amount} ETH") + + tx_data = await self.get_tx_data(amount_wei) + + transaction = await self.contract.functions.depositETH( +<<<<<<< HEAD + self.w3.to_checksum_address("0x11fCfe756c05AD438e312a7fd934381537D3cFfe"), +======= + self.w3.to_checksum_address("0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"), +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + self.address, + 0 + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + if make_withdraw: + await sleep(sleep_from, sleep_to) + + await self.withdraw() + + @retry + @check_gas + async def withdraw(self) -> None: + amount = await self.get_deposit_amount() + + if amount > 0: + logger.info( + f"[{self.account_id}][{self.address}] Make withdraw from Aave | " + + f"{self.w3.from_wei(amount, 'ether')} ETH" + ) + +<<<<<<< HEAD + await self.approve(amount, "0xf301805be1df81102c957f6d4ce29d2b8c056b2a", AAVE_CONTRACT) +======= + await self.approve(amount, "0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7", AAVE_CONTRACT) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + tx_data = await self.get_tx_data() + + transaction = await self.contract.functions.withdrawETH( +<<<<<<< HEAD + self.w3.to_checksum_address("0x11fCfe756c05AD438e312a7fd934381537D3cFfe"), +======= + self.w3.to_checksum_address("0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"), +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + amount, + self.address + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + else: + logger.error(f"[{self.account_id}][{self.address}] Deposit not found") diff --git a/modules/account.py b/modules/account.py new file mode 100644 index 0000000..47de744 --- /dev/null +++ b/modules/account.py @@ -0,0 +1,232 @@ +import asyncio +import time +import random +from typing import Union, Type, Dict, Any + +from hexbytes import HexBytes +from loguru import logger +from web3 import AsyncWeb3 +from eth_account import Account as EthereumAccount +from web3.contract import Contract +from web3.exceptions import TransactionNotFound +from web3.middleware import async_geth_poa_middleware + +<<<<<<< HEAD +from config import RPC, ERC20_ABI, SCROLL_TOKENS +from settings import GAS_MULTIPLIER, MAX_PRIORITY_FEE +======= +from config import RPC, ERC20_ABI, BASE_TOKENS +from settings import GAS_MULTIPLIER, GAS_PRIORITY_FEE +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 +from utils.sleeping import sleep + + +class Account: +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, chain: str, recipient: str) -> None: +======= + def __init__(self, account_id: int, private_key: str, chain: str) -> None: +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + self.account_id = account_id + self.private_key = private_key + self.chain = chain + self.explorer = RPC[chain]["explorer"] + self.token = RPC[chain]["token"] + +<<<<<<< HEAD + self.recipient = recipient + +======= +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + self.w3 = AsyncWeb3( + AsyncWeb3.AsyncHTTPProvider(random.choice(RPC[chain]["rpc"])), + middlewares=[async_geth_poa_middleware] + ) +<<<<<<< HEAD + + self.account = EthereumAccount.from_key(private_key) + self.address = self.account.address + + async def get_tx_data(self, value: int = 0, gas_price: bool = True): +======= + self.account = EthereumAccount.from_key(private_key) + self.address = self.account.address + + async def get_tx_data(self, value: int = 0): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + tx = { + "chainId": await self.w3.eth.chain_id, + "from": self.address, + "value": value, + "nonce": await self.w3.eth.get_transaction_count(self.address), + } +<<<<<<< HEAD + + if gas_price: + tx.update({"gasPrice": await self.w3.eth.gas_price}) + + return tx + + async def transaction_fee(self, tx_data: dict): + gas_price = await self.w3.eth.gas_price + gas = await self.w3.eth.estimate_gas(tx_data) + + return int(gas * gas_price) + +======= + return tx + +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + def get_contract(self, contract_address: str, abi=None) -> Union[Type[Contract], Contract]: + contract_address = self.w3.to_checksum_address(contract_address) + + if abi is None: + abi = ERC20_ABI + + contract = self.w3.eth.contract(address=contract_address, abi=abi) + + return contract + + async def get_balance(self, contract_address: str) -> Dict: + contract_address = self.w3.to_checksum_address(contract_address) + contract = self.get_contract(contract_address) + + symbol = await contract.functions.symbol().call() + decimal = await contract.functions.decimals().call() + balance_wei = await contract.functions.balanceOf(self.address).call() + + balance = balance_wei / 10 ** decimal + + return {"balance_wei": balance_wei, "balance": balance, "symbol": symbol, "decimal": decimal} + + async def get_amount( + self, + from_token: str, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ) -> [int, float, float]: + random_amount = round(random.uniform(min_amount, max_amount), decimal) + random_percent = random.randint(min_percent, max_percent) + percent = 1 if random_percent == 100 else random_percent / 100 + + if from_token == "ETH": + balance = await self.w3.eth.get_balance(self.address) + amount_wei = int(balance * percent) if all_amount else self.w3.to_wei(random_amount, "ether") + amount = self.w3.from_wei(int(balance * percent), "ether") if all_amount else random_amount + else: +<<<<<<< HEAD + balance = await self.get_balance(SCROLL_TOKENS[from_token]) +======= + balance = await self.get_balance(BASE_TOKENS[from_token]) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + amount_wei = int(balance["balance_wei"] * percent) \ + if all_amount else int(random_amount * 10 ** balance["decimal"]) + amount = balance["balance"] * percent if all_amount else random_amount + balance = balance["balance_wei"] + + return amount_wei, amount, balance + + async def check_allowance(self, token_address: str, contract_address: str) -> int: + token_address = self.w3.to_checksum_address(token_address) + contract_address = self.w3.to_checksum_address(contract_address) + + contract = self.w3.eth.contract(address=token_address, abi=ERC20_ABI) + amount_approved = await contract.functions.allowance(self.address, contract_address).call() + + return amount_approved + +<<<<<<< HEAD + async def approve(self, amount: float, token_address: str, contract_address: str) -> None: +======= + async def approve(self, amount: int, token_address: str, contract_address: str) -> None: +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + token_address = self.w3.to_checksum_address(token_address) + contract_address = self.w3.to_checksum_address(contract_address) + + contract = self.w3.eth.contract(address=token_address, abi=ERC20_ABI) + + allowance_amount = await self.check_allowance(token_address, contract_address) + + if amount > allowance_amount or amount == 0: + logger.success(f"[{self.account_id}][{self.address}] Make approve") + + approve_amount = 2 ** 128 if amount > allowance_amount else 0 + + tx_data = await self.get_tx_data() + + transaction = await contract.functions.approve( + contract_address, + approve_amount + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + await sleep(5, 20) + + async def wait_until_tx_finished(self, hash: str, max_wait_time=180) -> None: + start_time = time.time() + while True: + try: + receipts = await self.w3.eth.get_transaction_receipt(hash) + status = receipts.get("status") + if status == 1: + logger.success(f"[{self.account_id}][{self.address}] {self.explorer}{hash} successfully!") + return + elif status is None: + await asyncio.sleep(0.3) + else: + logger.error(f"[{self.account_id}][{self.address}] {self.explorer}{hash} transaction failed!") + return + except TransactionNotFound: + if time.time() - start_time > max_wait_time: + print(f'FAILED TX: {hash}') + return + await asyncio.sleep(1) + + async def sign(self, transaction) -> Any: +<<<<<<< HEAD + if transaction.get("gasPrice", None) is None: + max_priority_fee_per_gas = self.w3.to_wei(MAX_PRIORITY_FEE["ethereum"], "gwei") + max_fee_per_gas = await self.w3.eth.gas_price + + transaction.update( + { + "maxPriorityFeePerGas": max_priority_fee_per_gas, + "maxFeePerGas": max_fee_per_gas, + } + ) + + gas = await self.w3.eth.estimate_gas(transaction) + gas = int(gas * GAS_MULTIPLIER) + + transaction.update({"gas": gas}) +======= + max_fee_per_gas = await self.w3.eth.gas_price + max_priority_fee_per_gas = self.w3.to_wei(GAS_PRIORITY_FEE[self.chain], "gwei") + gas = int(await self.w3.eth.estimate_gas(transaction) * GAS_MULTIPLIER) + + transaction.update( + { + "maxPriorityFeePerGas": max_priority_fee_per_gas, + "maxFeePerGas": max_fee_per_gas, + "gas": gas + } + ) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + signed_txn = self.w3.eth.account.sign_transaction(transaction, self.private_key) + + return signed_txn + + async def send_raw_transaction(self, signed_txn) -> HexBytes: + txn_hash = await self.w3.eth.send_raw_transaction(signed_txn.rawTransaction) + + return txn_hash diff --git a/modules/alienswap.py b/modules/alienswap.py new file mode 100644 index 0000000..4b5c395 --- /dev/null +++ b/modules/alienswap.py @@ -0,0 +1,104 @@ +import time +from typing import Dict + +from loguru import logger +from config import ALIEN_ROUTER_ABI, ALIEN_CONTRACTS, BASE_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class AlienSwap(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_contract = self.get_contract(ALIEN_CONTRACTS["router"], ALIEN_ROUTER_ABI) + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + min_amount_out = await self.swap_contract.functions.getAmountsOut( + amount, + [ + self.w3.to_checksum_address(from_token), + self.w3.to_checksum_address(to_token) + ] + ).call() + + return int(min_amount_out[1] - (min_amount_out[1] / 100 * slippage)) + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(BASE_TOKENS[from_token], BASE_TOKENS[to_token], amount, slippage) + + contract_txn = await self.swap_contract.functions.swapExactETHForTokens( + min_amount_out, + [self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token])], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + token_address = self.w3.to_checksum_address(BASE_TOKENS[from_token]) + + await self.approve(amount, token_address, ALIEN_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(BASE_TOKENS[from_token], BASE_TOKENS[to_token], amount, slippage) + + contract_txn = await self.swap_contract.functions.swapExactTokensForETH( + amount, + min_amount_out, + [self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token])], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on AlienSwap – {from_token} -> {to_token} | {amount} {from_token}" + ) + + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/ambient.py b/modules/ambient.py new file mode 100644 index 0000000..bad7e89 --- /dev/null +++ b/modules/ambient.py @@ -0,0 +1,118 @@ +import time + +from loguru import logger +from web3 import Web3 +from config import AMBIENT_CONTRACTS, AMBIENT_ROUTER_ABI, AMBIENT_IMPACT_ABI, SCROLL_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Ambient(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.swap_contract = self.get_contract(AMBIENT_CONTRACTS["router"], AMBIENT_ROUTER_ABI) + self.impact_contract = self.get_contract(AMBIENT_CONTRACTS["impact"], AMBIENT_IMPACT_ABI) + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + min_amount_out = await self.impact_contract.functions.calcImpact( + amount, + [ + Web3.to_checksum_address(from_token), + Web3.to_checksum_address(to_token) + ] + ).call() + return int(min_amount_out[1] - (min_amount_out[1] / 100 * slippage)) + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount, + slippage + ) + + contract_txn = await self.swap_contract.functions.swapExactETHForTokens( + min_amount_out, + [ + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]), + ], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + token_address = Web3.to_checksum_address(SCROLL_TOKENS[from_token]) + + await self.approve(amount, token_address, ZEBRA_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount, + slippage + ) + + contract_txn = await self.swap_contract.functions.swapExactTokensForETH( + amount, + min_amount_out, + [ + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]), + ], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on Ambient – {from_token} -> {to_token} | {amount} {from_token}" + ) + + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/base.py b/modules/base.py new file mode 100644 index 0000000..aae6959 --- /dev/null +++ b/modules/base.py @@ -0,0 +1,129 @@ +from typing import Dict, Union +from loguru import logger + +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + +from config import ( + BASE_BRIDGE_CONTRACT, + BASE_BRIDGE_ABI, + BASE_TOKENS, + WETH_ABI +) + + +class Base(Account): + def __init__(self, account_id: int, private_key: str, chain: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain=chain) + + @retry + @check_gas + async def deposit( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Bridge to Base | {amount} ETH") + + contract = self.get_contract(BASE_BRIDGE_CONTRACT, BASE_BRIDGE_ABI) + + tx_data = await self.get_tx_data(amount_wei) + + transaction = await contract.functions.depositTransaction( + self.address, + amount_wei, + 100000, + False, + "0x01" + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + @retry + @check_gas + async def wrap_eth( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + weth_contract = self.get_contract(BASE_TOKENS["WETH"], WETH_ABI) + + logger.info(f"[{self.account_id}][{self.address}] Wrap {amount} ETH") + + tx_data = await self.get_tx_data(amount_wei) + + transaction = await weth_contract.functions.deposit().build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + @retry + @check_gas + async def unwrap_eth( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "WETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + weth_contract = self.get_contract(BASE_TOKENS["WETH"], WETH_ABI) + + logger.info(f"[{self.account_id}][{self.address}] Unwrap {amount} ETH") + + tx_data = await self.get_tx_data() + + transaction = await weth_contract.functions.withdraw(amount_wei).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/baseswap.py b/modules/baseswap.py new file mode 100644 index 0000000..219edbd --- /dev/null +++ b/modules/baseswap.py @@ -0,0 +1,103 @@ +import time +from typing import Dict + +from loguru import logger +from config import BASESWAP_ROUTER_ABI, BASESWAP_CONTRACTS, BASE_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class BaseSwap(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_contract = self.get_contract(BASESWAP_CONTRACTS["router"], BASESWAP_ROUTER_ABI) + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + min_amount_out = await self.swap_contract.functions.getAmountsOut( + amount, + [ + self.w3.to_checksum_address(from_token), + self.w3.to_checksum_address(to_token) + ] + ).call() + return int(min_amount_out[1] - (min_amount_out[1] / 100 * slippage)) + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(BASE_TOKENS[from_token], BASE_TOKENS[to_token], amount, slippage) + + contract_txn = await self.swap_contract.functions.swapExactETHForTokens( + min_amount_out, + [self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token])], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + token_address = self.w3.to_checksum_address(BASE_TOKENS[from_token]) + + await self.approve(amount, token_address, BASESWAP_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(BASE_TOKENS[from_token], BASE_TOKENS[to_token], amount, slippage) + + contract_txn = await self.swap_contract.functions.swapExactTokensForETH( + amount, + min_amount_out, + [self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token])], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on BaseSwap – {from_token} -> {to_token} | {amount} {from_token}" + ) + + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/bungee.py b/modules/bungee.py new file mode 100644 index 0000000..f4c3c5d --- /dev/null +++ b/modules/bungee.py @@ -0,0 +1,75 @@ +import random +from typing import Union + +from loguru import logger +from config import BUNGEE_ABI, BUNGEE_CONTRACT +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account +from utils.bungee_data import get_bungee_data + + +async def get_bungee_limits() -> Union[dict, bool]: + bungee_data = await get_bungee_data() + + try: + limits = [chain_data for chain_data in bungee_data if chain_data["name"] == "Base"][0]["limits"] + + return limits + except: + return False + + +class Bungee(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.contract = self.get_contract(BUNGEE_CONTRACT, BUNGEE_ABI) + self.chain_ids = { + "BSC": 56, + "OPTIMISM": 10, + "GNOSIS": 100, + "POLYGON": 137, + "ZKSYNC": 324, + "ARBITRUM": 42161, + "AVALANCHE": 43114, + "AURORA": 1313161554, + "ZK_EVM": 1101, + } + + @retry + @check_gas + async def refuel(self, chain_list: list, random_amount: bool): + limits = await get_bungee_limits() + + to_chain = random.choice(chain_list) + + to_chain_limits = [ + chain for chain in limits if chain["chainId"] == self.chain_ids[to_chain] and chain["isEnabled"] + ] + + if to_chain_limits: + min_amount = int(to_chain_limits[0]["minAmount"]) + max_amount = int(to_chain_limits[0]["maxAmount"]) + + amount = random.randint(min_amount, max_amount) if random_amount else min_amount + + logger.info( + f"[{self.account_id}][{self.address}] Make refuel to " + + f"{to_chain.title()} | {self.w3.from_wei(amount, 'ether')} ETH" + ) + + tx_data = await self.get_tx_data(amount) + + transaction = await self.contract.functions.depositNativeToken( + self.chain_ids[to_chain], + self.address + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + else: + logger.error(f"[{self.account_id}][{self.address}] Bungee refuel destination chain inactive!") diff --git a/modules/deploy.py b/modules/deploy.py new file mode 100644 index 0000000..beb5e4d --- /dev/null +++ b/modules/deploy.py @@ -0,0 +1,32 @@ +from loguru import logger +from utils.gas_checker import check_gas +from utils.helpers import retry +from config import DEPLOYER_ABI, DEPLOYER_BYTECODE +from .account import Account + + +class Deployer(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + @retry + @check_gas + async def deploy_token(self): + logger.info(f"[{self.account_id}][{self.address}] Deploy contract") + + tx_data = await self.get_tx_data() + + contract = self.w3.eth.contract( + abi=DEPLOYER_ABI, + bytecode=DEPLOYER_BYTECODE + ) + + transaction = await contract.constructor().build_transaction( + tx_data + ) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/dmail.py b/modules/dmail.py new file mode 100644 index 0000000..6c0e890 --- /dev/null +++ b/modules/dmail.py @@ -0,0 +1,49 @@ +import random +from hashlib import sha256 + +from loguru import logger +<<<<<<< HEAD +from config import DMAIL_CONTRACT, DMAIL_ABI +======= +from config import DMAIL_ABI, DMAIL_CONTRACT +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Dmail(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + self.contract = self.get_contract(DMAIL_CONTRACT, DMAIL_ABI) + + @retry + @check_gas + async def send_mail(self): + logger.info(f"[{self.account_id}][{self.address}] Send email") + + email = sha256(str(1e11 * random.random()).encode()).hexdigest() + theme = sha256(str(1e11 * random.random()).encode()).hexdigest() + + data = self.contract.encodeABI("send_mail", args=(email, theme)) + + tx_data = await self.get_tx_data() +<<<<<<< HEAD + tx_data.update( + {"data": data, "to": self.w3.to_checksum_address(DMAIL_CONTRACT), "gasPrice": await self.w3.eth.gas_price} + ) +======= + tx_data.update({"data": data, "to": self.w3.to_checksum_address(DMAIL_CONTRACT)}) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/inch.py b/modules/inch.py new file mode 100644 index 0000000..5f49414 --- /dev/null +++ b/modules/inch.py @@ -0,0 +1,91 @@ +from typing import Dict + +import aiohttp +from loguru import logger +from config import INCH_CONTRACT, BASE_TOKENS +from settings import INCH_API_KEY +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Inch(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.headers = {"Authorization": f"Bearer {INCH_API_KEY}", "accept": "application/json"} + + async def build_tx(self, from_token: str, to_token: str, amount: int, slippage: int): + url = f"https://api.1inch.dev/swap/v5.2/{await self.w3.eth.chain_id}/swap" + + params = { + "src": self.w3.to_checksum_address(from_token), + "dst": self.w3.to_checksum_address(to_token), + "amount": amount, + "from": self.address, + "slippage": slippage, + } + + if INCH_CONTRACT["use_ref"]: + params.update({ + "referrer": self.w3.to_checksum_address("0x1c7ff320ae4327784b464eed07714581643b36a7"), + "fee": 1 + }) + + async with aiohttp.ClientSession() as session: + response = await session.get(url, params=params, headers=self.headers) + + transaction_data = await response.json() + + return transaction_data + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on 1inch – {from_token} -> {to_token} | {amount} {from_token}" + ) + + from_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if from_token == "ETH" else BASE_TOKENS[from_token] + to_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if to_token == "ETH" else BASE_TOKENS[to_token] + + if from_token != "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE": + await self.approve(amount_wei, from_token, INCH_CONTRACT["router"]) + + transaction_data = await self.build_tx(from_token, to_token, amount_wei, slippage) + + tx_data = await self.get_tx_data() + tx_data.update( + { + "to": self.w3.to_checksum_address(transaction_data["tx"]["to"]), + "data": transaction_data["tx"]["data"], + "value": int(transaction_data["tx"]["value"]), + } + ) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/l2pass.py b/modules/l2pass.py new file mode 100644 index 0000000..3053e9d --- /dev/null +++ b/modules/l2pass.py @@ -0,0 +1,33 @@ +from loguru import logger +from config import L2PASS_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class L2Pass(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + @staticmethod + async def get_mint_price(contract): + price = await contract.functions.mintPrice().call() + + return price + + @retry + @check_gas + async def mint(self, contract: str): + logger.info(f"[{self.account_id}][{self.address}] Mint L2Pass NFT") + + contract = self.get_contract(contract, L2PASS_ABI) + + mint_price = await self.get_mint_price(contract) + + tx_data = await self.get_tx_data(mint_price) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/l2telegraph.py b/modules/l2telegraph.py new file mode 100644 index 0000000..6a097f4 --- /dev/null +++ b/modules/l2telegraph.py @@ -0,0 +1,108 @@ +from typing import Dict + +from loguru import logger + +from utils.gas_checker import check_gas +from utils.helpers import retry +from utils.sleeping import sleep +from .account import Account +from config import ( + L2TELEGRAPH_MESSAGE_CONTRACT, + L2TELEGRAPH_NFT_CONTRACT, + L2TELEGRAPH_MESSAGE_ABI, + L2TELEGRAPH_NFT_ABI +) + + +class L2Telegraph(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + async def get_estimate_fee(self, contract_address: str, abi: dict): + contract = self.get_contract(contract_address, abi) + + fee = await contract.functions.estimateFees( + 175, + self.address, + "0x", + False, + "0x" + ).call() + + return int(fee[0] * 1.2) + + async def get_nft_id(self, txn_hash: str): + receipts = await self.w3.eth.get_transaction_receipt(txn_hash) + + nft_id = int(receipts["logs"][0]["topics"][-1].hex(), 0) + + return nft_id + + @retry + @check_gas + async def send_message(self): + logger.info(f"[{self.account_id}][{self.address}] Send message") + + l0_fee = await self.get_estimate_fee(L2TELEGRAPH_MESSAGE_CONTRACT, L2TELEGRAPH_MESSAGE_ABI) + + tx_data = await self.get_tx_data(self.w3.to_wei(0.00025, "ether") + l0_fee) + + contract = self.get_contract(L2TELEGRAPH_MESSAGE_CONTRACT, L2TELEGRAPH_MESSAGE_ABI) + + transaction = await contract.functions.sendMessage( + ' ', + 175, + "0x5f26ea1e4d47071a4d9a2c2611c2ae0665d64b6d64e0f6164ac110b67df9a4848707ffbcb86c87a9" + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + async def mint(self): + logger.info(f"[{self.account_id}][{self.address}] Mint NFT") + + tx_data = await self.get_tx_data(self.w3.to_wei(0.0005, "ether")) + + contract = self.get_contract(L2TELEGRAPH_NFT_CONTRACT, L2TELEGRAPH_NFT_ABI) + + transaction = await contract.functions.mint().build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + nft_id = await self.get_nft_id(txn_hash.hex()) + + return nft_id + + @retry + @check_gas + async def bridge(self, sleep_from, sleep_to): + l0_fee = await self.get_estimate_fee(L2TELEGRAPH_NFT_CONTRACT, L2TELEGRAPH_NFT_ABI) + + nft_id = await self.mint() + + await sleep(sleep_from, sleep_to) + + tx_data = await self.get_tx_data(l0_fee) + + logger.info(f"[{self.account_id}][{self.address}] Bridge NFT [{nft_id}]") + + contract = self.get_contract(L2TELEGRAPH_NFT_CONTRACT, L2TELEGRAPH_NFT_ABI) + + transaction = await contract.functions.crossChain( + 175, + "0x5b10ae182c297ec76fe6fe0e3da7c4797cede02d36a358b3ba1fb368e35b71ea40c7f4ab89bfd8e1", + nft_id + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/layerbank.py b/modules/layerbank.py new file mode 100644 index 0000000..d1511ec --- /dev/null +++ b/modules/layerbank.py @@ -0,0 +1,92 @@ +from loguru import logger +from config import LAYERBANK_CONTRACT, LAYERBANK_WETH_CONTRACT, LAYERBANK_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from utils.sleeping import sleep +from .account import Account + + +class LayerBank(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.contract = self.get_contract(LAYERBANK_CONTRACT, LAYERBANK_ABI) + + async def get_deposit_amount(self): + weth_contract = self.get_contract(LAYERBANK_WETH_CONTRACT) + + amount = await weth_contract.functions.balanceOf(self.address).call() + + return amount + + @retry + @check_gas + async def deposit( + self, + min_amount: float, + max_amount: float, + decimal: int, + sleep_from: int, + sleep_to: int, + make_withdraw: bool, + all_amount: bool, + min_percent: int, + max_percent: int + ) -> None: + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Make deposit on LayerBank | {amount} ETH") + + tx_data = await self.get_tx_data(amount_wei) + + transaction = await self.contract.functions.supply( + self.w3.to_checksum_address(LAYERBANK_WETH_CONTRACT), + amount_wei, + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + if make_withdraw: + await sleep(sleep_from, sleep_to) + + await self.withdraw() + + @retry + @check_gas + async def withdraw(self) -> None: + amount = await self.get_deposit_amount() + + if amount > 0: + logger.info( + f"[{self.account_id}][{self.address}] Make withdraw from LayerBank | " + + f"{self.w3.from_wei(amount, 'ether')} ETH" + ) + + await self.approve(amount, LAYERBANK_WETH_CONTRACT, LAYERBANK_CONTRACT) + + tx_data = await self.get_tx_data() + + transaction = await self.contract.functions.redeemUnderlying( + self.w3.to_checksum_address(LAYERBANK_WETH_CONTRACT), + amount, + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + else: + logger.error(f"[{self.account_id}][{self.address}] Deposit not found") diff --git a/modules/layerswap.py b/modules/layerswap.py new file mode 100644 index 0000000..ea4f31a --- /dev/null +++ b/modules/layerswap.py @@ -0,0 +1,194 @@ +from typing import Union, Dict + +import aiohttp +from loguru import logger + +from settings import LAYERSWAP_API_KEY +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class LayerSwap(Account): + def __init__(self, account_id: int, private_key: str, chain: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain=chain, recipient=recipient) + + self.networks = { + "ethereum": "ETHEREUM_MAINNET", + "arbitrum": "ARBITRUM_MAINNET", + "optimism": "OPTIMISM_MAINNET", + "avalanche": "AVAX_MAINNET", + "polygon": "POLYGON_MAINNET", + "base": "BASE_MAINNET", + "zksync": "ZKSYNCERA_MAINNET", + "scroll": "SCROLL_MAINNET", + } + + self.headers = {"X-LS-APIKEY": LAYERSWAP_API_KEY} + + async def check_available_route(self, from_chain: str, to_chain: str) -> Union[Dict, bool]: + url = "https://api.layerswap.io/api/available_routes" + + params = { + "source": self.networks[from_chain], + "destination": self.networks[to_chain], + "sourceAsset": "ETH", + "destinationAsset": "ETH", + } + + async with aiohttp.ClientSession() as session: + response = await session.get(url=url, params=params) + + if response.status == 200: + transaction_data = await response.json() + + if transaction_data["data"]: + return transaction_data["data"] + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Layerswap path not found") + + return False + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Bad layerswap request") + + return False + + async def get_swap_rate(self, from_chain: str, to_chain: str) -> Union[Dict, bool]: + url = "https://api.layerswap.io/api/swap_rate" + + params = { + "source": self.networks[from_chain], + "source_asset": "ETH", + "destination": self.networks[to_chain], + "destination_asset": "ETH", + "refuel": False + } + + async with aiohttp.ClientSession() as session: + response = await session.post(url=url, json=params) + + if response.status == 200: + transaction_data = await response.json() + + if transaction_data["data"]: + return transaction_data["data"] + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Layerswap swap rate error") + + return False + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Bad layerswap request") + + return False + + async def create_swap(self, from_chain: str, to_chain: str, amount: float) -> Union[Dict, bool]: + url = "https://api.layerswap.io/api/swaps" + + params = { + "source": self.networks[from_chain], + "source_asset": "ETH", + "destination": self.networks[to_chain], + "destination_asset": "ETH", + "refuel": False, + "amount": float(amount), + "destination_address": self.address + } + + async with aiohttp.ClientSession() as session: + response = await session.post(url=url, headers=self.headers, json=params) + + if response.status == 200: + transaction_data = await response.json() + + if transaction_data["data"]: + return transaction_data["data"]["swap_id"] + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Layerswap swap rate error") + + return False + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Bad layerswap request") + + return False + + async def prepare_transaction(self, from_chain: str, to_chain: str, amount: float) -> Union[Dict, bool]: + swap_id = await self.create_swap(from_chain, to_chain, amount) + + url = f"https://api.layerswap.io/api/swaps/{swap_id}/prepare_src_transaction" + + params = { + "from_address": self.address + } + + async with aiohttp.ClientSession() as session: + response = await session.get(url=url, headers=self.headers, params=params) + + if response.status == 200: + transaction_data = await response.json() + + if transaction_data["data"]: + return transaction_data["data"] + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Layerswap swap rate error") + + return False + else: + logger.error(f"[{self.account_id}][{self.address}][{self.chain}] Bad layerswap request") + + return False + + @retry + @check_gas + async def bridge( + self, + from_chain: str, + to_chain: str, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + available_route = await self.check_available_route(from_chain, to_chain) + + if available_route is False: + return + + swap_rate = await self.get_swap_rate(from_chain, to_chain) + + if amount < swap_rate["min_amount"] or amount > swap_rate["max_amount"]: + logger.error( + f"[{self.account_id}][{self.address}][{self.chain}] Limit range amount for bridge " + + f"{swap_rate['min_amount']} – {swap_rate['max_amount']} ETH | {amount} ETH" + ) + return + + if swap_rate is False: + return + + prepare_transaction = await self.prepare_transaction(from_chain, to_chain, amount) + + if prepare_transaction is False: + return + + logger.info(f"[{self.account_id}][{self.address}] Bridge {from_chain} –> {to_chain} | {amount} ETH") + + tx_data = await self.get_tx_data(amount_wei) + tx_data.update({"to": self.w3.to_checksum_address(prepare_transaction["to_address"])}) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/maverick.py b/modules/maverick.py new file mode 100644 index 0000000..78daa90 --- /dev/null +++ b/modules/maverick.py @@ -0,0 +1,142 @@ +import time +from typing import Dict + +from loguru import logger +from config import MAVERICK_CONTRACTS, MAVERICK_POSITION_ABI, BASE_TOKENS, MAVERICK_ROUTER_ABI, ZERO_ADDRESS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Maverick(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_contract = self.get_contract(MAVERICK_CONTRACTS["router"], MAVERICK_ROUTER_ABI) + + async def get_min_amount_out(self, amount: int, token_a_in: bool, slippage: float): + contract = self.get_contract(MAVERICK_CONTRACTS["pool_information"], MAVERICK_POSITION_ABI) + + amount = await contract.functions.calculateSwap( + self.w3.to_checksum_address(MAVERICK_CONTRACTS["pool"]), + amount, + token_a_in, + True, + 0 + ).call() + + return int(amount - (amount / 100 * slippage)) + + def get_path(self, from_token: str, to_token: str): + path_data = [ + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(MAVERICK_CONTRACTS["pool"]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + ] + + path = b"".join([bytes.fromhex(address[2:]) for address in path_data]) + + return path + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(amount, False, slippage) + + transaction_data = self.swap_contract.encodeABI( + fn_name="exactInput", + args=[( + self.get_path(from_token, to_token), + self.address, + deadline, + amount, + min_amount_out + )] + ) + + refund_data = self.swap_contract.encodeABI( + fn_name="refundETH", + + ) + + contract_txn = await self.swap_contract.functions.multicall( + [transaction_data, refund_data] + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + await self.approve(amount, BASE_TOKENS[from_token], MAVERICK_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(amount, True, slippage) + + transaction_data = self.swap_contract.encodeABI( + fn_name="exactInput", + args=[( + self.get_path(from_token, to_token), + ZERO_ADDRESS, + deadline, + amount, + min_amount_out + )] + ) + + unwrap_data = self.swap_contract.encodeABI( + fn_name="unwrapWETH9", + args=[ + 0, + self.address + ] + + ) + + contract_txn = await self.swap_contract.functions.multicall( + [transaction_data, unwrap_data] + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on Maverick – {from_token} -> {to_token} | {amount} {from_token}" + ) + + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/mintfun.py b/modules/mintfun.py new file mode 100644 index 0000000..6d12f59 --- /dev/null +++ b/modules/mintfun.py @@ -0,0 +1,38 @@ +import random + +from loguru import logger + +from config import MINTFUN_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class MintFun(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + @retry + @check_gas + async def mint(self, nft_contracts_data: dict): + mint_contract = random.choice(list(nft_contracts_data)) + + amount = nft_contracts_data[mint_contract] + + contract = self.get_contract(mint_contract, MINTFUN_ABI) + + nft_name = await contract.functions.name().call() + + logger.info(f"[{self.account_id}][{self.address}] Mint {amount} NFT [{nft_name}] on Mint.Fun") + + tx_data = await self.get_tx_data() + + mint_data = self.address if amount == 1 else amount + + transaction = await contract.functions.mint(mint_data).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/moonwell.py b/modules/moonwell.py new file mode 100644 index 0000000..518ba64 --- /dev/null +++ b/modules/moonwell.py @@ -0,0 +1,83 @@ +from loguru import logger +from config import MOONWELL_CONTRACT, MOONWELL_WETH_CONTRACT, MOONWELL_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from utils.sleeping import sleep +from .account import Account + + +class MoonWell(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.contract = self.get_contract(MOONWELL_CONTRACT, MOONWELL_ABI) + self.weth_contract = self.get_contract(MOONWELL_WETH_CONTRACT, MOONWELL_ABI) + + async def get_deposit_amount(self): + amount = await self.weth_contract.functions.balanceOf(self.address).call() + + return amount + + @retry + @check_gas + async def deposit( + self, + min_amount: float, + max_amount: float, + decimal: int, + sleep_from: int, + sleep_to: int, + make_withdraw: bool, + all_amount: bool, + min_percent: int, + max_percent: int + ) -> None: + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Make deposit on Moonwell | {amount} ETH") + + tx_data = await self.get_tx_data(amount_wei) + + transaction = await self.contract.functions.mint(self.address).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + if make_withdraw: + await sleep(sleep_from, sleep_to) + + await self.withdraw() + + @retry + @check_gas + async def withdraw(self) -> None: + amount = await self.get_deposit_amount() + + if amount > 0: + logger.info( + f"[{self.account_id}][{self.address}] Make withdraw from Moonwell | " + + f"{self.w3.from_wei(amount, 'ether')} ETH" + ) + + tx_data = await self.get_tx_data() + + transaction = await self.weth_contract.functions.redeem(amount).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + else: + logger.error(f"[{self.account_id}][{self.address}] Deposit not found") diff --git a/modules/multiswap.py b/modules/multiswap.py new file mode 100644 index 0000000..8423cfc --- /dev/null +++ b/modules/multiswap.py @@ -0,0 +1,130 @@ +import random +<<<<<<< HEAD +from typing import Union + +from loguru import logger +from config import SCROLL_TOKENS +======= + +from loguru import logger +from config import BASE_TOKENS +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 +from modules import * +from utils.sleeping import sleep + + +class Multiswap(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.swap_modules = { + "syncswap": SyncSwap, + "skydrome": Skydrome, + "zebra": Zebra, + "xyswap": XYSwap, +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_modules = { + "uniswap": Uniswap, + "pancake": Pancake, + "woofi": WooFi, + "baseswap": BaseSwap, + "alienswap": AlienSwap, + "maverick": Maverick, + "odos": Odos, + "inch": Inch, + "xyswap": XYSwap, + "openocean": OpenOcean, +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + } + + def get_swap_module(self, use_dex: list): + swap_module = random.choice(use_dex) + + return self.swap_modules[swap_module] + + async def swap( + self, + use_dex: list, + sleep_from: int, + sleep_to: int, + min_swap: int, + max_swap: int, +<<<<<<< HEAD + slippage: Union[int, float], +======= + slippage: int, +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + random_swap_token: bool, + min_percent: int, + max_percent: int + ): + quantity_swap = random.randint(min_swap, max_swap) + + if random_swap_token: +<<<<<<< HEAD + path = [random.choice(["ETH", "USDC"]) for _ in range(0, quantity_swap)] + usdc_balance = await self.get_balance(SCROLL_TOKENS["USDC"]) + if path[0] == "USDC" and usdc_balance["balance"] <= 1: + path[0] = "ETH" + else: + path = ["ETH" if _ % 2 == 0 else "USDC" for _ in range(0, quantity_swap)] +======= + path = [random.choice(["ETH", "USDBC"]) for _ in range(0, quantity_swap)] + USDBC_balance = await self.get_balance(BASE_TOKENS["USDBC"]) + if path[0] == "USDBC" and USDBC_balance["balance"] <= 1: + path[0] = "ETH" + else: + path = ["ETH" if _ % 2 == 0 else "USDBC" for _ in range(0, quantity_swap)] +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + logger.info(f"[{self.account_id}][{self.address}] Start MultiSwap | quantity swaps: {quantity_swap}") + + for _, token in enumerate(path): + if token == "ETH": + decimal = 6 +<<<<<<< HEAD + to_token = "USDC" +======= + to_token = "USDBC" +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + balance = await self.w3.eth.get_balance(self.address) + + min_amount = float(self.w3.from_wei(int(balance / 100 * min_percent), "ether")) + max_amount = float(self.w3.from_wei(int(balance / 100 * max_percent), "ether")) + else: + decimal = 18 + to_token = "ETH" + +<<<<<<< HEAD + balance = await self.get_balance(SCROLL_TOKENS["USDC"]) +======= + balance = await self.get_balance(BASE_TOKENS["USDBC"]) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + min_amount = balance["balance"] if balance["balance"] <= 1 else balance["balance"] / 100 * min_percent + max_amount = balance["balance"] if balance["balance"] <= 1 else balance["balance"] / 100 * max_percent + +<<<<<<< HEAD + swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key, self.recipient) +======= + swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + await swap_module.swap( + token, + to_token, + min_amount, + max_amount, + decimal, + slippage, + False, + min_percent, + max_percent + ) + + if _ + 1 != len(path): + await sleep(sleep_from, sleep_to) diff --git a/modules/nftorigins.py b/modules/nftorigins.py new file mode 100644 index 0000000..b1276e0 --- /dev/null +++ b/modules/nftorigins.py @@ -0,0 +1,57 @@ +import aiohttp +from loguru import logger + +from config import NFT_ORIGINS_CONTRACT, NFT_ORIGINS_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class NftOrigins(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll") + + self.contract = self.get_contract(NFT_ORIGINS_CONTRACT, NFT_ORIGINS_ABI) + + async def get_nft_data(self): + url = f"https://nft.scroll.io/p/{self.address}.json" + + async with aiohttp.ClientSession() as session: + response = await session.get(url=url) + + if response.status == 200: + transaction_data = await response.json() + + if "metadata" in transaction_data: + return transaction_data["metadata"], transaction_data["proof"] + + return False, False + + @retry + @check_gas + async def mint(self): + logger.info(f"[{self.account_id}][{self.address}] Mint Scroll Origins NFT") + + metadata, proof = await self.get_nft_data() + + if not metadata or not proof: + return logger.error(f"[{self.account_id}][{self.address}] Scroll Origins NFT Not Found") + + tx_data = await self.get_tx_data() + + transaction = await self.contract.functions.mint( + self.address, + ( + metadata.get("deployer"), + metadata.get("firstDeployedContract"), + metadata.get("bestDeployedContract"), + int(metadata.get("rarityData", 0), 16), + ), + proof + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/nfts2me.py b/modules/nfts2me.py new file mode 100644 index 0000000..7986217 --- /dev/null +++ b/modules/nfts2me.py @@ -0,0 +1,35 @@ +import random +from typing import List + +from loguru import logger +from config import NFTS2ME_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Minter(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + @retry + @check_gas + async def mint_nft(self, contracts: List): + logger.info(f"[{self.account_id}][{self.address}] Mint NFT on NFTS2ME") + + contract = self.get_contract(random.choice(contracts), NFTS2ME_ABI) + + tx_data = await self.get_tx_data() + + transaction = await contract.functions.mint(1).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/nitro.py b/modules/nitro.py new file mode 100644 index 0000000..bb2cf12 --- /dev/null +++ b/modules/nitro.py @@ -0,0 +1,97 @@ +import aiohttp +from loguru import logger +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Nitro(Account): + def __init__(self, account_id: int, private_key: str, chain: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain=chain, recipient=recipient) + + self.chain_ids = { + "ethereum": "1", + "arbitrum": "42161", + "optimism": "10", + "zksync": "324", + "scroll": "534352", + "base": "8453", + "linea": "59144", + } + + async def get_quote(self, amount: int, destination_chain: str): + url = "https://api-beta.pathfinder.routerprotocol.com/api/v2/quote" + + params = { + "fromTokenAddress": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "toTokenAddress": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "amount": amount, + "fromTokenChainId": self.chain_ids[self.chain], + "toTokenChainId": self.chain_ids[destination_chain], + "partnerId": 1 + } + + async with aiohttp.ClientSession() as session: + response = await session.get(url=url, params=params) + + transaction_data = await response.json() + + return transaction_data + + async def build_transaction(self, params: dict): + url = "https://api-beta.pathfinder.routerprotocol.com/api/v2/transaction" + + async with aiohttp.ClientSession() as session: + response = await session.post(url=url, json=params) + + transaction_data = await response.json() + + return transaction_data + + @retry + @check_gas + async def bridge( + self, + destination_chain: str, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Bridge Nitro – {self.chain.title()} -> " + + f"{destination_chain.title()} | {amount} ETH" + ) + + quote = await self.get_quote(amount_wei, destination_chain) + quote.update({"senderAddress": self.address, "receiverAddress": self.address}) + + transaction_data = await self.build_transaction(quote) + + tx_data = await self.get_tx_data() + tx_data.update( + { + "from": self.w3.to_checksum_address(transaction_data["txn"]["from"]), + "to": self.w3.to_checksum_address(transaction_data["txn"]["to"]), + "value": transaction_data["txn"]["value"], + "data": transaction_data["txn"]["data"], + } + ) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/odos.py b/modules/odos.py new file mode 100644 index 0000000..a1b2fea --- /dev/null +++ b/modules/odos.py @@ -0,0 +1,128 @@ +import aiohttp + +from loguru import logger + +from config import ZERO_ADDRESS, BASE_TOKENS, ODOS_CONTRACT +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Odos(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + async def quote(self, from_token: str, to_token: str, amount: int, slippage: float): + url = "https://api.odos.xyz/sor/quote/v2" + + data = { + "chainId": await self.w3.eth.chain_id, + "inputTokens": [ + { + "tokenAddress": self.w3.to_checksum_address(from_token), + "amount": f"{amount}" + } + ], + "outputTokens": [ + { + "tokenAddress": self.w3.to_checksum_address(to_token), + "proportion": 1 + } + ], + "slippageLimitPercent": slippage, + "userAddr": self.address, + "referralCode": 3890411213 if ODOS_CONTRACT["use_ref"] is True else 0, + "compact": True + } + + async with aiohttp.ClientSession() as session: + response = await session.post( + url=url, + headers={"Content-Type": "application/json"}, + json=data + ) + + if response.status == 200: + response_data = await response.json() + + return response_data + else: + logger.error(f"[{self.account_id}][{self.address}] Bad Odos request") + + async def assemble(self, path_id): + url = "https://api.odos.xyz/sor/assemble" + + data = { + "userAddr": self.address, + "pathId": path_id, + "simulate": False, + } + + async with aiohttp.ClientSession() as session: + response = await session.post( + url=url, + headers={"Content-Type": "application/json"}, + json=data + ) + + if response.status == 200: + response_data = await response.json() + + return response_data + else: + logger.error(f"[{self.account_id}][{self.address}] Bad Odos request") + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: float, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on Odos – {from_token} -> {to_token} | {amount} {from_token}" + ) + + from_token = ZERO_ADDRESS if from_token == "ETH" else BASE_TOKENS[from_token] + to_token = ZERO_ADDRESS if to_token == "ETH" else BASE_TOKENS[to_token] + + if from_token != ZERO_ADDRESS: + await self.approve(amount_wei, from_token, self.w3.to_checksum_address(ODOS_CONTRACT["router"])) + + quote_data = await self.quote(from_token, to_token, amount_wei, slippage) + + transaction_data = await self.assemble(quote_data["pathId"]) + + transaction = transaction_data["transaction"] + + tx_data = await self.get_tx_data() + tx_data.update( + { + "to": self.w3.to_checksum_address(transaction["to"]), + "data": transaction["data"], + "value": int(transaction["value"]), + } + ) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/omnisea.py b/modules/omnisea.py new file mode 100644 index 0000000..1587a24 --- /dev/null +++ b/modules/omnisea.py @@ -0,0 +1,47 @@ +import random +import time + +from loguru import logger +from config import OMNISEA_CONTRACT, OMNISEA_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Omnisea(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.contract = self.get_contract(OMNISEA_CONTRACT, OMNISEA_ABI) + + @staticmethod + def generate_collection_data(): + title = "".join(random.sample([chr(i) for i in range(97, 123)], random.randint(5, 15))) + symbol = "".join(random.sample([chr(i) for i in range(65, 91)], random.randint(3, 6))) + return title, symbol + + @retry + @check_gas + async def create(self): + logger.info(f"[{self.account_id}][{self.address}] Create NFT collection on Omnisea") + + title, symbol = self.generate_collection_data() + + tx_data = await self.get_tx_data() + + transaction = await self.contract.functions.create([ + title, + symbol, + "", + "", + 0, + True, + 0, + int(time.time()) + 1000000] + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/openocean.py b/modules/openocean.py new file mode 100644 index 0000000..f1e9e94 --- /dev/null +++ b/modules/openocean.py @@ -0,0 +1,94 @@ +from typing import Dict + +import aiohttp +from loguru import logger +from config import OPENOCEAN_CONTRACT, BASE_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class OpenOcean(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + async def build_transaction(self, from_token: str, to_token: str, amount: int, slippage: float): + url = "https://open-api.openocean.finance/v3/8453/swap_quote" + + params = { + "inTokenAddress": self.w3.to_checksum_address(from_token), + "outTokenAddress": self.w3.to_checksum_address(to_token), + "amount": float(amount), + "gasPrice": float(round(self.w3.from_wei(await self.w3.eth.gas_price, "gwei"), 1)), + "slippage": slippage, + "account": self.address, + } + + if OPENOCEAN_CONTRACT["use_ref"]: + params.update({ + "referrer": self.w3.to_checksum_address("0x1c7ff320ae4327784b464eed07714581643b36a7"), + "referrerFee": 1 + }) + + async with aiohttp.ClientSession() as session: + response = await session.get(url=url, params=params) + + transaction_data = await response.json() + + return transaction_data + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on OpenOcean – {from_token} -> {to_token} | {amount} {from_token}" + ) + + from_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if from_token == "ETH" else BASE_TOKENS[from_token] + to_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if to_token == "ETH" else BASE_TOKENS[to_token] + + transaction_data = await self.build_transaction( + from_token, + to_token, + amount, + slippage, + ) + + if from_token != "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE": + await self.approve(amount_wei, from_token, OPENOCEAN_CONTRACT["router"]) + + tx_data = await self.get_tx_data() + tx_data.update( + { + "to": self.w3.to_checksum_address(transaction_data["data"]["to"]), + "data": transaction_data["data"]["data"], + "value": int(transaction_data["data"]["value"]), + } + ) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/orbiter.py b/modules/orbiter.py new file mode 100644 index 0000000..6dacd99 --- /dev/null +++ b/modules/orbiter.py @@ -0,0 +1,109 @@ +import aiohttp +from loguru import logger + +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account +from config import ORBITER_CONTRACT + + +class Orbiter(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, chain: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain=chain, recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str, chain: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain=chain) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + self.chain_ids = { + "ethereum": "1", + "arbitrum": "42161", + "optimism": "10", + "zksync": "324", + "nova": "42170", + "zkevm": "1101", + "scroll": "534352", + "base": "8453", + "linea": "59144", + "zora": "7777777", + } + + @retry + async def get_bridge_amount(self, from_chain: str, to_chain: str, amount: float): + url = "https://openapi.orbiter.finance/explore/v3/yj6toqvwh1177e1sexfy0u1pxx5j8o47" + + data = { + "id": 1, + "jsonrpc": "2.0", + "method": "orbiter_calculatedAmount", + "params": [f"{self.chain_ids[from_chain]}-{self.chain_ids[to_chain]}:ETH-ETH", float(amount)] + } + + async with aiohttp.ClientSession() as session: + response = await session.post( + url=url, + headers={"Content-Type": "application/json"}, + json=data, + ) + + response_data = await response.json() + + if response_data.get("result").get("error", None) is None: + return int(response_data.get("result").get("_sendValue")) + + else: + error_data = response_data.get("result").get("error") + + logger.error(f"[{self.account_id}][{self.address}] Orbiter error | {error_data}") + + return False + + @retry + @check_gas + async def bridge( + self, + destination_chain: str, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Bridge {self.chain} –> {destination_chain} | {amount} ETH" + ) + + if ORBITER_CONTRACT == "": + logger.error(f"[{self.account_id}][{self.address}] Don't have orbiter contract") + return + + bridge_amount = await self.get_bridge_amount(self.chain, destination_chain, amount) + + if bridge_amount is False: + return + + balance = await self.w3.eth.get_balance(self.address) + + if bridge_amount > balance: + logger.error(f"[{self.account_id}][{self.address}] Insufficient funds!") + else: + tx_data = await self.get_tx_data(bridge_amount) + tx_data.update({"to": self.w3.to_checksum_address(ORBITER_CONTRACT)}) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/pancake.py b/modules/pancake.py new file mode 100644 index 0000000..3e5768c --- /dev/null +++ b/modules/pancake.py @@ -0,0 +1,156 @@ +import time +from typing import Dict + +from loguru import logger + +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + +from config import ( + PANCAKE_ROUTER_ABI, + PANCAKE_CONTRACTS, + PANCAKE_FACTORY_ABI, + BASE_TOKENS, + PANCAKE_QUOTER_ABI, + ZERO_ADDRESS +) + + +class Pancake(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_contract = self.get_contract(PANCAKE_CONTRACTS["router"], PANCAKE_ROUTER_ABI) + + async def get_pool(self, from_token: str, to_token: str): + factory = self.get_contract(PANCAKE_CONTRACTS["factory"], PANCAKE_FACTORY_ABI) + + pool = await factory.functions.getPool( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + 500 + ).call() + + return pool + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + quoter = self.get_contract(PANCAKE_CONTRACTS["quoter"], PANCAKE_QUOTER_ABI) + + quoter_data = await quoter.functions.quoteExactInputSingle(( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + amount, + 500, + 0 + )).call() + + return int(quoter_data[0] - (quoter_data[0] / 100 * slippage)) + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(from_token, to_token, amount, slippage) + + transaction_data = self.swap_contract.encodeABI( + fn_name="exactInputSingle", + args=[( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + 500, + self.address, + amount, + min_amount_out, + 0 + )] + ) + + contract_txn = await self.swap_contract.functions.multicall( + deadline, [transaction_data] + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + await self.approve(amount, BASE_TOKENS[from_token], PANCAKE_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(from_token, to_token, amount, slippage) + + transaction_data = self.swap_contract.encodeABI( + fn_name="exactInputSingle", + args=[( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + 500, + "0x0000000000000000000000000000000000000002", + amount, + min_amount_out, + 0 + )] + ) + + unwrap_data = self.swap_contract.encodeABI( + fn_name="unwrapWETH9", + args=[ + min_amount_out, + self.address + ] + + ) + + contract_txn = await self.swap_contract.functions.multicall( + deadline, + [transaction_data, unwrap_data] + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on Pancake – {from_token} -> {to_token} | {amount} {from_token}" + ) + + pool = await self.get_pool(from_token, to_token) + + if pool != ZERO_ADDRESS: + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + else: + logger.error(f"[{self.account_id}][{self.address}] Swap path {from_token} to {to_token} not found!") diff --git a/modules/rai.py b/modules/rai.py new file mode 100644 index 0000000..b7c17ab --- /dev/null +++ b/modules/rai.py @@ -0,0 +1,54 @@ +import random +from typing import Dict + +from loguru import logger + +from config import RAI_CONTRACT, RAI_ABI, BASE_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Rai(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.contract = self.get_contract(RAI_CONTRACT, RAI_ABI) + + @retry + @check_gas + async def create(self): + logger.info(f"[{self.account_id}][{self.address}] Create Rai portfolio") + + tokens = [i for i in BASE_TOKENS if i != "ETH"] + + components = [ + self.w3.to_checksum_address(BASE_TOKENS[token]) for token in random.sample( + tokens, random.randint(1, len(tokens)) + ) + ] + + amounts = random.sample(range(1000000, 99999999999999999), len(components)) + + name = "".join(random.sample([chr(i) for i in range(97, 123)], random.randint(5, 20))) + symbol = "".join(random.sample([chr(i) for i in range(65, 91)], random.randint(2, 7))) + + tx_data = await self.get_tx_data() + + transaction = await self.contract.functions.create( + components, + amounts, + [ + self.w3.to_checksum_address("0x1e6Dbd0E827cd243d458ed73B9Ae1a6Db89B8668"), + self.w3.to_checksum_address("0x4E69553b0aEf0949Fd38Bbf3EbeD866B431C9E68") + ], + self.address, + name.title() if random.randint(0, 1) else name, + symbol + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/rocketsam.py b/modules/rocketsam.py new file mode 100644 index 0000000..cf7d950 --- /dev/null +++ b/modules/rocketsam.py @@ -0,0 +1,97 @@ +import random +from typing import Union + +from loguru import logger +from config import ROCKETSAM_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from utils.sleeping import sleep +from .account import Account + + +class RocketSam(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + async def get_deposit_amount(self, contract: str): + contract = self.get_contract(self.w3.to_checksum_address(contract), ROCKETSAM_ABI) + amount = await contract.functions.balances(self.address).call() + return amount + + @retry + @check_gas + async def deposit( + self, + contracts: list, + min_amount: float, + max_amount: float, + decimal: int, + sleep_from: int, + sleep_to: int, + make_withdraw: bool, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Deposit to RocketSam") + + contract = self.get_contract(self.w3.to_checksum_address(random.choice(contracts)), ROCKETSAM_ABI) + + fee = await contract.functions.estimateProtocolFee(amount_wei).call() + + tx_data = await self.get_tx_data(amount_wei + fee) + + transaction = await contract.functions.depositWithReferrer( + self.w3.to_checksum_address("0x1C7FF320aE4327784B464eeD07714581643B36A7"), + amount_wei + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + if make_withdraw: + await sleep(sleep_from, sleep_to) + + await self.withdraw([contract.address], sleep_from, sleep_to) + + @retry + @check_gas + async def withdraw(self, contracts: list, sleep_from: int, sleep_to: int): + for _, contract in enumerate(contracts, start=1): + amount = await self.get_deposit_amount(contract) + + if amount > 0: + logger.info( + f"[{self.account_id}][{self.address}] Make withdraw from RocketSam | " + + f"{self.w3.from_wei(amount, 'ether')} ETH" + ) + + contract = self.get_contract(self.w3.to_checksum_address(contract), ROCKETSAM_ABI) + + tx_data = await self.get_tx_data() + + transaction = await contract.functions.withdraw().build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + if _ != len(contracts): + await sleep(sleep_from, sleep_to) + else: + logger.error(f"[{self.account_id}][{self.address}] Deposit not found") diff --git a/modules/routes.py b/modules/routes.py new file mode 100644 index 0000000..752f09b --- /dev/null +++ b/modules/routes.py @@ -0,0 +1,54 @@ +import random + +from loguru import logger +from utils.sleeping import sleep +from .account import Account + + +class Routes(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + def process_module(self, module): + if isinstance(module, list): + return self.process_module(random.choice(module)) + elif isinstance(module, tuple): + return [self.process_module(module[0]) for _ in range(random.randint(module[1], module[2]))] + else: + return module + + def run_modules(self, use_modules): + modules_to_run = [] + for module in use_modules: + result = self.process_module(module) + if isinstance(result, list): + modules_to_run.extend(result) + else: + modules_to_run.append(result) + return modules_to_run + + async def start(self, use_modules: list, sleep_from: int, sleep_to: int, random_module: bool): + logger.info(f"[{self.account_id}][{self.address}] Start using routes") + + run_modules = self.run_modules(use_modules) + + if random_module: + random.shuffle(run_modules) + + for module in run_modules: + if module is None: + logger.info(f"[{self.account_id}][{self.address}] Skip module") + continue + +<<<<<<< HEAD + await module(self.account_id, self.private_key, self.recipient) +======= + await module(self.account_id, self.private_key) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + await sleep(sleep_from, sleep_to) diff --git a/modules/rubyscore.py b/modules/rubyscore.py new file mode 100644 index 0000000..368637f --- /dev/null +++ b/modules/rubyscore.py @@ -0,0 +1,28 @@ +from loguru import logger + +from config import RUBYSCORE_VOTE_CONTRACT, RUBYSCORE_VOTE_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class RubyScore(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.contract = self.get_contract(RUBYSCORE_VOTE_CONTRACT, RUBYSCORE_VOTE_ABI) + + @retry + @check_gas + async def vote(self): + logger.info(f"[{self.account_id}][{self.address}] RubyScore Voting") + + tx_data = await self.get_tx_data() + + transaction = await self.contract.functions.vote().build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/safe.py b/modules/safe.py new file mode 100644 index 0000000..f7d9b17 --- /dev/null +++ b/modules/safe.py @@ -0,0 +1,64 @@ +import time +<<<<<<< HEAD +======= +from typing import Dict +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + +from loguru import logger +from config import SAFE_ABI, SAFE_CONTRACT, ZERO_ADDRESS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class GnosisSafe(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + self.contract = self.get_contract(SAFE_CONTRACT, SAFE_ABI) + + @retry + @check_gas + async def create_safe(self): + logger.info(f"[{self.account_id}][{self.address}] Create gnosis safe") + + setup_data = self.contract.encodeABI( + fn_name="setup", + args=[ + [self.address], + 1, + ZERO_ADDRESS, + "0x", +<<<<<<< HEAD + self.w3.to_checksum_address("0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4"), +======= + self.w3.to_checksum_address("0x017062a1dE2FE6b99BE3d9d37841FeD19F573804"), +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + ZERO_ADDRESS, + 0, + ZERO_ADDRESS + ] + ) + + tx_data = await self.get_tx_data() + + transaction = await self.contract.functions.createProxyWithNonce( +<<<<<<< HEAD + self.w3.to_checksum_address("0x3E5c63644E683549055b9Be8653de26E0B4CD36E"), +======= + self.w3.to_checksum_address("0xfb1bffC9d739B8D520DaF37dF666da4C687191EA"), +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + setup_data, + int(time.time()*1000) + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/scroll.py b/modules/scroll.py new file mode 100644 index 0000000..d8f79d4 --- /dev/null +++ b/modules/scroll.py @@ -0,0 +1,168 @@ +from loguru import logger + +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + +from config import ( + BRIDGE_CONTRACTS, + DEPOSIT_ABI, + WITHDRAW_ABI, + ORACLE_ABI, + SCROLL_TOKENS, + WETH_ABI +) + + +class Scroll(Account): + def __init__(self, account_id: int, private_key: str, chain: str, recipient) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain=chain, recipient=recipient) + + @retry + @check_gas + async def deposit( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Bridge to Scroll | {amount} ETH") + + contract = self.get_contract(BRIDGE_CONTRACTS["deposit"], DEPOSIT_ABI) + contract_oracle = self.get_contract(BRIDGE_CONTRACTS["oracle"], ORACLE_ABI) + + fee = await contract_oracle.functions.estimateCrossDomainMessageFee(168000).call() + + tx_data = await self.get_tx_data(amount_wei + fee, False) + + transaction = await contract.functions.depositETH( + amount_wei, + 168000, + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + @retry + @check_gas + async def withdraw( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Bridge from Scroll | {amount} ETH") + + contract = self.get_contract(BRIDGE_CONTRACTS["withdraw"], WITHDRAW_ABI) + + tx_data = await self.get_tx_data(amount_wei) + + transaction = await contract.functions.withdrawETH( + amount_wei, + 0 + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + @retry + @check_gas + async def wrap_eth( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + weth_contract = self.get_contract(SCROLL_TOKENS["WETH"], WETH_ABI) + + logger.info(f"[{self.account_id}][{self.address}] Wrap {amount} ETH") + + tx_data = await self.get_tx_data(amount_wei) + + transaction = await weth_contract.functions.deposit().build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + @retry + @check_gas + async def unwrap_eth( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "WETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + weth_contract = self.get_contract(SCROLL_TOKENS["WETH"], WETH_ABI) + + logger.info(f"[{self.account_id}][{self.address}] Unwrap {amount} ETH") + + tx_data = await self.get_tx_data() + + transaction = await weth_contract.functions.withdraw(amount_wei).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/skydrome.py b/modules/skydrome.py new file mode 100644 index 0000000..faa8de5 --- /dev/null +++ b/modules/skydrome.py @@ -0,0 +1,121 @@ +import time + +from loguru import logger +from web3 import Web3 +from config import SKYDROME_ROUTER_ABI, SKYDROME_CONTRACTS, SCROLL_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Skydrome(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.swap_contract = self.get_contract(SKYDROME_CONTRACTS["router"], SKYDROME_ROUTER_ABI) + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + min_amount_out, swap_type = await self.swap_contract.functions.getAmountOut( + amount, + Web3.to_checksum_address(from_token), + Web3.to_checksum_address(to_token) + ).call() + return int(min_amount_out - (min_amount_out / 100 * slippage)), swap_type + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out, swap_type = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount, + slippage + ) + + contract_txn = await self.swap_contract.functions.swapExactETHForTokens( + min_amount_out, + [ + [ + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]), + swap_type + ] + ], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + token_address = Web3.to_checksum_address(SCROLL_TOKENS[from_token]) + + await self.approve(amount, token_address, SKYDROME_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out, swap_type = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount, + slippage + ) + + contract_txn = await self.swap_contract.functions.swapExactTokensForETH( + amount, + min_amount_out, + [ + [ + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]), + swap_type + ] + ], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on Skydrome – {from_token} -> {to_token} | {amount} {from_token}" + ) + + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/stargate.py b/modules/stargate.py new file mode 100644 index 0000000..a9e33de --- /dev/null +++ b/modules/stargate.py @@ -0,0 +1,87 @@ +import random +from typing import Dict, List + +from loguru import logger +from config import STARGATE_CONTRACTS, STARGATE_BRIDGE_ABI, STARGATE_ROUTER_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Stargate(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.chain_ids = { + "arbitrum": 110, + "optimism": 111, + "linea": 183, + } + + self.contract = self.get_contract(STARGATE_CONTRACTS["bridge"], STARGATE_BRIDGE_ABI) + + async def get_l0_fee(self, chain_id: int): + contract = self.get_contract(STARGATE_CONTRACTS["router"], STARGATE_ROUTER_ABI) + + fee = await contract.functions.quoteLayerZeroFee( + chain_id, + 1, + self.address, + "0x", + { + 'dstGasForCall': 0, + 'dstNativeAmount': 0, + 'dstNativeAddr': "0x0000000000000000000000000000000000000001" + } + ).call() + + return int(fee[0] * 1.2) + + async def bridge_eth(self, chain: str, amount: int, slippage: float): + logger.info( + f"[{self.account_id}][{self.address}] Stargate bridge to {chain.title()} | " + + f"{self.w3.from_wei(amount, 'ether')} ETH" + ) + + l0_fee = await self.get_l0_fee(self.chain_ids[chain]) + + tx_data = await self.get_tx_data(amount + l0_fee) + + transaction = await self.contract.functions.swapETH( + self.chain_ids[chain], + self.address, + self.address, + amount, + int(amount - (amount / 100 * slippage)) + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + @retry + @check_gas + async def bridge( + self, + chain_list: List, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + await self.bridge_eth(random.choice(chain_list), amount_wei, slippage) diff --git a/modules/swap_tokens.py b/modules/swap_tokens.py new file mode 100644 index 0000000..aa826f8 --- /dev/null +++ b/modules/swap_tokens.py @@ -0,0 +1,95 @@ +import random +<<<<<<< HEAD +from typing import List, Union + +from loguru import logger +from config import SCROLL_TOKENS +======= +from typing import List + +from loguru import logger +from config import BASE_TOKENS +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 +from modules import * +from utils.sleeping import sleep + + +class SwapTokens(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.swap_modules = { + "syncswap": SyncSwap, + "skydrome": Skydrome, + "zebra": Zebra, + "xyswap": XYSwap, +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_modules = { + "uniswap": Uniswap, + "pancake": Pancake, + "woofi": WooFi, + "baseswap": BaseSwap, + "alienswap": AlienSwap, + "maverick": Maverick, + "odos": Odos, + "inch": Inch, + "xyswap": XYSwap, + "openocean": OpenOcean, +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + } + + def get_swap_module(self, use_dex: list): + swap_module = random.choice(use_dex) + return self.swap_modules[swap_module] + + async def swap( + self, + use_dex: List, + tokens: List, + sleep_from: int, + sleep_to: int, +<<<<<<< HEAD + slippage: Union[int, float], +======= + slippage: int, +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + min_percent: int, + max_percent: int, + ): + random.shuffle(tokens) + + logger.info(f"[{self.account_id}][{self.address}] Start swap tokens") + + for _, token in enumerate(tokens, start=1): + if token == "ETH": + continue + +<<<<<<< HEAD + balance = await self.get_balance(SCROLL_TOKENS[token]) + + if balance["balance_wei"] > 0: + swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key, self.recipient) +======= + balance = await self.get_balance(BASE_TOKENS[token]) + + if balance["balance_wei"] > 0: + swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + await swap_module.swap( + token, + "ETH", + balance["balance"], + balance["balance"], + balance["decimal"], + slippage, + True, + min_percent, + max_percent + ) + + if _ != len(tokens): + await sleep(sleep_from, sleep_to) diff --git a/modules/syncswap.py b/modules/syncswap.py new file mode 100644 index 0000000..3325318 --- /dev/null +++ b/modules/syncswap.py @@ -0,0 +1,115 @@ +import time + +from loguru import logger +from web3 import Web3 +from config import ( + SCROLL_TOKENS, + SYNCSWAP_CLASSIC_POOL_ABI, + ZERO_ADDRESS, + SYNCSWAP_CONTRACTS, + SYNCSWAP_ROUTER_ABI, + SYNCSWAP_CLASSIC_POOL_DATA_ABI +) +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account +from eth_abi import abi + + +class SyncSwap(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.swap_contract = self.get_contract(SYNCSWAP_CONTRACTS["router"], SYNCSWAP_ROUTER_ABI) + + async def get_pool(self, from_token: str, to_token: str): + contract = self.get_contract(SYNCSWAP_CONTRACTS["classic_pool"], SYNCSWAP_CLASSIC_POOL_ABI) + + pool_address = await contract.functions.getPool( + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]) + ).call() + + return pool_address + + async def get_min_amount_out(self, pool_address: str, token_address: str, amount: int, slippage: float): + pool_contract = self.get_contract(pool_address, SYNCSWAP_CLASSIC_POOL_DATA_ABI) + + min_amount_out = await pool_contract.functions.getAmountOut( + token_address, + amount, + self.address + ).call() + + return int(min_amount_out - (min_amount_out / 100 * slippage)) + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: float, + all_amount: bool, + min_percent: int, + max_percent: int + ): + token_address = Web3.to_checksum_address(SCROLL_TOKENS[from_token]) + + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token}" + ) + + pool_address = await self.get_pool(from_token, to_token) + + if pool_address != ZERO_ADDRESS: + tx_data = await self.get_tx_data() + + if from_token == "ETH": + tx_data.update({"value": amount_wei}) + else: + await self.approve(amount_wei, token_address, Web3.to_checksum_address(SYNCSWAP_CONTRACTS["router"])) + + min_amount_out = await self.get_min_amount_out(pool_address, token_address, amount_wei, slippage) + + steps = [{ + "pool": pool_address, + "data": abi.encode(["address", "address", "uint8"], [token_address, self.address, 1]), + "callback": ZERO_ADDRESS, + "callbackData": "0x" + }] + + paths = [{ + "steps": steps, + "tokenIn": ZERO_ADDRESS if from_token == "ETH" else token_address, + "amountIn": amount_wei + }] + + deadline = int(time.time()) + 1000000 + + contract_txn = await self.swap_contract.functions.swap( + paths, + min_amount_out, + deadline + ).build_transaction(tx_data) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + else: + logger.error(f"[{self.account_id}][{self.address}] Swap path {from_token} to {to_token} not found!") diff --git a/modules/transfer.py b/modules/transfer.py new file mode 100644 index 0000000..b26fe3b --- /dev/null +++ b/modules/transfer.py @@ -0,0 +1,44 @@ +from eth_utils import to_bytes +from loguru import logger +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Transfer(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + @retry + @check_gas + async def transfer( + self, + min_amount: float, + max_amount: float, + decimal: int, + all_amount: bool, + min_percent: int, + max_percent: int + ) -> None: + amount_wei, amount, balance = await self.get_amount( + "ETH", + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info(f"[{self.account_id}][{self.address}] Make transfer to {self.recipient} | {amount} ETH") + + tx_data = await self.get_tx_data(amount_wei) + tx_data.update({ + "to": self.w3.to_checksum_address(self.recipient) + }) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/tx_checker.py b/modules/tx_checker.py new file mode 100644 index 0000000..8c4e15c --- /dev/null +++ b/modules/tx_checker.py @@ -0,0 +1,62 @@ +import asyncio +import random + +from eth_typing import ChecksumAddress +from loguru import logger +<<<<<<< HEAD +from web3 import AsyncWeb3, AsyncHTTPProvider +from web3.middleware import async_geth_poa_middleware +from eth_account import Account as EthereumAccount +from tabulate import tabulate + +from config import RPC +======= +from web3 import AsyncWeb3 +from eth_account import Account as EthereumAccount +from tabulate import tabulate +from web3.middleware import async_geth_poa_middleware + +from config import ACCOUNTS, RPC +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + +async def get_nonce(address: ChecksumAddress): + web3 = AsyncWeb3( +<<<<<<< HEAD + AsyncHTTPProvider(random.choice(RPC["scroll"]["rpc"])), +======= + AsyncWeb3.AsyncHTTPProvider(random.choice(RPC["base"]["rpc"])), +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + middlewares=[async_geth_poa_middleware], + ) + + nonce = await web3.eth.get_transaction_count(address) + + return nonce + + +<<<<<<< HEAD +async def check_tx(wallets: list[str]): +======= +async def check_tx(): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + tasks = [] + + logger.info("Start transaction checker") + +<<<<<<< HEAD + for _id, pk in enumerate(wallets, start=1): +======= + for _id, pk in enumerate(ACCOUNTS, start=1): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + account = EthereumAccount.from_key(pk) + + tasks.append(asyncio.create_task(get_nonce(account.address), name=account.address)) + + await asyncio.gather(*tasks) + + table = [[k, i.get_name(), i.result()] for k, i in enumerate(tasks, start=1)] + + headers = ["#", "Address", "Nonce"] + + print(tabulate(table, headers, tablefmt="github")) diff --git a/modules/uniswap.py b/modules/uniswap.py new file mode 100644 index 0000000..069a048 --- /dev/null +++ b/modules/uniswap.py @@ -0,0 +1,155 @@ +import time +from typing import Dict + +from loguru import logger + +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + +from config import ( + UNISWAP_ROUTER_ABI, + UNISWAP_CONTRACTS, + UNISWAP_QUOTER_ABI, + UNISWAP_FACTORY_ABI, + BASE_TOKENS, ZERO_ADDRESS, +) + + +class Uniswap(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_contract = self.get_contract(UNISWAP_CONTRACTS["router"], UNISWAP_ROUTER_ABI) + + async def get_pool(self, from_token: str, to_token: str): + factory = self.get_contract(UNISWAP_CONTRACTS["factory"], UNISWAP_FACTORY_ABI) + + pool = await factory.functions.getPool( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + 500 + ).call() + + return pool + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + quoter = self.get_contract(UNISWAP_CONTRACTS["quoter"], UNISWAP_QUOTER_ABI) + + quoter_data = await quoter.functions.quoteExactInputSingle(( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + amount, + 500, + 0 + )).call() + + return int(quoter_data[0] - (quoter_data[0] / 100 * slippage)) + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(from_token, to_token, amount, slippage) + + transaction_data = self.swap_contract.encodeABI( + fn_name="exactInputSingle", + args=[( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + 500, + self.address, + amount, + min_amount_out, + 0 + )] + ) + + contract_txn = await self.swap_contract.functions.multicall( + deadline, [transaction_data] + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + await self.approve(amount, BASE_TOKENS[from_token], UNISWAP_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out(from_token, to_token, amount, slippage) + + transaction_data = self.swap_contract.encodeABI( + fn_name="exactInputSingle", + args=[( + self.w3.to_checksum_address(BASE_TOKENS[from_token]), + self.w3.to_checksum_address(BASE_TOKENS[to_token]), + 500, + "0x0000000000000000000000000000000000000002", + amount, + min_amount_out, + 0 + )] + ) + + unwrap_data = self.swap_contract.encodeABI( + fn_name="unwrapWETH9", + args=[ + min_amount_out, + self.address + ] + + ) + + contract_txn = await self.swap_contract.functions.multicall( + deadline, + [transaction_data, unwrap_data] + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on Uniswap – {from_token} -> {to_token} | {amount} {from_token}" + ) + + pool = await self.get_pool(from_token, to_token) + + if pool != ZERO_ADDRESS: + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + else: + logger.error(f"[{self.account_id}][{self.address}] Swap path {from_token} to {to_token} not found!") diff --git a/modules/woofi.py b/modules/woofi.py new file mode 100644 index 0000000..f69e1e8 --- /dev/null +++ b/modules/woofi.py @@ -0,0 +1,83 @@ +from typing import Dict + +from loguru import logger +from config import WOOFI_CONTRACTS, WOOFI_ROUTER_ABI, BASE_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class WooFi(Account): + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") + + self.swap_contract = self.get_contract(WOOFI_CONTRACTS["router"], WOOFI_ROUTER_ABI) + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + min_amount_out = await self.swap_contract.functions.querySwap( + self.w3.to_checksum_address(from_token), + self.w3.to_checksum_address(to_token), + amount + ).call() + + return int(min_amount_out - (min_amount_out / 100 * slippage)) + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on WooFi – {from_token} -> {to_token} | {amount} {from_token}" + ) + + tx_data = await self.get_tx_data() + + if from_token == "ETH": + from_token_address = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" + to_token_address = self.w3.to_checksum_address(BASE_TOKENS[to_token]) + + tx_data.update({"value": amount_wei}) + else: + from_token_address = self.w3.to_checksum_address(BASE_TOKENS[from_token]) + to_token_address = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" + + await self.approve(amount_wei, from_token_address, WOOFI_CONTRACTS["router"]) + + tx_data.update({"nonce": await self.w3.eth.get_transaction_count(self.address)}) + + min_amount_out = await self.get_min_amount_out(from_token_address, to_token_address, amount_wei, slippage) + + contract_txn = await self.swap_contract.functions.swap( + from_token_address, + to_token_address, + amount_wei, + min_amount_out, + self.address, + self.address + ).build_transaction(tx_data) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/xyswap.py b/modules/xyswap.py new file mode 100644 index 0000000..cf51cf1 --- /dev/null +++ b/modules/xyswap.py @@ -0,0 +1,135 @@ +from typing import Dict + +import aiohttp +from loguru import logger +<<<<<<< HEAD +from config import XYSWAP_CONTRACT, SCROLL_TOKENS +======= +from config import XYSWAP_CONTRACT, BASE_TOKENS +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class XYSwap(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + async def get_quote(self, from_token: str, to_token: str, amount: int, slippage: float): + url = "https://aggregator-api.xy.finance/v1/quote" + + params = { + "srcChainId": await self.w3.eth.chain_id, + "srcQuoteTokenAddress": self.w3.to_checksum_address(from_token), + "srcQuoteTokenAmount": amount, + "dstChainId": await self.w3.eth.chain_id, + "dstQuoteTokenAddress": self.w3.to_checksum_address(to_token), + "slippage": slippage + } + + async with aiohttp.ClientSession() as session: + response = await session.get(url=url, params=params) + + transaction_data = await response.json() + + return transaction_data + + async def build_transaction(self, from_token: str, to_token: str, amount: int, slippage: float, swap_provider: str): + url = "https://aggregator-api.xy.finance/v1/buildTx" + + params = { + "srcChainId": await self.w3.eth.chain_id, + "srcQuoteTokenAddress": self.w3.to_checksum_address(from_token), + "srcQuoteTokenAmount": amount, + "dstChainId": await self.w3.eth.chain_id, + "dstQuoteTokenAddress": self.w3.to_checksum_address(to_token), + "slippage": slippage, + "receiver": self.address, + "srcSwapProvider": swap_provider, + } + + if XYSWAP_CONTRACT["use_ref"]: + params.update({ + "affiliate": self.w3.to_checksum_address("0x1c7ff320ae4327784b464eed07714581643b36a7"), + "commissionRate": 10000 + }) + + async with aiohttp.ClientSession() as session: + response = await session.get(url=url, params=params) + + transaction_data = await response.json() + + return transaction_data + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on XYSwap – {from_token} -> {to_token} | {amount} {from_token}" + ) + +<<<<<<< HEAD + from_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if from_token == "ETH" else SCROLL_TOKENS[from_token] + to_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if to_token == "ETH" else SCROLL_TOKENS[to_token] +======= + from_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if from_token == "ETH" else BASE_TOKENS[from_token] + to_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if to_token == "ETH" else BASE_TOKENS[to_token] +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + quote = await self.get_quote(from_token, to_token, amount_wei, slippage) + + swap_provider = quote["routes"][0]["srcSwapDescription"]["provider"] + + transaction_data = await self.build_transaction( + from_token, + to_token, + amount_wei, + slippage, + swap_provider + ) + + if from_token != "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE": + await self.approve(amount_wei, from_token, XYSWAP_CONTRACT["router"]) + + tx_data = await self.get_tx_data() + tx_data.update( + { + "to": self.w3.to_checksum_address(transaction_data["tx"]["to"]), + "data": transaction_data["tx"]["data"], + "value": transaction_data["tx"]["value"], + "nonce": await self.w3.eth.get_transaction_count(self.address) + } + ) + + signed_txn = await self.sign(tx_data) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/zebra.py b/modules/zebra.py new file mode 100644 index 0000000..be351c3 --- /dev/null +++ b/modules/zebra.py @@ -0,0 +1,117 @@ +import time + +from loguru import logger +from web3 import Web3 +from config import ZEBRA_ROUTER_ABI, ZEBRA_CONTRACTS, SCROLL_TOKENS +from utils.gas_checker import check_gas +from utils.helpers import retry +from .account import Account + + +class Zebra(Account): + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) + + self.swap_contract = self.get_contract(ZEBRA_CONTRACTS["router"], ZEBRA_ROUTER_ABI) + + async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, slippage: float): + min_amount_out = await self.swap_contract.functions.getAmountsOut( + amount, + [ + Web3.to_checksum_address(from_token), + Web3.to_checksum_address(to_token) + ] + ).call() + return int(min_amount_out[1] - (min_amount_out[1] / 100 * slippage)) + + async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): + tx_data = await self.get_tx_data(amount) + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount, + slippage + ) + + contract_txn = await self.swap_contract.functions.swapExactETHForTokens( + min_amount_out, + [ + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]), + ], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippage: int): + token_address = Web3.to_checksum_address(SCROLL_TOKENS[from_token]) + + await self.approve(amount, token_address, ZEBRA_CONTRACTS["router"]) + + tx_data = await self.get_tx_data() + + deadline = int(time.time()) + 1000000 + + min_amount_out = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount, + slippage + ) + + contract_txn = await self.swap_contract.functions.swapExactTokensForETH( + amount, + min_amount_out, + [ + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]), + ], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn + + @retry + @check_gas + async def swap( + self, + from_token: str, + to_token: str, + min_amount: float, + max_amount: float, + decimal: int, + slippage: int, + all_amount: bool, + min_percent: int, + max_percent: int + ): + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + logger.info( + f"[{self.account_id}][{self.address}] Swap on Zebra – {from_token} -> {to_token} | {amount} {from_token}" + ) + + if from_token == "ETH": + contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) + else: + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) + + signed_txn = await self.sign(contract_txn) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/zerius.py b/modules/zerius.py new file mode 100644 index 0000000..f7fb577 --- /dev/null +++ b/modules/zerius.py @@ -0,0 +1,108 @@ +import random +<<<<<<< HEAD +from typing import List +======= +from typing import Dict, List +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + +from loguru import logger + +from config import ZERIUS_CONTRACT, ZERIUS_ABI, ZERO_ADDRESS +from utils.gas_checker import check_gas +from utils.helpers import retry +from utils.sleeping import sleep +from .account import Account + + +class Zerius(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + self.contract = self.get_contract(ZERIUS_CONTRACT, ZERIUS_ABI) + + self.chain_ids = { +<<<<<<< HEAD +======= + "zora": 195, +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + "arbitrum": 110, + "optimism": 111, + "polygon": 109, + "bsc": 102, + "avalanche": 106, + } + + async def get_nft_id(self, txn_hash: str): + receipts = await self.w3.eth.get_transaction_receipt(txn_hash) + + nft_id = int(receipts["logs"][0]["topics"][-1].hex(), 0) + + return nft_id + + async def get_estimate_fee(self, chain: str, nft_id: int): + fee = await self.contract.functions.estimateSendFee( + self.chain_ids[chain], + self.address, + nft_id, + False, + "0x" + ).call() + + return int(fee[0] * 1.2) + + @retry + @check_gas + async def mint(self): + logger.info(f"[{self.account_id}][{self.address}] Mint Zerius NFT") + + mint_fee = await self.contract.functions.mintFee().call() + + tx_data = await self.get_tx_data(mint_fee) + + transaction = await self.contract.functions.mint().build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + return txn_hash.hex() + + @retry + @check_gas + async def bridge(self, chain: List, sleep_from: int, sleep_to: int): + chain_id = random.choice(chain) + + mint_nft = await self.mint() + + nft_id = await self.get_nft_id(mint_nft) + + await sleep(sleep_from, sleep_to) + + l0_fee = await self.get_estimate_fee(chain_id, nft_id) + + base_bridge_fee = await self.contract.functions.bridgeFee().call() + + tx_data = await self.get_tx_data(l0_fee + base_bridge_fee) + + transaction = await self.contract.functions.sendFrom( + self.address, + self.chain_ids[chain_id], + self.address, + nft_id, + ZERO_ADDRESS, + ZERO_ADDRESS, + "0x0001000000000000000000000000000000000000000000000000000000000003d090" + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) diff --git a/modules/zkstars.py b/modules/zkstars.py new file mode 100644 index 0000000..77d5c0c --- /dev/null +++ b/modules/zkstars.py @@ -0,0 +1,51 @@ +import random + +from loguru import logger +from config import ZKSTARS_ABI +from utils.gas_checker import check_gas +from utils.helpers import retry +from utils.sleeping import sleep +from .account import Account + + +class ZkStars(Account): +<<<<<<< HEAD + def __init__(self, account_id: int, private_key: str, recipient: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) +======= + def __init__(self, account_id: int, private_key: str) -> None: + super().__init__(account_id=account_id, private_key=private_key, chain="base") +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + @retry + @check_gas + async def mint(self, contracts: list, min_mint: int, max_mint: int, mint_all: bool, sleep_from: int, sleep_to: int): + quantity_mint = random.randint(min_mint, max_mint) + + contracts = contracts if mint_all is True else random.sample(contracts, quantity_mint) + + logger.info(f"[{self.account_id}][{self.address}] Mint {quantity_mint} StarkStars NFT") + + for _, contract in enumerate(contracts, start=1): + mint_contract = self.get_contract(self.w3.to_checksum_address(contract), ZKSTARS_ABI) + + mint_price = await mint_contract.functions.getPrice().call() + nft_id = await mint_contract.functions.name().call() + + logger.info(f"[{self.account_id}][{self.address}] Mint #{nft_id} NFT") + + tx_data = await self.get_tx_data() + tx_data.update({"value": mint_price}) + + transaction = await mint_contract.functions.safeMint( + self.w3.to_checksum_address("0x1C7FF320aE4327784B464eeD07714581643B36A7") + ).build_transaction(tx_data) + + signed_txn = await self.sign(transaction) + + txn_hash = await self.send_raw_transaction(signed_txn) + + await self.wait_until_tx_finished(txn_hash.hex()) + + if _ != len(contracts): + await sleep(sleep_from, sleep_to) diff --git a/modules_settings.py b/modules_settings.py new file mode 100644 index 0000000..6af4b97 --- /dev/null +++ b/modules_settings.py @@ -0,0 +1,1336 @@ +import asyncio +<<<<<<< HEAD +from modules import * + + +async def deposit_scroll(account_id, key, recipient): +======= + +from modules import * + + +async def bridge_base(account_id, key): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + """ + Deposit from official bridge + ______________________________________________________ + all_amount - bridge from min_percent to max_percent + """ + + min_amount = 0.001 + max_amount = 0.002 + decimal = 4 + + all_amount = True + +<<<<<<< HEAD + min_percent = 1 + max_percent = 1 + + scroll = Scroll(account_id, key, "ethereum", recipient) + await scroll.deposit(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def withdraw_scroll(account_id, key, recipient): + """ + Withdraw from official bridge + ______________________________________________________ + all_amount - withdraw from min_percent to max_percent + """ + + min_amount = 0.0012 + max_amount = 0.0012 + decimal = 4 + + all_amount = True + + min_percent = 10 + max_percent = 10 + + scroll = Scroll(account_id, key, "scroll", recipient) + await scroll.withdraw(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def bridge_orbiter(account_id, key, recipient): + """ + Bridge from orbiter + ______________________________________________________ + from_chain – ethereum, base, polygon_zkevm, arbitrum, optimism, zksync, scroll | Select one + to_chain – ethereum, base, polygon_zkevm, arbitrum, optimism, zksync, scroll | Select one + """ + + from_chain = "scroll" +======= + min_percent = 5 + max_percent = 10 + + base = Base(account_id, key, "ethereum") + await base.deposit(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def bridge_orbiter(account_id, key): + """ + Bridge from orbiter + ______________________________________________________ + from_chain – ethereum, base, polygon_zkevm, arbitrum, optimism, zksync | Select one + to_chain – ethereum, base, polygon_zkevm, arbitrum, optimism, zksync | Select one + """ + + from_chain = "zksync" +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + to_chain = "base" + + min_amount = 0.005 + max_amount = 0.0051 + decimal = 4 + + all_amount = False + + min_percent = 5 + max_percent = 10 + +<<<<<<< HEAD + orbiter = Orbiter(account_id=account_id, private_key=key, chain=from_chain, recipient=recipient) + await orbiter.bridge(to_chain, min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def bridge_layerswap(account_id, key, recipient): + """ + Bridge from Layerswap + ______________________________________________________ + from_chain - Choose any chain: ethereum, arbitrum, optimism, avalanche, polygon, base, scroll + to_chain - Choose any chain: ethereum, arbitrum, optimism, avalanche, polygon, base, scroll + + make_withdraw - True, if need withdraw after deposit + + all_amount - deposit from min_percent to max_percent + """ + + from_chain = "zksync" + to_chain = "scroll" + + min_amount = 0.003 + max_amount = 0.004 + + decimal = 5 + + all_amount = True + + min_percent = 5 + max_percent = 5 + + layerswap = LayerSwap(account_id=account_id, private_key=key, chain=from_chain, recipient=recipient) + await layerswap.bridge( + from_chain, to_chain, min_amount, max_amount, decimal, all_amount, min_percent, max_percent + ) + + +async def bridge_nitro(account_id, key, recipient): + """ + Bridge from nitro + ______________________________________________________ + from_chain – ethereum, arbitrum, optimism, zksync, scroll, base, linea | Select one + to_chain – ethereum, arbitrum, optimism, zksync, scroll, base, linea | Select one + """ + + from_chain = "zksync" + to_chain = "scroll" + + min_amount = 0.005 + max_amount = 0.0051 + decimal = 4 + + all_amount = False + + min_percent = 5 + max_percent = 10 + + nitro = Nitro(account_id=account_id, private_key=key, chain=from_chain, recipient=recipient) + await nitro.bridge(to_chain, min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def wrap_eth(account_id, key, recipient): +======= + orbiter = Orbiter(account_id, key, from_chain) + await orbiter.bridge(to_chain, min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def wrap_eth(account_id, key): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + """ + Wrap ETH + ______________________________________________________ + all_amount - wrap from min_percent to max_percent + """ + + min_amount = 0.001 + max_amount = 0.002 + decimal = 4 + + all_amount = True + + min_percent = 5 + max_percent = 10 + +<<<<<<< HEAD + scroll = Scroll(account_id, key, "scroll", recipient) + await scroll.wrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def unwrap_eth(account_id, key, recipient): +======= + base = Base(account_id, key, "base") + await base.wrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def unwrap_eth(account_id, key): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + """ + Unwrap ETH + ______________________________________________________ + all_amount - unwrap from min_percent to max_percent + """ + + min_amount = 0.001 + max_amount = 0.002 + decimal = 4 + + all_amount = True + + min_percent = 100 + max_percent = 100 + +<<<<<<< HEAD + scroll = Scroll(account_id, key, "scroll", recipient) + await scroll.unwrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +# async def swap_skydrome(account_id, key, recipient, +# from_token="USDC", to_token="ETH", +# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, +# all_amount=True, min_percent=100, max_percent=100): +# """ +# Make swap on Skydrome +# ______________________________________________________ +# from_token – Choose SOURCE token ETH, USDC | Select one +# to_token – Choose DESTINATION token ETH, USDC | Select one + +# Disclaimer - You can swap only ETH to any token or any token to ETH! +# ______________________________________________________ +# all_amount - swap from min_percent to max_percent +# """ + +# from_token = from_token +# to_token = to_token + +# min_amount = min_amount +# max_amount = max_amount +# decimal = decimal +# slippage = slippage + +# all_amount = all_amount + +# min_percent = min_percent +# max_percent = max_percent + +# skydrome = Skydrome(account_id, key, recipient) +# await skydrome.swap( +# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent +# ) + + +# async def swap_zebra(account_id, key, recipient, +# from_token="USDC", to_token="ETH", +# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, +# all_amount=True, min_percent=100, max_percent=100): +# """ +# Make swap on Zebra +# ______________________________________________________ +# from_token – Choose SOURCE token ETH, USDC | Select one +# to_token – Choose DESTINATION token ETH, USDC | Select one + +# Disclaimer - You can swap only ETH to any token or any token to ETH! +# ______________________________________________________ +# all_amount - swap from min_percent to max_percent +# """ + +# from_token = from_token +# to_token = to_token + +# min_amount = min_amount +# max_amount = max_amount +# decimal = decimal +# slippage = slippage + +# all_amount = all_amount + +# min_percent = min_percent +# max_percent = max_percent + +# zebra = Zebra(account_id, key, recipient) +# await zebra.swap( +# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent +# ) + + +async def swap_syncswap(account_id, key, recipient, + from_token="USDC", to_token="ETH", + min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, + all_amount=True, min_percent=100, max_percent=100): + """ + Make swap on SyncSwap + + from_token – Choose SOURCE token ETH, USDC | Select one + to_token – Choose DESTINATION token ETH, USDC | Select one + + Disclaimer – Don't use stable coin in from and to token | from_token USDC to_token USDT DON'T WORK!!! +======= + base = Base(account_id, key, "base") + await base.unwrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def swap_uniswap(account_id, key): + """ + Make swap on Uniswap + ______________________________________________________ + from_token – Choose SOURCE token ETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, USDBC | Select one + + Disclaimer - You can swap only ETH to any token or any token to ETH! +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + +<<<<<<< HEAD + from_token = from_token + to_token = to_token + + min_amount = min_amount + max_amount = max_amount + decimal = decimal + slippage = slippage + + all_amount = all_amount + + min_percent = min_percent + max_percent = max_percent + + syncswap = SyncSwap(account_id, key, recipient) + await syncswap.swap( +======= + from_token = "USDBC" + to_token = "ETH" + + min_amount = 0.001 + max_amount = 0.002 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + uniswap = Uniswap(account_id, key) + await uniswap.swap( +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +<<<<<<< HEAD +# async def swap_xyswap(account_id, key, recipient, +# from_token="USDC", to_token="ETH", +# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, +# all_amount=True, min_percent=100, max_percent=100): +# """ +# Make swap on XYSwap +# ______________________________________________________ +# from_token – Choose SOURCE token ETH, WETH, USDC | Select one +# to_token – Choose DESTINATION token ETH, WETH, USDC | Select one + +# Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount +# ______________________________________________________ +# all_amount - swap from min_percent to max_percent +# """ + +# from_token = from_token +# to_token = to_token + +# min_amount = min_amount +# max_amount = max_amount +# decimal = decimal +# slippage = slippage + +# all_amount = all_amount + +# min_percent = min_percent +# max_percent = max_percent + +# xyswap = XYSwap(account_id, key, recipient) +# await xyswap.swap( +# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent +# ) + + +async def deposit_layerbank(account_id, key, recipient): + """ + Make deposit on LayerBank + ______________________________________________________ + make_withdraw - True, if need withdraw after deposit + + all_amount - deposit from min_percent to max_percent + """ +======= +async def swap_pancake(account_id, key): + """ + Make swap on PancakeSwap + ______________________________________________________ + from_token – Choose SOURCE token ETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, USDBC | Select one + + Disclaimer - You can swap only ETH to any token or any token to ETH! + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "ETH" + to_token = "USDBC" + + min_amount = 0.001 + max_amount = 0.002 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + pancake = Pancake(account_id, key) + await pancake.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def swap_woofi(account_id, key): + """ + Make swap on WooFi + ______________________________________________________ + from_token – Choose SOURCE token ETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, USDBC | Select one + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "ETH" + to_token = "USDBC" + + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + woofi = WooFi(account_id, key) + await woofi.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def swap_baseswap(account_id, key): + """ + Make swap on BaseSwap + ______________________________________________________ + from_token – Choose SOURCE token ETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, USDBC | Select one + + Disclaimer - You can swap only ETH to any token or any token to ETH! + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "USDBC" + to_token = "ETH" + + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + baseswap = BaseSwap(account_id, key) + await baseswap.swap(from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, + max_percent) + + +async def swap_alienswap(account_id, key): + """ + Make swap on AlienSwap + ______________________________________________________ + from_token – Choose SOURCE token ETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, USDBC | Select one + + Disclaimer - You can swap only ETH to any token or any token to ETH! + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "USDC" + to_token = "ETH" + + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 100 + max_percent = 100 + + alienswap = AlienSwap(account_id, key) + await alienswap.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def swap_odos(account_id, key): + """ + Make swap on Odos + ______________________________________________________ + from_token – Choose SOURCE token ETH, WETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one + + Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "USDBC" + to_token = "ETH" + + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + odos = Odos(account_id, key) + await odos.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def swap_inch(account_id, key): + """ + Make swap on 1inch + ______________________________________________________ + from_token – Choose SOURCE token ETH, WETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one + + Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "ETH" + to_token = "USDBC" + + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + inch_dex = Inch(account_id, key) + await inch_dex.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def swap_openocean(account_id, key): + """ + Make swap on OpenOcean + ______________________________________________________ + from_token – Choose SOURCE token ETH, WETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one + + Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "ETH" + to_token = "USDBC" + + min_amount = 0.0001 + max_amount = 0.0001 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + openocean = OpenOcean(account_id, key) + await openocean.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def swap_xyswap(account_id, key): + """ + Make swap on XYSwap + ______________________________________________________ + from_token – Choose SOURCE token ETH, WETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one + + Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "ETH" + to_token = "USDBC" + + min_amount = 0.0001 + max_amount = 0.0001 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + xyswap = XYSwap(account_id, key) + await xyswap.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def swap_maverick(account_id, key): + """ + Make swap on Maverick + ______________________________________________________ + from_token – Choose SOURCE token ETH, USDBC | Select one + to_token – Choose DESTINATION token ETH, USDBC | Select one + ______________________________________________________ + all_amount - swap from min_percent to max_percent + """ + + from_token = "ETH" + to_token = "USDBC" + + min_amount = 0.0001 + max_amount = 0.0001 + decimal = 6 + slippage = 1 + + all_amount = True + + min_percent = 1 + max_percent = 1 + + maverick = Maverick(account_id, key) + await maverick.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + + +async def bungee_refuel(account_id, key): + """ + Make refuel on Bungee + ______________________________________________________ + to_chain – Choose DESTINATION chain: BSC, OPTIMISM, GNOSIS, POLYGON, ZKSYNC, ARBITRUM, AVALANCHE, AURORA, ZK_EVM + + Disclaimer - The chain will be randomly selected + ______________________________________________________ + random_amount – True - amount random from min to max | False - use min amount + """ + + chain_list = ["GNOSIS"] + + random_amount = False + + bungee = Bungee(account_id, key) + await bungee.refuel(chain_list, random_amount) + + +async def stargate_bridge(account_id, key): + """ + Stargate bridge ETH + ______________________________________________________ + to_chain – Choose DESTINATION chain: arbitrum, optimism, linea + + Disclaimer - The chain will be randomly selected + ______________________________________________________ + random_amount – True - amount random from min to max | False - use min amount + """ + + chain_list = ["arbitrum", "optimism"] + +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 5 + +<<<<<<< HEAD + sleep_from = 5 + sleep_to = 24 + + make_withdraw = True + + all_amount = True + + min_percent = 5 + max_percent = 10 + + layerbank = LayerBank(account_id, key, recipient) + await layerbank.deposit( + min_amount, max_amount, decimal, sleep_from, sleep_to, make_withdraw, all_amount, min_percent, max_percent + ) + + +async def deposit_aave(account_id, key, recipient): +======= + slippage = 1 + + all_amount = True + + min_percent = 10 + max_percent = 10 + + stargate = Stargate(account_id, key) + await stargate.bridge(chain_list, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent) + + +async def deposit_aave(account_id, key): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + """ + Make deposit on Aave + ______________________________________________________ + make_withdraw - True, if need withdraw after deposit + + all_amount - deposit from min_percent to max_percent + """ + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 5 + + sleep_from = 5 + sleep_to = 24 + + make_withdraw = True + + all_amount = True + + min_percent = 5 + max_percent = 10 + +<<<<<<< HEAD + aave = Aave(account_id, key, recipient) +======= + aave = Aave(account_id, key) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + await aave.deposit( + min_amount, max_amount, decimal, sleep_from, sleep_to, make_withdraw, all_amount, min_percent, max_percent + ) + + +<<<<<<< HEAD +async def mint_zerius(account_id, key, recipient): + """ + Mint + bridge Zerius NFT + ______________________________________________________ + chains - list chains for random chain bridge: arbitrum, optimism, polygon, bsc, avalanche + Disclaimer - The Mint function should be called "mint", to make sure of this, look at the name in Rabby Wallet or in explorer + """ + + chains = ["arbitrum"] +======= +async def deposit_moonwell(account_id, key): + """ + Make deposit on MoonWell + ______________________________________________________ + make_withdraw - True, if need withdraw after deposit + + all_amount - deposit from min_percent to max_percent + """ + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 5 + + sleep_from = 5 + sleep_to = 24 + + make_withdraw = True + + all_amount = True + + min_percent = 5 + max_percent = 10 + + moonwell = MoonWell(account_id, key) + await moonwell.deposit( + min_amount, max_amount, decimal, sleep_from, sleep_to, make_withdraw, all_amount, min_percent, max_percent + ) + + +async def deposit_rocketsam(account_id, key): + """ + Make deposit on RocketSam + ______________________________________________________ + make_withdraw - True, if need withdraw after deposit + + all_amount - deposit from min_percent to max_percent + """ + contracts = [ + "0x634607B44e21F4b71e7bD5e19d5b8E4dC99Ab9C4", + "0x1077df51A4059477826549101a30a70b9579A08B", + "0x802DbB9efE447f8e4f578EB7add3F7e43E89C529", + "0x0c9Bfb785E6582A15d6523252675abaA7350Bf76", + "0x288df8088905D71Ff052bf052f3A0ff11A6CDa46", + "0x2B4a7822F3de8bd6cb0552f562b40a391890E945", + "0x553a8EFa12d333c864c89CB809D68268C836B70a", + "0x5ae3cB086887A6FB7662eE58Cf1d5113E69bBA62", + "0x1feF777Fb93Aa45a6Cefcf5507c665b64b301FB3", + "0x0557D4C04BB994719b087d2950841BF25cf39899", + ] + + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 5 + + sleep_from = 1 + sleep_to = 1 + + make_withdraw = True + + all_amount = True + + min_percent = 1 + max_percent = 1 + + rocketsam = RocketSam(account_id, key) + await rocketsam.deposit( + contracts, min_amount, max_amount, decimal, sleep_from, sleep_to, + make_withdraw, all_amount, min_percent, max_percent + ) + + +async def withdraw_rocketsam(account_id, key): + """ + Make withdraw from RocketSam + """ + contracts = [ + "0x634607B44e21F4b71e7bD5e19d5b8E4dC99Ab9C4", + "0x1077df51A4059477826549101a30a70b9579A08B", + "0x802DbB9efE447f8e4f578EB7add3F7e43E89C529", + "0x0c9Bfb785E6582A15d6523252675abaA7350Bf76", + "0x288df8088905D71Ff052bf052f3A0ff11A6CDa46", + "0x2B4a7822F3de8bd6cb0552f562b40a391890E945", + "0x553a8EFa12d333c864c89CB809D68268C836B70a", + "0x5ae3cB086887A6FB7662eE58Cf1d5113E69bBA62", + "0x1feF777Fb93Aa45a6Cefcf5507c665b64b301FB3", + "0x0557D4C04BB994719b087d2950841BF25cf39899", + ] + + sleep_from = 10 + sleep_to = 30 + + rocketsam = RocketSam(account_id, key) + await rocketsam.withdraw(contracts, sleep_from, sleep_to) + + +async def bridge_nft(account_id, key): + """ + Make mint NFT and bridge NFT on L2Telegraph + """ + + sleep_from = 5 + sleep_to = 20 + + l2telegraph = L2Telegraph(account_id, key) + await l2telegraph.bridge(sleep_from, sleep_to) + + +async def mint_mintfun(account_id, key): + """ + Mint NFT on Mint.Fun + ______________________________________________________ + Disclaimer - The Mint function should be called "mint", to make sure of this, look at the name in Rabby Wallet or in explorer + """ + + nft_contracts_data = { + "0x69b69cc6e9f99c62a003fd9e143c126504d49dc2": 1, + "0xea0b3e39ccd46d7F2B338D784De8519902f7E17E": 3, + } + + mintfun = MintFun(account_id, key) + await mintfun.mint(nft_contracts_data) + + +async def mint_zerius(account_id, key): + """ + Mint + bridge Zerius NFT + ______________________________________________________ + chains - list chains for random chain bridge: arbitrum, optimism, polygon, bsc, avalanche, zora + Disclaimer - The Mint function should be called "mint", to make sure of this, look at the name in Rabby Wallet or in explorer + """ + + chains = ["zora"] +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + sleep_from = 10 + sleep_to = 20 + +<<<<<<< HEAD + zerius = Zerius(account_id, key, recipient) + await zerius.bridge(chains, sleep_from, sleep_to) + + +async def mint_l2pass(account_id, key, recipient): + """ + Mint L2Pass NFT + """ + + contract = "0x0000049f63ef0d60abe49fdd8bebfa5a68822222" + + l2pass = L2Pass(account_id, key, recipient) + await l2pass.mint(contract) + + +async def mint_nft(account_id, key, recipient): +======= + zerius = Zerius(account_id, key) + await zerius.bridge(chains, sleep_from, sleep_to) + + +async def mint_nft(account_id, key): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + """ + Mint NFT on NFTS2ME + ______________________________________________________ + contracts - list NFT contract addresses + """ + + contracts = [""] + +<<<<<<< HEAD + minter = Minter(account_id, key, recipient) + await minter.mint_nft(contracts) + + +async def mint_zkstars(account_id, key, recipient): +======= + minter = Minter(account_id, key) + await minter.mint_nft(contracts) + + +async def mint_zkstars(account_id, key): +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + """ + Mint ZkStars NFT + """ + + contracts = [ +<<<<<<< HEAD + "0x609c2f307940b8f52190b6d3d3a41c762136884e", + "0x16c0baa8a2aa77fab8d0aece9b6947ee1b74b943", + "0xc5471e35533e887f59df7a31f7c162eb98f367f7", + "0xf861f5927c87bc7c4781817b08151d638de41036", + "0x954e8ac11c369ef69636239803a36146bf85e61b", + "0xa576ac0a158ebdcc0445e3465adf50e93dd2cad8", + "0x17863384c663c5f95e4e52d3601f2ff1919ac1aa", + "0x4c2656a6d1c0ecac86f5024e60d4f04dbb3d1623", + "0x4e86532cedf07c7946e238bd32ba141b4ed10c12", + "0x6b9db0ffcb840c3d9119b4ff00f0795602c96086", + "0x10d4749bee6a1576ae5e11227bc7f5031ad351e4", + "0x373148e566e4c4c14f4ed8334aba3a0da645097a", + "0xdacbac1c25d63b4b2b8bfdbf21c383e3ccff2281", + "0x2394b22b3925342f3216360b7b8f43402e6a150b", + "0xf34f431e3fc0ad0d2beb914637b39f1ecf46c1ee", + "0x6f1e292302dce99e2a4681be4370d349850ac7c2", + "0xa21fac8b389f1f3717957a6bb7d5ae658122fc82", + "0x1b499d45e0cc5e5198b8a440f2d949f70e207a5d", + "0xec9bef17876d67de1f2ec69f9a0e94de647fcc93", + "0x5e6c493da06221fed0259a49beac09ef750c3de1" +======= + "0x4c78c7d2f423cf07c6dc2542ac000c4788f03657", + "0x657130a14e93731dfecc772d210ae8333303986c", + "0x004416bef2544df0f02f23788c6ada0775868560", + "0x39b06911d22f4d3191827ed08ae35b84f68843e4", + "0x8a6a9ef84cd819a54eee3cf7cfd351d21ab6b5fe", + "0x8fb3225d0a85f2a49714acd36cdcd96a7b2b7fbc", + "0x91ad9ed35b1e9ff6975aa94690fa438efb5a7160", + "0x32d8eeb70eab5f5962190a2bb78a10a5a0958649", + "0xab62313752f90c24405287ad8c3bcf4c25c26e57", + "0x6f562b821b5cb93d4de2b0bd558cc8e46b632a08", + "0xb63159a26664a89abce783437fc17786af8bb46d", + "0x7e6b32d7eecddb6be496f232ab9316a5bf9f4e17", + "0xcb03866371fb149f3992f8d623d5aaa4b831e2fd", + "0x78c85441f53a07329e2380e49f1870199f70cee1", + "0x54c49cb80a0679e3217f86d891859b4e477b56c3", + "0xad6f16f5ff3461c83d639901bae1fb2a8a68aa31", + "0x023a7c97679f2c121a31bacf37292dabf7ab97e9", + "0x5dabff127cad8d075b5cea7f795dcbae1ddf471d", + "0xd3c6386362dabab1a30acc2c377d9ac2cc8b7b16", + "0xed0407d6b84b2c86418cac16a347930b222b505c" +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + ] + + mint_min = 1 + mint_max = 1 + + mint_all = False + + sleep_from = 5 + sleep_to = 10 + +<<<<<<< HEAD + zkkstars = ZkStars(account_id, key, recipient) + await zkkstars.mint(contracts, mint_min, mint_max, mint_all, sleep_from, sleep_to) + + +async def make_transfer(_id, key, recipient): + """ + Transfer ETH + """ + + min_amount = 0.0001 + max_amount = 0.0002 + decimal = 5 + + all_amount = True + + min_percent = 10 + max_percent = 10 + + transfer = Transfer(_id, key, recipient) + await transfer.transfer(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + + +async def swap_tokens(account_id, key, recipient): + """ + SwapTokens module: Automatically swap tokens to ETH + ______________________________________________________ + use_dex - Choose any dex: syncswap, skydrome, zebra, xyswap + """ + + use_dex = [ + "syncswap", "skydrome", "zebra" + ] + + use_tokens = ["USDC"] + + sleep_from = 1 + sleep_to = 5 + + slippage = 0.1 +======= + zkkstars = ZkStars(account_id, key) + await zkkstars.mint(contracts, mint_min, mint_max, mint_all, sleep_from, sleep_to) + + +async def swap_tokens(account_id, key): + """ + SwapTokens module: Automatically swap tokens to ETH + ______________________________________________________ + use_dex - Choose any dex: uniswap, pancake, woofi, baseswap, alienswap, maverick, odos, inch, xyswap, openocean + """ + + use_dex = [ + "uniswap", "pancake", "woofi", "baseswap", + "alienswap", "maverick", "odos", "inch", + "xyswap", "openocean" + ] + + use_tokens = ["USDBC"] + + sleep_from = 300 + sleep_to = 600 + + slippage = 1 +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + min_percent = 100 + max_percent = 100 + +<<<<<<< HEAD + swap_tokens = SwapTokens(account_id, key, recipient) + await swap_tokens.swap(use_dex, use_tokens, sleep_from, sleep_to, slippage, min_percent, max_percent) + + +async def swap_multiswap(account_id, key, recipient): + """ + Multi-Swap module: Automatically performs the specified number of swaps in one of the dexes. + ______________________________________________________ + use_dex - Choose any dex: syncswap, skydrome, zebra, xyswap + quantity_swap - Quantity swaps + ______________________________________________________ + random_swap_token - If True the swap path will be [ETH -> USDC -> USDC -> ETH] (random!) + If False the swap path will be [ETH -> USDC -> ETH -> USDC] + """ + + use_dex = ["syncswap", "skydrome", "zebra"] + + min_swap = 3 + max_swap = 4 +======= + swap_tokens = SwapTokens(account_id, key) + await swap_tokens.swap(use_dex, use_tokens, sleep_from, sleep_to, slippage, min_percent, max_percent) + + +async def swap_multiswap(account_id, key): + """ + Multi-Swap module: Automatically performs the specified number of swaps in one of the dexes. + ______________________________________________________ + use_dex - Choose any dex: uniswap, pancake, woofi, baseswap, alienswap, maverick, odos, inch, xyswap, openocean + quantity_swap - Quantity swaps + ______________________________________________________ + random_swap_token - If True the swap path will be [ETH -> USDBC -> USDBC -> ETH] (random!) + If False the swap path will be [ETH -> USDBC -> ETH -> USDBC] + """ + + use_dex = ["uniswap", "pancake", "woofi", "baseswap", "odos"] + + min_swap = 1 + max_swap = 2 +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + sleep_from = 3 + sleep_to = 7 + +<<<<<<< HEAD + slippage = 0.1 +======= + slippage = 1 +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + random_swap_token = True + + min_percent = 5 + max_percent = 10 + +<<<<<<< HEAD + multi = Multiswap(account_id, key, recipient) +======= + multi = Multiswap(account_id, key) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + await multi.swap( + use_dex, sleep_from, sleep_to, min_swap, max_swap, slippage, random_swap_token, min_percent, max_percent + ) + + +<<<<<<< HEAD +async def custom_routes(account_id, key, recipient): + """ + BRIDGE: + – deposit_scroll + – withdraw_scroll + – bridge_orbiter + – bridge_layerswap + – bridge_nitro +======= +async def custom_routes(account_id, key): + """ + BRIDGE: + – bridge_base + – bridge_orbiter + – bungee_refuel + – stargate_bridge +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + WRAP: + – wrap_eth + – unwrap_eth + DEX: +<<<<<<< HEAD + – swap_skydrome + – swap_syncswap + – swap_zebra + LIQUIDITY: + LANDING: + – depost_layerbank + – withdraw_layerbank + – deposit_aave + – withdraw_aave + NFT/DOMAIN: + – mint_zerius + – mint_zkstars + – create_omnisea + – mint_nft + – mint_l2pass + ANOTHER: + – swap_multiswap + – swap_tokens + – send_mail (Dmail) + – create_safe + – rubyscore_vote + – deploy_contract +======= + – swap_uniswap + – swap_pancake + – swap_woofi + – swap_baseswap + – swap_alienswap + – swap_maverick + – swap_odos + – swap_inch + – swap_openocean + – swap_xyswap + LANDING: + – deposit_aave + – deposit_moonwell + – withdraw_aave + – withdraw_moonwell + – deposit_rocketsam + – withdraw_rocketsam + NFT/DOMAIN: + – mint_zerius + – mint_zkstars + – mint_mintfun + – mint_nft + ANOTHER: + – send_message + – send_mail (Dmail) + – bridge_nft + – create_portfolio + – swap_tokens + – swap_multiswap + – create_safe + – mint_nft +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + ______________________________________________________ + Disclaimer - You can add modules to [] to select random ones, + example [module_1, module_2, [module_3, module_4], module 5] + The script will start with module 1, 2, 5 and select a random one from module 3 and 4 + + You can also specify None in [], and if None is selected by random, this module will be skipped + + You can also specify () to perform the desired action a certain number of times + example (send_mail, 1, 10) run this module 1 to 10 times + """ + + use_modules = [ +<<<<<<< HEAD + create_omnisea, + [create_omnisea, mint_zerius, None], + (create_omnisea, 1, 3), + ] + + sleep_from = 300 + sleep_to = 700 + + random_module = True + + routes = Routes(account_id, key, recipient) +======= + [bridge_nft, deposit_aave, None], + (bridge_nft, 1, 3), + ] + + sleep_from = 10 + sleep_to = 20 + + random_module = True + + routes = Routes(account_id, key) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + await routes.start(use_modules, sleep_from, sleep_to, random_module) + + +######################################### +########### NO NEED TO CHANGE ########### +######################################### +<<<<<<< HEAD + +async def withdraw_layerbank(account_id, key, recipient): + layerbank = LayerBank(account_id, key, recipient) + await layerbank.withdraw() + + +async def withdraw_aave(account_id, key, recipient): + aave = Aave(account_id, key, recipient) + await aave.withdraw() + + +async def send_mail(account_id, key, recipient): + dmail = Dmail(account_id, key, recipient) + await dmail.send_mail() + + +async def create_omnisea(account_id, key, recipient): + omnisea = Omnisea(account_id, key, recipient) + await omnisea.create() + + +async def create_safe(account_id, key, recipient): + gnosis_safe = GnosisSafe(account_id, key, recipient) + await gnosis_safe.create_safe() + + +async def deploy_contract(account_id, key, recipient): + deployer = Deployer(account_id, key, recipient) + await deployer.deploy_token() + + +async def rubyscore_vote(account_id, key, recipient): + rubyscore = RubyScore(account_id, key, recipient) + await rubyscore.vote() + + +def get_tx_count(wallets): + asyncio.run(check_tx(wallets)) +======= +async def send_mail(account_id, key): + dmail = Dmail(account_id, key) + await dmail.send_mail() + +async def withdraw_aave(account_id, key): + aave = Aave(account_id, key) + await aave.withdraw() + + +async def withdraw_moonwell(account_id, key): + moonwell = MoonWell(account_id, key) + await moonwell.withdraw() + + +async def send_message(account_id, key): + l2telegraph = L2Telegraph(account_id, key) + await l2telegraph.send_message() + + +async def create_portfolio(account_id, key): + rai = Rai(account_id, key) + await rai.create() + + +async def create_safe(account_id, key): + gnosis_safe = GnosisSafe(account_id, key) + await gnosis_safe.create_safe() + + +def get_tx_count(): + asyncio.run(check_tx()) +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..55ac2fc51a9bede4a1c8ade44fe21ece78d2ed77 GIT binary patch literal 194 zcmYL@Q3}E^5C!L3=vAb)Qt`vXSSlh^#WW&bUY)FHSvG;p+u6KdH|`vm$eg%xVNc@8 z&RVgwYtNdB1*80EI@yI6vWZNg4=p`ykj~fbe=bSpEmI^KX&W29?(E)P@93S)|NOHh O>lio(Sv%cX<$oVT1|0PO literal 0 HcmV?d00001 diff --git a/run_swaps.py b/run_swaps.py new file mode 100644 index 0000000..0489bdd --- /dev/null +++ b/run_swaps.py @@ -0,0 +1,187 @@ +import main +import argparse +import types +import sys + +import modules_settings +import random +from loguru import logger + +class SwapRunner(): + def __init__(self, websites=[], wallets=[], website_settings=[], + wait_between_wallets_max=30, wait_between_wallets_min=20, + wait_between_websites_max=20, wait_between_websites_min=5, + wait_between_cycles_max=((12*60*60)+90), wait_between_cycles_min=((12*60*60)+5)): + self.websites = websites + self.wallets = wallets + self.website_settings = website_settings + self.wait_between_wallets_max = wait_between_wallets_max + self.wait_between_wallets_min = wait_between_wallets_min + self.wait_between_websites_max = wait_between_websites_max + self.wait_between_websites_min = wait_between_websites_min + self.wait_between_cycles_max = wait_between_cycles_max + self.wait_between_cycles_min = wait_between_cycles_min + # skydrome settings + + # syncswap settings + + # xyswap settings + + def list_websites(self): + # Get all attributes of the module + module_attributes = dir(modules_settings) + + # Filter out only the functions + functions = [attr for attr in module_attributes if callable(getattr(modules_settings, attr)) and not attr.startswith("__") and attr[0].islower()] + + # Print the names of the functions + print("Available websites:") + # print("Functions in the module:") + for func in functions: + print(func) + + def run(self): + if "tx_checker" in self.websites: + modules_settings.get_tx_count(wallets) + else: + logger.info(f"Wait between wallets: {self.wait_between_wallets_min} - {self.wait_between_wallets_max} seconds") + logger.info(f"Wait between websites: {self.wait_between_websites_min} - {self.wait_between_websites_max} seconds") + logger.info(f"Wait between cycles: {self.wait_between_cycles_min} - {self.wait_between_cycles_max} seconds") + + main.main( + self.websites, + self.wallets, + self.website_settings, + wait_between_wallets_max=self.wait_between_wallets_max, + wait_between_wallets_min=self.wait_between_wallets_min, + wait_between_websites_max=self.wait_between_websites_max, + wait_between_websites_min=self.wait_between_websites_min, + wait_between_cycles_max=self.wait_between_cycles_max, + wait_between_cycles_min=self.wait_between_cycles_min + ) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument("--websites", default='swap_syncswap', help="The transaction types at the website you want to perform") + parser.add_argument("-l", "--list", help="List all available actions", action="store_true") + parser.add_argument("-R", "--random", help="Use wallets in a random order", action="store_true") + + wallet_group = parser.add_argument_group("Wallets") + wallet_xclsv_group = wallet_group.add_mutually_exclusive_group() + wallet_xclsv_group.add_argument("--wallet", help="The wallet you want to use") + wallet_xclsv_group.add_argument("--wallets", nargs='+', help="The wallets you want to use") + + wait_between_wallets_group = parser.add_argument_group("Wait Between Wallets") + wait_between_wallets_group.add_argument("--wait-between-wallets-max-seconds", type=int, default=(30*60), help="The maximum time in seconds to wait between wallets default: 1800 seconds (30 minutes)") + wait_between_wallets_group.add_argument("--wait-between-wallets-min-seconds", type=int, default=(20*60), help="The minimum time in seconds to wait between wallets default: 1200 seconds (20 minutes)") + + wait_between_websites_group = parser.add_argument_group("Wait Between Websites") + wait_between_websites_group.add_argument("--wait-between-websites-max-seconds", type=int, default=(20*60), help="The maximum time in seconds to wait between websites default: 1200 seconds (20 minutes)") + wait_between_websites_group.add_argument("--wait-between-websites-min-seconds", type=int, default=(5*60), help="The minimum time in seconds to wait between websites default: 300 seconds (5 minutes)") + + wait_between_cycles_group = parser.add_argument_group("Wait Between Cycles") + wait_between_cycles_group.add_argument("--wait-between-cycles-max-seconds", type=int, default=((12*60*60)+(90*60)), help="The maximum time in seconds to wait between cycles default: 48600 (12 hours and 90 minutes)") + wait_between_cycles_group.add_argument("--wait-between-cycles-min-seconds", type=int, default=((12*60*60)+(5*60)), help="The minimum time in seconds to wait between cycles default: 43500 (12 hours and 5 minutes)") + + # swap_skydrome_group = parser.add_argument_group("Swap Skydrome Settings") + # swap_skydrome_group.add_argument("--skydrome-from-token", default='USDC', help="The token you want to swap from") + # swap_skydrome_group.add_argument("--skydrome-to-token", default='ETH', help="The token you want to swap to") + # swap_skydrome_group.add_argument("--skydrome-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") + # swap_skydrome_group.add_argument("--skydrome-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") + # swap_skydrome_group.add_argument("--skydrome-decimal", type=int, default=6, help="The decimal of the token you want to swap") + # swap_skydrome_group.add_argument("--skydrome-slippage", type=int, default=1, help="The slippage of the token you want to swap") + # swap_skydrome_group.add_argument("--skydrome-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") + # swap_skydrome_group.add_argument("--skydrome-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") + # swap_skydrome_group.add_argument("--skydrome-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") + + # swap_zebra_group = parser.add_argument_group("Swap Zebra Settings") + # swap_zebra_group.add_argument("--zebra-from-token", default='USDC', help="The token you want to swap from") + # swap_zebra_group.add_argument("--zebra-to-token", default='ETH', help="The token you want to swap to") + # swap_zebra_group.add_argument("--zebra-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") + # swap_zebra_group.add_argument("--zebra-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") + # swap_zebra_group.add_argument("--zebra-decimal", type=int, default=6, help="The decimal of the token you want to swap") + # swap_zebra_group.add_argument("--zebra-slippage", type=int, default=1, help="The slippage of the token you want to swap") + # swap_zebra_group.add_argument("--zebra-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") + # swap_zebra_group.add_argument("--zebra-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") + # swap_zebra_group.add_argument("--zebra-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") + + swap_syncswap_group = parser.add_argument_group("Swap SyncSwap Settings") + swap_syncswap_group.add_argument("--syncswap-from-token", default='USDC', help="The token you want to swap from") + swap_syncswap_group.add_argument("--syncswap-to-token", default='ETH', help="The token you want to swap to") + swap_syncswap_group.add_argument("--syncswap-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") + swap_syncswap_group.add_argument("--syncswap-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") + swap_syncswap_group.add_argument("--syncswap-decimal", type=int, default=6, help="The decimal of the token you want to swap") + swap_syncswap_group.add_argument("--syncswap-slippage", type=int, default=1, help="The slippage of the token you want to swap") + swap_syncswap_group.add_argument("--syncswap-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") + swap_syncswap_group.add_argument("--syncswap-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") + swap_syncswap_group.add_argument("--syncswap-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") + + # swap_xyswap_group = parser.add_argument_group("Swap XYSwap Settings") + # swap_xyswap_group.add_argument("--xyswap-from-token", default='USDC', help="The token you want to swap from") + # swap_xyswap_group.add_argument("--xyswap-to-token", default='ETH', help="The token you want to swap to") + # swap_xyswap_group.add_argument("--xyswap-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") + # swap_xyswap_group.add_argument("--xyswap-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") + # swap_xyswap_group.add_argument("--xyswap-decimal", type=int, default=6, help="The decimal of the token you want to swap") + # swap_xyswap_group.add_argument("--xyswap-slippage", type=int, default=1, help="The slippage of the token you want to swap") + # swap_xyswap_group.add_argument("--xyswap-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") + # swap_xyswap_group.add_argument("--xyswap-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") + # swap_xyswap_group.add_argument("--xyswap-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") + + + args = parser.parse_args() + + if args.list: + swap_runner = SwapRunner() + swap_runner.list_websites() + sys.exit() + else: + + assert args.websites, "You must provide a website transaction type to perform" + assert all([website in dir(modules_settings) for website in args.websites.split(" ")]), f"Action {args.websites} is not supported" + + websites = [modules_settings.__dict__[action] for action in args.websites.split(" ")] + assert type(websites[0]) == types.FunctionType, f"Action {args.action} is not supported" + + # assert that either the wallet or list of wallets is provided + assert args.wallet or args.wallets, "You must provide a wallet to use" + + wallets = [] + if args.wallets: + wallets = args.wallets + elif args.wallet: + wallets = [args.wallet] + + if args.random: + random.shuffle(wallets) + + website_settings = [ + { + "from_token": args.syncswap_from_token, + "to_token": args.syncswap_to_token, + "min_amount": args.syncswap_min_amount, + "max_amount": args.syncswap_max_amount, + "slippage": args.syncswap_slippage, + "all_amount": args.syncswap_all_amount, + "min_percent": args.syncswap_min_percent, + "max_percent": args.syncswap_max_percent, + }, + ] + + + logger.add("logging.log") + + swap_runner = SwapRunner( + websites=websites, + wallets=wallets, + website_settings=website_settings, + wait_between_wallets_max=args.wait_between_wallets_max_seconds, + wait_between_wallets_min=args.wait_between_wallets_min_seconds, + wait_between_websites_max=args.wait_between_websites_max_seconds, + wait_between_websites_min=args.wait_between_websites_min_seconds, + wait_between_cycles_max=args.wait_between_cycles_max_seconds, + wait_between_cycles_min=args.wait_between_cycles_min_seconds + ) + + swap_runner.run() + \ No newline at end of file diff --git a/settings.py b/settings.py new file mode 100644 index 0000000..3e27aa9 --- /dev/null +++ b/settings.py @@ -0,0 +1,45 @@ +<<<<<<< HEAD +======= +# RANDOM WALLETS MODE +RANDOM_WALLET = True # True/False + +# removing a wallet from the list after the job is done +REMOVE_WALLET = False + +SLEEP_FROM = 500 # Second +SLEEP_TO = 1000 # Second + +QUANTITY_THREADS = 1 + +THREAD_SLEEP_FROM = 5 +THREAD_SLEEP_TO = 5 +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + +# GWEI CONTROL MODE +CHECK_GWEI = False # True/False +MAX_GWEI = 20 + +<<<<<<< HEAD +MAX_PRIORITY_FEE = { + "ethereum": 0.01, +======= +GAS_PRIORITY_FEE = { + "ethereum": 0.05, +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + "polygon": 40, + "arbitrum": 0.1, + "base": 0.1, + "zksync": 0.25, +} + +GAS_MULTIPLIER = 1.3 + +# RETRY MODE +RETRY_COUNT = 3 + +<<<<<<< HEAD +LAYERSWAP_API_KEY = "" +======= +# INCH API KEY +INCH_API_KEY = "" +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/bungee_data.py b/utils/bungee_data.py new file mode 100644 index 0000000..162b2a4 --- /dev/null +++ b/utils/bungee_data.py @@ -0,0 +1,12 @@ +import aiohttp + + +async def get_bungee_data(): + async with aiohttp.ClientSession() as session: + url = "https://refuel.socket.tech/chains" + response = await session.get(url) + response_data = await response.json() + if response.status == 200: + data = response_data["result"] + return data + return False diff --git a/utils/gas_checker.py b/utils/gas_checker.py new file mode 100644 index 0000000..bd273e5 --- /dev/null +++ b/utils/gas_checker.py @@ -0,0 +1,63 @@ +import asyncio +<<<<<<< HEAD +import time +import random + +from web3 import Web3 +from web3.eth import AsyncEth +======= +import random + +from web3 import AsyncWeb3 +from web3.middleware import async_geth_poa_middleware +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + +from config import RPC +from settings import CHECK_GWEI, MAX_GWEI +from loguru import logger + + +async def get_gas(): + try: +<<<<<<< HEAD + w3 = Web3( + Web3.AsyncHTTPProvider(random.choice(RPC["ethereum"]["rpc"])), + modules={"eth": (AsyncEth,)}, + ) + gas_price = await w3.eth.gas_price + gwei = w3.from_wei(gas_price, 'gwei') +======= + w3 = AsyncWeb3( + AsyncWeb3.AsyncHTTPProvider(random.choice(RPC["ethereum"]["rpc"])), + middlewares=[async_geth_poa_middleware], + ) + + gas_price = await w3.eth.gas_price + gwei = w3.from_wei(gas_price, 'gwei') + +>>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + return gwei + except Exception as error: + logger.error(error) + + +async def wait_gas(): + logger.info("Get GWEI") + while True: + gas = await get_gas() + + if gas > MAX_GWEI: + logger.info(f'Current GWEI: {gas} > {MAX_GWEI}') + await asyncio.sleep(60) + else: + logger.success(f"GWEI is normal | current: {gas} < {MAX_GWEI}") + break + + +def check_gas(func): + async def _wrapper(*args, **kwargs): + if CHECK_GWEI: + await wait_gas() + return await func(*args, **kwargs) + + return _wrapper diff --git a/utils/helpers.py b/utils/helpers.py new file mode 100644 index 0000000..4d2f53d --- /dev/null +++ b/utils/helpers.py @@ -0,0 +1,28 @@ +from loguru import logger +from settings import RETRY_COUNT +from utils.sleeping import sleep + + +def retry(func): + async def wrapper(*args, **kwargs): + retries = 0 + while retries <= RETRY_COUNT: + try: + result = await func(*args, **kwargs) + return result + except Exception as e: + logger.error(f"Error | {e}") + await sleep(10, 20) + retries += 1 + + return wrapper + + +def remove_wallet(private_key: str): + with open("accounts.txt", "r") as file: + lines = file.readlines() + + with open("accounts.txt", "w") as file: + for line in lines: + if private_key not in line: + file.write(line) diff --git a/utils/sleeping.py b/utils/sleeping.py new file mode 100644 index 0000000..838dfea --- /dev/null +++ b/utils/sleeping.py @@ -0,0 +1,12 @@ +import asyncio +import random + +from loguru import logger + + +async def sleep(sleep_from: int, sleep_to: int): + delay = random.randint(sleep_from, sleep_to) + + logger.info(f"💤 Sleep {delay} s.") + for _ in range(delay): + await asyncio.sleep(1) From 60a4ec488b7d84bd5a3a1824098bc1869245428c Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 7 Apr 2024 21:14:52 +0100 Subject: [PATCH 2/9] new updates --- README.md | 121 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 88 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index d0fb025..020ca72 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,114 @@ -

Base Soft

+
+ +

Run Scroll Swaps Script

+

This software automates swap farming on the Scroll network, providing access to a CLI script that exposes a highly-customizable automated swaping system with randomization.

+
-📍 Данный скрипт облегчает работу с фермой для Base +--- -🔔 Subscribe to me: https://t.me/sybilwave +Authors: John Reyes; OxBlackfish -🤑 Donate me: 0x00000b0ddce0bfda4531542ad1f2f5fad7b9cde9 +Heavily adapted from Scroll Soft by https://t.me/sybilwave --- -

🚀 Запуск

+

🚀 Installation

``` -git clone https://github.com/czbag/base.git +# clone with https +git clone https://github.com/napindic/base + +# or clone with ssh +git clone git@github.com:napindc/base.git cd base pip install -r requirements.txt -python main.py +~/scroll$ python run_swaps.py --wallets WALLET_KEY1 WALLET_KEY2 WALLET_KEYN ``` --- -

🚨 Возможности

- -1. Депозит и вывод ETH через официальный мост - -2. Бридж через Orbiter - -3. Врап/анврап ETH - -4. Свапы через Uniswap, PancakeSwap, Woofi, Baseswap, AlienSwap, Maverick, Odos, 1inch, Xy.Finance, OpenOcean (для агрегаторов включена рефка, 1% от суммы транзы идет мне, приходят не с вашего кошелька, а с контракта агрегатора, можно вырубить в конфиге) - -5. Bungee Refuel +

🚨 Features

-6. Aave (депозит/вывод) +* emables running automated trades on multiple websites as a single python command +* accepts a single or multiple wallet private keys to perform swaps +* uses a dynamically randomizing schedule to execute trades and recycle wallets +* easily configurable - command line arguments expose the abilty to change the randomization schedules, amount to swap, and token to swap +* automatically cycles between swapping from ETH to USDC and then back from USDC to ETH -7. Минт free NFT на Mint.Fun (работает с функцией контракта "mint", другие не прокатят, смотрите в Rabby или в эксплорере) - -8. Mint + Brdige NFT через L2Telegraph (только в arb nova) +--- -9. Отправка месседжей через L2Telegraph (только в arb nova) -10. Слив токенов в ETH +--- +

⚙️ Settings

-11. Возможность мультисвапов - совершает указанное количество обменов в указанных дексах +1) All setting are set at the command line, they can be shown again with the command: +``` +$ python run_swaps.py -h +``` -12. Кастомные роуты - действия которые будут выполняться последовательно, либо в рандомном порядке +Note: the script has reasonable defaults -13. Чекер количества транз +2) The rpc.json file at the path domain/data/rpc.json we can change the rpc to a personal or private rpc --- -

⚙️ Настройка

- -1) Все основные настройки производятся в файле settings.py, внутри присутствует информация, что и где писать +

Default Settings

-2) В файле accounts.txt указываем свои приватные ключи +By default this script will execute the following: -3) В файле rpc.json по пути data/rpc.json можем менять rpc на свои +* 4 swaps per cycle on Skydrome, Zebra, SyncSwap, and XYSwap +* Randomize execution with between 5-20 minutes between websites, 20-30 minutes between wallets, and a random number of minutes less than 90 after 12 hours before recycle the wallets in the reverse direction +* starts swapping from USDC to ETH before reversing after the first cycle and waits complete -Инфа по апдейтам да и просто лайф блог –– https://t.me/sybilwave +--- +

Settings in detail

+ +

-h, --help

+

show this help message and exit

+

--websites WEBSITES

+

The transaction types at the website you want to perform from the available actions

+

-l, --list

+

List all available actions

+

-R, --random

+

Use wallets in a random order

+ +

Wallets:

+

--wallet WALLET

+

The wallet you want to use

+

--wallets WALLETS

+

The wallets you want to use

+

Wait Between Wallets:

+

--wait-between-wallets-max-seconds WAIT_BETWEEN_WALLETS_MAX_SECONDS

+

The maximum time in seconds to wait between wallets default: 1800 seconds (30 minutes)

+

--wait-between-wallets-min-seconds WAIT_BETWEEN_WALLETS_MIN_SECONDS

+

The minimum time in seconds to wait between wallets default: 1200 seconds (20 minutes)

+

Wait Between Websites:

+

--wait-between-websites-max-seconds WAIT_BETWEEN_WEBSITES_MAX_SECONDS

+

The maximum time in seconds to wait between websites default: 1200 seconds (20 minutes)

+

--wait-between-websites-min-seconds WAIT_BETWEEN_WEBSITES_MIN_SECONDS

+

The minimum time in seconds to wait between websites default: 300 seconds (5 minutes)

+

Wait Between Cycles:

+

--wait-between-cycles-max-seconds WAIT_BETWEEN_CYCLES_MAX_SECONDS

+

The maximum time in seconds to wait between cycles default: 48600 (12 hours and 90 minutes)

+

--wait-between-cycles-min-seconds WAIT_BETWEEN_CYCLES_MIN_SECONDS

+

The minimum time in seconds to wait between cycles default: 43500 (12 hours and 5 minutes)

+ +

Swap SyncSwap Settings:

+

--syncswap-from-token SYNCSWAP_FROM_TOKEN

+

The token you want to swap from

+

--syncswap-to-token SYNCSWAP_TO_TOKEN

+

The token you want to swap to

+

--syncswap-min-amount SYNCSWAP_MIN_AMOUNT

+

The amount of the token you want to swap

+

--syncswap-max-amount SYNCSWAP_MAX_AMOUNT

+

The amount of the token you want to swap

+

--syncswap-decimal SYNCSWAP_DECIMAL

+

The decimal of the token you want to swap

+

--syncswap-slippage SYNCSWAP_SLIPPAGE

+

The slippage of the token you want to swap

+

--syncswap-all-amount SYNCSWAP_ALL_AMOUNT

+

Swap all the amount of the token you want to swap

+

--syncswap-min-percent SYNCSWAP_MIN_PERCENT

+

The minimum percent of the token you want to swap

+

--syncswap-max-percent SYNCSWAP_MAX_PERCENT

+

The maximum percent of the token you want to swap

+

From 01f0ca49ed84be0c4306e801623c746de1bcbcc9 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 7 Apr 2024 21:51:55 +0100 Subject: [PATCH 3/9] updated --- main.py | 140 -------------------------------------------------------- 1 file changed, 140 deletions(-) diff --git a/main.py b/main.py index 2f1af2b..d6e47e7 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,7 @@ import random -<<<<<<< HEAD -<<<<<<< HEAD import time from typing import Union import asyncio - from loguru import logger @@ -80,140 +77,3 @@ def main( for setting in website_settings: # ETH to USDC or back setting['from_token'], setting['to_token'] = setting['to_token'], setting['from_token'] -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -import sys -import time -from concurrent.futures import ThreadPoolExecutor - -import questionary -from loguru import logger -from questionary import Choice - -from config import ACCOUNTS -from settings import ( - RANDOM_WALLET, - SLEEP_TO, - SLEEP_FROM, - QUANTITY_THREADS, - THREAD_SLEEP_FROM, - THREAD_SLEEP_TO, REMOVE_WALLET, -) -from modules_settings import * -from utils.helpers import remove_wallet -from utils.sleeping import sleep - - -def get_module(): - result = questionary.select( - "Select a method to get started", - choices=[ - Choice("1) Make bridge to Base", bridge_base), - Choice("2) Make bridge on Orbiter", bridge_orbiter), - Choice("3) Wrap ETH", wrap_eth), - Choice("4) Unwrap ETH", unwrap_eth), - Choice("5) Swap on Uniswap", swap_uniswap), - Choice("6) Swap on Pancake", swap_pancake), - Choice("7) Swap on WooFi", swap_woofi), - Choice("8) Swap on BaseSwap", swap_baseswap), - Choice("9) Swap on AlienSwap", swap_alienswap), - Choice("10) Swap on Maverick", swap_maverick), - Choice("11) Swap on Odos", swap_odos), - Choice("12) Swap on 1inch", swap_inch), - Choice("13) Swap on OpenOcean", swap_openocean), - Choice("14) Swap on XYSwap", swap_xyswap), - Choice("15) Bungee Refuel", bungee_refuel), - Choice("16) Stargate bridge", stargate_bridge), - Choice("17) Deposit Aave", deposit_aave), - Choice("18) Withdraw Aave", withdraw_aave), - Choice("19) Deposit MoonWell", deposit_moonwell), - Choice("20) Withdraw MoonWell", withdraw_moonwell), - Choice("21) Deposit RocketSam", deposit_rocketsam), - Choice("22) Withdraw RocketSam", withdraw_rocketsam), - Choice("23) Mint NFT on MintFun", mint_mintfun), - Choice("24) Mint and Bridge Zerius NFT", mint_zerius), - Choice("25) Mint ZkStars NFT", mint_zkstars), - Choice("26) Dmail sending mail", send_mail), - Choice("27) Send message L2Telegraph", send_message), - Choice("28) Mint and bridge NFT L2Telegraph", bridge_nft), - Choice("29) Create portfolio on Ray", create_portfolio), - Choice("30) Create gnosis safe", create_safe), - Choice("31) Mint NFT on NFTS2ME", mint_nft), - Choice("32) Swap tokens to ETH", swap_tokens), - Choice("33) Use Multiswap", swap_multiswap), - Choice("34) Use custom routes", custom_routes), - Choice("35) Check transaction count", "tx_checker"), - Choice("36) Exit", "exit"), - ], - qmark="⚙️ ", - pointer="✅ " - ).ask() - if result == "exit": - print("\n❤️ Subscribe to me – https://t.me/sybilwave\n") - print("🤑 Donate me: 0x00000b0ddce0bfda4531542ad1f2f5fad7b9cde9") - sys.exit() - return result - - -def get_wallets(): - wallets = [ - { - "id": _id, - "key": key, - } for _id, key in enumerate(ACCOUNTS, start=1) - ] - - return wallets - - -async def run_module(module, account_id, key): - try: - await module(account_id, key) - except Exception as e: - logger.error(e) - - if REMOVE_WALLET: - remove_wallet(key) - - await sleep(SLEEP_FROM, SLEEP_TO) - - -def _async_run_module(module, account_id, key): - asyncio.run(run_module(module, account_id, key)) - - -def main(module): - wallets = get_wallets() - - if RANDOM_WALLET: - random.shuffle(wallets) - - with ThreadPoolExecutor(max_workers=QUANTITY_THREADS) as executor: - for _, account in enumerate(wallets, start=1): - executor.submit( - _async_run_module, - module, - account.get("id"), - account.get("key"), - ) - time.sleep(random.randint(THREAD_SLEEP_FROM, THREAD_SLEEP_TO)) - - -if __name__ == '__main__': - print("❤️ Subscribe to me – https://t.me/sybilwave\n") - - logger.add("logging.log") - - module = get_module() - if module == "tx_checker": - get_tx_count() - else: - main(module) - - print("\n❤️ Subscribe to me – https://t.me/sybilwave\n") - print("🤑 Donate me: 0x00000b0ddce0bfda4531542ad1f2f5fad7b9cde9") -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 From f04080d53271f789d0421d754b3dc96bb5efa617 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 7 Apr 2024 22:25:09 +0100 Subject: [PATCH 4/9] updates --- config.py | 203 --------- data/rpc.json | 34 +- logging.log | 27 +- modules/__init__.py | 39 +- modules/aave.py | 35 -- modules/account.py | 40 +- modules/dmail.py | 27 -- modules/multiswap.py | 83 ---- modules/nfts2me.py | 10 - modules/orbiter.py | 10 - modules/routes.py | 18 - modules/safe.py | 35 -- modules/swap_tokens.py | 58 --- modules/tx_checker.py | 41 -- modules/xyswap.py | 28 -- modules/zerius.py | 28 -- modules/zkstars.py | 11 - modules_settings.py | 968 +++-------------------------------------- settings.py | 42 -- utils/gas_checker.py | 32 -- 20 files changed, 81 insertions(+), 1688 deletions(-) diff --git a/config.py b/config.py index ceabbf8..2de0152 100644 --- a/config.py +++ b/config.py @@ -6,8 +6,6 @@ with open('data/abi/erc20_abi.json') as file: ERC20_ABI = json.load(file) -<<<<<<< HEAD -<<<<<<< HEAD with open('data/abi/bridge/deposit.json') as file: DEPOSIT_ABI = json.load(file) @@ -34,69 +32,10 @@ with open("data/abi/zebra/abi.json", "r") as file: ZEBRA_ROUTER_ABI = json.load(file) -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -with open("accounts.txt", "r") as file: - ACCOUNTS = [row.strip() for row in file] - -with open('data/abi/base/bridge.json') as file: - BASE_BRIDGE_ABI = json.load(file) - -with open('data/abi/base/weth.json') as file: - WETH_ABI = json.load(file) - -with open("data/abi/uniswap/router.json", "r") as file: - UNISWAP_ROUTER_ABI = json.load(file) - -with open("data/abi/pancake/factory.json", "r") as file: - UNISWAP_FACTORY_ABI = json.load(file) - -with open("data/abi/uniswap/quoter.json", "r") as file: - UNISWAP_QUOTER_ABI = json.load(file) - -with open("data/abi/pancake/router.json", "r") as file: - PANCAKE_ROUTER_ABI = json.load(file) - -with open("data/abi/pancake/factory.json", "r") as file: - PANCAKE_FACTORY_ABI = json.load(file) - -with open("data/abi/pancake/quoter.json", "r") as file: - PANCAKE_QUOTER_ABI = json.load(file) - -with open("data/abi/woofi/router.json", "r") as file: - WOOFI_ROUTER_ABI = json.load(file) - -with open("data/abi/baseswap/router.json", "r") as file: - BASESWAP_ROUTER_ABI = json.load(file) - -with open("data/abi/alien/abi.json", "r") as file: - ALIEN_ROUTER_ABI = json.load(file) - -with open("data/abi/maverick/position.json", "r") as file: - MAVERICK_POSITION_ABI = json.load(file) - -with open("data/abi/maverick/router.json", "r") as file: - MAVERICK_ROUTER_ABI = json.load(file) - -with open("data/abi/bungee/abi.json", "r") as file: - BUNGEE_ABI = json.load(file) - -with open("data/abi/stargate/bridge.json", "r") as file: - STARGATE_BRIDGE_ABI = json.load(file) - -with open("data/abi/stargate/router.json", "r") as file: - STARGATE_ROUTER_ABI = json.load(file) -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 with open("data/abi/aave/abi.json", "r") as file: AAVE_ABI = json.load(file) -<<<<<<< HEAD -<<<<<<< HEAD with open("data/abi/layerbank/abi.json", "r") as file: LAYERBANK_ABI = json.load(file) @@ -114,59 +53,19 @@ with open("data/abi/nft2me/abi.json", "r") as file: NFTS2ME_ABI = json.load(file) -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -with open("data/abi/moonwell/abi.json", "r") as file: - MOONWELL_ABI = json.load(file) - -with open("data/abi/l2telegraph/send_message.json", "r") as file: - L2TELEGRAPH_MESSAGE_ABI = json.load(file) - -with open("data/abi/l2telegraph/bridge_nft.json", "r") as file: - L2TELEGRAPH_NFT_ABI = json.load(file) - -with open("data/abi/mintfun/abi.json", "r") as file: - MINTFUN_ABI = json.load(file) - -with open("data/abi/rai/abi.json", "r") as file: - RAI_ABI = json.load(file) -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 with open("data/abi/gnosis/abi.json", "r") as file: SAFE_ABI = json.load(file) -<<<<<<< HEAD -<<<<<<< HEAD with open("data/deploy/abi.json", "r") as file: DEPLOYER_ABI = json.load(file) with open("data/deploy/bytecode.txt", "r") as file: DEPLOYER_BYTECODE = file.read() -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -with open("data/abi/zerius/abi.json", "r") as file: - ZERIUS_ABI = json.load(file) - -with open("data/abi/nft2me/abi.json", "r") as file: - NFTS2ME_ABI = json.load(file) - -with open("data/abi/dmail/abi.json", "r") as file: - DMAIL_ABI = json.load(file) -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 with open("data/abi/zkstars/abi.json", "r") as file: ZKSTARS_ABI = json.load(file) -<<<<<<< HEAD -<<<<<<< HEAD with open("data/abi/rubyscore/abi.json", "r") as file: RUBYSCORE_VOTE_ABI = json.load(file) @@ -226,105 +125,3 @@ SAFE_CONTRACT = "0xa6b71e26c5e0845f74c812102ca7114b6a896ab2" RUBYSCORE_VOTE_CONTRACT = "0xe10Add2ad591A7AC3CA46788a06290De017b9fB4" -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -with open("data/abi/rocketsam/abi.json", "r") as file: - ROCKETSAM_ABI = json.load(file) - -ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" - -BASE_BRIDGE_CONTRACT = "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e" - -ORBITER_CONTRACT = "" - -BASE_TOKENS = { - "ETH": "0x4200000000000000000000000000000000000006", - "WETH": "0x4200000000000000000000000000000000000006", - "USDBC": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", - "USDC": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", - "DAI": "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb", -} - -UNISWAP_CONTRACTS = { - "router": "0x2626664c2603336E57B271c5C0b26F421741e481", - "factory": "0x33128a8fC17869897dcE68Ed026d694621f6FDfD", - "quoter": "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a", -} - -PANCAKE_CONTRACTS = { - "router": "0x678Aa4bF4E210cf2166753e054d5b7c31cc7fa86", - "factory": "0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865", - "quoter": "0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997" -} - -WOOFI_CONTRACTS = { - "router": "0x27425e9fb6a9a625e8484cfd9620851d1fa322e5" -} - -BASESWAP_CONTRACTS = { - "router": "0x327Df1E6de05895d2ab08513aaDD9313Fe505d86" -} - -ALIEN_CONTRACTS = { - "router": "0x8c1a3cf8f83074169fe5d7ad50b978e1cd6b37c7" -} - -ODOS_CONTRACT = { - "router": "0x19ceead7105607cd444f5ad10dd51356436095a1", - "use_ref": True # If you use True, you support me 1% of the transaction amount -} - -INCH_CONTRACT = { - "router": "0x1111111254eeb25477b68fb85ed929f73a960582", - "use_ref": True # If you use True, you support me 1% of the transaction amount -} - -OPENOCEAN_CONTRACT = { - "router": "0x6352a56caadc4f1e25cd6c75970fa768a3304e64", - "use_ref": True # If you use True, you support me 1% of the transaction amount -} - -XYSWAP_CONTRACT = { - "router": "0x6acd0ec9405ccb701c57a88849c4f1cd85a3f3ab", - "use_ref": True # If you use True, you support me 1% of the transaction amount -} - -MAVERICK_CONTRACTS = { - "router": "0x32AED3Bce901DA12ca8489788F3A99fCe1056e14", - "pool": "0x06e6736ca9e922766279a22b75a600fe8b8473b6", - "pool_information": "0x6E230D0e457Ea2398FB3A22FB7f9B7F68F06a14d", -} - -BUNGEE_CONTRACT = "0xe8c5b8488feafb5df316be73ede3bdc26571a773" - -STARGATE_CONTRACTS = { - "router": "0xAF54BE5B6eEc24d6BFACf1cce4eaF680A8239398", - "bridge": "0x50b6ebc2103bfec165949cc946d739d5650d7ae4" -} - -AAVE_CONTRACT = "0x18cd499e3d7ed42feba981ac9236a278e4cdc2ee" - -AAVE_WETH_CONTRACT = "0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7" - -MOONWELL_CONTRACT = "0x70778cfcFC475c7eA0f24cC625Baf6EaE475D0c9" - -MOONWELL_WETH_CONTRACT = "0x628ff693426583D9a7FB391E54366292F509D457" - -MINTFUN_CONTRACT = "0xf39ac57beaf8f97b89db7a9203a4e47c17cf4391" - -L2TELEGRAPH_MESSAGE_CONTRACT = "0x64e0f6164ac110b67df9a4848707ffbcb86c87a9" - -L2TELEGRAPH_NFT_CONTRACT = "0x36a358b3ba1fb368e35b71ea40c7f4ab89bfd8e1" - -RAI_CONTRACT = "0xbc097e42bf1e6531c32c5cee945e0c014fa21964" - -SAFE_CONTRACT = "0xc22834581ebc8527d974f8a1c97e1bea4ef910bc" - -ZERIUS_CONTRACT = "0x178608ffe2cca5d36f3fc6e69426c4d3a5a74a41" - -DMAIL_CONTRACT = "0x47fbe95e981C0Df9737B6971B451fB15fdC989d9" -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 diff --git a/data/rpc.json b/data/rpc.json index a90e6c2..0e1b976 100644 --- a/data/rpc.json +++ b/data/rpc.json @@ -1,57 +1,37 @@ { "ethereum": { - "rpc": [ - "https://rpc.ankr.com/eth" - ], + "rpc": ["https://rpc.ankr.com/eth"], "explorer": "https://etherscan.io/tx/", "token": "ETH" }, "arbitrum": { - "rpc": [ - "https://rpc.ankr.com/arbitrum" - ], + "rpc": ["https://rpc.ankr.com/arbitrum"], "explorer": "https://arbiscan.io/tx/", "token": "ETH" }, "optimism": { - "rpc": [ - "https://rpc.ankr.com/optimism" - ], + "rpc": ["https://rpc.ankr.com/optimism"], "explorer": "https://optimistic.etherscan.io/tx/", "token": "ETH" }, "polygon_zkevm": { - "rpc": [ - "https://rpc.ankr.com/polygon_zkevm" - ], + "rpc": ["https://rpc.ankr.com/polygon_zkevm"], "explorer": "https://zkevm.polygonscan.com/tx/", "token": "ETH" }, "zksync": { - "rpc": [ - "https://rpc.ankr.com/zksync_era" - ], + "rpc": ["https://rpc.ankr.com/zksync_era"], "explorer": "https://explorer.zksync.io/tx/", "token": "ETH" }, "base": { - "rpc": [ - "https://rpc.ankr.com/base" - ], + "rpc": ["https://rpc.ankr.com/base"], "explorer": "https://basescan.org/tx/", "token": "ETH" -<<<<<<< HEAD -<<<<<<< HEAD }, "scroll": { - "rpc": [ - "https://rpc.scroll.io" - ], + "rpc": ["https://rpc.scroll.io"], "explorer": "https://scrollscan.com/tx/", "token": "ETH" -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 } } diff --git a/logging.log b/logging.log index fcd13f0..3edb9ae 100644 --- a/logging.log +++ b/logging.log @@ -1,22 +1,5 @@ -2024-04-07 20:19:12.021 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds -2024-04-07 20:19:12.024 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds -2024-04-07 20:19:12.024 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds -2024-04-07 20:21:56.075 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds -2024-04-07 20:21:56.076 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds -2024-04-07 20:21:56.077 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds -2024-04-07 20:23:03.416 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds -2024-04-07 20:23:03.417 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds -2024-04-07 20:23:03.418 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds -2024-04-07 20:23:03.418 | INFO | main:main:52 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 -2024-04-07 20:23:04.924 | INFO | modules.syncswap:swap:72 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Swap on SyncSwap – USDC -> ETH | 0.000194 USDC -2024-04-07 20:23:06.688 | SUCCESS | modules.account:approve:123 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Make approve -2024-04-07 20:23:08.009 | ERROR | utils.helpers:wrapper:14 - Error | {'code': -32000, 'message': 'insufficient funds for transfer'} -2024-04-07 20:23:08.009 | INFO | utils.sleeping:sleep:10 - 💤 Sleep 18 s. -2024-04-07 20:23:16.668 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds -2024-04-07 20:23:16.669 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds -2024-04-07 20:23:16.670 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds -2024-04-07 20:23:16.670 | INFO | main:main:52 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 -2024-04-07 20:23:18.521 | INFO | modules.syncswap:swap:72 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Swap on SyncSwap – USDC -> ETH | 0.000151 USDC -2024-04-07 20:23:20.797 | SUCCESS | modules.account:approve:123 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Make approve -2024-04-07 20:23:22.489 | ERROR | utils.helpers:wrapper:14 - Error | {'code': -32000, 'message': 'insufficient funds for transfer'} -2024-04-07 20:23:22.490 | INFO | utils.sleeping:sleep:10 - 💤 Sleep 18 s. +2024-04-07 22:22:00.006 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds +2024-04-07 22:22:00.010 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds +2024-04-07 22:22:00.012 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds +2024-04-07 22:22:00.014 | INFO | main:main:51 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 +2024-04-07 22:22:03.002 | INFO | modules.syncswap:swap:72 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Swap on SyncSwap – USDC -> ETH | 0.000193 USDC diff --git a/modules/__init__.py b/modules/__init__.py index e9b7ccf..0013511 100644 --- a/modules/__init__.py +++ b/modules/__init__.py @@ -1,6 +1,4 @@ from .account import Account -<<<<<<< HEAD -<<<<<<< HEAD from .scroll import Scroll from .orbiter import Orbiter from .nitro import Nitro @@ -24,39 +22,4 @@ from .multiswap import Multiswap from .routes import Routes from .transfer import Transfer -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -from .base import Base -from .orbiter import Orbiter -from .uniswap import Uniswap -from .pancake import Pancake -from .woofi import WooFi -from .baseswap import BaseSwap -from .alienswap import AlienSwap -from .odos import Odos -from .inch import Inch -from .openocean import OpenOcean -from .xyswap import XYSwap -from .maverick import Maverick -from .bungee import Bungee -from .stargate import Stargate -from .aave import Aave -from .moonwell import MoonWell -from .rocketsam import RocketSam -from .l2telegraph import L2Telegraph -from .mintfun import MintFun -from .zerius import Zerius -from .zkstars import ZkStars -from .rai import Rai -from .safe import GnosisSafe -from .nfts2me import Minter -from .dmail import Dmail -from .swap_tokens import SwapTokens -from .multiswap import Multiswap -from .routes import Routes -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -from .tx_checker import check_tx + diff --git a/modules/aave.py b/modules/aave.py index bb06459..f5f4bea 100644 --- a/modules/aave.py +++ b/modules/aave.py @@ -1,5 +1,4 @@ from typing import Dict - from loguru import logger from config import AAVE_CONTRACT, AAVE_WETH_CONTRACT, AAVE_ABI from utils.gas_checker import check_gas @@ -9,18 +8,8 @@ class Aave(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 self.contract = self.get_contract(AAVE_CONTRACT, AAVE_ABI) @@ -60,15 +49,7 @@ async def deposit( tx_data = await self.get_tx_data(amount_wei) transaction = await self.contract.functions.depositETH( -<<<<<<< HEAD -<<<<<<< HEAD self.w3.to_checksum_address("0x11fCfe756c05AD438e312a7fd934381537D3cFfe"), -======= - self.w3.to_checksum_address("0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - self.w3.to_checksum_address("0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 self.address, 0 ).build_transaction(tx_data) @@ -95,28 +76,12 @@ async def withdraw(self) -> None: f"{self.w3.from_wei(amount, 'ether')} ETH" ) -<<<<<<< HEAD -<<<<<<< HEAD await self.approve(amount, "0xf301805be1df81102c957f6d4ce29d2b8c056b2a", AAVE_CONTRACT) -======= - await self.approve(amount, "0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7", AAVE_CONTRACT) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - await self.approve(amount, "0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7", AAVE_CONTRACT) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 tx_data = await self.get_tx_data() transaction = await self.contract.functions.withdrawETH( -<<<<<<< HEAD -<<<<<<< HEAD self.w3.to_checksum_address("0x11fCfe756c05AD438e312a7fd934381537D3cFfe"), -======= - self.w3.to_checksum_address("0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - self.w3.to_checksum_address("0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 amount, self.address ).build_transaction(tx_data) diff --git a/modules/account.py b/modules/account.py index 1c42b36..358f030 100644 --- a/modules/account.py +++ b/modules/account.py @@ -2,7 +2,6 @@ import time import random from typing import Union, Type, Dict, Any - from hexbytes import HexBytes from loguru import logger from web3 import AsyncWeb3 @@ -12,37 +11,28 @@ from web3.middleware import async_geth_poa_middleware from config import RPC, ERC20_ABI, SCROLL_TOKENS from settings import GAS_MULTIPLIER, MAX_PRIORITY_FEE -from config import RPC, ERC20_ABI, BASE_TOKENS -from settings import GAS_MULTIPLIER, GAS_PRIORITY_FEE -from config import RPC, ERC20_ABI, BASE_TOKENS -from settings import GAS_MULTIPLIER, GAS_PRIORITY_FEE from utils.sleeping import sleep class Account: def __init__(self, account_id: int, private_key: str, chain: str, recipient: str) -> None: - pass - def __init__(self, account_id: int, private_key: str, chain: str) -> None: - pass - def __init__(self, account_id: int, private_key: str, chain: str) -> None: self.account_id = account_id self.private_key = private_key self.chain = chain self.explorer = RPC[chain]["explorer"] self.token = RPC[chain]["token"] + self.recipient = recipient + self.w3 = AsyncWeb3( AsyncWeb3.AsyncHTTPProvider(random.choice(RPC[chain]["rpc"])), middlewares=[async_geth_poa_middleware] ) - self.account = EthereumAccount.from_key(private_key) - self.address = self.account.address - async def get_tx_data(self, value: int = 0, gas_price: bool = True): self.account = EthereumAccount.from_key(private_key) self.address = self.account.address - async def get_tx_data(self, value: int = 0): + async def get_tx_data(self, value: int = 0, gas_price: bool = True): tx = { "chainId": await self.w3.eth.chain_id, "from": self.address, @@ -60,8 +50,7 @@ async def transaction_fee(self, tx_data: dict): gas = await self.w3.eth.estimate_gas(tx_data) return int(gas * gas_price) - return tx - + def get_contract(self, contract_address: str, abi=None) -> Union[Type[Contract], Contract]: contract_address = self.w3.to_checksum_address(contract_address) @@ -103,10 +92,7 @@ async def get_amount( amount_wei = int(balance * percent) if all_amount else self.w3.to_wei(random_amount, "ether") amount = self.w3.from_wei(int(balance * percent), "ether") if all_amount else random_amount else: - balance = await self.get_balance(SCROLL_TOKENS[from_token]) - balance = await self.get_balance(BASE_TOKENS[from_token]) - balance = await self.get_balance(BASE_TOKENS[from_token]) amount_wei = int(balance["balance_wei"] * percent) \ if all_amount else int(random_amount * 10 ** balance["decimal"]) amount = balance["balance"] * percent if all_amount else random_amount @@ -122,12 +108,8 @@ async def check_allowance(self, token_address: str, contract_address: str) -> in amount_approved = await contract.functions.allowance(self.address, contract_address).call() return amount_approved - async def approve(self, amount: float, token_address: str, contract_address: str) -> None: - pass - async def approve(self, amount: int, token_address: str, contract_address: str) -> None: - pass - async def approve(self, amount: int, token_address: str, contract_address: str) -> None: + async def approve(self, amount: float, token_address: str, contract_address: str) -> None: token_address = self.w3.to_checksum_address(token_address) contract_address = self.w3.to_checksum_address(contract_address) @@ -191,17 +173,7 @@ async def sign(self, transaction) -> Any: gas = int(gas * GAS_MULTIPLIER) transaction.update({"gas": gas}) - max_fee_per_gas = await self.w3.eth.gas_price - max_priority_fee_per_gas = self.w3.to_wei(GAS_PRIORITY_FEE[self.chain], "gwei") - gas = int(await self.w3.eth.estimate_gas(transaction) * GAS_MULTIPLIER) - - transaction.update( - { - "maxPriorityFeePerGas": max_priority_fee_per_gas, - "maxFeePerGas": max_fee_per_gas, - "gas": gas - } - ) + signed_txn = self.w3.eth.account.sign_transaction(transaction, self.private_key) return signed_txn diff --git a/modules/dmail.py b/modules/dmail.py index eaebdcd..b249cf7 100644 --- a/modules/dmail.py +++ b/modules/dmail.py @@ -1,34 +1,15 @@ import random from hashlib import sha256 - from loguru import logger -<<<<<<< HEAD -<<<<<<< HEAD from config import DMAIL_CONTRACT, DMAIL_ABI -======= -from config import DMAIL_ABI, DMAIL_CONTRACT ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= -from config import DMAIL_ABI, DMAIL_CONTRACT ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 from utils.gas_checker import check_gas from utils.helpers import retry from .account import Account class Dmail(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 self.contract = self.get_contract(DMAIL_CONTRACT, DMAIL_ABI) @@ -43,17 +24,9 @@ async def send_mail(self): data = self.contract.encodeABI("send_mail", args=(email, theme)) tx_data = await self.get_tx_data() -<<<<<<< HEAD -<<<<<<< HEAD tx_data.update( {"data": data, "to": self.w3.to_checksum_address(DMAIL_CONTRACT), "gasPrice": await self.w3.eth.gas_price} ) -======= - tx_data.update({"data": data, "to": self.w3.to_checksum_address(DMAIL_CONTRACT)}) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - tx_data.update({"data": data, "to": self.w3.to_checksum_address(DMAIL_CONTRACT)}) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 signed_txn = await self.sign(tx_data) diff --git a/modules/multiswap.py b/modules/multiswap.py index bf37022..cf1a4aa 100644 --- a/modules/multiswap.py +++ b/modules/multiswap.py @@ -1,27 +1,12 @@ import random -<<<<<<< HEAD -<<<<<<< HEAD from typing import Union - from loguru import logger from config import SCROLL_TOKENS -======= - -from loguru import logger -from config import BASE_TOKENS ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - -from loguru import logger -from config import BASE_TOKENS ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 from modules import * from utils.sleeping import sleep class Multiswap(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) @@ -30,27 +15,6 @@ def __init__(self, account_id: int, private_key: str, recipient: str) -> None: "skydrome": Skydrome, "zebra": Zebra, "xyswap": XYSwap, -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") - - self.swap_modules = { - "uniswap": Uniswap, - "pancake": Pancake, - "woofi": WooFi, - "baseswap": BaseSwap, - "alienswap": AlienSwap, - "maverick": Maverick, - "odos": Odos, - "inch": Inch, - "xyswap": XYSwap, - "openocean": OpenOcean, -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 } def get_swap_module(self, use_dex: list): @@ -65,15 +29,7 @@ async def swap( sleep_to: int, min_swap: int, max_swap: int, -<<<<<<< HEAD -<<<<<<< HEAD slippage: Union[int, float], -======= - slippage: int, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - slippage: int, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 random_swap_token: bool, min_percent: int, max_percent: int @@ -81,42 +37,19 @@ async def swap( quantity_swap = random.randint(min_swap, max_swap) if random_swap_token: -<<<<<<< HEAD -<<<<<<< HEAD path = [random.choice(["ETH", "USDC"]) for _ in range(0, quantity_swap)] usdc_balance = await self.get_balance(SCROLL_TOKENS["USDC"]) if path[0] == "USDC" and usdc_balance["balance"] <= 1: path[0] = "ETH" else: path = ["ETH" if _ % 2 == 0 else "USDC" for _ in range(0, quantity_swap)] -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - path = [random.choice(["ETH", "USDBC"]) for _ in range(0, quantity_swap)] - USDBC_balance = await self.get_balance(BASE_TOKENS["USDBC"]) - if path[0] == "USDBC" and USDBC_balance["balance"] <= 1: - path[0] = "ETH" - else: - path = ["ETH" if _ % 2 == 0 else "USDBC" for _ in range(0, quantity_swap)] -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 logger.info(f"[{self.account_id}][{self.address}] Start MultiSwap | quantity swaps: {quantity_swap}") for _, token in enumerate(path): if token == "ETH": decimal = 6 -<<<<<<< HEAD -<<<<<<< HEAD to_token = "USDC" -======= - to_token = "USDBC" ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - to_token = "USDBC" ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 balance = await self.w3.eth.get_balance(self.address) @@ -126,28 +59,12 @@ async def swap( decimal = 18 to_token = "ETH" -<<<<<<< HEAD -<<<<<<< HEAD balance = await self.get_balance(SCROLL_TOKENS["USDC"]) -======= - balance = await self.get_balance(BASE_TOKENS["USDBC"]) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - balance = await self.get_balance(BASE_TOKENS["USDBC"]) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 min_amount = balance["balance"] if balance["balance"] <= 1 else balance["balance"] / 100 * min_percent max_amount = balance["balance"] if balance["balance"] <= 1 else balance["balance"] / 100 * max_percent -<<<<<<< HEAD -<<<<<<< HEAD swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key, self.recipient) -======= - swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 await swap_module.swap( token, to_token, diff --git a/modules/nfts2me.py b/modules/nfts2me.py index bf7fefb..3cef6c8 100644 --- a/modules/nfts2me.py +++ b/modules/nfts2me.py @@ -9,18 +9,8 @@ class Minter(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 @retry @check_gas diff --git a/modules/orbiter.py b/modules/orbiter.py index a0156aa..483f58c 100644 --- a/modules/orbiter.py +++ b/modules/orbiter.py @@ -8,18 +8,8 @@ class Orbiter(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, chain: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain=chain, recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str, chain: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain=chain) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str, chain: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain=chain) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 self.chain_ids = { "ethereum": "1", diff --git a/modules/routes.py b/modules/routes.py index 8fc5ac0..12b129c 100644 --- a/modules/routes.py +++ b/modules/routes.py @@ -6,18 +6,8 @@ class Routes(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 def process_module(self, module): if isinstance(module, list): @@ -50,14 +40,6 @@ async def start(self, use_modules: list, sleep_from: int, sleep_to: int, random_ logger.info(f"[{self.account_id}][{self.address}] Skip module") continue -<<<<<<< HEAD -<<<<<<< HEAD await module(self.account_id, self.private_key, self.recipient) -======= - await module(self.account_id, self.private_key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - await module(self.account_id, self.private_key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 await sleep(sleep_from, sleep_to) diff --git a/modules/safe.py b/modules/safe.py index b2f5ced..a7860b3 100644 --- a/modules/safe.py +++ b/modules/safe.py @@ -1,13 +1,4 @@ import time -<<<<<<< HEAD -<<<<<<< HEAD -======= -from typing import Dict ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= -from typing import Dict ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - from loguru import logger from config import SAFE_ABI, SAFE_CONTRACT, ZERO_ADDRESS from utils.gas_checker import check_gas @@ -16,18 +7,8 @@ class GnosisSafe(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 self.contract = self.get_contract(SAFE_CONTRACT, SAFE_ABI) @@ -43,15 +24,7 @@ async def create_safe(self): 1, ZERO_ADDRESS, "0x", -<<<<<<< HEAD -<<<<<<< HEAD self.w3.to_checksum_address("0xf48f2B2d2a534e402487b3ee7C18c33Aec0Fe5e4"), -======= - self.w3.to_checksum_address("0x017062a1dE2FE6b99BE3d9d37841FeD19F573804"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - self.w3.to_checksum_address("0x017062a1dE2FE6b99BE3d9d37841FeD19F573804"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 ZERO_ADDRESS, 0, ZERO_ADDRESS @@ -61,15 +34,7 @@ async def create_safe(self): tx_data = await self.get_tx_data() transaction = await self.contract.functions.createProxyWithNonce( -<<<<<<< HEAD -<<<<<<< HEAD self.w3.to_checksum_address("0x3E5c63644E683549055b9Be8653de26E0B4CD36E"), -======= - self.w3.to_checksum_address("0xfb1bffC9d739B8D520DaF37dF666da4C687191EA"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - self.w3.to_checksum_address("0xfb1bffC9d739B8D520DaF37dF666da4C687191EA"), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 setup_data, int(time.time()*1000) ).build_transaction(tx_data) diff --git a/modules/swap_tokens.py b/modules/swap_tokens.py index 5ab6235..d4ba02d 100644 --- a/modules/swap_tokens.py +++ b/modules/swap_tokens.py @@ -1,28 +1,12 @@ import random -<<<<<<< HEAD -<<<<<<< HEAD from typing import List, Union - from loguru import logger from config import SCROLL_TOKENS -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -from typing import List - -from loguru import logger -from config import BASE_TOKENS -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 from modules import * from utils.sleeping import sleep class SwapTokens(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) @@ -31,27 +15,6 @@ def __init__(self, account_id: int, private_key: str, recipient: str) -> None: "skydrome": Skydrome, "zebra": Zebra, "xyswap": XYSwap, -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") - - self.swap_modules = { - "uniswap": Uniswap, - "pancake": Pancake, - "woofi": WooFi, - "baseswap": BaseSwap, - "alienswap": AlienSwap, - "maverick": Maverick, - "odos": Odos, - "inch": Inch, - "xyswap": XYSwap, - "openocean": OpenOcean, -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 } def get_swap_module(self, use_dex: list): @@ -64,15 +27,7 @@ async def swap( tokens: List, sleep_from: int, sleep_to: int, -<<<<<<< HEAD -<<<<<<< HEAD slippage: Union[int, float], -======= - slippage: int, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - slippage: int, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 min_percent: int, max_percent: int, ): @@ -84,23 +39,10 @@ async def swap( if token == "ETH": continue -<<<<<<< HEAD -<<<<<<< HEAD balance = await self.get_balance(SCROLL_TOKENS[token]) if balance["balance_wei"] > 0: swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key, self.recipient) -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - balance = await self.get_balance(BASE_TOKENS[token]) - - if balance["balance_wei"] > 0: - swap_module = self.get_swap_module(use_dex)(self.account_id, self.private_key) -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 await swap_module.swap( token, "ETH", diff --git a/modules/tx_checker.py b/modules/tx_checker.py index 28deaa8..2c80761 100644 --- a/modules/tx_checker.py +++ b/modules/tx_checker.py @@ -1,42 +1,17 @@ import asyncio import random - from eth_typing import ChecksumAddress from loguru import logger -<<<<<<< HEAD -<<<<<<< HEAD from web3 import AsyncWeb3, AsyncHTTPProvider from web3.middleware import async_geth_poa_middleware from eth_account import Account as EthereumAccount from tabulate import tabulate - from config import RPC -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -from web3 import AsyncWeb3 -from eth_account import Account as EthereumAccount -from tabulate import tabulate -from web3.middleware import async_geth_poa_middleware - -from config import ACCOUNTS, RPC -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 async def get_nonce(address: ChecksumAddress): web3 = AsyncWeb3( -<<<<<<< HEAD -<<<<<<< HEAD AsyncHTTPProvider(random.choice(RPC["scroll"]["rpc"])), -======= - AsyncWeb3.AsyncHTTPProvider(random.choice(RPC["base"]["rpc"])), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - AsyncWeb3.AsyncHTTPProvider(random.choice(RPC["base"]["rpc"])), ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 middlewares=[async_geth_poa_middleware], ) @@ -45,28 +20,12 @@ async def get_nonce(address: ChecksumAddress): return nonce -<<<<<<< HEAD -<<<<<<< HEAD async def check_tx(wallets: list[str]): -======= -async def check_tx(): ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= -async def check_tx(): ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 tasks = [] logger.info("Start transaction checker") -<<<<<<< HEAD -<<<<<<< HEAD for _id, pk in enumerate(wallets, start=1): -======= - for _id, pk in enumerate(ACCOUNTS, start=1): ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - for _id, pk in enumerate(ACCOUNTS, start=1): ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 account = EthereumAccount.from_key(pk) tasks.append(asyncio.create_task(get_nonce(account.address), name=account.address)) diff --git a/modules/xyswap.py b/modules/xyswap.py index e23f2c8..9fd87d6 100644 --- a/modules/xyswap.py +++ b/modules/xyswap.py @@ -2,33 +2,15 @@ import aiohttp from loguru import logger -<<<<<<< HEAD -<<<<<<< HEAD from config import XYSWAP_CONTRACT, SCROLL_TOKENS -======= -from config import XYSWAP_CONTRACT, BASE_TOKENS ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= -from config import XYSWAP_CONTRACT, BASE_TOKENS ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 from utils.gas_checker import check_gas from utils.helpers import retry from .account import Account class XYSwap(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 async def get_quote(self, from_token: str, to_token: str, amount: int, slippage: float): url = "https://aggregator-api.xy.finance/v1/quote" @@ -104,18 +86,8 @@ async def swap( f"[{self.account_id}][{self.address}] Swap on XYSwap – {from_token} -> {to_token} | {amount} {from_token}" ) -<<<<<<< HEAD -<<<<<<< HEAD from_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if from_token == "ETH" else SCROLL_TOKENS[from_token] to_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if to_token == "ETH" else SCROLL_TOKENS[to_token] -======= - from_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if from_token == "ETH" else BASE_TOKENS[from_token] - to_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if to_token == "ETH" else BASE_TOKENS[to_token] ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - from_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if from_token == "ETH" else BASE_TOKENS[from_token] - to_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" if to_token == "ETH" else BASE_TOKENS[to_token] ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 quote = await self.get_quote(from_token, to_token, amount_wei, slippage) diff --git a/modules/zerius.py b/modules/zerius.py index cf34f4b..082f26f 100644 --- a/modules/zerius.py +++ b/modules/zerius.py @@ -1,16 +1,6 @@ import random -<<<<<<< HEAD -<<<<<<< HEAD from typing import List -======= -from typing import Dict, List ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= -from typing import Dict, List ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - from loguru import logger - from config import ZERIUS_CONTRACT, ZERIUS_ABI, ZERO_ADDRESS from utils.gas_checker import check_gas from utils.helpers import retry @@ -19,30 +9,12 @@ class Zerius(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 self.contract = self.get_contract(ZERIUS_CONTRACT, ZERIUS_ABI) self.chain_ids = { -<<<<<<< HEAD -<<<<<<< HEAD -======= - "zora": 195, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - "zora": 195, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 "arbitrum": 110, "optimism": 111, "polygon": 109, diff --git a/modules/zkstars.py b/modules/zkstars.py index 620b7d5..2c9ceb3 100644 --- a/modules/zkstars.py +++ b/modules/zkstars.py @@ -1,5 +1,4 @@ import random - from loguru import logger from config import ZKSTARS_ABI from utils.gas_checker import check_gas @@ -9,18 +8,8 @@ class ZkStars(Account): -<<<<<<< HEAD -<<<<<<< HEAD def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - def __init__(self, account_id: int, private_key: str) -> None: - super().__init__(account_id=account_id, private_key=private_key, chain="base") ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 @retry @check_gas diff --git a/modules_settings.py b/modules_settings.py index 28ea159..d8bd5d3 100644 --- a/modules_settings.py +++ b/modules_settings.py @@ -1,22 +1,8 @@ import asyncio -<<<<<<< HEAD -<<<<<<< HEAD from modules import * async def deposit_scroll(account_id, key, recipient): -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - -from modules import * - - -async def bridge_base(account_id, key): -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 """ Deposit from official bridge ______________________________________________________ @@ -29,8 +15,6 @@ async def bridge_base(account_id, key): all_amount = True -<<<<<<< HEAD -<<<<<<< HEAD min_percent = 1 max_percent = 1 @@ -67,29 +51,6 @@ async def bridge_orbiter(account_id, key, recipient): """ from_chain = "scroll" -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - min_percent = 5 - max_percent = 10 - - base = Base(account_id, key, "ethereum") - await base.deposit(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) - - -async def bridge_orbiter(account_id, key): - """ - Bridge from orbiter - ______________________________________________________ - from_chain – ethereum, base, polygon_zkevm, arbitrum, optimism, zksync | Select one - to_chain – ethereum, base, polygon_zkevm, arbitrum, optimism, zksync | Select one - """ - - from_chain = "zksync" -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 to_chain = "base" min_amount = 0.005 @@ -101,8 +62,6 @@ async def bridge_orbiter(account_id, key): min_percent = 5 max_percent = 10 -<<<<<<< HEAD -<<<<<<< HEAD orbiter = Orbiter(account_id=account_id, private_key=key, chain=from_chain, recipient=recipient) await orbiter.bridge(to_chain, min_amount, max_amount, decimal, all_amount, min_percent, max_percent) @@ -163,18 +122,6 @@ async def bridge_nitro(account_id, key, recipient): async def wrap_eth(account_id, key, recipient): -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - orbiter = Orbiter(account_id, key, from_chain) - await orbiter.bridge(to_chain, min_amount, max_amount, decimal, all_amount, min_percent, max_percent) - - -async def wrap_eth(account_id, key): -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 """ Wrap ETH ______________________________________________________ @@ -190,25 +137,11 @@ async def wrap_eth(account_id, key): min_percent = 5 max_percent = 10 -<<<<<<< HEAD -<<<<<<< HEAD scroll = Scroll(account_id, key, "scroll", recipient) await scroll.wrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) async def unwrap_eth(account_id, key, recipient): -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - base = Base(account_id, key, "base") - await base.wrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) - - -async def unwrap_eth(account_id, key): -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 """ Unwrap ETH ______________________________________________________ @@ -224,116 +157,25 @@ async def unwrap_eth(account_id, key): min_percent = 100 max_percent = 100 -<<<<<<< HEAD -<<<<<<< HEAD scroll = Scroll(account_id, key, "scroll", recipient) await scroll.unwrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) -# async def swap_skydrome(account_id, key, recipient, -# from_token="USDC", to_token="ETH", -# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, -# all_amount=True, min_percent=100, max_percent=100): -# """ -# Make swap on Skydrome -# ______________________________________________________ -# from_token – Choose SOURCE token ETH, USDC | Select one -# to_token – Choose DESTINATION token ETH, USDC | Select one - -# Disclaimer - You can swap only ETH to any token or any token to ETH! -# ______________________________________________________ -# all_amount - swap from min_percent to max_percent -# """ - -# from_token = from_token -# to_token = to_token - -# min_amount = min_amount -# max_amount = max_amount -# decimal = decimal -# slippage = slippage - -# all_amount = all_amount - -# min_percent = min_percent -# max_percent = max_percent - -# skydrome = Skydrome(account_id, key, recipient) -# await skydrome.swap( -# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent -# ) - - -# async def swap_zebra(account_id, key, recipient, -# from_token="USDC", to_token="ETH", -# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, -# all_amount=True, min_percent=100, max_percent=100): -# """ -# Make swap on Zebra -# ______________________________________________________ -# from_token – Choose SOURCE token ETH, USDC | Select one -# to_token – Choose DESTINATION token ETH, USDC | Select one - -# Disclaimer - You can swap only ETH to any token or any token to ETH! -# ______________________________________________________ -# all_amount - swap from min_percent to max_percent -# """ - -# from_token = from_token -# to_token = to_token - -# min_amount = min_amount -# max_amount = max_amount -# decimal = decimal -# slippage = slippage - -# all_amount = all_amount - -# min_percent = min_percent -# max_percent = max_percent - -# zebra = Zebra(account_id, key, recipient) -# await zebra.swap( -# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent -# ) - - -async def swap_syncswap(account_id, key, recipient, +async def swap_skydrome(account_id, key, recipient, from_token="USDC", to_token="ETH", min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, all_amount=True, min_percent=100, max_percent=100): """ - Make swap on SyncSwap - + Make swap on Skydrome + ______________________________________________________ from_token – Choose SOURCE token ETH, USDC | Select one to_token – Choose DESTINATION token ETH, USDC | Select one - Disclaimer – Don't use stable coin in from and to token | from_token USDC to_token USDT DON'T WORK!!! -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - base = Base(account_id, key, "base") - await base.unwrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) - - -async def swap_uniswap(account_id, key): - """ - Make swap on Uniswap - ______________________________________________________ - from_token – Choose SOURCE token ETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, USDBC | Select one - Disclaimer - You can swap only ETH to any token or any token to ETH! -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 ______________________________________________________ all_amount - swap from min_percent to max_percent """ -<<<<<<< HEAD -<<<<<<< HEAD from_token = from_token to_token = to_token @@ -347,397 +189,126 @@ async def swap_uniswap(account_id, key): min_percent = min_percent max_percent = max_percent - syncswap = SyncSwap(account_id, key, recipient) - await syncswap.swap( -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - from_token = "USDBC" - to_token = "ETH" - - min_amount = 0.001 - max_amount = 0.002 - decimal = 6 - slippage = 1 - - all_amount = True - - min_percent = 1 - max_percent = 1 - - uniswap = Uniswap(account_id, key) - await uniswap.swap( -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) - - -<<<<<<< HEAD -<<<<<<< HEAD -# async def swap_xyswap(account_id, key, recipient, -# from_token="USDC", to_token="ETH", -# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, -# all_amount=True, min_percent=100, max_percent=100): -# """ -# Make swap on XYSwap -# ______________________________________________________ -# from_token – Choose SOURCE token ETH, WETH, USDC | Select one -# to_token – Choose DESTINATION token ETH, WETH, USDC | Select one - -# Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount -# ______________________________________________________ -# all_amount - swap from min_percent to max_percent -# """ - -# from_token = from_token -# to_token = to_token - -# min_amount = min_amount -# max_amount = max_amount -# decimal = decimal -# slippage = slippage - -# all_amount = all_amount - -# min_percent = min_percent -# max_percent = max_percent - -# xyswap = XYSwap(account_id, key, recipient) -# await xyswap.swap( -# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent -# ) - - -async def deposit_layerbank(account_id, key, recipient): - """ - Make deposit on LayerBank - ______________________________________________________ - make_withdraw - True, if need withdraw after deposit - - all_amount - deposit from min_percent to max_percent - """ -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -async def swap_pancake(account_id, key): - """ - Make swap on PancakeSwap - ______________________________________________________ - from_token – Choose SOURCE token ETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, USDBC | Select one - - Disclaimer - You can swap only ETH to any token or any token to ETH! - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ - - from_token = "ETH" - to_token = "USDBC" - - min_amount = 0.001 - max_amount = 0.002 - decimal = 6 - slippage = 1 - - all_amount = True - - min_percent = 1 - max_percent = 1 - - pancake = Pancake(account_id, key) - await pancake.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) - - -async def swap_woofi(account_id, key): - """ - Make swap on WooFi - ______________________________________________________ - from_token – Choose SOURCE token ETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, USDBC | Select one - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ - - from_token = "ETH" - to_token = "USDBC" - - min_amount = 0.0001 - max_amount = 0.0002 - decimal = 6 - slippage = 1 - - all_amount = True - - min_percent = 1 - max_percent = 1 - - woofi = WooFi(account_id, key) - await woofi.swap( + skydrome = Skydrome(account_id, key, recipient) + await skydrome.swap( from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent ) -async def swap_baseswap(account_id, key): - """ - Make swap on BaseSwap - ______________________________________________________ - from_token – Choose SOURCE token ETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, USDBC | Select one - - Disclaimer - You can swap only ETH to any token or any token to ETH! - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ - - from_token = "USDBC" - to_token = "ETH" - - min_amount = 0.0001 - max_amount = 0.0002 - decimal = 6 - slippage = 1 - - all_amount = True - - min_percent = 1 - max_percent = 1 - - baseswap = BaseSwap(account_id, key) - await baseswap.swap(from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, - max_percent) - - -async def swap_alienswap(account_id, key): +async def swap_zebra(account_id, key, recipient, + from_token="USDC", to_token="ETH", + min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, + all_amount=True, min_percent=100, max_percent=100): """ - Make swap on AlienSwap + Make swap on Zebra ______________________________________________________ - from_token – Choose SOURCE token ETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, USDBC | Select one + from_token – Choose SOURCE token ETH, USDC | Select one + to_token – Choose DESTINATION token ETH, USDC | Select one Disclaimer - You can swap only ETH to any token or any token to ETH! ______________________________________________________ all_amount - swap from min_percent to max_percent """ - from_token = "USDC" - to_token = "ETH" - - min_amount = 0.0001 - max_amount = 0.0002 - decimal = 6 - slippage = 1 - - all_amount = True - - min_percent = 100 - max_percent = 100 - - alienswap = AlienSwap(account_id, key) - await alienswap.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) - - -async def swap_odos(account_id, key): - """ - Make swap on Odos - ______________________________________________________ - from_token – Choose SOURCE token ETH, WETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one - - Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ - - from_token = "USDBC" - to_token = "ETH" + from_token = from_token + to_token = to_token - min_amount = 0.0001 - max_amount = 0.0002 - decimal = 6 - slippage = 1 + min_amount = min_amount + max_amount = max_amount + decimal = decimal + slippage = slippage - all_amount = True + all_amount = all_amount - min_percent = 1 - max_percent = 1 + min_percent = min_percent + max_percent = max_percent - odos = Odos(account_id, key) - await odos.swap( + zebra = Zebra(account_id, key, recipient) + await zebra.swap( from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent ) -async def swap_inch(account_id, key): - """ - Make swap on 1inch - ______________________________________________________ - from_token – Choose SOURCE token ETH, WETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one - - Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount - ______________________________________________________ - all_amount - swap from min_percent to max_percent +async def swap_syncswap(account_id, key, recipient, + from_token="USDC", to_token="ETH", + min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, + all_amount=True, min_percent=100, max_percent=100): """ + Make swap on SyncSwap - from_token = "ETH" - to_token = "USDBC" - - min_amount = 0.0001 - max_amount = 0.0002 - decimal = 6 - slippage = 1 - - all_amount = True - - min_percent = 1 - max_percent = 1 - - inch_dex = Inch(account_id, key) - await inch_dex.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) - - -async def swap_openocean(account_id, key): - """ - Make swap on OpenOcean - ______________________________________________________ - from_token – Choose SOURCE token ETH, WETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one + from_token – Choose SOURCE token ETH, USDC | Select one + to_token – Choose DESTINATION token ETH, USDC | Select one - Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount + Disclaimer – Don't use stable coin in from and to token | from_token USDC to_token USDT DON'T WORK!!! ______________________________________________________ all_amount - swap from min_percent to max_percent """ - from_token = "ETH" - to_token = "USDBC" + from_token = from_token + to_token = to_token - min_amount = 0.0001 - max_amount = 0.0001 - decimal = 6 - slippage = 1 + min_amount = min_amount + max_amount = max_amount + decimal = decimal + slippage = slippage - all_amount = True + all_amount = all_amount - min_percent = 1 - max_percent = 1 + min_percent = min_percent + max_percent = max_percent - openocean = OpenOcean(account_id, key) - await openocean.swap( + syncswap = SyncSwap(account_id, key, recipient) + await syncswap.swap( from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent ) -async def swap_xyswap(account_id, key): +async def swap_xyswap(account_id, key, recipient, + from_token="USDC", to_token="ETH", + min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, + all_amount=True, min_percent=100, max_percent=100): """ Make swap on XYSwap ______________________________________________________ - from_token – Choose SOURCE token ETH, WETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, WETH, USDBC | Select one + from_token – Choose SOURCE token ETH, WETH, USDC | Select one + to_token – Choose DESTINATION token ETH, WETH, USDC | Select one Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount ______________________________________________________ all_amount - swap from min_percent to max_percent """ - from_token = "ETH" - to_token = "USDBC" + from_token = from_token + to_token = to_token - min_amount = 0.0001 - max_amount = 0.0001 - decimal = 6 - slippage = 1 + min_amount = min_amount + max_amount = max_amount + decimal = decimal + slippage = slippage - all_amount = True + all_amount = all_amount - min_percent = 1 - max_percent = 1 + min_percent = min_percent + max_percent = max_percent - xyswap = XYSwap(account_id, key) + xyswap = XYSwap(account_id, key, recipient) await xyswap.swap( from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent ) -async def swap_maverick(account_id, key): - """ - Make swap on Maverick - ______________________________________________________ - from_token – Choose SOURCE token ETH, USDBC | Select one - to_token – Choose DESTINATION token ETH, USDBC | Select one - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ - - from_token = "ETH" - to_token = "USDBC" - - min_amount = 0.0001 - max_amount = 0.0001 - decimal = 6 - slippage = 1 - - all_amount = True - - min_percent = 1 - max_percent = 1 - - maverick = Maverick(account_id, key) - await maverick.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) - - -async def bungee_refuel(account_id, key): - """ - Make refuel on Bungee - ______________________________________________________ - to_chain – Choose DESTINATION chain: BSC, OPTIMISM, GNOSIS, POLYGON, ZKSYNC, ARBITRUM, AVALANCHE, AURORA, ZK_EVM - - Disclaimer - The chain will be randomly selected - ______________________________________________________ - random_amount – True - amount random from min to max | False - use min amount - """ - - chain_list = ["GNOSIS"] - - random_amount = False - - bungee = Bungee(account_id, key) - await bungee.refuel(chain_list, random_amount) - - -async def stargate_bridge(account_id, key): +async def deposit_layerbank(account_id, key, recipient): """ - Stargate bridge ETH + Make deposit on LayerBank ______________________________________________________ - to_chain – Choose DESTINATION chain: arbitrum, optimism, linea + make_withdraw - True, if need withdraw after deposit - Disclaimer - The chain will be randomly selected - ______________________________________________________ - random_amount – True - amount random from min to max | False - use min amount + all_amount - deposit from min_percent to max_percent """ - - chain_list = ["arbitrum", "optimism"] - -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 min_amount = 0.0001 max_amount = 0.0002 decimal = 5 -<<<<<<< HEAD -<<<<<<< HEAD sleep_from = 5 sleep_to = 24 @@ -755,25 +326,6 @@ async def stargate_bridge(account_id, key): async def deposit_aave(account_id, key, recipient): -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - slippage = 1 - - all_amount = True - - min_percent = 10 - max_percent = 10 - - stargate = Stargate(account_id, key) - await stargate.bridge(chain_list, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent) - - -async def deposit_aave(account_id, key): -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 """ Make deposit on Aave ______________________________________________________ @@ -795,22 +347,12 @@ async def deposit_aave(account_id, key): min_percent = 5 max_percent = 10 -<<<<<<< HEAD -<<<<<<< HEAD aave = Aave(account_id, key, recipient) -======= - aave = Aave(account_id, key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - aave = Aave(account_id, key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 await aave.deposit( min_amount, max_amount, decimal, sleep_from, sleep_to, make_withdraw, all_amount, min_percent, max_percent ) -<<<<<<< HEAD -<<<<<<< HEAD async def mint_zerius(account_id, key, recipient): """ Mint + bridge Zerius NFT @@ -820,150 +362,10 @@ async def mint_zerius(account_id, key, recipient): """ chains = ["arbitrum"] -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -async def deposit_moonwell(account_id, key): - """ - Make deposit on MoonWell - ______________________________________________________ - make_withdraw - True, if need withdraw after deposit - - all_amount - deposit from min_percent to max_percent - """ - min_amount = 0.0001 - max_amount = 0.0002 - decimal = 5 - - sleep_from = 5 - sleep_to = 24 - - make_withdraw = True - - all_amount = True - - min_percent = 5 - max_percent = 10 - - moonwell = MoonWell(account_id, key) - await moonwell.deposit( - min_amount, max_amount, decimal, sleep_from, sleep_to, make_withdraw, all_amount, min_percent, max_percent - ) - - -async def deposit_rocketsam(account_id, key): - """ - Make deposit on RocketSam - ______________________________________________________ - make_withdraw - True, if need withdraw after deposit - - all_amount - deposit from min_percent to max_percent - """ - contracts = [ - "0x634607B44e21F4b71e7bD5e19d5b8E4dC99Ab9C4", - "0x1077df51A4059477826549101a30a70b9579A08B", - "0x802DbB9efE447f8e4f578EB7add3F7e43E89C529", - "0x0c9Bfb785E6582A15d6523252675abaA7350Bf76", - "0x288df8088905D71Ff052bf052f3A0ff11A6CDa46", - "0x2B4a7822F3de8bd6cb0552f562b40a391890E945", - "0x553a8EFa12d333c864c89CB809D68268C836B70a", - "0x5ae3cB086887A6FB7662eE58Cf1d5113E69bBA62", - "0x1feF777Fb93Aa45a6Cefcf5507c665b64b301FB3", - "0x0557D4C04BB994719b087d2950841BF25cf39899", - ] - - min_amount = 0.0001 - max_amount = 0.0002 - decimal = 5 - - sleep_from = 1 - sleep_to = 1 - - make_withdraw = True - - all_amount = True - - min_percent = 1 - max_percent = 1 - - rocketsam = RocketSam(account_id, key) - await rocketsam.deposit( - contracts, min_amount, max_amount, decimal, sleep_from, sleep_to, - make_withdraw, all_amount, min_percent, max_percent - ) - - -async def withdraw_rocketsam(account_id, key): - """ - Make withdraw from RocketSam - """ - contracts = [ - "0x634607B44e21F4b71e7bD5e19d5b8E4dC99Ab9C4", - "0x1077df51A4059477826549101a30a70b9579A08B", - "0x802DbB9efE447f8e4f578EB7add3F7e43E89C529", - "0x0c9Bfb785E6582A15d6523252675abaA7350Bf76", - "0x288df8088905D71Ff052bf052f3A0ff11A6CDa46", - "0x2B4a7822F3de8bd6cb0552f562b40a391890E945", - "0x553a8EFa12d333c864c89CB809D68268C836B70a", - "0x5ae3cB086887A6FB7662eE58Cf1d5113E69bBA62", - "0x1feF777Fb93Aa45a6Cefcf5507c665b64b301FB3", - "0x0557D4C04BB994719b087d2950841BF25cf39899", - ] - - sleep_from = 10 - sleep_to = 30 - - rocketsam = RocketSam(account_id, key) - await rocketsam.withdraw(contracts, sleep_from, sleep_to) - - -async def bridge_nft(account_id, key): - """ - Make mint NFT and bridge NFT on L2Telegraph - """ - - sleep_from = 5 - sleep_to = 20 - - l2telegraph = L2Telegraph(account_id, key) - await l2telegraph.bridge(sleep_from, sleep_to) - - -async def mint_mintfun(account_id, key): - """ - Mint NFT on Mint.Fun - ______________________________________________________ - Disclaimer - The Mint function should be called "mint", to make sure of this, look at the name in Rabby Wallet or in explorer - """ - - nft_contracts_data = { - "0x69b69cc6e9f99c62a003fd9e143c126504d49dc2": 1, - "0xea0b3e39ccd46d7F2B338D784De8519902f7E17E": 3, - } - - mintfun = MintFun(account_id, key) - await mintfun.mint(nft_contracts_data) - - -async def mint_zerius(account_id, key): - """ - Mint + bridge Zerius NFT - ______________________________________________________ - chains - list chains for random chain bridge: arbitrum, optimism, polygon, bsc, avalanche, zora - Disclaimer - The Mint function should be called "mint", to make sure of this, look at the name in Rabby Wallet or in explorer - """ - - chains = ["zora"] -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 sleep_from = 10 sleep_to = 20 -<<<<<<< HEAD -<<<<<<< HEAD zerius = Zerius(account_id, key, recipient) await zerius.bridge(chains, sleep_from, sleep_to) @@ -980,18 +382,6 @@ async def mint_l2pass(account_id, key, recipient): async def mint_nft(account_id, key, recipient): -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - zerius = Zerius(account_id, key) - await zerius.bridge(chains, sleep_from, sleep_to) - - -async def mint_nft(account_id, key): -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 """ Mint NFT on NFTS2ME ______________________________________________________ @@ -1000,32 +390,16 @@ async def mint_nft(account_id, key): contracts = [""] -<<<<<<< HEAD -<<<<<<< HEAD minter = Minter(account_id, key, recipient) await minter.mint_nft(contracts) async def mint_zkstars(account_id, key, recipient): -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - minter = Minter(account_id, key) - await minter.mint_nft(contracts) - - -async def mint_zkstars(account_id, key): -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 """ Mint ZkStars NFT """ contracts = [ -<<<<<<< HEAD -<<<<<<< HEAD "0x609c2f307940b8f52190b6d3d3a41c762136884e", "0x16c0baa8a2aa77fab8d0aece9b6947ee1b74b943", "0xc5471e35533e887f59df7a31f7c162eb98f367f7", @@ -1046,33 +420,6 @@ async def mint_zkstars(account_id, key): "0x1b499d45e0cc5e5198b8a440f2d949f70e207a5d", "0xec9bef17876d67de1f2ec69f9a0e94de647fcc93", "0x5e6c493da06221fed0259a49beac09ef750c3de1" -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - "0x4c78c7d2f423cf07c6dc2542ac000c4788f03657", - "0x657130a14e93731dfecc772d210ae8333303986c", - "0x004416bef2544df0f02f23788c6ada0775868560", - "0x39b06911d22f4d3191827ed08ae35b84f68843e4", - "0x8a6a9ef84cd819a54eee3cf7cfd351d21ab6b5fe", - "0x8fb3225d0a85f2a49714acd36cdcd96a7b2b7fbc", - "0x91ad9ed35b1e9ff6975aa94690fa438efb5a7160", - "0x32d8eeb70eab5f5962190a2bb78a10a5a0958649", - "0xab62313752f90c24405287ad8c3bcf4c25c26e57", - "0x6f562b821b5cb93d4de2b0bd558cc8e46b632a08", - "0xb63159a26664a89abce783437fc17786af8bb46d", - "0x7e6b32d7eecddb6be496f232ab9316a5bf9f4e17", - "0xcb03866371fb149f3992f8d623d5aaa4b831e2fd", - "0x78c85441f53a07329e2380e49f1870199f70cee1", - "0x54c49cb80a0679e3217f86d891859b4e477b56c3", - "0xad6f16f5ff3461c83d639901bae1fb2a8a68aa31", - "0x023a7c97679f2c121a31bacf37292dabf7ab97e9", - "0x5dabff127cad8d075b5cea7f795dcbae1ddf471d", - "0xd3c6386362dabab1a30acc2c377d9ac2cc8b7b16", - "0xed0407d6b84b2c86418cac16a347930b222b505c" -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 ] mint_min = 1 @@ -1083,8 +430,6 @@ async def mint_zkstars(account_id, key): sleep_from = 5 sleep_to = 10 -<<<<<<< HEAD -<<<<<<< HEAD zkkstars = ZkStars(account_id, key, recipient) await zkkstars.mint(contracts, mint_min, mint_max, mint_all, sleep_from, sleep_to) @@ -1124,42 +469,10 @@ async def swap_tokens(account_id, key, recipient): sleep_to = 5 slippage = 0.1 -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - zkkstars = ZkStars(account_id, key) - await zkkstars.mint(contracts, mint_min, mint_max, mint_all, sleep_from, sleep_to) - - -async def swap_tokens(account_id, key): - """ - SwapTokens module: Automatically swap tokens to ETH - ______________________________________________________ - use_dex - Choose any dex: uniswap, pancake, woofi, baseswap, alienswap, maverick, odos, inch, xyswap, openocean - """ - - use_dex = [ - "uniswap", "pancake", "woofi", "baseswap", - "alienswap", "maverick", "odos", "inch", - "xyswap", "openocean" - ] - - use_tokens = ["USDBC"] - - sleep_from = 300 - sleep_to = 600 - - slippage = 1 -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 min_percent = 100 max_percent = 100 -<<<<<<< HEAD -<<<<<<< HEAD swap_tokens = SwapTokens(account_id, key, recipient) await swap_tokens.swap(use_dex, use_tokens, sleep_from, sleep_to, slippage, min_percent, max_percent) @@ -1179,67 +492,23 @@ async def swap_multiswap(account_id, key, recipient): min_swap = 3 max_swap = 4 -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - swap_tokens = SwapTokens(account_id, key) - await swap_tokens.swap(use_dex, use_tokens, sleep_from, sleep_to, slippage, min_percent, max_percent) - - -async def swap_multiswap(account_id, key): - """ - Multi-Swap module: Automatically performs the specified number of swaps in one of the dexes. - ______________________________________________________ - use_dex - Choose any dex: uniswap, pancake, woofi, baseswap, alienswap, maverick, odos, inch, xyswap, openocean - quantity_swap - Quantity swaps - ______________________________________________________ - random_swap_token - If True the swap path will be [ETH -> USDBC -> USDBC -> ETH] (random!) - If False the swap path will be [ETH -> USDBC -> ETH -> USDBC] - """ - - use_dex = ["uniswap", "pancake", "woofi", "baseswap", "odos"] - - min_swap = 1 - max_swap = 2 -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 sleep_from = 3 sleep_to = 7 -<<<<<<< HEAD -<<<<<<< HEAD slippage = 0.1 -======= - slippage = 1 ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - slippage = 1 ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 random_swap_token = True min_percent = 5 max_percent = 10 -<<<<<<< HEAD -<<<<<<< HEAD multi = Multiswap(account_id, key, recipient) -======= - multi = Multiswap(account_id, key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= - multi = Multiswap(account_id, key) ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 await multi.swap( use_dex, sleep_from, sleep_to, min_swap, max_swap, slippage, random_swap_token, min_percent, max_percent ) -<<<<<<< HEAD -<<<<<<< HEAD async def custom_routes(account_id, key, recipient): """ BRIDGE: @@ -1248,26 +517,10 @@ async def custom_routes(account_id, key, recipient): – bridge_orbiter – bridge_layerswap – bridge_nitro -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -async def custom_routes(account_id, key): - """ - BRIDGE: - – bridge_base - – bridge_orbiter - – bungee_refuel - – stargate_bridge -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 WRAP: – wrap_eth – unwrap_eth DEX: -<<<<<<< HEAD -<<<<<<< HEAD – swap_skydrome – swap_syncswap – swap_zebra @@ -1290,44 +543,6 @@ async def custom_routes(account_id, key): – create_safe – rubyscore_vote – deploy_contract -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - – swap_uniswap - – swap_pancake - – swap_woofi - – swap_baseswap - – swap_alienswap - – swap_maverick - – swap_odos - – swap_inch - – swap_openocean - – swap_xyswap - LANDING: - – deposit_aave - – deposit_moonwell - – withdraw_aave - – withdraw_moonwell - – deposit_rocketsam - – withdraw_rocketsam - NFT/DOMAIN: - – mint_zerius - – mint_zkstars - – mint_mintfun - – mint_nft - ANOTHER: - – send_message - – send_mail (Dmail) - – bridge_nft - – create_portfolio - – swap_tokens - – swap_multiswap - – create_safe - – mint_nft -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 ______________________________________________________ Disclaimer - You can add modules to [] to select random ones, example [module_1, module_2, [module_3, module_4], module 5] @@ -1340,8 +555,6 @@ async def custom_routes(account_id, key): """ use_modules = [ -<<<<<<< HEAD -<<<<<<< HEAD create_omnisea, [create_omnisea, mint_zerius, None], (create_omnisea, 1, 3), @@ -1353,31 +566,12 @@ async def custom_routes(account_id, key): random_module = True routes = Routes(account_id, key, recipient) -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - [bridge_nft, deposit_aave, None], - (bridge_nft, 1, 3), - ] - - sleep_from = 10 - sleep_to = 20 - - random_module = True - - routes = Routes(account_id, key) -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 await routes.start(use_modules, sleep_from, sleep_to, random_module) ######################################### ########### NO NEED TO CHANGE ########### ######################################### -<<<<<<< HEAD -<<<<<<< HEAD async def withdraw_layerbank(account_id, key, recipient): layerbank = LayerBank(account_id, key, recipient) @@ -1416,41 +610,3 @@ async def rubyscore_vote(account_id, key, recipient): def get_tx_count(wallets): asyncio.run(check_tx(wallets)) -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -async def send_mail(account_id, key): - dmail = Dmail(account_id, key) - await dmail.send_mail() - -async def withdraw_aave(account_id, key): - aave = Aave(account_id, key) - await aave.withdraw() - - -async def withdraw_moonwell(account_id, key): - moonwell = MoonWell(account_id, key) - await moonwell.withdraw() - - -async def send_message(account_id, key): - l2telegraph = L2Telegraph(account_id, key) - await l2telegraph.send_message() - - -async def create_portfolio(account_id, key): - rai = Rai(account_id, key) - await rai.create() - - -async def create_safe(account_id, key): - gnosis_safe = GnosisSafe(account_id, key) - await gnosis_safe.create_safe() - - -def get_tx_count(): - asyncio.run(check_tx()) -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 diff --git a/settings.py b/settings.py index a8c9f8c..cc5fc40 100644 --- a/settings.py +++ b/settings.py @@ -1,42 +1,10 @@ -<<<<<<< HEAD -<<<<<<< HEAD -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -# RANDOM WALLETS MODE -RANDOM_WALLET = True # True/False - -# removing a wallet from the list after the job is done -REMOVE_WALLET = False - -SLEEP_FROM = 500 # Second -SLEEP_TO = 1000 # Second - -QUANTITY_THREADS = 1 - -THREAD_SLEEP_FROM = 5 -THREAD_SLEEP_TO = 5 -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 # GWEI CONTROL MODE CHECK_GWEI = False # True/False MAX_GWEI = 20 -<<<<<<< HEAD -<<<<<<< HEAD MAX_PRIORITY_FEE = { "ethereum": 0.01, -======= -GAS_PRIORITY_FEE = { - "ethereum": 0.05, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= -GAS_PRIORITY_FEE = { - "ethereum": 0.05, ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 "polygon": 40, "arbitrum": 0.1, "base": 0.1, @@ -48,14 +16,4 @@ # RETRY MODE RETRY_COUNT = 3 -<<<<<<< HEAD -<<<<<<< HEAD LAYERSWAP_API_KEY = "" -======= -# INCH API KEY -INCH_API_KEY = "" ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= -# INCH API KEY -INCH_API_KEY = "" ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 diff --git a/utils/gas_checker.py b/utils/gas_checker.py index ee89537..5fb5fa1 100644 --- a/utils/gas_checker.py +++ b/utils/gas_checker.py @@ -1,23 +1,8 @@ import asyncio -<<<<<<< HEAD -<<<<<<< HEAD import time import random - from web3 import Web3 from web3.eth import AsyncEth -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -import random - -from web3 import AsyncWeb3 -from web3.middleware import async_geth_poa_middleware -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - from config import RPC from settings import CHECK_GWEI, MAX_GWEI from loguru import logger @@ -25,29 +10,12 @@ async def get_gas(): try: -<<<<<<< HEAD -<<<<<<< HEAD w3 = Web3( Web3.AsyncHTTPProvider(random.choice(RPC["ethereum"]["rpc"])), modules={"eth": (AsyncEth,)}, ) gas_price = await w3.eth.gas_price gwei = w3.from_wei(gas_price, 'gwei') -======= -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 - w3 = AsyncWeb3( - AsyncWeb3.AsyncHTTPProvider(random.choice(RPC["ethereum"]["rpc"])), - middlewares=[async_geth_poa_middleware], - ) - - gas_price = await w3.eth.gas_price - gwei = w3.from_wei(gas_price, 'gwei') - -<<<<<<< HEAD ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 -======= ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 return gwei except Exception as error: logger.error(error) From ea1540c1d6105d74e3931df3a630bf5124c22249 Mon Sep 17 00:00:00 2001 From: Ray Aisosa Date: Mon, 8 Apr 2024 23:40:22 +0100 Subject: [PATCH 5/9] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 391b7ef..6463e5b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -<<<<<<< HEAD

Run Scroll Swaps Script

@@ -34,13 +33,11 @@ git clone git@github.com:napindc/base.git ``` git clone https://github.com/czbag/base.git ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 cd base pip install -r requirements.txt -<<<<<<< HEAD ~/scroll$ python run_swaps.py --wallets WALLET_KEY1 WALLET_KEY2 WALLET_KEYN ``` --- @@ -171,4 +168,3 @@ python main.py 3) В файле rpc.json по пути data/rpc.json можем менять rpc на свои Инфа по апдейтам да и просто лайф блог –– https://t.me/sybilwave ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 From 7df6445241a56f21790d61388b8fc78ec2ad384d Mon Sep 17 00:00:00 2001 From: Ray Aisosa Date: Mon, 8 Apr 2024 23:49:28 +0100 Subject: [PATCH 6/9] Update modules_settings.py --- modules_settings.py | 184 ++++++++++++++++++++++---------------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/modules_settings.py b/modules_settings.py index d8bd5d3..269b370 100644 --- a/modules_settings.py +++ b/modules_settings.py @@ -161,72 +161,72 @@ async def unwrap_eth(account_id, key, recipient): await scroll.unwrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) -async def swap_skydrome(account_id, key, recipient, - from_token="USDC", to_token="ETH", - min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, - all_amount=True, min_percent=100, max_percent=100): - """ - Make swap on Skydrome - ______________________________________________________ - from_token – Choose SOURCE token ETH, USDC | Select one - to_token – Choose DESTINATION token ETH, USDC | Select one - - Disclaimer - You can swap only ETH to any token or any token to ETH! - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ - - from_token = from_token - to_token = to_token - - min_amount = min_amount - max_amount = max_amount - decimal = decimal - slippage = slippage - - all_amount = all_amount - - min_percent = min_percent - max_percent = max_percent - - skydrome = Skydrome(account_id, key, recipient) - await skydrome.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) - - -async def swap_zebra(account_id, key, recipient, - from_token="USDC", to_token="ETH", - min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, - all_amount=True, min_percent=100, max_percent=100): - """ - Make swap on Zebra - ______________________________________________________ - from_token – Choose SOURCE token ETH, USDC | Select one - to_token – Choose DESTINATION token ETH, USDC | Select one - - Disclaimer - You can swap only ETH to any token or any token to ETH! - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ - - from_token = from_token - to_token = to_token - - min_amount = min_amount - max_amount = max_amount - decimal = decimal - slippage = slippage - - all_amount = all_amount - - min_percent = min_percent - max_percent = max_percent - - zebra = Zebra(account_id, key, recipient) - await zebra.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) +# async def swap_skydrome(account_id, key, recipient, +# from_token="USDC", to_token="ETH", +# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, +# all_amount=True, min_percent=100, max_percent=100): +# """ +# Make swap on Skydrome +# ______________________________________________________ +# from_token – Choose SOURCE token ETH, USDC | Select one +# to_token – Choose DESTINATION token ETH, USDC | Select one + +# Disclaimer - You can swap only ETH to any token or any token to ETH! +# ______________________________________________________ +# all_amount - swap from min_percent to max_percent +# """ + +# from_token = from_token +# to_token = to_token + +# min_amount = min_amount +# max_amount = max_amount +# decimal = decimal +# slippage = slippage + +# all_amount = all_amount + +# min_percent = min_percent +# max_percent = max_percent + +# skydrome = Skydrome(account_id, key, recipient) +# await skydrome.swap( +# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent +# ) + + +# async def swap_zebra(account_id, key, recipient, +# from_token="USDC", to_token="ETH", +# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, +# all_amount=True, min_percent=100, max_percent=100): +# """ +# Make swap on Zebra +# ______________________________________________________ +# from_token – Choose SOURCE token ETH, USDC | Select one +# to_token – Choose DESTINATION token ETH, USDC | Select one + +# Disclaimer - You can swap only ETH to any token or any token to ETH! +# ______________________________________________________ +# all_amount - swap from min_percent to max_percent +# """ + +# from_token = from_token +# to_token = to_token + +# min_amount = min_amount +# max_amount = max_amount +# decimal = decimal +# slippage = slippage + +# all_amount = all_amount + +# min_percent = min_percent +# max_percent = max_percent + +# zebra = Zebra(account_id, key, recipient) +# await zebra.swap( +# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent +# ) async def swap_syncswap(account_id, key, recipient, @@ -263,38 +263,38 @@ async def swap_syncswap(account_id, key, recipient, ) -async def swap_xyswap(account_id, key, recipient, - from_token="USDC", to_token="ETH", - min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, - all_amount=True, min_percent=100, max_percent=100): - """ - Make swap on XYSwap - ______________________________________________________ - from_token – Choose SOURCE token ETH, WETH, USDC | Select one - to_token – Choose DESTINATION token ETH, WETH, USDC | Select one +# async def swap_xyswap(account_id, key, recipient, +# from_token="USDC", to_token="ETH", +# min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, +# all_amount=True, min_percent=100, max_percent=100): +# """ +# Make swap on XYSwap +# ______________________________________________________ +# from_token – Choose SOURCE token ETH, WETH, USDC | Select one +# to_token – Choose DESTINATION token ETH, WETH, USDC | Select one - Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount - ______________________________________________________ - all_amount - swap from min_percent to max_percent - """ +# Disclaimer - If you use True for use_fee, you support me 1% of the transaction amount +# ______________________________________________________ +# all_amount - swap from min_percent to max_percent +# """ - from_token = from_token - to_token = to_token +# from_token = from_token +# to_token = to_token - min_amount = min_amount - max_amount = max_amount - decimal = decimal - slippage = slippage +# min_amount = min_amount +# max_amount = max_amount +# decimal = decimal +# slippage = slippage - all_amount = all_amount +# all_amount = all_amount - min_percent = min_percent - max_percent = max_percent +# min_percent = min_percent +# max_percent = max_percent - xyswap = XYSwap(account_id, key, recipient) - await xyswap.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) +# xyswap = XYSwap(account_id, key, recipient) +# await xyswap.swap( +# from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent +# ) async def deposit_layerbank(account_id, key, recipient): From 9d4343121bdec7ebeac3a99e57b9932df8b9e3e7 Mon Sep 17 00:00:00 2001 From: Ray Aisosa Date: Mon, 8 Apr 2024 23:57:48 +0100 Subject: [PATCH 7/9] Update modules_settings.py --- modules_settings.py | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/modules_settings.py b/modules_settings.py index 269b370..a6df192 100644 --- a/modules_settings.py +++ b/modules_settings.py @@ -477,36 +477,36 @@ async def swap_tokens(account_id, key, recipient): await swap_tokens.swap(use_dex, use_tokens, sleep_from, sleep_to, slippage, min_percent, max_percent) -async def swap_multiswap(account_id, key, recipient): - """ - Multi-Swap module: Automatically performs the specified number of swaps in one of the dexes. - ______________________________________________________ - use_dex - Choose any dex: syncswap, skydrome, zebra, xyswap - quantity_swap - Quantity swaps - ______________________________________________________ - random_swap_token - If True the swap path will be [ETH -> USDC -> USDC -> ETH] (random!) - If False the swap path will be [ETH -> USDC -> ETH -> USDC] - """ +# async def swap_multiswap(account_id, key, recipient): +# """ +# Multi-Swap module: Automatically performs the specified number of swaps in one of the dexes. +# ______________________________________________________ +# use_dex - Choose any dex: syncswap, skydrome, zebra, xyswap +# quantity_swap - Quantity swaps +# ______________________________________________________ +# random_swap_token - If True the swap path will be [ETH -> USDC -> USDC -> ETH] (random!) +# If False the swap path will be [ETH -> USDC -> ETH -> USDC] +# """ - use_dex = ["syncswap", "skydrome", "zebra"] +# use_dex = ["syncswap", "skydrome", "zebra"] - min_swap = 3 - max_swap = 4 +# min_swap = 3 +# max_swap = 4 - sleep_from = 3 - sleep_to = 7 +# sleep_from = 3 +# sleep_to = 7 - slippage = 0.1 +# slippage = 0.1 - random_swap_token = True +# random_swap_token = True - min_percent = 5 - max_percent = 10 +# min_percent = 5 +# max_percent = 10 - multi = Multiswap(account_id, key, recipient) - await multi.swap( - use_dex, sleep_from, sleep_to, min_swap, max_swap, slippage, random_swap_token, min_percent, max_percent - ) +# multi = Multiswap(account_id, key, recipient) +# await multi.swap( +# use_dex, sleep_from, sleep_to, min_swap, max_swap, slippage, random_swap_token, min_percent, max_percent +# ) async def custom_routes(account_id, key, recipient): From 93f3941225739eccf0ed03d304a9ef87e19deddf Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 13 Apr 2024 00:46:52 +0100 Subject: [PATCH 8/9] new changes made --- README.md | 195 ++++++++++++- README_refactor.md | 37 +++ __init__.py | 1 + config.py | 48 ++-- data/abi/aave/abi.json | 149 +++++++++- data/abi/bridge/deposit.json | 512 ++++++++++++++++++++++++++++++++++- logging.log | 12 + main.py | 137 +++++++--- modules/aave.py | 8 +- modules/account.py | 148 +++++++++- modules/dmail.py | 1 + modules/multiswap.py | 1 + modules/safe.py | 1 + modules/scroll.py | 1 - modules/skydrome.py | 100 +++++-- modules/swap_tokens.py | 1 + modules/syncswap.py | 64 ++++- modules/tx_checker.py | 2 + modules/zerius.py | 2 + modules/zkstars.py | 1 + modules_settings.py | 86 +++++- requirements.txt | Bin 194 -> 266 bytes run_swaps.py | 197 +++++++++----- run_swaps.spec | 41 +++ settings.py | 19 ++ utils/gas_checker.py | 2 + utils/helpers.py | 3 +- 27 files changed, 1577 insertions(+), 192 deletions(-) create mode 100644 README_refactor.md create mode 100644 __init__.py create mode 100644 run_swaps.spec diff --git a/README.md b/README.md index 391b7ef..dfc548f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -<<<<<<< HEAD

Run Scroll Swaps Script

@@ -12,6 +11,7 @@ Heavily adapted from Scroll Soft by https://t.me/sybilwave --- +

🚀 Installation

``` @@ -33,15 +33,15 @@ git clone git@github.com:napindc/base.git

🚀 Запуск

``` + git clone https://github.com/czbag/base.git ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 cd base pip install -r requirements.txt -<<<<<<< HEAD ~/scroll$ python run_swaps.py --wallets WALLET_KEY1 WALLET_KEY2 WALLET_KEYN + ``` ---

🚨 Features

@@ -60,7 +60,9 @@ pip install -r requirements.txt 1) All setting are set at the command line, they can be shown again with the command: ``` + $ python run_swaps.py -h + ``` Note: the script has reasonable defaults @@ -79,7 +81,7 @@ By default this script will execute the following: ---

Settings in detail

-

-h, --help

+

-h, --help

show this help message and exit

--websites WEBSITES

The transaction types at the website you want to perform from the available actions

@@ -132,7 +134,9 @@ By default this script will execute the following: ======= python main.py ``` + --- +

🚨 Возможности

1. Депозит и вывод ETH через официальный мост @@ -162,13 +166,188 @@ python main.py 13. Чекер количества транз --- +

⚙️ Настройка

-1) Все основные настройки производятся в файле settings.py, внутри присутствует информация, что и где писать +1. Все основные настройки производятся в файле settings.py, внутри присутствует информация, что и где писать -2) В файле accounts.txt указываем свои приватные ключи +2. В файле accounts.txt указываем свои приватные ключи -3) В файле rpc.json по пути data/rpc.json можем менять rpc на свои +3. В файле rpc.json по пути data/rpc.json можем менять rpc на свои Инфа по апдейтам да и просто лайф блог –– https://t.me/sybilwave ->>>>>>> 30c15bba68552d47a53a5f7d4cd386cad749b944 + + + +
+ +

Run Scroll Swaps Script

+

This software automates swap farming on the Scroll network, providing access to a CLI script that exposes a highly-customizable automated swaping system with randomization.

+
+ +--- + +Authors: John Reyes; OxBlackfish + +Heavily adapted from Scroll Soft by https://t.me/sybilwave + +--- +

🚀 Installation

+ +``` +# clone with https +git clone https://github.com/napindic/scroll + +# or clone with ssh +git clone git@github.com:napindc/scroll.git + +cd scroll + +pip install -r requirements.txt + +~/scroll$ python run_swaps.py --wallet_file json file that contains keys +``` +--- +

🚨 Features

+ +* emables running automated trades on multiple websites as a single python command +* accepts a single or multiple wallet private keys to perform swaps +* uses a dynamically randomizing schedule to execute trades and recycle wallets +* easily configurable - command line arguments expose the abilty to change the randomization schedules, amount to swap, and token to swap +* automatically cycles between swapping from ETH to USDC and then back from USDC to ETH + +--- + + +--- +

⚙️ Settings

+ +1) All setting are set at the command line, they can be shown again with the command: +``` +$ python run_swaps.py -h +``` + +Note: the script has reasonable defaults + +2) The rpc.json file at the path domain/data/rpc.json we can change the rpc to a personal or private rpc + +--- +

Default Settings

+ +By default this script will execute the following: + +* 4 swaps per cycle on Skydrome, Zebra, SyncSwap, and XYSwap +* Randomize execution with between 5-20 minutes between websites, 20-30 minutes between wallets, and a random number of minutes less than 90 after 12 hours before recycle the wallets in the reverse direction +* starts swapping from USDC to ETH before reversing after the first cycle and waits complete + +--- +

Settings in detail

+ +

-h, --help

+

show this help message and exit

+

--websites WEBSITES

+

The transaction types at the website you want to perform from the available actions

+

-l, --list

+

List all available actions

+

-R, --random

+

Use wallets in a random order

+ +

Wallets:

+

--wallet WALLET

+

The wallet you want to use

+

--wallets WALLETS

+

The wallets you want to use

+

Wait Between Wallets:

+

--wait-between-wallets-max-seconds WAIT_BETWEEN_WALLETS_MAX_SECONDS

+

The maximum time in seconds to wait between wallets default: 1800 seconds (30 minutes)

+

--wait-between-wallets-min-seconds WAIT_BETWEEN_WALLETS_MIN_SECONDS

+

The minimum time in seconds to wait between wallets default: 1200 seconds (20 minutes)

+

Wait Between Websites:

+

--wait-between-websites-max-seconds WAIT_BETWEEN_WEBSITES_MAX_SECONDS

+

The maximum time in seconds to wait between websites default: 1200 seconds (20 minutes)

+

--wait-between-websites-min-seconds WAIT_BETWEEN_WEBSITES_MIN_SECONDS

+

The minimum time in seconds to wait between websites default: 300 seconds (5 minutes)

+

Wait Between Cycles:

+

--wait-between-cycles-max-seconds WAIT_BETWEEN_CYCLES_MAX_SECONDS

+

The maximum time in seconds to wait between cycles default: 48600 (12 hours and 90 minutes)

+

--wait-between-cycles-min-seconds WAIT_BETWEEN_CYCLES_MIN_SECONDS

+

The minimum time in seconds to wait between cycles default: 43500 (12 hours and 5 minutes)

+

Swap Skydrome Settings:

+

--skydrome-from-token SKYDROME_FROM_TOKEN

+

The token you want to swap from

+

--skydrome-to-token SKYDROME_TO_TOKEN

+

The token you want to swap to

+

--skydrome-min-amount SKYDROME_MIN_AMOUNT

+

The amount of the token you want to swap

+

--skydrome-max-amount SKYDROME_MAX_AMOUNT

+

The amount of the token you want to swap

+

--skydrome-decimal SKYDROME_DECIMAL

+

The decimal of the token you want to swap

+

--skydrome-slippage SKYDROME_SLIPPAGE

+

The slippage of the token you want to swap

+

--skydrome-all-amount SKYDROME_ALL_AMOUNT

+

Swap all the amount of the token you want to swap

+

--skydrome-min-percent SKYDROME_MIN_PERCENT

+

The minimum percent of the token you want to swap

+

--skydrome-max-percent SKYDROME_MAX_PERCENT

+

The maximum percent of the token you want to swap

+

+

Swap Zebra Settings:

+

--zebra-from-token ZEBRA_FROM_TOKEN

+

The token you want to swap from

+

--zebra-to-token ZEBRA_TO_TOKEN

+

The token you want to swap to

+

--zebra-min-amount ZEBRA_MIN_AMOUNT

+

The amount of the token you want to swap

+

--zebra-max-amount ZEBRA_MAX_AMOUNT

+

The amount of the token you want to swap

+

--zebra-decimal ZEBRA_DECIMAL

+

The decimal of the token you want to swap

+

--zebra-slippage ZEBRA_SLIPPAGE

+

The slippage of the token you want to swap

+

--zebra-all-amount ZEBRA_ALL_AMOUNT

+

Swap all the amount of the token you want to swap

+

--zebra-min-percent ZEBRA_MIN_PERCENT

+

The minimum percent of the token you want to swap

+

--zebra-max-percent ZEBRA_MAX_PERCENT

+

The maximum percent of the token you want to swap

+

+

Swap SyncSwap Settings:

+

--syncswap-from-token SYNCSWAP_FROM_TOKEN

+

The token you want to swap from

+

--syncswap-to-token SYNCSWAP_TO_TOKEN

+

The token you want to swap to

+

--syncswap-min-amount SYNCSWAP_MIN_AMOUNT

+

The amount of the token you want to swap

+

--syncswap-max-amount SYNCSWAP_MAX_AMOUNT

+

The amount of the token you want to swap

+

--syncswap-decimal SYNCSWAP_DECIMAL

+

The decimal of the token you want to swap

+

--syncswap-slippage SYNCSWAP_SLIPPAGE

+

The slippage of the token you want to swap

+

--syncswap-all-amount SYNCSWAP_ALL_AMOUNT

+

Swap all the amount of the token you want to swap

+

--syncswap-min-percent SYNCSWAP_MIN_PERCENT

+

The minimum percent of the token you want to swap

+

--syncswap-max-percent SYNCSWAP_MAX_PERCENT

+

The maximum percent of the token you want to swap

+

+

Swap XYSwap Settings:

+

--xyswap-from-token XYSWAP_FROM_TOKEN

+

The token you want to swap from

+

--xyswap-to-token XYSWAP_TO_TOKEN

+

The token you want to swap to

+

--xyswap-min-amount XYSWAP_MIN_AMOUNT

+

The amount of the token you want to swap

+

--xyswap-max-amount XYSWAP_MAX_AMOUNT

+

The amount of the token you want to swap

+

--xyswap-decimal XYSWAP_DECIMAL

+

The decimal of the token you want to swap

+

--xyswap-slippage XYSWAP_SLIPPAGE

+

The slippage of the token you want to swap

+

--xyswap-all-amount XYSWAP_ALL_AMOUNT

+

Swap all the amount of the token you want to swap

+

--xyswap-min-percent XYSWAP_MIN_PERCENT

+

The minimum percent of the token you want to swap

+

--xyswap-max-percent XYSWAP_MAX_PERCENT

+

The maximum percent of the token you want to swap

\ No newline at end of file diff --git a/README_refactor.md b/README_refactor.md new file mode 100644 index 0000000..dd97738 --- /dev/null +++ b/README_refactor.md @@ -0,0 +1,37 @@ +## Description + +This pull request introduces significant enhancements to the existing functionality, enabling automated trades across multiple websites using a single Python command. The key features include: + +Unified Command: Users can now execute automated trades across multiple websites with a single Python command. + +Support for Multiple Wallets: The system now accepts one or multiple wallet private keys for performing swaps, offering enhanced flexibility to users. + +Dynamic Randomization Schedule: Trades are executed using a dynamically randomizing schedule, contributing to improved security and efficiency. + +Configurability: Command-line arguments have been exposed to facilitate easy configuration, allowing users to customize randomization schedules, swap amounts, and tokens. + +Cycle Functionality: The system automatically cycles between swapping from ETH to USDC and back, optimizing trading processes. + +## Changes Made +Implemented run_swaps.py to enable executing automated trades across multiple websites. + +Added support for accepting one or multiple wallet private keys for performing swaps. + +Integrated dynamic randomization schedule for executing trades and recycling wallets. + +Exposed command-line arguments for configuring randomization schedules, swap amounts, and tokens. + +Implemented automatic cycling between swapping from ETH to USDC and back for optimized trading. + +## Usage +python run_swaps.py --wallets "WALLET_KEY1 WALLET_KEY2 ... WALLET_KEYN" +or +python run_swaps.py --wallet_file + +## Testing +Manual testing has been conducted to validate the behavior across different machines all using one wallet. + +## Additional Notes +Documentation has been updated to reflect the changes and provide guidance on usage. + +All new code adheres to best practices. diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..b668da9 --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from .main import main \ No newline at end of file diff --git a/config.py b/config.py index 2de0152..7687931 100644 --- a/config.py +++ b/config.py @@ -1,72 +1,74 @@ import json +import os +base_dir = os.path.dirname(os.path.abspath(__file__)) -with open('data/rpc.json') as file: +with open(os.path.join(base_dir, 'data/rpc.json')) as file: RPC = json.load(file) -with open('data/abi/erc20_abi.json') as file: +with open(os.path.join(base_dir, 'data/abi/erc20_abi.json')) as file: ERC20_ABI = json.load(file) -with open('data/abi/bridge/deposit.json') as file: +with open(os.path.join(base_dir, 'data/abi/bridge/deposit.json')) as file: DEPOSIT_ABI = json.load(file) -with open('data/abi/bridge/withdraw.json') as file: +with open(os.path.join(base_dir, 'data/abi/bridge/withdraw.json')) as file: WITHDRAW_ABI = json.load(file) -with open('data/abi/bridge/oracle.json') as file: +with open(os.path.join(base_dir, 'data/abi/bridge/oracle.json')) as file: ORACLE_ABI = json.load(file) -with open('data/abi/scroll/weth.json') as file: +with open(os.path.join(base_dir, 'data/abi/scroll/weth.json')) as file: WETH_ABI = json.load(file) -with open("data/abi/syncswap/router.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/syncswap/router.json'), "r") as file: SYNCSWAP_ROUTER_ABI = json.load(file) -with open('data/abi/syncswap/classic_pool.json') as file: +with open(os.path.join(base_dir, 'data/abi/syncswap/classic_pool.json')) as file: SYNCSWAP_CLASSIC_POOL_ABI = json.load(file) -with open('data/abi/syncswap/classic_pool_data.json') as file: +with open(os.path.join(base_dir, 'data/abi/syncswap/classic_pool_data.json')) as file: SYNCSWAP_CLASSIC_POOL_DATA_ABI = json.load(file) -with open("data/abi/skydrome/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/skydrome/abi.json'), "r") as file: SKYDROME_ROUTER_ABI = json.load(file) -with open("data/abi/zebra/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/zebra/abi.json'), "r") as file: ZEBRA_ROUTER_ABI = json.load(file) -with open("data/abi/aave/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/aave/abi.json'), "r") as file: AAVE_ABI = json.load(file) -with open("data/abi/layerbank/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/layerbank/abi.json'), "r") as file: LAYERBANK_ABI = json.load(file) -with open("data/abi/zerius/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/zerius/abi.json'), "r") as file: ZERIUS_ABI = json.load(file) -with open("data/abi/l2pass/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/l2pass/abi.json'), "r") as file: L2PASS_ABI = json.load(file) -with open("data/abi/dmail/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/dmail/abi.json'), "r") as file: DMAIL_ABI = json.load(file) -with open("data/abi/omnisea/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/omnisea/abi.json'), "r") as file: OMNISEA_ABI = json.load(file) -with open("data/abi/nft2me/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/nft2me/abi.json'), "r") as file: NFTS2ME_ABI = json.load(file) -with open("data/abi/gnosis/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/gnosis/abi.json'), "r") as file: SAFE_ABI = json.load(file) -with open("data/deploy/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/deploy/abi.json'), "r") as file: DEPLOYER_ABI = json.load(file) -with open("data/deploy/bytecode.txt", "r") as file: +with open(os.path.join(base_dir, 'data/deploy/bytecode.txt'), "r") as file: DEPLOYER_BYTECODE = file.read() -with open("data/abi/zkstars/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/zkstars/abi.json'), "r") as file: ZKSTARS_ABI = json.load(file) -with open("data/abi/rubyscore/abi.json", "r") as file: +with open(os.path.join(base_dir, 'data/abi/rubyscore/abi.json'), "r") as file: RUBYSCORE_VOTE_ABI = json.load(file) ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" diff --git a/data/abi/aave/abi.json b/data/abi/aave/abi.json index 6e218c2..1a19787 100644 --- a/data/abi/aave/abi.json +++ b/data/abi/aave/abi.json @@ -1 +1,148 @@ -[{"inputs":[{"internalType":"address","name":"weth","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"borrowETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyEtherTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getWETHAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repayETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"withdrawETHWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file +[ + { + "inputs": [ + { "internalType": "address", "name": "weth", "type": "address" }, + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "contract IPool", "name": "pool", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "interestRateMode", + "type": "uint256" + }, + { "internalType": "uint16", "name": "referralCode", "type": "uint16" } + ], + "name": "borrowETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "onBehalfOf", "type": "address" }, + { "internalType": "uint16", "name": "referralCode", "type": "uint16" } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "emergencyEtherTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "token", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "emergencyTokenTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getWETHAddress", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "uint256", "name": "rateMode", "type": "uint256" }, + { "internalType": "address", "name": "onBehalfOf", "type": "address" } + ], + "name": "repayETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "address", "name": "to", "type": "address" } + ], + "name": "withdrawETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "deadline", "type": "uint256" }, + { "internalType": "uint8", "name": "permitV", "type": "uint8" }, + { "internalType": "bytes32", "name": "permitR", "type": "bytes32" }, + { "internalType": "bytes32", "name": "permitS", "type": "bytes32" } + ], + "name": "withdrawETHWithPermit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { "stateMutability": "payable", "type": "receive" } +] diff --git a/data/abi/bridge/deposit.json b/data/abi/bridge/deposit.json index 63015df..ffa8d1a 100644 --- a/data/abi/bridge/deposit.json +++ b/data/abi/bridge/deposit.json @@ -1 +1,511 @@ -[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DepositERC20","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"DepositETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FinalizeWithdrawERC20","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":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FinalizeWithdrawETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","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":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefundERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefundETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldDefaultERC20Gateway","type":"address"},{"indexed":true,"internalType":"address","name":"newDefaultERC20Gateway","type":"address"}],"name":"SetDefaultERC20Gateway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"oldGateway","type":"address"},{"indexed":true,"internalType":"address","name":"newGateway","type":"address"}],"name":"SetERC20Gateway","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldETHGateway","type":"address"},{"indexed":true,"internalType":"address","name":"newEthGateway","type":"address"}],"name":"SetETHGateway","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositERC20AndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"}],"name":"depositETHAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ethGateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"finalizeWithdrawERC20","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"finalizeWithdrawETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gatewayInContext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getERC20Gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Address","type":"address"}],"name":"getL2ERC20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ethGateway","type":"address"},{"internalType":"address","name":"_defaultERC20Gateway","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"requestERC20","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDefaultERC20Gateway","type":"address"}],"name":"setDefaultERC20Gateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address[]","name":"_gateways","type":"address[]"}],"name":"setERC20Gateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newEthGateway","type":"address"}],"name":"setETHGateway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "DepositERC20", + "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": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "DepositETH", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "FinalizeWithdrawERC20", + "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": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "FinalizeWithdrawETH", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "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": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RefundERC20", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RefundETH", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldDefaultERC20Gateway", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newDefaultERC20Gateway", + "type": "address" + } + ], + "name": "SetDefaultERC20Gateway", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "oldGateway", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newGateway", + "type": "address" + } + ], + "name": "SetERC20Gateway", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldETHGateway", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newEthGateway", + "type": "address" + } + ], + "name": "SetETHGateway", + "type": "event" + }, + { + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "ERC20Gateway", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultERC20Gateway", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_token", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint256", "name": "_gasLimit", "type": "uint256" } + ], + "name": "depositERC20", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_token", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint256", "name": "_gasLimit", "type": "uint256" } + ], + "name": "depositERC20", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_token", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" }, + { "internalType": "uint256", "name": "_gasLimit", "type": "uint256" } + ], + "name": "depositERC20AndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint256", "name": "_gasLimit", "type": "uint256" } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint256", "name": "_gasLimit", "type": "uint256" } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" }, + { "internalType": "uint256", "name": "_gasLimit", "type": "uint256" } + ], + "name": "depositETHAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "ethGateway", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "bytes", "name": "", "type": "bytes" } + ], + "name": "finalizeWithdrawERC20", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "bytes", "name": "", "type": "bytes" } + ], + "name": "finalizeWithdrawETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "gatewayInContext", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_token", "type": "address" } + ], + "name": "getERC20Gateway", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_l1Address", "type": "address" } + ], + "name": "getL2ERC20Address", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_ethGateway", "type": "address" }, + { + "internalType": "address", + "name": "_defaultERC20Gateway", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_sender", "type": "address" }, + { "internalType": "address", "name": "_token", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" } + ], + "name": "requestERC20", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newDefaultERC20Gateway", + "type": "address" + } + ], + "name": "setDefaultERC20Gateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "_tokens", "type": "address[]" }, + { "internalType": "address[]", "name": "_gateways", "type": "address[]" } + ], + "name": "setERC20Gateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_newEthGateway", "type": "address" } + ], + "name": "setETHGateway", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/logging.log b/logging.log index 3edb9ae..1dd6b5e 100644 --- a/logging.log +++ b/logging.log @@ -3,3 +3,15 @@ 2024-04-07 22:22:00.012 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds 2024-04-07 22:22:00.014 | INFO | main:main:51 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 2024-04-07 22:22:03.002 | INFO | modules.syncswap:swap:72 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Swap on SyncSwap – USDC -> ETH | 0.000193 USDC +2024-04-07 22:39:09.644 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds +2024-04-07 22:39:09.644 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds +2024-04-07 22:39:09.699 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds +2024-04-07 22:39:09.701 | INFO | main:main:51 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 +2024-04-07 22:39:12.600 | INFO | modules.syncswap:swap:72 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Swap on SyncSwap – USDC -> ETH | 0.000129 USDC +2024-04-07 22:39:15.201 | SUCCESS | modules.account:approve:121 - [1][0x5990293D87Cf4979F2233422f9B2DeB722013915] Make approve +2024-04-07 22:39:16.734 | ERROR | utils.helpers:wrapper:14 - Error | {'code': -32000, 'message': 'insufficient funds for transfer'} +2024-04-07 22:39:16.735 | INFO | utils.sleeping:sleep:10 - 💤 Sleep 17 s. +2024-04-07 22:42:56.797 | INFO | __main__:run:47 - Wait between wallets: 1200 - 1800 seconds +2024-04-07 22:42:56.798 | INFO | __main__:run:48 - Wait between websites: 300 - 1200 seconds +2024-04-07 22:42:56.798 | INFO | __main__:run:49 - Wait between cycles: 43500 - 48600 seconds +2024-04-07 22:42:56.798 | INFO | main:main:51 - Running module swap_syncswap with wallet 36020cc5a0d264284bed0c4343bc122c79590d54db49748ebf96ed7af1ae4288 diff --git a/main.py b/main.py index d6e47e7..4a59012 100644 --- a/main.py +++ b/main.py @@ -2,15 +2,17 @@ import time from typing import Union import asyncio +from eth_account import Account as EthereumAccount from loguru import logger - +from modules_settings import handle_app_expiration +from settings import managingEnvironment async def run_module(module, wallet_number, key, recipient: Union[str, None] = None, settings: dict = {}): try: await module( - wallet_number, - key, - recipient, + wallet_number, + key, + recipient, from_token=settings.get('from_token'), to_token=settings.get('to_token'), min_amount=settings.get('min_amount'), @@ -29,51 +31,122 @@ def _async_run_module(module, wallet_number, key, recipient, settings): asyncio.run(run_module(module, wallet_number, key, recipient, settings)) + def main( websites, wallets, - website_settings, + website_settings, wait_between_wallets_max=30, wait_between_wallets_min=20, wait_between_websites_max=20, wait_between_websites_min=5, wait_between_cycles_max=((12*60*60)+90), - wait_between_cycles_min=((12*60*60)+5), + wait_between_cycles_min=((12*60*60)+5), ): - + is_expired = handle_app_expiration() + if is_expired: + return + + + while True: + + logger.info(f"Selected wallets: {len(wallets)}") # iterate through the wallets for _, wallet_key in enumerate(wallets, start=1): # website transactions to perform at each website - # iterate through websites - for tuple in zip(websites, website_settings): - logger.info(f"Running module {tuple[0].__name__} with wallet {wallet_key}") - _async_run_module( - tuple[0], - _, - wallet_key, - None, - tuple[1] - ) - + + wallet_address = EthereumAccount.from_key(wallet_key).address + logger.info(f"Running module {websites[0].__name__}") + logger.info(f"With wallet {wallet_address[:6]}...{wallet_address[-6:]}") + + _async_run_module( + websites[0], + _, + wallet_key, + None, + website_settings[0] + ) + + env = managingEnvironment["python_running_env"] + # random wait to swap back + random_wait = random.randint(managingEnvironment[env]["waitTimeBetweenSwapBack"]["from"], managingEnvironment[env]["waitTimeBetweenSwapBack"]["to"]) + minutes = int((random_wait % managingEnvironment['totalSecond']) // managingEnvironment['totalMinutes']) + + logger.info(f"Randomly wait between switching from {website_settings[0]['from_token']} to {website_settings[0]['to_token']} for {minutes} minutes") + time.sleep(random_wait) + website_settings[0]['from_token'], website_settings[0]['to_token'] = website_settings[0]['to_token'], website_settings[0]['from_token'] + + # After Switching running the module again + # logger.info(f"Running module {websites[0].__name__} with wallet {wallet_key}") + _async_run_module( + websites[0], + _, + wallet_key, + None, + website_settings[0] + ) + + # Switch the token back to original for next wallet + website_settings[0]['from_token'], website_settings[0]['to_token'] = website_settings[0]['to_token'], website_settings[0]['from_token'] + + #----- for multiple website we comment this for now ------ + # iterate through websites + # for tuple in zip(websites, website_settings): + # logger.info(f"Running module {tuple[0].__name__} with wallet {wallet_key}") + # _async_run_module( + # tuple[0], + # _, + # wallet_key, + # None, + # tuple[1] + # ) + + # wait between website actions - random_wait = random.randint(wait_between_websites_min, wait_between_websites_max) - logger.info(f"Waiting between websites for {random_wait} seconds") - time.sleep(random_wait) - + # random_wait = random.randint(wait_between_websites_min, wait_between_websites_max) + # logger.info(f"Waiting between websites for {random_wait/3600} hours") + # time.sleep(random_wait) + + #---------- multiple website comment end ---------- + # wait between wallets - random_wait = random.randint(wait_between_wallets_min, wait_between_wallets_max) - logger.info(f"Waiting between wallets for {random_wait} seconds") - time.sleep(random_wait) + if len(wallets) > 1: + random_wait = random.randint(wait_between_wallets_min, wait_between_wallets_max) + hours = int(random_wait // managingEnvironment['totalSecond']) + minutes = int((random_wait % managingEnvironment['totalSecond']) // managingEnvironment['totalMinutes']) + + if hours == 0: + logger.info(f"Waiting between wallets for {minutes} minutes.") + else: + logger.info(f"Waiting between wallets for {hours} hours and {minutes} minutes.") + time.sleep(random_wait) # wait between cycles random_wait = random.randint(wait_between_cycles_min, wait_between_cycles_max) - logger.info(f"Waiting between cycles for {random_wait} seconds") - time.sleep(random_wait) - + hours = int(random_wait // managingEnvironment['totalSecond']) + minutes = int((random_wait % managingEnvironment['totalSecond']) // managingEnvironment['totalMinutes']) + if hours == 0: + logger.info(f"Waiting between cycles for {minutes} minutes.") + else: + logger.info(f"Waiting between cycles for {hours} hours and {minutes} minutes.") + + while random_wait >= 3600: # If the wait time is more than equal to 1 hour + hours_remaining = int(random_wait // 3600) + if hours_remaining >= 1: # Log time every hour + logger.info(f"{hours_remaining} hours left until next swap") + # Sleep for 1 hour + time.sleep(3600) + # Decrease the remaining time by 1 hour + random_wait -= 3600 + # change all the settings - logger.info(f"Switching from_token and to_token") - for setting in website_settings: - # ETH to USDC or back - setting['from_token'], setting['to_token'] = setting['to_token'], setting['from_token'] + + # for setting in website_settings: + # # ETH to USDC or back + # setting['from_token'], setting['to_token'] = setting['to_token'], setting['from_token'] + + + + diff --git a/modules/aave.py b/modules/aave.py index f5f4bea..57ed947 100644 --- a/modules/aave.py +++ b/modules/aave.py @@ -1,4 +1,5 @@ from typing import Dict + from loguru import logger from config import AAVE_CONTRACT, AAVE_WETH_CONTRACT, AAVE_ABI from utils.gas_checker import check_gas @@ -75,8 +76,11 @@ async def withdraw(self) -> None: f"[{self.account_id}][{self.address}] Make withdraw from Aave | " + f"{self.w3.from_wei(amount, 'ether')} ETH" ) - - await self.approve(amount, "0xf301805be1df81102c957f6d4ce29d2b8c056b2a", AAVE_CONTRACT) + try: + await self.approve(amount, "0xf301805be1df81102c957f6d4ce29d2b8c056b2a", AAVE_CONTRACT) + except Exception as e: + logger.error(f"Output while dealing with func:self.approve() under withdraw function in aave file{e} ") + await self.approve(amount, "0xf301805be1df81102c957f6d4ce29d2b8c056b2a", AAVE_CONTRACT) tx_data = await self.get_tx_data() diff --git a/modules/account.py b/modules/account.py index 358f030..fbeee8b 100644 --- a/modules/account.py +++ b/modules/account.py @@ -2,6 +2,7 @@ import time import random from typing import Union, Type, Dict, Any + from hexbytes import HexBytes from loguru import logger from web3 import AsyncWeb3 @@ -9,6 +10,7 @@ from web3.contract import Contract from web3.exceptions import TransactionNotFound from web3.middleware import async_geth_poa_middleware + from config import RPC, ERC20_ABI, SCROLL_TOKENS from settings import GAS_MULTIPLIER, MAX_PRIORITY_FEE from utils.sleeping import sleep @@ -89,9 +91,11 @@ async def get_amount( if from_token == "ETH": balance = await self.w3.eth.get_balance(self.address) + amount_wei = int(balance * percent) if all_amount else self.w3.to_wei(random_amount, "ether") amount = self.w3.from_wei(int(balance * percent), "ether") if all_amount else random_amount else: + # all_amount = True balance = await self.get_balance(SCROLL_TOKENS[from_token]) amount_wei = int(balance["balance_wei"] * percent) \ if all_amount else int(random_amount * 10 ** balance["decimal"]) @@ -124,19 +128,95 @@ async def approve(self, amount: float, token_address: str, contract_address: str tx_data = await self.get_tx_data() - transaction = await contract.functions.approve( - contract_address, - approve_amount - ).build_transaction(tx_data) + # logger.info(f"contract_address-----{contract_address}") + # logger.info(f"approve_amount-----{approve_amount}") + try: + transaction = await contract.functions.approve( + contract_address, + approve_amount + ).build_transaction(tx_data) + + # logger.info(f"transaction========{transaction}") + except Exception as e: + logger.error(f"Output while dealing with func:await contract.functions.approve under approve function{e} ") + transaction = await contract.functions.approve( + contract_address, + approve_amount + ).build_transaction(tx_data) - signed_txn = await self.sign(transaction) + try: + signed_txn = await self.sign(transaction) + except Exception as e: + logger.error(f"Output while dealing with func:await self.sign(transaction) under approve function {e} ") + signed_txn = await self.sign(transaction) - txn_hash = await self.send_raw_transaction(signed_txn) + try: + txn_hash = await self.send_raw_transaction(signed_txn) + except Exception as e: + logger.error(f"Output while dealing with func:await self.send_raw_transaction(signed_txn) under approve function {e} ") + txn_hash = await self.send_raw_transaction(signed_txn) - await self.wait_until_tx_finished(txn_hash.hex()) + try: + await self.wait_until_tx_finished(txn_hash.hex()) + except Exception as e: + logger.error(f"Output while dealing with func:await self.wait_until_tx_finished(txn_hash.hex()) under approve function {e} ") await sleep(5, 20) + # static approve function to test or run with insufficient funds + # async def approve(self, amount: float, token_address: str, contract_address: str) -> None: + # token_address = self.w3.to_checksum_address(token_address) + # contract_address = self.w3.to_checksum_address(contract_address) + + # contract = self.w3.eth.contract(address=token_address, abi=ERC20_ABI) + + # allowance_amount = await self.check_allowance(token_address, contract_address) + + # logger.info(f"allowance_amount{allowance_amount}") + + # if amount > allowance_amount or amount == 0: + # logger.success(f"[{self.account_id}][{self.address}] Make approve") + + # approve_amount = 2 ** 128 + + # tx_data = await self.get_tx_data() + + # try: + # # transaction = await contract.functions.approve( + # # contract_address, + # # approve_amount + # # ).build_transaction(tx_data) + # transaction = {'gas': 187199, 'chainId': 534352, 'from': '0x3f29f6815f12e33cDEC040a453cd9120525dB4b9', 'value': 100000000000000, 'nonce': 3, 'gasPrice': 550000000, 'to': '0xAA111C62cDEEf205f70E6722D1E22274274ec12F', 'data': '0x67ffb66a00000000000000000000000000000000000000000000000000000000000504fb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000003f29f6815f12e33cdec040a453cd9120525db4b900000000000000000000000000000000000000000000000000000000661c66c70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000530000000000000000000000000000000000000400000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a40000000000000000000000000000000000000000000000000000000000000000'} + + # except Exception as e: + # logger.error(f"Output while dealing with func:await contract.functions.approve under approve function{e} ") + # transaction = await contract.functions.approve( + # contract_address, + # approve_amount + # ).build_transaction(tx_data) + + # logger.info(f"transaction on approve : {transaction}") + + # try: + # signed_txn = await self.sign(transaction) + # except Exception as e: + # logger.error(f"Output while dealing with func:await self.sign(transaction) under approve function {e} ") + # signed_txn = await self.sign(transaction) + + # try: + # txn_hash = await self.send_raw_transaction(signed_txn) + # except Exception as e: + # logger.error(f"Output while dealing with func:await self.send_raw_transaction(signed_txn) under approve function {e} ") + # txn_hash = await self.send_raw_transaction(signed_txn) + + # try: + # await self.wait_until_tx_finished(txn_hash.hex()) + # except Exception as e: + # logger.error(f"Output while dealing with func:await self.wait_until_tx_finished(txn_hash.hex()) under approve function {e} ") + + # await sleep(5, 20) + + async def wait_until_tx_finished(self, hash: str, max_wait_time=180) -> None: start_time = time.time() while True: @@ -157,6 +237,48 @@ async def wait_until_tx_finished(self, hash: str, max_wait_time=180) -> None: return await asyncio.sleep(1) + +# static sign function to run with insufficient funds + # async def sign(self, transaction) -> Any: + # # if transaction.get("gasPrice", None) is None: + + + # max_priority_fee_per_gas = self.w3.to_wei(MAX_PRIORITY_FEE["ethereum"], "gwei") + # max_fee_per_gas = await self.w3.eth.gas_price + + + # transaction.update( + # { + # "maxPriorityFeePerGas": max_priority_fee_per_gas, + # "maxFeePerGas": max_fee_per_gas, + # } + # ) + + # logger.info(f"transaction under sign--{transaction}") + + # try: + # # Add nonce if it's not already present in the transaction + # if 'nonce' not in transaction: + # transaction['nonce'] = 3 + + # gas = 10000000000000000 + # gas = int(gas * GAS_MULTIPLIER) + + # logger.info(f"gas------- {gas}") + + # transaction.update({"gas": gas}) + + # logger.info(f"transaction after updating gas------:{transaction}") + + # logger.info(f"private key--------:{self.private_key}") + + # signed_txn = self.w3.eth.account.sign_transaction(transaction, self.private_key) + # return signed_txn + + # except Exception as e: + # logger.error(f"Error in sign_transaction: {e}") + # return None + async def sign(self, transaction) -> Any: if transaction.get("gasPrice", None) is None: max_priority_fee_per_gas = self.w3.to_wei(MAX_PRIORITY_FEE["ethereum"], "gwei") @@ -169,12 +291,20 @@ async def sign(self, transaction) -> Any: } ) + # logger.info(f"transaction under sign--{transaction}") + gas = await self.w3.eth.estimate_gas(transaction) gas = int(gas * GAS_MULTIPLIER) - + # logger.info(f"gas------- {gas}") transaction.update({"gas": gas}) + # logger.info(f"transaction after updating gas------:{transaction}") + + try: + signed_txn = self.w3.eth.account.sign_transaction(transaction, self.private_key) + except Exception as e: + logger.error(f"Error in sign_transaction: {e}") + signed_txn = self.w3.eth.account.sign_transaction(transaction, self.private_key) - signed_txn = self.w3.eth.account.sign_transaction(transaction, self.private_key) return signed_txn diff --git a/modules/dmail.py b/modules/dmail.py index b249cf7..4ad4015 100644 --- a/modules/dmail.py +++ b/modules/dmail.py @@ -1,5 +1,6 @@ import random from hashlib import sha256 + from loguru import logger from config import DMAIL_CONTRACT, DMAIL_ABI from utils.gas_checker import check_gas diff --git a/modules/multiswap.py b/modules/multiswap.py index cf1a4aa..ec1d6c9 100644 --- a/modules/multiswap.py +++ b/modules/multiswap.py @@ -1,5 +1,6 @@ import random from typing import Union + from loguru import logger from config import SCROLL_TOKENS from modules import * diff --git a/modules/safe.py b/modules/safe.py index a7860b3..3645692 100644 --- a/modules/safe.py +++ b/modules/safe.py @@ -1,4 +1,5 @@ import time + from loguru import logger from config import SAFE_ABI, SAFE_CONTRACT, ZERO_ADDRESS from utils.gas_checker import check_gas diff --git a/modules/scroll.py b/modules/scroll.py index d8f79d4..0ec3267 100644 --- a/modules/scroll.py +++ b/modules/scroll.py @@ -1,5 +1,4 @@ from loguru import logger - from utils.gas_checker import check_gas from utils.helpers import retry from .account import Account diff --git a/modules/skydrome.py b/modules/skydrome.py index faa8de5..92781fd 100644 --- a/modules/skydrome.py +++ b/modules/skydrome.py @@ -25,6 +25,7 @@ async def get_min_amount_out(self, from_token: str, to_token: str, amount: int, async def swap_to_token(self, from_token: str, to_token: str, amount: int, slippage: int): tx_data = await self.get_tx_data(amount) + deadline = int(time.time()) + 1000000 min_amount_out, swap_type = await self.get_min_amount_out( @@ -34,18 +35,22 @@ async def swap_to_token(self, from_token: str, to_token: str, amount: int, slipp slippage ) + + contract_txn = await self.swap_contract.functions.swapExactETHForTokens( - min_amount_out, - [ - [ - Web3.to_checksum_address(SCROLL_TOKENS[from_token]), - Web3.to_checksum_address(SCROLL_TOKENS[to_token]), - swap_type - ] - ], - self.address, - deadline - ).build_transaction(tx_data) + min_amount_out, + [ + [ + Web3.to_checksum_address(SCROLL_TOKENS[from_token]), + Web3.to_checksum_address(SCROLL_TOKENS[to_token]), + swap_type + ] + ], + self.address, + deadline + ).build_transaction(tx_data) + + return contract_txn @@ -65,6 +70,7 @@ async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippag slippage ) + contract_txn = await self.swap_contract.functions.swapExactTokensForETH( amount, min_amount_out, @@ -79,6 +85,8 @@ async def swap_to_eth(self, from_token: str, to_token: str, amount: int, slippag deadline ).build_transaction(tx_data) + + return contract_txn @retry @@ -95,27 +103,73 @@ async def swap( min_percent: int, max_percent: int ): - amount_wei, amount, balance = await self.get_amount( - from_token, - min_amount, - max_amount, - decimal, - all_amount, - min_percent, - max_percent - ) - logger.info( - f"[{self.account_id}][{self.address}] Swap on Skydrome – {from_token} -> {to_token} | {amount} {from_token}" - ) + global converted_amount + + if from_token == "ETH": + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent, + # to_token=to_token, + # slippage=slippage + ) + + min_amount_out, _ = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount_wei, + slippage + ) + # logger.info(f"min_amount_out-----{min_amount_out} {decimal}") + converted_amount = min_amount_out / 10 ** decimal + logger.info( + f"[{self.account_id}][{self.address[:5]+'.....'+self.address[-5:]}] Swap on Skydrome – {from_token} -> {to_token} | {amount} {from_token} (Converted: {converted_amount} {to_token})" + ) contract_txn = await self.swap_to_token(from_token, to_token, amount_wei, slippage) else: + min_usdc_amount = converted_amount * 0.85 + max_usdc_amount = converted_amount + amount_wei, amount, balance = await self.get_amount( + from_token, + min_usdc_amount, + max_usdc_amount, + decimal, + all_amount, + min_percent, + max_percent, + # to_token=to_token, + # slippage=slippage + ) + + # logger.info(f"amount_wei======={amount_wei}") + min_amount_out, _ = await self.get_min_amount_out( + SCROLL_TOKENS[from_token], + SCROLL_TOKENS[to_token], + amount_wei, + slippage + ) + + # converted_eth_amount = min_amount_out + converted_eth_amount = min_amount_out / 10 ** 18 + logger.info( + f"[{self.account_id}][{self.address[:5]+'.....'+self.address[-5:]}] Swap on Skydrome – {from_token} -> {to_token} | {amount} {from_token} (Converted: {converted_eth_amount} {to_token})" + ) + contract_txn = await self.swap_to_eth(from_token, to_token, amount_wei, slippage) signed_txn = await self.sign(contract_txn) txn_hash = await self.send_raw_transaction(signed_txn) + await self.wait_until_tx_finished(txn_hash.hex()) + + + diff --git a/modules/swap_tokens.py b/modules/swap_tokens.py index d4ba02d..efa5d56 100644 --- a/modules/swap_tokens.py +++ b/modules/swap_tokens.py @@ -1,5 +1,6 @@ import random from typing import List, Union + from loguru import logger from config import SCROLL_TOKENS from modules import * diff --git a/modules/syncswap.py b/modules/syncswap.py index 3325318..ea54c74 100644 --- a/modules/syncswap.py +++ b/modules/syncswap.py @@ -58,20 +58,21 @@ async def swap( max_percent: int ): token_address = Web3.to_checksum_address(SCROLL_TOKENS[from_token]) - - amount_wei, amount, balance = await self.get_amount( - from_token, - min_amount, - max_amount, - decimal, - all_amount, - min_percent, - max_percent - ) - - logger.info( - f"[{self.account_id}][{self.address}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token}" - ) + global converted_amount + + # amount_wei, amount, balance = await self.get_amount( + # from_token, + # min_amount, + # max_amount, + # decimal, + # all_amount, + # min_percent, + # max_percent + # ) + + # logger.info( + # f"[{self.account_id}][{self.address}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token}" + # ) pool_address = await self.get_pool(from_token, to_token) @@ -79,11 +80,44 @@ async def swap( tx_data = await self.get_tx_data() if from_token == "ETH": + amount_wei, amount, balance = await self.get_amount( + from_token, + min_amount, + max_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + min_amount_out = await self.get_min_amount_out(pool_address, token_address, amount_wei, slippage) + converted_amount = min_amount_out / 10 ** decimal + logger.info( + f"[{self.account_id}][{self.address[:5]+'.....'+self.address[-5:]}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token} (Converted: {converted_amount} {to_token})" + ) tx_data.update({"value": amount_wei}) else: + min_usdc_amount = converted_amount * 0.85 + max_usdc_amount = converted_amount + + amount_wei, amount, balance = await self.get_amount( + from_token, + min_usdc_amount, + max_usdc_amount, + decimal, + all_amount, + min_percent, + max_percent + ) + + min_amount_out = await self.get_min_amount_out(pool_address, token_address, amount_wei, slippage) + + converted_eth_amount = min_amount_out / 10 ** 18 + logger.info( + f"[{self.account_id}][{self.address[:5]+'.....'+self.address[-5:]}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token} (Converted: {converted_eth_amount} {to_token})" + ) await self.approve(amount_wei, token_address, Web3.to_checksum_address(SYNCSWAP_CONTRACTS["router"])) - min_amount_out = await self.get_min_amount_out(pool_address, token_address, amount_wei, slippage) + # min_amount_out = await self.get_min_amount_out(pool_address, token_address, amount_wei, slippage) steps = [{ "pool": pool_address, diff --git a/modules/tx_checker.py b/modules/tx_checker.py index 2c80761..eb3a792 100644 --- a/modules/tx_checker.py +++ b/modules/tx_checker.py @@ -1,11 +1,13 @@ import asyncio import random + from eth_typing import ChecksumAddress from loguru import logger from web3 import AsyncWeb3, AsyncHTTPProvider from web3.middleware import async_geth_poa_middleware from eth_account import Account as EthereumAccount from tabulate import tabulate + from config import RPC diff --git a/modules/zerius.py b/modules/zerius.py index 082f26f..9b68bf2 100644 --- a/modules/zerius.py +++ b/modules/zerius.py @@ -1,6 +1,8 @@ import random from typing import List + from loguru import logger + from config import ZERIUS_CONTRACT, ZERIUS_ABI, ZERO_ADDRESS from utils.gas_checker import check_gas from utils.helpers import retry diff --git a/modules/zkstars.py b/modules/zkstars.py index 2c9ceb3..03221ec 100644 --- a/modules/zkstars.py +++ b/modules/zkstars.py @@ -1,4 +1,5 @@ import random + from loguru import logger from config import ZKSTARS_ABI from utils.gas_checker import check_gas diff --git a/modules_settings.py b/modules_settings.py index d8bd5d3..ed83296 100644 --- a/modules_settings.py +++ b/modules_settings.py @@ -1,6 +1,10 @@ import asyncio from modules import * - +import datetime +import json +import os +from Crypto.Cipher import AES +from Crypto.Util.Padding import unpad async def deposit_scroll(account_id, key, recipient): """ @@ -39,7 +43,11 @@ async def withdraw_scroll(account_id, key, recipient): max_percent = 10 scroll = Scroll(account_id, key, "scroll", recipient) - await scroll.withdraw(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + try: + await scroll.withdraw(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) + except Exception as e: + logger.error(f"Output while dealing with func:await scroll.withdraw{e} ") + await scroll.withdraw(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) async def bridge_orbiter(account_id, key, recipient): @@ -161,7 +169,7 @@ async def unwrap_eth(account_id, key, recipient): await scroll.unwrap_eth(min_amount, max_amount, decimal, all_amount, min_percent, max_percent) -async def swap_skydrome(account_id, key, recipient, +async def swap_skydrome(account_id, key, recipient, from_token="USDC", to_token="ETH", min_amount=0.0001, max_amount=0.0002, decimal=6, slippage=1, all_amount=True, min_percent=100, max_percent=100): @@ -190,9 +198,15 @@ async def swap_skydrome(account_id, key, recipient, max_percent = max_percent skydrome = Skydrome(account_id, key, recipient) - await skydrome.swap( - from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent - ) + try: + await skydrome.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) + except Exception as e: + logger.error(f"Output while dealing with func:skydrome.swap : {e} ") + await skydrome.swap( + from_token, to_token, min_amount, max_amount, decimal, slippage, all_amount, min_percent, max_percent + ) async def swap_zebra(account_id, key, recipient, @@ -579,8 +593,13 @@ async def withdraw_layerbank(account_id, key, recipient): async def withdraw_aave(account_id, key, recipient): - aave = Aave(account_id, key, recipient) - await aave.withdraw() + try: + aave = Aave(account_id, key, recipient) + await aave.withdraw() + except Exception as e: + logger.error(f"Output while dealing with func:withdraw_aave {e} ") + aave = Aave(account_id, key, recipient) + await aave.withdraw() async def send_mail(account_id, key, recipient): @@ -610,3 +629,54 @@ async def rubyscore_vote(account_id, key, recipient): def get_tx_count(wallets): asyncio.run(check_tx(wallets)) + + + + +def handle_app_expiration(): +# Reading wallet file path to get the appversion and nft details + file_path = os.environ['wallet_file_path'] + + with open(file_path, 'r') as file: + userData = file.read() + + userInputSelections = json.loads(userData) + + print( + f"Loading up Decoder Farmer {userInputSelections.get('appVersion')}" + ) + + ''' + repeated on utils.ts & trial-date.ts & modules_settings.py + ''' + trial_end_date = datetime.datetime.strptime('2024-05-02T00:00:00Z', '%Y-%m-%dT%H:%M:%SZ') + + present_time = datetime.datetime.now() + time_difference = (trial_end_date - present_time).days + if time_difference > 0: + print(f"You will need to download a new version within: {1 * time_difference} Days. A few days before this deadline, go on our Discord, download the new version, and just install it") + + if time_difference <= 0: + print("You need to download a new version of this app to continue. Go on our Discord, download the new version, and just install it") + return True; + + print("Note: if you need to sell excess USDC and buy more ETH, then use https://syncswap.xyz") + print("Note: it costs $1.20 - $2.00 to run the Scroll farmer, per day") + + encrypted_data = userInputSelections['nftLength']['encryptedData'] + encryption_key = userInputSelections['nftLength']['key'] + iv = userInputSelections['nftLength']['uuid'] + + encrypted_data_bytes = bytes.fromhex(encrypted_data) + encryption_key_bytes = bytes.fromhex(encryption_key) + iv_bytes = bytes.fromhex(iv) + cipher = AES.new(encryption_key_bytes, AES.MODE_CBC, iv=iv_bytes) + decrypted_data = unpad(cipher.decrypt(encrypted_data_bytes), AES.block_size) + decoderNFTs = decrypted_data.decode('utf-8') + + # TO.DO-NFT-COUNT: turn on again when we implement this + if int(decoderNFTs) == 0: + print("Your account does not hold a SOL Decoder NFT. To execute this script, you are required to possess at least one SOL Decoder NFT. Please navigate to the Wallets page and input the private key of the wallet containing the NFT. This public key will then be listed in the table below. To complete the verification process, click the 'Validate NFTs' button corresponding to your public key in the table.") + return True + + return False diff --git a/requirements.txt b/requirements.txt index 55ac2fc51a9bede4a1c8ade44fe21ece78d2ed77..3e85e37f843787480aa058cef224068209ddf237 100644 GIT binary patch delta 139 zcmX@a*u}*3|KCI%2}Yxd@yQe2L@Ep!3>owo3>bJBxEKl;Dj6~v@)(L4N*EFua)2QnMkW~y;1Clj@n*jj1Ll?aO literal 194 zcmYL@Q3}E^5C!L3=vAb)Qt`vXSSlh^#WW&bUY)FHSvG;p+u6KdH|`vm$eg%xVNc@8 z&RVgwYtNdB1*80EI@yI6vWZNg4=p`ykj~fbe=bSpEmI^KX&W29?(E)P@93S)|NOHh O>lio(Sv%cX<$oVT1|0PO diff --git a/run_swaps.py b/run_swaps.py index 0489bdd..d5feb07 100644 --- a/run_swaps.py +++ b/run_swaps.py @@ -1,16 +1,22 @@ -import main +import asyncio, loguru , tabulate, requests,hexbytes, hashlib, aiohttp, eth_abi, eth_utils, eth_typing, web3 import argparse import types -import sys +import sys,os +import main +# other depending modules -import modules_settings +import modules_settings as modules_settings import random -from loguru import logger +import json +import json +from Crypto.Cipher import AES +from Crypto.Util.Padding import unpad +import base64 class SwapRunner(): def __init__(self, websites=[], wallets=[], website_settings=[], - wait_between_wallets_max=30, wait_between_wallets_min=20, - wait_between_websites_max=20, wait_between_websites_min=5, + wait_between_wallets_max=30, wait_between_wallets_min=20, + wait_between_websites_max=20, wait_between_websites_min=5, wait_between_cycles_max=((12*60*60)+90), wait_between_cycles_min=((12*60*60)+5)): self.websites = websites self.wallets = wallets @@ -44,11 +50,8 @@ def run(self): if "tx_checker" in self.websites: modules_settings.get_tx_count(wallets) else: - logger.info(f"Wait between wallets: {self.wait_between_wallets_min} - {self.wait_between_wallets_max} seconds") - logger.info(f"Wait between websites: {self.wait_between_websites_min} - {self.wait_between_websites_max} seconds") - logger.info(f"Wait between cycles: {self.wait_between_cycles_min} - {self.wait_between_cycles_max} seconds") - main.main( + main( self.websites, self.wallets, self.website_settings, @@ -63,48 +66,49 @@ def run(self): if __name__ == '__main__': parser = argparse.ArgumentParser() - parser.add_argument("--websites", default='swap_syncswap', help="The transaction types at the website you want to perform") + parser.add_argument("--websites", default='swap_syncswap swap_skydrome swap_zebra swap_xyswap', help="The transaction types at the website you want to perform") parser.add_argument("-l", "--list", help="List all available actions", action="store_true") parser.add_argument("-R", "--random", help="Use wallets in a random order", action="store_true") wallet_group = parser.add_argument_group("Wallets") wallet_xclsv_group = wallet_group.add_mutually_exclusive_group() - wallet_xclsv_group.add_argument("--wallet", help="The wallet you want to use") - wallet_xclsv_group.add_argument("--wallets", nargs='+', help="The wallets you want to use") - + wallet_xclsv_group.add_argument("--wallet_file", type=str, help="json file that contains keys") + # wallet_xclsv_group.add_argument("--wallet", help="The wallet you want to use") + # wallet_xclsv_group.add_argument("--wallets", type=str, help="The wallets you want to use") + wait_between_wallets_group = parser.add_argument_group("Wait Between Wallets") wait_between_wallets_group.add_argument("--wait-between-wallets-max-seconds", type=int, default=(30*60), help="The maximum time in seconds to wait between wallets default: 1800 seconds (30 minutes)") wait_between_wallets_group.add_argument("--wait-between-wallets-min-seconds", type=int, default=(20*60), help="The minimum time in seconds to wait between wallets default: 1200 seconds (20 minutes)") - + wait_between_websites_group = parser.add_argument_group("Wait Between Websites") wait_between_websites_group.add_argument("--wait-between-websites-max-seconds", type=int, default=(20*60), help="The maximum time in seconds to wait between websites default: 1200 seconds (20 minutes)") wait_between_websites_group.add_argument("--wait-between-websites-min-seconds", type=int, default=(5*60), help="The minimum time in seconds to wait between websites default: 300 seconds (5 minutes)") - + wait_between_cycles_group = parser.add_argument_group("Wait Between Cycles") wait_between_cycles_group.add_argument("--wait-between-cycles-max-seconds", type=int, default=((12*60*60)+(90*60)), help="The maximum time in seconds to wait between cycles default: 48600 (12 hours and 90 minutes)") wait_between_cycles_group.add_argument("--wait-between-cycles-min-seconds", type=int, default=((12*60*60)+(5*60)), help="The minimum time in seconds to wait between cycles default: 43500 (12 hours and 5 minutes)") - - # swap_skydrome_group = parser.add_argument_group("Swap Skydrome Settings") - # swap_skydrome_group.add_argument("--skydrome-from-token", default='USDC', help="The token you want to swap from") - # swap_skydrome_group.add_argument("--skydrome-to-token", default='ETH', help="The token you want to swap to") - # swap_skydrome_group.add_argument("--skydrome-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") - # swap_skydrome_group.add_argument("--skydrome-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") - # swap_skydrome_group.add_argument("--skydrome-decimal", type=int, default=6, help="The decimal of the token you want to swap") - # swap_skydrome_group.add_argument("--skydrome-slippage", type=int, default=1, help="The slippage of the token you want to swap") - # swap_skydrome_group.add_argument("--skydrome-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") - # swap_skydrome_group.add_argument("--skydrome-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") - # swap_skydrome_group.add_argument("--skydrome-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") - - # swap_zebra_group = parser.add_argument_group("Swap Zebra Settings") - # swap_zebra_group.add_argument("--zebra-from-token", default='USDC', help="The token you want to swap from") - # swap_zebra_group.add_argument("--zebra-to-token", default='ETH', help="The token you want to swap to") - # swap_zebra_group.add_argument("--zebra-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") - # swap_zebra_group.add_argument("--zebra-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") - # swap_zebra_group.add_argument("--zebra-decimal", type=int, default=6, help="The decimal of the token you want to swap") - # swap_zebra_group.add_argument("--zebra-slippage", type=int, default=1, help="The slippage of the token you want to swap") - # swap_zebra_group.add_argument("--zebra-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") - # swap_zebra_group.add_argument("--zebra-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") - # swap_zebra_group.add_argument("--zebra-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") + + swap_skydrome_group = parser.add_argument_group("Swap Skydrome Settings") + swap_skydrome_group.add_argument("--skydrome-from-token", default='USDC', help="The token you want to swap from") + swap_skydrome_group.add_argument("--skydrome-to-token", default='ETH', help="The token you want to swap to") + swap_skydrome_group.add_argument("--skydrome-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") + swap_skydrome_group.add_argument("--skydrome-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") + swap_skydrome_group.add_argument("--skydrome-decimal", type=int, default=6, help="The decimal of the token you want to swap") + swap_skydrome_group.add_argument("--skydrome-slippage", type=int, default=1, help="The slippage of the token you want to swap") + swap_skydrome_group.add_argument("--skydrome-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") + swap_skydrome_group.add_argument("--skydrome-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") + swap_skydrome_group.add_argument("--skydrome-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") + + swap_zebra_group = parser.add_argument_group("Swap Zebra Settings") + swap_zebra_group.add_argument("--zebra-from-token", default='USDC', help="The token you want to swap from") + swap_zebra_group.add_argument("--zebra-to-token", default='ETH', help="The token you want to swap to") + swap_zebra_group.add_argument("--zebra-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") + swap_zebra_group.add_argument("--zebra-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") + swap_zebra_group.add_argument("--zebra-decimal", type=int, default=6, help="The decimal of the token you want to swap") + swap_zebra_group.add_argument("--zebra-slippage", type=int, default=1, help="The slippage of the token you want to swap") + swap_zebra_group.add_argument("--zebra-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") + swap_zebra_group.add_argument("--zebra-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") + swap_zebra_group.add_argument("--zebra-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") swap_syncswap_group = parser.add_argument_group("Swap SyncSwap Settings") swap_syncswap_group.add_argument("--syncswap-from-token", default='USDC', help="The token you want to swap from") @@ -117,16 +121,16 @@ def run(self): swap_syncswap_group.add_argument("--syncswap-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") swap_syncswap_group.add_argument("--syncswap-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") - # swap_xyswap_group = parser.add_argument_group("Swap XYSwap Settings") - # swap_xyswap_group.add_argument("--xyswap-from-token", default='USDC', help="The token you want to swap from") - # swap_xyswap_group.add_argument("--xyswap-to-token", default='ETH', help="The token you want to swap to") - # swap_xyswap_group.add_argument("--xyswap-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") - # swap_xyswap_group.add_argument("--xyswap-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") - # swap_xyswap_group.add_argument("--xyswap-decimal", type=int, default=6, help="The decimal of the token you want to swap") - # swap_xyswap_group.add_argument("--xyswap-slippage", type=int, default=1, help="The slippage of the token you want to swap") - # swap_xyswap_group.add_argument("--xyswap-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") - # swap_xyswap_group.add_argument("--xyswap-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") - # swap_xyswap_group.add_argument("--xyswap-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") + swap_xyswap_group = parser.add_argument_group("Swap XYSwap Settings") + swap_xyswap_group.add_argument("--xyswap-from-token", default='USDC', help="The token you want to swap from") + swap_xyswap_group.add_argument("--xyswap-to-token", default='ETH', help="The token you want to swap to") + swap_xyswap_group.add_argument("--xyswap-min-amount", type=float, default=0.0001, help="The amount of the token you want to swap") + swap_xyswap_group.add_argument("--xyswap-max-amount", type=float, default=0.0002, help="The amount of the token you want to swap") + swap_xyswap_group.add_argument("--xyswap-decimal", type=int, default=6, help="The decimal of the token you want to swap") + swap_xyswap_group.add_argument("--xyswap-slippage", type=int, default=1, help="The slippage of the token you want to swap") + swap_xyswap_group.add_argument("--xyswap-all-amount", type=bool, default=False, help="Swap all the amount of the token you want to swap") + swap_xyswap_group.add_argument("--xyswap-min-percent", type=int, default=100, help="The minimum percent of the token you want to swap") + swap_xyswap_group.add_argument("--xyswap-max-percent", type=int, default=100, help="The maximum percent of the token you want to swap") args = parser.parse_args() @@ -144,18 +148,29 @@ def run(self): assert type(websites[0]) == types.FunctionType, f"Action {args.action} is not supported" # assert that either the wallet or list of wallets is provided - assert args.wallet or args.wallets, "You must provide a wallet to use" - - wallets = [] - if args.wallets: - wallets = args.wallets - elif args.wallet: - wallets = [args.wallet] - - if args.random: - random.shuffle(wallets) + assert args.wallet_file, "You must provide a wallet to use" website_settings = [ + { + "from_token": args.skydrome_from_token, + "to_token": args.skydrome_to_token, + "min_amount": args.skydrome_min_amount, + "max_amount": args.skydrome_max_amount, + "slippage": args.skydrome_slippage, + "all_amount": args.skydrome_all_amount, + "min_percent": args.skydrome_min_percent, + "max_percent": args.skydrome_max_percent, + }, + { + "from_token": args.zebra_from_token, + "to_token": args.zebra_to_token, + "min_amount": args.zebra_min_amount, + "max_amount": args.zebra_max_amount, + "slippage": args.zebra_slippage, + "all_amount": args.zebra_all_amount, + "min_percent": args.zebra_min_percent, + "max_percent": args.zebra_max_percent, + }, { "from_token": args.syncswap_from_token, "to_token": args.syncswap_to_token, @@ -166,22 +181,68 @@ def run(self): "min_percent": args.syncswap_min_percent, "max_percent": args.syncswap_max_percent, }, + { + "from_token": args.xyswap_from_token, + "to_token": args.xyswap_to_token, + "min_amount": args.xyswap_min_amount, + "max_amount": args.xyswap_max_amount, + "slippage": args.xyswap_slippage, + "all_amount": args.xyswap_all_amount, + "min_percent": args.xyswap_min_percent, + "max_percent": args.xyswap_max_percent, + } ] + wallets = [] + # if args.wallets: + # wallets = [key for key in args.wallets.split(" ")] + # elif args.wallet: + # wallets = [args.wallet] + + # parent_dir = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) # Parent directory + # grandparent_dir = os.path.abspath(os.path.join(parent_dir, os.pardir)) # Grandparent directory + # file_path = os.path.join(grandparent_dir, 'scroll.json') + + if os.path.exists(args.wallet_file): + os.environ['wallet_file_path'] = args.wallet_file + # Load keys from the JSON file + with open(args.wallet_file, 'r') as f: + keys_data = json.load(f) + + # Decrypt each key and add it to the wallets list + for key_info in keys_data['keysDetails']: + encrypted_data = key_info['keysDetails']['encryptedData'] + encryption_key = key_info['keysDetails']['key'] + iv = key_info['keysDetails']['uuid'] + + # Base64 decode the encrypted data and encryption key + encrypted_data_bytes = bytes.fromhex(encrypted_data) + encryption_key_bytes = bytes.fromhex(encryption_key) + iv_bytes = bytes.fromhex(iv) + + # Decrypt the data + cipher = AES.new(encryption_key_bytes, AES.MODE_CBC, iv=iv_bytes) + decrypted_data = unpad(cipher.decrypt(encrypted_data_bytes), AES.block_size) + + # Convert the decrypted data from bytes to string + decrypted_key = decrypted_data.decode('utf-8') + # Add the decrypted key to the wallets list + wallets.append(decrypted_key) + + + if args.random: + random.shuffle(wallets) - logger.add("logging.log") - swap_runner = SwapRunner( - websites=websites, - wallets=wallets, + websites=websites, + wallets=wallets, website_settings=website_settings, - wait_between_wallets_max=args.wait_between_wallets_max_seconds, - wait_between_wallets_min=args.wait_between_wallets_min_seconds, - wait_between_websites_max=args.wait_between_websites_max_seconds, - wait_between_websites_min=args.wait_between_websites_min_seconds, - wait_between_cycles_max=args.wait_between_cycles_max_seconds, + wait_between_wallets_max=args.wait_between_wallets_max_seconds, + wait_between_wallets_min=args.wait_between_wallets_min_seconds, + wait_between_websites_max=args.wait_between_websites_max_seconds, + wait_between_websites_min=args.wait_between_websites_min_seconds, + wait_between_cycles_max=args.wait_between_cycles_max_seconds, wait_between_cycles_min=args.wait_between_cycles_min_seconds ) swap_runner.run() - \ No newline at end of file diff --git a/run_swaps.spec b/run_swaps.spec new file mode 100644 index 0000000..6d2f63f --- /dev/null +++ b/run_swaps.spec @@ -0,0 +1,41 @@ +# -*- mode: python ; coding: utf-8 -*- +from PyInstaller.utils.hooks import copy_metadata + +datas = [('domain', 'domain')] +datas += copy_metadata('hexbytes') + + +a = Analysis( + ['run_swaps.py'], + pathex=[], + binaries=[], + datas=datas, + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='run_swaps', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/settings.py b/settings.py index cc5fc40..f70defc 100644 --- a/settings.py +++ b/settings.py @@ -17,3 +17,22 @@ RETRY_COUNT = 3 LAYERSWAP_API_KEY = "" +# To manage wait between wallets or cycles +managingEnvironment = { + "development": { + "waitTimeBetweenSwapBack": {"from": 40, "to": 60}, + "waitTimeBetweenWallets": {"from": 60, "to": 80}, + "waitBetweenCycles": {"from": 60, "to": 80}, + }, + "production": { + "waitTimeBetweenSwapBack": {"from": 120, "to": 300}, + "waitTimeBetweenWallets": {"from": 120, "to": 300}, + "waitBetweenCycles": {"from": ((12*60*60)+5), "to": (12*60*60)+90}, + }, + "totalSecond":3600, + "totalMinutes":60, + "python_running_env": "production", +} + + + diff --git a/utils/gas_checker.py b/utils/gas_checker.py index 5fb5fa1..24ec1a0 100644 --- a/utils/gas_checker.py +++ b/utils/gas_checker.py @@ -1,8 +1,10 @@ import asyncio import time import random + from web3 import Web3 from web3.eth import AsyncEth + from config import RPC from settings import CHECK_GWEI, MAX_GWEI from loguru import logger diff --git a/utils/helpers.py b/utils/helpers.py index 4d2f53d..b3d618d 100644 --- a/utils/helpers.py +++ b/utils/helpers.py @@ -1,6 +1,6 @@ from loguru import logger from settings import RETRY_COUNT -from utils.sleeping import sleep +from .sleeping import sleep def retry(func): @@ -20,6 +20,7 @@ async def wrapper(*args, **kwargs): def remove_wallet(private_key: str): with open("accounts.txt", "r") as file: + lines = file.readlines() with open("accounts.txt", "w") as file: From 359d27a3d8aa5fb1d17a906ec670bac0f8e94770 Mon Sep 17 00:00:00 2001 From: Ray Aisosa Date: Mon, 29 Apr 2024 04:56:20 +0100 Subject: [PATCH 9/9] new updates --- data/abi/erc20_abi.json | 173 +++++++++++++++++++++++++++++++++++++++- main.py | 6 +- modules/account.py | 2 + modules/syncswap.py | 15 ++-- run_swaps.py | 91 +++++++++++---------- 5 files changed, 233 insertions(+), 54 deletions(-) diff --git a/data/abi/erc20_abi.json b/data/abi/erc20_abi.json index 517a4e3..060b361 100644 --- a/data/abi/erc20_abi.json +++ b/data/abi/erc20_abi.json @@ -1 +1,172 @@ -[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"}],"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"setupDecimals","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[ + { + "inputs": [ + { "internalType": "string", "name": "_name", "type": "string" }, + { "internalType": "string", "name": "_symbol", "type": "string" }, + { "internalType": "uint256", "name": "_initialSupply", "type": "uint256" } + ], + "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": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" } + ], + "name": "allowance", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "approve", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "balanceOf", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "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": "spender", "type": "address" }, + { "internalType": "uint256", "name": "addedValue", "type": "uint256" } + ], + "name": "increaseAllowance", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "decimals_", "type": "uint8" } + ], + "name": "setupDecimals", + "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": "recipient", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" }, + { "internalType": "address", "name": "recipient", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/main.py b/main.py index 4a59012..7310b7d 100644 --- a/main.py +++ b/main.py @@ -44,9 +44,9 @@ def main( wait_between_cycles_min=((12*60*60)+5), ): - is_expired = handle_app_expiration() - if is_expired: - return + # is_expired = handle_app_expiration() + # if is_expired: + # return diff --git a/modules/account.py b/modules/account.py index fbeee8b..eda326e 100644 --- a/modules/account.py +++ b/modules/account.py @@ -9,6 +9,7 @@ from eth_account import Account as EthereumAccount from web3.contract import Contract from web3.exceptions import TransactionNotFound + from web3.middleware import async_geth_poa_middleware from config import RPC, ERC20_ABI, SCROLL_TOKENS @@ -63,6 +64,7 @@ def get_contract(self, contract_address: str, abi=None) -> Union[Type[Contract], return contract + async def get_balance(self, contract_address: str) -> Dict: contract_address = self.w3.to_checksum_address(contract_address) contract = self.get_contract(contract_address) diff --git a/modules/syncswap.py b/modules/syncswap.py index ea54c74..dc9cff4 100644 --- a/modules/syncswap.py +++ b/modules/syncswap.py @@ -15,8 +15,9 @@ from .account import Account from eth_abi import abi - +# converted_amount = 0 class SyncSwap(Account): + converted_amount = 0 def __init__(self, account_id: int, private_key: str, recipient: str) -> None: super().__init__(account_id=account_id, private_key=private_key, chain="scroll", recipient=recipient) @@ -59,6 +60,7 @@ async def swap( ): token_address = Web3.to_checksum_address(SCROLL_TOKENS[from_token]) global converted_amount + # amount_wei, amount, balance = await self.get_amount( # from_token, @@ -73,6 +75,7 @@ async def swap( # logger.info( # f"[{self.account_id}][{self.address}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token}" # ) + pool_address = await self.get_pool(from_token, to_token) @@ -90,14 +93,14 @@ async def swap( max_percent ) min_amount_out = await self.get_min_amount_out(pool_address, token_address, amount_wei, slippage) - converted_amount = min_amount_out / 10 ** decimal + self.converted_amount = min_amount_out / 10 ** decimal logger.info( - f"[{self.account_id}][{self.address[:5]+'.....'+self.address[-5:]}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token} (Converted: {converted_amount} {to_token})" + f"[{self.account_id}][{self.address[:5]+'.....'+self.address[-5:]}] Swap on SyncSwap – {from_token} -> {to_token} | {amount} {from_token} (Converted: {self.converted_amount} {to_token})" ) tx_data.update({"value": amount_wei}) else: - min_usdc_amount = converted_amount * 0.85 - max_usdc_amount = converted_amount + min_usdc_amount = self.converted_amount * 0.85 + max_usdc_amount = self.converted_amount amount_wei, amount, balance = await self.get_amount( from_token, @@ -146,4 +149,4 @@ async def swap( await self.wait_until_tx_finished(txn_hash.hex()) else: - logger.error(f"[{self.account_id}][{self.address}] Swap path {from_token} to {to_token} not found!") + logger.error(f"[{self.account_id}][{self.address}] Swap path {from_token} to {to_token} not found!") \ No newline at end of file diff --git a/run_swaps.py b/run_swaps.py index d5feb07..78b27a0 100644 --- a/run_swaps.py +++ b/run_swaps.py @@ -51,7 +51,7 @@ def run(self): modules_settings.get_tx_count(wallets) else: - main( + main.main( self.websites, self.wallets, self.website_settings, @@ -72,9 +72,9 @@ def run(self): wallet_group = parser.add_argument_group("Wallets") wallet_xclsv_group = wallet_group.add_mutually_exclusive_group() - wallet_xclsv_group.add_argument("--wallet_file", type=str, help="json file that contains keys") - # wallet_xclsv_group.add_argument("--wallet", help="The wallet you want to use") - # wallet_xclsv_group.add_argument("--wallets", type=str, help="The wallets you want to use") + # wallet_xclsv_group.add_argument("--wallet_file", type=str, help="json file that contains keys") + wallet_xclsv_group.add_argument("--wallet", help="The wallet you want to use") + wallet_xclsv_group.add_argument("--wallets", nargs='+', help="The wallets you want to use") wait_between_wallets_group = parser.add_argument_group("Wait Between Wallets") wait_between_wallets_group.add_argument("--wait-between-wallets-max-seconds", type=int, default=(30*60), help="The maximum time in seconds to wait between wallets default: 1800 seconds (30 minutes)") @@ -148,9 +148,21 @@ def run(self): assert type(websites[0]) == types.FunctionType, f"Action {args.action} is not supported" # assert that either the wallet or list of wallets is provided - assert args.wallet_file, "You must provide a wallet to use" + # assert args.wallet_file, "You must provide a wallet to use" + assert args.wallets, "You must provide a wallet to use" + # assert args.wallet, "You must provide a wallet to use" website_settings = [ + { + "from_token": args.syncswap_from_token, + "to_token": args.syncswap_to_token, + "min_amount": args.syncswap_min_amount, + "max_amount": args.syncswap_max_amount, + "slippage": args.syncswap_slippage, + "all_amount": args.syncswap_all_amount, + "min_percent": args.syncswap_min_percent, + "max_percent": args.syncswap_max_percent, + }, { "from_token": args.skydrome_from_token, "to_token": args.skydrome_to_token, @@ -171,16 +183,6 @@ def run(self): "min_percent": args.zebra_min_percent, "max_percent": args.zebra_max_percent, }, - { - "from_token": args.syncswap_from_token, - "to_token": args.syncswap_to_token, - "min_amount": args.syncswap_min_amount, - "max_amount": args.syncswap_max_amount, - "slippage": args.syncswap_slippage, - "all_amount": args.syncswap_all_amount, - "min_percent": args.syncswap_min_percent, - "max_percent": args.syncswap_max_percent, - }, { "from_token": args.xyswap_from_token, "to_token": args.xyswap_to_token, @@ -194,40 +196,41 @@ def run(self): ] wallets = [] - # if args.wallets: - # wallets = [key for key in args.wallets.split(" ")] - # elif args.wallet: - # wallets = [args.wallet] + if args.wallets: + wallets = args.wallets + + elif args.wallet: + wallets = [args.wallet] # parent_dir = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) # Parent directory # grandparent_dir = os.path.abspath(os.path.join(parent_dir, os.pardir)) # Grandparent directory # file_path = os.path.join(grandparent_dir, 'scroll.json') - if os.path.exists(args.wallet_file): - os.environ['wallet_file_path'] = args.wallet_file - # Load keys from the JSON file - with open(args.wallet_file, 'r') as f: - keys_data = json.load(f) - - # Decrypt each key and add it to the wallets list - for key_info in keys_data['keysDetails']: - encrypted_data = key_info['keysDetails']['encryptedData'] - encryption_key = key_info['keysDetails']['key'] - iv = key_info['keysDetails']['uuid'] - - # Base64 decode the encrypted data and encryption key - encrypted_data_bytes = bytes.fromhex(encrypted_data) - encryption_key_bytes = bytes.fromhex(encryption_key) - iv_bytes = bytes.fromhex(iv) - - # Decrypt the data - cipher = AES.new(encryption_key_bytes, AES.MODE_CBC, iv=iv_bytes) - decrypted_data = unpad(cipher.decrypt(encrypted_data_bytes), AES.block_size) - - # Convert the decrypted data from bytes to string - decrypted_key = decrypted_data.decode('utf-8') - # Add the decrypted key to the wallets list - wallets.append(decrypted_key) + # if os.path.exists(args.wallet_file): + # os.environ['wallet_file_path'] = args.wallet_file + # # Load keys from the JSON file + # with open(args.wallet_file, 'r') as f: + # keys_data = json.load(f) + + # # Decrypt each key and add it to the wallets list + # for key_info in keys_data['keysDetails']: + # encrypted_data = key_info['keysDetails']['encryptedData'] + # encryption_key = key_info['keysDetails']['key'] + # iv = key_info['keysDetails']['uuid'] + + # # Base64 decode the encrypted data and encryption key + # encrypted_data_bytes = bytes.fromhex(encrypted_data) + # encryption_key_bytes = bytes.fromhex(encryption_key) + # iv_bytes = bytes.fromhex(iv) + + # # Decrypt the data + # cipher = AES.new(encryption_key_bytes, AES.MODE_CBC, iv=iv_bytes) + # decrypted_data = unpad(cipher.decrypt(encrypted_data_bytes), AES.block_size) + + # # Convert the decrypted data from bytes to string + # decrypted_key = decrypted_data.decode('utf-8') + # # Add the decrypted key to the wallets list + # wallets.append(decrypted_key) if args.random: