Оптимистичный сигнал распространения транзакции

Текущее поведение повторной передачи

Дерево ретрансляции в настоящее время учитывает:

  1. Узлы разбивки по эпохам
  2. пиры tvu (отфильтровано по контактной информации и измельченной версии)
  3. текущий валидатор

объединение (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):

атака узлом на уровне n:

Вопросы

Примечания

На практике сигналы должны попадать в следующие сегменты:

  1. текущий лидер (может сигнализировать уровень 1 при отправке широковещательной рассылки)
  2. слой 1 1.1. может сигнализировать уровню 1, когда получен фрагмент 1.2. может сигнализировать уровень 1 + подмножество уровня 2, когда отправляется повторная передача
  3. слой 2 3.1. может сигнализировать уровню 2, когда получен фрагмент 3.2. может сигнализировать уровень 2 + подмножество уровня 3, когда отправляется retrnasmit
  4. Текущий узел не является членом разбивочных узлов эпохи, сигнал не может быть отправлен