縱觀區(qū)塊鏈項目的進化史,改良和創(chuàng)新已經成為必然。
前有以太坊提出智能合約帶來區(qū)塊鏈2.0與“世界計算機”,后有Polkadot以中繼鏈共享安全建立異構分片架構。
區(qū)塊鏈從業(yè)者正以分層、算法改進等創(chuàng)新不斷組合出了一個個面向業(yè)務的解決方案。為去中心化世界帶來去中心化商業(yè)的基礎設施,帶來傳統(tǒng)業(yè)務在去中心化世界標準化復制的機會。
不過無論項目設計如何變化,項目實現的目標是一致的,都是要在保證去中心化的信仰之下塑造出應用生態(tài)的輝煌。
如今,在大部分區(qū)塊鏈項目選擇使用PoS共識后,仍舊有一些項目在改進PoW以利用PoW共識的去中心化特征打造生態(tài)繁榮。
本文中,我們就將以公鏈Starcoin為例,解析其白皮書中的設計思路,展現一個成熟的以PoW共識為基礎的成熟方案,為行業(yè)提供一個組合創(chuàng)新的范例。
哪些設計理念已成為常規(guī)設計?
以太坊是公鏈的典型代表,其提出了世界計算機的概念實現,想要將互聯(lián)網業(yè)務都運行于區(qū)塊鏈網絡之上。目前所有的公鏈,無論是為金融服務,還是拓展到為數據、用戶服務,也都在向這個目標努力。
但一條鏈的網絡并不足以實現這些需求,例如比特幣雖在金融系統(tǒng)上可以稱之為創(chuàng)新,但比特幣網絡是一個不能運行智能合約的非圖靈完備加密貨幣網絡,只有利用加密方式控制的賬戶地址、資產的功能。
隨后以太坊應聲而起,以智能合約定義了區(qū)塊鏈的優(yōu)勢和特點。同樣的,以太坊1.0鏈也遇到了PoW網絡的性能問題。所以以太坊正轉向PoS、塑造分片、并且開辟layer2。
從這個路徑上看,以太坊已經在塑造分層結構,在以太坊2.0的計劃中,信標鏈通過PoS共識運行完成總賬本的驗證,而狀態(tài)執(zhí)行都將在信標鏈下的分片中進行,更多獨特的擴展功能也可能將設計在layer2層中。
這似乎已經是行業(yè)內技術上的共識,波卡、Cosmos等公鏈都不約而同的向相似結構發(fā)展。表現了對“部分信息上鏈驗證”、“分層處理”方案的默許。
Starcoin的分層框架和每層功能定義
為什么呢?因為分層后,可以針對每層出現的問題各個擊破。正如Starcoin,通過區(qū)塊鏈分層技術,可以在區(qū)塊鏈layer1可以達到去中心化和安全,通過layer2又可以達到足夠的可擴展性,供商業(yè)使用。為此,Starcoin對每層都進行了明確的定義和單獨滿足需求的技術改良。
Layer1的共識改進和邏輯突破
當我們拆分區(qū)塊鏈項目的時候可以發(fā)現,layer0是資源層,是由計算設備組成的點對點通信網絡層,Layer0可以看到路由、節(jié)點(礦機或服務器),在這層資源之上,公鏈建立了核心的layer1:共識層。
Layer1表現著區(qū)塊鏈的特點,保護著一些設計者的信仰。正如比特幣的PoW共識對很多信仰者來說,是重要的,因為工作量證明在原則上顯示了公平,而PoS共識,與既有權益過于相關。
也因PoW網絡是由礦機搭建而成,其成本和挖礦周期代表了礦工更長久的參與。因此很多區(qū)塊鏈項目選擇將礦機參與組成的共識層作為layer1,這是對PoW共識的信仰和對礦機挖礦經濟模型的信任。
Starcoin即是如此,其通過礦機來搭建一個以共享經濟為保護的layer1網絡。堅持PoW的公平性,也用來防止行業(yè)極端變化下的不穩(wěn)定性沖擊。
那Starcoin又如何避免PoW網絡帶來的既有問題呢?
Starcoin進行了重要創(chuàng)新。以以太坊的設計對比來看,Starcoin的重要創(chuàng)新是在沒有改變PoW共識出塊和廣播流程上,讓出塊變得動態(tài)可控。
首先我們需要了解比特幣、以太坊的出塊和交易打包方式。
當節(jié)點開始確認出塊,開始廣播后,一段時間內,只有納入最長鏈的區(qū)塊才是被認可的塊,最長鏈的競爭過程會讓網絡持續(xù)分叉,出現孤塊、叔塊。其原因在于礦工在打包交易前,很可能需要同步新的交易。
NC中本聰共識中的塊傳播方式
例如,當節(jié)點 A 向節(jié)點 B 傳播一個塊并且其中沒有新的交易時,節(jié)點 B 可以立即將這些緊湊塊傳輸給它的所有相鄰節(jié)點。但是,如果區(qū)塊中有新交易,節(jié)點 B 必須首先從節(jié)點 A 同步這些交易,然后驗證這些交易的簽名,這個過程需要時間。最終只有當整個區(qū)塊的有效性得到驗證時,節(jié)點 B 才能繼續(xù)傳播這個區(qū)塊。
此時,如果不進行新交易打包,出塊時間較短,但如果等待打包新交易,就需要更長的出塊時間。
因此,如何確定一個有效的同步時間,并保證新交易不是無序的一直延續(xù)的在同步,是極為重要的。
與之相關的,如果孤塊增加,也會而影響網絡資源使用率和安全性。
Starcoin在這個部分的設計,是令人驚訝的,其操作很簡單,像以太坊一樣引入了叔塊概念,并且對叔塊進行統(tǒng)計。
Starcoin中的叔塊打包監(jiān)測
叔塊是指孤塊中被編入最長鏈的塊,其可以代表網絡狀態(tài)分叉較多,孤塊會增加,在網絡延遲并且網絡擁堵時,叔塊也會隨之增加,因此,最終叔塊的數據可以用來輔助調整出塊時間和難度。
Starcoin網絡運行時,為了將叔塊維持在一個合適的閾值內,在每個小周期(時隙Epoch)末,都會重新調整下一個周期的出塊時間,同時調整的還有挖礦難度。
其邏輯在于,如果叔塊率較高,表示當前的出塊時間間隔下,網絡中存在較多的分叉和孤塊,需要調大出塊的時間,緩解此問題。反之,則說明全網出塊情況良好,還可能進一步縮短出塊時間,提高全網吞吐。
Starcoin引入叔塊的方式對于網絡本書來說,是自然的。不過還有一些公鏈可能會選擇設計特殊的切入點。
例如當打包前出現新交易時,可以將區(qū)塊空間中引入一個“叔塊頭”概念,其不占據交易驗證的體積。但可以把新交易引入叔塊頭,然后重新設計一個提交區(qū)用來驗證交易。
這是一種把影響區(qū)塊打包速度的“新交易”剝離正常區(qū)塊驗證步驟,轉換成其他方式驗證提交的方法。與Starcoin的方式不同,它改變了驗證方式。
因此,綜合來看,在layer1網絡(即比特幣PoW網絡)上做改進,首先是先增加小周期(時隙Epoch)用來快速調整出塊難度。
其次就是解決區(qū)塊打包等待新交易的問題,Starcoin的設計和選擇是明確的,在不用重新把新交易單獨處理的情況下,只通過叔塊監(jiān)測數據而調整出塊時間和挖礦難度,這樣是將PoW網絡演變成了一個動態(tài)吞吐網絡,其規(guī)則像是在高速公路中添加了指揮員,隨時指揮車輛的速度,這樣的改變雖小,卻可以改善PoW鏈在擁堵時的表現。并且,筆者認為,出塊時間隨網絡狀態(tài)可調整已經成為新公鏈系統(tǒng)的重要特性之一。
在Layer2大展拳腳
Starcoin已經改進了比特幣、以太坊的PoW模型。而在layer2上,Starcoin設計為專注于解決資產轉移交換等過程中的擴展性和性能問題。只是目前,layer2解決方案正處于“百花齊放,暫時無王”的階段,同時面對多個的layer2的解決方案,需要Starcoin設計團隊明確需求后做出選擇。
目前,在Starcoin白皮書中并未展示其部分,其官方表示會在白皮書2.0版本中公布layer2方案。我們可以通過Starcoin對分層網絡功能的定義去推測其layer2的設計。
layer2和layer1的普通狀態(tài)關系
從邏輯上看,layer2是layer1狀態(tài)的遷移交互,因此首先來看Starcoin Layer1職能,詳情如下:
1. 通過增強的中本聰共識機制來盡可能的在保證安全的基礎上在Layer1擴容,最大化Layer1網絡的利用率。
2. 提供資產的定義,發(fā)行,以及流轉,以及l(fā)ayer1、layer2之間的流轉能力。
3. 給layer2提供仲裁能力,layer2可以利用Layer1的安全機制來保證自己的安全。
而這時layer2職能是:
1. 將Layer1的交易分流到layer2,Layer1不再關心layer2交易的細節(jié)以狀態(tài)的變更。
2. 提供監(jiān)督機制,layer2的不同角色之間可以互相監(jiān)督。
3. 提供證據保全能力,用戶如果對layer2的交易有爭議,可以到Layer1仲裁。
由此來看,首先Layer1、layer2間的互相交互必須保證實現,因為這相關于Layer1、layer2資產流轉的需求以及有相互證明狀態(tài)有效的方式。其次,Starcoin還強調了layer2不同角色可以互相監(jiān)督。
Layer1、layer2間的狀態(tài)鎖定和證明間的交互
這樣的需求使用單個layer2技術是無法實現的。例如以太坊上的rollup,其兩層鏈間的雙向交互并不完善。例如零知識證明,雖可以保證兩層鏈間交互數據的安全性,卻無法在layer2的角色設計和數據可用性上發(fā)力。
所以可以推測的是,未來Starcoin一定會在layer2使用多技術組合方案,這在其公示出的layer2思路上得到一些證實,其抽象出一種通用的layer2方案模型如下:
1. 應用的狀態(tài)(包括資產)在Layer1和layer2之間安全的轉移。
2. 保證layer2的數據可用性。
3. 提供證明和提供仲裁機制。
上文說到,從邏輯上看,任何layer2方案都是Layer1的狀態(tài)遷移,詳細過程可能包含將狀態(tài)鎖定并在layer2重建等。因此,我們來看公示的模型,如果layer1和layer2都有統(tǒng)一的資源模型,那狀態(tài)遷移就不是難事,如果兩層鏈都用統(tǒng)一的框架搭建,數據可用性也不是問題,可能唯一遇到的問題會是合約遷移。而Starcoin很亮眼的是,其合約也是無狀態(tài)設計,因為合約并入了賬戶模型里,狀態(tài)已經被確定了所有權。交互中直接訪問狀態(tài)即可執(zhí)行。
綜上,我們可以對Starcoin抱有足夠的期待,筆者認為在layer2技術上,Starcoin的重點并不在改良技術,而是對行業(yè)內多類技術的組合與實現,在Starcoin的基礎優(yōu)勢(例如賬戶、存儲模型、編程語言)上占據優(yōu)勢即可。
巧妙設計以為長遠規(guī)劃
分層結構以及對layer1、layer2的單獨設計,塑造了Starcoin的基本能力,而千變萬化的業(yè)務需要要求在一些標準化的設計上仍要具備優(yōu)勢。
這就要提及Starcoin一些有利于長遠發(fā)展的巧妙設計。這些設計雖然討論不多,但卻是公鏈系統(tǒng)不可或缺的特性。
足以稱之為巧妙設計的,有3點,分別是更改賬戶模型和狀態(tài)存儲,支持多種驗證合法性的方式、雙累加模型,以及基于Move開發(fā)語言的適配。
1)更改賬戶模型和相應的狀態(tài)存儲之后,Starcoin得以實現以太坊無法順利進行的狀態(tài)計費計算。
對比以太坊來看,以太坊將賬號分為合約賬號和用戶賬號。合約賬號用于部署合約的代碼以及存儲合約的狀態(tài),用戶在某個合約中的狀態(tài)都保存到該合約賬號下,讀寫權限也由合約自己控制。這樣的設計自由度很高,但導致合約狀態(tài)的所有權不明確,從而容易帶來安全上的問題以及很難解決"狀態(tài)爆炸"問題。
Starcoin更改后的賬戶模型
這樣的設計帶來了以太坊擁堵情況下,Gas費的暴增以及復雜合約調用成本的居高不下。
因此,Starcoin 以太坊賬戶模型基礎上做了以下改進:
1. 廢棄了合約賬號,任意賬號都可以部署智能合約,部署的智能合約在當前賬號下。
2. 通過對合約編程語言中狀態(tài)存儲機制的改變,讓智能合約的開發(fā)者很容易的把合約的狀態(tài)分散保存到該狀態(tài)所屬的用戶地址下,從而明確狀態(tài)的所有權。
通過這樣的改造,一方面增強了鏈對用戶狀態(tài)的安全保護能力,另外一方面也為狀態(tài)計費提供了可能。未來Starcoin會支持token支付gas,便于用戶和開發(fā)者使用。
2)從上文的討論中,我們還能看到多次提到區(qū)塊鏈驗證,足以證明驗證數據是區(qū)塊鏈運行剛需,在 Starcoin 的整體設計中,還提供了四個層面的數據校驗機制,這些機制,可以提供全場景下的數據驗證邏輯。
1. 交易可校驗:BlockHeader 包含一個全局交易累加器的根哈希,任何上鏈的交易都有對應的全局證明。
2. 狀態(tài)可校驗:BlockHeader 包含一個全局狀態(tài)狀態(tài)樹的根哈希,保障了狀態(tài)可驗證。
3. 區(qū)塊可校驗:BlockHeader 包含一個 BlockBody 的哈希,用于校驗 BlockBody 中的數據。
4. 鏈可校驗:BlockHeader 包含一個全局區(qū)塊累加器的根哈希。任何一個區(qū)塊可以提供一個和當前區(qū)塊的關系證明,不需要遍歷區(qū)塊即可驗證某個區(qū)塊是否是當前區(qū)塊的祖先區(qū)塊。
Starcoin區(qū)塊頭中的的全局區(qū)塊累加和根哈希示意
在四個維度的數據校驗的基礎上,再配合Starcoin的合約和賬戶模型,「交易累加器」和「區(qū)塊累積器」組成了Starcoin獨特的「雙累加器」模型,這將成為Starcoin系統(tǒng)數據安全的基礎。也可以通過數據合法性的優(yōu)勢為很多業(yè)務服務,例如跨鏈數據交互驗證。
3)為了更好地擴展區(qū)塊鏈的能力,Starcoin 還將 Move 語言作為智能合約,以保證針對數字資產的編程更加安全、簡單。
Move 語言是Facebook穩(wěn)定幣項目Libra(已更名為Diem)的開發(fā)語言,該語言尤其重視安全性,主要由以下幾個方面保證:
1. 自底向上的靜態(tài)類型系統(tǒng);
2. 資源不可復制或者隱式丟棄;
3. 資源按用戶存儲,重新定義鏈,合約,用戶三方的數據操作權限;
4. 引入形式化驗證技術,通過數學原理來證明合約的安全性;
更重要的是,Starcoin團隊已經通過 Move 語言建立了Move開發(fā)社區(qū),通過開源社區(qū),可以獲得開發(fā)技術、開發(fā)資源以及人才儲備和未來的生態(tài)項目孵化能力。
寫在最后
從Starcoin白皮書中詳實的設計,再到Starcoin已經完成的技術進展,綜合來看。 Starcoin除了未確認的layer2外,其網絡從0到1的過程已經完成了80%,其中最關鍵的要數layer1中對PoW共識的改進。小小的改進,讓Starcoin可以堅持使用PoW,可以建立一個挖礦生態(tài)。
如果說挖礦生態(tài)是建立layer1的支柱,當layer1和layer2組合使用后, Starcoin也會因layer2層對應用的擴展為DeFi、NFT的應用土壤。
其原因有四:
其一,Starcoin有穩(wěn)固的礦工經濟做支撐,網絡生命力遠勝其他PoS網絡。
其二,layer1層的賬戶模型和存儲的設計讓 Starcoin Gas費更低。
其三,使用Move語言與PoW配合,足夠安全,又具備比特幣金融系統(tǒng)的基因。
其四,layer2的執(zhí)行讓Starcoin雖使用PoW但性能完全可以承載DeFi等應用。
為了讓以太坊的性能達標,以太坊團隊用了7年時間,才做好了PoW向PoS轉換的準備,但切換共識還沒有真正進行,信標鏈的穩(wěn)定性還沒有經歷合并后的考驗。如今,我們信任以太坊的DeFi、NFT,是運行在PoW鏈上的,用戶對PoW信任一定高于還未得到全面證實的PoS。
如此來看,筆者認為,Starcoin將成為一個保持比特幣金融系統(tǒng)基因,又具備圖靈完備能力的安全智能合約運行平臺。這是一個可以承擔以太坊DeFi需求的平臺,也是比特幣信仰者曾經暢想也可以在未來使用的平臺。