Алгоритм консенсуса Proof of Authority

В приватном блокчейне не всегда нужны токены - например, блокчейн может быть использован для хранения хешей документов, которыми обмениваются организации. В таком случае, при отсутствии токенов и комиссий с транзакций, решение на базе алгоритма консенсуса PoS является избыточным. В Vostok можно выбрать альтернативный алгоритм консенсуса — Proof of Authority. Разрешение на майнинг в алгоритме PoA выдаётся централизовано. Это упрощает принятие решений по сравнению с алгоритмом PoS. Модель Proof of Authority основана на ограниченном количестве валидаторов блока, что делает её масштабируемой системой. Блоки и транзакции проверяются заранее утвержденными участниками, которые выступают в качестве модераторов системы.

Описание алгоритма

На базе представленных ниже параметров формируется алгоритм определения майнера текущего блока. Параметры консенсуса указываются в блоке consensus конфигурационного файла ноды.

  • t - длительность раунда в секундах (параметр конфигурационного файла ноды: round-duration).
  • ts - длительность периода синхронизации, вычисляется как t*0,1, но не более 30 секунд (параметр конфигурационного файла ноды: sync-duration).
  • Nban - количество пропущенных подряд раундов для выдачи бана майнеру (параметр конфигурационного файла ноды: warnings-for-ban);
  • Pban - доля максимального количества забаненных майнеров, в процентах от 0 до 100 (параметр конфигурационного файла ноды: max-bans-percentage);
  • tban - продолжительность бана майнера в блоках (параметр конфигурационного файла ноды: ban-duration-blocks).
  • T0 - unix time создания genesis блока.
  • TH - unix time создания блока H — ключевой блок для NG.
  • r - номер раунда, вычисляется как (TCurrent -T0 ) div (t+ ts ).
  • Ar - лидер раунда r, имеющий право на создание ключевых блоков и микроблоков для NG в раунде r.
  • H – высота цепочки, на которой создается ключевой блок и микроблоки для NG. Право на выпуск блока на высоте H имеет лидер раунда Ar .
  • MH - майнер, выпустивший блок на высоте H.
  • QH - очередь активных на высоте H майнеров.

Очередь QH формируется из адресов, которым permission транзакцией выдано разрешение на майнинг, у которых оно не было отозвано до высоты H, и не истекло до момента времени TH .

Очередь сортируется по временной метке транзакции предоставления прав на майнинг – узел, которому права были предоставлены раньше, будет выше в очереди. Для согласованной сети эта очередь будет одинакова на каждой ноде.

Новый блок создается в течение каждого раунда r. Раунд длится t секунд. После каждого раунда отводится ts секунд на синхронизацию данных в сети. В период синхронизации микроблоки и ключевые блоки не формируются. Для каждого раунда существует единственный лидер Ar , который имеет право создать блок в этом раунде. Определение лидера может производиться на каждом узле сети с одинаковым результатом. Определение лидера раунда осуществляется следующим образом:

  1. Определяется майнер MH-1 , который создал предыдущий ключевой блок на высоте H-1.
  2. Вычисляется очередь QH активных майнеров.
  3. Из очереди исключаются неактивные майнеры (подробнее в пункте Исключение неактивных майнеров).
  4. Если майнер блока H-1 (MH-1 ) есть в очереди QH , лидером Ar становится следующий по очереди майнер.
  5. Если майнера блока H-1 (MH-1 ), нет в очереди QH , лидером Ar становится майнер, идущий в очереди за майнером блока H-2(MH-2 ), и так далее.
  6. Если ни одного из майнеров блоков (H-1..1) нет в очереди, лидером становится первый майнер очереди.

Данный алгоритм позволяет детерминировано вычислить и проверить майнера, который должен был создать каждый блок цепочки, за счет возможности вычислить список авторизованных майнеров на каждый момент времени. Если блок не был создан назначенным лидером в отведенное время, в текущий раунд не производится блоков, раунд «пропускается». Лидеры, пропускающие создание блоков, временно исключаются из очереди по алгоритму, описанному в пункте Исключение неактивных майнеров.

Валидным считается блок, выпущенный лидером Ar с временем блока TH из полуинтервала (T0 +(r-1)*(t+ts ); T0 +(r-1)*(t+ts )+t]. Блок, созданный майнером не в свою очередь или не вовремя, не считается валидным. После раунда длительностью t сеть синхронизирует данные в течение ts . У лидера Ar есть время ts для того, чтобы распространить валидный блок по сети. Если каким-либо узлом сети за время ts не был получен блок от лидера Ar , этот узел признает раунд «пропущенным» и ожидает новый блок H в следующем раунде r+1, от следующего лидера Ar+1 .

Параметры консенсуса: тип (PoS или PoA), t, ts задаются в конфигурационном файле узла сети. Параметр t при этом должен совпадать у всех участников сети, иначе произойдет форк сети.

Синхронизация времени между узлами сети

Каждый узел сети должен синхронизировать время приложения с доверенным NTP-сервером в начале каждого раунда. Адрес и порт сервера указывается в конфигурационном файле ноды. Сервер должен быть доступен каждой ноде сети.

Исключение неактивных майнеров

Если каким-либо майнером Nban раз подряд было пропущено создание блока, этот майнер исключается из очереди на tban последующих блоков (параметр ban-duration-blocks в конфигурационном файле). Исключение выполняется каждым узлом самостоятельно на основании вычисляемой очереди QH и информации о блоке H и майнере MH . С помощью параметра Pban задается максимально допустимая доля исключенных майнеров в сети относительно всех активных майнеров в любой момент времени. Если при достижении Nban пропусков раунда известно, что максимальная доля исключенных майнеров Pban достигнута, то исключение очередного майнера не производится.

Мониторинг

Мониторинг консенсуса PoA помогает выявлять факты создания и распространения невалидных блоков, а также пропуски очереди майнерами. Дальнейшие действия по выявлению и устранению неисправностей, а также блокировке вредоносных узлов выполняются администраторами сети.

В целях мониторинга процесса формирования блоков для алгоритма PoA в InfluxDB размещаются данные:

  • Активный список майнеров, отсортированный в порядке предоставления прав на майнинг.
  • Плановая временная метка раунда.
  • Фактическая временная метка раунда.
  • Текущий майнер.

Изменение параметров консенсуса

Изменение параметров консенсуса (время раунда и периода синхронизации) выполняется на основании данных конфигурационного файла ноды (см. врезку) на высоте «from-height». Если одна из нод не укажет новые параметры, то произойдет форк. Пример конфигурации :

// specifying inside of the blockchain parameter
consensus {
  type = poa
  sync-duration = 10s
  round-duration = 60s
  ban-duration-blocks = 100
  changes = [
    {
      from-height = 18345
      sync-duration = 5s
      round-duration = 60s
    },
    {
      from-height = 25000
      sync-duration = 10s
      round-duration = 30s
    }]
}