昨天,2019年8月30日,BCH開發者awemany發布了一篇白皮書——《Storm——Using weak proof-of-work for instant confirmations on Bitcoin Cash》(
昨天,2019年8月30日,BCH開發者awemany發布了一篇白皮書——《Storm——Using weak proof-of-work for instant confirmations on Bitcoin Cash》(《風暴——使用弱工作量證明實現比特幣現金交易即時確認》)
為理解《風暴》,我重讀了弱區塊白皮書。
先來理解下比特幣挖礦工作量證明。
一個挖礦的過程是計算一個隨機數,誰先算出這個符合條件的數,這個條件叫“目標值”,就成功挖到一個區塊,就可以拿到區塊獎勵和交易手續費了。考慮到交易安全性,比特幣系統設定全網平均10分鐘就會有人算對一次,如果這個平均時間比10分鐘快,那系統就會加大計算的難度,反之就減少。
為了衡量挖礦出塊時間,系統定義了一個叫“難度”的值。“難度值”和“目標值”是可以通過計算公式相互計算的。
為了給出弱區塊的定義,我們先將比特幣通過POW挖出符合“目標值”的區塊叫“強區塊”。請記住“目標值”和“強區塊”這兩個概念。
對應的,我們定義一個“弱目標值”,即定義一種PoW計算難度更低的“低難度值”,對應的也就可以計算出一個低目標值,就叫“弱目標值”。比如“低難度值”只有前面的“難度值”的四分之一,也可以是十分之一,這就看系統的多方衡量考慮。當礦工計算的隨機數符合了這個“低難度值”的條件下計算出來的“弱目標值”時,這個礦工就挖到了一個叫“弱區塊”的區塊。
這種“弱區塊”的出塊速度就要比“強區塊”快很多,比如快4倍,或10倍,依據系統設定的“低難度值”是原“難度值”的多少而定。
弱區塊和強區塊類似,也包含類似的數據結構,也有前散列值、隨機數、根散列值、coinbase信息,和大量的交易交易。這種弱區塊書寫成“Δ-區塊”。
由弱區塊組成的鏈就稱為子鏈,這是依附在強區塊鏈上的。當有礦工挖到一個強區塊時,子鏈就關閉了。然后系統再開啟一個子鏈,等著依附到下一個強區塊上。
當有礦工挖到強區塊后,依附在上面的子鏈就會被打包進強區塊。關閉子鏈后,這個強區塊的具體數據結構應該和現有的區塊數據結構完全一樣。
有了弱區塊和子鏈后,廣播強區塊的過程就可以被優化。在強區塊被挖出之前,Δ-區塊已經在礦工層面達成共識了,所有礦工已經同步了弱區塊。當一個礦工挖出強區塊后,再向全網廣播強區塊時,就只需要廣播該強區塊的所有Δ-區塊哈希值,整個強區塊的數據結構就不需要廣播了。這可以大大降低區塊廣播過程的數據量,降低強區塊被孤立的風險。
弱區塊沒有區塊獎勵,只有強區塊才有。但弱區塊有交易手續費,所以礦工也可以通過挖弱區塊獲得收益。
挖到強區塊的礦工,是無法拿到弱區塊里的交易手續費的。每一個弱區塊被挖出來后,該礦工會在弱區塊里構建一筆“弱coinbase交易tx”,將該弱區塊里的所有礦工費收集在這筆“tx”里。但這筆tx在強區塊被挖出前是無效的,只有等到強區塊被挖出后,子鏈被關閉時,由強區塊礦工來分配所有的交易手續費。
這多考驗礦工人性,如果沒有硬分叉,我很難相信弱區塊能夠形成協議共識。雖然Bitcoin unlimited的開發者始終認為弱區塊是不需要硬分叉來部署。不過,這只是理論上不需要,工程上最好是設計成硬分叉。
比特幣牽涉到的利益關系極其復雜,對比特幣協議的進化需要多種領域的知識,包括經濟學、計算機科學、數學 ,甚至現在還牽扯進來了各種政治類智慧。(閃電 黃世亮)