Block-Header
獲取標頭時處理重組的正確方法是什麼
我在bitcoin-s工作,我們發現了一個問題,如果一個節點停止並且它的鏈尖是一個稍後被重組的節點,它將無法繼續同步標頭。
發生這種情況是因為我們使用帶有 hashes=
<current chain tip>
和 stopHash=的 get headers 消息來請求 headers<00000..0000>
。因為,我們的鏈提示被重組了,我們將收到網路的前 2000 個區塊頭。我目前的解決方案是退回我們的鏈尖,每次迭代檢查是否沒有得到前 2k 個塊。但是,我承認這是一個糟糕的解決方案,
GetHeadersMessage
我應該在這裡使用它還是更好的選擇?謝謝
該
getheaders
消息允許您列出多個塊雜湊。因此,您可以插入多個區塊雜湊,而不是僅僅放置目前鏈提示。響應節點將查看這些雜湊中是否有任何散列在其主鏈中,並開始從那裡發送標頭。由於重組往往很小,您可以放置最近的 10 個塊雜湊,它應該足以處理重組。請注意,您可以在
getheaders
消息中放入的最大雜湊數為 101。