Домой Технологии и рынок

Безопасность отложенного доказательства выполнения работы (dPoW) Komodo

20
0

Ежегодно происходит множество атак 51% (атак двойного расходования) на различные блокчейны на основе доказательства выполнения работы (PoW). Сегодня мы хотим поделиться с вами интересной статьей блокчейн-энтузиаста по имени Сатиндер Гревал из команды проекта Komodo, которая целиком и полностью посвящена этой теме. А именно – потенциальному решению проблемы безопасности PoW, которое получило название отложенного доказательства выполнения работы dPoW.

Я помню, как в 2015-16 гг. jl777 (Джеймс Ли) работал над кодом SuperNET на языке C, разрабатывая реализацию децентрализованной биржи и одновременно изучая внутреннее устройство архитектуры блокчейна Биткойна, самостоятельно переписывая его код. Обучаясь и программируя, Джеймс обычно делился открытиями с сообществом SuperNET, отмечая различные недостатки Биткойна и места, где код можно существенно усовершенствовать.

Истоки отложенного доказательства выполнения работы (dPoW)

Тогда jl777 прогнозировал, что недалёк тот час, когда блокчейны на основе доказательства выполнения работы с низким уровнем вычислительной безопасности будут подвергаться атакам, так как их рыночная стоимость будет расти. 1 июня 2014 г. общая рыночная капитализация всех криптовалют составляла около $8 млрд, а цена многих ведущих криптовалют на тот момент составляла всего несколько центов или даже меньше цента. Cейчас общая рыночная капитализация всех криптовалют превышает $254 млрд, и многие криптовалюты стоят десятки, сотни, а в случае Биткойна – тысячи долларов за единицу.

Тогда как многие другие криптовалютные форумы и сообщества в социальных сетях не придавали большого значения трудам jl777, форум bitco.in, где Джеймс какое-то время делился своими ранними исследованиями, оказался достаточно мудрым, чтобы создать отдельный раздел, посвящённый его проекту Iguana. Одна из тем Джеймса на этом форуме называется . В ней он объяснял свою идею о том, как с помощью Биткойна можно улучшить безопасность других, альтернативных блокчейнов, не имеющих такой большой вычислительной мощности, независимо от того, какой метод безопасности используют эти блокчейны на консенсусном уровне своего базового протокола.

Решение по использованию Биткойна как сервера временных меток для альтернативных блокчейнов в дальнейшем было реализовано в виде – первого, что было запрограммировано в Komodo, когда этот криптовалютный проект в конце 2016 г. откололся от Zcash.

Внутреннее устройство dPoW

Нет необходимости разбирать здесь, что такое хеширование, пиринговая сеть, доказательство выполнения работы, vin и vout в транзакциях Биткойна и т. д., поскольку в сети доступно достаточно ресурсов (таких как вайтпейпер Биткойна), которые помогают понять, почему сторонники криптовалют считают SHA-256 самым надёжным PoW-алгоритмом. Если желаете углубиться в более содержательную и простую для понимания книгу, то лучший ресурс – «Осваиваем Биткойн» Андреаса Антонопулоса.

Итак, если вы читали о доказательстве выполнения работы (PoW), то, думаю, вы более-менее поняли, насколько сложно осуществить двойное расходование в Биткойне из-за его огромной вычислительной мощности . Провести атаку 51% на Биткойн, чтобы расходовать одну и ту же транзакцию дважды, почти невозможно. Тем не менее, пожалуй, стоит немного остановиться на процессе двойного расходования, чтобы предоставить кое-какой контекст для dPoW.

Хешрейт (или общая вычислительная мощность сети) Биткойна по состоянию на 21 мая 2020 года. Источник: blockchain.com

В числе правил консенсусного механизма доказательства выполнения работы:

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

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

  • Компьютерный узел с полным блокчейном, чтобы создать транзакцию и транслировать её пиринговой сети.
  • Второй компьютерный узел с полным блокчейном, НЕ подключённый к остальной пиринговой сети и в частном порядке выполняющий майнинг с блока, предшествующего тому, при котором злоумышленник отправляет транзакцию с первого узла.
  • 66,666% вычислительной мощности, хотя 51% статистически достаточно, чтобы в итоге получить самый длинный блокчейн. Чем больше процент вычислительной мощности у злоумышленника, тем быстрее он сможет построить частный блокчейн. Имея больше вычислительной мощности, злоумышленник сможет находить блоки быстрее, чем остальные майнеры сети вместе взятые. .
  • Когда злоумышленник видит, что число найденных им блоков больше, чем у остальной сети, он может снова создать ту же транзакцию, что на первом шаге, с другим адресом получателя.
  • После этого злоумышленник может подключить свой узел к остальной пиринговой сети и транслировать свою транзакцию.
  • Шаг 5 означает, что любое число N блоков, намайненных между первой и второй отправленными транзакциями, будут рассматриваться как недействительные, когда злоумышленник найдёт больше блоков, чем остальные майнеры сети. Ожидаемый результат:

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

    Препятствия для проведения атаки 51%:

  • Приобретение или аренда оборудования, необходимого для достижения большей вычислительной мощности, чем у всей остальной сети.
  • Сложность майнинга в целевом блокчейне на момент атаки.
  • Неопределённость из-за роста сетевой вычислительной мощности вследствие присоединения других майнеров, которые могут транслировать свои найденные блоки остальной сети раньше злоумышленника.
  • Вышеописанные условия почти невозможно выполнить в случае Биткойна, поскольку его сеть защищена большей вычислительной мощностью, чем любой другой блокчейн. Но это вполне возможно в других блокчейнах с доказательством выполнения работы, так как сейчас много производителей микросхем выпускают новые ASIC-майнеры для различных PoW-алгоритмов и многие владельцы такого оборудования сдают в аренду вычислительную мощность на специализированных сервисах, вроде NiceHash, который впоследствии был взломан хакерами и был вынужден приостановить деятельность.

    Поскольку атаки 51% могут быть очень прибыльными после двойного расходования одной и той же транзакции, неудивительно, что некоторые злоумышленники пользуются такой ситуацией. https://www.crypto51.app/ – хороший сайт с подсчётами о том, во сколько может обойтись атака на различные криптовалютные проекты и какой процент вычислительной мощности доступен для аренды, чтобы провести атаку 51% на ту или иную криптовалюту.

    Таблица из 10 криптовалют в порядке убывания стоимости проведения атаки 51%. Источник: crypto51.app

    Из вышеизложенного ясно, почему PoW – лучший метод безопасности для таких проектов, как Биткойн и Эфириум, поскольку у них самая большая вычислительная мощность. Количество вычислительной мощности, необходимое для атаки 51% на Биткойн или Эфириум, не доступно для аренды ни на одном сайте. Однако отсюда также видно, что малые криптовалютные проекты, использующие такие же твёрдые правила PoW, могут быть очень уязвимы к атакам 51%.

    Метод безопасности dPoW в Komodo: герой для малых криптовалютных проектов

    Криптовалютные разработчики и новаторы создали множество консенсусных механизмов, которые используют либо совершенно другой алгоритм, чем в Биткойне, либо сочетание разных методов консенсуса, таких как доказательство выполнения работы (PoW) и доказательство доли владения (PoS). На сайте What To Mine можно увидеть, какие криптовалюты наиболее выгодно майнить с помощью того или иного алгоритма в зависимости от необходимых вложений в электричество.

    Поясним простыми словами, что может и НЕ может делать отложенное доказательство выполнения работы (dPoW).

    Метод безопасности dPoW НЕ может:

    Участвовать в майнинге или генерировании блоков блокчейнов, которые он защищает.

    Метод безопасности dPoW может:

    Быть добавленным как вторичный уровень консенсуса к существующему консенсусному механизму любого блокчейна на основе UTXO. Например, dPoW можно добавить как вторичный консенсус в блокчейны, использующие PoW или PoS.

    Чтобы метод безопасности dPoW работал, потребуется:

  • Биткойн для создания специальных транзакций с мультиподписью и отправки их в сеть ведущей криптовалюты, как это делает любой BTC-кошелёк.
  • Последний блокхеш блокчейна, безопасность которого должна обеспечиваться.
  • 64 специальных узла, способных создать собственную пиринговую dPoW-сеть и обмениваться друг с другом последними блоками и консенсусной информацией, относящейся к блокчейнам, чью безопасность они обеспечивают. Узлы этой пиринговой dPoW-сети называются нотариальными узлами.
  • Нативный демон Биткойна и всех других блокчейнов, чью безопасность обеспечивают нотариальные узлы. Таким образом, после осуществления первой реализации dPoW в Komodo нотариальным узлам нужны были полные блокчейны Биткойна и Komodo. Это обязательное правило, но только для нотариальных узлов .
  • Клиентским узлам блокчейна, чью безопасность обеспечивают нотариальные узлы с помощью dPoW, не нужны никакие другие блокчейны. Например, если Komodo защищается с помощью dPoW посредством нотаризации последнего блокхеша по Биткойну, пользователям Komodo НЕ нужно также использовать Биткойн. То же касается форков Komodo, известных как ассетчейны. Обычным узлам ассетчейнов не обязательно запускать Komodo вдобавок к демону их ассетчейна. Аналогично и для других блокчейнов, защищённых с помощью dPoW.
  • 64 публичных ключа каждого нотариального узла, участвующего в консенсусе dPoW. .
  • Поскольку 64 нотариальных узла должны иметь полные блокчейны Биткойна, Komodo и всех других сетей, защищённых с помощью dPoW, обязательно наличие высококачественного сервера с хорошим процессором, минимум 64 ГБ RAM, подключением к интернету со скоростью 100 Мбит/с и достаточно быстрым SSD-диском для хранения всех блокчейнов .
  • 64 высококвалифицированных оператора нотариальных узлов с опытом работы в ОС Linux и продвинутыми навыками системного администрирования и сетевой безопасности используемых машин.
  • Большое сообщество пользователей блокчейна с хорошим распределением предложения монет. Это нужно, чтобы на основе владения монетами они могли голосовать за операторов нотариальных узлов. Официальными операторами нотариальных узлов избираются те, кто наберёт больше всего голосов.
  • Выборы нотариальных узлов в Komodo происходят ежегодно.

    • После создания dPoW 4 нотариальных узла было зарезервировано за разработчиками Komodo.
    • Остальные 60 нотариальных узлов были избраны путём голосования держателей KMD.
    • Каждый следующий год 30 лучших нотариальных узлов, которые провели больше всего нотаризаций , автоматически переизбираются. Это мотивирует операторов нотариальных узлов хорошо выполнять свою работу, поощряет старательных операторов и обеспечивает плавный переход от одной группы нотариальных узлов к другой.
    • Остальные 30 вакансий операторов нотариальных узлов открыты для сообщества.
    • Серверы нотариальных узлов должны быть распределены по всем континентам. Поэтому можно увидеть, что существующие нотариальные узлы разделены на следующие категории: Южное полушарие (SH), Азия-Россия (AR), Северная Америка (NA), Европа (EU).

    Список узлов Komodo. Источник: сайт komodostats.com

    Что нужно, чтобы сообщество выбрало тебя оператором нотариального узла:

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

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

    Промежуточные итоги

    Давайте подытожим некоторые факты, рассмотренные в статье до этого момента:

  • Нотариальные узлы выбираются сообществом. Очень сложно (и самоубийственно) пытаться действовать эгоистично после того, как тебя избрали оператором нотариального узла.
  • dPoW не майнит/генерирует блоки, поэтому нотариальные узлы не могут проводить атаку 51%.
  • Поскольку для того, чтобы стать оператором нотариального узла, не требуется держать какую-либо криптовалюту (BTC, KMD и т. д.), нотариальные узлы совершенно отличны от концепции мастернод. Нотариальные узлы – это НЕ мастерноды. Между ними нет ничего общего.
  • Полномочия операторов нотариальных узлов

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

    Полномочия, связанные с dPoW:

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

    Полномочия, связанные с майнингом или генерацией блоков

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

  • Нотариальные узлы НЕ могут осуществлять «упрощённый» майнинг в ассетчейнах или любых других блокчейнах, загруженных на их сервер. Если они хотят майнить в этих блокчейнах, то они могут делать это так же, как все другие майнеры в сетях этих блокчейнов, используя CPU, GPU, ASIC или арендуемую вычислительную мощность.
  • Операторы вкладывают время, деньги, человеческие ресурсы/навыки, инфраструктуру, аппаратные и программные ресурсы, чтобы управлять нотариальными узлами. Поэтому ЕДИНСТВЕННАЯ привилегия операторов нотариальных узлов – это периодический «упрощённый» майнинг блоков в блокчейне Komodo (KMD). Исходный код блокчейна Komodo включает 64 публичных ключа, принадлежащих нотариальным узлам. При каждых выборах нотариальных узлов эти 64 публичных ключа в коде обновляются. Адреса, связанные с этими публичными ключами, получают возможность «упрощённого» майнинга KMD.
  • Исходя из этих полномочий, связанных с майнингом, все 64 нотариальных узла вместе могут ежедневно майнить примерно 75% всех блоков. Остальные 25% майнятся другими майнерами сети блокчейна Komodo. Однако встречаются периоды, когда данное соотношение составляет, например, 65:35, так что это не строгое правило.

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

    • Время блока KMD: 60 секунд.
    • Вознаграждение за блок KMD: 3 KMD.
    • Блоков и KMD в сутки: 60 секунд = 1 минута; 1 час = 60 минут; 24 часа = 24 x 60 = 1440 минут = 1440 блоков и 1440 x 3 = 4320 KMD.
    • Блоков и KMD в месяц: дни в году/месяцы = 365,25/12 = 30,4375 дня в среднем в месяце; 30,4375 x 1440 = 43 830 минут = 43 830 блоков и 43 830 x 3 = 131 490 KMD.
    • 75% блоков и KMD в сутки: 1440 x 0,75 = 1080 блоков и 1080 x 3 = 3240 KMD.
    • 75% блоков и KMD в сутки на один нотариальный узел: 1080/64 = 16,875 блока и 16,875 x 3 = 50,625 KMD.
    • 75% блоков и KMD в месяц: 43 830 x 0,75 = 32 872,5 блока и 32 872,5 x 3 = 98 617,5 KMD.
    • 75% блоков и KMD в месяц на один нотариальный узел: 32 872,5/64 = 513,6328125 блока и 513,6328125 x 3 = 1540,8984375 KMD.
    • Примерная стоимость одной монеты KMD в мае 2020 г.: $0,5.
    • Стоимость монеты KMD 24 декабря 2017 г. (исторический максимум): $10,49.

    Исходя из примерной стоимости KMD за последнее время, один нотариальный узел может заработать:

    • В день: 50,625 x 0,5 = $25,3125.
    • В месяц: 1540,8984375 x 0,5 = ~$770,45.
    • В год: 770,45 x 12 = $9245,4.

    Исходя из максимальной исторической стоимости KMD, один нотариальный узел мог бы заработать:

    • В день: 50,625 x 10,49 = $531,056250.
    • В месяц: 1540,8984375 x 10,49 = $16 164,024609.
    • В год: 16 164,024609 x 12 = ~$193 968,296.

    Таковы возможные сценарии для нотариального узла при текущей и максимальной исторической цене. Конечно, это не совсем точные расчёты, так как стоимость KMD, как и любой другой валюты или актива в глобальной экономике, не может быть статичной. Поэтому, пожалуй, неплохо будет провести расчёты, используя среднее значение. При этом предположим, что оператор нотариального узла не тратит свои KMD на оплату каких-либо издержек по обслуживанию сервера. Возьмём условную среднюю цену KMD $2,50, просто взглянув на график, не пытаясь подсчитать точное значение.

    График цены Komodo за всю историю. Источник: Coinmarketcap

    Итак, исходя из грубой средней цены KMD $2,50, вот сколько может заработать один нотариальный узел:

    • В день: 50,625 x 2,50 = $126,5625.
    • В месяц: 1540,8984375 x 2,50 = $3 852,246094.
    • В год: 3 852,246094 x 12 = ~$46 226,953.

    Конечно, есть также вероятность, что стоимость KMD вырастет. Однако предсказать будущее невозможно. Давайте просто выберем оптимистичную стоимость, сохраняя определённую долю консерватизма, как, наверное, делают все криптовалютные инвесторы, и предположим, сколько KMD может стоить через год. Так как это просто условная цена, не имеющая никакого реального смысла, выберем забавы ради значение выше исторического максимума, скажем, $18,78.

    Максимальная цена Komodo за всю историю. Источник: Coinmarketcap

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

    • В день: 50,625 x 18,78 = $950,7375.
    • В месяц: 1540,8984375 x 18,78 = $28 938,072656.
    • В год: 28 938,072656 x 12 = ~$347 256,872.

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

  • Рассмотрение этих цифр имеет смысл, если предположить, что какой-то нотариальный узел может провести самоубийственную атаку на сеть KMD . Данные цифры также актуальны, если кто-то допускает массовую самоубийственную атаку, когда несколько или все 64 оператора нотариальных узлов вступят в сговор.
  • Если нотариальный узел проработает целый год и войдёт в число лучших 30, то он будет автоматически переизбран, что создаёт очень сильную мотивацию, чтобы не становиться самоубийцей и выполнять свои обязанности как положено.
  • Таблица с примерным подсчетом доходности каждого узла Komodo. Источник: Medium

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

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

    Мониторинг dPoW

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

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

    • https://dexstats.info/
    • https://komodostats.com/

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

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

    Почему нотариальным узлам невыгодно действовать против dPoW

  • Операторы тратят немало времени и денег на настройку и запуск нотариального узла. Все эти вложения окажутся в зоне риска, если оператор попытается пойти против протокола. Попытка вредоносных действий почти наверняка не принесёт столько, сколько оператор получит за добросовестную работу.
  • К тому времени, как оператор приобретёт репутацию одного из лучших и самых надёжных нотариальных узлов, мотивация для вредоносных действий снижается ещё больше, так как он отказывается от дохода не только в текущем, но и в следующем году.
  • Если нотариальный узел пойдёт против dPoW, он полностью лишится возможности переизбраться в следующем году.
  • Хорошо работающие нотариальные узлы обращают на себя внимание, так как операторы других узлов постоянно мониторят процесс dPoW и его эффективность. В случае подозрительной активности последние получат уведомления и предупредят всю сеть.
  • Процесс нотаризации блокчейна Komodo по Биткойну

    На данном этапе предполагается, что вы:

    • понимаете основы доказательства выполнения работы;
    • понимаете суть атаки 51% и то, как может произойти двойное расходование;
    • знаете требования для dPoW и операторов нотариальных узлов.

    Независимая пиринговая сеть 64 нотариальных узлов

    Давайте перенесёмся назад к моменту создания первой dPoW-сети. В аккаунте jl777 на GitHub есть репозиторий SuperNET. В нём содержится исходный демон Iguana, отвечающий за создание пиринговой сети нотариальных узлов для реализации dPoW. Все 64 нотариальных узла компилируют и запускают этот демон Iguana на своих машинах вместе с полными узлами блокчейнов Биткойна и Komodo.

    Это полностью самостоятельная пиринговая сеть, где задача Iguana – устанавливать соединение между всеми нотариальными узлами и транслировать сообщения с различной информацией, относящейся к dPoW.

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

    Один публичный ключ для всех блокчейнов

    Как объяснялось при обзоре требований для dPoW, каждый нотариальный узел предоставляет публичный ключ для адреса Биткойна или Komodo. Iguana содержит библиотеку кода, позволяющую рассчитать адреса для всех остальных блокчейнов, связанные с тем же публичным ключом.

    Например, если нотариальный узел предоставит публичный ключ в формате адреса Komodo, то можно вычислить адрес других блокчейнов, включая Биткойн, Litecoin, GameCredits, EMC2, Hush, Ethereum, все ассетчейны Komodo и т. д. Правда, ассетчейны Komodo имеют тот же формат адреса, что и Komodo. Приватные ключи для всех этих различных блокчейнов генерирует Iguana, предоставляя операторам нотариальных узлов посредством API список адресов, приватных и публичных ключей для разных монет, используя единственную фразу-пароль.

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

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

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

    До подключения к пиринговой сети нотариальных узлов нужно выполнить с помощью API Iguana следующие задачи, прописанные в коде:

    • Запустить демоны Биткойна, Komodo, ассетчейнов и всех третьих сторон.
    • Убедиться, что оны синхронизированы с существующей сетью и соответствуют последней версии блокчейна.
    • При наличии установить все обновления демона Iguana, скомпилировать его, запустить и ввести команду для его подключения к RPC API всех криптовалютных демонов, установленных на локальной машине/сервере. Данный шаг устанавливает общение Iguana со всеми демонами, запущенными на локальной машине.
    • Залогиниться в Iguana с помощью фразы-пароля своего нотариального узла.

    На данном этапе Iguana начинает контактировать со всеми локальными криптовалютными демонами и получать информацию вида:

    • Высота последнего блока + блокхеш, как показано на примере ниже:

    [BTC].1131235 KMD 0b449e03e777d8fce1ab31d3fec6749804da85fd61f0044940b071bbf22d2071 height.1131236 vs last.1131236

    И не только для блокчейна Komodo, но также для всех блокчейнов, защищённых с помощью dPoW, – всех ассетчейнов Komodo, а также блокчейнов всех третьих сторон, – что выглядит следующим образом:

    [BTC].1131255 KMD 01f926f16b380f5b7353bbe388eda604fcb74dedaabf84e18d0608db85e24e86 height.1131256 vs last.1131256
    [KMD].252711 HODL 0008cb2e4e793ce931d7de29f10f3a546b7a31dbbe21881db4042accd05b7c14 height.252712 vs last.252712
    [KMD].2653660 CHIPS 0000000000001d41eba16c82811c53aa2bdbcaea946cb5b003064f65408fcddc height.2653661 vs last.2653661
    [KMD].111594 SEC 0a97703662777e5e37161d784bab3f83098f8871d8e3b77d743b759805808d9c height.111595 vs last.111595
    [KMD].2175145 EMC2 d670d53b9f2e32b046c5a9ef58344a841cec072e434c105e5b0970f4002e8b91 height.2175146 vs last.2175146
    [KMD].235138 BET 004ef2c08c86401909057dd40d9382c4a43ab806a26b7df5f84d127408ac2063 height.235139 vs last.235139
    [KMD].2653661 CHIPS 00000000000028e030686426e7e45bde2ed148d3a9b346fa0933075cce5ffc34 height.2653662 vs last.2653662
    [KMD].143684 PIRATE 0000000187b1be1bc3495473bff0f380fcd03305b2461135009ac274017e8ded height.143685 vs last.143685
    [KMD].446836 REVS 00fd735d00a241d9ce4d4fcfc51cf936a094a06f7ffc38d26f43715f83db1254 height.446837 vs last.446837
    [KMD].281221 VRSC af107c608daa3f9026cf0c239e611cdbf621fedcfa2fce376c3ef63c48da13cc height.281223 vs last.281222
    [KMD].281223 VRSC d0c7a3b5c1d9b1049fdfaf3a19d51c91955c3ceab191f4a952c60c025c2f6afa height.281224 vs last.281224
    [KMD].241375 RFOX 0025dfb07997890ca4bd7139a8cbe62470c494fa89086f116e63f983ef715123 height.241376 vs last.241376
    [KMD].130041 MGNX 09f93b3811cca54bb40a8f17357c4dcf8ba377dbe05d25e7cf69a672f0a2610a height.130042 vs last.130042
    [KMD].446837 REVS 00c360d6d52a2ce589d8854f168e97905908b2fa73f1dc752917dc8942e907f5 height.446838 vs last.446838
    [KMD].424349 BOTS 0001d471064478f971a99628c42411bc83b10eef1c5e0e501d09564b6d608a7a height.424350 vs last.424350
    [KMD].2232448 GAME 4e9ec27e13ea81512192d27d32d9e8e0b5dd324b447bd6aa63ef0f4d4ff9b2f7 height.2232449 vs last.2232449
    [KMD].130042 MGNX 0cc47b5be512c215b7c1a285f36dd1b5cc5588f8f689aa3a9a4888972f4a261d height.130043 vs last.130043
    [KMD].75749 DION 0a71c7b911dd59438e479547e6e96749c7b36387a1a5168c9a4fdff755e45291 height.75750 vs last.75750
    [KMD].235139 BET 00963ea39fb4f3a69af43d68115b6592db9886fe94ed89c2454632d9c6c9a51b height.235140 vs last.235140
    [KMD].181311 EQL 02664b3fd8c6719a4e397cdac412342c90a159df7718ab235ea1290ec38bfdca height.181312 vs last.181312
    [KMD].213609 MGW 00007b8416f876deecab3116b99636b9faad0ed78d3d19738f9001cc94ac2036 height.213610 vs last.213610
    [KMD].36763 ZEX 0000003428a03a46cc9f5ca0b5a896c91575194810e874ecf094993b4895c69d height.36764 vs last.36764

    • Вскоре после этого Iguana устанавливает соединение с остальными из 64 нотариальных узлов сети.
    • Затем для каждого блокчейна выполняется команда dpow, запускающая процесс нотаризации этого блокчейна. Команда включает тикер криптовалюты, такой как CHIPS, и публичный ключ (pubkey) данного нотариального узла, что выглядит так:

    #command
    curl –url http://127.0.0.1:7776 –data ‘{“agent”:”iguana”,”method”:”dpow”,”symbol”:”CHIPS”,”pubkey”:”02957fd48ae6cb361b8a28cdb1b8ccf5067ff68eb1f90cba7df5f7934ed8eb4b2c”}’#output
    02957fd48ae6cb361b8a28cdb1b8ccf5067ff68eb1f90cba7df5f7934ed8eb4b2c DPOW with pubkey.(02957fd48ae6cb361b8a28cdb1b8ccf5067ff68eb1f90cba7df5f7934ed8eb4b2c) RV8Khq8SbYQALx9eMQ8meseWpFiZS8seL1.valid1 CHIPS -> KMD RV8Khq8SbYQALx9eMQ8meseWpFiZS8seL1.valid1, num.30 freq.100 minsigs.13 CCid.0

    Команда dpow проверяет действительность публичного ключа, используемого для запуска процесса нотаризации, сопоставляя его со списком 64 публичных ключей, заданных в демоне komodod, а также в демонах всех других блокчейнов. Она также проверяет действительность адреса, связанного с этим публичным ключом, с помощью значения ismine:true в локальном демоне.

    Первый базовый консенсус нотариальных узлов

    Когда все криптовалютные демоны запущены и полностью синхронизированы, демон Iguana запускает ряд параллельных операций, в том числе:

    • Проверку последней высоты блока + блокхеша каждого подключённого криптовалютного демона;
    • Проверку, какой последний блокхеш был нотаризован для каждого блокчейна;
    • Проверку, имеют ли адреса демонов Биткойна, Komodo, ассетчейнов и других криптовалют, используемые локальным нотариальным узлом, достаточно UTXO для нотаризации.

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

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

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

    Выбор 13 подписантов с помощью битовой маски

    При каждой нотаризации узлы пронумерованы от 0 до 63. Тот, кому присвоен 0, меняется с каждой нотаризацией, чтобы дать каждому узлу равные шансы на участие в нотаризации. Теперь все 64 нотариальных узла транслируют друг другу свои нотариальные данные вместе с информацией, полученной от других узлов. Исходя из этого все 64 нотариальных узла предлагают 13 подписантов, насчёт которых нужно прийти к согласию. Сначала мало кто из узлов соглашается со всеми деталями, но затем все узлы сходятся на предложении, получившем наибольшую поддержку.

    Математически существует МНОГО возможных комбинаций 13 подписантов из 64. Применяется определённый алгоритм, сокращающий число вариантов в каждом раунде нотаризации, но всё равно их тысячи. Для обозначения выбранных 13 подписантов используется маска в виде 64-битного числа. Она должна начинаться с узла, которому в данном раунде присвоен номер 0, должна содержать 13 наборов битов, и каждый узел в маске должен иметь идентичные данные.

    Каково же возможное число комбинаций 13 узлов из 64? И кто будет этими 13 выбранными узлами? Чтобы посчитать, можно использовать комбинаторику:

    C(n,r) = n! / (r!(n−r)!) = ?
    C(n,r) = C(64,13)
    = 64! / (13!(64−13)!)
    = 1.313685881E+13
    = 13136858812224

    Итак, согласно этому расчёту, возможно 13, 136, 858, 812, 224 различных набора из 13 подписантов, которых могут выбрать 64 узла. То есть больше 13 триллионов!

    Таким образом, такую битовую маску можно создать лишь после нескольких циклов обмена данными между всеми узлами. Каждый узел транслирует всем остальным узлам предлагаемую тринадцатку, а также то, что ему отправили другие узлы. Следовательно, все узлы видят то, что они непосредственно получают, а также то, что видят другие узлы. Так определяется, какой набор из 13 узлов наиболее популярен. Затем каждый узел меняет свой набор, если он уже не использует самую популярную маску. Критически важно, чтобы все 13 подписантов были согласны с маской, так как иначе нотаризация не состоится, потому что они её не подпишут. Это чем-то напоминает майнинг: выбор рандомизирован и сложно предсказать, какие 13 узлов «победят». Если какой-то узел не согласен с победившей маской, то он просто игнорируется. С годами алгоритм улучшился, чтобы выбирать 13 таких узлов, которые согласны с маской.

    Публичные ключи нотариальных узлов и их шансы на участие в нотаризации

    Публичные ключи текущих нотариальных узлов можно посмотреть в файле komodo_notary.h. В этом массиве из 64 публичных ключей нотариальных узлов и присвоенных им имён каждый набор начинается с кода, обозначающего число от 0 до 63.

    Публичный ключ нотариального узла в позиции 0:

    {“0dev1_jl777”, “03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828” },

    А в позиции 63:

    {“xrobesx_NA”, “03f0cc6d142d14a40937f12dbd99dbd9021328f45759e26f1877f2a838876709e1” }

    Если мне нужен, например, нотариальный узел 42, то вот он:

    {“meshbits_SH”, “025c6e94877515dfd7b05682b9cc2fe4a49e076efe291e54fcec3add78183c1edb” }

    Обратите внимание, что номер позиции в массиве публичных ключей используется только для переменной myind. Логика выбора 13 узлов следующая:

    • Определяются позиции узлов от 0 до 63.
    • Выбираются узлы с позициями от 0 до 12.
    • Если какой-то узел в этом диапазоне недоступен или не отвечает, то вместо него используется следующая позиция, чтобы в общей сложности получилось 13 нотариальных узлов.
    • Если бы эта логика просто использовала позицию myind в массиве публичных ключей, то всегда выбирались бы первые 13 узлов из массива публичных ключей в коде komodod. Чтобы дать каждому из 64 нотариальных узлов равные шансы, позиция публичных ключей в каждом раунде нотаризации смещается.
    • Следовательно, если в последнем раунде нотаризации позиция нотариального узла с именем 0dev1_jl777 была 0, то в новом раунде она будет 63, а позиция 0 перейдёт к 0dev2_kolo. Таким образом, за 64 раунда нотаризации каждый нотариальный узел по одному разу будет на позиции 0. Так все нотариальные узлы имеют равные шансы, поэтому позиция в массиве публичных ключей не имеет значения.
    • В раундах нотаризации позиция каждого нотариального узла меняется в соответствии со следующей модулярной арифметической формулой:

    (myind + (blockheight/10)) % 64 = позиция нотариального узла в данном раунде

    Таким образом, согласно этой формуле, например, если последняя высота блока в блокчейне – 1000, а позиция нотариального узла в этом раунде, скажем, myind = 41, то получим:

    myind = 41
    blockheight = 1000
    mod_number = 64
    current_notarization_position = (41 + (1000/10)) % 64 = 13

    Узел с myind = 41 в этом раунде получит позицию 13. Поскольку выбираются узлы от 0 до 12, этот узел не будет участвовать в нотаризации в данном раунде.

    Так как в каждом раунде позиция myind меняется, невозможно определить, какие нотариальные узлы будут 13 подписантами в специальной транзакции Биткойна с мультиподписью.

    Подписание и трансляция нотариальной транзакции

    Источник: bitnovosti.com