Данная статья больше подойдет тем, кто занимается кодингом на Python для своих потребностей в Web3 пространстве. Тут я подробно опишу репозиторий на Github, и расскажу чем он тебе пригодится.
https://github.com/Nomzegh/web3py-cheatsheet
При многократном написании скриптов, вы наверное сталкивались с тем, что практически всегда вы пишете довольно похожий код на свои предыдущие. Согласен, в каждом проекте контракты и их функции обычно разные, но часть вашей работы над скриптом всегда будет повторяться.
Проще говоря, вы создаете большой неповторяемый код (абуз проекта
N) из маленьких повторяемых фич (трансферы, аппрувы, чекер балансов, поддержка мультиакков, личный дисперс, прокси, …).
Вот как раз для маленьких повторяемых фич и был создан этот репозиторий.

./payable-utilities: обычный трансфер, отмена транзакции, дисперс нативного токена, трансфер фулл баланса с приватников, транзакция типа eip1559, функции юнисвапа.
./nonpayable-utilities: декодинг транзакции, высчитывание всех газовых значений, генератор кастомных адресов, мониторинг пендинг транзакций, подпись сообщения.
./wallets: использование N к-ва приватных ключей с файла, генератор приватников в файл.
Теперь мы отдельно рассмотрим каждый файл и узнаем где он может пригодиться.
cancel_transaction.py - отмена зависшей предыдущей транзакции. Возвращает хеш транзакции.
С помощью этого кода можно отменить pending транзакцию. Зачастую, транзакция “зависает“ в блокчейне из-за слишком малого
gasPrice. По сути, код делает обычный пустой трансфер сtx[“value”]: 0самому себе, поставив тот жеnonce(порядок транзакции), что и у зависшей транзакции, но сgasPriceуже повыше.Зачем: был поставлен слишком малый gasPrice, и отправка следующих транзакций - невозможна.
native_transfer.py - пересыл нативного токена.
Возвращает хеш транзакции. Самый обычный трансфер нативного токена от адреса
Aк адресуB. Тут ничего особенного.Зачем: это самый базовый трансфер, который пригодится нам везде.
disperse_native.py - пересыл нативного токена на адреса с
disperse_addresses.txt. Возвращает хеши каждой транзакции.
Использует обычный трансфер нативного токена от одного адреса к нескольким. Для работы нужно создатьdisperse_addresses.txtи поместить туда все адреса на которые нужно разделить токены. Наотмену отnative_transfer.py, этот код не ожидает результата транзакции, поэтому заранее отправит все транзакции с nonce повыше. К сожалению, этот способ дисперса довольно топорный, и для абузов лучше подойдет вывод с биржи, но он будет дороже.Зачем: нам нужно вывести деньги на мультиакки для дальнейших транзакций.
transfer_all_native.py - пересыл полного баланса нативного токена всех приватных ключей из
private_keys.txtна один адрес.
Для работы нужно создатьprivate_keys.txtи поместить туда приватные ключи, с которых мы хотим снять фулл баланс. Довольно часто может пригодится в случаях, когда после какого-то абуза остается много приватников с мелким балансом, а выводить вручную супер затратно по времени. (Вот останется на 100 адресах по $0.1-$1 в каком-то BNB, а если вывести полный баланс, то уже +$10-$100, что довольно приятно.)Зачем: остался баланс на “заброшенных” приватниках после очередного абуза
eip1559_example.py - пример трансфер-транзакции типа eip-1559.
Чем она отличается от транзакции типа Legacy? В Legacy мы устанавливаем комиссию через параметрgasPrice, и чем выше это значение - тем больше шанс что наша транзакция попадет в блок.В EIP-1559 у нас немного другие параметры:base fee(базовая комса которая сжигается)miner tip- “чаевые, взятка” для майнера. В коде мы вписываем два новых параметра вместоgasPrice:maxPriorityFeePerGas(вызываем черезweb.eth.max_priority_fee) иmaxFeePerGas=base_fee+max_priority_fee. Этот тип транзакции пока самый актуальный, так что лучше использовать его вместо Legacy.Зачем: большинство DAPP использует именно этот тип транзакций, так что в абузах лучше использовать его, но Legacy транзы никто не отменял.
uniswap_functions.py - **пример нескольких функций на всем известном Uniswap.
**
Для начала нужно установить библиотеку Uniswap через команду:pip install uniswap-pythonВ файле есть 4 функции - две для того чтобы узнать точные ценовые значения, и две для свапов. Очень удобная библиотека для свапов где нужно минимум кода для работы.
Зачем: мы можем интегрировать свапы/парсинг цен в код, если нужно иметь дело с DEX обменниками.
estimate_gas_values.py - пример как высчитывать следующие параметры:
gas,gasPrice,baseFee,maxFeePerGas,maxPriorityFeePerGas
Тут ничего сложного, просто функции которые возвращают каждое значение для Legacy и EIP-1559 транзакций. Так же, есть функция для вычисления всегда правильных значенийtx[“gas”], чтобы никогда не столкнуться с ошибкойOut of gas.Зачем: без этих значений мы просто не сможем отправить ни одну транзакцию
vanity_generator.py - генератор адресов с кастомным префиксом.
Вот хотите вы себе крутой пацанский префикс адреса чтобы вас друзья уважали? Это не проблема.
Дед инсайд?0xdead
Элитный криптоюзер?0x1337
Любитель кофе?0xс0ffee
Роняешь запад?0xFACE
…?0xda7baeb
Или же вы просто хотите блатные номера с 77777 в начале?0x77777
Все это можно сгенерировать с помощью этого кода, который еще и может работать черезmultiprocessing. Но имейте в виду, что чем длиннее кастом префикс вы хотите - тем дольше вы будете его генерировать. Так же, контроллируйте нагрузку процессора к-вом процессов. Доступные буквы A-F и цифры 0-9Зачем: пользы в этом мало, но генерируем, если хотим слегка кастомный адрес.
sign_message.py - генератор подписи с помощью приватного ключа.
Очень часто бывает, что для логина на сайт проекта, мы подписываем сообщение, и при этом не платим за газ. Так вот, это оно и есть. В большинстве случаев, мы вызываем уникальное сообщение черезrequests, подписываем его, и полученную сигнатуру вставляем уже в другой запрос.Зачем: многие проекты используют логин через подпись текстового сообщения. Сигнатуру мы отправляем на их API и получаем access_token для различных действий.
web3_with_proxy.py - маленький пример использования прокси с web3py.
Имея прокси в форматеhttp://login:password@ip:port, мы можем создать некий слой соединения с помощьюrequests.sessionи начать делать наши транзакции. Можно сразу на месте проверить и работоспособность прокси, и подключились ли вы к web3.Зачем: мы можем использовать такой метод подключения прокси к веб3, если хотим работать с мультиакками.
decode_transaction.py - расшифровка
txDataлюбой транзакции.
Практически всегда критически важно знать что именно нужно вписывать в параметры функции контрактаN.
Ключевым элементом расшифровкиtxDataи отправки нормальных транзакций, являетсяABI(интерфейс) целого контракта или одной функции.
Как же действовать в следующих ситуациях?
Контракт проекта полностью верифицирован на скане.
В таком случае код не понадобится - вы просто смотрите введенные параметры транзакции сразу на скане, и используем ABI в нужных целях.
Контракт проекта не верифицирован на скане.
Тут не стоит расстраиваться, у вас еще есть шанс расшифровать свою транзакцию. Первым делом вбиваем в гугле первые символы (метод айди функции) нашейtxData- к примеру0xf340fa01. (Так же есть хороший инструмент - openchain.xyz)
Если в поиске видны результаты с этой функцией, но на сканах других чейнов - просто заходим и копируемABIэтого контракта. Теперь вы можете коллить эту функцию в будущем, либо расшифровать свою транзакцию с помощьюdecode_transaction.pyили через openchain.xyz.
Контракт не верифицирован на скане, а хеш метод не гуглится.
Вот тут уже можно грустить, так как теперь шанс найтиABIочень мал. Пробуем найти документацию или репозиторий проекта наGithub, и в поиске вбиваем ключевые слова по типуcontracts,ABIили банально адрес контракта.
Если после всех шагов вы не смогли найтиABI, тогда можете попробовать изменитьtxDataвручную, но тут уже надо быть осторожным, так как даже один лишний/неправильный символ зафейлит вашу транзакцию. Для ручного редактированияtxDataлучше воспользоватьсяChatGPT 4.Зачем: имея ABI, нам важно знать что вписывалось в транзакцию в tx[“data”].
pending_tx_monitoring.py - мониторинг
pendingтранзакций.
Бывают редкие случаи, когда нам нужно в какой-то определенный момент отправить транзакцию. Возьмем в пример прошлогодний проект - Friendtech. Суть была в том, чтобы как можно быстрее купить акцию популярного инфла.
Зная адрес этого инфла, мы могли чекать пендинг транзакции, и как только мы увидели транзу с определеннойtxDataот этого адреса - мы сразу же запускаем свою транзакцию на покупку.
Так же, довольно часто мониторинг мемпула/пендинг транзакций используются в NFT и других сейлах. И для самой лучшей эффективности нам нужно поставить свою ноду на сервер, так как публичныеRPCдовольно слабые и там легко поймать рейт лимит.Зачем: используется если важен момент и скорость отправки транзакции
multiple_keys_usage.py - небольшой пример использования нескольких приватных ключей с/без прокси.
Для работы мы должны создать файлыprivate_keys.txtиproxies.txt(формат прокси следующий: login:password@ip:port). В случае, если вы хотите быстро спамить транзакциями с кучи кошельков - хорошим решением будет прикрутитьasyncio, но об этом в другой раз.Зачем: нам нужно знать как использовать мультиакки для транзакций.
simple_generator.py - самый обычный генератор новых кошельков.Запустив код, нам нужно указать количество желаемых кошельков, и в результате получим приватники и адреса, записанные в
private_keys.txtиpublic_keys.txtсоответственно.Зачем: нам нужно создать N количество кошельков для дальнейших использований.

