Поднятие полноценной ноды для участия в сети можно условно разделить на три части:
-
Формирование идентификатора
-
Handshaking
-
Bootstrapping
Перед подключением к p2p необходимо выполнить некоторое задание и сформировать идентификатор для ноды. Заданием является нахождение nonce (как? Не понятно). После этого пиру выдается proof_of_work_stamp
, который используется как доказательство того, что его нода валидна.
Затем генерируются:
-
peer_id
идентификатор пира, основан на числе найденом в задании -
public_key
ключ, который получают другие пиры -
secret_key
ключ, который соединяется с открытыми ключами для создания ключа соединения, который используется для шифрования
Теперь мы подключаемся к p2p, запрашиваем список пиров от DNS сервера и получаем список IP адресов.
Находим того, к кому хотим присоединиться и снова генерируем nonce, который будем использовать в качестве счетчика отправленных сообщений. Получатель делает то же самое, его nonce будет использоваться как счетчик полученных сообщений.
Затем происходит обмен информацией: proof_of_work_stamp
, public_key
и nonce
.
Пиры проверяют метки друг друга и если у обоих оно валидны, то они используют свои закрытые и чужие открытые ключи для создания ключа соединения. Этот ключ используется для шифровки и расфшифровки отправленных и полученных сообщений соответственно, а nonce выступает в качестве счетчика.
Теперь пиры обмениваются сообщениями с метаданными и после этого обмениваются сообщениями с Ack/Nack (подтверждение/отказ соединения). Если оба получают Ack, то handshake успешен и теперь можно передавать сообщения. Процесс повторяется, пока соединение не будет установлено с достаточным (это сколько?) количеством пиров.
В кратце - обновляем хэдеры, подгружаем операции. После обновления содержимым блоков занимается протокол tesos.
Кажется, я просто перевел статью, отбросив часть про bootstrapping т.к весь проект водится на уровне хендшейков.