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