彥祖?菲爾普3星評價
2020-10-29 11:10:41
比特幣采用的工作量證明機制,就是讓礦工互相競爭求解一個數(shù)學(xué)題,誰先解出來了,他就大喊一聲:“我的工作量證明成功了,你們快來看?!比w礦工就都過來把那一頁目抄寫一份,貼在自己賬本的最后面,然后又開始新的記賬過程。
在這個過程中,經(jīng)常會出現(xiàn)這樣一種情況:兩個礦工同時解出了題目,這時要怎么辦呢?
前面的文章也曾經(jīng)講過:“在任何區(qū)塊里,第一條都是沒有轉(zhuǎn)出地址的,就是所謂的Coinbase(挖礦交易)。沒有任何人付給礦工這筆錢,礦工只是理所應(yīng)當(dāng)?shù)膶懮献约韩@得了12.5比特幣。所有節(jié)點都認可礦工這樣寫,因此礦工就得到了挖礦收入。不同的礦工在填寫區(qū)塊的時候,數(shù)據(jù)一定是不一樣的,因為每個礦工的第一條肯定不一樣,礦工只會把挖礦收入轉(zhuǎn)入自己的地址。”
由于每個礦工的區(qū)塊數(shù)據(jù)都不一樣,所以他們解題得出的結(jié)果也是不一樣的,都是正確答案,只是區(qū)塊不同。于是,區(qū)塊鏈在這個時刻,出現(xiàn)了兩個都滿足要求的不同區(qū)塊。那么,全體礦工這時該怎么辦呢?
由于距離遠近,不同的礦工看到這兩個區(qū)塊是有先后順序的。通常情況下,礦工們會把自己先看到的區(qū)塊復(fù)制過來,然后接著在這個區(qū)塊開始新的挖礦工作。于是,出現(xiàn)了這樣的情景:我們把這種現(xiàn)象叫做分叉。
在以工作量證明機制為共識算法的區(qū)塊鏈系統(tǒng)中,這個問題是這樣被解決的:從分叉的區(qū)塊起,由于不同的礦工跟從了不同的區(qū)塊,在分叉出來的兩條不同鏈上,算力是有差別的。形象地說,就是跟從兩個鏈礦工的數(shù)量是不同的。
由于解題能力和礦工的數(shù)量成正比,因此兩條鏈的增長速度也是不一樣的,在一段時間之后,總有一條鏈的長度要超過另一條。當(dāng)?shù)V工發(fā)現(xiàn)全網(wǎng)有一條更長的鏈時,他就會拋棄他當(dāng)前的鏈,把新的更長的鏈全部復(fù)制回來,在這條鏈的基礎(chǔ)上繼續(xù)挖礦。所有礦工都這樣操作,這條鏈就成為了主鏈,分叉出來被拋棄掉的鏈就消失了。
最終,只有一條鏈會被保留下來,成為真正有效的賬本,其他都是無效的,所以整個區(qū)塊鏈仍然是唯一的。注意,能夠讓區(qū)塊鏈保證數(shù)據(jù)唯一性的前提是:所有礦工都遵從同樣的機制。
還有一種情況,就是礦工不遵從同樣的機制,那么也會出現(xiàn)分叉。這種分叉又有兩種情況:一是由于整個區(qū)塊鏈系統(tǒng)軟件的升級,一部分礦工沒有來得及升級,出現(xiàn)了遵從不同機制產(chǎn)生的分叉。
當(dāng)這部分礦工升級系統(tǒng)后,這個分叉就會消失,我們稱這種分叉為軟分叉。二是由于礦工之間出現(xiàn)分歧,一部分礦工決定采用不同的機制,產(chǎn)生出來的分叉是不會消失的。我們一般把這種分叉稱為硬分叉。