Семен Березовский, ментор курса «Python для веб-разработки» работает в сфере блокчейн — это отдельное обширное направление в разработке. Даже синьору с многолетним опытом будет непросто влиться в сферу: для этого нужно разбираться в устройстве технологии. Семен рассказывает, какие особенности есть у блокчейнов, зачем нужны смарт-контракты, консенсусы и чем разработчику полезны pet-проекты.
Что такое блокчейн
Блокчейн-разработчик создает децентрализованные платформы, протоколы, смарт-контракты. Разберемся с основными терминами в этой сфере.
Блокчейн — это цепочка блоков, которые взаимосвязаны друг с другом. Это децентрализованная база данных, которую нельзя удалить или изменить, в нее можно только добавить новые записи. Технология блокчейн — это своего рода криптовалютный реестр: при пересыле цифровых денег в блокчейне делают запись о том, что сумму отправили.
Блок в блокчейне состоит из предыдущего звена, временной отметки и данных о транзакциях — кто кому сколько и когда переводил. Криптовалюту можно получить как награждение за майнинг — это создание новых блоков в блокчейне. Обычно для этого проводят вычисления, например перебирают параметры, чтобы найти подходящий блокчейну хэш. Хэш — это строка из букв и цифр, в которой зашифровано передаваемое сообщение.
Майнинг завязан на консенсусах. Это независимые регуляторы, алгоритмы, которые помогают подтверждать, что именно вы нашли нужный хэш для блока и что он подходит. Это можно сравнить с тем, как ребенок говорит родителям, что выучил стих, а родители просят его наизусть рассказать случайную строку. И если ребенок рассказывает, то, скорее всего, он и правда всё выучил.
При майнинге на видеокартах, когда производят математические вычисления, руководствуются доказательством работы — proof of work (его используют при майнинге биткоина). Нужно доказать, что потрачено достаточное количество времени на вычисления, что строку не просто угадывали на листочке.
Блокчейны майнятся по-разному. Например, криптовалюта Chia майнится на жестких дисках, на которых выделяется место под хэши. Когда происходит майнинг, блокчейн проверяет, выделен ли заявленный объем памяти. Это доказательство пространства (proof of space).
Перед созданием блокчейна разработчик выбирает, на чем будет основываться технология и как будет майниться. Нельзя майнить бесконечно. Как правило, у криптовалюты есть определенное количество монет, которое она выпустит: последний биткоин будет намайнен в 2140 году.
Еще один знаменитый блокчейн — Ethereum, на котором можно создавать новые токены (цифровая «ценная бумага»). Их структуру и функциональность описывают с помощью смарт-контрактов. Это программа, где прописаны условия сделки и цифровые подписи сторон. Когда выполняется определенное условие, прописанное в контракте, умный контракт автоматически принимает решение о завершении сделки и выдаче ценных бумаг. Например, можно сделать свадебный контракт, который в случае развода распределит деньги по участникам в процентном соотношении.
Смарт-контракты пишутся на узкоспециализированных языках программирования, которые не предназначены для написания других программ. Это своего рода фреймворки, которые упрощают жизнь: не нужно изучать С++, достаточно знать какой-либо из языков. Например, в Ethereum используются языки Solidity, Vyper. Для Chia Network существует Chia LISP.
Чем я занимаюсь
Я работаю в компании Rock’n’Block. Мы разрабатываем продукты и внедряем программное обеспечение в сфере блокчейн, чаще работаем с заказами на токены. Кроме этого, у нас есть большой внутренний проект — MyWish. Это платформа для создания смарт-контрактов, которая позволяет человеку, не знакомому с блокчейном и разработкой, создавать свои смарт-контракты с помощью виджетов на сайте. Он просто заполняет нужные поля и получает смарт-контракт.
Если клиент просит создать токен, то мы разрабатываем смарт-контракт и по необходимости веб-интерфейс. В смарт-контракте мы прописываем сроки, на которые токен блокируется, на каких условиях его можно разблокировать раньше времени и другие нюансы. Можно прописывать любые условия: например, собирать налоговую информацию компании, чтобы в дальнейшем избежать мошенничества или коррупции. Все ограничено только фантазией заказчиков.
Также в компании много NFT-проектов — это уникальные невзаимозаменяемые токены. Они могут быть очень похожи друг на друга и отличаться одним незначительным элементом. Его характеристики также можно изменять и добавлять новые, но подменять их нельзя. Чаще всего это картинки в блокчейне. Многие используют их для игр: это может быть уникальный персонаж в игре, которым играет только тот, у кого есть токен.
Обычно разработчики работают с логикой смарт-контракта или задачами, близкими к backend-разработке: передача сообщений на frontend, администрирование. Чаще всего я занимаюсь реализацией дополнительного функционала, который не может быть реализован внутри контракта. В контракте описан скелет токена, а интересная логика реализована на backend.
Например, для NFT-проекта нужно создать 10 тысяч случайных NFT-картинок, состоящих из пяти слоев. Из пяти папок со слоями мы реализуем генерацию этих картинок. С помощью Python-библиотеки Pillow для работы с изображениями мы прописываем приоритеты, информацию, которую нужно внести в блокчейн вместе с картинкой, случайным образом подставляем их к изображению при генерации и в итоге получаем 10 тысяч картинок с metadata (любые данные, которые нужно привязать к NFT, например характеристики персонажа, если NFT будут использовать в игре), прикрепленными к изображению.
Взаимодействовать с токенами в Ethereum можно через библиотеки Web3.py в backend и Web3.js во frontend. С их помощью можно прописывать в коде команды, чтобы получить, к примеру, последний блок, посмотреть информацию в этом блоке. Также можно взять адрес контракта, его ABI (функции и переменные контракта) и на Python вызывать функции контракта, передавать параметры, прописанные в них.
Читайте также: Что выбрать: frontend, backend или fullstack?
Также на backend приходят данные, которые нужно подписать приватным ключом и отдать на frontend, который дальше работает с блокчейном и контрактом. В результате получается зашифрованная хэш-строка, которую можно прочитать или расшифровать только с помощью этого ключа. Подменить или взломать его очень сложно.
Какие навыки нужны блокчейн-разработчику
Джуну для работы нужно знать:
- Python;
- фреймворк Django для разработки веб-приложений;
- библиотеки для работы с нодами блокчейна, например Web3.py для Ethereum;
- системы управления SQL и NoSQL базами данных (PostgreSQL, Redis);
- инструменты автоматизации и управления жизненным циклом ПО (Docker);
- Celery — система для выполнения задач из очереди по расписанию.
Конечно, стоит изучить блокчейн. У таких технологий есть white paper — документ, где разработчик прописывает устройство блокчейна, необходимые формулы и графики.
Раньше я увлекался акциями, во многом их устройство схоже с криптовалютой. Практические примеры помогают вникнуть в суть.
Совет: Если вы только начинаете разрабатывать, то стоит придумать pet-проект и вести его параллельно. Когда вы изучите новую технологию, то вам будет проще и интереснее отрабатывать ее на своем проекте. Вы лучше закрепите полученные знания и будете создавать то, что вам нравится. Я для практики разрабатывал голосовой помощник и сайт с заметками.
Частые задачи в блокчейн-разработке
Новичку в первые месяцы работы обычно дают несложные задачи, которые не сильно влияют на проект: протестировать, исправить неработающую фичу. Потом он вливается в проект и разрабатывает что-то с более опытным разработчиком. Познакомившись с реализованными проектами, с документацией, можно просить у техлида индивидуальную задачу. В какой-то момент они начнут повторяться, и тогда вы поймете, что умеете делать уже очень много.
В блокчейн-разработке несложные задачи разнятся от проекта к проекту. Например, можно обработать информацию на backend или записать ее в базу данных. Одна из базовых задач — возвращать во frontend список купленных за все время токенов. Эта информация записана в смарт-контракте, она дополняется, когда происходит покупка. В этот момент нужно «вытаскивать» метод смарт-контракта, чтобы получить число, которое можно отдать во frontend.
Также с внешнего API можно забирать курсы валюты и рассчитывать курс доллара или евро к токену. Цена Ethereum постоянно меняется, поэтому часто приходится корректировать курс на backend, чтобы отдавать правильный расчет на frontend.
Лучше изучать несколько языков программирования. Например, можно начать с Solidity, чтобы в дальнейшем работать со смарт-контрактами в Ethereum. Это упрощенная версия JavaScript. Либо выбрать один из других высокоуровневых языков, на котором пишут смарт-контракты.