包你不知道,究竟如何從架構(gòu)上保證,區(qū)塊是勻速生成的?
之前兩篇聊了:
區(qū)塊鏈有個特點:雖然很多人在采礦,但挖到礦的速度是均勻的。以承載比特幣的區(qū)塊鏈為例,平均每10分鐘產(chǎn)出一個區(qū)塊,這個速度基本是不變的。
有朋友就有疑問了,計算能力越來越強,計算節(jié)點越來越多,計算區(qū)塊頭hash的速度理論上應(yīng)該是越來越快的呀。技術(shù)上,區(qū)塊鏈如何動態(tài)調(diào)節(jié),以保證勻速生成區(qū)塊?

上文回顧,區(qū)塊是怎么生成的?
對最新的區(qū)塊頭進行兩次SHA256計算,得到的256bit哈希結(jié)果,高位48bit必須是0x00000000FFFF,才算新區(qū)塊有效。
可以認為哈希的結(jié)果是完全隨機的,要得出前48bit必須是0x00000000FFFF的哈希結(jié)果,就如同連續(xù)拋了48次硬幣,每次都得到我們想要的結(jié)果,其概率是(1/2)^48,所以概率非常小,生成區(qū)塊的難度很高。
區(qū)塊如何保證生成速度勻速?
假設(shè)期望比特幣全球區(qū)塊鏈每10分鐘生成一個區(qū)塊,需要設(shè)定一個動態(tài)調(diào)節(jié)機制,每兩周做一次統(tǒng)計:
- 如果統(tǒng)計結(jié)果是,最近兩周平均每5分鐘就生成了一個區(qū)塊,說明生成太快了,需要變慢50%;
- 如果統(tǒng)計結(jié)果是,最近兩周平均每20分鐘才生成了一個區(qū)塊,說明生成太慢了,需要加速一倍;
如何控制加速和變慢呢?
區(qū)塊鏈中有一個難度系數(shù),可以調(diào)節(jié)區(qū)塊生成的變快與變慢,難度系數(shù)影響的是,區(qū)塊頭哈希結(jié)果,有多少bit必須與預(yù)期相同。
例如,原計劃哈希結(jié)果高位48bit符合預(yù)期,才算挖礦成功,現(xiàn)在改為,49bit符合預(yù)期,才算挖礦成功,這樣得到預(yù)期hash的概率就降低了,挖礦就會變慢。
相反,如果改為,47bit哈希結(jié)果符合預(yù)期,就算挖礦成功,這樣得到預(yù)期hash的概率就變高了,挖礦就會變快。
總結(jié),如何保證全球勻速挖礦?
- 需要定期統(tǒng)計,動態(tài)加速或減慢生成速度;
- 通過難度系數(shù),影響hash結(jié)果多少位必須符合預(yù)期,才算合法的區(qū)塊,來控制速度;
這個勻速方案,巧妙嗎?
知其然,知其所以然。
思路比結(jié)論更重要。
==全文完==
思考:
你猜,某網(wǎng)盤,對下載速度進行限制,是怎么做的?


























