Обмен электронных валют по самому выгодному курсу!
 


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

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

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

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

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

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

Решение по использованию Биткойна как сервера временных меток для альтернативных блокчейнов в дальнейшем было реализовано в виде «отложенного доказательства выполнения работы» (delayed Proof of Work, dPoW) – первого, что было запрограммировано в Komodo, когда этот криптовалютный проект в конце 2016 г. откололся от Zcash.

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

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

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

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

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

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

Краткий обзор атаки двойного расходования

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

  1. Компьютерный узел с полным блокчейном, чтобы создать транзакцию и транслировать её пиринговой сети.
  2. Второй компьютерный узел с полным блокчейном, НЕ подключённый к остальной пиринговой сети и в частном порядке выполняющий майнинг с блока, предшествующего тому, при котором злоумышленник отправляет транзакцию с первого узла.
  3. 66,666% вычислительной мощности, хотя 51% статистически достаточно, чтобы в итоге получить самый длинный блокчейн. Чем больше процент вычислительной мощности у злоумышленника, тем быстрее он сможет построить частный блокчейн. Имея больше вычислительной мощности, злоумышленник сможет находить блоки быстрее, чем остальные майнеры сети вместе взятые. (Ожидаемое время нахождения блока в Биткойне – 10 минут, тогда как в Komodo – 1 минута).
  4. Когда злоумышленник видит, что число найденных им блоков больше, чем у остальной сети, он может снова создать ту же транзакцию, что на первом шаге, с другим адресом получателя.
  5. После этого злоумышленник может подключить свой узел к остальной пиринговой сети и транслировать свою транзакцию.

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

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

Так в общих чертах выглядит гипотетическая атака 51%.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выборы нотариальных узлов в Komodo происходят ежегодно.

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

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

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

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

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

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

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

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

Полномочия операторов нотариальных узлов

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

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

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

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

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

  1. Нотариальные узлы НЕ могут осуществлять «упрощённый» майнинг в ассетчейнах или любых других блокчейнах, загруженных на их сервер. Если они хотят майнить в этих блокчейнах, то они могут делать это так же, как все другие майнеры в сетях этих блокчейнов, используя CPU, GPU, ASIC или арендуемую вычислительную мощность.
  2. Операторы вкладывают время, деньги, человеческие ресурсы/навыки, инфраструктуру, аппаратные и программные ресурсы, чтобы управлять нотариальными узлами. Поэтому ЕДИНСТВЕННАЯ привилегия операторов нотариальных узлов – это периодический «упрощённый» майнинг блоков в блокчейне 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
График цены 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
Максимальная цена 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.

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

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

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

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

Мониторинг dPoW

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

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

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

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

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

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

Процесс нотаризации блокчейна Komodo по Биткойну

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

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

графика нотаризация komodo

Независимая пиринговая сеть 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 подписантами в специальной транзакции Биткойна с мультиподписью.

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

Графика работа komodo для биткойна
Источник: bits.media

Помните первое требование для dPoW – Биткойн? Как раз на этом этапе нотариальные узлы должны использовать в процессе нотаризации Биткойн. В случае ассетчейна или стороннего блокчейна нотариальные узлы сначала нотаризуют их по Komodo, точно так же как информация из блока Komodo нотаризуется по Биткойну. После того как из 64 нотариальных узлов было выбрано 13, они ДОЛЖНЫ иметь UTXO Биткойна и Komodo одинакового размера для создания и подписи транзакции BTC.

Демон Iguana проверяет, доступно ли достаточно UTXO одинакового размера на BTC-адресе каждого нотариального узла. Эти средства используются для подписи и отправки транзакции в сеть Биткойна вместе с нотариальными данными в OP_RETURN. Iguana всегда параллельно выполняет этот процесс. Сейчас размер UTXO, используемый нотариальными узлами, составляет 0,0001 BTC, но было время, когда он увеличился до 0,0005 BTC из-за высокого числа транзакций (спама?) в сети Биткойна, когда велись дискуссии об увеличении размера блоков (2016-17 гг.). Затем, когда сетевые транзакции снова стали подтверждаться без проблем, размер UTXO вернулся к 10 000 сатоши.

Код Iguana содержит шаблон для создания этой специальной транзакции с мультиподписью, которому следуют все нотариальные узлы. Все узлы должны использовать в подписываемой транзакции одинаковую сумму BTC, указанную в шаблоне (0,0001). Если какой-то нотариальный узел подпишет свой vin, используя сумму, отличную от 0,0001, и транслирует свой подписанный txid другим узлам, транзакция будет неудачной, так как другие нотариальные узлы будут думать, что она подписывается с использованием 0,0001 BTC, поскольку все узлы имеют заданный шаблон. Пример:

vins:
1. address1 0.00010000
2. address2 0.00010000
...
13. address13 0.00010000

vouts:
well_known_address 0.0013000

Каждый нотариальный узел вставляет в шаблон получившуюся подпись, и транзакция будет действительна, ТОЛЬКО если каждая подпись соответствует шаблону. Это аналогично createrawtransaction с заданными параметрами. И каждый нотариальный узел подписывает только свой собственный vin. Он не может изменить формат транзакции, а может только её подписать.

Каждая нотариальная транзакция (кроме части с нотариальными данными OP_RETURN) напоминает обычную транзакцию. Она не использует OP_CHECKMULTISIG, как транзакции с мультиподписью.

Чтобы объяснить по-простому, допустим, у вас на локальной машине есть кошелёк Биткойна.

  • У него есть 13 разных адресов, на каждом из которых имеются UTXO по 0,0001 BTC.
  • Предполагается, что вы владелец всех этих адресов, то есть эти адреса не watchonly, а при проверке выдают ismine:true.
  • Вам нужно отправить все эти средства + txfee (комиссию за транзакцию) на один известный адрес (простоты ради допустим, что txfee = 0).
  • Если вы отправите транзакцию на сумму 0,0013 BTC, используя sendtoaddress, то она будет напоминать нотариальную транзакцию (за исключением части с данными OP_RETURN). Для сравнения можно посмотреть реальную нотариальную транзакцию в блокчейне Биткойна.
  • Идентификатор транзакции: 979d23b8d929ccefdb79aabffa2d632f09b292bea71fe1efa4ce467d808ce12d.
  • С 13 адресов, отображаемых как ввод, отправляется по 0,0001 BTC на один и тот же адрес.

Результат будет похожим, так как ваш кошелёк имеет 13 разных приватных ключей, соответствующих 13 адресам, на каждом из которых есть UTXO по 0,0001 BTC, и каждый vin подписывается отдельно своим собственным приватным ключом. В нотариальной транзакции всё то же самое, только процесс распределяется между нотариальными узлами.

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

В случае 13 адресов в одном кошельке весь процесс очень прост, так как 13 приватных ключей и 13 подписей имеются сразу. В распределённом процессе, когда нотариальные узлы обмениваются подписями, транзакция может быть на 100% полной только после получения всех 13 подписей. Как можно видеть, этот процесс сложнее, потому что для того, чтобы транзакция состоялась, все 13 подписей ДОЛЖНЫ быть верны и получены и UTXO не должны быть расходованы на момент трансляции транзакции.

Главное, что здесь следует понять, – это что в этой транзакции просто расходуются 13 UTXO с 13 разных адресов, а также включаются нотариальные данные в OP_RETURN, и ничего больше. Никаких сценариев жёсткой блокировки или разблокировки, и никакого OP_CHECKMULTISIG. Просто обычная транзакция, однако её сложность в том, что всё это происходит посредством «распределённой сети».

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

Ничего особенного здесь нет: процесс следует тем же правилам сети Биткойна, что и обычная транзакция. Транзакция будет отклонена, если она недействительна, поскольку к нотариальной транзакции применяются все те же правила. Разработчики Биткойна не могут занести такие транзакции в чёрный список или воспрепятствовать их прохождению в сети Биткойна. Если кто-то по какой-то странной причине захочет помешать Komodo проводить нотаризацию по сети Биткойна, он не сможет этого сделать. Нотариальные транзакции просто отправляют небольшую сумму в биткойнах, что выступает базовым процессом всего сетевого протокола. Поэтому предполагать, что нотариальные транзакции могут быть блокированы какой-то сетью – всё равно что говорить, что эта сеть может признать недействительным создание и отправку транзакций внутри неё. Это просто не имеет никакого смысла.

На нотариальных узлах блок Komodo, проводящий нотаризацию по сети Биткойна, выглядит в логах Iguana так:

>>>>>>>>>>> BTC dpow_sendrawtransaction (979d23b8d929ccefdb79aabffa2d632f09b292bea71fe1efa4ce467d808ce12d)complete statemachine.BTC ht.1131240 state.1000 (4000000 b8239d97)

Подтверждение нотаризации в блокчейне, защищённом с помощью dPoW

Iguana ждёт, пока txid не будет принят в пул памяти Биткойна, после чего начинает процесс записи информации нотаризованного блока в блокчейн Komodo. Заметьте, что время между блоками Биткойна не препятствует нотаризации, но пока транзакция всё ещё находится в пуле памяти первой криптовалюты, она относительно менее безопасна, чем подтверждённая транзакция BTC.

Как только txid принят в пул памяти Биткойна, инициируется процесс подтверждения нотаризованного блока на стороне Komodo. Лог Iguana в таком случае выглядит так:

[44] END isratify.0:0 bestk.29 2400a12021236000 sigs.2400a12021236000 state.ffffffff machine ht.1131240 completed state.ffffffff BTC.979d23b8d929ccefdb79aabffa2d632f09b292bea71fe1efa4ce467d808ce12d KMD.838b84d051308eeeb442bd0f2f2fdd85d758b4f3a8bb287a2ca2b4bff723161c recvmask.7fd4fbb7fb67645d paxwdcrc.6ab6b224 0x7fb6de811010 0x7fb6f4097010>>>>>>>>>>> KMD dpow_sendrawtransaction (838b84d051308eeeb442bd0f2f2fdd85d758b4f3a8bb287a2ca2b4bff723161c)complete statemachine.KMD ht.1131240 state.-1 (4000000 d0848b83)

Ссылка на txid Komodo: https://kmdexplorer.io/tx/838b84d051308eeeb442bd0f2f2fdd85d758b4f3a8bb287a2ca2b4bff723161c

Действительность транзакции подтверждают майнеры Komodo и остальные узлы сети, имеющие на своих машинах полную копию блокчейна. Опять же, здесь нет ничего особенного (за исключением сложного процесса создания транзакции «распределённой сетью»). Всё точно так же, как с любой другой транзакцией, отправляемой в сети блокчейна, только с данными OP_RETURN, после чего она подтверждается сетью.

Нотаризованный блок необратимый

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

dpowconf и правило о подсчёте подтверждений

В защищённом dPoW блокчейне правило о подтверждении транзакций (известное как dpowconf) было обновлено, чтобы использовать следующую логику, после попытки провести атаку двойного расходования (предпринятой forkwitch и geocold51) в блокчейне EMC2, защищённом с помощью нотаризации dPoW:

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

Таким образом, если транзакция транслируется в сеть в момент, когда последний нотаризованный блок был, например, 2 блока назад, то она ждёт минимум одной нотаризации, даже если блок, в который она включена, подтверждён. Когда будет подтверждён следующий блок, число подтверждений (confirmations) будет оставаться 1.

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

Допустим, что следующие 10 блоков нет нотаризованных блоков, синхронизированных с блокчейном. В таком случае выход неподтверждённой транзакции txid будет показывать confirmations: 1 и rawconfirmations: 10. И если 11-й блок будет нотаризован, счётчик обновится до confirmations: 11 и rawconfirmations: 11.

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

satinder@linux:~$ komodo-cli getrawtransaction "002dc8d587b0ea34797c8f3ab87ee8d3377443672b8d5d0fafcf826592c921f1" 1 | tail
],
"vjoinsplit": [
],
"blockhash": "00000003063189fef9623f920cc4c9444af857004fed8a21361351aee8690fe6",
"height": 1138123,
"confirmations": 1,
"rawconfirmations": 1,
"time": 1544696732,
"blocktime": 1544696732satinder@linux:~$ komodo-cli getrawtransaction "002dc8d587b0ea34797c8f3ab87ee8d3377443672b8d5d0fafcf826592c921f1" 1 | tail
],
"vjoinsplit": [
],
"blockhash": "00000003063189fef9623f920cc4c9444af857004fed8a21361351aee8690fe6",
"height": 1138123,
"confirmations": 1,
"rawconfirmations": 11,
"time": 1544696732,
"blocktime": 1544696732
}satinder@linux:~$ komodo-cli getrawtransaction "002dc8d587b0ea34797c8f3ab87ee8d3377443672b8d5d0fafcf826592c921f1" 1 | tail
],
"vjoinsplit": [
],
"blockhash": "00000003063189fef9623f920cc4c9444af857004fed8a21361351aee8690fe6",
"height": 1138123,
"confirmations": 23,
"rawconfirmations": 23,
"time": 1544696732,
"blocktime": 1544696732
}
satinder@linux:~$

Следствие этого обновлённого правила достаточно простое и прямолинейное: защита блокчейна от атак 51% (двойного расходования). Как известно, на централизованных криптобиржах сумма пополнения кошелька недоступна клиенту до определённого числа подтверждений транзакции. Таким образом, данное правило dpowconf – самый надёжный способ для любой централизованной биржи защититься от атак 51% на блокчейны, внедрившие метод безопасности dPoW.

Мифы и факты о dPoW

фото логотип komodo на смартфоне

Миф 1. Нотариальные узлы – это централизованное решение

  • Есть 64 нотариальных узла.
  • Все 64 нотариальных узла выбираются сообществом.
    • 4 нотариальных узла принадлежат разработчикам. Они переизбираются каждый год.
    • 30 нотариальных узлов переизбираются исходя из их показателей нотаризации по BTC (и ассетчейнов по KMD).
    • 30 вакансий нотариальных узлов открыты для ежегодных выборов.
    • Процесс создания транзакции такой же, как для любого другого сетевого узла, и трансляция этой транзакции с любого узла с нотариальными данными не делает процесс централизованным.

Миф 2. Нотариальные узлы аналогичны мастернодам

  • В отличие от мастернод, чтобы стать нотариальным узлом Komodo, требуется ровно 0,00000000 KMD. Чтобы стать оператором нотариального узла, KMD НЕ нужны. Чтобы начать выполнять процесс нотаризации, достаточно быть избранным сообществом KMD.
  • До начала работы в публичной сети надёжность и навыки кандидатов на операторов нотариальных узлов оцениваются в тестнете. Это помогает сообществу и участникам команды Komodo убедиться, что для децентрализованной сети нотариальных узлов будут выбраны самые эффективные и квалифицированные операторы.

Анализ атак на dPoW

Оригинальная, неотредактированная версия уайтпейпера dPoW, написанная jl777 (Джеймсом Ли), содержит анализ всех возможных атак и вкратце рассматривает, почему эти атаки невозможны при наличии в блокчейне нотаризованных блоков.

Атака двойного расходования

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

Например, если блокчейн получает новый блок примерно каждые 60 секунд (как KMD и ассетчейны), а частота нотаризации примерно раз в 10 минут, то максимальное время, имеющееся у злоумышленника на атаку между нотаризациями – около 10 минут. Это примерно 10 (максимум 12) блоков, когда злоумышленник может попытаться внести изменения, причём он не может изменить блоки, предшествующие последней нотаризации.

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

Для рассмотрения всех возможных векторов атаки понадобилась бы отдельная статья, поэтому перейдём к последнему гипотетическому варианту атаки, предложенному Джастином Эренхофером во время дискуссии с jl777 на сервере Komodo в Discord.

Самоубийственная атака нотариального узла

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

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

Несогласие одного нотариального узла

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

Битовая маска – это результат комбинации информации о высоте последнего блока + блокхеше + расчёте битовой маски + согласии других нотариальных узлов в сети. Один нотариальный узел не может расстроить процесс нотаризации.

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

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

Несогласие более чем одного нотариального узла

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

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

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

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

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

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

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

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

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

Массовое несогласие нотариальных узлов

Допустим, что вся сеть нотариальных узлов не согласна с остальными полными узлами и майнерами пиринговой сети блокчейна. И цель их атаки – реорганизовать блок, который уже нотаризован. Это невозможно, поскольку протокол dPoW не позволяет реорганизовать нотаризованные блоки.

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

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

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

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

«Я считаю, что dPoW не идеален, но для цепочки с небольшим хешрейтом это лучше, чем отсутствие dPoW, – jl777, разработчик ядра платформы Komodo».

Перефразируя текст Джеймса Ли из чата (источник):

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

 

И также необходим общий консенсус насчёт того, какой блокчейн верный, так что пытаться осуществить двойное расходование посредством такого механизма – непрактично. Намного проще провести атаку 51% на блокчейн без нотаризации. Моя позиция такова, что dPoW не идеально, но для блокчейнов без большой вычислительной мощности оно явно лучше, чем его отсутствие.

 

Можно убедить узел, который не видит нотаризованный блокчейн, в существовании блокчейна B. После нотаризации двойное расходование невозможно. После повторной синхронизации блокчейн A победит, так как он нотаризован. Блокчейн B не сможет пойти дальше одного «подтверждения», так как он не был нотаризован. Поэтому ни один платёж в блокчейне B не будет признан».

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

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

  • Прежде всего, когда блокчейн защищён с помощью механизма dPoW, его безопасность намного увеличивается. Это касается как нотариальных узлов, так и обычных полных узлов и майнеров. Хотя нотариальные узлы имеют небольшое преимущество над обычными полными узлами и майнерами при проведении атаки на защищённый dPoW блокчейн, им всё равно на много порядков сложнее атаковать такой блокчейн, чем тот, у которого нет dPoW.
  • Любая целенаправленная атака со стороны нотариальных узлов сразу же раскроет злоумышленников, то есть все будут знать, кто это сделал. Поэтому даже при маловероятной попытке злоумышленного сговора причастные к нему нотариальные узлы немедленно будут идентифицированы и внесены в чёрный список. Но сговор почти наверняка не принесёт финансовой прибыли, так что маловероятно, чтобы операторы нотариальных узлов вообще пытались это провернуть.
  • Сговор сам по себе также маловероятен, поскольку у нечестных операторов нотариальных узлов не будет причин доверять друг другу. Это известно как «дилемма воровской чести». В крайне маловероятном случае атаки двойного расходования нечестная транзакция будет отправляться на какой-то конкретный адрес, то есть контролируемый одним (и только одним) из узлов-злоумышленников. Какие гарантии имеют другие участники сговора, что этот узел поделится выручкой? Очень высок риск, что они уничтожат свою репутацию и не получат взамен абсолютно ничего, что ещё больше снижает мотивацию вступать в сговор.
  • Наконец, стоит подчеркнуть, что проще провести атаку 51% на блокчейны без dPoW. Для нотариальных узлов атака на защищённый dPoW блокчейн экономически невыгодна по стольким параметрам, что их небольшого преимущества недостаточно, чтобы такая атака была проще атаки на блокчейн без dPoW. Это касается как операторов нотариальных узлов, так и всех остальных. В сущности, добавление dPoW делает атаку сложнее для всех, даже для нотариальных узлов. Если бы нотариальные узлы действительно имели злой умысел, то они бы атаковали какой-то другой блокчейн, не защищённый с помощью dPoW.

Масштабирование нотариальных узлов

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

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

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

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

Альтернативная сеть нотариальных узлов для dPoW

Метод dPoW не привязан к нотариальным узлам платформы Komodo. Чтобы нотаризовать один блокчейн по другому, не обязательно использовать официальные нотариальные узлы Komodo.

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

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

Копия кода Komodo потребует кое-каких изменений. Главным образом, надо будет добавить публичные ключи нотариальных узлов.

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

Альтернативная сеть нотариальных узлов уже существует у проекта KMDLabs. Команда проекта также сделала некоторые усовершенствования, чтобы больше автоматизировать свою сеть нотариальных узлов. Больше информации о проекте KMDLabs можно найти на https://kmdlabs.io/.

В завершение

Процесс dPoW может показаться запутанным, но если понять его внутренние механизмы, то можно убедиться, что это лучшее решение против атак 51%. Можно было бы привести ещё больше подробностей, ссылаясь на объяснения разработчиков платформы Komodo, но эта статья не нацелена исключительно на программистов. Она должна стать полезной как для технически подкованных, так и для обычных пользователей. Я лично тоже многое прояснил для себя во время её написания благодаря помощи Джеймса Ли (jl777) и других разработчиков проекта, таких как Decker. Было много такой информации, которая отсутствовала во внешних источниках, поэтому я включил здесь то, что, по моему мнению, должно стать общедоступным.

Источник


Источник

*Биткоин бесплатно получить

*Купить, продать, обменять Биткоин

Теги: Инфраструктура  Криптография  Сервисы  Стандарты  Komodo  безопасность_биткойна  безопасность_блокчейнов  безопасность_данных  безопасность_кошельков  безопасность_криптовалют  безопасность_транзакций  блокчейн_как_сервис  блокчейн_решения_для_бизнеса  масштабирование_биткойна  масштабирование_блокчейнов  масштабируемость_биткойна  подтверждение_транзакций  проблема_масштабирования_блокчейна  проблема_масштабируемости  решение_второго_слоя  решение_второго_уровня  споры_о_масштабируемости 



[vkontakte] [facebook] [twitter] [odnoklassniki] [mail.ru] [livejournal]

Каталог сайтов