比特幣時間戳

礦工的主要職能

  • 獲取無序的未確認交易並以特定順序對其進行排列

  • 將交易打包到有效容器(區塊)當中

  • 在可接受的時間範圍內爲區塊蓋上時間戳

疑問

每個區塊都引用前一個區塊的哈希值,所以這些區塊已經有先後順序,爲啥還需要礦工蓋一個時間戳?

回答

爲了保證比特幣的精確減半時間或者說發行規律,必須具有根據當前算力在一定間隔週期內調整挖礦難度的機制。

在比特幣上面,這個一定間隔週期就是兩星期,即比特幣每兩星期根據當前算力調整一次採礦難度,以實現區塊出塊間隔十分鐘左右的目標。爲了對兩星期的時間進行計算,需要將時間概念引入區塊鏈併成爲一致性系統的一部分。

因此區塊必須含有時間戳,那麼比特幣也就是一個分佈式電子時鐘。

時間

在比特幣區塊產生時,涉及兩個時間:

  • 區塊頭中的時間,由礦工放置
  • 區塊產生的實際時間,比特幣系統生成

當然,這兩個時間應當幾乎相同,這裏有兩種情況

  • 礦工本身的時鐘非人爲的不準確,例如晚了1天
  • 礦工具有準確的時鐘,但是礦工選擇作惡,放一個假的時間戳

那麼礦工有沒有作惡的動力?

礦工的確存在在時間上作惡的動力。例如,如果產生一個區塊實際只花了10 分鐘,但是礦工可以通過增加 5 分鐘的時間戳來聲稱花了 15 分鐘。如果這種增加 5 分鐘的做法在整個兩星期的難度調整週期都持續 ,平均區塊時間會看起來像是 15 分鐘,而實際上比這要短。那麼下一個週期的難度可能會向下調整,由於區塊時間加快,增加採礦收入。

防止礦工篡改時間戳

  • 過去時間中值(MPT)規則 - 時間戳必須比過去 11 個區塊的中值更靠前。11 個區塊的中值意味着可以對6 個區塊進行重組並且時間仍不會向後移動,有人可能認爲這與 Meni Rosenfeld 的 2012年報告中提供的例子是一致的,即對於擁有 10% 網絡算力的攻擊者,必須進行六次確認才能將攻擊的成功概率降低到 0.1% 以下。

  • 未來區塊時間規則根據 -MAX_FUTURE_BLOCK_TIME 常量,相比來自同等節點的中值時間,時間戳不能出現在未來 2 小時以上。節點提供的時間與當地系統時鐘之間的最大允許差是 90 分鐘(又一個安全保障措施)。需要注意的是,不同於上面的 MPT 規則,這不是一個完全達成共識的規則。具有在未來太遠時間點的時間戳的區塊是無效的,但隨着時間向前移動它們可能變得有效。

規則一確保區塊鏈在時間方面繼續向前移動 ,而規則二確保區塊鏈不會向前移動 太遠。這些時間保護規則並不完美 ,例如,礦工仍可以在兩星期時間內通過生成未來的時間戳,從而將時間戳向前移動,但這種操作的影響有限。

2hours/2weeks = 0.6% 

如上文的比率所示 ,由於兩個小時只是兩星期中很小的一部分,此操作對網絡可靠性和挖礦盈利能力的影響可能有限。這相當於在難度調整後的兩星期內,將區塊之間的時間從 10 分鐘減少至9 分 54 秒。而且 ,它只是一次性變動,因爲一旦發生了兩小時的時間移動 之後,除非先向後移動 ,否則無法再次發生前移。與此同時,礦工在向前移動兩個小時之前,可能會考慮安全邊際,以減少區塊被網絡拒絕的風險。

據我們判斷 ,這些規則在防止礦工以惡意方式篡改比特幣時間戳方面,已經證明具有合理的有效性。

發佈了54 篇原創文章 · 獲贊 33 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章