Message
與比特幣的初始連接
如果這是新客戶端與網路的第一次連接,我想知道在兩個對等方交換版本和 verack 消息之後,交換了哪條消息。我猜每次都需要 getblocks 消息,因為我們的客戶需要檢查我們擁有的區塊鍊是否是最新的。那麼 getaddr 消息跟在 getblocks 消息之後呢?
如果客戶端過去已經連接,他是否需要任何 getaddr 消息,或者他的對等數據庫就足夠了?
我猜每次都需要 getblocks 消息,因為我們的客戶需要檢查我們擁有的區塊鍊是否是最新的。
這是正確的。您還可以比較版本消息中的塊高度,但您仍然需要檢查您是否不在分叉上。
因此 getaddr 消息跟隨 getblocks 消息
我會說這取決於你。如果你連接到一個新的對等點,並且鏈不同,你不能直接知道他是在錯誤的鏈上還是你在。因此,最好知道其他一些同行也可以詢問。
我認為當您第一次呼叫 getaddr 消息時會更好,因為這是您執行的一次性命令。如果你要求塊,看到你沒有得到所有,你將開始呼叫 getdata 消息等等。比您的 getaddr 消息會持續延遲。
如果客戶端過去已經連接,他是否需要任何 getaddr 消息,或者他的對等數據庫就足夠了?
儲存的對等點應該足夠了。請記住,一旦節點連接到對等節點,它們就會通過在發現新對等點時交換 addr 消息來共享新對等點。因此,您還可以在不要求他們的情況下獲得新的同行。
您只會遇到一個問題,即那些已斷開連接的對等方。因此,再次詢問同行總是一個好主意,只是為了保持最新狀態。