Как работает выбор вилки в Polkadot?
У Polkadot есть GRANDPA для доработки и BABE для производства блоков. Говорят, что BABE может продолжать создавать блоки даже без GRANDPA и даже без большинства онлайн-валидаторов. Как BABE узнает, какую цепочку продолжать?
1 ответ
BABE - это алгоритм производства блоков в цепочке реле Polkadot. Он использует VRF, проверяемую случайную функцию, чтобы выбрать кандидата на производство блока среди набора валидаторов. Этот производитель блоков является основным. В то же время BABE в фоновом режиме запускает циклический алгоритм выбора, чтобы выбрать вторичный валидатор из набора для создания блока, если VRF не привел к выбору каких-либо валидаторов в качестве первичных. Используя этот метод двойного выбора, BABE поддерживает постоянное время блока - первичные цвета, если выбраны, вторичные, если нет.
Возможно, что VRF квалифицирует несколько валидаторов для создания блоков, и в этом случае оба блока действительны. На этом этапе от задержки в сети будет зависеть, насколько быстро остальная часть сети увидит каждый блок - это определит победителя.
Согласно GRANDPA, когда 2/3 или более валидаторов соглашаются на блок, этот блок и все блоки, ведущие к нему, немедленно завершаются.
Так что же происходит, когда BABE разветвляется и строится на двух отдельных цепочках?
Правило в Polkadot таково:
- сначала посмотрите, какая цепочка имеет ближайший завершенный блок
- затем, если на этой завершенной головке есть вилки, выберите ту с наибольшим количеством первичных цветов - те, которые выбраны VRF, по сравнению с алгоритмом циклического перебора.
Если ничья по-прежнему сохраняется, неоднозначность сохраняется до тех пор, пока две трети валидаторов не завершат блок в одной из вилок и не ампутируют другую.