├── 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 | [](https://t.me/developercode1)
2 | [](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 |
--------------------------------------------------------------------------------