在現(xiàn)實商業(yè)的應用場景,所涉及的計算是巨大,甚至有數萬億的邏輯步驟計算,要處理大量的數據,這在區(qū)塊鏈上幾乎是不可能完成的。
區(qū)塊鏈的擴展問題是行業(yè)關注的焦點之一。因為,只有解決了擴展性問題,才能為區(qū)塊鏈走向主流鋪平道路。只有解決了擴展性問題,才能讓dApp的用戶體驗達到App的用戶體驗水平,才能推動普通用戶進來使用。
區(qū)塊鏈是一個去中介化的無須許可網絡,任何人都可以參與,這意味著區(qū)塊鏈要達成共識,共識帶來安全,但同時也帶來了極高的成本:交易吞吐量小,交易處理時間長、費用高。
為了解決這些問題,目前有一層擴展和二層擴展的方案。一層(layer1)是橫向擴展,目前主要有分片、共識機制的優(yōu)化(如DPoS)等。二層(layer2)是縱向擴展,包括Plasma、狀態(tài)通道、側鏈等方式。迄今為止,有一些進展,但還不足以讓擴展性發(fā)生根本性的改變。尤其是考慮到它們還無法滿足dApp的擴展性需求,如游戲、社交網絡等。這些dApp都無法真正一展拳腳,尤其是涉及到大規(guī)模計算時。
那么,有沒有方案能夠解決這些問題?能夠讓dApp達成App的體驗?能夠讓普通用戶真正使用上dApp,享受到dApp帶來的好處?
藍狐筆記最近關注到Cartesi項目的解決方案,讓人印象深刻。它在二層(layer 2)上的擴展方案有自己非常獨特的切入點,值得dApp開發(fā)者和整個區(qū)塊鏈行業(yè)的關注。
Cartesi試圖成為區(qū)塊鏈的計算層
區(qū)塊鏈主鏈上計算和存儲的成本非常高,像游戲、社交、視頻等領域的應用都無法在主鏈上直接運行。大規(guī)模的計算必須在鏈下進行。
那么,如果不是基于區(qū)塊鏈運行應用,跟傳統(tǒng)的App有什么區(qū)別?
這里的解決思路是,從實際場景的需求本質出發(fā),而不是在技術上進行死磕,陷入死胡同。我們沒有辦法就所有事情都達成全局共識,而實際上,我們也沒有必要就所有事情達成全局共識。
大多數情況下,我們只需達成局部共識。只有極其重要的數據才需要達成全局共識。大多數事情,往往都是小部分參與者之間才真正感興趣的,只要這小部分參與者之間達成共識就可以了。比如,我們去超市買一瓶水,我們沒有必要跟律師打電話,也沒有必要讓地球上的所有人都知道你買了一瓶水。只有在發(fā)生糾紛時才需要進行仲裁。
基于這種思路,產生了layer 2的解決方案,而Cartesi就是其中的一種解決方案。Cartesi不是公鏈,它是去中心化的通用計算平臺,試圖成為區(qū)塊鏈的計算層,旨在為公鏈和dApp開發(fā)者提供通用計算服務。
Cartesi作為區(qū)塊鏈的計算層,它將底層鏈智能合約執(zhí)行所需的大量計算接手過來,讓底層鏈發(fā)揮其安全特性,專注于價值存儲和轉移,專注于結算結果的存儲;與此同時,dApp開發(fā)者基于Cartesi,可以使用熟悉的編程語言、工具、庫、軟件以及服務來開發(fā)dApp。dApp的大多數復雜計算邏輯都通過鏈下來解決,開發(fā)者只須專注于業(yè)務邏輯的構建,但與此同時,能夠開發(fā)出類似于App體驗的dApp應用。
有了其他layer2,為什么還需要Cartesi
Layer2分擔了layer1的擴展性壓力。layer2的存在不僅是為了解決layer1中全局共識資源高昂成本的問題,更是為了順應這樣的一種事實:并非所有的事情都需要達成全局共識。
只有跟該共識相關的群體才需要達成一種共識。部分參與者的協(xié)作可以在鏈下進行,但為了防止出現(xiàn)糾紛,一般情況下,layer2的參與者需要在鏈下交互時存入押金,如果是以太坊鏈,一般會存入ETH。
通過質押資產,所有參與者在鏈下進行互動,然后將其互動操作的重要結果提交到主鏈,主鏈完成全局狀態(tài)的更新。如果這個過程中,有任何參與者產生惡意行為,其他相關方可以向主鏈發(fā)起申訴以尋求解決。惡意行為一旦得到確認,惡意行為者的抵押資產可能會被扣除。
Layer 2的模式將layer1不僅看作為價值存儲和轉移的地方,也視作為具有最高安全性的共識仲裁法院。而layer 2是各種局部參與者之間進行互動的地方,大家都受制于獎懲機制,受制于具有公信力的layer1的制約。
Cartesi也有類似的思路,只須參與方才需要執(zhí)行大量的鏈下計算,計算結果提交到鏈上合約進行驗證,確保執(zhí)行結果的可信。
雖然基本上layer 2都是這種思路,但Cartesi也針對layer 2的一些不足進行了改進。
比如layer 2方案要求主鏈可以解決可能出現(xiàn)的糾紛。有時候會出現(xiàn)糟糕的情況,比如需要在通道開啟時,把大量計算傳到主鏈,這些交易的關閉機制會限制最大計算量。Cartesi則允許Plasma或狀態(tài)通道利用Cartesi的計算能力,也就是將計算通過Cartesi來解決,而不是轉移到主鏈。在這些layer 2的解決方案中,如雙方都需要密集計算才能完成爭議處理,而主鏈很難解決這樣的大量計算問題。
此外,Cartesi跟其他layer2解決方案不同,它不一定要求dApp應用的各相關方同時在線。
這就是Cartesi相對于其他layer2方案的不同之處,從本質上來說,它不僅是layer 2的解決方案,更是去中心化的通用計算平臺,連接了公鏈和dApp的開發(fā)者,為雙方提供計算服務。
Cartesi如何運作?
從整體的思路上,Cartesi跟多數layer2方案有相似之處,不過在具體的解決方案上,Cartesi有它的獨特之處。
· Linux的開發(fā)環(huán)境
Cartesi推動了一種dApp的開發(fā)模式,它將dApp的開發(fā)環(huán)境提到了新的高度:轉向了Linux開發(fā)環(huán)境。
Cartesi虛擬機旨在為dApp的大規(guī)模運行提供支持,所以,它要考慮解決當前智能合約虛擬機的問題。現(xiàn)有的智能合約虛擬機運算相對簡單,比如執(zhí)行賬戶余額的運算、計算哈希值或調用合約等。
而現(xiàn)實的商業(yè)應用需要能響應設備、分配內容、跟其他程序復雜交互、海量的計算執(zhí)行等。有了操作系統(tǒng)的支持,這些應用可以有序運行。指令集體系結構和操作系統(tǒng)相互支持,硬件可以為操作系統(tǒng)提供硬件功能,操作系統(tǒng)通過這些功能來協(xié)同所有程序的運行。
當前的智能合約虛擬機還無法實現(xiàn)類似功能,它們并沒有操作系統(tǒng)的支持。
為了解決這個問題,Cartesi引入了開源的RISC-V指令集體系結構,Linux內核已經移植到RISC-V上,RISC-V有成熟的編譯器。
也就是說,Cartesi準備通過這種方式,將鏈外的計算能力引入鏈上。
同時,Cartesi節(jié)點還可以讓dApp開發(fā)者在本地運行代碼。在本地執(zhí)行代碼和在Cartesi虛擬機系統(tǒng)內執(zhí)行代碼,都會在Linux操作系統(tǒng)下運行。Linux可以提供復雜計算所需要的完整生態(tài)系統(tǒng)。
· Cartesi虛擬機
基于Cartesi上開發(fā)的dApp包括鏈上和鏈下模塊。其中鏈下模塊在Cartesi節(jié)點內運行。當然,也可以在本地執(zhí)行代碼,但本地計算不可重現(xiàn)。要實現(xiàn)重現(xiàn),必須運行在Cartesi虛擬機中,在Cartesi節(jié)點中執(zhí)行代碼。那么重點來了,這是Cartesi項目中需要關注的重點之一,它就是Cartesi虛擬機。
Cartesi虛擬機有兩點值得關注:一是完全獨立。二是計算可重現(xiàn)。它的獨立性意味著可以實現(xiàn)確定性,無須擔心外部輸入以非確定性方式來改變機器的狀態(tài)(鍵盤、時鐘中斷等)。它的計算可重現(xiàn)意味著其具有可信的特點。Cartesi虛擬機從相同的初始狀態(tài)開始運行經過相同的處理器周期,最終會達完全相同的狀態(tài)。
也就是說,Cartesi中的可重現(xiàn)計算運行在確定性的RISC-V虛擬機上。它受Cartesi節(jié)點控制,且自包含了Linux系統(tǒng),節(jié)點通過一些確定的主機接口與Cartesi虛擬機進行交互。
對于Cartesi的dApp開發(fā)者來說,他們可以指定鏈下計算采用可重現(xiàn)的方式,Cartesi的節(jié)點會根據指定執(zhí)行。dApp開發(fā)者可以請求節(jié)點提交計算結果,并在鏈上進行驗證。在這種情況下,主鏈處理爭議結果無須占用太多資源。
同時,Cartesi虛擬機需要考慮區(qū)塊鏈的驗證要求。為了實現(xiàn)可信,整體架構的實施必須容易審計和開放。這也是Cartesi采用RISC-V的重要原因。
RISC-V有很多社區(qū)開發(fā)者支持。他們搭建了軟件的基礎底層,如Linux操作系統(tǒng)的端口和GNU工具鏈。Cartesi虛擬機以確定性方式將其整個狀態(tài)映射到物理內存。
Cartesi虛擬機的鏈下執(zhí)行除了完成計算執(zhí)行之外,還支持解決有關計算結果的爭議。為了提供這些服務,Cartesi虛擬機的鏈下執(zhí)行有可編程的接口。
Cartesi虛擬機也是透明的,任何人通過任一時刻的虛擬機狀態(tài),都可以預測下一個處理器周期指令完成后的狀態(tài)。Cartesi的這種設計機制保證了可信計算。獲得Cartesi虛擬機初始狀態(tài)的不同各方在各自的Cartesi節(jié)點中運行Cartesi虛擬機都會獲得完全一致的結果。Cartesi虛擬機的狀態(tài)可以通過默克爾樹表達,也意味著可以通過鏈上實現(xiàn)仲裁。
其中鏈下Cartesi虛擬機主要由內存和各種驅動器組成。其中,Linux內核被加載到內存中,其中有的驅動器會包含Linux文件系統(tǒng)。驅動器被看作為Cartesi節(jié)點中的普通文件,Cartesi虛擬機將普通文件當作設備給Linux內核掛載,這些設備被掛載后,對于Linux下運行的程序來說,就相當于能讀寫文件和目錄的文件系統(tǒng)。
通過默克爾樹的狀態(tài)哈希,Cartesi虛擬機將其狀態(tài)在鏈上呈現(xiàn)。狀態(tài)包括內存和驅動器、以及其他Cartesi虛擬機運行所需的內容。通過默克爾樹的根哈希,可以判定局部的子狀態(tài)是否正確。
· 爭議的解決機制
當dApp的參與方相互之間產生糾紛時,怎么辦?首先,挑戰(zhàn)方會存入抵押資產發(fā)起訴訟,如果被挑戰(zhàn)方想要進行自我辯護,也需要存入同樣價值的抵押資產。
然后雙方陳述過程,鏈上通過根哈希狀態(tài)的對比,進行判決。智能合約會查出雙方在運行Cartesi虛擬機第一次產生不一致結果的指令。之后,智能合約通過在鏈上執(zhí)行此條RISC-V指令,從而獲得狀態(tài)的根哈希,智能合約將其與雙方的根哈希進行對比,這樣可以判定誰的結果是正確的。
為了懲罰作惡者,獲勝一方將獲得對方的抵押資產。這可以防止作惡的行為。此外,在鏈上運行單個RISC-V指令相對輕松,因為查出第一次不一致的指令相對容易。鏈上的工作主要是保持哈希的更新,不用關心dApp的邏輯,也用不存儲dApp的操作。同時,由于作惡存在成本,且也能被發(fā)現(xiàn),這導致作惡行為會比較少見。
Cartesi與TrueBit
之前有個項目叫TrueBit,它也有類似的思考架構,將密集計算移至鏈下,并在鏈上進行驗證來解決爭議。雖然基本的思考架構類似,Cartesi跟TrueBit的具體解決方案存在不同。
TrueBit基于WebAssembly做的虛擬機,而Cartesi是基于RISC-V的指令集架構。前者是應用級別,后者是操作系統(tǒng)級別。WebAssembly會帶來外部性,也就是不確定性,因為它用于應用間的協(xié)同、應用和用戶或節(jié)點的操作系統(tǒng)的交互。而RISC-V更加底層,具有確定性。
此外,TrueBit更專注于智能合約計算能力的擴展,對運行環(huán)境更有約束,而真實場景的應用存在交互,Cartesi選擇支持Linux的運行環(huán)境,RISC-V能提供更好的服務。
此外,在鏈下計算的動力方面,TrubeBit跟Cartesi存在很大差異。Cartesi的鏈下計算是依賴于智能合約背書,所有參與者都有責任執(zhí)行鏈下計算,一旦出現(xiàn)爭議,需要提交到鏈上解決。而TrueBit需要通過激勵層的設計來解決糾紛。在TrueBit上,智能合約將計算的需求提交到由不可信方構成的市場,由其中的參與者執(zhí)行鏈下計算并返回結果。為了保持成員的參與度,帶有錯誤結果的計算誘餌會被投放到激勵市場,這是相對低效的激勵。
此外,Cartesi也考慮了應用中可能出現(xiàn)的大存儲問題,通過Cartesi虛擬機,將代碼和數據狀態(tài)的哈希值提交到鏈上,計算只需在相關參與者節(jié)點中執(zhí)行即可,這也使得Cartesi能夠做到鏈下計算的跨鏈。這些是Truebit沒有設計的。
Cartesi對于dApp開發(fā)者意味著什么?
Cartesi將密集計算從底層區(qū)塊鏈中解放出來,將復雜的邏輯放到鏈下進行可重現(xiàn)計算。Cartesi虛擬機是確定性的計算模型,可以托管現(xiàn)代操作系統(tǒng)。Cartesi虛擬機上的標準工具鏈和操作系統(tǒng)是可用的。這為開發(fā)者提供了很多方便。
對于dApp 開發(fā)者來說,Cartesi意味著新的dApp開發(fā)范式。如果Cartesi能順利落地,dApp的開發(fā)者們可以專注于業(yè)務本身的構建,而不用擔心是否懂區(qū)塊鏈的底層,因為dApp的開發(fā)者可以使用熟悉的編程語言和工具來開發(fā)dApp,這大大減輕了dApp開發(fā)者的研發(fā)成本。
與此同時,Cartesi節(jié)點為dApp開發(fā)者提供了大規(guī)模可信計算,開發(fā)者們可以使用可重現(xiàn)計算的Cartesi虛擬機。可信計算通過原語集成到公鏈智能合約,原語能夠提供靈活性和復雜邏輯的計算能力。在Cartesi虛擬機計算中如出現(xiàn)有爭議的結果,可以通過主鏈進行仲裁。
此外,由于大規(guī)模的鏈下計算,基于Cartesi構建的dApp可以實現(xiàn)在多個鏈上運行。
總言之,Cartesi對于dApp 開發(fā)者來說很友好,這將解鎖去中心化應用的潛力,開發(fā)者能在熟悉環(huán)境下利用dApp的優(yōu)勢,構建出跟之前完全不同的應用。
結語
要想dApp達成App的用戶體驗,公鏈需要存儲層和計算層的幫忙。關于存儲層的項目,藍狐筆記之前也提到過,這里不做贅述。而計算層方面也是值得關注的部分。
Cartesi的目標旨在成為區(qū)塊鏈的計算層,為公鏈和dApp開發(fā)者提供去中心化的通用計算平臺。
對于公鏈來說,Cartesi可以幫助其專注于底層鏈的安全和價值存儲,幫助其構建更大的開發(fā)者生態(tài);而對于dApp 開發(fā)者來說,基于Cartesi開發(fā)dApp,可以使用熟悉的編程語言和工具來進行開發(fā),既能享受到dApp的優(yōu)勢,同時還能有App級別的用戶體驗。
隨著區(qū)塊鏈行業(yè)的深入發(fā)展,整個行業(yè)的生態(tài)拼圖將會日趨完善,不僅有公鏈、dApp,也有為公鏈和dApp服務的存儲層、計算層等。這些拼圖相互補充和協(xié)作,最終推動區(qū)塊鏈行業(yè)發(fā)生質變,從而將區(qū)塊鏈的影響力提升到新的高度。
責任編輯;zl
評論
查看更多