:RU: Что собой представляют битвы слотов

Перевод статьи https://cexplorer.io/article/understanding-slot-battles

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

Как создаются блоки в сети Cardano

Эпоха Cardano длится 5 дней и делится на так называемые слоты продолжительностью в одну секунду. Таким образом, в эпоху насчитывается 432 000 слотов. Рандомность протокола Cardano настроена таким образом, чтобы генерировать блок примерно каждые 20 секунд. Таким образом, за каждую эпоху может быть создано примерно 21 600 блоков.

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

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

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

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

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

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

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

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

image

В нашем примере нода 7 стала лидером слота. Выход VRF составил 28 454 834, а пороговое значение - 30 000 000. Таким образом, нода создает новый блок и вставляет доказательство VRF (выход VRF) в заголовок блока.

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

Кто победит в битве слотов?

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

В нашем примере нода 7 стала лидером слота, поскольку выход VRF составил 28 454 834, что меньше порогового значения в 30 000 000. В том же слоте лидером также стала нода 3 с выходом VRF в 16 459 996, что меньше порогового значения в 27 500 000.

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

Если распределение блоков происходит быстро (с низкой задержкой), вполне вероятно, что многие другие ноды в сети получат оба блока. Таким образом, блок, созданный нодой 7 с выходом VRF 28 454 834, и блок, созданный нодой 3 с выходом VRF 16 459 996.

Если нода получает два валидных блока для одного слота, она выберет тот, у которого меньший выход VRF. Нода отбрасывает блок с более высоким VRF, по сути, делая его сиротским. Пулы с более низким стейком имеют преимущество в битве за слот, потому что существует большая вероятность того, что будет получено меньшее доказательство VRF. (прим. переводчика: этот механизм изменился после развертывания хардфорка Vasil, и теперь пулы с меньшим стейком не имеют преимуществ)

Вы, вероятно, уже знаете, что в нашем примере красный блок, созданный нодой 3, победил зеленый блок, созданный нодой 7.

image

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

С точки зрения блокчейна ситуация выглядит следующим образом. В слоте N+40 произошла битва за слот. Нода получает два блока, созданных в одном и том же слоте. Она выбирает красный блок в качестве последнего в блокчейне и отбрасывает зеленый. Еще один блок создан в слоте N+60, и лидер слота правильно проследовал за красным блоком. С каждым добавленным дополнительным блоком становится все более очевидным, что цепочка, стоящая за красным блоком, останется в блокчейне навсегда, в то время как зеленый блок останется сиротским.

Как мы упоминали в начале, за одну эпоху может быть создано примерно 21 600 блоков. Лучшим результатом за последние несколько эпох стало 21 417 блоков, созданных в эпоху 411. Обычно в эпохи создается от 20 900 до 21 110 блоков. Нода может стать лидером слота, и по какой-то причине она может быть не в состоянии создать блок (например, потому что она не подключена к сети в тот момент, когда она стала лидером слота).

Битвы слотов происходят относительно часто, около 420 в каждую эпоху, то есть примерно по 4 в час. Это составляет около 2% от общего количества блоков. Поэтому рекомендуется подождать несколько блоков, прежде чем рассматривать блок с вашей транзакцией как окончательный. Если в час происходит около 4 битв слотов, я осмелюсь утверждать, что ожидание 6 блоков (2 минуты) - это достаточно долго, чтобы убедиться, что блок окончательный.

Вывод

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

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