Timestamp
比特幣如何判斷現在是幾點?
比特幣需要知道目前時間才能驗證區塊。它是如何決定的?
請注意,我專門討論的是 Satoshi 客戶端。
它需要連接的其他客戶端的中位時間,但
如果至少有 5 個,則只有 1.,
如果中位時間與系統時間相差不超過 70 分鐘,則為 2.。
具體而言,我們查看
AddTimeData
, intimedata.cpp
。注意:我已將其編輯為長度
void AddTimeData(const CNetAddr& ip, int64 nTime) { int64 nOffsetSample = nTime - GetTime(); // Add data vTimeOffsets.input(nOffsetSample); if (vTimeOffsets.size() >= 5 && vTimeOffsets.size() % 2 == 1) { int64 nMedian = vTimeOffsets.median(); // Only let other nodes change our time by so much if (abs64(nMedian) < 70 * 60) { nTimeOffset = nMedian; } else { nTimeOffset = 0; } } }