在比特幣協(xié)議中,最長(zhǎng)的鏈被認(rèn)為是絕對(duì)的正確。如果一個(gè)塊不是最長(zhǎng)鏈的一部分,那么它被稱為是“孤塊”。一個(gè)孤立的塊是一個(gè)塊,它也是合法的,但是發(fā)現(xiàn)的稍晚,或者是網(wǎng)絡(luò)傳輸稍慢,而沒有能成為最長(zhǎng)的鏈的一部分。在比特幣中,孤塊沒有意義,隨后將被拋棄,發(fā)現(xiàn)這個(gè)孤塊的礦工也拿不到采礦相關(guān)的獎(jiǎng)勵(lì)。
簡(jiǎn)介如果節(jié)點(diǎn)收到了一個(gè)有效的區(qū)塊,而在現(xiàn)有的區(qū)塊鏈中卻未找到它的父區(qū)塊,那么這個(gè)區(qū)塊被認(rèn)為是“孤塊”。孤塊會(huì)被保存在孤塊池中,直到它們的父區(qū)塊被節(jié)點(diǎn)收到。一旦收到了父區(qū)塊并且將其連接到現(xiàn)有區(qū)塊鏈上,節(jié)點(diǎn)就會(huì)將孤塊從孤塊池中取出,并且連接到它的父區(qū)塊,讓它作為區(qū)塊鏈的一部分。當(dāng)兩個(gè)區(qū)塊在很短的時(shí)間間隔內(nèi)被挖出來,節(jié)點(diǎn)有可能會(huì)以相反的順序接收到它們,這個(gè)時(shí)候孤塊現(xiàn)象就會(huì)出現(xiàn)。選擇了最大難度的區(qū)塊鏈后,所有的節(jié)點(diǎn)最終在全網(wǎng)范圍內(nèi)達(dá)成共識(shí)。隨著更多的工作量證明被添加到鏈中,鏈的暫時(shí)性差異最終會(huì)得到解決。挖礦節(jié)點(diǎn)通過“投票”來選擇它們想要延長(zhǎng)的區(qū)塊鏈,當(dāng)它們挖出一個(gè)新塊并且延長(zhǎng)了一個(gè)鏈,新塊本身就代表它們的投票。當(dāng)然,試圖扭轉(zhuǎn)交易數(shù)據(jù)的算力攻擊(需要足夠的哈希算力)也能引發(fā)孤塊。
最重的鏈Ethereum的GHOST協(xié)議,不認(rèn)為孤塊沒有價(jià)值,而是會(huì)給與發(fā)現(xiàn)孤塊的礦工以回報(bào)。在以太坊中,孤塊被稱為“叔塊”(uncle block),它們可以為主鏈的安全作出貢獻(xiàn)。相對(duì)來說,比特幣有很長(zhǎng)的塊間隔時(shí)間。在比特幣區(qū)塊中,平均約10分鐘可以得到一個(gè)確認(rèn)(也就是發(fā)現(xiàn)一個(gè)新的后續(xù)區(qū)塊)。但是自從比特幣成立以來,大量關(guān)于塊鏈技術(shù)的研究已經(jīng)發(fā)展起來。這些研究表明,更短的塊間隔確實(shí)是可能的,而且在很多應(yīng)用場(chǎng)景下是需要的。然而,隨著擁有更快的出塊速度,孤塊的增加而帶來的昂貴的成本和浪費(fèi)也隨之增加。GHOST協(xié)議支付報(bào)酬給叔塊,這激勵(lì)了礦工在新發(fā)現(xiàn)的塊中去引用叔塊。引用叔塊使主鏈更重。在比特幣,最長(zhǎng)的鏈?zhǔn)侵麈?。在以太坊中,主鏈?zhǔn)侵缸钪氐逆?。叔塊的好處,解決了兩個(gè)問題:
1. 以太坊十幾秒的出塊間隔,大大增加了孤塊的產(chǎn)生,并且降低了安全性。通過鼓勵(lì)引用叔塊,使引用主鏈獲得更多的安全保證(因?yàn)楣聣K本身也是合法的)
2. 比特幣中,采礦中心化(大量的集中礦池)成為一個(gè)問題。給與叔塊報(bào)酬,可以一定程度上緩解這個(gè)問題。
區(qū)塊區(qū)塊是比特幣中用來記錄和確認(rèn)交易信息的數(shù)據(jù)結(jié)構(gòu)。它是由比特幣系統(tǒng)中一些稱為礦工的節(jié)點(diǎn)產(chǎn)生的,而礦工構(gòu)造區(qū)塊的過程被稱為挖礦。主要可以分為區(qū)塊頭部和交易數(shù)據(jù)兩大部分。在一筆交易被創(chuàng)建后,用戶會(huì)通過點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)向全網(wǎng)廣播這筆交易,而礦工們則會(huì)收集并驗(yàn)證這些交易數(shù)據(jù),并將其中合法的交易信息存儲(chǔ)在本地交易池中。在交易數(shù)目達(dá)到一定量后,礦工開始用這些交易數(shù)據(jù)構(gòu)造區(qū)塊。礦工首先會(huì)確定要產(chǎn)生的區(qū)塊應(yīng)該包含哪些交易數(shù)據(jù),并計(jì)算交易數(shù)據(jù)的 Merkle值作為區(qū)塊交易數(shù)據(jù)的校驗(yàn)。一般來說,礦工會(huì)盡可能多地優(yōu)先選擇交易費(fèi)較高的交易,因?yàn)橐坏┑V工挖礦成功, 這些交易費(fèi)都將由他獲得。 隨后,
礦工會(huì)根據(jù)自己的挖礦協(xié)議以及前一個(gè)區(qū)塊數(shù)據(jù),填充區(qū)塊頭部的版本、前驅(qū)區(qū)塊哈希值以及區(qū)塊時(shí)間。隨后,礦工會(huì)獲取系統(tǒng)當(dāng)前的難度值,填入 nBits 字段。這一數(shù)值是由系統(tǒng)設(shè)定用于調(diào)整挖礦難度的數(shù)值。一個(gè)合法區(qū)塊的哈希必須符合難度值的要求,在后面介紹影響分叉產(chǎn)生因素時(shí)將詳細(xì)解釋這一數(shù)值。最后,礦工開始遍歷隨機(jī)數(shù)Nonce,試圖獲得哈希符合當(dāng)前系統(tǒng)難度值的區(qū)塊。這一步是挖礦環(huán)節(jié)最主要的工作。比特幣挖礦采用 sha256 算法作為區(qū)塊的哈希算法,這一算法沒有明顯的攻擊策略和漏洞,礦工們只有通過暴力搜索來尋找符合系統(tǒng)難度值的區(qū)塊哈希值,這要求礦工具有非常強(qiáng)大的計(jì)算能力。而在某些難度值較大的情況下,礦工甚至不得不去調(diào)整一些交易數(shù)據(jù)的組合,以獲得更大的哈希搜索范圍。
礦工挖礦成功后, 會(huì)向全網(wǎng)廣播其構(gòu)建的區(qū)塊。系統(tǒng)中的節(jié)點(diǎn)會(huì)驗(yàn)證和確認(rèn)這個(gè)區(qū)塊,并將合法的區(qū)塊添加到區(qū)塊鏈的尾部,并把它繼續(xù)向外傳播。挖礦成功的礦工除了獲得區(qū)塊中所有包含的交易費(fèi)外,還會(huì)額外獲得一個(gè)系統(tǒng)設(shè)定的獎(jiǎng)勵(lì)費(fèi),用作挖礦工作的回報(bào)。獎(jiǎng)勵(lì)費(fèi)是通過一個(gè)沒有輸入的特殊交易來實(shí)現(xiàn)的,這種交易也被稱為 Coinbase 交易。在交易費(fèi)和獎(jiǎng)勵(lì)費(fèi)的激勵(lì)下,礦工會(huì)不斷投入計(jì)算力量爭(zhēng)取成功挖礦,區(qū)塊鏈也得以不斷延伸,從而記錄下更多的交易信息。假設(shè)比特幣的網(wǎng)絡(luò)是同步的,且不存在多個(gè)礦工同時(shí)挖出一個(gè)合法區(qū)塊的情況,那么系統(tǒng)中的區(qū)塊會(huì)依次不斷產(chǎn)生并添加到區(qū)塊鏈尾部。在這種狀態(tài)下,系統(tǒng)中的所有節(jié)點(diǎn)所存儲(chǔ)的區(qū)塊鏈數(shù)據(jù)一致。在驗(yàn)證一筆交易的時(shí)候,節(jié)點(diǎn)可以通過遍歷搜索區(qū)塊鏈的數(shù)據(jù)來確認(rèn)交易中的 UTXO 是確實(shí)存在且沒有被重復(fù)使用,而攻擊者幾乎沒有方法能夠修改或是偽造數(shù)據(jù)。然而,比特幣是基于點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)建立的系統(tǒng),區(qū)塊的傳播必然存在延時(shí),且礦工之間的挖礦工作相互獨(dú)立,存在同時(shí)挖礦成功的可能。在這種情況下,系統(tǒng)將不再處于理想狀態(tài)。分叉是區(qū)塊鏈必須解決的問題,因?yàn)槿绻斡煞植娌粩嘌由?,那么攻擊者可以分別在 chain a和 chain b 上同時(shí)使用 b 區(qū)塊以及之前區(qū)塊交易中的UTXO 進(jìn)行重復(fù)消費(fèi)。不僅如此,分叉狀況下,只有少數(shù)中間節(jié)點(diǎn)能夠察覺到分叉的存在,大部分不知情的節(jié)點(diǎn)會(huì)繼續(xù)在各自的鏈上挖礦。對(duì)于全網(wǎng)而言,節(jié)點(diǎn)的計(jì)算能力實(shí)際上被割裂,這將直接降低區(qū)塊的產(chǎn)生速率,影響系統(tǒng)性能。比特幣處理區(qū)塊鏈分叉方法是先讓節(jié)點(diǎn)繼續(xù)在兩條鏈上繼續(xù)挖礦,一旦有一條鏈的高度超過了其他支鏈,那么這條鏈就會(huì)勝出成為主鏈,而其他支鏈將會(huì)被拋棄。這些被拋棄鏈上的區(qū)塊不再有任何意義,被稱為孤塊。這種處理分叉的方法實(shí)際上就是比特幣的共識(shí),即所有節(jié)點(diǎn)都遵循的一個(gè)公開規(guī)范。共識(shí)也是去中心化系統(tǒng)解決競(jìng)爭(zhēng)問題的主要方式之一。由于分叉的存在,區(qū)塊鏈中尾部的一些區(qū)塊并不是絕對(duì)安全的,因?yàn)樗鼈兇嬖谥恍碌姆种С降目赡?。但是,隨著后續(xù)新區(qū)塊的不斷追加,它們被新的分叉超越的可能性會(huì)呈指數(shù)式下降。基于這一情況,比特幣中一筆交易的確認(rèn)往往需要等待該交易所在區(qū)塊能夠有一定數(shù)量的后續(xù)區(qū)塊,這導(dǎo)致了比特幣中的交易確認(rèn)并不是實(shí)時(shí)的,其過程通常需要幾個(gè)區(qū)塊產(chǎn)生的時(shí)間1。
本詞條內(nèi)容貢獻(xiàn)者為:
李嘉騫 - 博士 - 同濟(jì)大學(xué)