Skip to main content
IntentionBFT — протокол консенсуса Intention: византийски отказоустойчивый (BFT) протокол семейства HotStuff, расширенный под финансовую инфраструктуру. Безопасность держится безусловно при соблюдении порога отказов; живость — после стабилизации сети. Консенсус делает здесь две вещи, которых консенсус блокчейна общего назначения не делает: он фиксирует порядок как полноценный объект и фиксирует сертифицированный вектор цен в том же событии. Всё, что ядро может гарантировать об исполнении, держится на том, что и порядок, и цены решены до начала исполнения.

Модель

IntentionBFT выдерживает византийского противника, контролирующего до трети всей ставки. Честная ставка поэтому всегда составляет больше двух третей, а стандартный кворум — это любой набор валидаторов, чья суммарная ставка превышает две трети; на этих страницах он называется кворумом 2f+12f+1 по весу ставки. Сеть частично синхронна: до точки стабилизации задержки произвольны, после неё задержки между честными валидаторами ограничены.
Оракульный sidecarу каждого валидатора
Валидатор проверяет и подписываетв том числе свежесть по настроенным порогам
Gossip между валидаторамикак сообщение сети консенсуса
Сертифицированные ценыпо эпохам и раундам
Доступность цены управляет производством блоковВалидатор имеет право предложить блок, только если может предъявить валидные наблюдения цен за текущий раунд, — поэтому подписи, фиксирующие транзакции, фиксируют и цены, по которым эти транзакции рассчитываются.
Чего это не утверждаетЭто связывает цену с транзакцией, но не делает цену правильной: консенсус сертифицирует, что кворум валидаторов отправил эти наблюдения в этом раунде, и не более того.
У каждого раунда есть назначенный лидер. Внутри раунда предложение собирает последовательные агрегаты подписей 2f+12f+1, а фазы конвейеризуются между соседними раундами, поэтому в обычном случае блок достигает финальности за два сетевых обхода. При оптимистичной отзывчивости скорость продвижения ограничена фактической задержкой сообщений; нарастающая пауза, которой управляет pacemaker, включается, только когда сеть враждебна или расколота.

Фиксация порядка

Порядок транзакций внутри блока поднят до объекта, который фиксирует консенсус, а не оставлен побочным продуктом исполнения. Хеш блока покрывает упорядоченную полезную нагрузку, поэтому любая перестановка после консенсуса делает недействительными подписи, которыми он был зафиксирован. Следствие: как только блок финализирован, кворум 2f+12f+1 по весу ставки подписал обязательство именно об этом порядке, и ни один честный валидатор не подписал другой порядок тех же транзакций в том же раунде. А раз исполнение идёт последовательно поверх этого зафиксированного порядка, детерминированное воспроизведение перестаёт быть внутренней договорённостью реализации и становится свойством, которое может проверить кто угодно.
Свобода лидера внутри одного предложения — какие из доступных пакетов включить и как их расположить — остаётся остаточной поверхностью атаки; её смягчают репутация лидера и то, что без валидных наблюдений цен лидер вообще не может произвести блок. Более сильные конструкции честного упорядочивания рассматриваются как кандидат на будущее обновление.

Доступность пакетов

В наивном протоколе лидер предлагает блок, полезная нагрузка которого несёт все транзакции раунда, из-за чего размер сообщений консенсуса привязан к пропускной способности. IntentionBFT отделяет распространение данных от упорядочивания. Валидаторы непрерывно распространяют пакеты транзакций в фоне. Каждый пакет подтверждается, пока его источник не сможет доказать доступность 2f+12f+1 по весу ставки, и только тогда предложение может на него сослаться — по дайджесту, а не по содержимому. Сообщения консенсуса остаются небольшими независимо от пропускной способности, а зафиксированный блок всегда воспроизводим, потому что ни один блок не может ссылаться на данные, которые держало лишь византийское меньшинство.

Сертификация цен

Валидаторы — это ещё и наблюдатели цен, а блок несёт в себе те цены, по которым он был исполнен.
Валидаторыконсенсус · мемпул · оракульный sidecar · ядро · хранилище
Единственные, кто голосует
Полные узлы валидаторовследуют за блоками и исполняют их; не голосуют
Изоляция: они принимают публичный трафик чтения и соединения с пирами, чтобы валидаторы не были открыты в интернет
Публичные полные узлызапустить может любой; следуют, исполняют, отдают чтения
Открытый уровень
Клиентыфронтенды · торговые агенты · маркет-мейкеры · индексаторы
Подключаются к полным узлам, а не к валидаторам. Клиент, которому нужна самая быстрая и полная картина, запускает собственный.
Четыре уровня, от консенсуса вовне
Зачем нужен уровень
Каждый валидатор запускает собственный оракульный sidecar, который собирает данные площадок и выдаёт индексную цену по каждому инструменту. Валидатор забирает эту цену, проверяет её — в том числе свежесть относительно настроенных порогов, — подписывает и рассылает подписанную отправку другим валидаторам через gossip как сообщение сети консенсуса. Сертифицированные цены собираются по эпохам и раундам и переносятся в блок, поэтому подписи, фиксирующие транзакции, фиксируют и цены, по которым эти транзакции рассчитываются. Валидатор имеет право предложить блок, только если может предъявить валидные наблюдения цен за текущий раунд. Поэтому доступность цены — предусловие производства блока, а не входные данные, которые исполнение надеется найти.
Это связывает цену с транзакцией, но не делает цену правильной. Консенсус сертифицирует, что кворум валидаторов отправил эти наблюдения в этом раунде. Насколько точны были исходные площадки — отдельный вопрос: его разбирают правила агрегации на странице Оракул, а границы задаёт раскрытие рисков.

Репутация лидера

Лидеры выбираются раунд за раундом детерминированной ротацией по весу ставки, дополненной репутационной эвристикой на скользящем окне. Валидатор, у которого предложения срываются раз за разом — а это признак недоступности или враждебного поведения, — понижается в последующих выборах, и его слоты уходят тем, кто в последнее время отвечал исправно: недоступный валидатор не должен тормозить продвижение, занимая лидерство в закреплённых за ним слотах. Раз право на предложение зависит от наблюдений цен, репутация не должна ещё и концентрировать лидерство у валидаторов с лучшим доступом к рыночным данным. Требование разнообразия площадок — наблюдения берутся из нескольких независимых источников по каждому инструменту — закрывает этот путь.

Эпохи и переконфигурация

Время организовано в эпохи. Внутри эпохи набор валидаторов и большинство параметров постоянны. На границах эпох они могут измениться через переконфигурацию, санкционированную управлением протоколом: изменения набора валидаторов, изменения параметров консенсуса, обновления параметров риска и экстренные действия. Переходы атомарны — каждый честный валидатор видит один и тот же переход на одной и той же высоте блока.

Топология сети

Лидер
Валидаторы
Блокчейн
Агрегат 2f+1 по весу ставки
Порядок и цены теперь неизменны
Предложить блок — дайджесты пакетов и сертифицированные цены
Проверить доступность, порядок и цены
Голос
Сертифицировать раунд
Зафиксировать
Валидаторы участвуют в консенсусе. Каждый запускает весь стек: консенсус, мемпул, оракульный sidecar, исполнение ядра и хранилище. Голосуют только они. Полные узлы валидаторов стоят непосредственно за валидаторами. Они следуют за зафиксированными блоками и исполняют их, но не голосуют. Их назначение — изоляция: они принимают на себя публичный трафик чтения и соединения с пирами, чтобы валидаторы не были напрямую открыты в интернет. Публичные полные узлы — открытый уровень. Запустить такой может кто угодно. Они следуют за блокчейном, исполняют зафиксированные блоки, обслуживают чтения и питают системы ниже по потоку. Клиенты — фронтенды, торговые агенты, маркет-мейкеры, индексаторы — подключаются к полным узлам, а не к валидаторам. Клиент, которому нужна максимально быстрая и полная картина, запускает собственный полный узел, а не зависит от чужого. Узлы, входящие в сеть, по умолчанию не воспроизводят историю с генезиса; как новый узел догоняет сеть, описано в синхронизации состояния.

Что дальше

Мемпул

Что доходит до консенсуса, в каком порядке и что отбрасывается.

IntentionKernel

Что происходит с блоком после того, как его порядок и цены зафиксированы.

Оракул

Как получается индексная цена до того, как её подпишет валидатор.

Запуск узла

Почему набор валидаторов закрыт и как узнать о вступлении в него.