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