比特币结点本地时间的计算方式

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里中位数值.

 

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