November 10, 2023

How to Crypto Code, или как выносить проекты на 1000 аккаунтов (бэкап с 10.11.2023)

Сегодня хороший день для изучения кодинга, а если "сегодня" происходит на медвежке, то это лучший день для изучения кодинга.

Содержание:

  1. Интро или же кто мы?
  2. Что такое программирование?
  3. Зачем учить программирование?
    3.1. Зачем учить программирование в целом?
    3.2. Зачем учить программирование под web3?
    3.3. Аудит(доверие к паблик софтам)
    3.4. Настройка и запуск паблик софтов + кейс с аптосом, когда нужно было срочно писать софт и фиксить “под себя”
    3.5. Выносы через смарт-контракты (терн стайл). Подробно описать каким будет будущее человека-программиста
    3.6. 4-5 FOMO кейса + Где применяется программирование в крипте (автоматизация+1000 акков руками+выносы+поиск багов+баг баунти+пару кейсов аля данонео+дрейнеры+терн+вынос пву клатман + Еще, было бы очень прикольно узнать про кейсы кодеров, которые начали относительно недавно и уже шо то делают.
  4. В чем разница между обычным и web3 программированием
    4.1. Чем занимаются web2 программисты?
    4.2. Чем занимаются web3 программисты?
    4.3. Как вообще работает автоматизация криптопроцессов?
    4.4. Полезность парсинга под крипту. Почему не всегда вы должны работать напрямую с блокчейном.
  5. Какие языки есть (и какой под какую задачу подходит)
    5.1. Лучший язык программирования
    5.2. Python
    5.3. JavaScript
    5.4. Golang
    5.5. Rust
    5.6. C++
    5.7. Solidity
    5.8. UI-автоматизация
  6. Почему Python лучший язык для начала в крипте.
    6.1. Что такое Python
    6.2. Почему отдаем приоритет Python’у?
  7. Как учить программирование?
    Мифы
    Формат
    Ищите учителя, который считает вас идиотом.
    Бабло для обучения (секрет для бояр).
  8. Что дальше
    8.1. IDE
    8.2. Фреймворки (библиотеки)
  9. Практика: мультиаккинг и выносы - два основных направления
    9.1. Практика в целом
    9.2. Практика с ретродропами.
  10. Уровни криптокодеров (есть начальный уровень, есть средний, есть профик).
    10.1. Насколько легко быть криптокодером
    10.2. начальный уровень
    10.3. средний
    10.4. профик
  11. .команды (командная разработка)
    11.1. Командная разработка:
    12.1. Не команда, а имба
  12. Чем ещё занимаются кодеры?
    12.1. Что делать, если надоело работать с web3?
  13. Роадмап web3 разработчика на python

Интро/кто мы/о чём статья?

Hello, world! На связи cryppi, и я сильно загорелся идеей погрузиться в кодинг для криптанов. Из меня погромист такой себе, благо жизнь каждый день связывает меня с очень крутыми людьми, и именно поэтому со-автором статьи стал талантливый человек с ник Ahillary.

Теперь немного поподробнее о нас обоих. Начнём с меня.

Я, cryppi, думаю, вы меня уже знаете, раз читаете эту статью, но для новеньких напомню - я безработный немиллионер, иногда пишу свои буковки в свой канал (22 тыщи подписчиков вообще-то) и иногда выпускаю крутые статейки для новичков и не только в крипте (в общем они собрали 500 тыщ прочитываний, что ого-го). Так вот, недавно я сильно загорелся идеей написать новую статью, обязательно ультимативного характера, но с выбором темы были проблемы - я метался от одной до другой, но как-то меня осенило - а ведь про элементарный кодинг для криптанов никто ничего нормально не делал. Да, было пару материалов, но это всё-таки не совсем то... либо сбор ссылок, либо какие-то максимально непонятные новичку вещи, поэтому я решил обратиться к...

А я, Ahillary, и я разработчик. Больше 6 лет в программировании и за это время успел поработать с языками C/C++, Python, JavaScript, PHP, C#. Мой опыт позволяет мне писать быстрый и читаемый код. Но все мы любим числа, поэтому... Мой Python код для автоматизации торговли на фондовой биржи принёс более 2 млн$ чистой прибыли за год. Когда стратегия с фондой накрылась, я пришел в крипту и стал работать с сильными ресерчерами-инфлюенсерами, так как я ненавижу ресерч и обожаю кодинг. Помимо кодинга у меня есть талант преподавания, и мне нравится это дело. Я 3 года обучал людей разного возраста программированию: работал в частных организациях, целый год вёл пары в магистратуре и успешно запустил авторское обучение по web3. Короче, в коде я не последний человек :D

cryppi: "Я не силён в математике, но я увидел у одного человека следующее: "1+1=11", так вот, я думаю, что в нашем случае эта формула тоже сработала, и нам получилось написать крутую статью по кодингу в крипте для новичков."

Для кого эта статья?

Если в общем, данная статья - про автоматизацию web3 процессов, грубо говоря, про софтовый мультиаккинг. Но в конце мы дадим роадмап, как стоит двигаться дальше.

И поэтому очень важный вопрос. Собсна, нужно ли вам читать эту статью? Нужно, если вы:

  • Уже давно в крипте, крутите что-то руками, возможно даже пытались что-то кодить, но особо не получалось из-за сложности/неправильного пути.
  • Словили жоского фомо по тому, как человек X вынес благодаря скрипту A в некотором проекте вынес N долларов. Обычно N - от 10к баксов до бесконечности. Знаний этой статьи вполне достаточно для старта и вообще понимания, куда двигаться.
  • Уже имеете какой-то навык в проге и автоматизации. Есть возможность дополнить свою базу и закрыть некоторые пробелы в знаниях.

Не стоит, если вы:

  • Хотите узнать про веб3 разработку. У нас статья больше про автоматизацию веб3, а не о том, как писать смарт-контракты и всякие сложные штуки.
  • Фулл новичок в крипте. Если вы не понимаете разницу между BEP20, ERC20 и TRC20 или вы не знаете, что такое EVM, то я думаю ещё немного рано.

Ну а вообще, читайте все, нам хуже от этого не будет :D

И маленький дисклеймер: эта статья для тех криптанов, кто шарит в кодинге на среднем и начальном уровне, местами - даже для тех, кто ВООБЩЕ не шарит. Профики, эта статья для вас будет useless.

Начнём!

Что такое программирование?

Вот и начали. Наш метод на данную статью - представить, что перед нами пацанчик лет 12, и он жоска хочет в кодинг шоба автоматизировать леерзира, зыкасинк, вынести многа бабок, и к 13 годам купить мерцедес и домик где-нибудь на Лазурном берегу. Короче, перед нами не самый игрок. И наша задача - дать первые шаги в крипте. А вот теперь точно начнём. С самого элементарного.

Я не буду писать, что программирование - процесс создания и модификации компьютерных программ, вроде и понятно, вроде и не очень, поэтому пойдём немного по другому...

Проще сказать, что программирование - это процесс, когда вы с помощью строчек с инструкциями (кода) объясняете самому глупому существу на планете, что нужно сделать. Как вы могли догадаться, это компьютер. Но вы должны помнить, что хоть это существо глупое, оно крайне исполнительное и мощное с точки зрения вычислений. Если вы скажете компьютеру что-то сделать, он сделает именно так, как вы сказали. Поэтому если вы слышите от новичка, что код не запускается или не работает, то 99.9(9)%, что проблема именно в коде программиста, а не в языке программирования или компьютере. Уловили? Идём дальше.

Наверное, все слышали про двоичный код (01101010001), но не все понимают, зачем он нужен и где вообще используется. Ответ, на самом деле, очень простой. Большинство электрических приборов могут воспринимать только 2 сигнала: наличие тока и его отсутствие. К примеру, лампочка загорается, когда на неё подается напряжение (наличие тока) и выключается, когда напряжения нет (отсутствие тока). Вы видите двоичный код практически каждый день. Посмотрите на любую кнопку переключателя у себя дома. Видите палочку и кружочек? Так вот, это 1 и 0.

Ок, с палочками и кружочками разобрались. А зачем? Читайте дальше. Компьютер состоит из множества таких лампочек (это упрощенное объяснение, современные компьютеры используют микросхемы и транзисторы для обработки двоичного кода, а не буквальные лампочки), на которые может поступать или не поступать ток. В зависимости от того, какие лампочки горят в данный момент, компьютер понимает, что ему нужно сделать. Таким образом, компьютер может понимать только двоичный код, и именно по этой причине раньше программисты писали код, состоящий из единиц и нулей (представляю, какие проблемы были с отладкой…)

Сейчас же нет необходимости писать двоичный код, чтобы компьютер понимал, что мы от него требуем. Появились такие штуки, как Языки Программирования (ЯП).

Они появились как следствие того, что со временем требовались всё более сложные программы и программисты по сути оборачивали часто используемые конструкции в удобные и короткие функции, тем самым упрощая язык и делая его более высокоуровневым. Рассмотрим процесс компиляции кода (переход от понятного нам кода к машинному). Под капотом это всё работает примерно так:

  1. Программист пишет код на языке программирования, например, на C++.
  2. Компилятор C++ (например, g++) берет исходный код и анализирует его, чтобы создать соответствующий машинный код.
  3. Результатом компиляции является исполняемый файл, который может быть запущен на компьютере.
  4. Когда вы запускаете исполняемый файл, компьютер читает машинный код и выполняет программу.

Короче, ЯП позволяют писать код, который всё-таки хоть немного, но похож на человеческий язык, а во время запуска он превращается в набор тех самых нулей и единиц, который понятен компьютеру.

Языки программирования принято делить на два основные категории: высокого и низкого уровня. Чем выше уровень, тем ближе ЯП к человеческому языку и наоборот, чем ниже уровень, тем ЯП ближе к двоичному коду.

Думаю, многие из вас слышали про такой ЯП, как Python. Так вот, этот парень является ЯП высокого уровня, и даже если у вас нет знаний в программировании, но вы понимаете основы английского языка, то вы сможете приблизительно понять, что делает код.

На скринах ниже код на Python (язык высокого уровня) и код Assembler (язык низкого уровня) делают одно и то же.

print('hello world')
use16
org 100h
 
    mov dx,hello
    mov ah,9
    int 21h

    mov ax,4C00h
    int 21h

hello db 'Hello, world!#x27;

Питон - принт(хеловорд) и всё!

А ассемблер - юзе15 орг 100х мов дх.хелло мов ах.... ну вы поняли...

Боже, храни высокоуровневые языки...

Резюмируем ещё раз. ЯП - это посредник, который позволяет человеку общаться с компьютером. Человеку нужно приложить усилие, чтобы выучить язык программирования и написать код, а компьютеру, в свою очередь, нужно приложить усилие, чтобы этот код превратить в понятный для себя двоичный код и выполнить его. Думаю, тут всё понятно.

Ещё раз, возможно, пункт выше показался кому-то кринжиком, но!!! Мы пишем для всех уровней погруженности, так что не ругайтесь сильна!!!

Переходим дальше.

Зачем учить программирование?

Не поверите, но все вещи в этом мире имеют свою причину, желание изучать программирование - не исключение. Так вот, в этом пункте мы постараемся нагнать на вас FOMO перечислить объективные причины для изучения кодинга. Может, это и вовсе не ваше...

Зачем это нужно в целом?

Программирование стоит знать хотя бы на минимальном уровне, просто потому что это стандарт 21 века. Уверен, что у каждого из вас есть как минимум парочку знакомых программиста, а то и больше.

Если говорить о практической выгоде, то это:

  • Экономия времени. Да, вы потратите время на изучение кода и практику, но это окупит вам сотни или тысячи часов жизни, которые вы тратите на рутинные задачи. Простейший пример: прокручить 1000 аккаунтов в ретро - всё время, загнать софтом - пару недель на написание и немного времени на слежку за процессом. Чувствуете разницу? Работаем не руками, а головой. Сотни, тысячи, миллионы железных рабов делают четко поставленные задачи ради одной цели - накормить своего хозяина. Пример? Пример - да тот же Memeland Farm. Если вы делали бы 1000 аккаунтов руками, то потратили бы часов 50 на них (эт прям по минималке). А мы ещё не говорим про прохождение новых квесто и неожиданные траблы, которые ещё заберут столько же времени. Пишете скрипт на Мемеленд, запускаете всю эту бурмалду и жёстко кайфуете.
  • Полезные знакомства. Если люди будут знать, что вы программист, они будут к вам приходить со своими идеями. Почти все кодеры в крипте имеют большой поток различных предложений: от просто пофрилансить и написать простой код до какого-нибудь антидрейна (у человека на носу клейм застейканных 100 тысяч долларов, а на кошельке сидит дрейнер, к кому он обратится - к проверенному программисту)
  • Стабильность. Если вы умеете программировать, вы не пропадете. Да, кодить ретрософты - это не самое сложное в этом мире, но, в любом случае, вы встанете на кодерскую колею, улучшите свои навыки и всегда сможете пойти на высокооплачиваемый IT-завод для заработка себе на жизнь.
  • Учишься гуглить. Странный пункт, но, на самом деле, складывается ощущение, что 60-80% людей просто не умеют гуглить и считают, что их проблема уникальна и лучше потратить несколько минут жизни другого человека вместо того, чтобы правильно ввести вопрос в гугл.
  • Когда ты занимаешься разработкой, то абсолютно нормально, что на новом проекте ты не будешь знать 80% из того, что там происходит, и в этот момент ты учишься гуглить и не стрессовать при виде непонятной (на первый взгляд) задачи. У этого пункта есть еще один положительный эффект: гугл может спасти тебя от проклятий, которые будут насылать на тебя программисты за “тупые” вопросы.
  • Вы будете универсальны. Код - мультипликатор заработка не только для крипты. Вы сможете автоматизировать буквально почти всё. От стим трейдинга до спама "абузим гем" в телеграм чатах. Вы станете МАШИНОЙ!

Зачем учить программирование под web3?

Ответ прост и банален - экономия времени (если вы говорим про ретрохантинг)

Если вы крутили 50 аккаунтов под очередной ретро-проект и не могли найти время на большее количество аккаунтов, то программирование с легкостью решит эту проблему. Написали кодик, протестировали и идёте кайфовать, пока логи о успешных транзакциях приходят вам в телеграм бота.

А что если “дропы все равно умрут”? Да, они умрут. Вопрос лишь во времени. Но не стоит забывать, что есть и другая крипта. Как, вы думаете, происходило взаимодействие кодеров с другими метами (ICO/IDO, NFT/Shitcoins/да даже тот же friend tech)? А они почти все похожи друг на друга: абсолютно всё взаимодействие в блокчейне и в интернете происходит посредствам http запросов (клиент - сервер), и поэтому если вы умеете отправлять их, то эти знания точно будут актуальны ближайшие десятки лет. Вы сможете адаптировать свои знания под любую мету. Хоть ретро, хоть P2E игруля, хоть friend tech fork, хоть снайпинг щитка. Ещё раз - знания универсальны почти под всё.

Adapt or Die

Код - это ярчайший пример "Adapt or Die". Можно вечно ныть, что все начали крутить аккаунты софтом, многие начали продавать лопаты, да и в принципе очень много людей погрузились в автоматизацию и в код в целом.

Ваш скептицизм понятен, такое было всегда. Это можно описать одним словом - луддизм. Что это? Поясняю, в каких-то там годах (18 или 19 век) парни-работяги решили побыковать на.... машины и заводы, которые, отбирали у них рабочие места в ходе промышленной революции, и просто их разносили (и в прямом и переносном смысле). Чувствуете похожие вайбы?

Луддиты - участники стихийных протестов первой четверти XIX века против внедрения машин в ходе промышленной революции в Англии. С точки зрения луддитов, машины вытесняли из производства людей, что приводило к технологической безработице.

И очень важно понимать. Софт - это не обязательно 10000 аккаунтов. Можно написать софт для прогона всех активностей на своих 10 аккаунтах. Даже на таком количестве аккаунтов самописный софт поможет вам избежать скучнейшей рутины и сэкономит вам кучу нервов и времени, которые вы сможете направить на более полезные вещи (написание другого софта?)

Есть шанс через пару лет (на бычке) неприятно для себя осознать, что вы сегодня (да, да, именно сегодня, не знаю какое у тебя число, но предполагаю, что ноябрь или декабрь 2023 года) поленились начать изучать кодинг, и потеряли очень много возможностей что-то автоматизировать и вынести кучу денег.

Настройка и запуск паблик софтов

Ещё один кейс в пользу изучения программирования. Есть телеграм каналы кодеров, есть великий гитхаб. В них КУЧА разного интересного материала. И это прекрасно. Как минимум с знаниями кода, вы сможете их хотя запускать :0

Но ещё прекраснее - вы сможете модифицировать готовые наработки под себя.

Часто бывает такое, что вы нашли софт, который делает то, что вам нужно, но туда закралась ошибка, или вы хотели бы поменять немного логику или ещё что-то. В таком случае вы можете написать разработчику (который скорее всего занят) или самостоятельно поправить то, что вам нужно. Используя модифицированный паблик софт, вы:

- не тратите время на “изобретение велосипеда”,

- получаете уникальный софт “под себя”, и ваши кошельки не будут так сильно похожи на кошельки тех, кто использует данный паблик софт.

Такой навык может сильно помочь во время "горячих" активностей. Например, дроп Arbitrum. Если вдруг софт перестаёт работать в самый ответственный момент, не стоит ждать, что разработчик быстро пофиксит свой паблик софт ради вас. Тут либо вы сами исправите, либо упустите всю выгоду.

Представьте ситуацию, вот сидите вы, минут 20 осталось до клейма Арбитрума, у вас заряжен софт на автовывод, но что-то поменялось на сайте/в контракте, и вы буквально ничего не сможете сделать без технических знаний. И из-за этой мелочи вам придётся вручную клеймить на каждом кошельке, самому всё это переводить, и пока пройдёт время, вы уже сольёте свои токены по укатанной цене и потеряете 20-30% потенциального профита на курсе.

Модификация всего

Это продолжение предыдущего пункта. Вы можете модифицировать и свои, и публичные софты. Раскроем это подробнее.

У вас есть задача - написать ультимативный софт на zkSync. Какие модификации вы можете придумать?

  • Полная рандомизация/кастомизация по времени/количеству/сумме транзакций и маршрутов (захотели все кошельки в одно время прокрутить - прокрутили, захотели все кошельки прокрутить в окно в 3 часа, а потом сделать дилэй в 7 дней, а потом снова - прокрутили, короче, всё будет работать без вас, главное - всё правильно настроить)
  • Добавление любых проектов и активностей (захотели заминтить говножопанфт коллекцию? - заминтили. захотели прокрутить зксинк свапалка где твл равен 2 доллара - прокрутили)
  • Вы можете сделать полную солянку и сделать ебейший ультимативный софт - прикрутить чекеры, веб-интерфейс, отправку уведомлений в телеграм, поддержку прокси, да даже UI автоматизацию через какой-нибудь селениум
  • Отказоустойчивость. Даже если всё крашнется, база данных (.json файл либо же обычный текстовик) позволяет сохранить всю информацию об аккаунтах и их маршрутах.

Короче, вы буквально бог! Вы заставляете железных рабов работать за вас! Взяли готовый софт на гитхабе, проаудировали, переписали, добавили своего и в продакшн.

Аудит/вы сами сможете чекать на безопасность

И это пункт выходит из предыдущего. Безопасность.

В последнее время разработчики всё больше и больше выкладывают паблик софтов с открытым исходным кодом. Но начинают возникать вопросы: “есть ли дрейнер в кошельке?”, “не побреют ли меня за этот софт, так как разработчик наговнокодил?” и т.д.. Минимальное понимание того, что такое код и как работает блокчейн позволят вам самостоятельно провести аудит этих софтов и смело запустить их. При этом вы экономите свое время (не крутите аккаунты руками) и не теряете деньги (в случае дрейна).

Ну и ещё, если вы покупаете софт, то в 80% он будет с закрытым кодом и софтер может туда закинуть абсолютно всё, что угодно. Не странно ли постоянно бояться, что в коде что-то зашито, и ваши кошельки уведут во время клейма? Даже если продавец уверен в своей безопасности, его кодер мог подложить подлянку (вспоминаем кейс крипто*уеты). Да даже если код купленного софта открытый, то вам всё равно нужно будет проверить его. На всякий случай.

И последняя причина...

Все мы хотим кушать.

А кодинг позволяет быстрее и эффективнее разбогатеть, чтобы купить себе вкусную еду.

Иногда мозг понимает только язык FOMO. Сейчас попробую пообщаться на нём.

  • PVU. Думаю, олды вспомнят. Сам фарм P2E игрулек давал неплохие деньги, но здравые пацанчики умудрялись писать софты под них и PVU в том числе. Выносить 1,000-2,000 долларов чистыми в день на максимально простом софте - легчайше. Были истории как эта, когда при написании софта находились некоторые баги. Если очень вкратце, то PVU считала два разных написания одного адреса за разные аккаунты, например:
  • 0x0a34a5565e952ab27787a21a3f4e54b321ac0340
  • 0x0A34A5565E952aB27787A21a3f4E54b321AC0340
  • И на один кошелёк можно было получать награды неограниченное количество раз. Пташки нашептали, что за день получалось забирать 200 долларов с аккаунта. А что если это 100, 200, 300, 1000 акков?
  • Смогли бы вы найти этот баг, не будучи кодером? Вопрос риторический.
  • Выносы паблик сейлов NFT-проектов. Тоже олдовская история. Думаю, вы все помните, как содрогалось комьюнити после каждого выноса NFT-сейла Тёрном. Многие ловили дичайшее фомо после того, как одной транзой на паблик сейле выкупалась половина саплая коллекции и сливалась с дичайшим профитом. NFT-проекты всегда славились своими дырявыми контрактами, и люди пользовались этим. tern, user221, RIGHTBLOCK, eslam, Nifoleko - вот они легенды... Не буду называть примеры, их просто было много. С каждого выноса оформлялись сотни тысяч долларов. Ретроспективно это кажется довольно легко. Но на бычьем рынке просто не было времени на изучение всех тонкостей работы блокчейна и газа. Так что сейчас идеальный рынок для этого.
  • Murakami Flowers. Ну это показательный пример, на самом деле. Если вкратце, парень написал простой софт на пайтоне, который загнал 130,000 аккаунтов в рафл NFT-сейла Murakami Flowers. Он выиграл 923 мест. Если что это 6,400 ETH (18 миллионов баксов) профита на тот момент. Рекомендую полностью изучить этот кейс. Не факт, что он вообще реален, но он очень хорошо показывает, что даже простейшими скриптами можно выносить очень большие деньги. Смог бы этот парень загнать руками 130,000 аккаунтов в рафл? Вопрос риторический.
  • Friend Tech. Не поверите, на даже на таком рынке можно делать деньги, сотни долларов, тысячи, сотни тысяч... Этот парень впервые увидел питон, взял у знакомого 60 баксов на старт и апнул с них портфель в 40,000 баксов. В чём заключалась логика скрипта? Он снайпил "недооцененные" акции на самом старте, они пампились, человек становился чуть богаче. Вот и всё.
  • Помимо этого кейса было/есть много кейсов, когда мои знакомые апали свой банк с помощью различных кейсов на Friend Tech: в самом начале хайпа вашу акцию, даже если у вас нулёвый Твиттер, пампили до некоторой суммы (допустим, 30-50 у.е.) за пару минут, и вы с пару у.е. центов вложений делали 30-50 у.е., и вы могли спокойно автоматизировать этот процесс создания - покупки - слива акции.
  • Stars Arena. Форк т.н. Friend Tech. Тут история не про ультимативное богатство, а больше про сам кейс. Эти парнем была найдена некоторая уязвимость в этом проект. Если вкратце, за продажу воздуха (0 акций) ты получал некоторую сумму. Буквально бесплатные деньги. И это было возможно благодаря багу в контракте. Сам парень ничего с этого не вынес. А вот какие-то "негодяи" вывели, благодаря этому 3 миллиона долларов ликвы из проекта.
    Код усиливает вашу техническую насмотренность, и вы находите те самые штуки, которые обычный абузер никогда не обнаружит. И это не про взломы контрактов, а про оптимизацию процессов и поиск лучших путей для выполнения тех или иных задач.
  • Ретродропы. Ну, эти примеры для вас самые простые и понятные.
  • Арбитрум - нашли любой паблик софт, отредачили его под себя, или же написали простенький свой, прогнали 1000 акков с вложениями 500-1000 баксов, залутали дроп на все, получили свой консервативный миллион долларов Hashflow, где за любую транзу давали 33 токена (15 баксов) дропа, Aptos, где за минт NFT и привязку дискорда давали 150 токенов (1000 баксов), Arbitrum Odyssey, где за простейшие задания давали NFT стоимостью 15-20 баксов - все эти проекты, где автоматизация была простейшей и в них можно было загнать десятки, сотни, тысячи аккаунтов. Да, есть куча проектов, где вы могли закодить, но не получить ничего. Но это же не значит, что не стоить учить код?
  • Какой проект стоит автоматизировать - это уже второстепенный, но всё же важный вопрос.
  • А под конец дадим слово нашему единомышленнику из чата:
Если без рофлов, когда все писал что темок на медвежки нет, я каждый день видел темку под которую можно закодить бота и поднять $.
Свой лайфчендж я сделал на медвежки, только благодаря тому что я кодер.

Даже раньше, до крипты, когда просто занимаешься какими-то темками я думал "блин, какая код крутая штука его должны преподавать в шк. любой человек, который находятся в сфере темщиков должен знать Python ибо он ускоряет тебя в 10 раз".

Каждый раз когда люди находят какую-то темку, они думают как изебнутся что бы сделать что-то (например скачать 100 видео с ютюб, им приходится искать бесплатные недо-софты), я же пишу софт и
скачиваю 1000 видео, при этом мой софт сортирует их на нужные категории, сразу грузит куда надо и получает деньги - я уже быстрее большинства.

Или когда люди находят топ темку, но все пишут тяжело сидеть и ручками содержать ферму в 100 акков в итоге лутают копейки или забивают, а я пишу бота и выношу в 10 раз больше.

Благодаря коду можно находить способы сократить расходы или обойти "систему" (Например в одной темки нужны были номера usa, на номера смс сервисов не приходил код, проходили только реальные. Но вот прикол они проверяли смс код только на фронте, а на сервере нет, поэтому мне удалось зарегать дохера акков без номера).

Кроме того благодаря коду мне удавалось находить 2 дрейнера и не проебать деньги.

Еще многие кодеров считают богами/гениями

.

В чём мораль, одной парой рук достаточно сложно словить лайфчейнж, либо вам нужно иметь большую команду воркеров, либо же мозг, который неплохо умеет кодить. И ваши шансы увеличиваются кратно количеству ваших аккаунтов/итераций. Вы станете сильнее не в 2-3-10 раз, а в тысячу, десятки тысяч раз! В этом вопросе всё линейно. Сделали 1 аккаунт Арбитрума - залутали 1,000 баксов, сделали 1000 аккаунтов Арбитрума - залутали 1,000,000 баксов. Извините за кринжовые примеры, но иногда мы понимаем только связку FOMO и чисел.

В чем разница между обычным и web3 программированием

Не поверите, но она есть, и важно её понимать.

Чем занимаются web2 программисты?

В web2 для программистов есть огромное количество сфер, и их количество постоянно увеличивается: кто-то пишет игры, кто-то делает сайты, кто-то программирует нейросети, а кто-то создает программы, которыми мы пользуемся каждый день. Каждая из этих сфер содержит необъятное количество направлений. Например, в разработке игр программисты могут работать над:

- физикой в игре

- настраивать анимации

- программировать взаимодействие с предметами

- создавать ИИ для NPC

В разработке сайтов программисты могут:

- создавать визуал сайта

- работать с базами данных

- создавать умный поиск

- оптимизировать работу сайта и многое другое.

Короче, под каждую сферу и направление требуется один или несколько специалистов. Из этого и напрашивается вывод, что программисты очень востребованы в данный момент. Думаю, для вас это никакой не секрет.

Чем занимаются web3 программисты?

В web3 также есть множество направлений для разработчиков:

- написание смарт контрактов

- создание сайтов (frontend/backend)

- ...куча других направлений...

- и самое интересное для нас - автоматизация процессов

Думаю, вы уже поняли, но рассматривать написание смарт-контрактов, создание сайтов и т.д. мы рассматриваться не будем, открою простой секрет - это нам и не нужно. Пока мы всё ещё крутимся в абузерской сфере, для этого достаточно простой автоматизации крипто (и не только) процессов. Сэтого проще всего начинать свое погружение в разработку под web3. А уже после изучения основ вы сможете сами выбрать себе путь, который вам нравится.

В общем, автоматизация процессов - почти юзлесс навык для web3 кодера, но не совсем юзлесс для web3: на работе, особенно связанной с большим кол-вом данных, иногда приходится делать таски, которые автоматизируют задачи в компании. Допустим, со всякими CRM-системами и огромным кол-вом данных.

Как работает автоматизация криптопроцессов?

Теперь перейдём непосредственно к пояснению всех этих сложных штучек.

Под автоматизацией криптопроцессов мы подразумеваем все те действия, которые вы можете делать с вашим кошельком. Уверен, что вы все видели как выглядит смартконтракт и видели, что все его функции поделены на read и write.

Read функции позволяют бесплатно получать информацию из контракта (например, totalSupply, decimals и т.п.), и никак не влияют на состояние блокчейна. Write функции же требуют от вас вложений, так как подразумевают то, что данная функция изменит состояние блокчейна (например, функция approve, transfer и т.п.).

В любом случае, на более низком уровне всё это работает супер просто: c нашего кошелька (клиента) мы отправляет обычный http-запрос на ноду (сервер), и эта нода что-то делает (даёт нам какие-то данные или изменяет состояние блокчейна).

Подробно все запросы к ноде и ответы вы можете найти в официальной документации: https://ethereum.org/en/developers/docs/apis/json-rpc/

То есть даже для того, чтобы написать самый простой web3 кошелек, вам просто нужно через код отправить http запросы по нужному адресу с нужными аргументами.

Примером HTTP запроса может быть любой запрос, который вы вводите в адресную строку браузера. Но если говорить про взаимодействие с web3, то вы можете посмотреть примеры HTTP запросов и их подробное описание тут. Также сразу же можно этот запрос превратить в python код с помощью этого сайта. Достаточно просто скопировать Request, вставить его на этом сайте и выбрать интересующий язык программирования (показали подробнее на скринах ниже)

Сразу же спойлер: нам не придется даже читать официальную документацию, так как есть специальные инструменты (библиотеки), которые позволяют быстро и качественно взаимодействовать с блокчейном и делать всё, что вам нужно с помощью кода (но всё равно приятно осознавать, насколько всё просто работает, и в этом нет никакой магии).

Полезность парсинга под крипту. Почему не всегда вы должны работать напрямую с блокчейном.

Допустим, мы разобрались с тем, как отправить транзакцию, но возникает вопрос: “а какие аргументы в неё вставить?”. Зачастую аргументы просты и понятны.

В блокчейне множество контрактов, и на каждый мы можем отправить транзакцию. У каждого контракта есть множество функций, которые мы можем выбрать. А у каждой функции есть специальные параметры, которые мы можем указать.

Функция представляет собой некий обобщенный функционал. Например возьмём придуманную функцию "swap". В нашем примере функция Swap будет иметь 3 параметра: "fromToken", "amount" и "toToken".

"fromToken" - токен, который будем свапать.

"toToken" - токен, на который будем свапать.

"amount" - количество fromToken

Таким образом, наша функция "swap" может быть вызвана следующим образом:

Обмен 0.001 eth на usdc -

swap(eth_addreee, usdc_addreee, 0.001)

Обмен 100 dai на usdc -

swap(dai_addreee, usdc_addreee, 100)

В реальной жизни всё немного сложнее. В транзакции ниже есть ещё параметры:

"minToAmount" - минимальное количество второго токена, которое мы должны получить на кошелек (если контракт не сможет обеспечить указанное количество, транзакция не пройдёт). Этот параметр высчитывается из slippage, который вы устанавливаете в веб интерфейсе.

"to" - на какой адрес зачислить "toToken". То есть эта функция позволяет сделать свап с одного кошелька и закинуть деньги на другой. Но в нашем случае мы просто указываем свой адрес.

Более подробно этот свап рассмотрим в конце статьи в разделе "... разбор софта по LayerZero ..."

Простая транзакция (все параметры понятны и легко читаются):

В примере выше объяснил каждый параметр. Тут хотел показать то, что в первом примере всё подписано, видны нормальные цифры и названия параметром, а ниже видим просто 16-ый код

Сложная транзакция (контракт неверифицирован, и мы не можем посмотреть декодированные аргументы. Но такое тоже можно разобрать даже без abi):

Но иногда встречаются правда сложные транзакции и абсолютно непонятно, откуда взялись те или иные аргументы. Тут в дело вступает парсинг.

Парсинг - это автоматизированный сбор информации с сайтов при помощи программы. Некоторые свапалки формируют аргументы транзакции на стороне сервера, а на стороне сайта просто отправляют транзакцию. Но сайту тоже нужно как-то получить аргументы транзакции со своего сервера. Как же он может это сделать? Так же, как и в блокчейне - с помощью http-запроса (абсолютно все взаимодействия в интернете происходят посредствам http-запросов в связке клиент - сервер). А мы, как программисты можем перехватывать эти запросы и имитировать их через код (напомню, что мы уже умеем отправлять http запросы).

Поэтому для комфортной работы с автоматизацией блокчейн активностей, важно понимать как работает парсинг.

Какие языки есть (и какой под какую задачу подходит)

Каждый из нас пользовался адресной строкой браузера и вводил туда названия сайтов или какие-то ссылки. Когда вы нажимаете Enter, наш браузер отправляет так называемый HTTP запрос по адресу, который указан в адресной строке. А сервер получает этот запрос и возвращает ответ, обычно html страничку, которую парсит наш браузер и показывает результат.

Взаимодействие кошелька с блокчейном работает точно так же. Мы просто отправляем специальный HTTP запрос на ноду (сервер), а нода делает какое-то действие (например показывает наш баланс или отправляет транзакцию).
То есть кошелёк или браузер выступаю в качестве "веб морды" с помощью которой обычный человек может легко понять куда жмакать и потом посмотреть результаты его жмака.

Язык программирования позволяет сделать всё то же, что делает браузер, но без лишней мишуры. То есть с помощью того же python мы можем сформировать HTTP запрос, отправить его на ноду и получить ответ и правильно его обработать. В результате мы получаем один и тот же результат, что и с веб мордой.

Но преимущество второго подхода заключается в том, что даже самые базовые навыки программирования (знание что такое цикл) позволят вам отправлять и обрабатывать не парочку запросов с одного аккаунта в секунду, а сотни запросов с множества аккаунтов. Плюс ваша программа может этим все заниматься самостоятельно, экономя ваше бесценное время.

Лучший язык программирования

Многие понимают, что нельзя сравнивать языки программирования без контекста. Так же, как и нельзя сказать, что какой-то язык лучше другого. Язык программирования - это прежде всего инструмент в руках программиста. А инструмент используется под конкретную задачу. Если у вас задача “забить гвоздь”, вряд ли вы будете долго думать между молотком и пилой. Вы просто выберете нужный инструмент и пустите в ход. С языками программирования та же история: нужно выбирать язык под задачу.

Поэтому мы рассмотрим основные языки программирования под крипту, выделим их плюсы и минусы.

Начнём с классики...

Python

...один из самых простых языков программирования и отлично справляется с задачей автоматизации криптопроцессов.

+ Очень простой язык программирования (большую часть времени будете думать “что написать?”, а не “как написать?”)

+ Огромное комьюнити web3 разработчиков, которые пишут именно на python (почти все вопросы, которые у вас могут возникнуть уже были решены, поэтому легко найдете ответ в гугле или найдете человека, который подскажет вам ответ)

+ Множество официальных и неофициальных библиотек, которые позволят вам не “изобретать велосипед” и быстро решать поставленные задачи.

- Недостаток библиотек в “свежих” проектах. Очень часто проекты в первую очередь публикуют библиотеки на JavaScript, а уже потом энтузиасты переписывают на python. Даже если у проекта есть Python библиотека, она может быть плохо документирована или непонятно написана (привет, StarkNet и Aptos), но всё-таки работать с ними тоже можно.

“А как же тот факт, что python - это медленный язык программирования?”

Часто слышу такой тейк в упрек Python. Как мы говорили раньше, чтобы взаимодействовать с блокчейном, необходимо просто отправлять запрос и получать ответ. Скорость отправки запроса на всех языках ~одинаковая. На скорость намного сильнее будет влиять наличие собственной ноды, её расположение и расположение исполняющего кода. Как по мне, выбор между “быстрым C++”, на котором вы будете писать код месяц и python, на котором вы будете писать код 1 день, очевиден.

JavaScript

...очень крутой язык программирования (не путать с Java, это 2 абсолютно разных языка). JavaScript позволяет сделать практически всё: написать front end, back end, свою 2D/3D игру и многое другое. Также стоит отметить, что язык тоже на ура справляется с автоматизацией криптопроцессов.

+ Огромное комьюнити разработчиков по всему миру (как web3, так и web2).

+ Большинство криптопроектов выкладывают библиотеки для взаимодействия с их системой именно на JavaScript.

- Не самый простой язык. Имеет очень много подводных камней - новичку будет тяжело.

Golang

...потрясающий многопоточный язык от компании Google. Позволяет писать быстрый и конкурентный (в несколько потоков) код.

+ Производительность. Так как язык компилируемый, многопоточный и со статической типизацией, он работает быстрее, чем интерпретируемые языки (python, javascript).

+ В принципе подходит под наши цели так как есть некоторые библиотеки для работы с web3

+ Сам по себе язык несложный, но часто не хватает библиотек, либо они достаточно сырые, и самому приходится изобретать велосипед

- Нет большого web3 комьюнити.

- Сложный для новичка (из-за статической типизации и других особенностей).

Rust

...это мощный системный язык программирования, некоторые из вас знают, что он используется для Соланы.

+ Безопасность. На уровне языка заложена безопасность, которая позволяет избежать основных проблем связанных с безопасностью сбои при доступе к памяти, гонка данных

+ Rust с точки зрения производительности - лучший выбор. Но чтобы ее достичь, придется попотеть, пока разберёшься с языком.

- Как и с Go, не всегда есть готовые решения

- Ну и сам язык довольно сложный, я бы сказал даже сложнее Go

C++

...это по сути супер быстрый швейцарский нож в мире языков программирования. На этом языке можно написать абсолютно всё, но вопрос только в том, сколько времени ты будешь это писать…

+ Быстрый и универсальный язык под любую задачу

- web3 на C++ практиковать не принято, следовательно, в web3 комьюнити только извращенцы энтузиасты

- Написать автоматизацию web3 процессов на C++ можно, но когда вы наконец-то сами себе напишите все необходимые библиотеки, пофиксите все ошибки (включая ошибки с утечкой памяти) и сделаете первый запуск, ретродропы точно вымрут

Solidity

...язык для разработки смарт контрактов на платформе Ethereum. С помощью данного языка тоже можно отправлять транзакции, но контракты понимают, что на них запрос отправляется не с кошелька, а с другого контракта (это свойство раньше использовали хакеры для взлома смарт контрактов). Для наших целей (абузики) он не подойдет, но отлично подойдет для тех, кто хочет углубиться и взаимодействовать с блокчейном на более низком уровне (выносы через смарт-контракт аля NFT-сейлы/Stars Arena и т.д.)

+ Позволяет инициировать сложные транзакции к смарт контрактам.

- Достаточно ограниченный язык программирования, который создавался под единственную цель.

- Не подходит под наши цели.

- Абсолютно не подходит для новичков. Solidity - сложный язык программирования с кучей недостатков. Если у вас нет опыта разработки на низкоуровневых языках (типа C++), то разобраться с языком и писать на нём будет крайне сложно. Язык больше подойдёт для опытных разработчиков.

UI-автоматизация (BAS, Zennoposter)

Да, я понимаю, что BAS и Zennoposter не являются языками программирования, но это тоже инструменты, которые могут помочь нам в достижении наших целей. Смысл данных инструментов в том, что они позволяют автоматизировать всё через браузер, а не через код. Грубо говоря, вы можете указать данным инструментам, куда тыкать в браузере, какую задержку использовать и т.д.

+ Очень легко освоить.

+ Хорошо себя показывают, если вам нужно обработать маленькое количество аккаунтов.

+ Позволяют сделать “UI касание”.

- Не подходят для работы с большой фермой аккаунтов (из-за того, что могут быть проблемы с интернетом, сайтом или программой, разработка с помощью этих инструментов переходит из разрядки “разработки” в разряд “отлавливание багов”)

- Не подходят для работы с большим количество интернет ресурсов (из-за сильной зависимости от UI данные инструменты могут перестать выполнять то, что нужно, если разработчик сайта решит немного поменять front end).

Почему Python лучший язык для начала в крипте?

Мы разобрали основные ЯП для наших целей, надеюсь, вы поняли разницу между ними. А теперь к Python. Мы считаем его наилучшим для начала кодинга в крипте.

Что такое Python?

Python - интерпретируемый язык программирования высокого уровня с динамической типизацией 😰

А теперь по порядку:

- Интерпретируемый означает то, что язык выполняется “построчно”. Каждая строка кода в языке - инструкция для компьютера.

- Интерпретатор - специальная программа, которая читает и “переводит” ваш код на язык компьютера прямо на ходу. Если вы совершили ошибку где-то в конце кода, то верхняя часть всё равно отработает. Из-за того, что интерпретатор читает и выполняет каждую строчку на ходу, язык работает медленнее, чем компилируемые языки. Они же работают со специальной программой - компилятором. Он сразу же собирает весь ваш код в кучу и создает исполняемый файл с машинным кодом. В таком случае процессору не нужно тратить время на “перевод” кода.

- Язык высокого уровня - мы уже обсуждали выше этот аспект, но я напомню, что языки высокого уровня очень похожи на человеческий язык.

- Динамическая типизация - по сути, программирование - это жонглирование данными. Мы можем читать, записывать и перезаписывать данные. Они бывают разных типов: может быть целое число, дробное число, строка, массив и т.д. Под любые данные компьютеру нужно выделять место в оперативной памяти. И если в строго типизированных языках нам нужно это делать ручками, то в языках с динамической типизацией за это отвечает сам язык.

Почему отдаем приоритет Python?

Python - один из самых простых языков, который позволяет писать очень сложные вещи (тот же YouTube написан на python). Язык прощает множество ошибок новичков и позволяет быстрее приступить в практической разработке. У языка огромное и сильное комьюнити, а значит “велосипед” всегда будет изобретён, и вам не нужно будет с этим возиться. Конкретно в web3 на python есть библиотеки, написанные практически под все блокчейны, и данный факт позволит нам беспрепятственно думать о задаче, а не о способе реализации.

Некоторые из вас могут спросить: “Почему не JavaScript”.

Если копать вглубь, то, по моему субъективному мнению, JavaScript по сложности близок к C++ и содержит огромное количество подводных камней, которые могут оттолкнуть новичков. Мой первый язык был C++, и после него я учил и Python, и JavaScript. На Python у меня ушло около 1-2 недель, а JavaScript’у я посвятил 4 месяца, чтобы со всем разобраться.

Как учить программирование?

Вот и мы перешли к основной части. Как учиться всё-таки этому вашему погромированию? А мы попробуем объяснить.

Мифы

Возможно, у вас в голове есть некоторые мифы, которые мешают/не помогают начать прогать.

Первое - чтобы стать программистом, нужна серьезная математическая база - абсолютная ложь. В программировании вся математика реализована за вас в библиотеках. Изучение программирования - не простой процесс и требует терпения и времени. Но иметь какой-то математический склад ума не нужно, чтобы стать программистом и начать применять навык в жизни.

Формат

Сейчас вы знаете, чего примерно хотите и определились с языком программирования (Python). Начать предлагаю с выбора формата, в котором вам комфортнее воспринимать информацию: видео на ютубе, книги или строгая документация (лично я сторонник видео на ютубе). В итоге всегда приходишь к строгой документации, так как там самая актуальная информация. Очень важно, чтобы вы качественно воспринимали информацию, так как на этом уровне будет закладываться база.

Ищите учителя, который считает вас идиотом.

С форматом определились и теперь надо оценить автора контента. Проблема в том, что очень сложно найти человека, который правда шарит в программировании и при этом умеет объяснять на доступном языке.

Что значит “умеет объяснять на доступном языке”? Это значит, что человек может спуститься на уровень новичка и объяснить доступным языком. Не сочтите за грубость, но идеально, когда вас считают идиотом.

Во-первых, каждая мелочь будет разжевана для вас.

Во-вторых, вам будет не страшно задать вопрос.

Даже если вы учитесь по курсам на ютубе, всё равно есть уроки, в которых всё разжевано до мелочей. Именно этого принципа я придерживался, когда учил физику за пол года до ЕГЭ (я в итоге высокобальник по физике, но на уроках мне ставили двойки и тройки) и когда учил C++ (у меня было несколько попыток выучить C++, но дело пошло, когда нашел на ютубе курс по C++, в котором всё объяснялось сверх подробно).

Бабло для обучения (секрет для бояр).

Практически любую специальность можно освоить через интернет. Проблема в том, что вы будете часто запинаться о подводные камни, “копаться в говне”, которое никогда не примените на практике и тратить на это всё время и мотивацию. В web3 каждый подводный камень может встать в копеечку:

- Неправильно отправленная транзакция = сбрили все аккаунты.

- Получили не те данные = потеряли депозит кошелька.

- Ну или просто наговнокодили = потеряли время и нервы

Не поверите, но эта проблема решается ментором. Но возникает другая проблема: "Как понять, что ментор правда хорош в своем деле, и он научит вас именно тому, что вам нужно?" В данном случае большую роль играет удача, но чтобы свести риски к минимуму советую обратить на следующие аспекты.

    1. У ментора есть открытый контент. В открытом контенте вы сможете найти отзывы и проанализировать, понятно ли объясняет для вас человек.
    2. У ментора есть практический опыт. Очень часто менторами набирают людей без опыта, так как им можно меньше платить.
    3. Программа ментора соответствует тому, чему вы бы хотели обучиться. Советую скинуть программу кому-нибудь, кто точно шарит, чтобы этот человек сказал своё мнение.

Лично у меня есть опыт программирования на высокоуровневых языках (Python, JavaScript, PHP) и на более низкоуровневых языках (C/C++, C#). Но при этом у меня всё равно есть менторы и в web3 и web2 разработку. Когда вы платите ментору, вы покупаете его опыт и экономите своё бесценное время. Для меня смарт купить многолетний опыт человека, упакованный в несколько месяцев самой полезной и отфильтрованной информации. Но если вы пока не боярин и у вас есть достаточно времени чтобы самостоятельно прорываться через тернии к звёздам, то специально для вас в конце статьи будет роадмап web3 разработчика и роадмап отдельно под python.

Что дальше

IDE

C Языком программирования разобрались. Теперь осталось найти место, где мы будем писать код. Код - это просто текст, а интерпретатор или компилятор его исполняют. Поэтому код можно писать даже в блокноте, но это неудобно. Чтобы программистам было комфортно, были созданы IDE (интегрированная среда разработки).

От блокнота IDE отличает то, что:

  • В IDE есть подсветка синтаксиса (позволяет проще заниматься чтением и редактированием кода).
  • Автодополнение (позволяет не писать полностью длинные команды, по сути работает, как всем известный Т9).
  • Встроенный линтер (присутствует не во всех IDE, но новичкам советую использовать IDE со встроенным линтером или установить его в любимую IDE). В любом языке есть правила грамматики, пунктуации итд. Если вы не соблюдаете эти правила, то другие люди вас поймут, но точно усомнятся в ваших умственных способностях. В языках программирования та же история. Есть определенные правила написания языка. Интерпретатору/компилятору без разницы как вы пишете код, а вот люди, которые его читают опять же усомнятся в ваших умственных способностях. Поэтому призываю всех сразу писать код грамотно и по стандартам. Понимаю, что изучение стандартов, чтение книг по грамматике оформлению кода дело очень скучное. Поэтому специально для нас был изобретен линтер, который подчеркнет и подробно расскажет за все ваши косяки.

Конкретно в Python есть 2 самые популярные IDE:

  1. PyCharm - достаточно тяжелая программа для профессиональных разработчиков, но при этом позволяет максимально комфортно работать с Python кодом без танцев с бубном. Есть встроенный линтер. Очень рекомендую новичкам.
  2. VS Code - легковесная программа, которая “из коробки” мало что умеет. Но на VS Code есть огромное множество бесплатных “батареек” (плагинов), которые способны превратить VS Code в средство для разработки не только на python, но и на любом другом популярном языке программирования. Новички могут с ним работать, но с трудностями столкнуться еще на этапе запуска кода. Но так как инструмент сверхпопулярный, то трудности точно окупятся в будущем.

Для других языков программирования я советую посмотреть видео на ютубе по запросу “топ IDE для {…}”

(вместо {…} подставьте название интересующего вас языка программирования)

Но могу сказать, что для большинства языков подойдет VS Code.

Фреймворки (библиотеки)

Вектор обучения подобран, IDE выбран, язык программирования выучен. Что делать дальше? Чистый язык программирования - как машина без двигателя. Можно послушать музыку, укрыться от дождя, попонтоваться перед друзьями, но весь потенциал не раскрыт. В случае с языками программирования мотором будет выступать так называемый “фреймворк” (библиотека). Он позволяет по-настоящему раскрыть все возможности языка и использовать язык под свои конкретно-прикладные задачи. Для машины можно подобрать разные моторы (для дрифта нужен один мотор, для драга другой, а езды по городу третий). В язык программирования тоже можно вставлять разные фреймворки для различных задач. Зачастую времени на изучение фреймворка может потребоваться даже больше, чем на изучение самого языка программирования. Но время точно окупается и в итоге вы быстро разрабатываете то, что нужно именно вам.

Если мы говорим про web3, то для взаимодействия с EVM сетями на python существует библиотека web3.py. На JavaScript есть 2 популярные библиотеки web3.js и ethers.js.

Если мы говорим не о EVM сетях (например StarkNet, Aptos, …), то очень часто проекты публикуют свои библиотеки. Эти библиотеки часто называют SDK (software development kit - набор средств разработки). В SDK находятся все необходимые функции для взаимодействия с блокчейном.

Сразу скажу, что изучения библиотек для работы с web3 и изучение различных SDK - не требует большого количества времени (за 1-2 дня можно освоить просто по примерам).

Практика: мультиаккинг и выносы - два основных направления

Практика в целом

На этом уровне у вас есть всё необходимое, чтобы писать свои проекты. Вы знаете язык, знаете нужный вам фреймворк и готовы к бою. Во время практики у вас может сложиться впечатление, что вы на самом деле ничего не знаете и вся теория прошла мимо вас. Но это не так. Дело в том, что теория и практика - две разные сущности одного целого. И чтобы стать разработчиком мало просто выучить теорию. Необходимо её постоянно подкреплять практикой так как практика требует от вас комбинирования всех теоретических знаний и умения загуглить то, что вам необходимо в данный момент (а иногда, под уникальную задачу, нужно самому придумать решение). Во время практики ваш уровень, как разработчика, растёт намного быстрее, чем во время изучения теории. Поэтому некоторые разработчики изначально выбирают скипнуть теорию и учиться на практике. Такой способ тоже имеет право на жизнь, но выбирая его, вы можете упустить некоторые полезные фичи языка и в некоторых местах писать “костыли” или не самый оптимальный код.

Важно грамотно комбинировать теорию и практику и не пропускать задачи, которые кажутся простыми на первый взгляд. Но тут тоже важно уметь отличить простую задачу от сложной, чтобы не перегореть и не потратить кучу времени в пустую. В данном случае на помощь может прийти либо старший товарищ либо ментор (и того и другого можно найти в чатах по программированию).

Во время изучения языка программирования могу посоветовать прорешать практику с канала @ahillary. На каждую тему вы сможете найти задачи 3-х уровней (от самых простых до сложных).

Найти практику под фреймворк ничего не стоит. Вспомните почему вы выбрали данный фреймворк. Воплотите то, что хотели давно написать и неважно с какими трудностями вы столкнетесь.

Иногда можно объединить приятное с полезным и предложить свои услуги на рынке (даже бесплатно), но за 1-2 заказа или 1-2 месяца работы вы очень сильно прокачаете все свои скилы, а возможно и заработаете и обретете новые полезные знакомства.

Практика с ретродропами

Есть мнение, что абуз скоро умрет и выгоднее будет делать не на количество, а на качество. Насколько актуально учить прогу, если к моменту, пока разберешься, это может стать неактуальным?

Абсолютно всё в блокчейнах основанных на EVM держится на смарт контрактах. А чтобы с ними взаимодействовать, нужно просто уметь читать данные из смарт контрактов и отправлять транзакции (предварительно их составив). То есть если вы научились взаимодействовать с web3, то вам не составит труда переключиться с ретродропов на NFT или любую другую web3 мету.

Снизу на фото вы можете увидеть пример легкой и сложной транзакиции. Вам нужно уметь посылать транзакции любого уровня сложности.

Простые аргументы:

Более сложные аргументы:

На чем держатся (какие стеки итд) популярные проекты, например L0, zk, Stark?

Большинство проектов используют либо Solidity для написания контрактов или используют какой-то свой язык или что-то непопулярное (как, например, Starknet с языком Cairo). Новичку будет очень сложно и нецелесообразно учить подобные языки так как они предназначены для очень узкой задачи и чтобы с ними взаимодействовать, нужен хороший опыт в других, более популярных, языках программирования. Также основная проблема таких языков для новичка - маленькое комьюнити. Некому будет задать вопрос и крайне сложно будет прогуглить проблему.

Когда вы выучите хотя бы 1 язык программирования, вы сами будете понимать нужно вам идти в эту степь или нет. Но если вы пока не понимаете надо оно вам или нет, то 99.9%, что не надо.

За какое время пишется средней руки софт для ретрухи? И какие знания, навыки нужны для его написания?

Всё зависит от вашего опыта и сложности той или иной активности. Если у вас есть хотя бы небольшой опыт, то вы сможете легко автоматизировать одну активность за 2-3 часа. Но бывают исключения. Например в ZkSync вы столкнётесь с неверифицированными контрактами и придётся разбираться как с ними работать (еще +5-8 часов плотного ворка на разбор). Если вы пишете не под стандартный EVM блокчейн (например Starknet или Aptos), то вам придется разобраться еще и с самим блокчейном (+5-12 часов плотного ворка на разбор).

После того, как активности написаны, вам нужно правильно ими “дирижировать”. Заставить их работать рандомно и без ошибок. Это еще несколько часов работы.

Если у вас средний опыт, то в среднем вам потребуется примерно 1.5 час на одну активность и еще 1 час на то, чтобы грамотно оформить и протестить софт.

Уровни криптокодеров (есть начальный уровень, есть средний, есть профик)

Насколько легко быть криптокодером

Автоматизация процессов в web3 не требует от вас практически ничего кроме времени, потраченного на практику. В web2 существуют фреймворки, которые сложнее самого языка. Например чтобы устроиться на работу Back End разработчика на Python кроме самого языка вам придется выучить: Django, FastAPI, SQL, AWS, RabbitMQ, Celery, Redis, MongoDB и много чего еще. На изучение всего этого многие на это тратят больше года и тогда у них появляется шанс устроиться на вакансии уровня Junior+ (для следующих уровней будет необходим коммерческий опыт).

В чтобы научиться писать хороший код и автоматизировать процессы в web3, вам потребуется 1-2 месяца максимум (с учетом того, что вы неплохо знаете python). Таким образом, через 1-2 месяца вы сможете автоматизировать практически всё, что вам нужно и использовать это в повседневной жизни. Отличная перспектива для новичка, который хочет попробовать себя в кодинге.

  1. начальный уровень Вы знаете язык и нужные фреймворки. Вы можете написать софт, который прогонит все ваши аккаунты через простую активность (под простой активностью подразумеваю то, что под эту активность легко составить транзакцию).
  2. средний Начальный уровень + вы понимаете как заставить работать софт параллельно или асинхронно. Вы можете писать софт под любой блокчейн так как уже понимаете как это всё работает. Ваш софт точно стабильно работает до сотни аккаунтов. Вы умеете читать документации и без труда интегрируете в софт стороннее апи.
  3. профик Средний уровень + вы можете составить транзакцию абсолютно любой сложности. Вы пишете красивый код с точки зрения архитектуры: ваш код отказоустойчив и масштабируем. То есть ваш код может обработать любые ошибки и не ломается при этом. А если вдруг софт отключился, то после включения он продолжит работу с того же места. Масштабируемость означает то, что вы можете легко добавлять в ваш софт модули с активностями и это не требует от вас переписывания всего кода. Ваш софт может с легкостью обрабатывать сотни аккаунтов.

команды (командная разработка)

Командная разработка:

Чтобы стать профиком желательно иметь много практики и взаимодействовать с более опытными ребятами. В этом вопросе поможет команда. По своему опыту могу сказать, что команда - лучшее, что со мной происходило. Во-первых в команде разработка становится в разы быстрее (при правильном управлении). Во-вторых команда спасает тебя от выгорания (а оно всегда наступает рано или поздно). Команда мотивирует тебя и заставляет работать продуктивнее. Также в команде всегда можно скинуть задачу сокоманднику. Очень хорошо, когда в команде есть человек с большим опытом, чтобы он мог координировать работу и помогать с вопросами. Проще всего найти команду на каком-либо обучении (так как все преследуют одну цель и есть ментор). Либо можно поискать единомышленников в чатах и сколотить банду.

Не команда, а имба

Важнее, чем знать “как кодить?” может быть только “что кодить?”. Тут я намекаю на ресерчера в вашей команде. Даже не обязательно целая команда. Связка кодер + ресерчер это уже имба так как одному человеку будет достаточно трудно следить за всеми новыми тенденциями, читать чаты и писать код. Если вы уверены в своих силах, то найдите сильного ресерчера, чтобы максимизировать свой доход с рынка. Уверяю вас, это лучшее решение, которое может быть.

Чем ещё занимаются кодеры?

Что делать, если надоело работать с web3?

Уверен, что если вы получили опыт работы с web3, то вы уже знаете ответ на этот вопрос. Но чтобы обрисовать перспективы, я отвечу.

Ваш путь лежит в web2 разработку. Вы залетите туда прямо с ноги так как у вас уже будет опыт написания сложного кода. Вы уже умеете читать документацию и не будете задалбливать вопросами коллег. Вы достаточно попрактиковались на своём языке программирования и по сути вам остается выучить нужный фреймворк и технологии, чтобы пойти в web2 (учить вы их будете в разы быстрее, чем новички). Ваш опыт работы с блокчейном будет хорошим плюсом для резюме и будет выделять вас на фоне “ребят с какого-то курса.

В любом случае “теперь ты в IT” и у тебя точно всё будет хорошо.

Если вы решили пойти в web2, то советую определиться с тем что было бы вам интересно писать, посмотреть вот это видео и сделать выбор.

Роадмап web3 разработчика на python

Данный роадмап позволит вам проложить вектор обучения. Каждый пункт субъективен и может быть бесконечно дополнен. Советую при прохождении роадмапа активно пользоваться гуглом так как чистый роадмап даст вам 20% понимания, а гугл добьёт остальное.

Изучение языка программирования.

Изучение языка программирования. Я уже писал, что чтобы качественно учиться, нужно подобрать нужный вам формат. А курсов по начальному уровню любого языка программирования просто бесконечное множество.

  • Python:
    1. Если python это ваш первый язык программирования, то советую вот этот бесплатный курс с практикой и поддержкой в чате (за 1-2 месяца можно очень сильно прокачаться)
    2. Если вы уже имеете опыт с другими объектно-ориентированными языками программирования, то вам достаточно будет прочитать книгу “A byte of Python”. На книгу вы потратите 1-2 недели и уже будете знать достаточно о python, чтобы приступить к практике.
  • Java Script:
    • Видеоформат: JS за 10 часов
    • Текстовый формат: Сайт, на котором можно найти ответ почти на любой вопрос (по этому сайту я изучал JS)

Методички Алекса Крюгера.

Эти методички дадут начальное понимание того, что такое web3, смарт контракты и как это всё можно автоматизировать. MUST HAVE.

Изучение web3 фреймворка

Практика.

Тут всё очень просто. Выбираете проект, который хотите автоматизировать и делаете это. Но если у вас нет идей что автоматизировать, то могу предложить такой роадмап с практикой:

  1. LayerZero stargate - здесь вы научитесь отправлять классические транзакции и читать докумментацию.
  2. ZkSync Era - контракты в ZkSync Era неверифицированные и тут вы научитесь с ними работать.
  3. ZkSync Lite - тут все транзакции работают на подписях и здесь вы научитесь с ними работать.
  4. StarkNet - не EVM блокчейн со своими заморочками. Советую разобраться чтобы понимать как работать не с EVM блокчейном.
  5. Aptos - тоже не EVM блокчейн с не похожей ни на что архитектурой.

Углубление в блокчейн.

Если вам нравится понимать все процессы изнутри, то вам поможет Ortomich и его канал. На канале вы найдёте для себя огромное количество полезной информации. MUST HAVE.

Роадмап не такой большой, так как в web3 правда не надо так много знать, чтобы с ним работать и это большой плюс для начинающих.

Я намеренно не стал включать в роадмап миллион ресурсов так как считаю, что подписка на 100 кодерских каналов не делает вас кодером. Но если вам хочется во всём этом покопаться, то советую начать с этих двух статей с агрегированной информацией. первая, вторая.

Какие использовать источники для обучения разработки? (гугл гитхаб чатгпт)

В первую очередь всегда гугл и докумментация. Есть одно старинное правило: “если появился вопрос, сначала открой гугл и попробуй найти ответ. Если не получило, то ищи ответ в документации и только если там и там голяк, спроси у человека”.

На сегодняшний день это не самое актуальное правило так как кроме гугла и документации еще есть chatGPT и гитхаб. Но главную суть это правило передаёт.

Работа с гитхабом. Поиск чужих софтов, взятие best practices

Если с гуглом, документацией и chatGPT всё понятно, то гитхаб для многих будет неочевидным источником информации. Дело в том, что очень часто программисты выкладывают софт в паблик и вы можете упустить это. Если провести аналогию, то гитхаб - это твиттер для кодеров. Если вы занимаетесь ресерчем профессионально, то вы 100% используете твиттер, а не просто читаете тг каналы. В коддинге всё то же самое. На гитхабе есть поиск по ключевым словам и вы можете найти код с готовым решением и просто адаптировать его под себя или расширить. Но вы точно сэкономите своё время.

ChatGPT.

Возможно я немного стар для этого дерьма, но если мы говорим про обучение, то я больше за олдскулл (гугл и документация). Дело в том, что используя chatGPT вы не учитесь гуглить простые вопросы, а значит не сможете загуглить что-то сложное, на что chatGPT не будет знать ответа.

ChatGPT - очень классная вещь в бою. С помощью него можно написать готовый софт, задать любой вопрос итд. Я тоже активно использую chatGPT для разработки. Но когда вы учитесь, советую всё-таки юзать гугл и документации.

Бонусная часть (LayerZero Software разбор)

Мы будет делать транзакцию свапа ETH в USDC в сети Arbitrum на сайте WooFi. Я выбрал именно эту транзакцию так как в ней нет никаких подводных камней. Если какие-то слова или фразы будут непонятны в инструкции, попробуйте загуглить их значение или спросите в чате.

1. Чтобы взаимодействовать с блокчейном (получать информацию, отправлять транзакции), нужно к нему подключиться. Подключение идёт через RPC ноды блокчейна, к которому хотим подключиться. На сайте https://chainlist.org/ можно найти подходящую RPC. В столбце RPC Server Address находится сам url адрес, по которому будет происходить подключение. В столбце Latency находится пинг (чем меньше, тем лучше). В столбце Privacy вы можете увидеть информацию о том, собирает нода данные или нет.

С помощью кода ниже мы подключаемся к блокчейну и получаем переменную w3 с помощью которой будет взаимодействовать с блокчейном.

from web3 import Web3

arbitrum_rpc = 'https://rpc.ankr.com/arbitrum/'

w3 = Web3(provider=Web3.HTTPProvider(
    endpoint_uri=arbitrum_rpc
))

2. Ещё нам потребуется переменная для управления нашим аккаунтом (кошельком). С помощью этой переменной мы будет подписывать транзакции и взаимодействовать с нашим кошельком. Для взаимодействия с кошельком, нужно предварительно получить приватный ключ из кошелька (сделать это можно в расширении метамаска).

private_key = ''
account = w3.eth.account.from_key(private_key=private_key)

3. Следующий шаг: сделать транзакцию через кошелек и открыть её в любом сканере (в случае arbitrum, это https://arbiscan.io/)

Из сканера нам нужно узнать:

  • To - на какой контракт отправлена транзакция
  • Value - сколько нативной монеты отправили с транзакцией
  • Input Data - название функции и параметры, с которыми была отправлена транзакция

Можно декодировать Input Data с помощью кнопки Decode Input Data и посмотреть на параметры в человеческом виде.

Name - название параметра (берётся из abi);

Type - тип данных у переменной;

Data - значение, параметра.

Есть несколько способов разобраться в том что означает каждый из параметров.

  1. Просто по логике. Обычно, по названию переменных и по их значению можно догадаться что они означают.
  2. Найти документацию к проекту с описанием методов.
  3. Найти на гите готовое решение и подсмотреть реализацию оттуда.

В данном случае:

fromToken - токен, который будем свапать (ETH)

toToken - токен, на который будем свапать (USDC)

fromAmount - сколько ETH (в данном случае) будем свапать

minToAmount - сколько мы должны получить второго токена (USDC)

to - на какой адрес зачислить токены (адрес нашего кошелька)

rebateTo - тут тоже адрес нашего кошелька (на скрин не поместился этот параметр)

4. Подготовить все данные о контрактах. У каждого контракта есть адрес и abi. Abi это по сути список всех функций и их параметров, которые есть в контракте. Для начала получим данные о контракте USDC.

  • Переходим на вкладку Contract
  • Если на этой вкладке видим Proxy контракт, то переходим на него
  • Идём на вкладку Code и ищем abi.

Здесь копируем аби и сохраняем его в json файл в нашей программе.

Я у себя создал файл data/abis/default_token.json. Назвал файл default_token так как 99.9% токенов реализуют интерфейс ERC-20 (фраза для гугления) и поэтому abi будет совпадать.

Также я советую перед тем как вставлять abi в файл, прогнать его через сайт https://jsonformatter.curiousconcept.com чтобы привести его в читабельный вид.

5. Вернемся к коду и занесём полученную информацию в строчки кода:

import json 

usdc_contract_address = Web3.to_checksum_address('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8')
usdc_contract_abi = json.load(open('data/abis/default_token.json'))
usdc_contract = w3.eth.contract(address=usdc_contract_address, abi=usdc_contract_abi)

woofi_contract_address = Web3.to_checksum_address('0x9aEd3A8896A85FE9a8CAc52C9B402D092B629a30')
woofi_contract_abi = json.load(open('data/abis/woofi.json'))
woofi_contract = w3.eth.contract(address=woofi_contract_address, abi=woofi_contract_abi)

Пара слов о том, что тут произошло.

Мы используем функцию Web3.to_checksum_address() из библиотеки web3.py. Данная функция по сути приводит адрес в правильный регистр (автоматически определяет какие буквы должны быть строчными, а какие заглавными).

Далее мы открываем и читаем файл с abi с помощью функции open(). Прочитанный файл попадает в функцию json.load() для того чтобы автоматически подогнать под json формат.

Ну и в последнюю очередь мы создаём “пульт управления” контрактом с помощью функции w3.eth.contract().

Также кроме контракта USDC я добавил данные о контракте WooFi. Помните мы выше рассматривали транзакцию, отправленную ручками через метамаск? Нам нужен параметр “to”. Этот параметр хранит информацию о том на какой контракт ушла транзакция.

6. Теперь накинем несколько переменных:

eth_address = Web3.to_checksum_address('0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE')
eth_price = 1905
eth_amount = 0.0006
eth_decimals = 18

slippage = 0.5
min_to_amount = eth_price * eth_amount * (1 - slippage / 100)

eth_address - адрес токена для свапа.

eth_price - цена эфира (цену лучше получать по API динамически. Но для упрощения кода я её захардкодил).

eth_amount - количество эфира для свапа.

eth_decimals - decimals (лучше подгуглить что это. Но если коротко, то блокчейн не работает с дробными числами и для перевода дробного числа в целое используется это значение. Например, чтобы перевести 0.0006 ETH в целое число, нужно сделать следующую операцию: 0.0006 * 10^decimals = 0.0006 * 10^18 = 600000000000000.

slippage - slippage, который используется во всех свапалках (я указываю в процентах).

min_to_amount - тут мы считаем сколько должны получить USDC в худшем случае. Если свапалка не сможет обеспечить нам данное количество USDC, транзакция зафейлится (чтобы понят как я считаю, советую подставить цифры в формулу и посмотреть что будет).

7. decimals для USDC получим прямо из контракта

С помощью такой конструкции мы можем вызывать READ функции контракта.

usdc_contract - наш контракт.

functions - атрибут контракта.

decimals - название вызываемой функции (в скобки передаём параметры, если надо).

call - вызов функции.

8. Переведём eth_amount в целое число. И то же самое проделаем с USDC:

eth_amount = int(eth_amount * 10 ** eth_decimals)
usdc_amount = int(min_to_amount * 10 ** usdc_decimals)

9. Теперь мы готовы указать все аргументы транзакции

tx_args = woofi_contract.encodeABI('swap',
                                   args=(
                                       eth_address,
                                       usdc_contract.address,
                                       eth_amount,
                                       usdc_amount,
                                       account.address,
                                       account.address,
                                   ))

Функция encodeABI() первым аргументом принимает название WRITE функции, которую хотим вызвать. Вторым аргументов принимает список или кортеж (советую кортеж) аргументов транзакции.

10. Подготовим транзакцию к отправке в блокчейн

tx_params = {
    'chainId': w3.eth.chain_id,
    'gasPrice': w3.eth.gas_price,
    'nonce': w3.eth.get_transaction_count(account.address),
    'from': account.address,
    'to': woofi_contract.address,
    'data': tx_args,
    'value': eth_amount
}

Это стандартные параметры, которые будут совпадать в любой транзакции.

chainId - id сети

gasPrice - текущая цена газа

nonce - номер транзакции

from - адрес кошелька с которого отправляется транзакция

to - адрес контракта, куда отправляется транзакция

data - закодированные названия функци и аргументы с помощью функции encodeABI()

value - Сколько нативной монеты отправили с транзакцией (при свапе нативной монеты обычно совпадает с её количеством). Если value в транзакции 0, то можно его не включать в этот словарь.

P.S. Здесь мы отправляем Legacy транзакцию и они будет немного отличаться от транзакции, отправленной через кошелёк. Правильнее было бы отправить EIP-1559 транзакцию. Это делается достаточно просто (пару ключей словаря заменить надо). Как это сделать я подробно рассказывал в этом видео.

11. Высчитываем gasLimit

tx_params['gas'] = w3.eth.estimate_gas(tx_params)

Газ рассчитывается автоматически с помощью функции w3.eth.estimate_gas(). В функцию мы передаём параметры нашей транзакции. А результат работы функции добавляем в словарь tx_params по ключу gas.

Это одна из самых полезных функций так как если вы неправильно указали параметры, все ошибки вы увидите именно в этот момент и не потратите деньги. А если газ в этот момент посчитался правильно, то можно пробовать запустить транзакцию.

12. Подписываем транзакцию приватным ключом и отправляем

sign = w3.eth.account.sign_transaction(tx_params, account.key)
tx = w3.eth.send_raw_transaction(sign.rawTransaction)

Тут даже не о чем говорить. Всё происходит автоматически с помощью встроенных функций w3.eth.account.sign_transaction() и w3.eth.send_raw_transaction().

13. Ждём выполнения транзакции

tx_data = w3.eth.wait_for_transaction_receipt(tx, timeout=200)

14. Проверяем статус транзакции и выводим результат статус транзакции и её хеш в консоль

if 'status' in tx_data and tx_data['status'] == 1:
    print(f'transaction was successful: {tx.hex()}')
else:
    print(f'transaction failed {tx_data["transactionHash"].hex()}')

Полный код:

from web3 import Web3
import json

private_key = ''
arbitrum_rpc = 'https://rpc.ankr.com/arbitrum/'

w3 = Web3(provider=Web3.HTTPProvider(
    endpoint_uri=arbitrum_rpc
))

account = w3.eth.account.from_key(private_key=private_key)

usdc_contract_address = Web3.to_checksum_address('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8')
usdc_contract_abi = json.load(open('data/abis/default_token.json'))
usdc_contract = w3.eth.contract(address=usdc_contract_address, abi=usdc_contract_abi)

woofi_contract_address = Web3.to_checksum_address('0x9aEd3A8896A85FE9a8CAc52C9B402D092B629a30')
woofi_contract_abi = json.load(open('data/abis/woofi.json'))
woofi_contract = w3.eth.contract(address=woofi_contract_address, abi=woofi_contract_abi)

eth_address = Web3.to_checksum_address('0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE')
eth_price = 1905
eth_amount = 0.0006
eth_decimals = 18

slippage = 0.5
min_to_amount = eth_price * eth_amount * (1 - slippage / 100)

usdc_decimals = usdc_contract.functions.decimals().call()

eth_amount = int(eth_amount * 10 ** eth_decimals)
usdc_amount = int(min_to_amount * 10 ** usdc_decimals)

tx_args = woofi_contract.encodeABI('swap',
                                   args=(
                                       eth_address,
                                       usdc_contract.address,
                                       eth_amount,
                                       usdc_amount,
                                       account.address,
                                       account.address,
                                   ))

tx_params = {
    'chainId': w3.eth.chain_id,
    'gasPrice': w3.eth.gas_price,
    'nonce': w3.eth.get_transaction_count(account.address),
    'from': account.address,
    'to': woofi_contract.address,
    'data': tx_args,
    'value': eth_amount
}

tx_params['gas'] = w3.eth.estimate_gas(tx_params)

sign = w3.eth.account.sign_transaction(tx_params, account.key)
tx = w3.eth.send_raw_transaction(sign.rawTransaction)

tx_data = w3.eth.wait_for_transaction_receipt(tx, timeout=200)
if 'status' in tx_data and tx_data['status'] == 1:
    print(f'transaction was successful: {tx.hex()}')
else:
    print(f'transaction failed {tx_data["transactionHash"].hex()}')

В этом примере мы рассмотрели как написать код для автоматизации свапа ETH → USDC на WooFi. Пример иллюстрирует как работать с блокчейном, а именно, где брать всю необходимую информацию, как обращаться к READ и WRITE функциям контракта и как отправить и проверить транзакцию.

Для практики советую попробовать написать обратный свап USDC → ETH. В этом примере перед отправкой транзакции нужно будет сделать транзакцию approve.

Эти знания позволят вам по аналогии автоматизировать множество действий с вашего кошелька, но остаётся еще куча подводных камней, об которые можно запнуться. Любые вопросы вы можете смело задать в чате.