Ну bitcoin начинает с того, что спрашивает сверстника о запасах. Это ха sh и высота блока. Пир проверяет, есть ли у него этот блок, и проверяет, совпадает ли он с контрольными точками, которые он использует, если у него еще нет блока, соответствующего этому инвентарю, и значение ha sh совпадает с их контрольными точками, то они сохраняют инвентарь. Они продолжают спрашивать запасы, пока у них не будет инвентаря вплоть до кончика цепи. В этот момент они рекурсивно запрашивают каждый блок, соответствующий запасам, которые они сохранили. Как только они получают блок, они проверяют его и сохраняют - обновляя набор UTXO и txindex (если он включен) как go. Это называется IBD и выполняется, когда узел находится в автономном режиме. Когда узел подключен к сети и найден блок, узел, который обнаружил этот блок, «расскажет» о блоке со всеми узлами, которые он имеет. По сути, он отправляет ha sh и высоту (да, инвентарь блока) всем своим подключенным одноранговым узлам. Если одноранговый узел еще не имеет этого блока, он запрашивает данные блока и получает блок. Затем все одноранговые узлы делают то же самое, они отправляют инвентарь нового блока всем своим подключенным одноранговым узлам (кроме одноранговых узлов, от которых они получили блок).
Я не знаю ни одного простого кода для синхронизации в python (хотя поиск в Google должен иметь результаты (поиск игрушечной криптовалюты python), он не в python и работает для Вместо этого я использую блокчейны, основанные на DAG, но я нахожусь в процессе написания следующего кода синхронизации (он еще не закончен и ужасно запутан). Он написан на ржавчине и использует мою самодельную сборку ржавчины p2p lib поверх tcpstreams / sockets
TLDR; Новые узлы запрашивают список хэшей блоков со времени последнего блока, который они имеют, затем сохраняют его и запрашивают соответствующий блок у однорангового узла. Существующие узлы отправляют ха sh и высота соединяются с подключенными узлами, когда они слышат о новом блоке, когда узел получает это, они проверяют, есть ли у него блок - если их нет, то они запрашивают данные блока, проверяют блок, сохраняют его и вводят в действие Затем они отправляют одну и ту же пару ha sh и высоту всем своим подключенным узлам.
Надеюсь, это поможет ответить на ваш вопрос!