Published 16 October 2018

Распространение блоков в блокчейн сети

Распространение блоков по сети

Принцип распространения блока всем участникам сети:

Узел, которому необходимо разослать по сети блок N, разбивает его на пакеты.

Формат пакета пред-ставлен в таблице 1 (в структуру пакета не включены заголовки UDP).

Таблица 1: Структура пакета блока

Поле

Размер (байт)

Описание

Num

2

Порядковый номер пакета блока

Total

2

Общее количество пакетов, на которые был разбит блок

ID

8

Уникальный идентификатор блока, формируемый узлом-отправителем[1] при разбиении блока на пакеты. Уникальность обеспечивается в рамках узла-отправителя.

pub_sender

32

Публичный ключ узла создателя блока. Поле добавлено для тестирования работы пересылки

DATA

Содержимое блока

Основные этапы распространения блока в виде пакетов между узлами сети:

  • Узел "1" сформировал блок, разбил его на пакеты и рассылает его соседним узлам.
  • Узел "2", получив пакет, создаёт локальный буфер для блока N и добавляет в него запись о том, что "пакет #1 блока N" первым пришел от узла "1".
  • Узел "2" последовательно рассылает полученный "пакет #1 блока N" своим соседним узлам (исключая узел отправитель). Для наглядности узел «2» передал этот пакет узлу “4”.
  • Узел "4" создаёт свой локальный буфер для блока N  и вносит в него запись о том, что "пакет #1 блока N" ему пришел первый раз от узла "2", после пакет отправляется на узел "3".
  • Спустя некоторое время (одновременный прием пакетов невозможен) на узел "3" приходит "пакет #1 блока N". Узел "3" в своём локальном буфере для блока N должен добавить запись о том, что "пакет #1 блока N" (или пакет блока с любым номером) пришел от узла "1" вторым, и отправить узлу "1" пакет "отказ от приема блока N". (структура пакета "Отказ от блока N" приведена в таблице 2). Получив еще один пакет  блока N ( с любым номером) узел "2" должен занести отправителя пакета третьим в локальный буфер для блока N, ответить отправителю пакетом "отказ от приема блока N" и действовать таким же образом для всех следующих пакетов блока N.
  • Узел "1" после получения пакета "Отказ от приёма блока N" от узла "2" прекращает для него передачу остальных пакетов блока.

В рассмотренной ситуации узел "3" снизил трафик на своем сетевом интерфейсе путём отказа от повторного приема целого блока от узла "1".

Таблица 2: Структура пакета “Отказ от приема блока N”

Наименование поля

Длина (байт)

Описание

#hash

32

Хеш полей (ID, Total, pub_sender) по которому узел может идентифицировать блок

На каждом узле должно обеспечиваться одновременное хранение до 64 локальных буферов блоков, что позволит осуществлять параллельный прием/пересылку до 64 блоков. Локальный буфер очищается при получении целого блока, или по таймауту.

Votes 0, average rating 0

Contents