Выборы тайного лидера
В сегодняшнем механизме консенсуса, основанном на доказательстве владения, список ближайших предлагающих блоки является общедоступным, можно составить карту их IP-адресов. Это означает, что злоумышленники могут определить, какие валидаторы должны предложить блок, и нацелить на них атаку типа «отказ в обслуживании» (DOS-атаку), которая не позволяет им предложить свой блок вовремя.
Это может дать злоумышленнику возможность получить прибыль. Например, предлагающий блок, выбранный для слота n+1
, может провести DOS-атаку на предлагающего в слоте n
, чтобы тот упустил возможность предложить блок. Это позволило бы предлагающему блок, совершающему атаку, извлечь MEV обоих слотов или захватить все транзакции, которые должны были быть разделены на два блока, и вместо этого включить их все в один, получая все связанные комиссии. Скорее всего, это больше влияет на домашних валидаторов, чем на опытных институциональных, которые могут использовать более передовые методы для защиты от DOS-атак и, таким образом, стать централизирующей силой.
Существуют несколько решений этой проблемы. Одно из них — технология распределенного валидатора(opens in a new tab), которая направлена на распределение различных задач, связанных с выполнением кода валидатора, по нескольким машинам с избыточностью, так что злоумышленнику гораздо труднее будет предотвратить предложение блока в конкретную ячейку. Однако самым надежным решением является выбор одного тайного лидера (SSLE).
Выбор одного тайного лидера
Для SSLE используется умная криптография для обеспечения того, чтобы только выбранный валидатор знал, что он был выбран. Это работает путем представления каждым валидатором обязательства к секрету, который они все разделяют. Обязательства перетасовываются и изменяются таким образом, чтобы никто не мог сопоставить обязательства с валидаторами, но каждый валидатор знал, какое обязательство ему принадлежит. Затем случайно выбирается одно обязательство. Если валидатор обнаруживает, что его обязательство было выбрано, он знает, что сейчас его очередь предложить блок.
Ведущая реализация этой идеи называется Whisk(opens in a new tab). Она работает следующим образом:
- Валидаторы подчиняются общему секрету. Схема обязательств разработана таким образом, что она может быть привязана к идентификатору валидатора, а также рандомизирована, чтобы никакая третья сторона не могла связать конкретное обязательство с конкретным валидатором, даже используя обратную инженерию.
- В начале эпохи выбирается случайный набор валидаторов для выборки обязательств из 16 384 валидаторов с использованием RANDAO.
- Для следующих 8182 ячеек (1 день) валидаторы перемешивают и рандомизируют подмножество обязательств, используя их собственную энтропию.
- После завершения перетасовки RANDAO используется для создания упорядоченного списка обязательств. Этот список проецируется на ячейки Ethereum.
- Валидаторы видят, что их обязательства привязаны к определенной ячейке. Когда наступает время этой ячейки, они предлагают блок.
- Эти шаги повторяются, чтобы распределение обязательств по ячейкам всегда значительно опережало нынешнюю ячейку.
Это мешает злоумышленникам заранее узнать, какой конкретный валидатор предложит следующий блок, предотвращая возможность DOS-атак.
Выбор не единственного тайного лидера (SnSLE)
Существует также отдельное предложение, направленное на создание сценария, при котором каждый из валидаторов имеет случайный шанс предложить блок в каждом слоте, подобно тому, как предложение блока определялось при доказательстве работы. Это называется выбором нескольких тайных лидеров (SnSLE). Один из простых способов реализовать это — использовать функцию RANDAO, применяемую для случайного выбора валидаторов в действующем сейчас протоколе. Идея с RANDAO заключается в том, что достаточно случайное число генерируется путем смешивания хэшей, представленных многими независимыми валидаторами. При SnSLE эти хэши можно использовать для выбора следующего предлагающего блок, например выбрав хэш с самым низким значением. Диапазон допустимых хэшей может быть ограничен для настройки вероятности выбора отдельных валидаторов в каждом слоте. Предполагая, что хэш должен быть меньше, чем 2^256 * 5 / N
, где N
= число активных валидаторов, шанс любого отдельного валидатора быть выбранным в каждом слоте будет равен 5/N
. В этом примере есть вероятность 99,3 %, что по крайней мере один предлагающий сгенерирует действительный хэш в каждой ячейке.
Текущий прогресс
SSLE и SnSLE находятся в стадии исследования. Окончательных спецификаций ни для одной из этих идей пока нет. SSLE и SnSLE — конкурирующие предложения, которые не могут быть реализованы вместе. Перед внедрением они нуждаются в дополнительных исследованиях и разработках, прототипировании и реализации в общедоступных тестовых сетях.