Skip to content

Instantly share code, notes, and snippets.

@mocurin
Last active March 3, 2020 08:19
Show Gist options
  • Save mocurin/392699aa52b72aa658e4ae42a67f6cdd to your computer and use it in GitHub Desktop.
Save mocurin/392699aa52b72aa658e4ae42a67f6cdd to your computer and use it in GitHub Desktop.
Tezos p2p

Tezos P2P

Поднятие полноценной ноды для участия в сети можно условно разделить на три части:

  • Формирование идентификатора

  • Handshaking

  • Bootstrapping

Фомирование идентификатора

Перед подключением к p2p необходимо выполнить некоторое задание и сформировать идентификатор для ноды. Заданием является нахождение nonce (как? Не понятно). После этого пиру выдается proof_of_work_stamp, который используется как доказательство того, что его нода валидна.

Затем генерируются:

  • peer_id идентификатор пира, основан на числе найденом в задании

  • public_key ключ, который получают другие пиры

  • secret_key ключ, который соединяется с открытыми ключами для создания ключа соединения, который используется для шифрования

Handshaking

Теперь мы подключаемся к p2p, запрашиваем список пиров от DNS сервера и получаем список IP адресов. Находим того, к кому хотим присоединиться и снова генерируем nonce, который будем использовать в качестве счетчика отправленных сообщений. Получатель делает то же самое, его nonce будет использоваться как счетчик полученных сообщений. Затем происходит обмен информацией: proof_of_work_stamp, public_key и nonce. Пиры проверяют метки друг друга и если у обоих оно валидны, то они используют свои закрытые и чужие открытые ключи для создания ключа соединения. Этот ключ используется для шифровки и расфшифровки отправленных и полученных сообщений соответственно, а nonce выступает в качестве счетчика.

Теперь пиры обмениваются сообщениями с метаданными и после этого обмениваются сообщениями с Ack/Nack (подтверждение/отказ соединения). Если оба получают Ack, то handshake успешен и теперь можно передавать сообщения. Процесс повторяется, пока соединение не будет установлено с достаточным (это сколько?) количеством пиров.

Bootstrapping

В кратце - обновляем хэдеры, подгружаем операции. После обновления содержимым блоков занимается протокол tesos.

Итог

Кажется, я просто перевел статью, отбросив часть про bootstrapping т.к весь проект водится на уровне хендшейков.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment