比特幣結點本地時間的計算方式

1.比特幣新的結點A啓動後,會從種子結點取到附近的結點信息,並且建立tcp連接
2.A聯接上B後,A向B發送VERSION信息
3.B返回VERSION消息和B的時間戳
4.A保存B結點與A結點的時間戳的差值

同樣A與C D E F結點連接並保存時間戳的差值,由小到大排序,在這些差值的組合中得到一箇中位數,區塊鏈程序中取得就是A結點當前的時間戳+中位數。 

 

VERSION消息包括以下字段:
PROTOCOL_VERSION    本地區塊鏈服務協議版本
nLocalNodeServices  本地服務
nTime 本地時間戳
addrYou 對方結點IP
addrMe 本地結點IP
nonce 本地結點nonce
strSubVersion 本地結點子版本
nNodeStartingHeight 本地結點開始高度
fRelayTxes 是否中轉交易

每個結點本地維護了容量爲200的數組vTimeOffsets,每個元素的值=連接結點的時間戳-當前結點時間戳,已經從小到大排好序.

AddTimeData方法往vTimeOffsets增加一個元素.
A與B獲取本地的時間戳都是調用GetAdjustedTime方法,取本地時間戳+vTimeOffsets裏中位數值.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章