Переход от лидера к валидатору

Валидатор обычно тратит свое время на проверку блоков. Однако, если стейкер делегирует свою ставку валидатору, он иногда будет выбран в качестве «лидера слота». Как лидер слота, валидатор отвечает за создание блоков в течение назначенного слота. Слот имеет продолжительность некоторого количества предварительно настроенных тиков. Продолжительность этих тиков оценивается с помощью PoH Recorder, описанного далее в этом документе.

Банкфорк

BankFork отслеживает изменения состояния банка в конкретном слоте. После регистрации последнего тика состояние замораживается. Любые попытки написать отвергаются.

Валидатор

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

Лидер слота

Лидер слота строит блоки поверх только одной вилки, той, за которую он проголосовал последним.

Регистратор PoH

Лидеры слотов и валидаторы используют регистратор PoH как для оценки высоты слота, так и для записи транзакций.

Регистратор PoH при проверке

Регистратор PoH действует как простой VDF при проверке. Он сообщает валидатору, когда ему нужно переключиться на роль лидера слота. Каждый раз, когда валидатор голосует за форк, он должен использовать последний [блокхэш] форка (../terminology.md#blockhash) для повторного заполнения VDF. Повторное заполнение решает две проблемы. Во-первых, он синхронизирует свой VDF с ведущим, что позволяет более точно определить, когда начинается его слот лидера. Во-вторых, если предыдущий лидер выходит из строя, все время настенных часов учитывается в потоке PoH следующего лидера. Например, если при запуске лидера отсутствует один блок, создаваемый им блок должен иметь продолжительность PoH, равную двум блокам. Большая продолжительность гарантирует, что следующий лидер не будет пытаться отрезать все транзакции из слота предыдущего лидера.

Регистратор PoH при ведении

Лидер слотов использует PoH Recorder для записи транзакций, своевременно фиксируя свои позиции. Хэш PoH должен быть получен из последнего блока предыдущего лидера. Если это не так, его блок не пройдет проверку PoH и будет отклонен кластером.

Регистратор PoH также служит для информирования лидера слота, когда его слот закончился. Лидер должен позаботиться о том, чтобы не изменить свой банк, если запись транзакции приведет к созданию высоты PoH за пределами назначенного слота. Следовательно, лидер не должен фиксировать изменения учетной записи до тех пор, пока он не сгенерирует хэш PoH записи. Когда высота PoH выходит за пределы своего слота, любые транзакции в его конвейере могут быть удалены или перенаправлены следующему лидеру. Переадресация предпочтительнее, так как она минимизирует перегрузку сети, позволяя кластеру объявить о более высокой пропускной способности TPS.

Цикл проверки

Регистратор PoH управляет переходом между режимами. После воспроизведения реестра валидатор может работать до тех пор, пока регистратор не укажет, что он должен быть лидером слота. В качестве лидера слота узел может затем выполнять и записывать транзакции.

Цикл синхронизируется с PoH и выполняет синхронный запуск и останов функции лидера слота. После остановки TVU валидатора должен оказаться в том же состоянии, как если бы другой лидер отправил ему тот же блок. Ниже приведен псевдокод цикла:

  1. Запросите у LeaderScheduler следующий назначенный слот.

  2. Проведите TVU по всем разветвлениям. 1. TVU направит голоса тому, что, по его мнению, является «лучшим» форком. 2. После каждого голосования перезапустите регистратор PoH, чтобы он работал до следующего назначенного слота.

  3. Когда придет время стать лидером слота, запустите TPU. Укажите на последнюю развилку, за которую голосовал TVU.

  4. Производить записи до конца слота. 1. Во время слота TVU не должен голосовать за другие форки. 2. После окончания слота TPU замораживает свой BankFork. После заморозки TVU может возобновить голосование.

  5. Перейти к 1.