├── README.md ├── abi ├── 1155.txt ├── bridge_zerius.txt ├── claim_reward.txt ├── create_contract.txt ├── erc20minter.txt ├── l2pass.txt ├── mintfun.txt ├── nft2me.txt ├── of_bridge.txt ├── opensea.txt ├── refuel_merkly.txt ├── refuel_zerius.txt ├── token.txt ├── uniswap.txt └── wrap.txt ├── data ├── accounts_data.xlsx └── address_nft.txt ├── main.py ├── picture └── LOGO.png ├── requirements.txt ├── settings.py ├── utils ├── __init__.py ├── chain.py ├── claim_reward.py ├── create_contract.py ├── create_merkl_contract.py ├── custom_route.py ├── enjoy.py ├── func.py ├── l2pass.py ├── merkly.py ├── mint_nft.py ├── mintfun.py ├── nft2me.py ├── off_bridge.py ├── refuel.py ├── retry.py ├── retry_refuel.py ├── retry_wallet.py ├── send_money.py ├── set_email.py ├── swap.py ├── tg_bot.py ├── tunnel_bridge.py ├── walet_stats.py ├── wallet.py ├── words.txt ├── wrap.py └── zerius.py └── word.txt /README.md: -------------------------------------------------------------------------------- 1 | [![Telegram channel](https://img.shields.io/endpoint?url=https://runkit.io/damiankrawczyk/telegram-badge/branches/master?url=https://t.me/developercode1)](https://t.me/developercode1) 2 | [![PyPI supported Python versions](https://img.shields.io/badge/Python%203.10.10-8A2BE2)](https://www.python.org/downloads/release/python-31010/) 3 | 4 |
5 | 6 |

ZORA AIO

7 |

Софт на ZORA.CO - включает в себя почти 100% взаимодействие с экосистемой, возможность тонкой настройки, большое количество контрактов и удобную настройку

8 |
9 | 10 | --- 11 | 12 | 🤠👉 Наш канал: [PYTHON DAO](https://t.me/developercode1) 13 | 14 | 🤗 Поддержка: elez-dev.eth 15 | 16 | --- 17 |

🙊 INFO

18 | 19 | Для работы нужен [Python 3.10.10](https://www.python.org/downloads/release/python-31010/) 20 | 21 | В данном гайде подробно описано как установить Python - [link](https://mirror.xyz/wiedzmin.eth/Z06W81VrxO9KI88vkcxeW0Lc8f2nBo5Wdyqce0HTNm8) 22 | 23 | В данном посте вы можете найти все нужные и актуальные ZORA NFT - [link](https://t.me/fuckretrodrop/225) 24 | 25 | --- 26 | В папке _data_ заполняем Excel файл с приватными ключами и прокси (если надо) - напомню, что ZORA не работает с РУ IP. Поэтому во время работы включайте VPN, либо ставьте прокси. 27 | 28 | Все настройки происходят в файле _settings.py_ - каждая строчка подписана 29 | 30 | --- 31 |

🚀 УСТАНОВКА СОФТА

32 | 33 | ``` 34 | git clone https://github.com/Elez-dev/ZoraAIO.git 35 | 36 | cd ZoraAIO 37 | 38 | pip3.10 install -r requirements.txt 39 | 40 | python3.10 main.py 41 | ``` 42 | --- 43 |

🤖 ВОЗМОЖНОСТИ СОФТА:

44 | 45 | ``` 46 | 1 - OFFICIAL BRIDGE ETH -> ZORA 47 | 48 | 2 - INSTANT BRIDGE 49 | 50 | 3 - MERKLY GAS 51 | 52 | 9 - WRAP ETH 53 | 54 | 10 - UNWRAP ETH 55 | 56 | 11 - BUY + SOLD TOKEN 57 | 58 | 12 - MINT NFT в сети ZORA (С официальной комиссией ZORA 0.000777 ETH) 59 | 60 | 13 - MINT NFT в сети BASE (С официальной комиссией ZORA 0.000777 ETH) 61 | 62 | 14 - MINT NFT в сети OPTIMISM (С официальной комиссией ZORA 0.000777 ETH) 63 | 64 | 16 - MINT NFT в сети ARBITRUM (С официальной комиссией ZORA 0.000777 ETH) 65 | 66 | 17 - MINT NFT OPENSEA в сети ZORA (FREE MINT) 67 | 68 | 18 - MINT NFT OPENSEA в сети BASE (FREE MINT) 69 | 70 | 19 - MINT NFT OPENSEA в сети OPTIMISM (FREE MINT) 71 | 72 | 20 - MINT Custom NFT (ZORA.CO) 73 | 74 | 21 - MINT NFTS2ME (FREE MINT) 75 | 76 | 22 - MINT NFT FROM MINT.FUN (FREE MINT) 77 | 78 | 23 - CREATE ERC1155 NFT CONTRACT (ZORA.CO) 79 | 80 | 24 - UPDATE NFT METADATA (ZORA.CO) 81 | 82 | 25 - CLAIM REWARD (ZORA.CO) 83 | 84 | 26 - SEND ETH YOURSELF 85 | 86 | 27 - SET EMAIL ON ZORA 87 | 88 | 28 - DEPLOY MERKLY CONTRACT 89 | 90 | 29 - CHECK WALLETS STATS 91 | 92 | 30 - BUY TOKEN 93 | 94 | 31 - SOLD TOKEN 95 | 96 | 32 - MINT NFT FOR $ENJOY (ZORA.CO) 97 | 98 | 33 - MINT NFT FOR $IMAGINE (ZORA.CO) 99 | 100 | 34 - GENERATE CUSTOM ROUTES (сначала этот модуль -> потом 35) 101 | 102 | 35 - RUN CUSTOM ROUTES 103 | ``` 104 | --- 105 |

❤️ По всем вопросам в наш чат - https://t.me/pythondao

106 | -------------------------------------------------------------------------------- /abi/claim_reward.txt: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [], 4 | "stateMutability": "payable", 5 | "type": "constructor" 6 | }, 7 | { 8 | "inputs": [], 9 | "name": "ADDRESS_ZERO", 10 | "type": "error" 11 | }, 12 | { 13 | "inputs": [], 14 | "name": "ARRAY_LENGTH_MISMATCH", 15 | "type": "error" 16 | }, 17 | { 18 | "inputs": [], 19 | "name": "INVALID_DEPOSIT", 20 | "type": "error" 21 | }, 22 | { 23 | "inputs": [], 24 | "name": "INVALID_SIGNATURE", 25 | "type": "error" 26 | }, 27 | { 28 | "inputs": [], 29 | "name": "INVALID_WITHDRAW", 30 | "type": "error" 31 | }, 32 | { 33 | "inputs": [], 34 | "name": "InvalidShortString", 35 | "type": "error" 36 | }, 37 | { 38 | "inputs": [], 39 | "name": "SIGNATURE_DEADLINE_EXPIRED", 40 | "type": "error" 41 | }, 42 | { 43 | "inputs": [ 44 | { 45 | "internalType": "string", 46 | "name": "str", 47 | "type": "string" 48 | } 49 | ], 50 | "name": "StringTooLong", 51 | "type": "error" 52 | }, 53 | { 54 | "inputs": [], 55 | "name": "TRANSFER_FAILED", 56 | "type": "error" 57 | }, 58 | { 59 | "anonymous": false, 60 | "inputs": [ 61 | { 62 | "indexed": true, 63 | "internalType": "address", 64 | "name": "from", 65 | "type": "address" 66 | }, 67 | { 68 | "indexed": true, 69 | "internalType": "address", 70 | "name": "to", 71 | "type": "address" 72 | }, 73 | { 74 | "indexed": true, 75 | "internalType": "bytes4", 76 | "name": "reason", 77 | "type": "bytes4" 78 | }, 79 | { 80 | "indexed": false, 81 | "internalType": "uint256", 82 | "name": "amount", 83 | "type": "uint256" 84 | }, 85 | { 86 | "indexed": false, 87 | "internalType": "string", 88 | "name": "comment", 89 | "type": "string" 90 | } 91 | ], 92 | "name": "Deposit", 93 | "type": "event" 94 | }, 95 | { 96 | "anonymous": false, 97 | "inputs": [], 98 | "name": "EIP712DomainChanged", 99 | "type": "event" 100 | }, 101 | { 102 | "anonymous": false, 103 | "inputs": [ 104 | { 105 | "indexed": true, 106 | "internalType": "address", 107 | "name": "creator", 108 | "type": "address" 109 | }, 110 | { 111 | "indexed": true, 112 | "internalType": "address", 113 | "name": "createReferral", 114 | "type": "address" 115 | }, 116 | { 117 | "indexed": true, 118 | "internalType": "address", 119 | "name": "mintReferral", 120 | "type": "address" 121 | }, 122 | { 123 | "indexed": false, 124 | "internalType": "address", 125 | "name": "firstMinter", 126 | "type": "address" 127 | }, 128 | { 129 | "indexed": false, 130 | "internalType": "address", 131 | "name": "zora", 132 | "type": "address" 133 | }, 134 | { 135 | "indexed": false, 136 | "internalType": "address", 137 | "name": "from", 138 | "type": "address" 139 | }, 140 | { 141 | "indexed": false, 142 | "internalType": "uint256", 143 | "name": "creatorReward", 144 | "type": "uint256" 145 | }, 146 | { 147 | "indexed": false, 148 | "internalType": "uint256", 149 | "name": "createReferralReward", 150 | "type": "uint256" 151 | }, 152 | { 153 | "indexed": false, 154 | "internalType": "uint256", 155 | "name": "mintReferralReward", 156 | "type": "uint256" 157 | }, 158 | { 159 | "indexed": false, 160 | "internalType": "uint256", 161 | "name": "firstMinterReward", 162 | "type": "uint256" 163 | }, 164 | { 165 | "indexed": false, 166 | "internalType": "uint256", 167 | "name": "zoraReward", 168 | "type": "uint256" 169 | } 170 | ], 171 | "name": "RewardsDeposit", 172 | "type": "event" 173 | }, 174 | { 175 | "anonymous": false, 176 | "inputs": [ 177 | { 178 | "indexed": true, 179 | "internalType": "address", 180 | "name": "from", 181 | "type": "address" 182 | }, 183 | { 184 | "indexed": true, 185 | "internalType": "address", 186 | "name": "to", 187 | "type": "address" 188 | }, 189 | { 190 | "indexed": false, 191 | "internalType": "uint256", 192 | "name": "amount", 193 | "type": "uint256" 194 | } 195 | ], 196 | "name": "Withdraw", 197 | "type": "event" 198 | }, 199 | { 200 | "inputs": [], 201 | "name": "WITHDRAW_TYPEHASH", 202 | "outputs": [ 203 | { 204 | "internalType": "bytes32", 205 | "name": "", 206 | "type": "bytes32" 207 | } 208 | ], 209 | "stateMutability": "view", 210 | "type": "function" 211 | }, 212 | { 213 | "inputs": [ 214 | { 215 | "internalType": "address", 216 | "name": "", 217 | "type": "address" 218 | } 219 | ], 220 | "name": "balanceOf", 221 | "outputs": [ 222 | { 223 | "internalType": "uint256", 224 | "name": "", 225 | "type": "uint256" 226 | } 227 | ], 228 | "stateMutability": "view", 229 | "type": "function" 230 | }, 231 | { 232 | "inputs": [ 233 | { 234 | "internalType": "address", 235 | "name": "to", 236 | "type": "address" 237 | }, 238 | { 239 | "internalType": "bytes4", 240 | "name": "reason", 241 | "type": "bytes4" 242 | }, 243 | { 244 | "internalType": "string", 245 | "name": "comment", 246 | "type": "string" 247 | } 248 | ], 249 | "name": "deposit", 250 | "outputs": [], 251 | "stateMutability": "payable", 252 | "type": "function" 253 | }, 254 | { 255 | "inputs": [ 256 | { 257 | "internalType": "address[]", 258 | "name": "recipients", 259 | "type": "address[]" 260 | }, 261 | { 262 | "internalType": "uint256[]", 263 | "name": "amounts", 264 | "type": "uint256[]" 265 | }, 266 | { 267 | "internalType": "bytes4[]", 268 | "name": "reasons", 269 | "type": "bytes4[]" 270 | }, 271 | { 272 | "internalType": "string", 273 | "name": "comment", 274 | "type": "string" 275 | } 276 | ], 277 | "name": "depositBatch", 278 | "outputs": [], 279 | "stateMutability": "payable", 280 | "type": "function" 281 | }, 282 | { 283 | "inputs": [ 284 | { 285 | "internalType": "address", 286 | "name": "creator", 287 | "type": "address" 288 | }, 289 | { 290 | "internalType": "uint256", 291 | "name": "creatorReward", 292 | "type": "uint256" 293 | }, 294 | { 295 | "internalType": "address", 296 | "name": "createReferral", 297 | "type": "address" 298 | }, 299 | { 300 | "internalType": "uint256", 301 | "name": "createReferralReward", 302 | "type": "uint256" 303 | }, 304 | { 305 | "internalType": "address", 306 | "name": "mintReferral", 307 | "type": "address" 308 | }, 309 | { 310 | "internalType": "uint256", 311 | "name": "mintReferralReward", 312 | "type": "uint256" 313 | }, 314 | { 315 | "internalType": "address", 316 | "name": "firstMinter", 317 | "type": "address" 318 | }, 319 | { 320 | "internalType": "uint256", 321 | "name": "firstMinterReward", 322 | "type": "uint256" 323 | }, 324 | { 325 | "internalType": "address", 326 | "name": "zora", 327 | "type": "address" 328 | }, 329 | { 330 | "internalType": "uint256", 331 | "name": "zoraReward", 332 | "type": "uint256" 333 | } 334 | ], 335 | "name": "depositRewards", 336 | "outputs": [], 337 | "stateMutability": "payable", 338 | "type": "function" 339 | }, 340 | { 341 | "inputs": [], 342 | "name": "eip712Domain", 343 | "outputs": [ 344 | { 345 | "internalType": "bytes1", 346 | "name": "fields", 347 | "type": "bytes1" 348 | }, 349 | { 350 | "internalType": "string", 351 | "name": "name", 352 | "type": "string" 353 | }, 354 | { 355 | "internalType": "string", 356 | "name": "version", 357 | "type": "string" 358 | }, 359 | { 360 | "internalType": "uint256", 361 | "name": "chainId", 362 | "type": "uint256" 363 | }, 364 | { 365 | "internalType": "address", 366 | "name": "verifyingContract", 367 | "type": "address" 368 | }, 369 | { 370 | "internalType": "bytes32", 371 | "name": "salt", 372 | "type": "bytes32" 373 | }, 374 | { 375 | "internalType": "uint256[]", 376 | "name": "extensions", 377 | "type": "uint256[]" 378 | } 379 | ], 380 | "stateMutability": "view", 381 | "type": "function" 382 | }, 383 | { 384 | "inputs": [ 385 | { 386 | "internalType": "address", 387 | "name": "", 388 | "type": "address" 389 | } 390 | ], 391 | "name": "nonces", 392 | "outputs": [ 393 | { 394 | "internalType": "uint256", 395 | "name": "", 396 | "type": "uint256" 397 | } 398 | ], 399 | "stateMutability": "view", 400 | "type": "function" 401 | }, 402 | { 403 | "inputs": [], 404 | "name": "totalSupply", 405 | "outputs": [ 406 | { 407 | "internalType": "uint256", 408 | "name": "", 409 | "type": "uint256" 410 | } 411 | ], 412 | "stateMutability": "view", 413 | "type": "function" 414 | }, 415 | { 416 | "inputs": [ 417 | { 418 | "internalType": "address", 419 | "name": "to", 420 | "type": "address" 421 | }, 422 | { 423 | "internalType": "uint256", 424 | "name": "amount", 425 | "type": "uint256" 426 | } 427 | ], 428 | "name": "withdraw", 429 | "outputs": [], 430 | "stateMutability": "nonpayable", 431 | "type": "function" 432 | }, 433 | { 434 | "inputs": [ 435 | { 436 | "internalType": "address", 437 | "name": "to", 438 | "type": "address" 439 | }, 440 | { 441 | "internalType": "uint256", 442 | "name": "amount", 443 | "type": "uint256" 444 | } 445 | ], 446 | "name": "withdrawFor", 447 | "outputs": [], 448 | "stateMutability": "nonpayable", 449 | "type": "function" 450 | }, 451 | { 452 | "inputs": [ 453 | { 454 | "internalType": "address", 455 | "name": "from", 456 | "type": "address" 457 | }, 458 | { 459 | "internalType": "address", 460 | "name": "to", 461 | "type": "address" 462 | }, 463 | { 464 | "internalType": "uint256", 465 | "name": "amount", 466 | "type": "uint256" 467 | }, 468 | { 469 | "internalType": "uint256", 470 | "name": "deadline", 471 | "type": "uint256" 472 | }, 473 | { 474 | "internalType": "uint8", 475 | "name": "v", 476 | "type": "uint8" 477 | }, 478 | { 479 | "internalType": "bytes32", 480 | "name": "r", 481 | "type": "bytes32" 482 | }, 483 | { 484 | "internalType": "bytes32", 485 | "name": "s", 486 | "type": "bytes32" 487 | } 488 | ], 489 | "name": "withdrawWithSig", 490 | "outputs": [], 491 | "stateMutability": "nonpayable", 492 | "type": "function" 493 | } 494 | ] -------------------------------------------------------------------------------- /abi/mintfun.txt: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [], 4 | "stateMutability": "nonpayable", 5 | "type": "constructor" 6 | }, 7 | { 8 | "inputs": [], 9 | "name": "ApprovalCallerNotOwnerNorApproved", 10 | "type": "error" 11 | }, 12 | { 13 | "inputs": [], 14 | "name": "ApprovalQueryForNonexistentToken", 15 | "type": "error" 16 | }, 17 | { 18 | "inputs": [], 19 | "name": "BalanceQueryForZeroAddress", 20 | "type": "error" 21 | }, 22 | { 23 | "inputs": [], 24 | "name": "MintERC2309QuantityExceedsLimit", 25 | "type": "error" 26 | }, 27 | { 28 | "inputs": [], 29 | "name": "MintToZeroAddress", 30 | "type": "error" 31 | }, 32 | { 33 | "inputs": [], 34 | "name": "MintZeroQuantity", 35 | "type": "error" 36 | }, 37 | { 38 | "inputs": [], 39 | "name": "OwnerQueryForNonexistentToken", 40 | "type": "error" 41 | }, 42 | { 43 | "inputs": [], 44 | "name": "OwnershipNotInitializedForExtraData", 45 | "type": "error" 46 | }, 47 | { 48 | "inputs": [], 49 | "name": "TransferCallerNotOwnerNorApproved", 50 | "type": "error" 51 | }, 52 | { 53 | "inputs": [], 54 | "name": "TransferFromIncorrectOwner", 55 | "type": "error" 56 | }, 57 | { 58 | "inputs": [], 59 | "name": "TransferToNonERC721ReceiverImplementer", 60 | "type": "error" 61 | }, 62 | { 63 | "inputs": [], 64 | "name": "TransferToZeroAddress", 65 | "type": "error" 66 | }, 67 | { 68 | "inputs": [], 69 | "name": "URIQueryForNonexistentToken", 70 | "type": "error" 71 | }, 72 | { 73 | "anonymous": false, 74 | "inputs": [ 75 | { 76 | "indexed": true, 77 | "internalType": "address", 78 | "name": "owner", 79 | "type": "address" 80 | }, 81 | { 82 | "indexed": true, 83 | "internalType": "address", 84 | "name": "approved", 85 | "type": "address" 86 | }, 87 | { 88 | "indexed": true, 89 | "internalType": "uint256", 90 | "name": "tokenId", 91 | "type": "uint256" 92 | } 93 | ], 94 | "name": "Approval", 95 | "type": "event" 96 | }, 97 | { 98 | "anonymous": false, 99 | "inputs": [ 100 | { 101 | "indexed": true, 102 | "internalType": "address", 103 | "name": "owner", 104 | "type": "address" 105 | }, 106 | { 107 | "indexed": true, 108 | "internalType": "address", 109 | "name": "operator", 110 | "type": "address" 111 | }, 112 | { 113 | "indexed": false, 114 | "internalType": "bool", 115 | "name": "approved", 116 | "type": "bool" 117 | } 118 | ], 119 | "name": "ApprovalForAll", 120 | "type": "event" 121 | }, 122 | { 123 | "anonymous": false, 124 | "inputs": [ 125 | { 126 | "indexed": true, 127 | "internalType": "uint256", 128 | "name": "fromTokenId", 129 | "type": "uint256" 130 | }, 131 | { 132 | "indexed": false, 133 | "internalType": "uint256", 134 | "name": "toTokenId", 135 | "type": "uint256" 136 | }, 137 | { 138 | "indexed": true, 139 | "internalType": "address", 140 | "name": "from", 141 | "type": "address" 142 | }, 143 | { 144 | "indexed": true, 145 | "internalType": "address", 146 | "name": "to", 147 | "type": "address" 148 | } 149 | ], 150 | "name": "ConsecutiveTransfer", 151 | "type": "event" 152 | }, 153 | { 154 | "anonymous": false, 155 | "inputs": [ 156 | { 157 | "indexed": true, 158 | "internalType": "address", 159 | "name": "msgSender", 160 | "type": "address" 161 | }, 162 | { 163 | "indexed": true, 164 | "internalType": "uint256", 165 | "name": "mintQuantity", 166 | "type": "uint256" 167 | } 168 | ], 169 | "name": "NewMint", 170 | "type": "event" 171 | }, 172 | { 173 | "anonymous": false, 174 | "inputs": [ 175 | { 176 | "indexed": true, 177 | "internalType": "address", 178 | "name": "previousOwner", 179 | "type": "address" 180 | }, 181 | { 182 | "indexed": true, 183 | "internalType": "address", 184 | "name": "newOwner", 185 | "type": "address" 186 | } 187 | ], 188 | "name": "OwnershipTransferred", 189 | "type": "event" 190 | }, 191 | { 192 | "anonymous": false, 193 | "inputs": [ 194 | { 195 | "indexed": true, 196 | "internalType": "address", 197 | "name": "from", 198 | "type": "address" 199 | }, 200 | { 201 | "indexed": true, 202 | "internalType": "address", 203 | "name": "to", 204 | "type": "address" 205 | }, 206 | { 207 | "indexed": true, 208 | "internalType": "uint256", 209 | "name": "tokenId", 210 | "type": "uint256" 211 | } 212 | ], 213 | "name": "Transfer", 214 | "type": "event" 215 | }, 216 | { 217 | "inputs": [], 218 | "name": "FREE_SUPPLY", 219 | "outputs": [ 220 | { 221 | "internalType": "uint256", 222 | "name": "", 223 | "type": "uint256" 224 | } 225 | ], 226 | "stateMutability": "view", 227 | "type": "function" 228 | }, 229 | { 230 | "inputs": [], 231 | "name": "MAX_SUPPLY", 232 | "outputs": [ 233 | { 234 | "internalType": "uint256", 235 | "name": "", 236 | "type": "uint256" 237 | } 238 | ], 239 | "stateMutability": "view", 240 | "type": "function" 241 | }, 242 | { 243 | "inputs": [], 244 | "name": "PAID_SUPPLY", 245 | "outputs": [ 246 | { 247 | "internalType": "uint256", 248 | "name": "", 249 | "type": "uint256" 250 | } 251 | ], 252 | "stateMutability": "view", 253 | "type": "function" 254 | }, 255 | { 256 | "inputs": [ 257 | { 258 | "internalType": "address", 259 | "name": "to", 260 | "type": "address" 261 | }, 262 | { 263 | "internalType": "uint256", 264 | "name": "tokenId", 265 | "type": "uint256" 266 | } 267 | ], 268 | "name": "approve", 269 | "outputs": [], 270 | "stateMutability": "payable", 271 | "type": "function" 272 | }, 273 | { 274 | "inputs": [ 275 | { 276 | "internalType": "address", 277 | "name": "owner", 278 | "type": "address" 279 | } 280 | ], 281 | "name": "balanceOf", 282 | "outputs": [ 283 | { 284 | "internalType": "uint256", 285 | "name": "", 286 | "type": "uint256" 287 | } 288 | ], 289 | "stateMutability": "view", 290 | "type": "function" 291 | }, 292 | { 293 | "inputs": [ 294 | { 295 | "internalType": "string", 296 | "name": "_tokenURI", 297 | "type": "string" 298 | } 299 | ], 300 | "name": "changeDefURI", 301 | "outputs": [], 302 | "stateMutability": "nonpayable", 303 | "type": "function" 304 | }, 305 | { 306 | "inputs": [ 307 | { 308 | "internalType": "uint256", 309 | "name": "flag", 310 | "type": "uint256" 311 | } 312 | ], 313 | "name": "changeTokenURIFlag", 314 | "outputs": [], 315 | "stateMutability": "nonpayable", 316 | "type": "function" 317 | }, 318 | { 319 | "inputs": [ 320 | { 321 | "internalType": "string", 322 | "name": "_tokenURI", 323 | "type": "string" 324 | } 325 | ], 326 | "name": "changeURI", 327 | "outputs": [], 328 | "stateMutability": "nonpayable", 329 | "type": "function" 330 | }, 331 | { 332 | "inputs": [ 333 | { 334 | "internalType": "uint256", 335 | "name": "tokenId", 336 | "type": "uint256" 337 | } 338 | ], 339 | "name": "getApproved", 340 | "outputs": [ 341 | { 342 | "internalType": "address", 343 | "name": "", 344 | "type": "address" 345 | } 346 | ], 347 | "stateMutability": "view", 348 | "type": "function" 349 | }, 350 | { 351 | "inputs": [ 352 | { 353 | "internalType": "address", 354 | "name": "owner", 355 | "type": "address" 356 | }, 357 | { 358 | "internalType": "address", 359 | "name": "operator", 360 | "type": "address" 361 | } 362 | ], 363 | "name": "isApprovedForAll", 364 | "outputs": [ 365 | { 366 | "internalType": "bool", 367 | "name": "", 368 | "type": "bool" 369 | } 370 | ], 371 | "stateMutability": "view", 372 | "type": "function" 373 | }, 374 | { 375 | "inputs": [ 376 | { 377 | "internalType": "uint256", 378 | "name": "quantity", 379 | "type": "uint256" 380 | } 381 | ], 382 | "name": "mint", 383 | "outputs": [], 384 | "stateMutability": "payable", 385 | "type": "function" 386 | }, 387 | { 388 | "inputs": [], 389 | "name": "name", 390 | "outputs": [ 391 | { 392 | "internalType": "string", 393 | "name": "", 394 | "type": "string" 395 | } 396 | ], 397 | "stateMutability": "view", 398 | "type": "function" 399 | }, 400 | { 401 | "inputs": [], 402 | "name": "owner", 403 | "outputs": [ 404 | { 405 | "internalType": "address", 406 | "name": "", 407 | "type": "address" 408 | } 409 | ], 410 | "stateMutability": "view", 411 | "type": "function" 412 | }, 413 | { 414 | "inputs": [ 415 | { 416 | "internalType": "uint256", 417 | "name": "tokenId", 418 | "type": "uint256" 419 | } 420 | ], 421 | "name": "ownerOf", 422 | "outputs": [ 423 | { 424 | "internalType": "address", 425 | "name": "", 426 | "type": "address" 427 | } 428 | ], 429 | "stateMutability": "view", 430 | "type": "function" 431 | }, 432 | { 433 | "inputs": [], 434 | "name": "renounceOwnership", 435 | "outputs": [], 436 | "stateMutability": "nonpayable", 437 | "type": "function" 438 | }, 439 | { 440 | "inputs": [ 441 | { 442 | "internalType": "address", 443 | "name": "from", 444 | "type": "address" 445 | }, 446 | { 447 | "internalType": "address", 448 | "name": "to", 449 | "type": "address" 450 | }, 451 | { 452 | "internalType": "uint256", 453 | "name": "tokenId", 454 | "type": "uint256" 455 | } 456 | ], 457 | "name": "safeTransferFrom", 458 | "outputs": [], 459 | "stateMutability": "payable", 460 | "type": "function" 461 | }, 462 | { 463 | "inputs": [ 464 | { 465 | "internalType": "address", 466 | "name": "from", 467 | "type": "address" 468 | }, 469 | { 470 | "internalType": "address", 471 | "name": "to", 472 | "type": "address" 473 | }, 474 | { 475 | "internalType": "uint256", 476 | "name": "tokenId", 477 | "type": "uint256" 478 | }, 479 | { 480 | "internalType": "bytes", 481 | "name": "_data", 482 | "type": "bytes" 483 | } 484 | ], 485 | "name": "safeTransferFrom", 486 | "outputs": [], 487 | "stateMutability": "payable", 488 | "type": "function" 489 | }, 490 | { 491 | "inputs": [ 492 | { 493 | "internalType": "address", 494 | "name": "operator", 495 | "type": "address" 496 | }, 497 | { 498 | "internalType": "bool", 499 | "name": "approved", 500 | "type": "bool" 501 | } 502 | ], 503 | "name": "setApprovalForAll", 504 | "outputs": [], 505 | "stateMutability": "nonpayable", 506 | "type": "function" 507 | }, 508 | { 509 | "inputs": [ 510 | { 511 | "internalType": "bytes4", 512 | "name": "interfaceId", 513 | "type": "bytes4" 514 | } 515 | ], 516 | "name": "supportsInterface", 517 | "outputs": [ 518 | { 519 | "internalType": "bool", 520 | "name": "", 521 | "type": "bool" 522 | } 523 | ], 524 | "stateMutability": "view", 525 | "type": "function" 526 | }, 527 | { 528 | "inputs": [], 529 | "name": "symbol", 530 | "outputs": [ 531 | { 532 | "internalType": "string", 533 | "name": "", 534 | "type": "string" 535 | } 536 | ], 537 | "stateMutability": "view", 538 | "type": "function" 539 | }, 540 | { 541 | "inputs": [ 542 | { 543 | "internalType": "uint256", 544 | "name": "tokenId", 545 | "type": "uint256" 546 | } 547 | ], 548 | "name": "tokenURI", 549 | "outputs": [ 550 | { 551 | "internalType": "string", 552 | "name": "", 553 | "type": "string" 554 | } 555 | ], 556 | "stateMutability": "view", 557 | "type": "function" 558 | }, 559 | { 560 | "inputs": [], 561 | "name": "totalSupply", 562 | "outputs": [ 563 | { 564 | "internalType": "uint256", 565 | "name": "", 566 | "type": "uint256" 567 | } 568 | ], 569 | "stateMutability": "view", 570 | "type": "function" 571 | }, 572 | { 573 | "inputs": [ 574 | { 575 | "internalType": "address", 576 | "name": "from", 577 | "type": "address" 578 | }, 579 | { 580 | "internalType": "address", 581 | "name": "to", 582 | "type": "address" 583 | }, 584 | { 585 | "internalType": "uint256", 586 | "name": "tokenId", 587 | "type": "uint256" 588 | } 589 | ], 590 | "name": "transferFrom", 591 | "outputs": [], 592 | "stateMutability": "payable", 593 | "type": "function" 594 | }, 595 | { 596 | "inputs": [ 597 | { 598 | "internalType": "address", 599 | "name": "_to", 600 | "type": "address" 601 | } 602 | ], 603 | "name": "transferOut", 604 | "outputs": [], 605 | "stateMutability": "nonpayable", 606 | "type": "function" 607 | }, 608 | { 609 | "inputs": [ 610 | { 611 | "internalType": "address", 612 | "name": "newOwner", 613 | "type": "address" 614 | } 615 | ], 616 | "name": "transferOwnership", 617 | "outputs": [], 618 | "stateMutability": "nonpayable", 619 | "type": "function" 620 | } 621 | ] -------------------------------------------------------------------------------- /abi/of_bridge.txt: -------------------------------------------------------------------------------- 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"}] -------------------------------------------------------------------------------- /abi/opensea.txt: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "constant": false, 4 | "inputs": [ 5 | { 6 | "name": "nftContract", 7 | "type": "address" 8 | }, 9 | { 10 | "name": "feeRecipient", 11 | "type": "address" 12 | }, 13 | { 14 | "name": "minterIfNotPayer", 15 | "type": "address" 16 | }, 17 | { 18 | "name": "quantity", 19 | "type": "uint256" 20 | } 21 | ], 22 | "name": "mintPublic", 23 | "outputs": [ 24 | { 25 | "name": "", 26 | "type": "bool" 27 | } 28 | ], 29 | "payable": false, 30 | "stateMutability": "nonpayable", 31 | "type": "function" 32 | } 33 | ] -------------------------------------------------------------------------------- /abi/refuel_merkly.txt: -------------------------------------------------------------------------------- 1 | [{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":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":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":"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"},{"inputs":[],"name":"DEFAULT_PAYLOAD_SIZE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_EXTRA_GAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PT_SEND","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"bridgeGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"payload","type":"bytes"},{"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":"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":"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":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"minDstGasLookup","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":"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":"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":"uint16","name":"_packetType","type":"uint16"},{"internalType":"uint256","name":"_minGas","type":"uint256"}],"name":"setMinDstGas","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":"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":"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":[],"name":"useCustomAdapterParams","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}] -------------------------------------------------------------------------------- /abi/refuel_zerius.txt: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [ 4 | { 5 | "internalType": "address", 6 | "name": "_lzEndpoint", 7 | "type": "address" 8 | } 9 | ], 10 | "stateMutability": "nonpayable", 11 | "type": "constructor" 12 | }, 13 | { 14 | "anonymous": false, 15 | "inputs": [ 16 | { 17 | "indexed": false, 18 | "internalType": "uint16", 19 | "name": "_srcChainId", 20 | "type": "uint16" 21 | }, 22 | { 23 | "indexed": false, 24 | "internalType": "bytes", 25 | "name": "_srcAddress", 26 | "type": "bytes" 27 | }, 28 | { 29 | "indexed": false, 30 | "internalType": "uint64", 31 | "name": "_nonce", 32 | "type": "uint64" 33 | }, 34 | { 35 | "indexed": false, 36 | "internalType": "bytes", 37 | "name": "_payload", 38 | "type": "bytes" 39 | }, 40 | { 41 | "indexed": false, 42 | "internalType": "bytes", 43 | "name": "_reason", 44 | "type": "bytes" 45 | } 46 | ], 47 | "name": "MessageFailed", 48 | "type": "event" 49 | }, 50 | { 51 | "anonymous": false, 52 | "inputs": [ 53 | { 54 | "indexed": true, 55 | "internalType": "address", 56 | "name": "previousOwner", 57 | "type": "address" 58 | }, 59 | { 60 | "indexed": true, 61 | "internalType": "address", 62 | "name": "newOwner", 63 | "type": "address" 64 | } 65 | ], 66 | "name": "OwnershipTransferred", 67 | "type": "event" 68 | }, 69 | { 70 | "anonymous": false, 71 | "inputs": [ 72 | { 73 | "indexed": false, 74 | "internalType": "uint16", 75 | "name": "_srcChainId", 76 | "type": "uint16" 77 | }, 78 | { 79 | "indexed": false, 80 | "internalType": "bytes", 81 | "name": "_srcAddress", 82 | "type": "bytes" 83 | }, 84 | { 85 | "indexed": false, 86 | "internalType": "uint64", 87 | "name": "_nonce", 88 | "type": "uint64" 89 | }, 90 | { 91 | "indexed": false, 92 | "internalType": "bytes32", 93 | "name": "_payloadHash", 94 | "type": "bytes32" 95 | } 96 | ], 97 | "name": "RetryMessageSuccess", 98 | "type": "event" 99 | }, 100 | { 101 | "anonymous": false, 102 | "inputs": [ 103 | { 104 | "indexed": false, 105 | "internalType": "uint16", 106 | "name": "_dstChainId", 107 | "type": "uint16" 108 | }, 109 | { 110 | "indexed": false, 111 | "internalType": "uint16", 112 | "name": "_type", 113 | "type": "uint16" 114 | }, 115 | { 116 | "indexed": false, 117 | "internalType": "uint256", 118 | "name": "_minDstGas", 119 | "type": "uint256" 120 | } 121 | ], 122 | "name": "SetMinDstGas", 123 | "type": "event" 124 | }, 125 | { 126 | "anonymous": false, 127 | "inputs": [ 128 | { 129 | "indexed": false, 130 | "internalType": "address", 131 | "name": "precrime", 132 | "type": "address" 133 | } 134 | ], 135 | "name": "SetPrecrime", 136 | "type": "event" 137 | }, 138 | { 139 | "anonymous": false, 140 | "inputs": [ 141 | { 142 | "indexed": false, 143 | "internalType": "uint16", 144 | "name": "_remoteChainId", 145 | "type": "uint16" 146 | }, 147 | { 148 | "indexed": false, 149 | "internalType": "bytes", 150 | "name": "_path", 151 | "type": "bytes" 152 | } 153 | ], 154 | "name": "SetTrustedRemote", 155 | "type": "event" 156 | }, 157 | { 158 | "anonymous": false, 159 | "inputs": [ 160 | { 161 | "indexed": false, 162 | "internalType": "uint16", 163 | "name": "_remoteChainId", 164 | "type": "uint16" 165 | }, 166 | { 167 | "indexed": false, 168 | "internalType": "bytes", 169 | "name": "_remoteAddress", 170 | "type": "bytes" 171 | } 172 | ], 173 | "name": "SetTrustedRemoteAddress", 174 | "type": "event" 175 | }, 176 | { 177 | "inputs": [], 178 | "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", 179 | "outputs": [ 180 | { 181 | "internalType": "uint256", 182 | "name": "", 183 | "type": "uint256" 184 | } 185 | ], 186 | "stateMutability": "view", 187 | "type": "function" 188 | }, 189 | { 190 | "inputs": [], 191 | "name": "FUNCTION_TYPE_SEND", 192 | "outputs": [ 193 | { 194 | "internalType": "uint16", 195 | "name": "", 196 | "type": "uint16" 197 | } 198 | ], 199 | "stateMutability": "view", 200 | "type": "function" 201 | }, 202 | { 203 | "inputs": [ 204 | { 205 | "internalType": "uint16", 206 | "name": "_dstChainId", 207 | "type": "uint16" 208 | }, 209 | { 210 | "internalType": "bytes", 211 | "name": "payload", 212 | "type": "bytes" 213 | }, 214 | { 215 | "internalType": "bytes", 216 | "name": "_adapterParams", 217 | "type": "bytes" 218 | } 219 | ], 220 | "name": "estimateSendFee", 221 | "outputs": [ 222 | { 223 | "internalType": "uint256", 224 | "name": "nativeFee", 225 | "type": "uint256" 226 | }, 227 | { 228 | "internalType": "uint256", 229 | "name": "zroFee", 230 | "type": "uint256" 231 | } 232 | ], 233 | "stateMutability": "view", 234 | "type": "function" 235 | }, 236 | { 237 | "inputs": [ 238 | { 239 | "internalType": "uint16", 240 | "name": "", 241 | "type": "uint16" 242 | }, 243 | { 244 | "internalType": "bytes", 245 | "name": "", 246 | "type": "bytes" 247 | }, 248 | { 249 | "internalType": "uint64", 250 | "name": "", 251 | "type": "uint64" 252 | } 253 | ], 254 | "name": "failedMessages", 255 | "outputs": [ 256 | { 257 | "internalType": "bytes32", 258 | "name": "", 259 | "type": "bytes32" 260 | } 261 | ], 262 | "stateMutability": "view", 263 | "type": "function" 264 | }, 265 | { 266 | "inputs": [ 267 | { 268 | "internalType": "uint16", 269 | "name": "_srcChainId", 270 | "type": "uint16" 271 | }, 272 | { 273 | "internalType": "bytes", 274 | "name": "_srcAddress", 275 | "type": "bytes" 276 | } 277 | ], 278 | "name": "forceResumeReceive", 279 | "outputs": [], 280 | "stateMutability": "nonpayable", 281 | "type": "function" 282 | }, 283 | { 284 | "inputs": [ 285 | { 286 | "internalType": "uint16", 287 | "name": "_version", 288 | "type": "uint16" 289 | }, 290 | { 291 | "internalType": "uint16", 292 | "name": "_chainId", 293 | "type": "uint16" 294 | }, 295 | { 296 | "internalType": "address", 297 | "name": "", 298 | "type": "address" 299 | }, 300 | { 301 | "internalType": "uint256", 302 | "name": "_configType", 303 | "type": "uint256" 304 | } 305 | ], 306 | "name": "getConfig", 307 | "outputs": [ 308 | { 309 | "internalType": "bytes", 310 | "name": "", 311 | "type": "bytes" 312 | } 313 | ], 314 | "stateMutability": "view", 315 | "type": "function" 316 | }, 317 | { 318 | "inputs": [], 319 | "name": "getFee", 320 | "outputs": [ 321 | { 322 | "internalType": "uint256", 323 | "name": "", 324 | "type": "uint256" 325 | } 326 | ], 327 | "stateMutability": "view", 328 | "type": "function" 329 | }, 330 | { 331 | "inputs": [ 332 | { 333 | "internalType": "uint16", 334 | "name": "_remoteChainId", 335 | "type": "uint16" 336 | } 337 | ], 338 | "name": "getTrustedRemoteAddress", 339 | "outputs": [ 340 | { 341 | "internalType": "bytes", 342 | "name": "", 343 | "type": "bytes" 344 | } 345 | ], 346 | "stateMutability": "view", 347 | "type": "function" 348 | }, 349 | { 350 | "inputs": [ 351 | { 352 | "internalType": "uint16", 353 | "name": "_srcChainId", 354 | "type": "uint16" 355 | }, 356 | { 357 | "internalType": "bytes", 358 | "name": "_srcAddress", 359 | "type": "bytes" 360 | } 361 | ], 362 | "name": "isTrustedRemote", 363 | "outputs": [ 364 | { 365 | "internalType": "bool", 366 | "name": "", 367 | "type": "bool" 368 | } 369 | ], 370 | "stateMutability": "view", 371 | "type": "function" 372 | }, 373 | { 374 | "inputs": [], 375 | "name": "lzEndpoint", 376 | "outputs": [ 377 | { 378 | "internalType": "contract ILayerZeroEndpoint", 379 | "name": "", 380 | "type": "address" 381 | } 382 | ], 383 | "stateMutability": "view", 384 | "type": "function" 385 | }, 386 | { 387 | "inputs": [ 388 | { 389 | "internalType": "uint16", 390 | "name": "_srcChainId", 391 | "type": "uint16" 392 | }, 393 | { 394 | "internalType": "bytes", 395 | "name": "_srcAddress", 396 | "type": "bytes" 397 | }, 398 | { 399 | "internalType": "uint64", 400 | "name": "_nonce", 401 | "type": "uint64" 402 | }, 403 | { 404 | "internalType": "bytes", 405 | "name": "_payload", 406 | "type": "bytes" 407 | } 408 | ], 409 | "name": "lzReceive", 410 | "outputs": [], 411 | "stateMutability": "nonpayable", 412 | "type": "function" 413 | }, 414 | { 415 | "inputs": [ 416 | { 417 | "internalType": "uint16", 418 | "name": "", 419 | "type": "uint16" 420 | }, 421 | { 422 | "internalType": "uint16", 423 | "name": "", 424 | "type": "uint16" 425 | } 426 | ], 427 | "name": "minDstGasLookup", 428 | "outputs": [ 429 | { 430 | "internalType": "uint256", 431 | "name": "", 432 | "type": "uint256" 433 | } 434 | ], 435 | "stateMutability": "view", 436 | "type": "function" 437 | }, 438 | { 439 | "inputs": [ 440 | { 441 | "internalType": "uint16", 442 | "name": "_srcChainId", 443 | "type": "uint16" 444 | }, 445 | { 446 | "internalType": "bytes", 447 | "name": "_srcAddress", 448 | "type": "bytes" 449 | }, 450 | { 451 | "internalType": "uint64", 452 | "name": "_nonce", 453 | "type": "uint64" 454 | }, 455 | { 456 | "internalType": "bytes", 457 | "name": "_payload", 458 | "type": "bytes" 459 | } 460 | ], 461 | "name": "nonblockingLzReceive", 462 | "outputs": [], 463 | "stateMutability": "nonpayable", 464 | "type": "function" 465 | }, 466 | { 467 | "inputs": [], 468 | "name": "owner", 469 | "outputs": [ 470 | { 471 | "internalType": "address", 472 | "name": "", 473 | "type": "address" 474 | } 475 | ], 476 | "stateMutability": "view", 477 | "type": "function" 478 | }, 479 | { 480 | "inputs": [ 481 | { 482 | "internalType": "uint16", 483 | "name": "", 484 | "type": "uint16" 485 | } 486 | ], 487 | "name": "payloadSizeLimitLookup", 488 | "outputs": [ 489 | { 490 | "internalType": "uint256", 491 | "name": "", 492 | "type": "uint256" 493 | } 494 | ], 495 | "stateMutability": "view", 496 | "type": "function" 497 | }, 498 | { 499 | "inputs": [], 500 | "name": "precrime", 501 | "outputs": [ 502 | { 503 | "internalType": "address", 504 | "name": "", 505 | "type": "address" 506 | } 507 | ], 508 | "stateMutability": "view", 509 | "type": "function" 510 | }, 511 | { 512 | "inputs": [ 513 | { 514 | "internalType": "uint16", 515 | "name": "_dstChainId", 516 | "type": "uint16" 517 | }, 518 | { 519 | "internalType": "bytes", 520 | "name": "_toAddress", 521 | "type": "bytes" 522 | }, 523 | { 524 | "internalType": "bytes", 525 | "name": "_adapterParams", 526 | "type": "bytes" 527 | } 528 | ], 529 | "name": "refuel", 530 | "outputs": [], 531 | "stateMutability": "payable", 532 | "type": "function" 533 | }, 534 | { 535 | "inputs": [], 536 | "name": "renounceOwnership", 537 | "outputs": [], 538 | "stateMutability": "nonpayable", 539 | "type": "function" 540 | }, 541 | { 542 | "inputs": [ 543 | { 544 | "internalType": "uint16", 545 | "name": "_srcChainId", 546 | "type": "uint16" 547 | }, 548 | { 549 | "internalType": "bytes", 550 | "name": "_srcAddress", 551 | "type": "bytes" 552 | }, 553 | { 554 | "internalType": "uint64", 555 | "name": "_nonce", 556 | "type": "uint64" 557 | }, 558 | { 559 | "internalType": "bytes", 560 | "name": "_payload", 561 | "type": "bytes" 562 | } 563 | ], 564 | "name": "retryMessage", 565 | "outputs": [], 566 | "stateMutability": "payable", 567 | "type": "function" 568 | }, 569 | { 570 | "inputs": [ 571 | { 572 | "internalType": "uint16", 573 | "name": "_version", 574 | "type": "uint16" 575 | }, 576 | { 577 | "internalType": "uint16", 578 | "name": "_chainId", 579 | "type": "uint16" 580 | }, 581 | { 582 | "internalType": "uint256", 583 | "name": "_configType", 584 | "type": "uint256" 585 | }, 586 | { 587 | "internalType": "bytes", 588 | "name": "_config", 589 | "type": "bytes" 590 | } 591 | ], 592 | "name": "setConfig", 593 | "outputs": [], 594 | "stateMutability": "nonpayable", 595 | "type": "function" 596 | }, 597 | { 598 | "inputs": [ 599 | { 600 | "internalType": "uint256", 601 | "name": "_fee", 602 | "type": "uint256" 603 | } 604 | ], 605 | "name": "setFee", 606 | "outputs": [], 607 | "stateMutability": "nonpayable", 608 | "type": "function" 609 | }, 610 | { 611 | "inputs": [ 612 | { 613 | "internalType": "uint16", 614 | "name": "_dstChainId", 615 | "type": "uint16" 616 | }, 617 | { 618 | "internalType": "uint16", 619 | "name": "_packetType", 620 | "type": "uint16" 621 | }, 622 | { 623 | "internalType": "uint256", 624 | "name": "_minGas", 625 | "type": "uint256" 626 | } 627 | ], 628 | "name": "setMinDstGas", 629 | "outputs": [], 630 | "stateMutability": "nonpayable", 631 | "type": "function" 632 | }, 633 | { 634 | "inputs": [ 635 | { 636 | "internalType": "uint16", 637 | "name": "_dstChainId", 638 | "type": "uint16" 639 | }, 640 | { 641 | "internalType": "uint256", 642 | "name": "_size", 643 | "type": "uint256" 644 | } 645 | ], 646 | "name": "setPayloadSizeLimit", 647 | "outputs": [], 648 | "stateMutability": "nonpayable", 649 | "type": "function" 650 | }, 651 | { 652 | "inputs": [ 653 | { 654 | "internalType": "address", 655 | "name": "_precrime", 656 | "type": "address" 657 | } 658 | ], 659 | "name": "setPrecrime", 660 | "outputs": [], 661 | "stateMutability": "nonpayable", 662 | "type": "function" 663 | }, 664 | { 665 | "inputs": [ 666 | { 667 | "internalType": "uint16", 668 | "name": "_version", 669 | "type": "uint16" 670 | } 671 | ], 672 | "name": "setReceiveVersion", 673 | "outputs": [], 674 | "stateMutability": "nonpayable", 675 | "type": "function" 676 | }, 677 | { 678 | "inputs": [ 679 | { 680 | "internalType": "uint16", 681 | "name": "_version", 682 | "type": "uint16" 683 | } 684 | ], 685 | "name": "setSendVersion", 686 | "outputs": [], 687 | "stateMutability": "nonpayable", 688 | "type": "function" 689 | }, 690 | { 691 | "inputs": [ 692 | { 693 | "internalType": "uint16", 694 | "name": "_remoteChainId", 695 | "type": "uint16" 696 | }, 697 | { 698 | "internalType": "bytes", 699 | "name": "_path", 700 | "type": "bytes" 701 | } 702 | ], 703 | "name": "setTrustedRemote", 704 | "outputs": [], 705 | "stateMutability": "nonpayable", 706 | "type": "function" 707 | }, 708 | { 709 | "inputs": [ 710 | { 711 | "internalType": "uint16", 712 | "name": "_remoteChainId", 713 | "type": "uint16" 714 | }, 715 | { 716 | "internalType": "bytes", 717 | "name": "_remoteAddress", 718 | "type": "bytes" 719 | } 720 | ], 721 | "name": "setTrustedRemoteAddress", 722 | "outputs": [], 723 | "stateMutability": "nonpayable", 724 | "type": "function" 725 | }, 726 | { 727 | "inputs": [ 728 | { 729 | "internalType": "address", 730 | "name": "newOwner", 731 | "type": "address" 732 | } 733 | ], 734 | "name": "transferOwnership", 735 | "outputs": [], 736 | "stateMutability": "nonpayable", 737 | "type": "function" 738 | }, 739 | { 740 | "inputs": [ 741 | { 742 | "internalType": "uint16", 743 | "name": "", 744 | "type": "uint16" 745 | } 746 | ], 747 | "name": "trustedRemoteLookup", 748 | "outputs": [ 749 | { 750 | "internalType": "bytes", 751 | "name": "", 752 | "type": "bytes" 753 | } 754 | ], 755 | "stateMutability": "view", 756 | "type": "function" 757 | }, 758 | { 759 | "inputs": [], 760 | "name": "withdraw", 761 | "outputs": [], 762 | "stateMutability": "payable", 763 | "type": "function" 764 | } 765 | ] 766 | 767 | -------------------------------------------------------------------------------- /abi/token.txt: -------------------------------------------------------------------------------- 1 | [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] -------------------------------------------------------------------------------- /abi/wrap.txt: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "anonymous": false, 4 | "inputs": [ 5 | { 6 | "indexed": true, 7 | "internalType": "address", 8 | "name": "src", 9 | "type": "address" 10 | }, 11 | { 12 | "indexed": true, 13 | "internalType": "address", 14 | "name": "guy", 15 | "type": "address" 16 | }, 17 | { 18 | "indexed": false, 19 | "internalType": "uint256", 20 | "name": "wad", 21 | "type": "uint256" 22 | } 23 | ], 24 | "name": "Approval", 25 | "type": "event" 26 | }, 27 | { 28 | "anonymous": false, 29 | "inputs": [ 30 | { 31 | "indexed": true, 32 | "internalType": "address", 33 | "name": "dst", 34 | "type": "address" 35 | }, 36 | { 37 | "indexed": false, 38 | "internalType": "uint256", 39 | "name": "wad", 40 | "type": "uint256" 41 | } 42 | ], 43 | "name": "Deposit", 44 | "type": "event" 45 | }, 46 | { 47 | "anonymous": false, 48 | "inputs": [ 49 | { 50 | "indexed": true, 51 | "internalType": "address", 52 | "name": "src", 53 | "type": "address" 54 | }, 55 | { 56 | "indexed": true, 57 | "internalType": "address", 58 | "name": "dst", 59 | "type": "address" 60 | }, 61 | { 62 | "indexed": false, 63 | "internalType": "uint256", 64 | "name": "wad", 65 | "type": "uint256" 66 | } 67 | ], 68 | "name": "Transfer", 69 | "type": "event" 70 | }, 71 | { 72 | "anonymous": false, 73 | "inputs": [ 74 | { 75 | "indexed": true, 76 | "internalType": "address", 77 | "name": "src", 78 | "type": "address" 79 | }, 80 | { 81 | "indexed": false, 82 | "internalType": "uint256", 83 | "name": "wad", 84 | "type": "uint256" 85 | } 86 | ], 87 | "name": "Withdrawal", 88 | "type": "event" 89 | }, 90 | { 91 | "payable": true, 92 | "stateMutability": "payable", 93 | "type": "fallback" 94 | }, 95 | { 96 | "constant": true, 97 | "inputs": [ 98 | { 99 | "internalType": "address", 100 | "name": "", 101 | "type": "address" 102 | }, 103 | { 104 | "internalType": "address", 105 | "name": "", 106 | "type": "address" 107 | } 108 | ], 109 | "name": "allowance", 110 | "outputs": [ 111 | { 112 | "internalType": "uint256", 113 | "name": "", 114 | "type": "uint256" 115 | } 116 | ], 117 | "payable": false, 118 | "stateMutability": "view", 119 | "type": "function" 120 | }, 121 | { 122 | "constant": false, 123 | "inputs": [ 124 | { 125 | "internalType": "address", 126 | "name": "guy", 127 | "type": "address" 128 | }, 129 | { 130 | "internalType": "uint256", 131 | "name": "wad", 132 | "type": "uint256" 133 | } 134 | ], 135 | "name": "approve", 136 | "outputs": [ 137 | { 138 | "internalType": "bool", 139 | "name": "", 140 | "type": "bool" 141 | } 142 | ], 143 | "payable": false, 144 | "stateMutability": "nonpayable", 145 | "type": "function" 146 | }, 147 | { 148 | "constant": true, 149 | "inputs": [ 150 | { 151 | "internalType": "address", 152 | "name": "", 153 | "type": "address" 154 | } 155 | ], 156 | "name": "balanceOf", 157 | "outputs": [ 158 | { 159 | "internalType": "uint256", 160 | "name": "", 161 | "type": "uint256" 162 | } 163 | ], 164 | "payable": false, 165 | "stateMutability": "view", 166 | "type": "function" 167 | }, 168 | { 169 | "constant": true, 170 | "inputs": [], 171 | "name": "decimals", 172 | "outputs": [ 173 | { 174 | "internalType": "uint8", 175 | "name": "", 176 | "type": "uint8" 177 | } 178 | ], 179 | "payable": false, 180 | "stateMutability": "view", 181 | "type": "function" 182 | }, 183 | { 184 | "constant": false, 185 | "inputs": [], 186 | "name": "deposit", 187 | "outputs": [], 188 | "payable": true, 189 | "stateMutability": "payable", 190 | "type": "function" 191 | }, 192 | { 193 | "constant": true, 194 | "inputs": [], 195 | "name": "name", 196 | "outputs": [ 197 | { 198 | "internalType": "string", 199 | "name": "", 200 | "type": "string" 201 | } 202 | ], 203 | "payable": false, 204 | "stateMutability": "view", 205 | "type": "function" 206 | }, 207 | { 208 | "constant": true, 209 | "inputs": [], 210 | "name": "symbol", 211 | "outputs": [ 212 | { 213 | "internalType": "string", 214 | "name": "", 215 | "type": "string" 216 | } 217 | ], 218 | "payable": false, 219 | "stateMutability": "view", 220 | "type": "function" 221 | }, 222 | { 223 | "constant": true, 224 | "inputs": [], 225 | "name": "totalSupply", 226 | "outputs": [ 227 | { 228 | "internalType": "uint256", 229 | "name": "", 230 | "type": "uint256" 231 | } 232 | ], 233 | "payable": false, 234 | "stateMutability": "view", 235 | "type": "function" 236 | }, 237 | { 238 | "constant": false, 239 | "inputs": [ 240 | { 241 | "internalType": "address", 242 | "name": "dst", 243 | "type": "address" 244 | }, 245 | { 246 | "internalType": "uint256", 247 | "name": "wad", 248 | "type": "uint256" 249 | } 250 | ], 251 | "name": "transfer", 252 | "outputs": [ 253 | { 254 | "internalType": "bool", 255 | "name": "", 256 | "type": "bool" 257 | } 258 | ], 259 | "payable": false, 260 | "stateMutability": "nonpayable", 261 | "type": "function" 262 | }, 263 | { 264 | "constant": false, 265 | "inputs": [ 266 | { 267 | "internalType": "address", 268 | "name": "src", 269 | "type": "address" 270 | }, 271 | { 272 | "internalType": "address", 273 | "name": "dst", 274 | "type": "address" 275 | }, 276 | { 277 | "internalType": "uint256", 278 | "name": "wad", 279 | "type": "uint256" 280 | } 281 | ], 282 | "name": "transferFrom", 283 | "outputs": [ 284 | { 285 | "internalType": "bool", 286 | "name": "", 287 | "type": "bool" 288 | } 289 | ], 290 | "payable": false, 291 | "stateMutability": "nonpayable", 292 | "type": "function" 293 | }, 294 | { 295 | "constant": false, 296 | "inputs": [ 297 | { 298 | "internalType": "uint256", 299 | "name": "wad", 300 | "type": "uint256" 301 | } 302 | ], 303 | "name": "withdraw", 304 | "outputs": [], 305 | "payable": false, 306 | "stateMutability": "nonpayable", 307 | "type": "function" 308 | } 309 | ] -------------------------------------------------------------------------------- /data/accounts_data.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elez-dev/ZoraAIO/64f8141c266959be66fb7cc9f4a1833e3cebb76d/data/accounts_data.xlsx -------------------------------------------------------------------------------- /data/address_nft.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import random 2 | from loguru import logger 3 | import sys 4 | import time 5 | from web3 import Web3 6 | from utils import * 7 | from utils.custom_route import CustomRouter 8 | import requests 9 | import json 10 | from settings import * 11 | 12 | logger.remove() 13 | logger.add("./data/log.txt") 14 | logger.add(sys.stdout, format="{time:YYYY-MM-DD HH:mm:ss} | {level: <7} | {message}") 15 | web3_eth = Web3(Web3.HTTPProvider(CHAIN_RPC[Ethereum], request_kwargs={'timeout': 60})) 16 | 17 | chain_list = { 18 | 'zora' : Zora, 19 | 'base' : Base, 20 | 'oeth' : Optimism, 21 | 'arb' : Arbitrum, 22 | 'blast': Blast 23 | } 24 | 25 | 26 | class Worker: 27 | def __init__(self, actoin): 28 | self.action = actoin 29 | 30 | @staticmethod 31 | def change_ip(): 32 | try: 33 | res = requests.get(MOBILE_CHANGE_IP_LINK) 34 | logger.info(res.text) 35 | except Exception as error: 36 | logger.error(error) 37 | 38 | @staticmethod 39 | def generate_route(): 40 | dick = {} 41 | for number, account in keys_list: 42 | key, proxy, address_nft, mail = account 43 | address = web3_eth.eth.account.from_key(key).address 44 | if routes_shuffle is True: 45 | random.shuffle(routes) 46 | 47 | new_routes = [] 48 | 49 | for subarray in routes: 50 | if isinstance(subarray, list): 51 | new_routes.append(random.choice(subarray)) 52 | elif isinstance(subarray, str): 53 | new_routes.append(subarray) 54 | else: 55 | new_routes.append(None) 56 | 57 | dick[address] = { 58 | 'index': 0, 59 | 'route': new_routes 60 | } 61 | 62 | with open('./data/router.json', 'w') as f: 63 | json.dump(dick, f) 64 | 65 | logger.success('Successfully generated route\n') 66 | 67 | @staticmethod 68 | def get_chain_and_address(): 69 | url = random.choice(URL_CUSTOM_NFT) 70 | if url.startswith('https://'): 71 | url = url[8:] 72 | if url.startswith('zora.co/collect/'): 73 | url = url[16:] 74 | chain, nft_info = tuple(url.split(':')) 75 | if '/' in nft_info: 76 | nft_address, token_id = tuple(nft_info.split('/')) 77 | else: 78 | nft_address, token_id = nft_info, 1 79 | 80 | return chain_list[chain], nft_address, token_id 81 | 82 | def work(self): 83 | 84 | i = 0 85 | wallet_info_list = [] 86 | for number, account in keys_list: 87 | str_number = f'{number} / {all_wallets}' 88 | key, proxy, address_nft, mail = account 89 | if MOBILE_PROXY is True: 90 | proxy = MOBILE_DATA 91 | i += 1 92 | address = web3_eth.eth.account.from_key(key).address 93 | logger.info(f'Account #{i} || {address}\n') 94 | 95 | if self.action == 1: 96 | dep = ZoraBridge(key, str_number) 97 | dep.bridge() 98 | 99 | if self.action == 2: 100 | bridge = TunnelBridge(key, CHAIN_FROM_TUNNEL, CHAIN_TO_TUNNEL, str_number, proxy) 101 | bridge.bridge() 102 | 103 | if self.action == 3: 104 | wr = WrapETH(key, Zora, str_number, proxy) 105 | number_trans = random.randint(NUMBER_TRANS_9[0], NUMBER_TRANS_9[1]) 106 | logger.info(f'Number of transactions - {number_trans}\n') 107 | for _ in range(number_trans): 108 | wr.wrap() 109 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 110 | 111 | if self.action == 4: 112 | wr = WrapETH(key, Zora, str_number, proxy) 113 | wr.unwrap() 114 | 115 | if self.action == 5: 116 | uniswap = Uniswap(key, str_number, proxy) 117 | number_trans = random.randint(NUMBER_TRANS_11[0], NUMBER_TRANS_11[1]) 118 | logger.info(f'Number of transactions - {number_trans}\n') 119 | for _ in range(number_trans): 120 | uniswap.buy_token() 121 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 122 | uniswap.sold_token() 123 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 124 | 125 | if self.action == 6: 126 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 127 | logger.info(f'Number of transactions - {number_trans}\n') 128 | zora = MintNFT(key, Zora, str_number, proxy) 129 | for _ in range(number_trans): 130 | zora.mint_zorb_zora() 131 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 132 | 133 | if self.action == 7: 134 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 135 | logger.info(f'Number of transactions - {number_trans}\n') 136 | zora = MintNFT(key, Base, str_number, proxy) 137 | for _ in range(number_trans): 138 | zora.mint_zorb_base() 139 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 140 | 141 | if self.action == 8: 142 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 143 | logger.info(f'Number of transactions - {number_trans}\n') 144 | zora = MintNFT(key, Optimism, str_number, proxy) 145 | for _ in range(number_trans): 146 | zora.mint_zorb_opt() 147 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 148 | 149 | if self.action == 9: 150 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 151 | logger.info(f'Number of transactions - {number_trans}\n') 152 | zora = MintNFT(key, Blast, str_number, proxy) 153 | for _ in range(number_trans): 154 | zora.mint_zorb_blast() 155 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 156 | 157 | if self.action == 10: 158 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 159 | logger.info(f'Number of transactions - {number_trans}\n') 160 | zora = MintNFT(key, Arbitrum, str_number, proxy) 161 | for _ in range(number_trans): 162 | zora.mint_zorb_arbitrum() 163 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 164 | 165 | if self.action == 11: 166 | number_trans = random.randint(NUMBER_TRANS_7[0], NUMBER_TRANS_7[1]) 167 | logger.info(f'Number of transactions - {number_trans}\n') 168 | zora = MintNFT(key, Zora, str_number, proxy) 169 | for _ in range(number_trans): 170 | zora.mint_opensea_zorb_zora() 171 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 172 | 173 | if self.action == 12: 174 | number_trans = random.randint(NUMBER_TRANS_7[0], NUMBER_TRANS_7[1]) 175 | logger.info(f'Number of transactions - {number_trans}\n') 176 | zora = MintNFT(key, Base, str_number, proxy) 177 | for _ in range(number_trans): 178 | zora.mint_opensea_zorb_base() 179 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 180 | 181 | if self.action == 13: 182 | number_trans = random.randint(NUMBER_TRANS_7[0], NUMBER_TRANS_7[1]) 183 | logger.info(f'Number of transactions - {number_trans}\n') 184 | zora = MintNFT(key, Optimism, str_number, proxy) 185 | for _ in range(number_trans): 186 | zora.mint_opensea_zorb_opt() 187 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 188 | 189 | if self.action == 14: 190 | number_trans = random.randint(NUMBER_TRANS_8[0], NUMBER_TRANS_8[1]) 191 | logger.info(f'Number of transactions - {number_trans}\n') 192 | for _ in range(number_trans): 193 | chain, add, id_nft = self.get_chain_and_address() 194 | zora = MintNFT(key, chain, str_number, proxy) 195 | zora.mint_1155(add, id_nft) 196 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 197 | 198 | if self.action == 15: 199 | number_trans = random.randint(NUMBER_TRANS_15[0], NUMBER_TRANS_15[1]) 200 | logger.info(f'Number of transactions - {number_trans}\n') 201 | for _ in range(number_trans): 202 | zora = NFT2ME(key, Zora, str_number, proxy) 203 | zora.mint() 204 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 205 | 206 | if self.action == 16: 207 | number_trans = random.randint(NUMBER_TRANS_16[0], NUMBER_TRANS_16[1]) 208 | logger.info(f'Number of transactions - {number_trans}\n') 209 | mintfun = MintFun(key, Zora, str_number, proxy) 210 | for _ in range(number_trans): 211 | mintfun.mint() 212 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 213 | 214 | if self.action == 17: 215 | contr = CreateContract(key, Zora, str_number, proxy) 216 | contr.create_contarct() 217 | 218 | if self.action == 18: 219 | if address_nft is None: 220 | logger.error('Address NFT is empty\n') 221 | continue 222 | zora = MintNFT(key, Zora, str_number, proxy) 223 | res = zora.update_metadata(address_nft) 224 | if res is False: 225 | continue 226 | 227 | if self.action == 19: 228 | clm = ClaimReward(key, Zora, str_number, proxy) 229 | clm.claim() 230 | 231 | if self.action == 20: 232 | wal = Wallet(key, Zora, str_number, proxy) 233 | number_trans = random.randint(NUMBER_TRANS_YOURSELF[0], NUMBER_TRANS_YOURSELF[1]) 234 | logger.info(f'Number of transactions to yourself - {number_trans}\n') 235 | for _ in range(number_trans): 236 | wal.transfer_native(address) 237 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 238 | 239 | if self.action == 21: 240 | set_mail = SetEmail(key, str_number, proxy) 241 | set_mail.link_email(mail) 242 | 243 | if self.action == 22: 244 | crt = DeployContract(key, Zora, str_number, proxy) 245 | crt.create_contarct() 246 | 247 | if self.action == 23: 248 | zora = ZoraScan(key, str_number, proxy) 249 | wallet_info_list.append(zora.get_nft_data()) 250 | time.sleep(0.5) 251 | continue 252 | 253 | if self.action == 24: 254 | uniswap = Uniswap(key, str_number, proxy) 255 | uniswap.buy_token() 256 | 257 | if self.action == 25: 258 | uniswap = Uniswap(key, str_number, proxy) 259 | res = uniswap.sold_token() 260 | if res is False: 261 | continue 262 | 263 | if self.action == 26: 264 | nft = MintForEnjoy(key, str_number, proxy) 265 | number_trans = random.randint(NUMBER_TRANS_31[0], NUMBER_TRANS_31[1]) 266 | logger.info(f'Number of transactions - {number_trans}\n') 267 | for _ in range(number_trans): 268 | res = nft.mint_enjoy() 269 | if res is False: 270 | break 271 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 272 | 273 | if self.action == 27: 274 | nft = MintForEnjoy(key, str_number, proxy) 275 | number_trans = random.randint(NUMBER_TRANS_32[0], NUMBER_TRANS_32[1]) 276 | logger.info(f'Number of transactions - {number_trans}\n') 277 | for _ in range(number_trans): 278 | res = nft.mint_imagine() 279 | if res is False: 280 | break 281 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 282 | 283 | if self.action == 29: 284 | 285 | rout = CustomRouter(key, str_number, proxy, address_nft, address) 286 | res = rout.run() 287 | if res is False: 288 | continue 289 | 290 | logger.success(f'Account completed, sleep and move on to the next one\n') 291 | sleeping(TIME_ACCOUNT_DELAY[0], TIME_ACCOUNT_DELAY[1]) 292 | 293 | if MOBILE_PROXY is True: 294 | self.change_ip() 295 | 296 | if self.action == 23: 297 | ZoraScan.save_to_exel(wallet_info_list) 298 | return logger.success('The results are recorded in data/result.xlsx\n') 299 | 300 | 301 | if __name__ == '__main__': 302 | list1 = get_accounts_data() 303 | logger.info(list1) 304 | all_wallets = len(list1) 305 | logger.info(f'Number of wallets: {all_wallets}\n') 306 | keys_list = shuffle(list1) 307 | 308 | while True: 309 | while True: 310 | logger.info(''' 311 | 1 - OFFICIAL BRIDGE ETH -> ZORA 312 | 2 - INSTANT BRIDGE 313 | 314 | 3 - WRAP ETH 315 | 4 - UNWRAP ETH 316 | 5 - BUY + SOLD TOKEN 317 | 318 | 6 - MINT NFT в сети ZORA (С официальной комиссией ZORA 0.000777 ETH) 319 | 7 - MINT NFT в сети BASE (С официальной комиссией ZORA 0.000777 ETH) 320 | 8 - MINT NFT в сети OPTIMISM (С официальной комиссией ZORA 0.000777 ETH) 321 | 9 - MINT NFT в сети BLAST (С официальной комиссией ZORA 0.000777 ETH) 322 | 10 - MINT NFT в сети ARBITRUM (С официальной комиссией ZORA 0.000777 ETH) 323 | 324 | 11 - MINT NFT OPENSEA в сети ZORA (FREE MINT) 325 | 12 - MINT NFT OPENSEA в сети BASE (FREE MINT) 326 | 13 - MINT NFT OPENSEA в сети OPTIMISM (FREE MINT) 327 | 328 | 14 - MINT Custom NFT (ZORA.CO) 329 | 15 - MINT NFTS2ME (FREE MINT) 330 | 16 - MINT NFT FROM MINT.FUN (FREE MINT) 331 | 17 - CREATE ERC1155 NFT CONTRACT (ZORA.CO) 332 | 18 - UPDATE NFT METADATA (ZORA.CO) 333 | 19 - CLAIM REWARD (ZORA.CO) 334 | 20 - SEND ETH YOURSELF 335 | 21 - SET EMAIL ON ZORA 336 | 22 - DEPLOY MERKLY CONTRACT 337 | 23 - CHECK WALLETS STATS 338 | 24 - BUY TOKEN 339 | 25 - SOLD TOKEN 340 | 26 - MINT NFT FOR $ENJOY (ZORA.CO) 341 | 27 - MINT NFT FOR $IMAGINE (ZORA.CO) 342 | 343 | 28 - GENERATE CUSTOM ROUTES (сначала этот модуль -> потом 29) 344 | 29 - RUN CUSTOM ROUTES 345 | ''') 346 | 347 | time.sleep(0.1) 348 | act = int(input('Choose an action: ')) 349 | 350 | if act == 28: 351 | Worker.generate_route() 352 | continue 353 | 354 | if act in range(1, 30): 355 | break 356 | 357 | worker = Worker(act) 358 | worker.work() 359 | -------------------------------------------------------------------------------- /picture/LOGO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elez-dev/ZoraAIO/64f8141c266959be66fb7cc9f4a1833e3cebb76d/picture/LOGO.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pandas==2.1.4 2 | loguru==0.7.2 3 | tqdm==4.66.3 4 | web3==6.13.0 5 | requests==2.32.2 6 | openpyxl==3.1.2 7 | msoffcrypto-tool==5.1.1 8 | mimesis==14.0.0 9 | ua-generator==0.1.9 -------------------------------------------------------------------------------- /settings.py: -------------------------------------------------------------------------------- 1 | from utils.chain import * 2 | 3 | EXCEL_PASSWORD = False # Если ставите пароль на Excel с приватниками || True/ False 4 | SHUFFLE_WALLETS = True # Перемешка кошельков || True/ False 5 | 6 | TG_BOT_SEND = False # Включить уведомления в тг или нет || True/ False 7 | TG_TOKEN = '' # API токен тг-бота - создать его можно здесь - https://t.me/BotFather 8 | TG_ID = 0000 # id твоего телеграмма можно узнать тут - https://t.me/getmyid_bot 9 | 10 | CHAIN_RPC = { 11 | Arbitrum: 'https://1rpc.io/arb', 12 | Optimism: 'https://1rpc.io/op', 13 | Polygon : 'https://1rpc.io/matic', 14 | Zora : 'https://rpc.zora.energy', # https://zora.rpc.thirdweb.com | https://rpc.zora.energy | https://rpc.zerion.io/v1/zora 15 | Ethereum: 'https://rpc.ankr.com/eth', 16 | Base : 'https://rpc.ankr.com/base', 17 | Nova : 'https://rpc.ankr.com/arbitrumnova', 18 | zkSync : 'https://rpc.ankr.com/zksync_era', 19 | Linea : 'https://1rpc.io/linea', 20 | Blast : 'https://rpc.ankr.com/blast' 21 | } 22 | 23 | MAX_GAS_ETH = 50 # gas в gwei (смотреть здесь : https://etherscan.io/gastracker) 24 | ZORA_GASPRICE_PRESCALE = 0.001 # Использовать Max base fee и Priority fee для газа в Zora, экономия 0.3-0.5$ 25 | BLAST_GASPRICE_PRESCALE = 0.001 # Использовать Max base fee и Priority fee для газа в Blast 26 | 27 | RETRY = 3 # Количество попыток при ошибках / фейлах 28 | 29 | TIME_DELAY = [50, 70] # Задержка после ТРАНЗАКЦИЙ [min, max] 30 | TIME_ACCOUNT_DELAY = [50, 75] # Задержка между АККАУНТАМИ [min, max] 31 | TIME_DELAY_ERROR = [10, 20] # Задержка при ошибках / фейлах [min, max] 32 | 33 | MOBILE_PROXY = False # Если юзаете мобильные прокси -> True, если обычные или VPN -> False 34 | MOBILE_DATA = 'login:pass@ip:port' # Сюда пишем проксю в формате login:pass@ip:port 35 | MOBILE_CHANGE_IP_LINK = '' # Сюда пишем ссылку для смены IP 36 | 37 | # 1 - Официальный мост https://bridge.zora.energy ----------------------------------------------------------------------------------------------------------------------------------------------- 38 | 39 | OFF_ZORA_DEPOSIT = [0.005, 0.01, 5] # Сумма для депозита [min, max, round_decimal] 40 | # Если сумма больше чем на балансе, будет бридж всего баланса 41 | 42 | # 2 - INSTANT BRIDGE https://relay.link ------------------------------------------------------------------------------------------------------------------------------------------------------------ 43 | # Список доступных сетей: Arbitrum, Optimism, Nova, Base, Zora, ZkSync, Linea, Blast 44 | 45 | CHAIN_FROM_TUNNEL = Optimism # Из какой сети 46 | CHAIN_TO_TUNNEL = Zora # В какую сеть 47 | VALUE_TUNNEL = [0.0001, 0.0002, 4] # Количество [min, max, round_decimal] 48 | 49 | # 3 - Merkly ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 50 | # Список доступных сетей: Arbitrum, Optimism, Polygon, Base, Zora 51 | 52 | CHAIN_FROM_MERKLY = Optimism # Из какой сети 53 | CHAIN_TO_MERKLY = Zora # В какую сеть 54 | VALUE_MERKLY = [0.0015, 0.0035, 4] # Количество [min, max, round_decimal] 55 | 56 | 57 | # 9 - 10 Wrap unwrap ETH ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 58 | 59 | PRESCALE = [0.01, 0.02, 3] # [min, max, round_decimal] 60 | NUMBER_TRANS_9 = [1, 1] # Количество транзакций [min, max] 61 | 62 | # 11 Uniswap ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 63 | 64 | 65 | VALUE_SWAP = [0.00001, 0.00002, 5] # [min, max, decimal] 66 | TOKEN_SWAP = ['0xa6b280b42cb0b7c4a4f789ec6ccc3a7609a1bc39'] # Сюда вписывать контракты токенов для свапа 67 | # Будет выбираться рандомно из списка 68 | # 0x078540eECC8b6d89949c9C7d5e8E91eAb64f6696 - $IMAGINE 69 | # 0xa6b280b42cb0b7c4a4f789ec6ccc3a7609a1bc39 - $ENJOY 70 | NUMBER_TRANS_11 = [1, 1] # Количество транзакций [min, max] 71 | 72 | # 12 - 16 || Mint PYTHON ZORB (Zora.co) -------------------------------------------------------------------------------------------------------------------------------------------------------------------- 73 | 74 | QUANTITY_NFT_6 = [1, 1] # Количество NFT для минта 75 | NUMBER_TRANS_6 = [1, 1] # Количество транзакций [min, max] 76 | 77 | # 17 - 19 || Mint PYTHON ZORB (OpenSea) || FREE MINT ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 78 | 79 | QUANTITY_NFT_7 = [1, 70] # Количество NFT для минта 80 | NUMBER_TRANS_7 = [1, 1] # Количество транзакций [min, max] 81 | 82 | # 20 - Mint Custom NFT ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 83 | 84 | URL_CUSTOM_NFT = ['https://zora.co/collect/zora:0xc7d47ae78fc27520633aa7c27b23758b4c429e30/1'] # Минт любых других NFT на Zora.co (Будет рандомная из списка) Сюда пишем url NFT 85 | 86 | QUANTITY_NFT_8 = [1, 1] # Количество NFT для минта 87 | NUMBER_TRANS_8 = [1, 1] # Количество транзакций [min, max] 88 | 89 | # 21 - Mint NFTS2ME || FREE MINT ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 90 | 91 | QUANTITY_NFT_15 = [1, 20] # Количество NFT для минта 92 | NUMBER_TRANS_15 = [1, 3] # Количество транзакций [min, max] 93 | 94 | # 22 - Mint.fun || FREE MINT --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 95 | # Количество нфт выберается автоматически для бесплатного минта 96 | 97 | NUMBER_TRANS_16 = [2, 3] # Количество транзакций [min, max] 98 | 99 | # 26 - Send money yourself ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 100 | 101 | NUMBER_TRANS_YOURSELF = [1, 1] # Количеcтво транзакций самому себе [min, max] 102 | 103 | # Module 27 - IMAP сервер для почт 104 | 105 | IMAP_SERVER = 'imap.rambler.ru' 106 | 107 | # 30 - Custom routes ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 108 | 109 | routes = [ 110 | ['mint_zorb_zora', 'mintfun', 'mint_opensea_zorb_zora'], 111 | ['mint_opensea_zorb_optimism', 'mint_opensea_zorb_base', None], 112 | ['mint_opensea_zorb_zora', 'mint_opensea_zorb_zora', 'mintfun'], 113 | ['mint_custom_nft', 'mint_zorb_zora', None], 114 | ['wrap_unwrap', 'mint_zorb_base', 'send_money_yourself'], 115 | ['mint_opensea_zorb_optimism', 'mint_opensea_zorb_base', None], 116 | ['buy_token'] 117 | ] 118 | 119 | routes_shuffle = True # Перемешивает модули || True/ False 120 | TIME_DELAY_ROUTES = [100, 120] # [min, max] Задержка между модулями 121 | 122 | 123 | # Список доступных модулей 124 | # 'mint_zorb_zora' - Mint PYTHON ZORB в сети ZORA (С официальной комиссией ZORA 0.000777 ETH) 125 | # 'mint_zorb_base' - Mint PYTHON ZORB в сети BASE (С официальной комиссией ZORA 0.000777 ETH) 126 | # 'mint_zorb_optimism' - Mint PYTHON ZORB в сети OPTIMISM (С официальной комиссией ZORA 0.000777 ETH) 127 | # 'mint_zorb_arbitrum' - Mint THE AMBASSADOR в сети Arbitrum (С официальной комиссией ZORA 0.000777 ETH) 128 | # 'mint_opensea_zorb_zora' - Mint PYTHON ZORB через OpenSea в сети ZORA (FREE MINT) 129 | # 'mint_opensea_zorb_base' - Mint PYTHON ZORB через OpenSea в сети BASE (FREE MINT) 130 | # 'mint_opensea_zorb_optimism' - Mint PYTHON ZORB через OpenSea в сети OPTIMISM (FREE MINT) 131 | # 'mint_nft2me' - Mint NFTS2ME (FREE MINT) 132 | # 'create_contract' - Create contract NFT ERC1155 (Zora.co) 133 | # 'mint_custom_nft', - Mint Custom NFT 134 | # 'update_nft_metadata', - Update NFT metadata 135 | # 'send_money_yourself', - Send money yourself 136 | # 'mintfun' - Mint free NFT from Mint.fun 137 | # 'wrap_unwrap' - Wrap + Unwrap ETH 138 | # 'swap' - Покупка + продажа на Uniswap 139 | # 'buy_token' - Покупка выбранного токена на Uniswap 140 | # 'mint_for_enjoy' - Минт NFT за $ENJOY 141 | # 'mint_for_imagine' - Минт NFT за $IMAGINE 142 | 143 | # Refuel ----------------------------------------------------------------------------------------------------------------------- 144 | 145 | REFUEL = False # Если баланса в Zora будет недостаточно будет сделан Refuel с помощью INSTANT bridge (Если False то делаться не будет) 146 | 147 | # Из каких сетей делать refuel (Будет выбрана та, где больший баланс) 148 | # Доступно: Arbitrum, Optimism, Polygon, Base, Nova, zkSync, Linea 149 | 150 | CHAIN_FROM_REFUEL = [Arbitrum, Optimism, Polygon, Base, Nova, zkSync, Linea] 151 | 152 | VALUE_REFUEL = { 153 | Polygon: [1.01, 1.5, 3], # [min, max, round_decimal] 154 | 'Other': [0.00001, 0.0001, 6] # [min, max, round_decimal] Здесь сумма относится ко всем остальным сетям, т.к. для оплаты используется ETH 155 | } 156 | 157 | # 31 Mint NFT for $ENJOY ------------------------------------------------------------------------------------------------------------------------------- 158 | 159 | QUANTITY_NFT_31 = [1, 1] # Количество NFT для минта [min, max] 160 | NUMBER_TRANS_31 = [1, 3] # Количество транзакций [min, max] 161 | 162 | # 32 Mint NFT for $IMAGINE --------------------------------------------------------------------------------------------------------------------------- 163 | 164 | QUANTITY_NFT_32 = [1, 1] # Количество NFT для минта [min, max] 165 | NUMBER_TRANS_32 = [1, 3] # Количество транзакций [min, max] 166 | -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .off_bridge import ZoraBridge 2 | from .mint_nft import MintNFT 3 | from .wallet import Wallet 4 | from .walet_stats import ZoraScan 5 | from .create_contract import CreateContract 6 | from .nft2me import NFT2ME 7 | from .mintfun import MintFun 8 | from .tunnel_bridge import TunnelBridge 9 | from .claim_reward import ClaimReward 10 | from .set_email import SetEmail 11 | from .create_merkl_contract import DeployContract 12 | from .wrap import WrapETH 13 | from .swap import Uniswap 14 | from .func import get_accounts_data, shuffle, sleeping 15 | from .enjoy import MintForEnjoy 16 | -------------------------------------------------------------------------------- /utils/chain.py: -------------------------------------------------------------------------------- 1 | Polygon = 'Polygon' 2 | Arbitrum = 'Arbitrum' 3 | Optimism = 'Optimism' 4 | Base = 'Base' 5 | Ethereum = 'Ethereum' 6 | Zora = 'Zora' 7 | Nova = 'Nova' 8 | zkSync = 'zkSync' 9 | Linea = 'Linea' 10 | Blast = 'Blast' -------------------------------------------------------------------------------- /utils/claim_reward.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | from utils.retry import exception_handler 3 | from web3 import Web3 4 | import json as js 5 | from loguru import logger 6 | 7 | 8 | class ClaimReward(Wallet): 9 | 10 | def __init__(self, private_key, chain, number, proxy): 11 | super().__init__(private_key, chain, number, proxy) 12 | self.address = Web3.to_checksum_address('0x7777777F279eba3d3Ad8F4E708545291A6fDBA8B') 13 | self.abi = js.load(open('./abi/claim_reward.txt')) 14 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi) 15 | 16 | @exception_handler('Claim reward') 17 | def claim(self): 18 | logger.info('Claim reward Zora.co') 19 | 20 | balance = self.contract.functions.balanceOf(self.address_wallet).call() 21 | if balance == 0: 22 | logger.error('Balance for claim - 0\n') 23 | return 24 | 25 | dick = { 26 | 'from': self.address_wallet, 27 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 28 | **self.get_gas_price() 29 | } 30 | 31 | txn = self.contract.functions.withdraw( 32 | self.address_wallet, 33 | balance 34 | ).build_transaction(dick) 35 | 36 | self.send_transaction_and_wait(txn, f'Claim {Web3.from_wei(balance, "ether")} ETH') 37 | -------------------------------------------------------------------------------- /utils/create_contract.py: -------------------------------------------------------------------------------- 1 | import random 2 | import requests 3 | from loguru import logger 4 | import string 5 | from web3 import Web3 6 | from utils.wallet import Wallet 7 | from utils.retry import exception_handler 8 | import json as js 9 | import openpyxl 10 | import os 11 | 12 | 13 | class CreateContract(Wallet): 14 | 15 | def __init__(self, private_key, chain, number, proxy): 16 | super().__init__(private_key, chain, number, proxy) 17 | self.address = Web3.to_checksum_address('0x777777C338d93e2C7adf08D102d45CA7CC4Ed021') 18 | self.abi = js.load(open('./abi/create_contract.txt')) 19 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi) 20 | 21 | @staticmethod 22 | def upload_image(): 23 | picture_list = os.listdir('picture') 24 | file_list = [] 25 | for picture in picture_list: 26 | with open(f'picture/{picture}', "rb") as f: 27 | file = f.read() 28 | file_list.append(file) 29 | pic = random.choice(file_list) 30 | 31 | files = {"file": pic} 32 | url = 'https://ipfs-uploader.zora.co/api/v0/add?stream-channels=true&cid-version=1&progress=false' 33 | res = requests.post(url=url, files=files, timeout=60) 34 | json_data = res.json() 35 | return 'ipfs://' + json_data['Hash'] 36 | 37 | @staticmethod 38 | def get_name(): 39 | characters = string.ascii_letters + string.digits # буквы и цифры 40 | random_string = ''.join(random.choice(characters) for _ in range(7)) 41 | return random_string 42 | 43 | @exception_handler('Create NFT Zora.co') 44 | def create_contarct(self): 45 | logger.info('Create NFT Zora.co') 46 | 47 | dick = { 48 | 'from': self.address_wallet, 49 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 50 | **self.get_gas_price() 51 | } 52 | 53 | name = 'Stalker' + str(random.randint(1, 1000)) 54 | 55 | txn = self.contract.functions.createContract( 56 | self.upload_image(), 57 | name, 58 | [0, 500, self.address_wallet], 59 | self.address_wallet, 60 | 61 | [ 62 | "0xe72878b40000000000000000000000000000000000000000000000000000000000000000", 63 | "0x674cbae60000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042697066733a2f2f6261666b72656966716877766a7535626d77683562336871717a6c3636336473707a32786b7568646965723462343737323533323676786a657734000000000000000000000000000000000000000000000000000000000000", 64 | "0xafed7e9e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000" + self.address_wallet[2:], 65 | "0x8ec998a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000777777e8850d8d6d98de2b5f64fae401f96eff310000000000000000000000000000000000000000000000000000000000000004", 66 | "0xd904b94a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000777777e8850d8d6d98de2b5f64fae401f96eff31000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4ce35b8af000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000661cdf150000000000000000000000000000000000000000000000000000000066446c15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000" + self.address_wallet[2:] + "000000000000000000000000078540eecc8b6d89949c9c7d5e8e91eab64f669600000000000000000000000000000000000000000000000000000000", 67 | "0xc238d1ee000000000000000000000000" + self.address_wallet[2:] + "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000" 68 | ] 69 | ).build_transaction(dick) 70 | 71 | tx_hash = self.send_transaction_and_wait(txn, f'Create contract NFT') 72 | addr = self.save_address(tx_hash) 73 | self.write_address(addr) 74 | 75 | @exception_handler() 76 | def save_address(self, tx_hash): 77 | 78 | txn_receipt = self.web3.eth.get_transaction_receipt(tx_hash) 79 | addres_nft = txn_receipt.logs[0].address 80 | 81 | with open('./data/address_nft.txt', 'a', encoding='utf-8') as f: 82 | f.write(f'{addres_nft}\n') 83 | 84 | return addres_nft 85 | 86 | @exception_handler() 87 | def write_address(self, address): 88 | workbook = openpyxl.load_workbook('./data/accounts_data.xlsx') 89 | 90 | sheet = workbook.active 91 | 92 | for row_number, row in enumerate(sheet.iter_rows(min_row=1, max_col=1, max_row=sheet.max_row, values_only=True), start=1): 93 | if row[0] == self.private_key: 94 | 95 | sheet.cell(row=row_number, column=3, value=address) 96 | 97 | workbook.save('./data/accounts_data.xlsx') 98 | 99 | logger.success(f"Data successfully written to address {address}\n") 100 | return 101 | -------------------------------------------------------------------------------- /utils/create_merkl_contract.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | from utils.retry import exception_handler 3 | from settings import ZORA_GASPRICE_PRESCALE 4 | from web3 import Web3 5 | 6 | class DeployContract(Wallet): 7 | 8 | def __init__(self, private_key, chain, number, proxy): 9 | super().__init__(private_key, chain, number, proxy) 10 | 11 | @exception_handler('Deploy contract') 12 | def create_contarct(self): 13 | tx = { 14 | 'chainId': 7777777, 15 | 'data': '0x60806040526000805461ffff1916905534801561001b57600080fd5b5060fb8061002a6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80630c55699c146037578063b49004e914605b575b600080fd5b60005460449061ffff1681565b60405161ffff909116815260200160405180910390f35b60616063565b005b60008054600191908190607a90849061ffff166096565b92506101000a81548161ffff021916908361ffff160217905550565b61ffff81811683821601908082111560be57634e487b7160e01b600052601160045260246000fd5b509291505056fea2646970667358221220666c87ec501268817295a4ca1fc6e3859faf241f38dd688f145135970920009264736f6c63430008120033', 16 | 'from': self.address_wallet, 17 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 18 | 'gas': 150_000, 19 | **self.get_gas_price() 20 | } 21 | 22 | self.send_transaction_and_wait(tx, f'Deploy contract') 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /utils/custom_route.py: -------------------------------------------------------------------------------- 1 | from loguru import logger 2 | from settings import * 3 | from utils import * 4 | from web3 import Web3 5 | import random 6 | import time 7 | import json 8 | 9 | web3_eth = Web3(Web3.HTTPProvider('https://rpc.ankr.com/eth', request_kwargs={'timeout': 60})) 10 | 11 | chain_list = { 12 | 'zora': Zora, 13 | 'base': Base, 14 | 'oeth': Optimism 15 | } 16 | 17 | 18 | class CustomRouter: 19 | 20 | @staticmethod 21 | def chek_gas_eth(): 22 | while True: 23 | try: 24 | res = int(round(Web3.from_wei(web3_eth.eth.gas_price, 'gwei'))) 25 | logger.info(f'Газ сейчас - {res} gwei\n') 26 | if res <= MAX_GAS_ETH: 27 | break 28 | else: 29 | time.sleep(60) 30 | continue 31 | except Exception as error: 32 | logger.error(error) 33 | time.sleep(30) 34 | continue 35 | 36 | @staticmethod 37 | def get_chain_and_address(): 38 | url = random.choice(URL_CUSTOM_NFT) 39 | if url.startswith('https://'): 40 | url = url[8:] 41 | if url.startswith('zora.co/collect/'): 42 | url = url[16:] 43 | chain, nft_info = tuple(url.split(':')) 44 | if '/' in nft_info: 45 | nft_address, token_id = tuple(nft_info.split('/')) 46 | else: 47 | nft_address, token_id = nft_info, 1 48 | 49 | return chain_list[chain], nft_address, token_id 50 | 51 | def __init__(self, private_key, str_number, proxy, address_metadata, address_wallet): 52 | self.private_key = private_key 53 | self.str_number = str_number 54 | self.proxy = proxy 55 | self.address_metadata = address_metadata 56 | self.address_wallet = address_wallet 57 | 58 | def mint_zorb_zora(self): 59 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 60 | logger.info(f'Number of transactions - {number_trans}\n') 61 | zora = MintNFT(self.private_key, Zora, self.str_number, self.proxy) 62 | for _ in range(number_trans): 63 | zora.mint_zorb_zora() 64 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 65 | 66 | def mint_zorb_base(self): 67 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 68 | logger.info(f'Number of transactions - {number_trans}\n') 69 | zora = MintNFT(self.private_key, Base, self.str_number, self.proxy) 70 | for _ in range(number_trans): 71 | zora.mint_zorb_base() 72 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 73 | 74 | def mint_zorb_optimism(self): 75 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 76 | logger.info(f'Number of transactions - {number_trans}\n') 77 | zora = MintNFT(self.private_key, Optimism, self.str_number, self.proxy) 78 | for _ in range(number_trans): 79 | zora.mint_zorb_opt() 80 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 81 | 82 | def mint_opensea_zorb_zora(self): 83 | number_trans = random.randint(NUMBER_TRANS_7[0], NUMBER_TRANS_7[1]) 84 | logger.info(f'Number of transactions - {number_trans}\n') 85 | zora = MintNFT(self.private_key, Zora, self.str_number, self.proxy) 86 | for _ in range(number_trans): 87 | zora.mint_opensea_zorb_zora() 88 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 89 | 90 | def mint_opensea_zorb_base(self): 91 | number_trans = random.randint(NUMBER_TRANS_7[0], NUMBER_TRANS_7[1]) 92 | logger.info(f'Number of transactions - {number_trans}\n') 93 | zora = MintNFT(self.private_key, Base, self.str_number, self.proxy) 94 | for _ in range(number_trans): 95 | zora.mint_opensea_zorb_base() 96 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 97 | 98 | def mint_opensea_zorb_optimism(self): 99 | number_trans = random.randint(NUMBER_TRANS_7[0], NUMBER_TRANS_7[1]) 100 | logger.info(f'Number of transactions - {number_trans}\n') 101 | zora = MintNFT(self.private_key, Optimism, self.str_number, self.proxy) 102 | for _ in range(number_trans): 103 | zora.mint_opensea_zorb_opt() 104 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 105 | 106 | def mint_custom_nft(self): 107 | number_trans = random.randint(NUMBER_TRANS_8[0], NUMBER_TRANS_8[1]) 108 | logger.info(f'Number of transactions - {number_trans}\n') 109 | for _ in range(number_trans): 110 | chain, add, id_nft = self.get_chain_and_address() 111 | zora = MintNFT(self.private_key, chain, self.str_number, self.proxy) 112 | zora.mint_1155(add, id_nft) 113 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 114 | 115 | def update_nft_metadata(self): 116 | if self.address_metadata is None: 117 | logger.error('Address NFT is empty\n') 118 | return 119 | zora = MintNFT(self.private_key, Zora, self.str_number, self.proxy) 120 | zora.update_metadata(self.address_metadata) 121 | 122 | def send_money_yourself(self): 123 | wal = Wallet(self.private_key, Zora, self.str_number, self.proxy) 124 | number_trans = random.randint(NUMBER_TRANS_YOURSELF[0], NUMBER_TRANS_YOURSELF[1]) 125 | logger.info(f'Number of transactions to yourself - {number_trans}\n') 126 | for _ in range(number_trans): 127 | wal.transfer_native(self.address_wallet) 128 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 129 | 130 | def mint_nft2me(self): 131 | number_trans = random.randint(NUMBER_TRANS_15[0], NUMBER_TRANS_15[1]) 132 | logger.info(f'Number of transactions - {number_trans}\n') 133 | zora = NFT2ME(self.private_key, Zora, self.str_number, self.proxy) 134 | for _ in range(number_trans): 135 | zora.mint() 136 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 137 | 138 | def create_contract(self): 139 | contr = CreateContract(self.private_key, Zora, self.str_number, self.proxy) 140 | contr.create_contarct() 141 | 142 | def mintfun(self): 143 | number_trans = random.randint(NUMBER_TRANS_16[0], NUMBER_TRANS_16[1]) 144 | logger.info(f'Number of transactions - {number_trans}\n') 145 | mintfun = MintFun(self.private_key, Zora, self.str_number, self.proxy) 146 | for _ in range(number_trans): 147 | mintfun.mint() 148 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 149 | 150 | def wrap_unwrap(self): 151 | wr = WrapETH(self.private_key, Zora, self.str_number, self.proxy) 152 | number_trans = random.randint(NUMBER_TRANS_9[0], NUMBER_TRANS_9[1]) 153 | logger.info(f'Number of transactions - {number_trans}\n') 154 | for _ in range(number_trans): 155 | wr.wrap() 156 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 157 | 158 | wr.unwrap() 159 | 160 | def swap(self): 161 | uniswap = Uniswap(self.private_key, self.str_number, self.proxy) 162 | number_trans = random.randint(NUMBER_TRANS_11[0], NUMBER_TRANS_11[1]) 163 | logger.info(f'Number of transactions - {number_trans}\n') 164 | for _ in range(number_trans): 165 | uniswap.buy_token() 166 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 167 | uniswap.sold_token() 168 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 169 | 170 | def mint_zorb_blast(self): 171 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 172 | logger.info(f'Number of transactions - {number_trans}\n') 173 | zora = MintNFT(self.private_key, Blast, self.str_number, self.proxy) 174 | for _ in range(number_trans): 175 | zora.mint_zorb_blast() 176 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 177 | 178 | def mint_zorb_arbitrum(self): 179 | number_trans = random.randint(NUMBER_TRANS_6[0], NUMBER_TRANS_6[1]) 180 | logger.info(f'Number of transactions - {number_trans}\n') 181 | zora = MintNFT(self.private_key, Arbitrum, self.str_number, self.proxy) 182 | for _ in range(number_trans): 183 | zora.mint_zorb_arbitrum() 184 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 185 | 186 | def buy_token(self): 187 | uniswap = Uniswap(self.private_key, self.str_number, self.proxy) 188 | uniswap.buy_token() 189 | 190 | def mint_for_enjoy(self): 191 | nft = MintForEnjoy(self.private_key, self.str_number, self.proxy) 192 | number_trans = random.randint(NUMBER_TRANS_31[0], NUMBER_TRANS_31[1]) 193 | logger.info(f'Number of transactions - {number_trans}\n') 194 | for _ in range(number_trans): 195 | res = nft.mint_enjoy() 196 | if res is False: 197 | break 198 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 199 | 200 | def mint_for_imagine(self): 201 | nft = MintForEnjoy(self.private_key, self.str_number, self.proxy) 202 | number_trans = random.randint(NUMBER_TRANS_32[0], NUMBER_TRANS_32[1]) 203 | logger.info(f'Number of transactions - {number_trans}\n') 204 | for _ in range(number_trans): 205 | res = nft.mint_imagine() 206 | if res is False: 207 | break 208 | sleeping(TIME_DELAY[0], TIME_DELAY[1]) 209 | 210 | def run(self): 211 | 212 | address = web3_eth.eth.account.from_key(self.private_key).address 213 | try: 214 | data = json.load(open('./data/router.json')) 215 | route = data[address]['route'] 216 | index = data[address]['index'] 217 | except Exception as error: 218 | logger.error(error) 219 | return False 220 | 221 | flag = False 222 | 223 | while index < len(route): 224 | method_name = route[index] 225 | if method_name is None: 226 | index += 1 227 | continue 228 | if hasattr(self, method_name): 229 | logger.info(f'Module - {method_name}\n') 230 | if hasattr(self, method_name): 231 | method = getattr(self, method_name) 232 | try: 233 | method() 234 | logger.success(f'Module completed, sleep and move on to the next one\n') 235 | sleeping(TIME_DELAY_ROUTES[0], TIME_DELAY_ROUTES[1]) 236 | flag = True 237 | except Exception as error: 238 | logger.error(error) 239 | time.sleep(20) 240 | finally: 241 | index += 1 242 | data[address]['index'] = index 243 | with open('./data/router.json', 'w') as f: 244 | json.dump(data, f) 245 | else: 246 | return flag 247 | 248 | 249 | -------------------------------------------------------------------------------- /utils/enjoy.py: -------------------------------------------------------------------------------- 1 | from loguru import logger 2 | from web3 import Web3 3 | from utils.wallet import Wallet 4 | from utils.retry import exception_handler 5 | from utils.func import sleeping 6 | from settings import QUANTITY_NFT_31, QUANTITY_NFT_32 7 | import json as js 8 | import random 9 | 10 | 11 | class MintForEnjoy(Wallet): 12 | def __init__(self, private_key, number, proxy): 13 | super().__init__(private_key, 'Zora', number, proxy) 14 | self.address = Web3.to_checksum_address('0x777777E8850d8D6d98De2B5f64fae401F96eFF31') 15 | self.abi = js.load(open('./abi/erc20minter.txt')) 16 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi) 17 | self.enjoy = Web3.to_checksum_address('0xa6B280B42CB0b7c4a4F789eC6cCC3a7609A1Bc39') 18 | self.imagine = Web3.to_checksum_address('0x078540eECC8b6d89949c9C7d5e8E91eAb64f6696') 19 | 20 | self.enjoy_contract = self.web3.eth.contract(address=self.enjoy, abi=self.token_abi) 21 | self.imagine_contract = self.web3.eth.contract(address=self.imagine, abi=self.token_abi) 22 | 23 | @exception_handler('Mint nft for ENJOY') 24 | def mint_enjoy(self): 25 | quantity = random.randint(QUANTITY_NFT_31[0], QUANTITY_NFT_31[1]) 26 | token_balance = self.from_wei(18, self.enjoy_contract.functions.balanceOf(self.address_wallet).call()) 27 | if token_balance < quantity: 28 | logger.error('Not enough ENJOY on balance\n') 29 | return False 30 | 31 | allowance = self.enjoy_contract.functions.allowance(self.address_wallet, self.address).call() 32 | if allowance < Web3.to_wei(100000, 'ether'): 33 | self.approve(self.enjoy, self.address) 34 | sleeping(5, 10) 35 | 36 | dick = { 37 | 'from': self.address_wallet, 38 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 39 | **self.get_gas_price() 40 | } 41 | 42 | with open("word.txt", "r") as f: 43 | words = [row.strip() for row in f if row.strip()] 44 | 45 | txn = self.contract.functions.mint( 46 | self.address_wallet, 47 | quantity, 48 | Web3.to_checksum_address('0x95257b644f6beca994f7e19a1e02f5f8086c8e6c'), 49 | 1, 50 | Web3.to_wei(quantity, 'ether'), 51 | self.enjoy, 52 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C'), 53 | random.choice(words) 54 | ).build_transaction(dick) 55 | 56 | self.send_transaction_and_wait(txn, f'Mint {quantity} NFT') 57 | 58 | @exception_handler('Mint nft for Imagine') 59 | def mint_imagine(self): 60 | quantity = random.randint(QUANTITY_NFT_32[0], QUANTITY_NFT_32[1]) 61 | token_balance = self.from_wei(18, self.imagine_contract.functions.balanceOf(self.address_wallet).call()) 62 | if token_balance < quantity: 63 | logger.error('Not enough Imagine on balance\n') 64 | return False 65 | 66 | allowance = self.imagine_contract.functions.allowance(self.address_wallet, self.address).call() 67 | if allowance < Web3.to_wei(100000, 'ether'): 68 | self.approve(self.imagine, self.address) 69 | sleeping(5, 10) 70 | 71 | dick = { 72 | 'from': self.address_wallet, 73 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 74 | **self.get_gas_price() 75 | } 76 | 77 | with open("word.txt", "r") as f: 78 | words = [row.strip() for row in f if row.strip()] 79 | 80 | txn = self.contract.functions.mint( 81 | self.address_wallet, 82 | quantity, 83 | Web3.to_checksum_address('0xd202237ad529ac6d8f21f6b426d080f61cf5450f'), 84 | 1, 85 | 10000000 * quantity, 86 | self.imagine, 87 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C'), 88 | random.choice(words) 89 | ).build_transaction(dick) 90 | 91 | self.send_transaction_and_wait(txn, f'Mint {quantity} NFT') 92 | -------------------------------------------------------------------------------- /utils/func.py: -------------------------------------------------------------------------------- 1 | import io 2 | from msoffcrypto.exceptions import DecryptionError, InvalidKeyError 3 | from loguru import logger 4 | from settings import EXCEL_PASSWORD, SHUFFLE_WALLETS 5 | import random 6 | from tqdm import tqdm 7 | import time 8 | import msoffcrypto 9 | import pandas as pd 10 | import requests 11 | import json as js 12 | 13 | crypto_prices = {} 14 | crypto_ids = ['ethereum', 'wmatic'] 15 | 16 | url = 'https://api.coingecko.com/api/v3/simple/price' 17 | param = {'vs_currencies': 'usd'} 18 | 19 | for crypto_id in crypto_ids: 20 | param['ids'] = crypto_id 21 | res = requests.get(url, params=param, timeout=60) 22 | 23 | jsres = js.loads(res.text) 24 | 25 | if crypto_id in jsres: 26 | crypto_prices[crypto_id] = float(jsres[crypto_id]['usd']) 27 | else: 28 | raise ValueError 29 | time.sleep(5) 30 | 31 | 32 | def shuffle(wallets_list): 33 | if SHUFFLE_WALLETS is True: 34 | numbered_wallets = list(enumerate(wallets_list, start=1)) 35 | random.shuffle(numbered_wallets) 36 | elif SHUFFLE_WALLETS is False: 37 | numbered_wallets = list(enumerate(wallets_list, start=1)) 38 | else: 39 | raise ValueError("\nНеверное значение переменной 'shuffle_wallets'. Ожидается 'True' or 'False'.") 40 | return numbered_wallets 41 | 42 | 43 | def sleeping(sleep_from: int, sleep_to: int): 44 | delay = random.randint(sleep_from, sleep_to) 45 | time.sleep(1) 46 | with tqdm( 47 | total=delay, 48 | desc="💤 Sleep", 49 | bar_format="{desc}: |{bar:20}| {percentage:.0f}% | {n_fmt}/{total_fmt}", 50 | colour="green" 51 | ) as pbar: 52 | for _ in range(delay): 53 | time.sleep(1) 54 | pbar.update(1) 55 | time.sleep(1) 56 | print() 57 | 58 | 59 | def get_accounts_data(): 60 | decrypted_data = io.BytesIO() 61 | with open('./data/accounts_data.xlsx', 'rb') as file: 62 | if EXCEL_PASSWORD: 63 | time.sleep(1) 64 | password = input('Enter the password: ') 65 | office_file = msoffcrypto.OfficeFile(file) 66 | 67 | try: 68 | office_file.load_key(password=password) 69 | except msoffcrypto.exceptions.DecryptionError: 70 | logger.info('\n⚠️ Incorrect password to decrypt Excel file! ⚠️\n') 71 | raise DecryptionError('Incorrect password') 72 | 73 | try: 74 | office_file.decrypt(decrypted_data) 75 | except msoffcrypto.exceptions.InvalidKeyError: 76 | logger.info('\n⚠️ Incorrect password to decrypt Excel file! ⚠️\n') 77 | raise InvalidKeyError('Incorrect password') 78 | 79 | except msoffcrypto.exceptions.DecryptionError: 80 | logger.info('\n⚠️ Set password on your Excel file first! ⚠️\n') 81 | raise DecryptionError('Excel without password') 82 | 83 | office_file.decrypt(decrypted_data) 84 | 85 | try: 86 | wb = pd.read_excel(decrypted_data) 87 | except ValueError as error: 88 | logger.info('\n⚠️ Wrong page name! ⚠️\n') 89 | raise ValueError(f"{error}") 90 | else: 91 | try: 92 | wb = pd.read_excel(file) 93 | except ValueError as error: 94 | logger.info('\n⚠️ Wrong page name! ⚠️\n') 95 | raise ValueError(f"{error}") 96 | 97 | accounts_data = {} 98 | for index, row in wb.iterrows(): 99 | private_key_evm = row["Private Key EVM"] 100 | proxy = row['PROXY'] 101 | nft = row['ADDRESS NFT TO UPDATE METADATA'] 102 | email = row['EMAIL'] 103 | accounts_data[int(index) + 1] = { 104 | "private_key_evm": private_key_evm, 105 | "proxy": proxy, 106 | 'nft': nft, 107 | 'mail': email 108 | } 109 | 110 | priv_key_evm, prx, nftt, maill = [], [], [], [] 111 | for k, v in accounts_data.items(): 112 | if isinstance(v['private_key_evm'], str): 113 | priv_key_evm.append(v['private_key_evm']) 114 | prx.append(v['proxy'] if isinstance(v['proxy'], str) else None) 115 | nftt.append(v['nft'] if isinstance(v['nft'], str) else None) 116 | maill.append(v['mail'] if isinstance(v['mail'], str) else None) 117 | 118 | return combine_lists(priv_key_evm, prx, nftt, maill) 119 | 120 | 121 | def combine_lists(list1, list2, list3, list4): 122 | combined_list = [] 123 | length = len(list1) 124 | 125 | for i in range(length): 126 | combined_list.append((list1[i], list2[i], list3[i], list4[i])) 127 | 128 | return combined_list 129 | -------------------------------------------------------------------------------- /utils/l2pass.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | from loguru import logger 3 | import json as js 4 | from web3 import Web3 5 | import random 6 | from utils.retry import exception_handler 7 | 8 | contracts = { 9 | 'Optimism': Web3.to_checksum_address('0x0000049F63Ef0D60aBE49fdD8BEbfa5a68822222'), 10 | 'Polygon': Web3.to_checksum_address('0x042002711e4d7A7Fc486742a85dBf096beeb0420'), 11 | 'Arbitrum': Web3.to_checksum_address('0x0000049F63Ef0D60aBE49fdD8BEbfa5a68822222'), 12 | 'Base': Web3.to_checksum_address('0x0000049F63Ef0D60aBE49fdD8BEbfa5a68822222'), 13 | 'Zora': Web3.to_checksum_address('0x0000049F63Ef0D60aBE49fdD8BEbfa5a68822222') 14 | } 15 | 16 | lz_id_chain = { 17 | 'Arbitrum': 110, 18 | 'Optimism': 111, 19 | 'Polygon': 109, 20 | 'Base': 184, 21 | 'Zora': 195 22 | } 23 | 24 | 25 | class L2Pass(Wallet): 26 | 27 | def __init__(self, private_key, chain_from, chain_to, number, proxy): 28 | super().__init__(private_key, chain_from, number, proxy) 29 | 30 | self.abi_bridge = js.load(open('./abi/l2pass.txt')) 31 | self.contract_bridge = self.web3.eth.contract(address=contracts[self.chain], abi=self.abi_bridge) 32 | 33 | self.chain_to = chain_to 34 | 35 | def get_nft_id(self): 36 | count = self.contract_bridge.functions.balanceOf(self.address_wallet).call() 37 | if count == 0: 38 | return 0 39 | tokens_arr = [self.contract_bridge.functions.tokenOfOwnerByIndex(self.address_wallet, i).call() for i in range(count)] 40 | return random.choice(tokens_arr) 41 | 42 | @exception_handler('Mint NFT on L2Pass') 43 | def mint_nft(self): 44 | 45 | logger.info(f'Mint NFT {self.chain} on L2Pass') 46 | 47 | contract_bridge = self.web3.eth.contract(address=contracts[self.chain], abi=self.abi_bridge) 48 | 49 | value = contract_bridge.functions.mintPrice().call() 50 | dick = { 51 | 'from': self.address_wallet, 52 | 'value': value, 53 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 54 | **self.get_gas_price() 55 | } 56 | txn = contract_bridge.functions.mint(1).build_transaction(dick) 57 | 58 | self.send_transaction_and_wait(txn, f'Mint NFT {self.chain} on L2Pass') 59 | 60 | @exception_handler('Bridge NFT') 61 | def bridge_nft(self, token_id): 62 | logger.info(f'Bridge {token_id} NFT || {self.chain} -> {self.chain_to}') 63 | 64 | adapter_params = '0x00010000000000000000000000000000000000000000000000000000000000030d40' 65 | 66 | native_fee, _ = self.contract_bridge.functions.estimateSendFee( 67 | lz_id_chain[self.chain_to], 68 | self.address_wallet, 69 | token_id, 70 | False, 71 | adapter_params 72 | ).call() 73 | 74 | contract_txn = self.contract_bridge.functions.sendFrom( 75 | self.address_wallet, 76 | lz_id_chain[self.chain_to], 77 | self.address_wallet, 78 | token_id, 79 | self.address_wallet, 80 | '0x0000000000000000000000000000000000000000', 81 | adapter_params 82 | ).build_transaction( 83 | { 84 | "from": self.address_wallet, 85 | "value": native_fee, 86 | "nonce": self.web3.eth.get_transaction_count(self.address_wallet), 87 | ** self.get_gas_price() 88 | } 89 | ) 90 | 91 | self.send_transaction_and_wait(contract_txn, f'Bridge {token_id} NFT || {self.chain} -> {self.chain_to}') 92 | -------------------------------------------------------------------------------- /utils/merkly.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | from loguru import logger 3 | import json as js 4 | from web3 import Web3 5 | from eth_abi import encode 6 | from settings import VALUE_MERKLY 7 | import random 8 | from utils.retry import exception_handler 9 | 10 | lz_id_chain = { 11 | 'Arbitrum': 110, 12 | 'Optimism': 111, 13 | 'Polygon': 109, 14 | 'Base': 184, 15 | 'Zora': 195 16 | } 17 | 18 | contracts = { 19 | 'Optimism': Web3.to_checksum_address('0xD7bA4057f43a7C4d4A34634b2A3151a60BF78f0d'), 20 | 'Polygon': Web3.to_checksum_address('0x0E1f20075C90Ab31FC2Dd91E536e6990262CF76d'), 21 | 'Arbitrum': Web3.to_checksum_address('0x4Ae8CEBcCD7027820ba83188DFD73CCAD0A92806'), 22 | 'Base': Web3.to_checksum_address('0x6bf98654205B1AC38645880Ae20fc00B0bB9FFCA'), 23 | 'Zora': Web3.to_checksum_address('0x461fcCF240CA4884Cc5413a5742F1bC56fAf7A0C') 24 | } 25 | 26 | 27 | class Merkly(Wallet): 28 | 29 | def __init__(self, private_key, chain_from, chain_to, number, proxy): 30 | super().__init__(private_key, chain_from, number, proxy) 31 | self.abi = js.load(open('./abi/refuel_merkly.txt')) 32 | self.chain_to = chain_to 33 | self.contract = self.web3.eth.contract(address=contracts[self.chain], abi=self.abi) 34 | 35 | @exception_handler('Merkly refuel') 36 | def refuel(self): 37 | 38 | logger.info(f'Merkly refuel from {self.chain} to {self.chain_to}') 39 | amount = Web3.to_wei(round(random.uniform(VALUE_MERKLY[0], VALUE_MERKLY[1]), VALUE_MERKLY[2]), 'ether') 40 | amount_wei = Web3.to_hex(encode(["uint"], [amount])) 41 | adapter_params = "0x00020000000000000000000000000000000000000000000000000000000000030d40" + amount_wei[2:] + self.address_wallet[2:] 42 | send_value = self.contract.functions.estimateSendFee(lz_id_chain[self.chain_to], '0x', adapter_params).call()[0] 43 | 44 | dick = { 45 | 'from': self.address_wallet, 46 | 'value': int(send_value * 1.1), 47 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 48 | **self.get_gas_price() 49 | } 50 | 51 | contract_txn = self.contract.functions.bridgeGas(lz_id_chain[self.chain_to], 52 | self.address_wallet, 53 | adapter_params).build_transaction(dick) 54 | 55 | self.send_transaction_and_wait(contract_txn, f'Merkly refuel from {self.chain} to {self.chain_to}') 56 | -------------------------------------------------------------------------------- /utils/mint_nft.py: -------------------------------------------------------------------------------- 1 | import random 2 | import requests 3 | from loguru import logger 4 | from web3 import Web3 5 | from utils.wallet import Wallet 6 | from utils.retry import exception_handler 7 | import json as js 8 | import os 9 | from settings import QUANTITY_NFT_6, QUANTITY_NFT_7, QUANTITY_NFT_8 10 | 11 | ADDRESS = { 12 | 'Zora': Web3.to_checksum_address('0x04E2516A2c207E84a1839755675dfd8eF6302F0a'), 13 | 'Base': Web3.to_checksum_address('0xff8b0f870ff56870dc5abd6cb3e6e89c8ba2e062'), 14 | 'Optimism': Web3.to_checksum_address('0x3678862f04290E565cCA2EF163BAeb92Bb76790C') 15 | } 16 | 17 | addr_nft = ['0xd3c48e966fe50eafeacd833194a8da22795ae5d8', 18 | '0xdd9b90deb027cbcdacea70eb87a19196d04c21fe', 19 | '0x5d4523babbbb8087cafd15cdcfaae3b7c5418ba5', 20 | '0x51ddb74ba7c41a961f7503007f8252433563eb29', 21 | '0xa6afbe046a67777ea28c3707f4827822d0737d98'] 22 | 23 | 24 | class MintNFT(Wallet): 25 | 26 | def __init__(self, private_key, chain, number, proxy): 27 | super().__init__(private_key, chain, number, proxy) 28 | self.address_zora = Web3.to_checksum_address('0x00005EA00Ac477B1030CE78506496e8C2dE24bf5') 29 | self.address_base = Web3.to_checksum_address('0x00005EA00Ac477B1030CE78506496e8C2dE24bf5') 30 | self.address_optimism = Web3.to_checksum_address('0x00005EA00Ac477B1030CE78506496e8C2dE24bf5') 31 | self.abi_1155 = js.load(open('./abi/1155.txt')) 32 | self.abi_opensea = js.load(open('./abi/opensea.txt')) 33 | 34 | @exception_handler('Mint PYTHON ZORB on OpenSea || Zora chain') 35 | def mint_opensea_zorb_zora(self): 36 | quantity = random.randint(QUANTITY_NFT_7[0], QUANTITY_NFT_7[1]) 37 | logger.info(f'Mint {quantity} PYTHON ZORB on OpenSea || Zora chain') 38 | 39 | dick = { 40 | 'from': self.address_wallet, 41 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 42 | **self.get_gas_price() 43 | } 44 | 45 | contract = self.web3.eth.contract(address=self.address_zora, abi=self.abi_opensea) 46 | txn = contract.functions.mintPublic( 47 | Web3.to_checksum_address(random.choice(addr_nft)), 48 | Web3.to_checksum_address('0x0000a26b00c1F0DF003000390027140000fAa719'), 49 | Web3.to_checksum_address('0x0000000000000000000000000000000000000000'), 50 | quantity 51 | ).build_transaction(dick) 52 | 53 | self.send_transaction_and_wait(txn, f'Mint {quantity} PYTHON ZORB on OpenSea') 54 | 55 | @exception_handler('Mint PYTHON ZORB on OpenSea || Base chain') 56 | def mint_opensea_zorb_base(self): 57 | quantity = random.randint(QUANTITY_NFT_7[0], QUANTITY_NFT_7[1]) 58 | logger.info(f'Mint {quantity} PYTHON ZORB on OpenSea || Base chain') 59 | 60 | dick = { 61 | 'from': self.address_wallet, 62 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 63 | **self.get_gas_price() 64 | } 65 | 66 | contract = self.web3.eth.contract(address=self.address_base, abi=self.abi_opensea) 67 | txn = contract.functions.mintPublic( 68 | Web3.to_checksum_address('0x92dFC144B8B897d36E980e6E29217201801A1C1e'), 69 | Web3.to_checksum_address('0x0000a26b00c1F0DF003000390027140000fAa719'), 70 | Web3.to_checksum_address('0x0000000000000000000000000000000000000000'), 71 | quantity 72 | ).build_transaction(dick) 73 | 74 | self.send_transaction_and_wait(txn, f'Mint {quantity} PYTHON ZORB on OpenSea') 75 | 76 | @exception_handler('Mint PYTHON ZORB on OpenSea || Optimism chain') 77 | def mint_opensea_zorb_opt(self): 78 | quantity = random.randint(QUANTITY_NFT_7[0], QUANTITY_NFT_7[1]) 79 | logger.info(f'Mint {quantity} PYTHON ZORB on OpenSea || Optimism chain') 80 | 81 | dick = { 82 | 'from': self.address_wallet, 83 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 84 | **self.get_gas_price() 85 | } 86 | 87 | contract = self.web3.eth.contract(address=self.address_optimism, abi=self.abi_opensea) 88 | txn = contract.functions.mintPublic( 89 | Web3.to_checksum_address('0x4301db4122dc1058df3e0e09415d025467348cb1'), 90 | Web3.to_checksum_address('0x0000a26b00c1F0DF003000390027140000fAa719'), 91 | Web3.to_checksum_address('0x0000000000000000000000000000000000000000'), 92 | quantity 93 | ).build_transaction(dick) 94 | 95 | self.send_transaction_and_wait(txn, f'Mint {quantity} PYTHON ZORB on OpenSea') 96 | 97 | @exception_handler('Mint PYTHON ZORB || Blast chain') 98 | def mint_zorb_blast(self): 99 | quantity = random.randint(QUANTITY_NFT_6[0], QUANTITY_NFT_6[1]) 100 | logger.info(f'Mint {quantity} PYTHON ZORB || Blast chain') 101 | 102 | contract = self.web3.eth.contract(address=Web3.to_checksum_address('0xA83aa4479528Ae4058290810962c5e5b54699C6C'), abi=self.abi_1155) 103 | fee = contract.functions.mintFee().call() * quantity 104 | dick = { 105 | 'from': self.address_wallet, 106 | 'value': fee, 107 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 108 | **self.get_gas_price() 109 | } 110 | 111 | txn = contract.functions.mintWithRewards( 112 | Web3.to_checksum_address('0x3eb144aee170bf62fda1536e38af51f08e34a5d0'), 113 | 1, 114 | quantity, 115 | '0x000000000000000000000000' + self.address_wallet[2:], 116 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C') 117 | ).build_transaction(dick) 118 | 119 | self.send_transaction_and_wait(txn, f'Mint {quantity} PYTHON ZORB') 120 | 121 | @exception_handler('Mint THE AMBASSADOR || Arbitrum chain') 122 | def mint_zorb_arbitrum(self): 123 | quantity = random.randint(QUANTITY_NFT_6[0], QUANTITY_NFT_6[1]) 124 | logger.info(f'Mint {quantity} THE AMBASSADOR || Arbitrum chain') 125 | 126 | contract = self.web3.eth.contract(address=Web3.to_checksum_address('0x6daf8bc7ec5300f31da63dd833cfabb1e4538335'), abi=self.abi_1155) 127 | fee = contract.functions.mintFee().call() * quantity 128 | dick = { 129 | 'from': self.address_wallet, 130 | 'value': fee, 131 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 132 | **self.get_gas_price() 133 | } 134 | 135 | txn = contract.functions.mintWithRewards( 136 | Web3.to_checksum_address('0x1Cd1C1f3b8B779B50Db23155F2Cb244FCcA06B21'), 137 | 1, 138 | quantity, 139 | '0x000000000000000000000000' + self.address_wallet[2:], 140 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C') 141 | ).build_transaction(dick) 142 | 143 | self.send_transaction_and_wait(txn, f'Mint {quantity} THE AMBASSADOR') 144 | 145 | @exception_handler('Mint PYTHON ZORB || Zora chain') 146 | def mint_zorb_zora(self): 147 | quantity = random.randint(QUANTITY_NFT_6[0], QUANTITY_NFT_6[1]) 148 | logger.info(f'Mint {quantity} PYTHON ZORB || Zora chain') 149 | 150 | contract = self.web3.eth.contract(address=Web3.to_checksum_address('0xC94AcD65b6965370eBEf0a2AdCDAD5B4362dD671'), abi=self.abi_1155) 151 | fee = contract.functions.mintFee().call() * quantity 152 | dick = { 153 | 'from': self.address_wallet, 154 | 'value': fee, 155 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 156 | **self.get_gas_price() 157 | } 158 | 159 | txn = contract.functions.mintWithRewards( 160 | Web3.to_checksum_address('0x04E2516A2c207E84a1839755675dfd8eF6302F0a'), 161 | 1, 162 | quantity, 163 | '0x000000000000000000000000' + self.address_wallet[2:], 164 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C') 165 | ).build_transaction(dick) 166 | 167 | self.send_transaction_and_wait(txn, f'Mint {quantity} PYTHON ZORB') 168 | 169 | @exception_handler('Mint {quantity} PYTHON ZORB || Base chain') 170 | def mint_zorb_base(self): 171 | quantity = random.randint(QUANTITY_NFT_6[0], QUANTITY_NFT_6[1]) 172 | logger.info(f'Mint {quantity} PYTHON ZORB || Base chain') 173 | 174 | contract = self.web3.eth.contract(address=Web3.to_checksum_address('0xd63A68fAf5dD0CE2C36Fd0D4B731b2889bD04952'), abi=self.abi_1155) 175 | fee = contract.functions.mintFee().call() * quantity 176 | dick = { 177 | 'from': self.address_wallet, 178 | 'value': fee, 179 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 180 | **self.get_gas_price() 181 | } 182 | 183 | txn = contract.functions.mintWithRewards( 184 | Web3.to_checksum_address('0xff8b0f870ff56870dc5abd6cb3e6e89c8ba2e062'), 185 | 1, 186 | quantity, 187 | '0x000000000000000000000000' + self.address_wallet[2:], 188 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C') 189 | ).build_transaction(dick) 190 | 191 | self.send_transaction_and_wait(txn, f'Mint {quantity} PYTHON ZORB') 192 | 193 | @exception_handler('Mint PYTHON ZORB || Optimism chain') 194 | def mint_zorb_opt(self): 195 | quantity = random.randint(QUANTITY_NFT_6[0], QUANTITY_NFT_6[1]) 196 | logger.info(f'Mint {quantity} PYTHON ZORB || Optimism chain') 197 | 198 | contract = self.web3.eth.contract(address=Web3.to_checksum_address('0xcb4927957d33b0714a206721c0361638c2fc5f42'), abi=self.abi_1155) 199 | fee = contract.functions.mintFee().call() * quantity 200 | dick = { 201 | 'from': self.address_wallet, 202 | 'value': fee, 203 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 204 | **self.get_gas_price() 205 | } 206 | 207 | txn = contract.functions.mintWithRewards( 208 | Web3.to_checksum_address('0x3678862f04290E565cCA2EF163BAeb92Bb76790C'), 209 | 1, 210 | quantity, 211 | '0x000000000000000000000000' + self.address_wallet[2:], 212 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C') 213 | ).build_transaction(dick) 214 | 215 | self.send_transaction_and_wait(txn, f'Mint {quantity} PYTHON ZORB') 216 | 217 | @exception_handler('Mint Custom NFT') 218 | def mint_1155(self, address, nft_id): 219 | quantity = random.randint(QUANTITY_NFT_8[0], QUANTITY_NFT_8[1]) 220 | logger.info(f'Mint {quantity} Custom NFT || {address}') 221 | contract = self.web3.eth.contract(address=Web3.to_checksum_address(address), abi=self.abi_1155) 222 | fee = contract.functions.mintFee().call() * quantity 223 | dick = { 224 | 'from': self.address_wallet, 225 | 'value': fee, 226 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 227 | **self.get_gas_price() 228 | } 229 | name = contract.functions.name().call() 230 | 231 | txn = contract.functions.mintWithRewards( 232 | ADDRESS[self.chain], 233 | int(nft_id), 234 | quantity, 235 | '0x000000000000000000000000' + self.address_wallet[2:], 236 | Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C') 237 | ).build_transaction(dick) 238 | 239 | self.send_transaction_and_wait(txn, f'Mint {quantity} {name} NFT') 240 | 241 | @exception_handler('Update metadata NFT') 242 | def update_metadata(self, address): 243 | 244 | logger.info(f'Update metadata NFT || {address}') 245 | contract = self.web3.eth.contract(address=Web3.to_checksum_address(address), abi=self.abi_1155) 246 | owner = contract.functions.owner().call() 247 | if owner != self.address_wallet: 248 | logger.error(f'Сurrent wallet: {self.address_wallet} || Creater NFT: {owner}\n') 249 | return False 250 | 251 | picture_list = os.listdir('picture') 252 | file_list = [] 253 | for picture in picture_list: 254 | with open(f'picture/{picture}', "rb") as f: 255 | file = f.read() 256 | file_list.append(file) 257 | pic = random.choice(file_list) 258 | 259 | files = {"file": pic} 260 | url = 'https://ipfs-uploader.zora.co/api/v0/add?stream-channels=true&cid-version=1&progress=false' 261 | res = requests.post(url=url, files=files, timeout=60) 262 | json_data = res.json() 263 | url_pictire = 'ipfs://' + json_data['Hash'] 264 | 265 | with open('utils/words.txt', 'r') as f: 266 | list_word = f.readlines() 267 | word = random.choice(list_word)[:-1] + random.choice(list_word)[:-1] 268 | 269 | dick = { 270 | 'from': self.address_wallet, 271 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 272 | **self.get_gas_price() 273 | } 274 | txn = contract.functions.updateContractMetadata(url_pictire, word).build_transaction(dick) 275 | self.send_transaction_and_wait(txn, 'Update metadata NFT') 276 | -------------------------------------------------------------------------------- /utils/mintfun.py: -------------------------------------------------------------------------------- 1 | import random 2 | import requests 3 | from loguru import logger 4 | from web3 import Web3 5 | from utils.wallet import Wallet 6 | from utils.retry import exception_handler 7 | import json as js 8 | 9 | contracts = [ 10 | {"address": "0x4de73D198598C3B4942E95657a12cBc399E4aDB5", "quantity": 1}, 11 | {"address": "0x53cb0B849491590CaB2cc44AF8c20e68e21fc36D", "quantity": 3}, 12 | {"address": "0x9eAE90902a68584E93a83D7638D3a95ac67FC446", "quantity": 3}, 13 | {"address": "0x4073a52A3fc328D489534Ab908347eC1FcB18f7f", "quantity": 3}, 14 | {"address": "0xC47ADb3e5dC59FC3B41d92205ABa356830b44a93", "quantity": 2}, 15 | {"address": "0x8A43793D26b5DBd5133b78A85b0DEF8fB8Fce9B3", "quantity": 99}, 16 | {"address": "0x266b7E8Df0368Dd4006bE5469DD4EE13EA53d3a4", "quantity": 3}, 17 | {"address": "0xFa177a7eDC2518E70F8f8Ee159fA355D6b727257", "quantity": 3}, 18 | {"address": "0x8974B96dA5886Ed636962F66a6456DC39118A140", "quantity": 3}, 19 | {"address": "0xbC2cA61440fAF65a9868295Efa5d5D87c55B9529", "quantity": 4}, 20 | {"address": "0xb096832A6ccD9053fe7a0EF075191Fe342D1AB75", "quantity": 2}, 21 | {"address": "0x8f1B6776963bFcaa26f4e2a41289cFc3F50eD554", "quantity": 2}, 22 | {"address": "0x93BCe2fF7CF7cFc722F70F8a5A93C2849C5eDEEF", "quantity": 2}, 23 | {"address": "0x6BF820b6EF66B9946d078679a50DcDF2BF2e033c", "quantity": 4}, 24 | {"address": "0x438F8f41801d470d0b7551F4d01853e7ca1fd0D8", "quantity": 5}, 25 | {"address": "0x300Ee523E8b95B3B4DB763089505F525a2d61721", "quantity": 3}, 26 | {"address": "0xdB123EeDcFE960a03310D3A26f4A28D26627dcfe", "quantity": 5}, 27 | {"address": "0x6B81dB6AdC67fd5E5C418cECbaBe0b308aBdb336", "quantity": 3}, 28 | {"address": "0xBEB84aFE342fd6bEB2299B1a4F5d2bc28c4f4840", "quantity": 1}, 29 | {"address": "0x96a420b4c68d12324a66d78780D6d3f1305358f8", "quantity": 3}, 30 | {"address": "0x041D54c20cE67959eF5b0FE9fb23e3BEdFdFb2b3", "quantity": 1}, 31 | {"address": "0x7854cF3526795825de031cdf494e1364a04e9538", "quantity": 2}, 32 | {"address": "0xf75881b3cd35af9FDcF251A8c8a8158EC7f4a3C8", "quantity": 10}, 33 | {"address": "0x1F781d47cD59257D7AA1Bd7b2fbaB50D57AF8587", "quantity": 1}, 34 | {"address": "0x4fdD1f24238319dceAA8B3F514B4FdB3b6281CB0", "quantity": 3}, 35 | {"address": "0xA85B9F9154db5bd9C0b7F869bC910a98ba1b7A87", "quantity": 3}, 36 | {"address": "0xE4a39cAff4b4a85484191dCC122a55AE103C0039", "quantity": 2}, 37 | {"address": "0x5c68EFfd0807ff3173c230de202186A0212180C4", "quantity": 1}, 38 | {"address": "0x1828e1D65c06c16c2226652D3294d20Eac03c341", "quantity": 10}, 39 | {"address": "0x26d35052D2D6f552cF9FCb811A7c742C587a196f", "quantity": 3}, 40 | {"address": "0x695DF91CdCc9f0adDA1e5B2cEF66F0634cCe1D31", "quantity": 10}, 41 | {"address": "0xC6835596743F076351AbAC0aa99ACCEed7429271", "quantity": 3}, 42 | {"address": "0x5CB3Be6681E5aF9644F5356EbbaEE55BfCF86222", "quantity": 100}, 43 | {"address": "0x0b88A7d17F25DaFC4e1856f255C23621C202CE43", "quantity": 1}, 44 | {"address": "0xc885F96F482436ee56D6c709340b1e275CD2C3CD", "quantity": 1}, 45 | {"address": "0x0526479Ba588D9fF1012EAC414B0f468b15e0261", "quantity": 1}, 46 | {"address": "0xBd47ff0d24Fc10285F44E96CB47D31d2375F6cD2", "quantity": 1}, 47 | {"address": "0xb228409EB7545CB92Ab1784f2E00fa1D84588186", "quantity": 1}, 48 | {"address": "0x5d4523babbbb8087cafd15cdcfaae3b7c5418ba5", "quantity": 2}, 49 | {"address": "0xd3c48e966fe50eafeacd833194a8da22795ae5d8", "quantity": 4}, 50 | {"address": "0x51ddb74ba7c41a961f7503007f8252433563eb29", "quantity": 5}, 51 | {"address": "0xa6afbe046a67777ea28c3707f4827822d0737d98", "quantity": 1}, 52 | {"address": "0x79E816b618B236E94cd08E25495015d4b0cADA42", "quantity": 6}, 53 | {"address": "0x56526Ad6a315b3A7D68d65750fc7eB7c9fD47c2E", "quantity": 1}, 54 | {"address": "0x49a015d2AC7D2E258E56f8867c17c783A1E54248", "quantity": 1}, 55 | {"address": "0x2a95cc258010c723adcc619d2d63fD1d16253269", "quantity": 1}, 56 | {"address": "0xE240272CBdc287D880164c45E96F4a2461397Db5", "quantity": 1}, 57 | {"address": "0x320237de8bEc260E2FDf16349DC9617e4711F9F2", "quantity": 1}, 58 | {"address": "0x2973BC697Be1976d63977e1E7211D14864Ce4aE8", "quantity": 2}, 59 | {"address": "0xD06cA7D244758265fAF4908f0B67ef1E6301f8F3", "quantity": 1}, 60 | {"address": "0x9b327f1Fa5617fB104B91DeAC0E92D7cdE870ba4", "quantity": 1}, 61 | {"address": "0x1301eD2bF13784cb05bcBEB3828cea17bC0b8f44", "quantity": 1}, 62 | {"address": "0x034181c4527df51b486e1f88f087c8de22da8dfd", "quantity": 1}, 63 | {"address": "0x318f574DCb48Aa0ea12a7B0103009514d3A7C271", "quantity": 1}, 64 | {"address": "0x81d0fCD3a651f7ceB3Fb01358aE9E732d5271d5d", "quantity": 1}, 65 | {"address": "0x199A21f0be1cdcdd882865E7d0F462e4778c5ee4", "quantity": 2}, 66 | {"address": "0x01dE72ABDE4F06D95784cfB90015FdF586b1e8B2", "quantity": 1}, 67 | {"address": "0x6B1Af53f5Fb0F483e1FB218252cb0214E9B5f1FE", "quantity": 1}, 68 | {"address": "0x669d7E515cc0a9eD60227B058C3E08f836843373", "quantity": 1} 69 | ] 70 | 71 | 72 | class MintFun(Wallet): 73 | 74 | def __init__(self, private_key, chain, number, proxy): 75 | super().__init__(private_key, chain, number, proxy) 76 | self.abi = js.load(open('./abi/mintfun.txt')) 77 | 78 | @exception_handler('Mint on MintFun') 79 | def mint(self): 80 | conract = random.choice(contracts) 81 | contr = self.web3.eth.contract(address=Web3.to_checksum_address(conract["address"]), abi=self.abi) 82 | name = contr.functions.name().call() 83 | logger.info(f'Mint {conract["quantity"]} {name} on MintFun || Zora chain') 84 | 85 | dick = { 86 | 'from': self.address_wallet, 87 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 88 | **self.get_gas_price() 89 | } 90 | 91 | contract_txn = contr.functions.mint(conract["quantity"]).build_transaction(dick) 92 | self.send_transaction_and_wait(contract_txn, f'Mint {conract["quantity"]} {name} on MintFun') 93 | -------------------------------------------------------------------------------- /utils/nft2me.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | from loguru import logger 3 | import json as js 4 | from web3 import Web3 5 | from settings import QUANTITY_NFT_15 6 | import random 7 | from utils.retry import exception_handler 8 | 9 | contracts = ['0x79E816b618B236E94cd08E25495015d4b0cADA42', '0x56526Ad6a315b3A7D68d65750fc7eB7c9fD47c2E', 10 | '0x49a015d2AC7D2E258E56f8867c17c783A1E54248', '0x2a95cc258010c723adcc619d2d63fD1d16253269', 11 | '0xE240272CBdc287D880164c45E96F4a2461397Db5', '0x320237de8bEc260E2FDf16349DC9617e4711F9F2'] 12 | 13 | 14 | class NFT2ME(Wallet): 15 | 16 | def __init__(self, private_key, chain_from, number, proxy): 17 | super().__init__(private_key, chain_from, number, proxy) 18 | self.abi = js.load(open('./abi/nft2me.txt')) 19 | self.contract = self.web3.eth.contract(address=Web3.to_checksum_address(random.choice(contracts)), abi=self.abi) 20 | 21 | @exception_handler('Mint on NFT2ME') 22 | def mint(self): 23 | quantity = random.randint(QUANTITY_NFT_15[0], QUANTITY_NFT_15[1]) 24 | name = self.contract.functions.name().call() 25 | logger.info(f'Mint {quantity} {name} on NFT2ME || Zora chain') 26 | dick = { 27 | 'from': self.address_wallet, 28 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 29 | **self.get_gas_price() 30 | } 31 | 32 | contract_txn = self.contract.functions.mint(quantity).build_transaction(dick) 33 | self.send_transaction_and_wait(contract_txn, f'Mint {quantity} {name} on NFT2ME') 34 | -------------------------------------------------------------------------------- /utils/off_bridge.py: -------------------------------------------------------------------------------- 1 | import random 2 | from loguru import logger 3 | from web3 import Web3 4 | from utils.wallet import Wallet 5 | import json as js 6 | from settings import OFF_ZORA_DEPOSIT 7 | from utils.retry import exception_handler 8 | 9 | 10 | class ZoraBridge(Wallet): 11 | 12 | def __init__(self, private_key, number): 13 | super().__init__(private_key, 'Ethereum', number, None) 14 | self.address = Web3.to_checksum_address('0x1a0ad011913A150f69f6A19DF447A0CfD9551054') 15 | self.abi = js.load(open('./abi/of_bridge.txt')) 16 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi) 17 | 18 | @exception_handler('Official Zora bridge') 19 | def bridge(self): 20 | value = Web3.to_wei(round(random.uniform(OFF_ZORA_DEPOSIT[0], OFF_ZORA_DEPOSIT[1]), OFF_ZORA_DEPOSIT[2]), 'ether') 21 | gas = 60_000 22 | balance = self.get_native_balance() 23 | gas_cost = self.web3.eth.gas_price * gas 24 | if balance - gas_cost < 0: 25 | logger.error('Balance ETH - GasCost < 0\n') 26 | return 27 | 28 | if balance - gas_cost < value: 29 | value = balance - gas_cost 30 | 31 | if value <= 0: 32 | logger.error(f'Value bridge ETH - {value}\n') 33 | return 34 | 35 | dick = { 36 | 'from': self.address_wallet, 37 | 'value': value, 38 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 39 | 'gas': gas, 40 | **self.get_gas_price() 41 | } 42 | txn = self.contract.functions.depositTransaction(self.address_wallet, value, 100000, False, b'').build_transaction(dick) 43 | self.send_transaction_and_wait(txn, f'Zora bridge {Web3.from_wei(value, "ether")} ETH || ETH -> Zora') 44 | -------------------------------------------------------------------------------- /utils/refuel.py: -------------------------------------------------------------------------------- 1 | from utils.retry_refuel import exception_handler_refuel 2 | from utils.wallet import Wallet 3 | from settings import CHAIN_FROM_REFUEL, VALUE_REFUEL 4 | from web3 import Web3 5 | from loguru import logger 6 | import random 7 | from utils.func import crypto_prices 8 | 9 | chain_id = { 10 | 'Zora': 7777777, 11 | 'Arbitrum': 42161, 12 | 'Optimism': 10, 13 | 'Nova': 42170, 14 | 'Base': 8453, 15 | 'zkSync': 324, 16 | 'Linea': 59144 17 | } 18 | 19 | 20 | class Refuel(Wallet): 21 | def __init__(self, private_key, chain_to, number, proxy): 22 | self.private_key = private_key 23 | super().__init__(private_key, self.get_refuel_chain(), number, proxy) 24 | self.chain_to = chain_to 25 | 26 | @exception_handler_refuel 27 | def get_refuel_chain(self): 28 | 29 | balance_chain = 0 30 | chan = None 31 | 32 | for chain in CHAIN_FROM_REFUEL: 33 | web3 = self.get_web3_refuel(chain) 34 | address_wallet = web3.eth.account.from_key(self.private_key).address 35 | balance = web3.eth.get_balance(address_wallet) 36 | if chain == 'Polygon': 37 | value = float(Web3.from_wei(balance, "ether")) * crypto_prices['wmatic'] 38 | else: 39 | value = float(Web3.from_wei(balance, "ether")) * crypto_prices['ethereum'] 40 | 41 | logger.info(f'Баланс в {chain} - {Web3.from_wei(balance, "ether")}') 42 | 43 | if balance_chain > value: 44 | continue 45 | else: 46 | balance_chain = value 47 | chan = chain 48 | 49 | logger.success(f'Cеть для рефуела - {chan}\n') 50 | return chan 51 | 52 | @exception_handler_refuel 53 | def refuel(self): 54 | if self.chain == self.chain_to: 55 | return 'error' 56 | 57 | logger.info(f'Relay bridge || {self.chain} -> {self.chain_to}') 58 | 59 | if self.chain == 'Polygon': 60 | value = VALUE_REFUEL['Polygon'] 61 | token = 'Matic' 62 | else: 63 | value = VALUE_REFUEL['Other'] 64 | token = 'ETH' 65 | value = Web3.to_wei(round(random.uniform(value[0], value[1]), value[2]), 'ether') 66 | balance = self.get_native_balance() 67 | 68 | json = { 69 | 'originChainId': chain_id[self.chain], 70 | 'destinationChainId': chain_id[self.chain_to], 71 | 'user': self.address_wallet, 72 | 'txs': [{ 73 | 'data': '0x', 74 | 'to': self.address_wallet, 75 | 'value': str(value) 76 | }] 77 | } 78 | 79 | data = self.get_api_call_data_post('https://api.relay.link/execute/call', json) 80 | 81 | value = int(data['steps'][0]['items'][0]['data']['value']) 82 | 83 | if balance < value: 84 | value = (balance * 0.7) 85 | 86 | if value <= 0: 87 | logger.error(f'Value bridge {token} - {value}\n') 88 | return 89 | 90 | dick = { 91 | 'chainId': self.web3.eth.chain_id, 92 | 'from': self.address_wallet, 93 | 'data': data['steps'][0]['items'][0]['data']['data'], 94 | 'to': Web3.to_checksum_address(data['steps'][0]['items'][0]['data']['to']), 95 | 'value': value, 96 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 97 | **self.get_gas_price() 98 | } 99 | 100 | gas = int(self.web3.eth.estimate_gas(dick) * 1.3) 101 | dick.update({'gas': gas}) 102 | 103 | self.send_transaction_and_wait(dick, f'Relay bridge {round(Web3.from_wei(value, "ether"), 5)} {token} || {self.chain} -> {self.chain_to}') 104 | -------------------------------------------------------------------------------- /utils/retry.py: -------------------------------------------------------------------------------- 1 | from web3.exceptions import TransactionNotFound 2 | from loguru import logger 3 | from settings import RETRY, TIME_DELAY_ERROR, TG_BOT_SEND, REFUEL, MAX_GAS_ETH, CHAIN_RPC 4 | from utils.tg_bot import TgBot 5 | from utils.func import sleeping 6 | from utils.refuel import Refuel 7 | from web3 import Web3 8 | import time 9 | 10 | web3_eth = Web3(Web3.HTTPProvider(CHAIN_RPC['Ethereum'], request_kwargs={'timeout': 60})) 11 | 12 | 13 | def chek_gas_eth(): 14 | while True: 15 | try: 16 | res = int(Web3.from_wei(web3_eth.eth.gas_price, 'gwei')) 17 | logger.info(f'Газ сейчас - {res} gwei\n') 18 | if res <= MAX_GAS_ETH: 19 | break 20 | else: 21 | time.sleep(60) 22 | continue 23 | except Exception as error: 24 | logger.error(error) 25 | time.sleep(30) 26 | continue 27 | 28 | 29 | def exception_handler(label=''): 30 | def decorator(func): 31 | def wrapper(self, *args, **kwargs): 32 | for _ in range(RETRY): 33 | try: 34 | chek_gas_eth() 35 | return func(self, *args, **kwargs) 36 | 37 | except TransactionNotFound: 38 | logger.error('Транзакция не смайнилась за долгий промежуток времени, пытаюсь еще раз\n') 39 | if TG_BOT_SEND is True: 40 | TgBot.send_message_error(self, self.number, label, self.address_wallet, 41 | 'Транзакция не смайнилась за долгий промежуток времени, пытаюсь еще раз') 42 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 43 | 44 | except ConnectionError: 45 | logger.error('Ошибка подключения к интернету или проблемы с РПЦ\n') 46 | if TG_BOT_SEND is True: 47 | TgBot.send_message_error(self, self.number, label, self.address_wallet, 48 | 'Ошибка подключения к интернету или проблемы с РПЦ') 49 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 50 | 51 | except Exception as error: 52 | if isinstance(error.args[0], dict): 53 | if 'insufficien' in error.args[0]['message'] or 'required exceeds allowance' in error.args[0]['message']: 54 | logger.error('Ошибка, скорее всего нехватает комсы\n') 55 | if TG_BOT_SEND is True: 56 | TgBot.send_message_error(self, self.number, label, self.address_wallet, 57 | 'Ошибка, скорее всего нехватает комсы') 58 | 59 | if REFUEL is True: 60 | tun = Refuel(self.private_key, self.chain, self.number, self.proxy) 61 | res = tun.refuel() 62 | if res == 'error': 63 | return 'balance' 64 | sleeping(100, 200) 65 | continue 66 | 67 | return 'balance' 68 | else: 69 | logger.error(error) 70 | if TG_BOT_SEND is True: 71 | TgBot.send_message_error(self, self.number, label, self.address_wallet, error) 72 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 73 | else: 74 | logger.error(error) 75 | if TG_BOT_SEND is True: 76 | TgBot.send_message_error(self, self.number, label, self.address_wallet, error) 77 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 78 | else: 79 | return False 80 | return wrapper 81 | return decorator 82 | -------------------------------------------------------------------------------- /utils/retry_refuel.py: -------------------------------------------------------------------------------- 1 | from web3.exceptions import TransactionNotFound 2 | from loguru import logger 3 | from settings import RETRY, TIME_DELAY_ERROR 4 | from settings import TG_BOT_SEND 5 | from utils.tg_bot import TgBot 6 | from utils.func import sleeping 7 | 8 | 9 | def exception_handler_refuel(func): 10 | def wrapper(self, *args, **kwargs): 11 | for _ in range(RETRY): 12 | 13 | try: 14 | return func(self, *args, **kwargs) 15 | 16 | except TransactionNotFound: 17 | logger.info('Транзакция не смайнилась за долгий промежуток времени, пытаюсь еще раз') 18 | if TG_BOT_SEND is True: 19 | TgBot.send_message_error(self, self.number, 'Refuel', self.address_wallet, 20 | 'Транзакция не смайнилась за долгий промежуток времени, пытаюсь еще раз') 21 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 22 | 23 | except ConnectionError: 24 | logger.info('Ошибка подключения к интернету или проблемы с РПЦ') 25 | if TG_BOT_SEND is True: 26 | TgBot.send_message_error(self, self.number, 'Refuel', self.address_wallet, 27 | 'Ошибка подключения к интернету или проблемы с РПЦ') 28 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 29 | 30 | except Exception as error: 31 | logger.info('Произошла ошибка') 32 | if isinstance(error.args[0], dict): 33 | if 'insufficien' in error.args[0]['message']: 34 | logger.error('Ошибка, скорее всего нехватает комсы\n') 35 | if TG_BOT_SEND is True: 36 | TgBot.send_message_error(self, self.number, 'Refuel', self.address_wallet, 37 | 'Ошибка, скорее всего нехватает комсы') 38 | return 'balance' 39 | else: 40 | logger.error(error) 41 | if TG_BOT_SEND is True: 42 | TgBot.send_message_error(self, self.number, 'Refuel', self.address_wallet, error) 43 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 44 | else: 45 | logger.error(error) 46 | if TG_BOT_SEND is True: 47 | TgBot.send_message_error(self, self.number, 'Refuel', self.address_wallet, error) 48 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 49 | 50 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 51 | else: 52 | raise ValueError('the number of iterations of the loop has ended') 53 | return wrapper -------------------------------------------------------------------------------- /utils/retry_wallet.py: -------------------------------------------------------------------------------- 1 | from web3.exceptions import TransactionNotFound 2 | from settings import RETRY, TIME_DELAY_ERROR 3 | from loguru import logger 4 | from utils.func import sleeping 5 | 6 | 7 | def exception_handler_wallet(func): 8 | def wrapper(self, *args, **kwargs): 9 | for _ in range(RETRY): 10 | 11 | try: 12 | return func(self, *args, **kwargs) 13 | 14 | except TransactionNotFound: 15 | logger.info('Транзакция не смайнилась за долгий промежуток времени, пытаюсь еще раз') 16 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 17 | 18 | except ConnectionError: 19 | logger.info('Ошибка подключения к интернету или проблемы с РПЦ') 20 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 21 | 22 | except Exception as error: 23 | logger.info('Произошла ошибка') 24 | 25 | if isinstance(error.args[0], str): 26 | 27 | if 'is not in the chain after' in error.args[0]: 28 | logger.error('Транзакция не смайнилась за долгий промежуток времени. Пытаюсь еще раз') 29 | 30 | elif error.args[0] == "balance refuel": 31 | logger.error('Need refuel\n') 32 | 33 | else: 34 | logger.error(error) 35 | 36 | elif isinstance(error.args[0], dict): 37 | if 'nsufficien' in error.args[0]['message'] or 'required exceeds allowance' in error.args[0]['message']: 38 | logger.error('Need refuel\n') 39 | 40 | elif 'execute this request' in error.args[0]['message']: 41 | logger.error('Ошибка запроса на RPC, пытаюсь еще раз') 42 | 43 | elif 'ax fee per gas' in error.args[0]['message']: 44 | logger.error('Ошибка газа, пытаюсь еще раз') 45 | 46 | else: 47 | logger.error(f'{error}\n') 48 | 49 | else: 50 | logger.error(f'{error}\n') 51 | sleeping(TIME_DELAY_ERROR[0], TIME_DELAY_ERROR[1]) 52 | else: 53 | raise ValueError('the number of iterations of the loop has ended') 54 | return wrapper 55 | -------------------------------------------------------------------------------- /utils/send_money.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Elez-dev/ZoraAIO/64f8141c266959be66fb7cc9f4a1833e3cebb76d/utils/send_money.py -------------------------------------------------------------------------------- /utils/set_email.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from datetime import datetime 3 | from utils.wallet import Wallet 4 | import ua_generator 5 | import uuid 6 | import time 7 | import random 8 | from eth_account.messages import encode_defunct 9 | from loguru import logger 10 | import imaplib 11 | import email 12 | from email.header import decode_header 13 | from settings import IMAP_SERVER 14 | from utils.func import sleeping 15 | import re 16 | from utils.retry import exception_handler 17 | 18 | 19 | class SetEmail(Wallet): 20 | def __init__(self, private_key, number, proxy): 21 | super().__init__(private_key, 'Zora', number, proxy) 22 | self.privy_ca_id = str(uuid.uuid4()) 23 | self.session = requests.Session() 24 | if self.proxy is not None: 25 | proxy_dick = {'https': 'http://' + self.proxy, 'http': 'http://' + self.proxy} 26 | self.session.proxies = proxy_dick 27 | 28 | def get_call_data_get(self, url, json=None): 29 | if json is None: 30 | resp = self.session.get(url=url) 31 | else: 32 | resp = self.session.get(url=url, json=json) 33 | if resp.status_code >= 400: 34 | return False 35 | return resp.json() 36 | 37 | def get_call_data_post(self, url, json): 38 | resp = self.session.post(url=url, json=json) 39 | return resp.json() 40 | 41 | def generate_headers(self): 42 | ua = ua_generator.generate(device='desktop', browser='chrome') 43 | headers = { 44 | 'accept': 'application/json, text/plain, */*', 45 | 'origin': 'https://zora.co', 46 | 'accept-language': 'en-US,en;q=0.9', 47 | 'content-type': 'application/json', 48 | 'referer': 'https://zora.co/', 49 | 'privy-app-id': 'clpgf04wn04hnkw0fv1m11mnb', 50 | 'privy-ca-id': self.privy_ca_id, 51 | 'privy-client': 'react-auth:1.51.1', 52 | 'sec-ch-ua': f'"{ua.ch.brands[2:]}"', 53 | 'sec-ch-ua-mobile': '?0', 54 | 'sec-ch-ua-platform': f'"{ua.platform.title()}"', 55 | 'sec-fetch-dest': 'empty', 56 | 'sec-fetch-mode': 'cors', 57 | 'sec-fetch-site': 'same-site', 58 | 'user-agent': ua.text 59 | } 60 | self.session.headers = headers 61 | 62 | def get_nonce(self): 63 | url = 'https://auth.privy.io/api/v1/siwe/init' 64 | json = {'address': self.address_wallet} 65 | data = self.get_call_data_post(url=url, json=json) 66 | return data['nonce'] 67 | 68 | def sign_in(self): 69 | self.generate_headers() 70 | nonce = self.get_nonce() 71 | issued_at = datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + 'Z' 72 | time.sleep(random.uniform(0.5, 1.5)) 73 | 74 | msg = f'zora.co wants you to sign in with your Ethereum account:\n' \ 75 | f'{self.address_wallet}\n\n' \ 76 | f'By signing, you are proving you own this wallet and logging in. ' \ 77 | f'This does not initiate a transaction or cost any fees.\n\n' \ 78 | f'URI: https://zora.co\n' \ 79 | f'Version: 1\n' \ 80 | f'Chain ID: 1\n' \ 81 | f'Nonce: {nonce}\n' \ 82 | f'Issued At: {issued_at}\n' \ 83 | f'Resources:\n' \ 84 | f'- https://privy.io' 85 | message = encode_defunct(text=msg) 86 | signature = self.account.sign_message(message).signature.hex() 87 | url = 'https://auth.privy.io/api/v1/siwe/authenticate' 88 | json = { 89 | 'chainId': 'eip155:7777777', 90 | 'connectorType': 'injected', 91 | 'message': msg, 92 | 'signature': signature, 93 | 'walletClientType': 'metamask', 94 | } 95 | res = self.session.post(url=url, json=json) 96 | data = res.json() 97 | head = res.headers['Set-Cookie'] 98 | privy_refresh_token = re.search(r'privy-refresh-token=([^;,]+)', head).group(1) 99 | privy_access_token = re.search(r'privy-access-token=([^;,]+)', head).group(1) 100 | token = data['token'] 101 | self.session.cookies.update({ 102 | 'device_id': str(uuid.uuid4()), 103 | 'zora-news-announcement-1': '2023-11-20T16:42:27Z', 104 | 'wallet_address': self.address_wallet, 105 | 'privy-token': token, 106 | 'privy-refresh-token': privy_refresh_token, 107 | 'privy-access-token': privy_access_token, 108 | 'privy-session': 't' 109 | }) 110 | self.session.headers.update({'Authorization': 'Bearer ' + token}) 111 | logger.success('Signed in') 112 | 113 | @exception_handler('Get email info') 114 | def get_existed_email(self): 115 | self.sign_in() 116 | url = 'https://zora.co/api/account' 117 | data = self.get_call_data_get(url) 118 | if data is False: 119 | return False 120 | if 'account' not in data: 121 | return False 122 | if data['account']['emailVerified'] is False: 123 | return False 124 | return True 125 | 126 | @exception_handler('Setting new email') 127 | def set_email(self, email_info): 128 | email_username = email_info.split(':')[0] 129 | logger.info(f'Setting new email') 130 | url = 'https://privy.zora.co/api/v1/passwordless/init' 131 | json = {'email': email_username} 132 | data = self.get_call_data_post(url, json) 133 | if data['success'] is True: 134 | logger.info('Sent the code by email') 135 | 136 | @exception_handler('Veridy email') 137 | def verify_email(self, email_info): 138 | email_username, email_password = email_info.split(':') 139 | imap = imaplib.IMAP4_SSL(IMAP_SERVER) 140 | imap.login(email_username, email_password) 141 | status, folders = imap.list() 142 | for folder in folders: 143 | folder_name = folder.decode('utf-8').split(' "/" ')[1] 144 | if self.check_folder(email_username, imap, folder_name): 145 | return True 146 | 147 | def check_folder(self, email_username, imap, folder): 148 | messages = imap.select(folder)[1] 149 | msg_cnt = int(messages[0]) 150 | for i in range(msg_cnt, 0, -1): 151 | res, msg = imap.fetch(str(i), '(RFC822)') 152 | raw_email = msg[0][1] 153 | msg = email.message_from_bytes(raw_email) 154 | subject, encoding = decode_header(msg['Subject'])[0] 155 | if isinstance(subject, bytes): 156 | subject = subject.decode(encoding) 157 | 158 | if ' is your login code for Zora' not in subject or len(subject) != 34: 159 | continue 160 | 161 | code = subject.split(' ')[0] 162 | url = 'https://privy.zora.co/api/v1/passwordless/link' 163 | json = { 164 | 'code': code, 165 | 'email': email_username, 166 | } 167 | self.get_call_data_post(url, json) 168 | logger.success('Mail successfully linked\n') 169 | return True 170 | return False 171 | 172 | def link_email(self, mail): 173 | res = self.get_existed_email() 174 | if res is False: 175 | self.set_email(mail) 176 | sleeping(50, 100) 177 | self.verify_email(mail) 178 | -------------------------------------------------------------------------------- /utils/swap.py: -------------------------------------------------------------------------------- 1 | from loguru import logger 2 | from web3 import Web3 3 | from utils.wallet import Wallet 4 | from utils.retry import exception_handler 5 | from utils.func import sleeping 6 | from settings import TOKEN_SWAP, VALUE_SWAP 7 | import json as js 8 | import random 9 | from hexbytes import HexBytes 10 | import time 11 | 12 | 13 | class Uniswap(Wallet): 14 | def __init__(self, private_key, number, proxy): 15 | super().__init__(private_key, 'Zora', number, proxy) 16 | self.token_to_sold = None 17 | self.address = Web3.to_checksum_address('0x2986d9721a49838ab4297b695858af7f17f38014') 18 | 19 | @exception_handler('Buy token on Uniswap') 20 | def buy_token(self): 21 | token_to_buy = random.choice(TOKEN_SWAP) 22 | token_contract = self.web3.eth.contract(address=token_to_buy, abi=self.token_abi) 23 | toke_name = token_contract.functions.name().call() 24 | logger.info(f'Buy {toke_name} token on Uniswap') 25 | 26 | value = round(random.uniform(VALUE_SWAP[0], VALUE_SWAP[1]), VALUE_SWAP[2]) 27 | value_wei = Web3.to_wei(value, 'ether') 28 | 29 | json = { 30 | 'amount': str(value_wei), 31 | 'configs': [{ 32 | 'enableFeeOnTransferFeeFetching': True, 33 | 'enableUniversalRouter': True, 34 | 'protocols': ['V3'], 35 | 'recipient': self.address_wallet, 36 | 'routingType': 'CLASSIC', 37 | }], 38 | 'intent': 'quote', 39 | 'sendPortionEnabled': False, 40 | 'tokenIn': 'ETH', 41 | 'tokenInChainId': 7777777, 42 | 'tokenOut': token_to_buy, 43 | 'tokenOutChainId': 7777777, 44 | 'type': 'EXACT_INPUT', 45 | } 46 | url = 'https://api.swap.zora.energy/quote' 47 | data = self.get_api_call_data_post(url, json) 48 | tx = { 49 | 'chainId': 7777777, 50 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 51 | 'from': self.address_wallet, 52 | 'to': self.address, 53 | 'data': data['quote']['methodParameters']['calldata'], 54 | 'value': value_wei, 55 | **self.get_gas_price() 56 | } 57 | 58 | gas = int(self.web3.eth.estimate_gas(tx) * 1.3) 59 | tx.update({'gas': gas}) 60 | 61 | self.send_transaction_and_wait(tx, f'Swap from {value} ETH to {round(float(data["quote"]["quoteDecimals"]), 4)} {toke_name}') 62 | 63 | self.token_to_sold = token_to_buy 64 | 65 | @exception_handler('Sold token on Uniswap') 66 | def sold_token(self): 67 | self.token_to_sold = '0xa6B280B42CB0b7c4a4F789eC6cCC3a7609A1Bc39' 68 | if self.token_to_sold is None: 69 | return False 70 | token_contract = self.web3.eth.contract(address=self.token_to_sold, abi=self.token_abi) 71 | token_name = token_contract.functions.name().call() 72 | token_decimal = token_contract.functions.decimals().call() 73 | 74 | token_balance = token_contract.functions.balanceOf(self.address_wallet).call() 75 | if token_balance == 0: 76 | logger.error('Token balance - 0\n') 77 | return False 78 | 79 | logger.info(f'Sold {token_name} token on Uniswap') 80 | 81 | allowance = token_contract.functions.allowance(self.address_wallet, self.address).call() 82 | if allowance < token_balance: 83 | logger.info('Need Approve') 84 | self.approve(self.token_to_sold, self.address) 85 | sleeping(50, 70) 86 | 87 | json = { 88 | 'amount': str(token_balance), 89 | 'configs': [{ 90 | 'enableFeeOnTransferFeeFetching': True, 91 | 'enableUniversalRouter': True, 92 | 'protocols': ['V3'], 93 | 'recipient': self.address_wallet, 94 | 'routingType': 'CLASSIC', 95 | }], 96 | 'intent': 'quote', 97 | 'sendPortionEnabled': False, 98 | 'tokenIn': self.token_to_sold, 99 | 'tokenInChainId': 7777777, 100 | 'tokenOut': 'ETH', 101 | 'tokenOutChainId': 7777777, 102 | 'type': 'EXACT_INPUT', 103 | } 104 | url = 'https://api.swap.zora.energy/quote' 105 | data = self.get_api_call_data_post(url, json) 106 | logger.info(data['quote']['methodParameters']['calldata']) 107 | tx = { 108 | 'chainId': 7777777, 109 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 110 | 'from': self.address_wallet, 111 | 'to': self.address, 112 | 'data': data['quote']['methodParameters']['calldata'], 113 | **self.get_gas_price() 114 | } 115 | 116 | gas = int(self.web3.eth.estimate_gas(tx) * 1.3) 117 | tx.update({'gas': gas}) 118 | 119 | # logger.info(f'Swap from {self.from_wei(token_decimal, token_balance)} {token_name} to {round(float(data["quote"]["quoteDecimals"]), 5)} ETH') 120 | 121 | self.send_transaction_and_wait(tx, f'Swap from {self.from_wei(token_decimal, token_balance)} {token_name} to {round(float(data["quote"]["quoteDecimals"]), 5)} ETH') 122 | 123 | 124 | self.token_to_sold = None 125 | -------------------------------------------------------------------------------- /utils/tg_bot.py: -------------------------------------------------------------------------------- 1 | from settings import TG_ID, TG_TOKEN 2 | import requests 3 | import json 4 | 5 | 6 | class TgBot: 7 | 8 | @staticmethod 9 | def send_message(text): 10 | url = f"https://api.telegram.org/bot{TG_TOKEN}/sendMessage" 11 | params = { 12 | 'chat_id': TG_ID, 13 | 'text': text, 14 | 'link_preview_options': json.dumps({'is_disabled': True}), 15 | 'parse_mode': 'HTML' 16 | } 17 | requests.get(url=url, data=params) 18 | 19 | def send_message_success(self, number, text, address, link): 20 | try: 21 | str_send = f'[{number}]\n✅ {text}\nАккаунт: {address}\nTx hash' 22 | 23 | self.send_message(str_send) 24 | except Exception as error: 25 | print(error) 26 | 27 | def send_message_error(self, number, text, address, errorr): 28 | try: 29 | str_send = f'[{number}]\n❌ {text}\nАккаунт: {address}\n{errorr}' 30 | self.send_message(str_send) 31 | except Exception as error: 32 | print(error) 33 | -------------------------------------------------------------------------------- /utils/tunnel_bridge.py: -------------------------------------------------------------------------------- 1 | import random 2 | from loguru import logger 3 | from web3 import Web3 4 | from utils.wallet import Wallet 5 | from settings import VALUE_TUNNEL 6 | from utils.retry import exception_handler 7 | 8 | chain_id = { 9 | 'Zora': 7777777, 10 | 'Arbitrum': 42161, 11 | 'Optimism': 10, 12 | 'Nova': 42170, 13 | 'Base': 8453, 14 | 'zkSync': 324, 15 | 'Linea': 59144, 16 | 'Blast': 81457 17 | } 18 | 19 | 20 | class TunnelBridge(Wallet): 21 | 22 | def __init__(self, private_key, chain_from, chain_to, number, proxy): 23 | super().__init__(private_key, chain_from, number, proxy) 24 | self.chain_to = chain_to 25 | 26 | @exception_handler('Relay bridge') 27 | def bridge(self): 28 | logger.info(f'Relay bridge || {self.chain} -> {self.chain_to}') 29 | value = Web3.to_wei(round(random.uniform(VALUE_TUNNEL[0], VALUE_TUNNEL[1]), VALUE_TUNNEL[2]), 'ether') 30 | balance = self.get_native_balance() 31 | 32 | json = { 33 | 'originChainId': chain_id[self.chain], 34 | 'destinationChainId': chain_id[self.chain_to], 35 | 'user': self.address_wallet, 36 | 'txs': [{ 37 | 'data': '0x', 38 | 'to': self.address_wallet, 39 | 'value': str(value) 40 | }] 41 | } 42 | 43 | data = self.get_api_call_data_post('https://api.relay.link/execute/call', json) 44 | 45 | value = int(data['steps'][0]['items'][0]['data']['value']) 46 | 47 | if balance < value: 48 | value = (balance * 0.7) 49 | 50 | if value <= 0: 51 | logger.error(f'Value bridge ETH - {value}\n') 52 | return 53 | 54 | dick = { 55 | 'chainId': self.web3.eth.chain_id, 56 | 'from': self.address_wallet, 57 | 'data': data['steps'][0]['items'][0]['data']['data'], 58 | 'to': Web3.to_checksum_address(data['steps'][0]['items'][0]['data']['to']), 59 | 'value': value, 60 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 61 | **self.get_gas_price() 62 | } 63 | 64 | gas = int(self.web3.eth.estimate_gas(dick) * 1.3) 65 | dick.update({'gas': gas}) 66 | 67 | self.send_transaction_and_wait(dick, f'Relay bridge {round(Web3.from_wei(value, "ether"), 5)} ETH || {self.chain} -> {self.chain_to}') 68 | 69 | -------------------------------------------------------------------------------- /utils/walet_stats.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | import requests 3 | import pandas as pd 4 | from utils.retry import exception_handler 5 | from web3 import Web3 6 | from utils.func import crypto_prices 7 | 8 | ETH_PRICE = crypto_prices['ethereum'] 9 | 10 | 11 | class ZoraScan(Wallet): 12 | def __init__(self, private_key, number, proxy): 13 | super().__init__(private_key, 'Zora', number, proxy) 14 | 15 | @exception_handler('Wallet stats') 16 | def get_nft_data(self): 17 | 18 | with requests.Session() as sess: 19 | if self.proxy is not None: 20 | proxy_dick = {'https': 'http://' + self.proxy, 'http': 'http://' + self.proxy} 21 | sess.proxies = proxy_dick 22 | resp = sess.get(f'https://explorer.zora.energy/api/v2/addresses/{self.address_wallet}/tokens') 23 | data = resp.json() 24 | wallet_info = { 25 | 'Wallet Address': self.address_wallet, 26 | 'Balance ETH': round(Web3.from_wei(self.get_native_balance(), 'ether'), 5), 27 | 'Balance ETH in USD': round(float(round(Web3.from_wei(self.get_native_balance(), 'ether'), 5)) * ETH_PRICE, 3), 28 | 'Tx Count': self.web3.eth.get_transaction_count(self.address_wallet), 29 | 'Total NFT' : 0, 30 | 'ERC 721' : 0, 31 | 'ERC 1155' : 0, 32 | 'Name NFT ERC 721' : [], 33 | 'Quantity NFT ERC 721' : [], 34 | 'Name NFT ERC 1155' : [], 35 | 'Quantity NFT ERC 1155': [], 36 | } 37 | 38 | for item in data['items']: 39 | token_type = item['token']['type'] 40 | if token_type == 'ERC-721': 41 | wallet_info['ERC 721'] += int(item['value']) 42 | wallet_info['Name NFT ERC 721'].append(item['token']['name']) 43 | wallet_info['Quantity NFT ERC 721'].append(int(item['value'])) 44 | elif token_type == 'ERC-1155': 45 | wallet_info['ERC 1155'] += int(item['value']) 46 | wallet_info['Name NFT ERC 1155'].append(item['token']['name']) 47 | wallet_info['Quantity NFT ERC 1155'].append(int(item['value'])) 48 | 49 | wallet_info['Total NFT'] = wallet_info['ERC 721'] + wallet_info['ERC 1155'] 50 | return wallet_info 51 | 52 | @staticmethod 53 | def save_to_exel(wallet_info_list): 54 | for wallet in wallet_info_list: 55 | for key in ['Name NFT ERC 721', 'Quantity NFT ERC 721', 'Name NFT ERC 1155', 'Quantity NFT ERC 1155']: 56 | wallet[key] = '\n'.join(map(str, wallet[key])) 57 | 58 | df1 = pd.DataFrame(wallet_info_list) 59 | df1.to_excel("./data/result.xlsx", index=False) 60 | -------------------------------------------------------------------------------- /utils/wallet.py: -------------------------------------------------------------------------------- 1 | import random 2 | from web3 import Web3 3 | import time 4 | from settings import CHAIN_RPC 5 | from web3.middleware import geth_poa_middleware 6 | from requests.adapters import Retry 7 | from utils.retry_wallet import exception_handler_wallet 8 | import requests 9 | from loguru import logger 10 | from settings import ZORA_GASPRICE_PRESCALE, TG_BOT_SEND, BLAST_GASPRICE_PRESCALE 11 | from utils.tg_bot import TgBot 12 | import json as js 13 | 14 | SCAN = { 15 | 'Ethereum': 'https://etherscan.io/tx/', 16 | 'Arbitrum': 'https://arbiscan.io/tx/', 17 | 'Optimism': 'https://optimistic.etherscan.io/tx/', 18 | 'Polygon': 'https://polygonscan.com/tx/', 19 | 'Base': 'https://basescan.org/tx/', 20 | 'Zora': 'https://explorer.zora.energy/tx/', 21 | 'Nova': 'https://nova.arbiscan.io/tx/', 22 | 'zkSync': 'https://era.zksync.network/tx/', 23 | 'Linea': 'https://lineascan.build/tx/', 24 | 'Blast': 'https://blastscan.io/tx/' 25 | } 26 | 27 | 28 | class Wallet(TgBot): 29 | 30 | def __init__(self, private_key, chain, number, proxy): 31 | self.private_key = private_key 32 | self.chain = chain 33 | self.number = number 34 | self.proxy = proxy 35 | self.web3 = self.get_web3(chain) 36 | self.scan = self.get_scan(chain) 37 | self.account = self.web3.eth.account.from_key(private_key) 38 | self.address_wallet = self.account.address 39 | self.token_abi = js.load(open('./abi/token.txt')) 40 | 41 | def get_web3(self, chain): 42 | retries = Retry(total=10, backoff_factor=1, status_forcelist=[500, 502, 503, 504]) 43 | adapter = requests.adapters.HTTPAdapter(max_retries=retries) 44 | session = requests.Session() 45 | session.mount('http://', adapter) 46 | session.mount('https://', adapter) 47 | if self.proxy is not None: 48 | proxy_dick = {'https': 'http://' + self.proxy, 'http': 'http://' + self.proxy} 49 | session.proxies = proxy_dick 50 | return Web3(Web3.HTTPProvider(CHAIN_RPC[chain], request_kwargs={'timeout': 60}, session=session)) 51 | 52 | @staticmethod 53 | def get_web3_refuel(chain): 54 | retries = Retry(total=10, backoff_factor=1, status_forcelist=[500, 502, 503, 504]) 55 | adapter = requests.adapters.HTTPAdapter(max_retries=retries) 56 | session = requests.Session() 57 | session.mount('http://', adapter) 58 | session.mount('https://', adapter) 59 | return Web3(Web3.HTTPProvider(CHAIN_RPC[chain], request_kwargs={'timeout': 60}, session=session)) 60 | 61 | @staticmethod 62 | def get_scan(chain): 63 | return SCAN[chain] 64 | 65 | @staticmethod 66 | def to_wei(decimal, amount): 67 | if decimal == 6: 68 | unit = 'picoether' 69 | else: 70 | unit = 'ether' 71 | 72 | return Web3.to_wei(amount, unit) 73 | 74 | @staticmethod 75 | def from_wei(decimal, amount): 76 | if decimal == 6: 77 | unit = 'picoether' 78 | elif decimal == 8: 79 | return float(amount / 10 ** 8) 80 | else: 81 | unit = 'ether' 82 | 83 | return Web3.from_wei(amount, unit) 84 | 85 | def send_transaction_and_wait(self, tx, message): 86 | signed_txn = self.web3.eth.account.sign_transaction(tx, private_key=self.private_key) 87 | tx_hash = self.web3.eth.send_raw_transaction(signed_txn.rawTransaction) 88 | logger.info('Sent a transaction') 89 | time.sleep(5) 90 | tx_receipt = self.web3.eth.wait_for_transaction_receipt(tx_hash, timeout=900, poll_latency=5) 91 | if tx_receipt.status == 1: 92 | logger.success('The transaction was successfully mined') 93 | else: 94 | logger.error("Transaction failed, I'm trying again") 95 | if TG_BOT_SEND is True: 96 | TgBot.send_message_error(self, self.number, message, self.address_wallet, "Transaction failed, I'm trying again") 97 | raise ValueError('') 98 | 99 | if TG_BOT_SEND is True: 100 | TgBot.send_message_success(self, self.number, message, self.address_wallet, f'{self.scan}{tx_hash.hex()}') 101 | 102 | logger.success(f'[{self.number}] {message} || {self.scan}{tx_hash.hex()}\n') 103 | return tx_hash 104 | 105 | def get_native_balance(self): 106 | return self.web3.eth.get_balance(self.address_wallet) 107 | 108 | def get_gas_price(self): 109 | if self.chain in ["Polygon", "Avax", 'Zora']: 110 | try: 111 | self.web3.middleware_onion.inject(geth_poa_middleware, layer=0) 112 | except: 113 | pass 114 | 115 | if self.chain == 'Zora': 116 | return {'maxFeePerGas': Web3.to_wei(ZORA_GASPRICE_PRESCALE, 'gwei'), 'maxPriorityFeePerGas': Web3.to_wei(ZORA_GASPRICE_PRESCALE, 'gwei')} 117 | elif self.chain == 'Blast': 118 | return {'maxFeePerGas': Web3.to_wei(BLAST_GASPRICE_PRESCALE, 'gwei'), 'maxPriorityFeePerGas': Web3.to_wei(BLAST_GASPRICE_PRESCALE, 'gwei')} 119 | 120 | return {'maxFeePerGas': self.web3.eth.gas_price, 'maxPriorityFeePerGas': int(self.web3.eth.gas_price * 0.1)} 121 | 122 | @staticmethod 123 | def get_api_call_data_post(url, json): 124 | 125 | with requests.Session() as s: 126 | call_data = s.post(url, json=json, timeout=60) 127 | if call_data.status_code < 400: 128 | api_data = call_data.json() 129 | return api_data 130 | else: 131 | logger.error("Couldn't get a response") 132 | raise ValueError('') 133 | 134 | @exception_handler_wallet 135 | def transfer_native(self, address, value=None): 136 | 137 | balance = self.get_native_balance() 138 | if balance - Web3.to_wei(0.00005, 'ether') <= 0: 139 | logger.error(f'Balance ETH < 0.00005\n') 140 | return 141 | 142 | if value is None: 143 | max_value = balance - Web3.to_wei(0.00005, 'ether') 144 | min_value = int(balance / 100) 145 | value = round(Web3.from_wei(random.randint(min_value, max_value), 'ether'), 6) 146 | 147 | amount = Web3.to_wei(value, 'ether') 148 | 149 | dick = { 150 | 'chainId': self.web3.eth.chain_id, 151 | 'from': self.address_wallet, 152 | 'to': Web3.to_checksum_address(address), 153 | 'value': amount, 154 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 155 | 'gas': 21_000, 156 | **self.get_gas_price() 157 | } 158 | 159 | self.send_transaction_and_wait(dick, f'Transfer {Web3.from_wei(amount, "ether")} ETH to {address}') 160 | 161 | def approve(self, token_to_approve, address_to_approve): 162 | 163 | token_contract = self.web3.eth.contract(address=Web3.to_checksum_address(token_to_approve), abi=self.token_abi) 164 | max_amount = 2 ** 256 - 1 165 | dick = { 166 | 'from': self.address_wallet, 167 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 168 | **self.get_gas_price() 169 | } 170 | txn = token_contract.functions.approve(address_to_approve, max_amount).build_transaction(dick) 171 | 172 | self.send_transaction_and_wait(txn, 'approve') 173 | -------------------------------------------------------------------------------- /utils/wrap.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | from loguru import logger 3 | import json as js 4 | from web3 import Web3 5 | import random 6 | from settings import PRESCALE 7 | from utils.retry import exception_handler 8 | 9 | 10 | class WrapETH(Wallet): 11 | def __init__(self, private_key, chain, number, proxy): 12 | super().__init__(private_key, chain, number, proxy) 13 | self.address = Web3.to_checksum_address('0x4200000000000000000000000000000000000006') 14 | self.abi = js.load(open('./abi/wrap.txt')) 15 | self.contract = self.web3.eth.contract(address=self.address, abi=self.abi) 16 | 17 | @exception_handler 18 | def wrap(self): 19 | logger.info('Wrap ETH') 20 | balance = self.web3.eth.get_balance(self.address_wallet) 21 | if balance < Web3.to_wei(0.00001, 'ether'): 22 | logger.info('Insufficient funds') 23 | return 'balance' 24 | prescale = round(random.uniform(PRESCALE[0], PRESCALE[1]), PRESCALE[2]) 25 | value = int(balance * prescale) 26 | 27 | dick = { 28 | "from": self.address_wallet, 29 | "nonce": self.web3.eth.get_transaction_count(self.address_wallet), 30 | "value": value, 31 | **self.get_gas_price() 32 | 33 | } 34 | 35 | contract_txn = self.contract.functions.deposit().build_transaction(dick) 36 | 37 | self.send_transaction_and_wait(contract_txn, f'Wrap {round(Web3.from_wei(value, "ether"), 6)} ETH') 38 | 39 | @exception_handler 40 | def unwrap(self): 41 | logger.info('Unwrap ETH') 42 | token_balance = self.contract.functions.balanceOf(self.address_wallet).call() 43 | if token_balance == 0: 44 | return logger.error('Balance WETH - 0\n') 45 | 46 | dick = { 47 | "from": self.address_wallet, 48 | "nonce": self.web3.eth.get_transaction_count(self.address_wallet), 49 | **self.get_gas_price() 50 | 51 | } 52 | 53 | contract_txn = self.contract.functions.withdraw(token_balance).build_transaction(dick) 54 | 55 | self.send_transaction_and_wait(contract_txn, f'Unwrap {round(Web3.from_wei(token_balance, "ether"), 6)} ETH') 56 | -------------------------------------------------------------------------------- /utils/zerius.py: -------------------------------------------------------------------------------- 1 | from utils.wallet import Wallet 2 | from loguru import logger 3 | import json as js 4 | from web3 import Web3 5 | from eth_abi.packed import encode_packed 6 | import random 7 | from settings import VALUE_ZERIUS 8 | from utils.retry import exception_handler 9 | 10 | 11 | REFUEL_CONTRACTS = { 12 | 'Optimism' : Web3.to_checksum_address('0x2076BDd52Af431ba0E5411b3dd9B5eeDa31BB9Eb'), 13 | 'Arbitrum' : Web3.to_checksum_address('0x412aea168aDd34361aFEf6a2e3FC01928Fba1248'), 14 | 'Polygon' : Web3.to_checksum_address('0x2ef766b59e4603250265EcC468cF38a6a00b84b3'), 15 | 'Base' : Web3.to_checksum_address('0x9415AD63EdF2e0de7D8B9D8FeE4b939dd1e52F2C'), 16 | 'Zora' : Web3.to_checksum_address('0x1fe2c567169d39CCc5299727FfAC96362b2Ab90E') 17 | } 18 | 19 | contracts = { 20 | 'Optimism': Web3.to_checksum_address('0x178608fFe2Cca5d36f3Fc6e69426c4D3A5A74A41'), 21 | 'Polygon': Web3.to_checksum_address('0x178608fFe2Cca5d36f3Fc6e69426c4D3A5A74A41'), 22 | 'Arbitrum': Web3.to_checksum_address('0x250c34D06857b9C0A036d44F86d2c1Abe514B3Da'), 23 | 'Base': Web3.to_checksum_address('0x178608fFe2Cca5d36f3Fc6e69426c4D3A5A74A41'), 24 | 'Zora': Web3.to_checksum_address('0x178608fFe2Cca5d36f3Fc6e69426c4D3A5A74A41') 25 | } 26 | 27 | lz_id_chain = { 28 | 'Arbitrum': 110, 29 | 'Optimism': 111, 30 | 'Polygon': 109, 31 | 'Base': 184, 32 | 'Zora': 195 33 | } 34 | 35 | 36 | class Zerius(Wallet): 37 | 38 | def __init__(self, private_key, chain_from, chain_to, number, proxy): 39 | super().__init__(private_key, chain_from, number, proxy) 40 | self.abi_refuel = js.load(open('./abi/refuel_zerius.txt')) 41 | self.contract_refuel = self.web3.eth.contract(address=REFUEL_CONTRACTS[self.chain], abi=self.abi_refuel) 42 | 43 | self.abi_bridge = js.load(open('./abi/bridge_zerius.txt')) 44 | self.contract_bridge = self.web3.eth.contract(address=contracts[self.chain], abi=self.abi_bridge) 45 | 46 | self.chain_to = chain_to 47 | 48 | def get_nft_id(self): 49 | count = self.contract_bridge.functions.balanceOf(self.address_wallet).call() 50 | if count == 0: 51 | return 0 52 | tokens_arr = [self.contract_bridge.functions.tokenOfOwnerByIndex(self.address_wallet, i).call() for i in range(count)] 53 | return random.choice(tokens_arr) 54 | 55 | @exception_handler('Mint NFT on Zerius') 56 | def mint_nft(self): 57 | 58 | logger.info(f'Mint NFT {self.chain} on Zerius') 59 | 60 | contract_bridge = self.web3.eth.contract(address=contracts[self.chain], abi=self.abi_bridge) 61 | 62 | value = contract_bridge.functions.mintFee().call() 63 | dick = { 64 | 'from': self.address_wallet, 65 | 'value': value, 66 | 'nonce': self.web3.eth.get_transaction_count(self.address_wallet), 67 | **self.get_gas_price() 68 | } 69 | txn = contract_bridge.functions.mint(Web3.to_checksum_address('0xCC05E5454D8eC8F0873ECD6b2E3da945B39acA6C')).build_transaction(dick) 70 | 71 | self.send_transaction_and_wait(txn, f'Mint NFT {self.chain} on Zerius') 72 | 73 | @exception_handler('Bridge NFT on Zerius') 74 | def bridge_nft(self, token_id): 75 | logger.info(f'Bridge {token_id} NFT || {self.chain} -> {self.chain_to}') 76 | 77 | min_dst_gas = self.contract_bridge.functions.minDstGasLookup(lz_id_chain[self.chain_to], 1).call() 78 | 79 | if min_dst_gas == 0: 80 | logger.error(f'You cannot bridge on the {self.chain_to} network') 81 | raise ValueError 82 | 83 | adapter_params = encode_packed( 84 | ["uint16", "uint256"], 85 | [1, min_dst_gas] 86 | ) 87 | 88 | native_fee, _ = self.contract_bridge.functions.estimateSendFee( 89 | lz_id_chain[self.chain_to], 90 | self.address_wallet, 91 | token_id, 92 | False, 93 | adapter_params 94 | ).call() 95 | 96 | contract_txn = self.contract_bridge.functions.sendFrom( 97 | self.address_wallet, 98 | lz_id_chain[self.chain_to], 99 | self.address_wallet, 100 | token_id, 101 | self.address_wallet, 102 | '0x0000000000000000000000000000000000000000', 103 | adapter_params 104 | ).build_transaction( 105 | { 106 | "from": self.address_wallet, 107 | "value": native_fee, 108 | "nonce": self.web3.eth.get_transaction_count(self.address_wallet), 109 | ** self.get_gas_price() 110 | } 111 | ) 112 | 113 | self.send_transaction_and_wait(contract_txn, f'Bridge {token_id} NFT || {self.chain} -> {self.chain_to}') 114 | 115 | @exception_handler('Zerius refuel') 116 | def refuel(self): 117 | logger.info(f'Zerius refuel from {self.chain} to {self.chain_to}') 118 | 119 | amount = Web3.to_wei(round(random.uniform(VALUE_ZERIUS[0], VALUE_ZERIUS[1]), VALUE_ZERIUS[2]), 'ether') 120 | 121 | min_dst_gas = self.contract_refuel.functions.minDstGasLookup(lz_id_chain[self.chain_to], 0).call() 122 | 123 | if REFUEL_CONTRACTS[self.chain_to] is None: 124 | logger.error(f'You cannot get refuel on the {self.chain_to} network') 125 | raise ValueError 126 | 127 | if min_dst_gas == 0: 128 | logger.error(f'You cannot get gas on the {self.chain_to} network') 129 | raise ValueError 130 | 131 | adapter_params = encode_packed( 132 | ["uint16", "uint256", "uint256", "address"], 133 | [2, min_dst_gas, amount, self.address_wallet] 134 | ) 135 | 136 | dst_contract_address = encode_packed(["address"], [REFUEL_CONTRACTS[self.chain_to]]) 137 | send_value = self.contract_refuel.functions.estimateSendFee(lz_id_chain[self.chain_to], dst_contract_address, adapter_params).call() 138 | 139 | contract_txn = self.contract_refuel.functions.refuel( 140 | lz_id_chain[self.chain_to], 141 | dst_contract_address, 142 | adapter_params 143 | ).build_transaction( 144 | { 145 | "from": self.address_wallet, 146 | "value": send_value[0], 147 | "nonce": self.web3.eth.get_transaction_count(self.address_wallet), 148 | ** self.get_gas_price() 149 | } 150 | ) 151 | 152 | self.send_transaction_and_wait(contract_txn, f'Zerius refuel from {self.chain} to {self.chain_to}') -------------------------------------------------------------------------------- /word.txt: -------------------------------------------------------------------------------- 1 | ENJOY 2 | IMAGINE 3 | LFG 4 | WOW 5 | WARPCAST 6 | DOGE 7 | REAL??? 8 | FAKE??? 9 | Joy 10 | Delight 11 | Bliss 12 | Ecstasy 13 | Elation 14 | Rapture 15 | Jubilation 16 | Exhilaration 17 | Euphoria 18 | Excitement 19 | Excitement 20 | Thrill 21 | Elation 22 | Anticipation 23 | Eagerness 24 | Enthusiasm 25 | Fascination 26 | Curiosity 27 | Wonder 28 | Intrigue 29 | Hope 30 | Optimism 31 | Joy 32 | Happiness 33 | Contentment 34 | Satisfaction 35 | Pride 36 | Fulfillment 37 | Amazement 38 | Awe 39 | Surprise 40 | Astonishment 41 | Disbelief 42 | Shock 43 | Confusion 44 | Uncertainty 45 | Anxiety 46 | Nervousness 47 | Worry 48 | Fear 49 | Dread 50 | Panic 51 | Frustration 52 | Disappointment 53 | Regret 54 | Sadness 55 | Grief 56 | Despair 57 | Anguish 58 | Depression 59 | Resentment 60 | Bitterness 61 | Anger 62 | Rage 63 | Hostility 64 | Jealousy 65 | Envy 66 | Resignation 67 | Acceptance 68 | Indifference 69 | Apathy 70 | Boredom 71 | Weariness 72 | Exhaustion 73 | Relief 74 | Gratitude 75 | Thankfulness 76 | Appreciation 77 | Reverence 78 | Serenity 79 | Tranquility 80 | Peacefulness 81 | Calmness 82 | Comfort 83 | Reassurance 84 | Trust 85 | Faith 86 | Belief 87 | Conviction 88 | Assurance 89 | Certainty 90 | Clarity 91 | Understanding 92 | Insight 93 | Wisdom 94 | Knowledge 95 | Intelligence 96 | Awareness 97 | Consciousness 98 | Perception 99 | Perspective 100 | Discernment 101 | Judgment 102 | Decision 103 | Choice 104 | Determination 105 | Persistence 106 | Dedication 107 | Commitment 108 | Devotion 109 | Passion 110 | Zeal 111 | Motivation 112 | Inspiration 113 | Creativity 114 | Innovation 115 | Ingenuity 116 | Imagination 117 | Ambition 118 | Aspiration 119 | Thrill 120 | Thrilling 121 | Exciting 122 | Exhilarating 123 | Fascinating 124 | Captivating 125 | Enthralling 126 | Electrifying 127 | Enchanting 128 | Mesmerizing 129 | Riveting 130 | Amazing 131 | Astonishing 132 | Breathtaking 133 | Spectacular 134 | Incredible 135 | Phenomenal 136 | Marvelous 137 | Wonderful 138 | Fantastic 139 | Stupendous 140 | Mind-blowing 141 | Unbelievable 142 | Jaw-dropping 143 | Awe-inspiring 144 | Exquisite 145 | Awesome 146 | Brilliant 147 | Magnificent 148 | Splendid 149 | Sublime 150 | Dazzling 151 | Extraordinary 152 | Striking 153 | Outstanding 154 | Impressive 155 | Phenomenal 156 | Exceptional 157 | Phenomenal 158 | Glorious 159 | Grand 160 | Majestic 161 | Noble 162 | Supreme 163 | Heavenly 164 | Divine 165 | Celestial 166 | Resplendent 167 | Radiant 168 | Glowing 169 | Shining 170 | Sparkling 171 | Luminous 172 | Gleaming 173 | Glistening 174 | Twinkling 175 | Glittering 176 | Shimmering 177 | Effulgent 178 | Beaming 179 | Vibrant 180 | Exultant 181 | Joyful 182 | Ecstatic 183 | Euphoric 184 | Overjoyed 185 | Elated 186 | Exuberant 187 | Jubilant 188 | Rapturous 189 | Blissful 190 | Radiant 191 | Sunny 192 | Buoyant 193 | Upbeat 194 | Cheerful 195 | Optimistic 196 | Hopeful 197 | Spirited 198 | Enthusiastic 199 | Zealous 200 | Ardent 201 | Passionate 202 | Excited 203 | Anticipatory 204 | Thrilled 205 | Delighted 206 | Grateful 207 | Thankful 208 | Appreciative 209 | Content 210 | Satisfied 211 | Fulfilled 212 | Gratified 213 | Pleased 214 | Happy 215 | Joyous 216 | Cheery 217 | Jolly 218 | Exhilarated 219 | Enlivened 220 | Enchantment 221 | Exuberance 222 | Happiness 223 | Gleeful 224 | Overjoyed 225 | Thrilled 226 | Elated 227 | Enthralled 228 | Astonishment 229 | Marvel 230 | Wonder 231 | Amazement 232 | Awe 233 | Wow 234 | Stunned 235 | Astounded 236 | Fascination 237 | Admiration 238 | Appreciation 239 | Glowing 240 | Gratitude 241 | Thankfulness 242 | Marvelous 243 | Fantastic 244 | Amazing 245 | Phenomenal 246 | Wonderful 247 | Spectacular 248 | Magnificent 249 | Splendid 250 | Superb 251 | Sublime 252 | Breathtaking 253 | Majestic 254 | Wondrous 255 | Incredible 256 | Astounding 257 | Stupendous 258 | Unbelievable 259 | Remarkable 260 | Outstanding 261 | Extraordinary 262 | Impressive 263 | Awe-inspiring 264 | Sensational 265 | Enthralling 266 | Captivating 267 | Spellbinding 268 | Mesmerizing 269 | Electrifying 270 | Riveting 271 | Thrilling 272 | Exciting 273 | Exhilarating 274 | Uplifting 275 | Inspiring 276 | Heartwarming 277 | Stirring 278 | Moving 279 | Enriching 280 | Touching 281 | Gladdening 282 | Invigorating 283 | Energizing 284 | Exultant 285 | Radiant 286 | Beaming 287 | Sunny 288 | Buoyant 289 | Upbeat 290 | Lively 291 | Spirited 292 | Vivacious 293 | Zestful 294 | Bubbly 295 | Effervescent 296 | Sparkling 297 | Infectious 298 | Delirious 299 | Chirpy 300 | Chipper 301 | Jaunty 302 | Lighthearted 303 | Carefree 304 | Jovial 305 | Blithe 306 | Gay 307 | Cheerful 308 | Merry 309 | JUST PUMP IT! 310 | SUPERNATURAL 311 | Ethereum 312 | LFG 313 | ignite !!! 314 | Farkaster 315 | POLICE 316 | ZORA 317 | --------------------------------------------------------------------------------