Каким образом VRF Polkadot добивается случайного перемешивания валидаторов?
В отличие от Ethereum, который использует RANDAO (возможно, расширенный с помощью VDF), в Polkadot проверяемая случайная функция (VRF) используется для перетасовки валидаторов и выбора потенциальных предложителей блоков для определенных слотов. Откуда берется случайность, т.е. как конкретно работает случайность?
1 ответ
Проверяемая случайная функция - это функция, которая в псевдокоде может быть выражена так:
(RESULT, PROOF) = VRF(SECRET, INPUT)
То есть для некоторого секрета и некоторого ввода (который может быть общедоступным) результатом является кортеж RESULT
а также PROOF
, где PROOF
могут использоваться сторонними наблюдателями для проверки легитимности VRF RESULT
.
Другими словами, выполнение "прокрутки VRF" приводит к случайному числу и доказательству того, что вы получили это случайное число, а не просто выбрали его.
Каждый слот (примерно каждые 6 секунд) каждый валидатор будет запускать функцию VRF. ВSECRET
будет их ключом VRF, специальным ключом, который будет использоваться только для этого, сгенерированным валидатором и хранящимся в секрете. ВINPUT
- это либо конкретное значение из блока генезиса, если в цепочке существует менее 2 эпох, либо хэш всех результатов VRF за последние 2 эпохи.
Как только валидатор выполнил VRF, RESULT
сравнивается с THRESHOLD
значение, которое определяется протоколом. ЕслиRESULT
меньше чем THRESHOLD
, валидатор является действительным кандидатом на создание блока для этого слота. В противном случае валидатор пропускает этот слот.
Это означает, что может быть несколько валидаторов, которые создают блоки-кандидатов на слот, и в этом случае блок, который выбирается другими узлами, является преобладающим, если он находится в цепочке с самым последним завершенным блок в соответствии с гаджетом окончательности GRANDPA. Также возможна ситуация, когда не существует производителей блоков для слота, и в этом случае консенсус AURA вступит во владение. Консенсус AURA - это в основном резерв, который выбирает случайный валидатор для каждого блока. Он работает параллельно с BABE и имеет значение только тогда, когда в слоте нет производителей блоков, иначе он игнорируется.