Как определить пользовательский статус синхронизации?

Context:

Я работаю над приложением, в котором мы хотели бы знать, достаточно ли синхронизирован текущий узел, чтобы иметь возможность обрабатывать запросы RPC. Метод, который мы хотели бы использовать, состоит в том, чтобы увидеть, имеет ли наш узел как минимум 2-4 одноранговых узлов, и если большинство сверстников сообщают о том же самом наилучшем хэшере высоты /наилучшего блока.


Предыдущее исследование:


Есть ли способ просто спросить партнера, какая высота его лучшего блока не будет запрещена?

Могу ли я просто сделать несколько запросов getheaders и посмотреть, возвращает ли peer какие-либо заголовки позже, чем заголовок, который у меня есть, или будет запретить мне запрашивать те же заголовки снова и снова?

4 голоса | спросил StephenM347 16 Jam1000000amFri, 16 Jan 2015 01:09:41 +030015 2015, 01:09:41

1 ответ


3

Биткойн Core 0.10.0 может обеспечить необходимое вам решение благодаря синхронизации с первым заголовком. getblockchaininfo RPC в 0.10.0 предоставляет как поле blocks (количество проверенных блоков), так и headers (количество частично подтвержденных заголовков).

В любое время, когда числа отличаются, у вас нет всех блоков. Во время начальной загрузки блока (IBD) они будут разнесены на сотни тысяч блоков. (Согласно Wiffhark sniff, который я делал во время IBD несколько недель назад, для загрузки полной цепочки заголовков мне понадобилось меньше двух минут, чтобы синхронизировать блоки, а затем потребовалось еще три часа.)

Bitcoin Core 0.10.0 имеет два других новых поля, которые могут оказаться полезными, как в getpeerinfo RPC . Поля synced_headers и synced_blocks. Поле заголовков основано на последнем сообщении заголовков P2P удаленный узел, отправленный вами. Поле блоков основано на последнем сообщении P2P block inv , отправленном вами партнером. В обоих случаях они сообщают вам о последнем заголовке или блоке, который у вас есть с удаленным узлом (насколько это возможно).

Я не знаю, насколько полезны эти поля getpeerinfo, поскольку ваш узел не может определить высоту блока пока он не будет иметь соответствующий заголовок блока --- в этот момент RPC уже будет сообщать вам, что вы не синхронизированы. Тем не менее, они с любопытством смотрят.


  

Могу ли я просто сделать несколько запросов getheaders и посмотреть, возвращает ли peer какие-либо заголовки позже, чем заголовок, который у меня есть, или же коллега запретит мне запрашивать те же заголовки снова и снова?

Насколько я знаю, там нет балла (до тех пор, пока ваши пакеты действительны). Тем не менее, удаленный одноранговый узел должен отправить вам сообщение getblockchaininfo, как только он проверяет входящий блок ---, поэтому нет необходимости его опроса пока ваше приложение обрабатывает сообщения inv с типом MSG_BLOCK.

ответил David A. Harding 16 Jam1000000amFri, 16 Jan 2015 03:15:00 +030015 2015, 03:15:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132