Оптимистичный сигнал распространения транзакции
Текущее поведение повторной передачи
Дерево ретрансляции в настоящее время учитывает:
- Узлы разбивки по эпохам
- пиры tvu (отфильтровано по контактной информации и измельченной версии)
- текущий валидатор
объединение (1), (2) и (3) дедупликация этого списка записей по ключу публикации предпочтение записей с контактной информацией фильтрация этого списка по записям с контактной информацией
Затем этот список случайным образом перемешивается по весу ставки.
Затем фрагменты ретранслируются до соседей FANOUT и до потомков FANOUT.
Детерминированное дерево повторной передачи
weighted_shuffle
будет использовать детерминированное начальное число, когда enable_deterministic_seed
включен на основе тройки (слот уничтожения, индекс уничтожения, публичный ключ лидера):
if enable_deterministic_seed(self.slot(), root_bank) {
hashv(&[
&self.slot().to_le_bytes(),
&self.index().to_le_bytes(),
&leader_pubkey.to_bytes(),
])
Во-первых, будут учитываться только узлы, привязанные к эпохе, независимо от наличия контактной информации (и, возможно, включая сам узел валидатора).
Детерминистическое упорядочение узлов, привязанных к эпохе, будет создано на основе дерминистического измельчения с использованием weighted_shuffle.
Пусть neighbor_set
будет выбран из числа до FANOUT соседей текущего узла.
Пусть child_set
будет выбран из дочерних элементов FANOUT текущего узла.
Отфильтровать neighbor_set
по контактной информации.
Отфильтровать child_set
по контактной информации.
Пусть epoch_set будет объединением neighbor_set и child_set.
Пусть remaining_set
будет всеми остальными узлами с контактной информацией, не содержащейся в epoch_set
.
Если epoch_set.len < 2*FANOUT
, мы можем случайным образом выбрать до узлов 2*FANOUT - epoch_set.len
для повторной передачи из remaining_set
.
Получение повторно переданного фрагмента
Если текущий узел валидатора не входит в набор узлов, привязанных к эпохе, для эпохи уничтожения, то нельзя получить информацию о ранней повторной передаче.
Вычислите детерминированное начальное число измельчения.
Запустите детерминированное перемешивание epoch_stakes.
Найдите положение себя в соседнем или дочернем наборах.
Вычислите сумму ставок всех узлов на текущем и предыдущем уровнях распределения.
Рекомендации по суммированию ставок:
- Сумма ставок может включать доли узлов, которые были пропущены на предыдущих уровнях распределения из-за отсутствия контактной информации.
- Текущий узел был частью оригинальной перетасовки эпохи от ретранслятора, но был отфильтрован из-за отсутствия контактной информации. Текущий узел впоследствии получает повторную передачу фрагмента и предполагает, что повторная передача была результатом расчета детерминированного дерева, а не последующего случайного выбора. Это должно быть безопасным, потому что текущий узел недооценит предыдущий вес доли в дереве повторной передачи.
Общие Соображения:
атака лидером (уровень 0):
- передает клок для распространения по дереву как обычно
- дополнительно передает фрагмент (или фальшивый фрагмент) непосредственно узлу (узлам) на уровне >= 2, заставляя узел (узлы) полагать, что обработан больший процент дерева повторной передачи дерева
атака узлом на уровне n:
- повторно передает фрагмент узлу (узлам) на уровне >=n+2, заставляя узел (узлы) полагать, что был обработан больший процент дерева повторной передачи дерева
Вопросы
- Должны ли принимающие узлы пытаться проверить, что источник фрагмента был повторно передан с ожидаемого узла? Если да, то рассмотрение спуфинга?
- Как потребляется эта информация?
Примечания
На практике сигналы должны попадать в следующие сегменты:
- текущий лидер (может сигнализировать уровень 1 при отправке широковещательной рассылки)
- слой 1 1.1. может сигнализировать уровню 1, когда получен фрагмент 1.2. может сигнализировать уровень 1 + подмножество уровня 2, когда отправляется повторная передача
- слой 2 3.1. может сигнализировать уровню 2, когда получен фрагмент 3.2. может сигнализировать уровень 2 + подмножество уровня 3, когда отправляется retrnasmit
- Текущий узел не является членом разбивочных узлов эпохи, сигнал не может быть отправлен