Я использовал для этого блокчейна PoW-систему из-за стремления к простоте. Большинство современных блокчейнов используют гораздо лучшую систему, основанную на механизме консенсуса «доказательство доли владения» (Proof-of-Stake, PoS), или одну из многих усовершенствованных систем такого типа.
Время на прочтение
В последнее время криптовалюты и блокчейн-технологии стали невероятно популярными. Сегодня я расскажу о моём подходе к созданию блокчейн-платформы на JavaScript с использованием всего 60 строк кода. Я — начинающий блокчейн-разработчик, поэтому если я в чём-то ошибаюсь — поправьте меня в комментариях.
Вот исходный код моего проекта на GitHub.
Хочу сказать, что многое узнал о блокчейне из материалов YouTube-канала Simply Explained. Я не написал бы эту статью, если бы не серия учебных видео по блокчейну с этого канала. Я, кроме того, почерпнул кое-что из этой статьи. Рекомендую эти материалы всем, кому интересна тема блокчейна.
Доводилось ли вам пользоваться блокчейн-технологиями?
Хотя я собирался повторить структуру того материала, чтобы тем же путём, что и его автор, прийти к готовому коду, я, всё же, включу сюда и кое-что своё. В частности, я предпочитаю другое определение блокчейна. Оно звучит так: «Блокчейн — это система регистрации информации, выполняемой таким способом, который усложняет или делает невозможным изменение информации, взлом системы или мошенничество с информацией».
В методе, используемом для проверки блокчейна, мы пользуемся функцией range(). В этом — серьёзное отличие нашего кода от кода JS-проекта. И, кроме того, так как мы в Python не пользуемся константами, тут мы просто применяем обычные переменные.
Нам нужно знать о том, корректны ли данные, хранящиеся в блокчейне. Поэтому нам нужен метод, который проверяет хеши блоков. Блокчейн корректен в том случае, если хеши блоков равны тому, что возвращает метод хеширования, и если свойство блока prevHash равно хешу предыдущего блока.
Создадим новый файл, index.js, он будет играть роль точки входа в систему.
Воспользуемся только что созданным блокчейном. Я назвал его JeChain.
Сначала экспортируем необходимые классы:
Импортируем их в index.js и приступим к испытанию:
Запуск системы должен выглядеть примерно так:
Первый блок — это первичный блок, а второй — это тот блок, который мы добавили в блокчейн.
Как я уже говорил, блокчейн — это список блоков. Поэтому простейший блокчейн можно описать с помощью следующего класса.
И я, для удобства, создал функцию, которая выдаёт самый последний блок:
Теперь нам нужен механизм добавления блоков в блокчейн:
Когда я читал статью про блокчейн на JavaScript, мне было интересно познакомиться с идеями о блокчейн-разработке, которые отличаются от тех, что мне уже известны. А как только я начал читать код, мне захотелось сопоставить его с аналогичным Python-кодом, чтобы ещё и разобраться с его отличиями от кода, написанного на JavaScript.
Цель этого материала заключается в том, чтобы выявить отличия языков. Его можно считать Python-дополнением к исходной статье.
Несмотря на то, что исходная статья появилась на свет после того, как её автор ознакомился с примером блокчейн-разработки на Python, мне хотелось написать Python-код, который как можно более точно воспроизводит JavaScript-код из статьи. Это позволит сопоставить реализацию блокчейна на разных языках.
Я, кроме того, собираюсь сделать так, чтобы моя реализация блокчейна, как и в статье про JavaScript, тоже поместилась бы в 60 строк.
Классы, представляющие собой блокчейн, похожи в обоих языках.
Преобразование числа в строку выполняется в Python с помощью функции str(), а не с помощью метода toString(), как делается в JavaScript.
Похоже выглядит и метод для получения самого свежего блока. Только тут, в отличие от JavaScript-проекта, для выяснения длины цепочки блоков, вместо свойства length используется функция len().
Реализацию алгоритма sha256 я взял из библиотеки hashlib. В JS-проекте она берётся из пакета crypto.
В методе getHash всё начинается с пустого хеша, который мы формируем с использованием данных, хранящихся в блоке. Хеш вычисляется на основе хеша предыдущего блока, отметки времени и данных, хранящихся в блоке. Всё это преобразуется в последовательности байтов с помощью метода .encode(‘utf-8’).
Результаты работы этого кода должны выглядеть примерно так:
Итак, у нашего объекта будут поля timestamp и data, но он ещё нуждается в иммутабельности. Добиться этого можно, используя хеш-функцию, с помощью которой обрабатывают все остальные свойства блока. Советую вам почитать о хеш-функциях в Википедии, так как они играют ключевую роль в блокчейн-разработке. В целом их работу можно описать так: они принимают сообщения и выводят «хешированные» сообщения фиксированной длины. Даже небольшое изменение входных данных приведёт к появлению совершенно других выходных данных.
Я применяю алгоритм sha256. Для того чтобы реализовать хеширующую функцию — я собираюсь просто воспользоваться возможностями стандартного Node.js-пакета crypto:
Вышеприведённый код даст нам то, что нужно. Но если вы хотите разобраться с тем, как именно он работает — взгляните на официальную документацию Node.js по классу Hash.
На данном этапе работы у нас должно получиться нечто вроде следующего кода:
Всякий раз, когда что-то в содержимом блока меняется, хеш-функция выдаёт результат, совершенно не похожий на предыдущий. Это поможет нам в обеспечении иммутабельности блоков.
Свойство prevHash тоже играет большую роль в деле обеспечения иммутабельности блоков. Оно позволяет обеспечить то, что блок останется неизменным всё то время, пока существует блокчейн, содержащий этот блок. Оно содержит хеш предыдущего блока, поэтому можно гарантировать иммутабельность этого блока, так как даже небольшое изменение его содержимого приведёт к изменению результатов вызова функции getHash текущего блока. Сейчас, как видите, это свойство не содержит никакого значения, но мы ещё к этому вернёмся.
Блокчейн сейчас достаточно распространенное понятие. Однако не все, кто интересуются трендами, всегда могут разобраться в них. Поэтому для ввода в тему приведем пример. Рассмотрим блокчейн как медицинскую карту, расположенную на сайте какой-либо больницы.
Вся указанная в карте информация сопровождается датой и временем изменения. В данном случае каждая такая запись представляет собой один из многочисленных блоков блокчейна. Если вы выступаете в качестве доктора, то у вас имеется закрытый ключ, с помощью которого вы можете получать доступ к карте и создавать новые блоки. А если вы пациент, то у вас открытый ключ — благодаря ему вы можете просматривать все блоки, но не можете их менять.
Говоря короче, блокчейн абсолютно независим, прозрачен и безопасен. Благодаря такой системе снижаются затраты и риски с пропорциональным ростом безопасности транзакций и их открытости. Это особенно удобно против таких компаний, как инструмент для торговли биткоинами Bitcoin Rush, который, как утверждают многие, является мошенничеством, поскольку блокчейн может четко определить, является ли что-то реальным или нет.
Блокчейн — это цепочка, содержащая различные блоки, соединенные вместе.
Каждый блок содержит 3 части информации:
В зависимости от использования, данные, которые надежно хранятся в блоке, зависят от типа блокчейна. Например, в блокчейне Ethereum в данных хранится информация, относящаяся к транзакции: сумма переведенных денег и данные двух людей, участвующих в транзакции.
Помните, что блокчейн — это неизменяемая, последовательная цепочка записей, называемых блоками. Они могут содержать данные о транзакциях, файлы данных или любые другие данные, которые вам нравятся. Но важно то, что они соединены вместе с помощью хэшей.
Хэш можно представить как цифровой отпечаток пальца. Он используется для идентификации блока и его данных. Что важно в хэшах, так это то, что это уникальный буквенно-цифровой код, обычно около 64 символов. Когда блок создается, создается и его хэш. Когда блок изменяется, хэш также изменяется. Таким образом, хэши являются основополагающими, если вы хотите обнаружить любые изменения, внесенные в блок.
Хэш предыдущего блока
Храня хэш предыдущего блока, вы можете увидеть, как каждый блок связан между собой, образуя блокчейн. Именно это делает блокчейн настолько безопасным.
По сути, блокчейн — это просто журнал действий или транзакций, поэтому он подходит для валюты. Он также децентрализован, что означает, что ему не нужен главный сервер для источника авторитета. Каждый узел в системе имеет полную копию всего блока, поэтому, если один узел отличается от всех остальных, есть возможность определить, какой из них является «настоящим» журналом.
Существует множество существующих блокчейнов, которые могут удовлетворить ваши потребности, но создание собственного блокчейна — это отличный способ по-настоящему понять, как работает технология.
Создание собственного блокчейна обеспечивает максимальную гибкость. Вы получаете:
Создание блокчейна не самый простой процесс. Предлагаем рассмотреть по порядку пункты, которые потребуется учесть для создания своей собственной децентрализованной сети.
Есть 3 вещи, в которых блокчейн может работать очень хорошо:
Аутентификация и верификация информации
Включает в себя неизменяемое хранение, цифровые подписи и шифрование. Данные или информация практически в любом формате могут быть сохранены в сети блокчейн. Блокчейн может создавать пару открытый-частный ключ, а также использоваться для разработки и проверки цифровых подписей.
Управление интеллектуальными активами
Включает в себя выпуск, оплату, обмен, депонирование и выбытие. Смарт/криптоактив — это токенизированная версия реального актива, например, золота, серебра, нефти, земли.
Функциональность смарт-контрактов используется в технологии блокчейн для выполнения соглашения в цифровом виде и снижения риска потерь.
Оригинальный блокчейн, на котором работает биткоин, использовал доказательство работы в качестве механизма консенсуса.
Но сегодня существует множество блокчейн-платформ, которые предлагают группу алгоритмов и механизмов консенсуса, таких как:
Сегодня существует множество систем распределенных бухгалтерских книг, и большинство из них являются бесплатными и с открытым исходным кодом. В зависимости от алгоритмов и механизма консенсуса, которые вы выбрали, вам необходимо выбрать наиболее подходящую платформу блокчейна.
Вот некоторые из наиболее популярных платформ:
Вы также должны решить, будет ли ваша блокчейн-сеть или приложение построено в разрешенной сети или в сети без разрешений.
Любой желающий может присоединиться и приступить к верификации. Наиболее известные примеры — сети Bitcoin и Ethereum.
В этом случае владелец сети определяет, кто может присоединиться к его сети, и только нескольким участникам разрешается проверять блоки. Механизмы консенсуса могут быть такими же, как и в сети без разрешений, или могут быть полностью уникальными.
Блокчейн-решения могут быть частными, публичными или гибридными.
Еще один момент, который необходимо учитывать на этом этапе — будут ли узлы работать в облаке, на месте или и там, и там. Далее следуют вопросы конфигурации оборудования, такие как процессоры, память и размер диска. Также необходимо выбрать базовую операционную систему.
Большинство блокчейн-платформ требуют очень тщательно продуманной конфигурации следующих элементов:
Некоторые элементы могут быть изменены во время выполнения, но некоторые нет, поэтому это очень важный шаг.
Большинство неизменяемых блокчейн-платформ поставляются с готовыми API, а некоторые — нет.
Большинство API, которые вам потребуются для вашего проекта разработки:
На этом этапе вам нужно будет выбрать внешний интерфейс и языки программирования. Также необходимо выбрать внешние базы данных и серверы (включая веб-серверы, FTP-серверы, почтовые серверы).
Вы можете чрезвычайно усилить мощь вашего блокчейн-решения, интегрировав ИИ, биометрию, чат-боты, облако, когнитивные сервисы, контейнеры, аналитику данных, IoT и ML.
Без сомнения, технология блокчейн, используемая с умом, может помочь обществу в решении целого ряда насущных проблем. Когда технология блокчейн появилась, многие люди с завышенными деловыми качествами начали считать ее глобальным средством. Однако большинство областей действительно могут извлечь выгоду из технологии блокчейн.
Многие исследования и отчеты говорят о том, что блокчейн выглядит самым быстрорастущим навыком на платформе, оставляя позади такие навыки, как Machine Learning и другие. Это привело к росту спроса на разработчиков блокчейна.
Многочисленные инструменты разработки блокчейна были представлены для облегчения процесса разработки приложений для блокчейна. Если вы заинтересованы в разработке блокчейн-проекта, вам следует знать об инструментах разработки блокчейн, используемых опытными разработчиками блокчейн.
Вот некоторые из широко используемых инструментов разработки блокчейна:
Технология блокчейн находит широкое применение во многих отраслях промышленности, благодаря высокому уровню безопасности, который она обеспечивает (более надежные и безопасные бизнес-операции). От корпоративных фирм до промышленных банков, разработчики блокчейна одинаково востребованы везде.
Тысячи проектов блокчейн находятся в разработке или уже разработаны и развернуты в сети. Стартапы, компании ищут новые блокчейн бизнес-идеи или пытаются улучшить то, что уже создано другими компаниями, и это только начало того, как технология блокчейн управляет цифровым миром.
В зоне разработки есть несколько наиболее популярных языков, которые используются в блокчейне:
Форкинг существующего блокчейна или клонирование популярных блокчейн-платформ.
Способ разработки приложения на основе блокчейна заключается в том, чтобы разработать его с использованием популярной существующей блокчейн-платформы. Эти блокчейн-платформы имеют открытый исходный код, поэтому вы можете форкнуть их репозитории и развернуть код на собственных серверах.
К числу популярных платформ относятся Ethereum, Hyperledger Fabric и Hyperledger Sawtooth. Каждая из них имеет определенные характеристики, которые могут помочь вам принять решение.
Многие отрасли — электронная коммерция, страхование, медицина, образование, недвижимость, логистика, цепочка поставок, финансы, контроль качества, используют блокчейн для решения существующих бизнес-задач, среди которых безопасность, стоимость и эффективность.
Блокчейн — это децентрализованная система P2P, которая может дополняться и обновляться и состоит из блоков, часто связанных в цепочку. Каждый блок содержит информацию о предыдущем старом блоке. Данные блоков полностью копируются и хранятся на разных системах без привязки к одному определенному серверу, что делает невозможной подмену записей.
Стоимость блокчейн-проектов различается в зависимости от того, что вам нужно.
Обычно блокчейн-проекты могут быть двух видов, а именно:
Если вы создаете децентрализованную бизнес-модель, в рамках которой вы обеспечите транзакции «Peer to peer» (P2P) с использованием криптовалют, вы, скорее всего, создадите DApp.
Стоимость разработки блокчейн-приложений также зависит от следующих факторов:
Стоимость платформы или приложения блокчейн варьируется от отрасли к отрасли. Например, вам может потребоваться приложение для образования, управления цепочками поставок, здравоохранения, недвижимости, образования и многих других сфер бизнеса. Стоимость приложения будет зависеть от сложности проекта.
Сложность блокчейн-проекта зависит от проблем, которые приложение хочет решить.
Вот несколько примеров блокчейн-проектов в зависимости от уровня сложности.
Блокчейн-приложения низкой сложности
Платежные приложения с несколькими шлюзами, приложение для разработки смарт-контрактов и многое другое.
Блокчейн-приложения средней сложности
Децентрализованные приложения, построенные на различных платформах блокчейн, полудецентрализованные приложения, гибридные блокчейн-приложения, блокчейн dApps.
Блокчейн-приложения высокой сложности
Разработка блокчейн-платформы с нуля, полная децентрализованная сеть.
Как и любой другой процесс разработки, разработка блокчейн-платформы или приложения также требует от вас определения масштаба и цели проекта.
Шаги, которые предшествуют фактической разработке:
Срок реализации блокчейн-проекта зависит от потребностей приложения. Проект начинается с PoC, который обычно занимает 2-3 недели. После завершения PoC требуется 4-5 недель, чтобы создать минимально работоспособный продукт с минимальным набором функций.
Запуск блокчейн-приложения в сети занимает около 2-3 месяцев в зависимости от бизнес-требований клиента.
Что такое программное обеспечение блокчейн?
Программное обеспечение блокчейн похоже на любое другое программное обеспечение. Первым в своем роде был Bitcoin, который был выпущен как программное обеспечение с открытым исходным кодом, что сделало его доступным для использования или изменения любым желающим. В экосистеме блокчейна предпринимаются самые разнообразные усилия по совершенствованию исходного программного обеспечения Bitcoin. Ethereum имеет собственное программное обеспечение блокчейн с открытым исходным кодом. Некоторые программы блокчейн являются собственными и недоступны для общественности.
Что такое блокчейн-приложение?
Блокчейн-приложения сравнимы с обычными программными приложениями, за исключением того, что они используют децентрализованную архитектуру и криптоэкономические системы для повышения безопасности, укрепления доверия, токенизации активов и разработки новых сетевых стимулов.
Что такое революция блокчейна?
Блокчейн считается революционной технологией благодаря своей способности защищать личную информацию, сокращать число посредников, разблокировать цифровые активы и потенциально открывать глобальную экономику для миллионов участников. Иногда ее называют «машиной доверия», технология блокчейн обеспечивает прозрачность и безопасность цифровых сетей во многих отраслях. Во многих отношениях революцию в блокчейне можно считать революцией в области доверия.
Что такое децентрализованные финансы (DeFi)?
Алгоритм доказательства выполнения работы
Создадим свойство, в котором будет храниться сложность:
self.difficulty = 1
Подготовка среды разработки
Для этого проекта мы будем использовать Node.js, поэтому вам, если у вас эта платформа не установлена, понадобится её установить.
Я применяю объектно-ориентированный стиль программирования, поэтому ожидаю от читателя хотя бы базовых знаний в этой сфере.
Оказывается, что система поддержания иммутабельности блоков, основанная на полях hash и prevHash, имеет определённые недостатки. Так, кто-то может модифицировать некий блок и пересчитать хеши всех следующих блоков для получения вполне корректной цепочки блоков. Кроме того, нам хотелось бы реализовать некий механизм, позволяющий пользователям приходить к консенсусу по поводу единой хронологической истории цепочки блоков, расположенных в правильном порядке, соответствующем порядку выполнения транзакций. Bitcoin и многие другие криптовалюты включают в себя системы, основанные на алгоритме доказательства выполнения работы (Proof-of-Work, PoW), направленные на решение этой проблемы.
Подобная система направлена на то, чтобы значительно увеличить объём работ, необходимых для создания нового блока. Если нужно модифицировать некий блок — понадобится выполнить работу, необходимую для создания этого блока и всех блоков, которые идут за ним. Это требует поиска значений, которые, после хеширования, дают результат, начинающийся с определённого количества нулевых битов. Речь идёт о так называемом значении nonce (number that can only be used once — число, которое может быть использовано один раз), а количество нулевых битов в начале такого числа известно как «сложность». По мере увеличения сложности задача добычи (майнинга, mining) нового блока становится всё сложнее и сложнее. Это позволяет предотвратить модификацию предыдущих блоков, так как тому, кто хотел бы модифицировать некий блок, пришлось бы выполнить работу, необходимую для создания этого блока и всех блоков, которые идут за ним. А это практически невозможно.
Из-за того, что даже маленькое изменение данных блока ведёт к появлению совершенно нового хеша, мы просто снова и снова инкрементируем nonce до тех пор, пока хеш не окажется таким, как нам нужно.
(Учтите, что Bitcoin и другие блокчейн-системы используют другой способ настройки сложности, но мы тут, как уже говорилось, стремимся к простоте.)
this.difficulty = 1;
В него записано число 1, оно должно меняться в зависимости от количества добытых блоков.
Теперь каждый блок, прежде чем его можно будет добавить в блокчейн, нужно добыть.
Сложность и время блока
Сложность Bitcoin меняется после добычи каждых 2016 блоков. Для вычисления сложности используется следующая формула:
старая сложность * (2016 блоков * 10 минут) / время добычи предыдущих 2016 блоков
Теперь займёмся программированием!
Для начала нужно задать время блока. Я использовал тут значение 30 секунд, то есть — 30000 миллисекунд. Я использую именно миллисекунды, так как такое выражение времени лучше подходит для работы с Date.now().
Просто для примера я создам собственную систему: сложность будет увеличиваться на 1 если время блока меньше, чем реальное время, за которое был добыт блок. В противном случае она будет уменьшаться на 1.
Учитывая то, как ранее мы проверяли сложность, эта система должна работать нормально. Но лучше проверять сложность с использованием log16(difficulty), а не самого значения сложности. Мы, поступая так, теперь можем воспользоваться формулой настройки сложности Bitcoin.
Можете, правда, создать и собственную формулу. Но при этом нужно ориентироваться на безопасность и на хорошую производительность решения.
Для настройки времени блока нам понадобится соответствующее свойство:
Итоговый Python-код (без нормального форматирования) укладывается в обещанные 60 строк:
Надеюсь, вам понравились оба материала, и вы нашли в них что-то полезное.
Если бы вам понадобилось создать блокчейн-систему — какими инструментами вы воспользовались бы?
В этом проекте мы будем использовать Python, поэтому, если он у вас не установлен — найдите дистрибутив, подходящий для вашей ОС, и установите его.
Кто такой блокчейн-разработчик и как им стать
Чем занимается блокчейн-разработчик, какие навыки от него требуются и какое будущее у криптовалют. Продолжение интервью с Давидом Григоряном.
Иллюстрация: Colowgee для Skillbox Media
Журналист, редактор. Фанат виртуальности во всех её видах — потому о ней и пишет.
CTO и сооснователь французской компании Dfns, инвестор и советник в банках. Восемь лет опыта разработки в финтехе, среди прочего в Deutsche Bank.
Работал в Сан-Франциско, Стокгольме, Лондоне, Франкфурте, Куала-Лумпуре, а сейчас — в Париже. За свою жизнь основал четыре компании, одну из которых продал Ubisoft.
— Давид, чем занимаются блокчейн-разработчики и какие направления есть в этой сфере?
— Самое базовое направление — разработка новых блокчейнов, которые выходят ежемесячно или хотя бы ежеквартально. Кроме того, уже существующие нужно оптимизировать, делать новые протоколы — например, для биткоина недавно анонсировали протокол Lightning, ускоряющий маленькие транзакции в Ethereum.
То есть разработчики создают децентрализованные сети — обычно на С, С++, Go или Rust. Это относительно низкоуровневые языки, поэтому там участвует много людей с опытом работы над обычными email-серверами или телекомом.
Ещё одно направление — умные контракты, smart contracts. Чтобы этим заниматься, нужно понимать, как работает блокчейн, и разбираться в финансах: у человечества тысячелетний опыт работы с облигациями, акциями и различными инструментами, и сейчас мы их перепридумываем на блокчейне.
— Ты сказал, что каждый месяц выходит новый блокчейн. Что там ещё можно изобретать и в чём между ними разница?
— Бывает всякое. Например, Билли Маркус из IBM и Джексон Палмер придумали Dogecoin просто по приколу, но люди не поняли шутки и решили вложиться серьёзно.
Опять же — ты, наверное, слышал о форках, когда один блокчейн разветвляется на несколько. Это случается, если нет консенсуса и какая-то группа майнеров говорит: «Мы с вами не согласны, поэтому уходим».
Есть так называемое confirmation time — время подтверждения: я отправил тебе деньги, но мы ждем ещё десять блоков, чтобы никто никуда не ушёл. После подтверждения мы знаем, что у тебя точно есть деньги, не было форка.
Надо понимать, что децентрализованные системы — это колоссальная бюрократия. Они даже медленнее государств. Чтобы их создать, нужно согласие огромного количества людей, у которых совершенно разные интересы. Иногда люди устают ждать и спорить, поэтому говорят: «Fuck it. Я сделаю собственный коин, с блэкджеком и куртизанками».
Так что большинство блокчейнов созданы на базе других, с добавленными или, наоборот, устранёнными фичами. Часто они появляются по принципу «я тоже хочу». Так родился, например, PolkaDot.
Stellar сделали, потому что у создателей есть концепт Oracles — внешнего финансового института, который может публиковать свои продукты на блокчейне. То есть ты можешь поставить его в custody и сказать: «У меня есть 10 тысяч акций Amazon и Apple, я хочу легко их вам пихнуть». Причём Stellar очень быстрый: мы делали свой совместимый со Stellar форк, выкинули всё лишнее и добились скорости в районе полутора миллионов транзакций в секунду.
Ещё сейчас в большой моде ESG, потому что многие начали думать об экономии электричества. В последнее время появляется много идей в этой сфере.
Думаю, большинство из этих блокчейнов умрёт, но я не удивлюсь, если через десять лет у нас будет 50 разных блокчейнов.
— Кто имеет право контрибьютить в биткоин? Как принимаются окончательные решения об изменении технологии?
— Когда ты подсоединяешься к блокчейну, это означает, что у тебя есть какое-то приложение, которое умеет делать три вещи: майнить валюту, совершать и валидировать транзакции. Допустим, ты придумал новую идею и закоммитил код. Кому-то твоя идея понравилась, и он откомпилировал майнер-версию 1.1. Но тебе нужно, чтобы остальные майнеры согласились работать именно с твоей версией. То есть коммитить код недостаточно: требуется консенсус в остальных приложениях, чтобы все сказали: «да, мы хотим работать с этим».
Отправлять транзакции легко: это всего лишь текст. Проблема в том, как эту транзакцию потом будут записывать в кошелёк, как — майнить следующий блок и как ты будешь получать деньги за майнинг блоков с транзакциями других людей. Сейчас, например, идут дебаты насчёт Ethereum 2.0, в котором меняют логику майнинга с на . Закоммитить код недостаточно — нужно, чтобы большинство майнеров, которые инвестировали деньги в видеокарты, согласились с изменениями.
— А какие языки программирования используются в блокчейне? Какие-то предметно-ориентированные или общего назначения?
— Если ты работаешь с Ethereum Virtual Machine — это в основном Solidity, к сожалению. Вообще, у меня есть теория о мазохизме программистов. Когда-то мы выбрали JavaScript, чтобы с ним мучиться. В 1970-е были нормальные языки программирования, но для работы на Linux выбрали Bash. То же самое и с Solidity — это достаточно хреновый язык, чтобы программисты продолжали его использовать.
Я бы посоветовал учить Wasm — по сути, это тот же Rust. Его поддерживают всё больше блокчейнов — например, PolkaDot и Cosmos.
Опять же, Ethereum — конечно, крупнейший блокчейн, но есть и другие. Например, Tezos, в который я по ошибке вложил слишком много денег. На нём писали контракты на С++. А в Stellar придумали собственный язык, который позволяет достаточно легко создавать смарт-контракты.
— В блокчейн-разработке используют какие-нибудь проприетарные решения?
— Да, не так много, но их используют. В первую очередь это R3 Corda и Hyperledger. Если говорить о фреймворках, есть Trufflesuite от ConsenSys. Это фреймворк для теста твоих контрактов. У них есть тулзы, которые позволяют тестировать и разрабатывать контракты вне блокчейна, потому что у блокчейна своя скорость. Не всегда хочется ждать две минуты, пока опубликуешь свой контракт, и это стоит денег: даже для теста нужны виртуальные деньги, их тоже нужно как-то майнить.
Например, на Rinkeby нужно затвиттить свой адрес, поставить ссылку на твит, и тебе дадут 18 виртуальных Ethereum. Но иногда заканчиваются даже виртуальные Ethereum, а тебе нужно публиковать контракт.
— Самое важное — умение проводить аудит безопасности. Когда ты публикуешь свой контракт, там всегда есть специальные паттерны программирования, чтобы клиенты пользовались последней версией твоего приложения.
Нужно понимать, что, если мы делаем банковское приложение, в худшем случае мы можем сказать: «Ой, у нас дыра в безопасности, выключаем все серверы». С блокчейнами такой номер не пройдёт. Так что всегда полезно иметь в штате человека, который понимает, как делать infosec audit своего кода или своей команды. Например, в прошлом месяце кто-то потерял 120 миллионов из-за ошибки в контракте, и такое происходит сплошь и рядом.
Помимо этого, нелишним будет представление, как всё тестировать и как вообще работает RESTful-интерфейс. Любая операция чего-то кому-то стоит, даже если это просто вознаграждение майнерам. Поэтому от людей требуется намного больше ответственности. Я вижу небольшой откат к 1990-м, когда программисты были ещё и немного аналитиками. Это потом начали распределять: «У нас будет аналитик, будет бизнес-аналитик, ты делаешь только бэкенд, ты делаешь только фронтенд».
Но в целом всё несложно. Большинство смарт-контрактов и DeFi намного легче, чем любой фронтенд-сайт с какой-нибудь анимацией.
Я бы ещё, наверное, посоветовал чуть-чуть подучиться финансам, понять, как они работают. Хотя, конечно, это то ещё удовольствие. Есть книжки от Financial Times, которые даже в руки брать страшно. Но что делать.
Хотя можно создавать приложения в интернете, которые подсоединяются к блокчейну. Надо просто понимать, как он работает, познакомиться с теорией. Можно пойти, например, на SushiSwap: у них есть какой-то бэкенд, можно сделать что-нибудь для аналитики. У тебя есть приложение-кошелёк MetaMask, которое встраивается в браузер Chrome, ты приходишь на SushiSwap, коннектишься, и всё работает.
Отдельная тема — NFT. Это те же коины, которые присоединяются к каким-то off-chain assets. Я вижу интересные вещи в играх. Можно купить у Ubisoft NFT на оружие в играх: в Call of Duty — на автомат, в Warcraft — на супермеч и так далее.
— На взгляд тебя как СТО, станут ли в будущем востребованы разработчики, специализирующиеся именно на блокчейнах?
— Думаю, да. Скорее всего, сфера вырастет раз в пять в следующие несколько лет. Между 2017-м и 2020-м был период Crypto Winter, когда всё упало. Мы его пережили. Если посмотреть на валовой продукт блокчейна Европы и Америки, ты можно увидеть, что мы ещё много можем съесть. В коммерческом секторе развитие будет колоссальным.
— Какие книги или видеокурсы ты бы посоветовал тем, кто хочет познакомиться с темой блокчейна и криптовалют?
Есть ресурс Crypto Zombies, сделанный по образцу CryptoKitties. Был в 2017-м такой публичный NFT, когда ты мог купить котёнка, потом скрестить его с другим и получить новых котят. А здесь ты сам делаешь зомби, потом скрещиваешь их с котятами, и у тебя получается зомби-версия котят. Онлайн-туториал там прикольный, называется Crypto Zombies Loom Network.
Можно посмотреть, чем занимается ConsenSys. У A16z есть крипторесурсы. Её создатели Andreessen Horowitz — одна из самых известных американских инвестиционных компаний. Это чуваки, которые сделали Netscape и первый cloud.
По технической части у ConsenSys есть куча библиотек и для теста, и для разработки смарт-контрактов Ethereum. Но я бы советовал не затачиваться только на блокчейн, а посмотреть, как он работает со всем остальным. Потому что на самом деле блокчейн — очень абстрактная вещь, как и вообще фондовый рынок. Поди пойми, что там происходит. На это люди жалуются со времён «тюльпаномании» в Амстердаме. Ничто не ново, этого не нужно стыдиться.
Как зарабатывать больше с помощью нейросетей?Большой вебинар: 15 экспертов, 7 топ-нейросетей. Научитесь использовать ИИ в своей работе и увеличьте доход.