Генерация форков

В этом разделе описывается, как естественным образом возникают разветвления в результате ротации лидеров.

Обзор

Узлы по очереди становятся лидерами и генерируют PoH, который кодирует изменения состояния. Кластер может допустить потерю подключения к любому лидеру, синтезируя то, что лидер создал, если бы он был подключен, но не принимая никаких изменений состояния. Таким образом, возможное количество ответвлений ограничено списком пропуска ответвлений "там/не там", которые могут возникать на границах интервала вращения лидера. В любой заданный слот будут приниматься транзакции только одного лидера.

Поток сообщений

  1. Транзакции принимаются текущим лидером.
  2. Лидер фильтрует действительные транзакции.
  3. Лидер выполняет допустимые транзакции, обновляя свое состояние.
  4. Лидер упаковывает транзакции в записи на основе своего текущего слота PoH.
  5. Лидер передает записи узлам валидатора (подписанными клочьями)
    1. Поток PoH включает тики; пустые записи, указывающие на живучесть лидера и прохождение времени на кластере.
    2. Поток лидера начинается с записей тиков, необходимых для завершения PoH обратно к последнему наблюдаемому предыдущему слоту лидера.
  6. Валидаторы повторно передают записи одноранговым узлам в своем наборе и последующим нижестоящим узлам.
  7. Валидаторы проверяют транзакции и выполняют их в своем состоянии.
  8. Валидаторы вычисляют хэш состояния.
  9. В определенное время, т. е. определенное количество тиков PoH, валидаторы передают голоса лидеру.
    1. Голоса — это подписи хэша вычисленного состояния на этом подсчете тиков PoH.
    2. Голоса также распространяются через сплетни.
  10. Лидер выполняет голоса, как и любую другую транзакцию, и транслирует их в кластер.
  11. Валидаторы наблюдают за своими голосами и всеми голосами из кластера.

Разделы, вилки

Форки могут возникать при подсчете тиков PoH, соответствующих голосованию. Следующий лидер может не наблюдать за последним слотом для голосования и может начать свой слот со сгенерированных виртуальных записей PoH. Эти пустые тики генерируются всеми узлами в кластере с настроенной для кластера скоростью для хэшей/за/тик Z.

Есть только две возможные версии PoH во время слота голосования: PoH с тиками «T» и записями, сгенерированными текущим лидером, или PoH только с тиками. Версию PoH с «просто тиками» можно рассматривать как виртуальную книгу, которую все узлы в кластере могут получить из последнего тика в предыдущем слоте.

Валидаторы могут игнорировать разветвления в других точках (например, от неправильного лидера) или срезать лидера, ответственного за разветвление.

Валидаторы голосуют на основе жадного выбора, чтобы максимизировать свое вознаграждение, описанное в Tower BFT.

Взгляд валидатора

Прогресс во времени

На приведенной ниже диаграмме представлен взгляд валидатора на поток PoH с возможными разветвлениями с течением времени. L1, L2 и т. д. являются лидерскими слотами, а E представляет записи от этого лидера во время слота этого лидера. Значки «x» обозначают только тики, а время на диаграмме течет вниз.

Fork generation

Обратите внимание, что символ «E», появляющийся на двух ответвлениях в одном и том же слоте, является условием с косой чертой, поэтому валидатор, наблюдающий за «E3» и «E3», может срезать L3 и безопасно выбрать «x» для этого слота. Как только валидатор фиксирует форк, другие форки могут быть отброшены ниже этого количества тиков. Для любого слота валидаторам нужно рассмотреть только одну цепочку «есть записи» или цепочку «только тики», которые будут предложены лидером. Но несколько виртуальных записей могут перекрываться, поскольку они ссылаются на предыдущий слот.

Разделение времени

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

leader slotL1L2L3L4L5
dataE1E2E3E4E5
ticks since prevxxx

Обратите внимание, что во время слота лидера L3 будут приниматься только данные от лидера L3. Данные из L3 могут включать тики «наверстывания» обратно в слот, отличный от L2, если L3 не наблюдал данные L2. Передачи L4 и L5 включают записи PoH «такты до предыдущего».

Такое расположение потоков сетевых данных позволяет узлам сохранять именно это в реестре для воспроизведения, перезапуска и контрольных точек.

Взгляд Лидера

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