從區塊鏈到 DAG(一)账本結構和共識機制

2023-03-08 15:03:25

前言

DAG 全稱 Directed Acyclic Graph , 中文譯作“有向無環圖”。它原本是計算機領域裏一種數據結構,為了解決比特幣交易速度慢的問題,它作為一種底層账本結構被重新提了出來。在大部分的介紹中都把 DAG 和區塊鏈作為兩種獨立的底層账本結構區別對待,更有甚者僅僅把 DAG 看做一種共識機制。這兩種觀點都過於片面了,都是因為缺乏對 DAG 的正確認知。

要認識 DAG 首先需要明確兩個概念:账本結構和共識機制。DAG 作為一種底層账本結構有適合自己結構的共識機制。區塊鏈也是一種底層账本結構,但它其實是一種特殊的、簡化的DAG,其對應的共識機制也是 DAG 共識的簡化版。

本篇文章作為系列的第一篇將着通過梳理我們熟知的比特幣和以太坊的工作原理提煉出账本結構和共識機制這兩個概念,來幫助我們後續系統的理解 Qitmeer 的技術架構。

1 比特幣的工作原理和性能

比特幣作為區塊鏈技術的开山鼻祖,其性能早已不能滿足現在的交易需求,故而時常發生擁堵。我們先來看看下圖比特幣的記账過程:


      從區塊鏈到 DAG(一)账本結構和共識機制

圖1 比特幣的記账流程圖

比特幣的記账過程:礦工節點把交易打包在區塊裏,通過對區塊做 PoW(工作量證明)使這個區塊成為候選區塊(出塊過程);候選區塊被全網廣播等待其他礦工確認,該候選區塊通過確認後會被添加到最長的鏈上。

在理想狀態下要等前一個區塊被全網確認加到鏈上以後,下一個區塊才能被打包成候選區塊廣播。如果出塊速度太快,廣播的速度跟不上出塊速度;將會導致一個區塊在被全網確認以前新的區塊又被挖出來廣播了,這就是分叉。分叉會降低網絡的安全性。為了保證網絡安全,比特幣的出塊時間被設定為10分鐘。而這一設定也限制了比特幣處理交易的能力,它的 TPS 只有7左右。

隨着參與記账的節點的增多,比特幣還是會分叉。就算排除故意作惡的節點,正常情況下難免會出現兩個節點幾乎同時出塊的情況。這個時候比特幣根據“最長鏈共識”來確定主鏈,即分叉後節點會基於其中的一個區塊繼續挖礦,然後選擇更長的那個鏈作為主鏈,不屬於主鏈的分叉區塊會被全部拋棄。由於網絡延遲等偶然因素,分叉總是時有發生,但連續6次以上發生分叉的概率微乎其微,所以一個區塊在等待6個區塊確認以後就可以保證這個塊在“最長鏈”上,不會被篡改。

比特幣採用 PoW 共識(工作量證明),其中主要有兩個步驟耗費比較多的時間。

一是做工作量證明(Time1),即算出符合要求的區塊哈希值。二是全網廣播(Time2),等待其他礦工確認這個區塊的過程。

在設計時,比特幣的出塊時間設定為10分鐘(即需要10分鐘的工作量證明),每個區塊的大小約1MB,一個塊可以打包2500-3000條交易數據。盡管單個區塊可以包含千條交易信息,但由於至少需要10分鐘才能完成一次出塊,這導致平均單位時間內記錄的交易信息低,即 TPS 低。

TPS( transection per second )是常用的描述區塊鏈性能的指標,指每秒處理業務的數量,是衡量一個系統吞吐量的重要參數

由於出塊慢導致比特幣的 TPS 只有7左右。因此比特幣的擁堵常被歸咎於其所用的 PoW 共識機制。有人會說可以通過增大區塊的容量或是提高出塊速度的方式來增加 TPS,這樣就不會擁堵了。這個想法很美好,但是實際上不能這么簡單地增加交易吞吐量。增大區塊容量會導致 Time2 的增加(廣播時間變長),因為單個區塊包含的字節變多了,所需要的傳輸時間也就相應變長;盡管提高出塊速度會使 Time1 變小,但當出塊速度太快而廣播速度跟不上時,一個區塊在被全網礦工確認之前,新的區塊又被挖出來了,這樣會出現分叉。分叉會降低網絡的安全性。請參考下圖:


      從區塊鏈到 DAG(一)账本結構和共識機制

圖2 比特幣的網絡分叉圖

本來不分叉時作惡的成本是不少於全網51%的算力。現在分叉以後假設A鏈分到60%的算力,B鏈40%的算力。如果想要作惡把A鏈回滾改到B鏈,只需要全網11%的算力就可以了。所以分叉降低了作惡的成本,使網絡變得不安全。因此,10分鐘的出塊時間是比特幣在安全與效率之間做的妥協。

所以在 PoW 下不可以隨意的加大區塊容量或提高出塊速度。這會增大分叉的可能,降低網絡的安全性。

2 比特幣的账本結構和共識機制

總結上述過程我們可以知道比特幣的底層账本結構是一條單鏈。


      從區塊鏈到 DAG(一)账本結構和共識機制

圖3 比特幣單鏈結構圖

而共識機制可以分成兩個部分:

1、出塊共識,即如何分配打包權。比特幣是通過 PoW(工作量證明),除此以外常見的還有 PoS(權益證明),DPoS 等。

2、账本共識,即各節點通過這一共識確認一個有效账本,這個账本裏不能包含相互衝突的交易。這套共識要能夠有效的排除惡意攻擊的交易,防止出現“雙花”問題。

中本聰在論文《比特幣:一種點對點網絡中的電子現金》中曾介紹,比特幣工作量證明機制的本質是一CPU一票,而最長鏈包含了最大的工作量,所以“大多數人”的決定就可以表達為最長鏈。

仔細來講就是,比特幣區塊是依靠礦工們不斷進行數學運算而產生的,每一個區塊都必須引用其上一個區塊,因此最長的鏈也是最難以推翻和篡改的,所以節點永遠認為最長鏈才是有效的區塊鏈,在一般情況下,比特幣把累計了最多難度的區塊鏈,也是包含最多區塊的那個鏈稱為主鏈。比特幣每一個(挖礦)節點總是選擇並嘗試延長主鏈。只有在最長鏈上挖礦的礦工才能夠獲得獎勵,這就是我們常說的比特幣最長鏈原則。比特幣的账本共識是“最長鏈共識”。

3 以太坊的账本結構和共識機制

以太坊的運行原理跟比特幣沒有太大的不同,所以這裏就不詳解了。以太坊底層账本結構從鏈變為樹。對應樹這種結構的账本共識為“最重子樹共識”(GHOST協議:The Greedy Heaviest-Observed Sub-Tree)。

由於比特幣採用“最長鏈共識”,所以只要有分叉就會降低鏈的安全,分叉越多安全性越低。這導致所有用於分叉區塊的算力全都浪費掉了。以太坊的 GHOST 協議是當出現分叉時,含有子樹最多的那條鏈就是主鏈。這樣哪怕出現分叉安全性也不會降低;而且分叉的區塊(又稱為“叔區塊”)也會參到與账本共識中,幫助決定主鏈,使這部分算力不至於被完全浪費掉。


      從區塊鏈到 DAG(一)账本結構和共識機制

圖片4 最重子樹共識下的區塊樹

如圖1所示,整個鏈在區塊0之後出現分叉。如果只考慮誠實節點的出塊,按照比特幣的最長鏈原則主鏈會是0->1B->2D->3F->4C->5B。當有節點作惡時,攻擊者提供一個長鏈0->1A->2A->3A->4A->5A->6A,在最長鏈共識下,攻擊會成功。

當考慮最終子樹共識時:子樹的區塊1B包含了12個區塊,而攻擊鏈的區塊1A只包含6個區塊,最重子樹共識會選擇1B作為主鏈的區塊,然後進一步評估1B之後的分叉。以此類推,最終的主鏈會是0->1B->2C->3D->4B。原本在最長鏈共識下作廢的叔區塊會被考慮成“權重”添加到主鏈的計算中,最終權重最重的鏈成為主鏈。叔區塊必須含有一個有效的區塊頭,但是它裏面記錄的交易不需要得到確認,甚至都不要求叔區塊是一個有效的區塊。所以最重子樹共識僅僅把叔區塊的個數作為計數,而裏面的交易信息不會添加到主鏈上,用於計算這部分交易信息的算力還是被浪費掉了。以太坊的出塊時間大概是15秒,雖然與比特幣的10分鐘相比這樣短的出塊時間增加了分叉的可能,但是採用最重子樹共識有效的保證了主網的安全。也使以太坊的 TPS 大大高於比特幣,大概為30到40。

一、以太坊出塊共識(權益證明機制)

權益證明機制是針對工作量證明機制存在的不足而設計出來的一種改進型共識機制,其英文全稱 Proof of Stake ,簡稱PoS ,也稱股權證明機制。顧名思義,是根據投資者手上持幣的幣齡(幣齡=礦工質押的代幣總金額*代幣持有時間)來決定挖礦成功的打包概率的共識機制。

可簡單理解,一個 PoS 代幣經濟生態就好比一家同股不同權的上市公司,PoS 挖礦就像一家上市公司的股利支付決策,每一位礦工(持幣者)都是上市公司的股東。礦工爭奪的記账權就像股票表決權一樣,礦工獲得記账權的概率與股東表決權的份額(即礦工的表決權佔總體表決權的比例)相似。礦工質押代幣的數量就是股東持股的數量。根據質押代幣份額的大小不同,一些礦工是大股東,一些礦工是"小股東"或"少數股東"。PoS 挖礦也就像將質押的代幣存放在銀行一樣,銀行根據時間長短和存款金額支付利息。

二、權益證明機制工作原理

开始競爭出塊記账前,擁有權益的節點將自己的權益放入 PoS 機制中,同時身份變為驗證者,PoS 機制根據驗證者下注的多少,採用隨機的方式選出一個記账者進行出塊記账。這個隨機並不是真正的隨機,一般跟下注的權益成正比,誰的權益多,誰獲取記账權的概率就越大。如果選出的記账者在一段時間內沒有記账,PoS 機制重新選擇記账節點,當出塊完成,开始進入下一輪的記账。

在 PoS 共識中,節點爭奪記账權依靠的不是算力而是權益(代幣)。PoS 同樣需要計算哈希值,但與 PoW 不同的是,不需要持續暴力計算尋找 nonce 值,具體流程如下:


      從區塊鏈到 DAG(一)账本結構和共識機制

圖5 pos記账流程

每個節點在每一輪共識中只需要計算一次 Hash,當擁有的權益越多,滿足 Hash 目標的機會越大,獲得記账權的機會越大。可以說,PoS 是一個資源節省的共識協議。權益除了與代幣數量有關,也與代幣的持有時間有關,因此持有的代幣數量越多,時間越長,獲得記账權的機會越大。

整個流程簡單總結起來就是:持幣人將代幣抵押,獲得出塊的機會,然後 PoS 共識中會通過選舉算法,按照持幣量比例,從中選出出塊礦工。礦工在指定高度完成打包交易,生成新區塊,並廣播區塊,廣播的區塊經過驗證人驗證交易,通過驗證後,區塊得到確認。這樣一輪 PoS 的共識過程就完成了。

三、PoS 機制與 PoW 機制的不同點

工作量證明機制產生區塊時依賴於算力,致使每一個比特幣的創建至少需要10萬度電( 2022 年數據 ),相當於 6600 加侖的汽油。權益證明機制產生區塊時不採用算力作為資源,而是節點創建區塊必須提供證明,讓全網認同它在創建這個區塊之前擁有一定數量的。將數字貨幣的擁有權視作稀缺資源來產生共識。


      從區塊鏈到 DAG(一)账本結構和共識機制
      從區塊鏈到 DAG(一)账本結構和共識機制

只有持有數字貨幣的人才能進行鑄幣,而且不需要大量的算力就可以挖到貨幣,避免了比特幣網絡中出現的“算力集中”趨勢,回歸到區塊鏈“去中心化”的本質要求。

4 Qitmeer 的账本結構和共識機制

一、BlockDAG 账本結構

Qitmeer 底層账本結構是 BlockDAG(區塊圖),完整的說是基於有向無環圖結構的區塊網絡系統。從以太坊的樹鏈狀結構變成多維的有向無環圖結構,它是區塊鏈系統的升級和擴展,充分釋放了區塊鏈的性能。BlockDAG 是基於最重鏈規則,能達到跟比特幣相當的 51% 容錯性,同時區塊圖結構實現網絡並發數據傳輸,大大提高了傳輸性能,能達到遠超過比特幣、以太坊的系統吞吐量,在帶寬和傳播延遲理想狀態下 TPS 可以達到 4000+,隨着 Meer Labs 在高速子網方面的研究的突破,整個系統吞吐量會得到更大提升。


      從區塊鏈到 DAG(一)账本結構和共識機制

圖6 MeerDAG账本結構

BlockDAG 的協作模型比區塊鏈的競爭模型提供了更多的公平性。並發的區塊只要合法都可被確認。不管它擁有多少算力,每個節點根據其貢獻獲得獎勵。錢包發起交易時不需要等待自己之前有多少交易,只需要經歷局部校驗、全網廣播、其他局部校驗,相當於是把交易確認分散化,每一個節點都在做類似於拼圖的工作,把自己的和別人確認的交易拼接起來。從而使得區塊鏈系統的交易吞吐能力得到擴展,從根本上提高區塊鏈網絡的性能。

二、Qitmeer出塊共識及獎勵機制

2.1出塊共識和獎勵機制

Qitmeer Network 是一條高性能區塊鏈網絡,使用工作量證明( PoW )共識機制,採用了獨創的 Meer Keccak 256 工作量證明算法,該算法主要用於尋找大型僞隨機圖中的某些子圖, 需要高強度內存運算。以分布式的節點網絡提升區塊鏈的去中心化及安全性。

Qitmeer 關注所有節點之間的公平性,而不管一個節點擁有多少算力。對於算力強的礦工,他們可能會爭取區塊獎勵,區塊獎勵比較豐富,但競爭比較激烈;對於那些算力較小的礦工,他們仍然有機會分享交易費用,先到先得。

Qitmeer Network 自研的新一代 BlockDAG 混合協議,MeerDAG 協議。用藍色表示誠實塊,用紅色表示不誠實塊。Qitmeer Network 只給藍色的方塊獎勵。鼓勵礦工積極工作。只基於藍色集策略可以在很大程度上增強安全性,但同時也會給那算力較弱或網絡連接較差的礦工帶來歧視。也許他們也是誠實的礦工,但由於共識協議的限制,他們仍然被認為是“不誠實的”。因此,我們可以利用交易費來補償這些誠實的礦工。

網絡是依靠礦工們努力工作來鞏固安全的。BlockDAG 模式的競爭不像區塊鏈那么激烈,因此需要鼓勵礦工積極工作,以更好地維護網絡的算力安全。由於消極地工作被認定為“紅塊”的概率較高,礦工將努力避免這種情況。

2.2挖礦協議

挖礦流程

Qitmeer 支持 getblocktemplate 挖礦協議。它讓礦工決定將哪些交易放到塊中。礦工通過 getblocktemplate RPC 向 Qitmeer 全節點發送請求。

然後礦工使用來自 getblocktemplate RPC 的數據啓動 PoW。如果它得到正確的“答案”, 通過 submitblock RPC 提交潛在的塊。具體流程如下圖所示。


      從區塊鏈到 DAG(一)账本結構和共識機制

圖7 挖礦流程

Miner 功能Qitmeer 挖礦工具( Qitmeer - Miner )支持獨立採礦和礦池採礦。

獨立模式 (Solo)如果礦工決定在不加入池的情況下挖 meer(qitmeer原生貨幣),他將啓動獨立挖礦模式。Solo 礦工連接一個全節點,調用 RPC 服務來挖塊。Solo 礦工推薦使用 NOYCE N57 集成電路算力機器實現,以獲得更高的效率。

礦池模式 (Pool)Qitmeer 礦池與大多數 PoW 礦池一樣支持 stratum挖礦協議。目前支持 Qitmeer 的礦池有 F2pool、火幣礦池、Hashpool、Meerpool 等主流礦池。


      從區塊鏈到 DAG(一)账本結構和共識機制圖8 挖礦節點分布圖

三、Qitmeer 账本共識

MeerDAG 共識協議是一種將 GHOSTDAG + SPECTRE 的特性完美融合的創新性 BlockDAG 混合協議,GHOSTDAG 作為基礎協議,實現高吞吐量的线性排序服務,並採用 SPECTRE 協議作為輔助協議保證交易快速確認。後文將詳細闡述其工作原理。

5 總結

從比特幣、以太坊和 Qitmeer 等公有區塊鏈的介紹可以發現,底層账本的結構與共識機制密切相關。

由於協議約束,比特幣不可伸縮。根據中本聰共識,即最長鏈規則,1MB塊大小和10分鐘塊率限制比特幣只能達到每秒7筆交易的理論吞吐量,無論多么大的帶寬和多么快的傳播延遲。提高可伸縮性最直觀的方法是縮短塊時間或增大塊大小。中本聰沒有採用的原因是這樣會帶來分叉,同時會分散主鏈的算力,從而造成安全漏洞。

以太坊的 GHOST 協議在不犧牲安全性的前提下,引入了最重樹共識來保留分叉。注意,這裏區塊鏈已經轉換為塊樹。由於最大的子樹集中了大多數算力,安全性與比特幣一樣高。主鏈是指從起源到子代數量最多的葉子上的區塊鏈,其他區塊為鏈下區塊。只有主鏈塊貢獻吞吐量,而鏈下區塊有助於增強安全性。由於更高的出塊速率,區塊樹極大地提高了吞吐量。

但是,仍然存在對鏈下塊中交易的浪費,而這些交易也應該有助於提高吞吐量。Qitmeer 所採用的 BlockDAG 協議提出了一種新的账本數據結構,即每一個區塊確認每一個未確認的區塊,將塊樹結構升級為區塊圖。

從區塊鏈到 BlockDAG 的發展歷史可以看出,區塊鏈是BlockDAG 在低吞吐量情況下的一個特例,這意味着兩者在本質上是相同的。因此,它是最接近比特幣網絡的可伸縮性解決方案。BlockDAG 是穩定的,因為它繼承了所有被長期證明是比特幣穩定的的特性,並且它在協議層面可以無限地擴展,只有物理上的限制,如帶寬和傳播延時。

進一步擴展公有區塊鏈性能的基礎是高效穩定的共識協議,因此 BlockDAG 成為 Qitmeer 首選擴展解決方案。

參考文獻:[1] 公衆號《區塊鏈新觀》:從區塊鏈到DAG

[2] CSDN博主「子葉_」:https://blog.csdn.net/u014264140/article/details/114006887

[3] 公鏈性能由什么決定——被誤解的TPS:https://t.1yb.co/6cX

[4] 以太坊Ghost協議和叔塊:https://www.jianshu.com/p/050f92925411

[5] GHOST,DAG,SPECTRE,PHANTOM和CONFLUX技術原理:https://www.jianshu.com/p/8734e06d558f

[6] Qitmeer Team ——《Qitmeer中文白皮書》

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

btc日內再次下跌 短线應當如何處理?

盡管以太坊現貨ETF獲批是個好消息,但市場反應卻不如預期。在消息公布後,以太坊價格出現了小幅下跌,...

加密蓮
134 3個月前

7月23日、BTC(合約)ETH(合約)行情分析及操作策略

昨日收益還是不錯的,日內給出的現價空單分別止盈我們目標點位,恭喜跟上的朋友喫肉。時間一晃到月底了,...

倪老師
134 3個月前

幣圈院士:血與淚的教訓!交易者為何總是撞死在同一棵樹上?

幣圈院士談。交易市場中的幾種“死法” 在幣圈市場鱗次櫛比的海洋,風起雲湧,時常讓人感到驚手不及。在...

幣圈院士
139 3個月前

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...

168超神
131 3個月前

悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤

一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...

我是周悅盈
111 3個月前

btc完美盈利 晚間波動較大注意

昨日btc空單完美給到,最大化走出一千七百點空間~ btc: 日內开盤下跌繼續測試66000一线,...

加密蓮
121 3個月前