包你不知道,究竟如何從架構上保證,區塊是勻速生成的?
之前兩篇聊了:
《區塊鏈的本質》
《挖礦的本質》
區塊鏈有個特點:雖然很多人在采礦,但挖到礦的速度是均勻的。以承載比特幣的區塊鏈為例,平均每10分鐘產出一個區塊,這個速度基本是不變的。
有朋友就有疑問了,計算能力越來越強,計算節點越來越多,計算區塊頭hash的速度理論上應該是越來越快的呀。技術上,區塊鏈如何動態調節,以保證勻速生成區塊?
上文回顧,區塊是怎么生成的?
對最新的區塊頭進行兩次SHA256計算,得到的256bit哈希結果,高位48bit必須是0x00000000FFFF,才算新區塊有效。
可以認為哈希的結果是完全隨機的,要得出前48bit必須是0x00000000FFFF的哈希結果,就如同連續拋了48次硬幣,每次都得到我們想要的結果,其概率是(1/2)^48,所以概率非常小,生成區塊的難度很高。
區塊如何保證生成速度勻速?
假設期望比特幣全球區塊鏈每10分鐘生成一個區塊,需要設定一個動態調節機制,每兩周做一次統計:
- 如果統計結果是,最近兩周平均每5分鐘就生成了一個區塊,說明生成太快了,需要變慢50%;
- 如果統計結果是,最近兩周平均每20分鐘才生成了一個區塊,說明生成太慢了,需要加速一倍;
如何控制加速和變慢呢?
區塊鏈中有一個難度系數,可以調節區塊生成的變快與變慢,難度系數影響的是,區塊頭哈希結果,有多少bit必須與預期相同。
例如,原計劃哈希結果高位48bit符合預期,才算挖礦成功,現在改為,49bit符合預期,才算挖礦成功,這樣得到預期hash的概率就降低了,挖礦就會變慢。
相反,如果改為,47bit哈希結果符合預期,就算挖礦成功,這樣得到預期hash的概率就變高了,挖礦就會變快。
總結,如何保證全球勻速挖礦?
- 需要定期統計,動態加速或減慢生成速度;
- 通過難度系數,影響hash結果多少位必須符合預期,才算合法的區塊,來控制速度;
這個勻速方案,巧妙嗎?
知其然,知其所以然。
思路比結論更重要。
==全文完==
思考:
你猜,某網盤,對下載速度進行限制,是怎么做的?