Как запустить свой блокчейн

Как запустить свой блокчейн: проводим игру валидаторов

01.06.2020 

Alex Kondratyuk

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

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

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

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

Задачи валидаторов

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

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

На этом этапе особенно важно найти хороших валидаторов. А хороший валидатор должен:

  • уметь собрать и запустить ноду вашего проекта;
  • уметь оценивать нагрузку на ноду, определять проблемы с производительностью и информировать разработчиков;
  • уметь закрыть ноду от атаки, вывести ее из-под удара и запустить снова;
  • иметь автоматические средства мониторинга для решения проблем в режиме 24/7;
  • вовремя включаться в вопросы управления сетью, оперативно исключать зловредных валидаторов;
  • быстро обновлять код в случае фикса ошибок;
  • иметь в запасе готовые сценарии действий в случае типовых проблем.

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

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

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

Игра валидаторов

У специалистов по безопасности есть соревнование, которое называется “Capture The Flag”: команды атакуют сервера друг друга, пытаясь раздобыть секретные “флаги” с серверов противника, одновременно защищая свои.

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

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

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

Критерии победы

Определить критерии игры сложно, поскольку часть из них невозможно подтвердить в децентрализованном окружении. Валидаторы и команда проекта не знают друг друга, и определить наибольший uptime (% времени, когда сервис был доступен) можно только централизованно. Сервис, измеряющий данные параметры, может быть атакован или ему попросту могут не доверять, а в случае расхождения результатов что-то доказать крайне сложно. Если вы хотите использовать традиционные параметры для оценки качества IT-сервисов, необходимо сразу выбрать судью и смириться с тем, что игроки будут собираться централизованно.

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

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

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

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

Кто игроки?

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

Для PoW-сетей важно иметь максимальное число майнеров любого качества, так как они лишь помогают пулам подбирать хеши блоков. В Proof-of-Stake и Proof-of-Authority отвечают за безопасность данных в блоках, их ответственность гораздо выше, а отключение — проблема.

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

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

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

Как проводить?

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

Для сценария игры нужно определиться с функционалом и заранее описать его валидаторам. При этом, как я упомянул выше, не забывайте о проблеме “ленивого валидатора”. Даже если ваши сценарии звучат заманчиво, это еще не значит, что валидаторы будут активно действовать. Зачастую, им ближе парадигма “работает — не трогай”. Они не будут активно атаковать других валидаторов, оптимизировать ноды и пристально следить за игрой, а просто постараются поддерживать сервера.

Помните, что для валидаторов “игра” — это тысячи долларов, сотни часов опытных девопсов, мощные сервера, исследование нового ПО и поддержка 24/7. Без серьезной награды ни одна компания не выделит серьезные ресурсы, поэтому следует трезво оценивать мотивы валидаторов.

Ниже несколько возможных этапов игры:

1. Нагрузка сети случайными транзакциями

Валидаторы должны быть постоянно загружены обработкой разнообразных транзакций. Для этого команда проекта, которая контролирует токен, создает множество аккаунтов и равномерно распределяет нагрузку между соревнующимся.

Есть и более гибкая стратегия, работающая в DPoS-сетях. В сети размещается контракт-giver (его еще называют faucet), который отдает любому из валидаторов фиксированное число токенов в единицу времени. Валидатор может на постоянной основе обращаться к этому контракту (создавая транзакцию) и использовать полученные токены для продвижения в топе валидаторов. В противном случае через некоторое время его вытеснят более активные участники. Этот подход стимулирует валидаторов постоянно формировать новые транзакции, одновременно нагружая и тестируя сеть.

2. Нагрузка сети невалидными транзакциями

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

3. Проведение DoS-атак на валидаторов

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

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

4. Обновление кода

Обновление кода ноды — штатная задача, которую должен уметь выполнять любой валидатор, поскольку с ним придется столкнуться в основной сети. Эти процедуры могут быть как очень простыми, так и довольно сложными (например, если требуется replay цепочки с нуля).

Лучший вариант — если баг не позволяет производить новые блоки, а исправление — восстанавливает этот функционал. В этом случае те валидаторы, которые быстрее смогли обновиться (а, возможно, и перестроить цепочку с genesis блока) смогут быстрее вернуться к производству блоков и получат преимущество в игре.

5. Другие сценарии

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

Однако помните о “ленивых валидаторах”. Если награждаемые действия требуют сложных взаимодействий или разработки специализированных инструментов, валидаторы вряд ли пойдут на это.

Заключение

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

Предыдущие статьи цикла читайте на ForkLog:

  1. Как запустить свой блокчейн: задачи и архитектура.
  2. Как запустить свой блокчейн: выбираем алгоритм консенсуса.
  3. Как запустить свой блокчейн: выбираем движок.
  4. Как запустить свой блокчейн: поднимаем тестовую сеть и оцениваем производительность.