:RU: Как работает лотерея в сети Cardano?

Перевод статьи How does the lottery work on the Cardano network? | Cardano Explorer

image

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

Кто станет следующим лидером слота

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

В сети Cardano время разделено на слоты. Каждый слот длится 1 секунду. В каждом слоте есть лотерея, которая выполняется каждым пулом автономно и нуждается только в информации, доступной ноде. Лотерея не требует какого-либо центрального контроля. Протокол намеренно настроен на определение победителя примерно каждые 20 секунд. Победитель называется лидером слота. Иногда может случиться так, что 2 лидера слотов выигрывают в одном раунде, что не имеет значения, потому что существует определенное правило, позволяющее решить, какой блок является правильным.

Проверяемая Случайная Функция

Криптографический примитив, называемый проверяемой случайной функцией (VRF), используется для розыгрыша лидеров слотов. VRF был введен Микали (Micali), Рабином (Rabin) и Вадханом (Vadhan) в 1999 году и используется в различных криптографических схемах, протоколах и системах.

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

Давайте взглянем на то, как работает VRF в целом. VRF предоставляет три алгоритма:

  • Кейген (r) → (VK, SK). Вначале необходимо сгенерировать ключ верификации (VK) и секретный ключ (SK) на основе случайного входа (r).
  • Вычисление (SK, X) → (Y, ⍴). Вычислительный алгоритм выдает псевдослучайную выходную строку (Y) и доказательство (⍴) на основе двух входных данных - секретного ключа (SK) и сообщения (X).
  • Проверка (VK, X, Y, ⍴) → 0/1. Алгоритм проверки обрабатывает выходные данные вычислительного алгоритма, а именно выходную строку (Y) и доказательство (⍴) вместе с сообщением (X) и ключом верификации (VK), чтобы получить либо 1, либо 0. Результат равен 1 тогда и только тогда, когда (Y) является результатом, полученным в результате вычислительного алгоритма с входными данными (SK) и (X).

Выходная строка Y является псевдослучайной и уникальной. Невозможно найти другой выход вместе с действительным доказательством для данной пары ключей (VK, SK) и входа X. Выход Y выглядит случайным для любой третьей стороны, которая не видит связанного доказательства ⍴. Другими словами, чтобы полностью проверить выход Y и отличить его от другого случайного выхода (который может иметь то же значение), необходимо также иметь доказательство (⍴), которое нельзя легко создать, не зная секретного ключа (SK).

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

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

WIbowFYgiiGqjDGisOZ8yUOsf50WK0SU99K5qQdyLyCXU3b7mAGAWAZnkEVchAiMyYuSwS1JUZa8xXJDG0YceRHguClidZ_sU0-HyO281UK4-b4OTyA4PEmKL5wSb3EnMRmXzX3lI9KRdkgpgg80egKZvl46PC9hYciVSQN_okUsgoFSWVYx_P5UQw

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

L3UKkJXfPT07DvgEZ-pxz-qTVvs_4vYhAnrlNJE1Pp74MW3bbrbAbxqEHplvOhWIJPJUdydTXHkXB4el5i3jr0Q9L8CO_K2UaWkJZTD4x8MrIU53Q84ExDNe42oNIVG0XnkNoTj8qk_hUhSBEsu-NlGnFa0Bo285VN-JBxx4L8qL5-ZGxKF1NvHqiQ

Поиск победителя

Вычислительный алгоритм VRF имеет несколько входных данных. Помимо прочего, к ним относятся идентификатор (ID) слота, для которого в данный момент проводится лотерея, и ⅔ всех выходных данных VRF за предыдущую эпоху, из которых создается единый хеш (значение). Этот хеш также называется Nonce. Nonce делает невозможным вычисление результатов VRF задолго наперед.

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

Стейк пулов может меняться буквально с каждым блоком. Ouroboros PoS делает снапшот (моментальный снимок) блокчейна каждые 5 дней и учитывает стейк, который был активен (действительным) во время моментального снимка. Активный стейк может отличаться от текущего стейка (live stake).

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

image

Когда нода узнает, что она стала лидером слота, она создает новый блок и вставляет доказательства VRF в заголовок блока.

yDcfzxSq0s37xXQKsB290r9fjw3anMn-G0l-8mKwapEXMq1SI5J1vEL6dSXJypvMjU0T7BpZmbxBnD-gloOf2Zal4S9FZPPF6oN3BFrwLR8-CFhoGqXt5Gc-Afwxk5ae3ExwDnjQwb0Ebfgj4Ft0j2aBj1HSF33PLSQr9c_yuiIHG-XkpHAk3zelJQ

Любая другая нода в сети использует алгоритм верификации VRF для проверки того, что блок валиден, как заявляет производитель блока. Для проверки используются доказательства VRF, содержащиеся в предлагаемом блоке.

В дополнение к доказательствам VRF блок должен быть подписан ключом KES (Key Evolving Signature cryptography). Это следующий уровень безопасности, так что, если злоумышленник смог каким-то образом нарушить работу VRF, у него все равно нет ключей KES операторов для подписи блоков.

Преимущества VRF

Преимущество VRF заключается в том, что блоки могут создаваться в сети чаще, без необходимости потреблять чрезмерное количество энергии, как в сетях PoW. Одна из главных особенностей PoW также связана с лотереей. В каждом раунде все пулы сражаются друг с другом, чтобы увидеть, кто быстрее решит энергоемкую криптографическую задачу. В этом соревновании случайность играет значительную роль. Аналогично Ouroboros PoS, в PoW чем больше хешрейт, делегированный данному пулу, тем больше вероятность того, что пул выиграет в лотерее. В сети Cardano хешрейт заменен монетами ADA.

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

tfQJM84Jcpw0AoJN_iodX7DZ0CskV4YjfG-JVDz5MkRcrVnPSqACnzMM5EUes2KY6Hf3uJVJZPctLQrRD69L5KawsIh5B8mGFIcCB8WWJLCwvZZWuPWrJfS3zYXVaQXRoHmpliVeGKZzi_-EDs7Hne83AJyfjY5ZzAmwtOiuZ2QwbRMs84Xqv_bcJw

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

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

Вывод

VRF был создан более 20 лет назад, поэтому он является надежным криптографическим инструментом. В дополнение к Cardano, он также используется в проекте Algorand. На момент написания статьи VRF надежно работает в сети Cardano уже 2 года и участвует в розыгрыше лидеров слотов. В будущем VRF будет использоваться не только для розыгрыша лидеров слотов, но и для индоссантов входов. Это не может быть реализовано с PoW, так как хешрейт должен быть разделен.

// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова, а также на канале Чарльз Хоскинсон на русском. Хотите поговорить или задать вопрос о Cardano по-русски? Приглашаем вас в наше уютное сообщество в Telegram. Оставайтесь на связи, все только начинается!