dApp達到App的體驗,可能嗎?

買賣虛擬貨幣
在現實商業的應用場景,所涉及的計算是巨大,甚至有數萬億的邏輯步驟計算,要處理大量的資料,這在區塊鏈上幾乎是不可能完成的。區塊鏈的擴充套件問題是行業關注的焦點之一。因為,只有解決了擴充套件性問題,才能為區塊鏈走向主流鋪平道路。只有解決了擴充套件性問題,才能讓dApp的使用者體驗達到App的使用者體驗水平,才能推動普通使用者進來使用。區塊鏈是一個去中介化的無須許可網路,任何人都可以參與,這意味著區塊鏈要達成共識,共識帶來安全,但同時也帶來了極高的成本:交易吞吐量小,交易處理時間長、費用高。為了解決這些問題,目前有一層擴充套件和二層擴充套件的方案。一層(layer1)是橫向擴充套件,目前主要有分片、共識機制的最佳化(如DPoS)等。二層(layer2)是縱向擴充套件,包括Plasma、狀態通道、側鏈等方式。迄今為止,有一些進展,但還不足以讓擴充套件性發生根本性的改變。尤其是考慮到它們還無法滿足dApp的擴充套件性需求,如遊戲、社交網路等。這些dApp都無法真正一展拳腳,尤其是涉及到大規模計算時。那麼,有沒有方案能夠解決這些問題?能夠讓dApp達成App的體驗?能夠讓普通使用者真正使用上dApp,享受到dApp帶來的好處?藍狐筆記最近關注到Cartesi專案的解決方案,讓人印象深刻。它在二層(layer 2)上的擴充套件方案有自己非常獨特的切入點,值得dApp開發者和整個區塊鏈行業的關注。
Cartesi試圖成為區塊鏈的計算層區塊鏈主鏈上計算和儲存的成本非常高,像遊戲、社交、影片等領域的應用都無法在主鏈上直接執行。大規模的計算必須在鏈下進行。那麼,如果不是基於區塊鏈執行應用,跟傳統的App有什麼區別?這裡的解決思路是,從實際場景的需求本質出發,而不是在技術上進行死磕,陷入死衚衕。我們沒有辦法就所有事情都達成全域性共識,而實際上,我們也沒有必要就所有事情達成全域性共識。大多數情況下,我們只需達成區域性共識。只有極其重要的資料才需要達成全域性共識。大多數事情,往往都是小部分參與者之間才真正感興趣的,只要這小部分參與者之間達成共識就可以了。比如,我們去超市買一瓶水,我們沒有必要跟律師打電話,也沒有必要讓地球上的所有人都知道你買了一瓶水。只有在發生糾紛時才需要進行仲裁。基於這種思路,產生了layer 2的解決方案,而Cartesi就是其中的一種解決方案。Cartesi不是公鏈,它是去中心化的通用計算平臺,試圖成為區塊鏈的計算層,旨在為公鏈和dApp開發者提供通用計算服務。
Cartesi作為區塊鏈的計算層,它將底層鏈智慧合約執行所需的大量計算接手過來,讓底層鏈發揮其安全特性,專注於價值儲存和轉移,專注於結算結果的儲存;與此同時,dApp開發者基於Cartesi,可以使用熟悉的程式語言、工具、庫、軟體以及服務來開發dApp。dApp的大多數複雜計算邏輯都透過鏈下來解決,開發者只須專注於業務邏輯的構建,但與此同時,能夠開發出類似於App體驗的dApp應用。有了其他layer2,為什麼還需要CartesiLayer2分擔了layer1的擴充套件性壓力。layer2的存在不僅是為了解決layer1中全域性共識資源高昂成本的問題,更是為了順應這樣的一種事實:並非所有的事情都需要達成全域性共識。只有跟該共識相關的群體才需要達成一種共識。部分參與者的協作可以在鏈下進行,但為了防止出現糾紛,一般情況下,layer2的參與者需要在鏈下互動時存入押金,如果是以太坊鏈,一般會存入ETH。透過質押資產,所有參與者在鏈下進行互動,然後將其互動操作的重要結果提交到主鏈,主鏈完成全域性狀態的更新。如果這個過程中,有任何參與者產生惡意行為,其他相關方可以向主鏈發起申訴以尋求解決。惡意行為一旦得到確認,惡意行為者的抵押資產可能會被扣除。Layer 2的模式將layer1不僅看作為價值儲存和轉移的地方,也視作為具有最高安全性的共識仲裁法院。而layer 2是各種區域性參與者之間進行互動的地方,大家都受制於獎懲機制,受制於具有公信力的layer1的制約。
Cartesi也有類似的思路,只須參與方才需要執行大量的鏈下計算,計算結果提交到鏈上合約進行驗證,確保執行結果的可信。雖然基本上layer 2都是這種思路,但Cartesi也針對layer 2的一些不足進行了改進。比如layer 2方案要求主鏈可以解決可能出現的糾紛。有時候會出現糟糕的情況,比如需要在通道開啟時,把大量計算傳到主鏈,這些交易的關閉機制會限制最大計算量。Cartesi則允許Plasma或狀態通道利用Cartesi的計算能力,也就是將計算透過Cartesi來解決,而不是轉移到主鏈。在這些layer 2的解決方案中,如雙方都需要密集計算才能完成爭議處理,而主鏈很難解決這樣的大量計算問題。此外,Cartesi跟其他layer2解決方案不同,它不一定要求dApp應用的各相關方同時線上。這就是Cartesi相對於其他layer2方案的不同之處,從本質上來說,它不僅是layer 2的解決方案,更是去中心化的通用計算平臺,連線了公鏈和dApp的開發者,為雙方提供計算服務。Cartesi如何運作?
從整體的思路上,Cartesi跟多數layer2方案有相似之處,不過在具體的解決方案上,Cartesi有它的獨特之處。· Linux的開發環境Cartesi推動了一種dApp的開發模式,它將dApp的開發環境提到了新的高度:轉向了Linux開發環境。Cartesi虛擬機器旨在為dApp的大規模執行提供支援,所以,它要考慮解決當前智慧合約虛擬機器的問題。現有的智慧合約虛擬機器運算相對簡單,比如執行賬戶餘額的運算、計算雜湊值或呼叫合約等。而現實的商業應用需要能響應裝置、分配內容、跟其他程式複雜互動、海量的計算執行等。有了作業系統的支援,這些應用可以有序執行。指令集體系結構和作業系統相互支援,硬體可以為作業系統提供硬體功能,作業系統透過這些功能來協同所有程式的執行。當前的智慧合約虛擬機器還無法實現類似功能,它們並沒有作業系統的支援。
為了解決這個問題,Cartesi引入了開源的RISC-V指令集體系結構,Linux核心已經移植到RISC-V上,RISC-V有成熟的編譯器。也就是說,Cartesi準備透過這種方式,將鏈外的計算能力引入鏈上。同時,Cartesi節點還可以讓dApp開發者在本地執行程式碼。在本地執行程式碼和在Cartesi虛擬機器系統內執行程式碼,都會在Linux作業系統下執行。Linux可以提供複雜計算所需要的完整生態系統。· Cartesi虛擬機器基於Cartesi上開發的dApp包括鏈上和鏈下模組。其中鏈下模組在Cartesi節點內執行。當然,也可以在本地執行程式碼,但本地計算不可重現。要實現重現,必須執行在Cartesi虛擬機器中,在Cartesi節點中執行程式碼。那麼重點來了,這是Cartesi專案中需要關注的重點之一,它就是Cartesi虛擬機器。Cartesi虛擬機器有兩點值得關注:一是完全獨立。二是計算可重現。它的獨立性意味著可以實現確定性,無須擔心外部輸入以非確定性方式來改變機器的狀態(鍵盤、時鐘中斷等)。它的計算可重現意味著其具有可信的特點。Cartesi虛擬機器從相同的初始狀態開始執行經過相同的處理器週期,最終會達完全相同的狀態。
也就是說,Cartesi中的可重現計算執行在確定性的RISC-V虛擬機器上。它受Cartesi節點控制,且自包含了Linux系統,節點透過一些確定的主機介面與Cartesi虛擬機器進行互動。對於Cartesi的dApp開發者來說,他們可以指定鏈下計算採用可重現的方式,Cartesi的節點會根據指定執行。dApp開發者可以請求節點提交計算結果,並在鏈上進行驗證。在這種情況下,主鏈處理爭議結果無須佔用太多資源。同時,Cartesi虛擬機器需要考慮區塊鏈的驗證要求。為了實現可信,整體架構的實施必須容易審計和開放。這也是Cartesi採用RISC-V的重要原因。RISC-V有很多社羣開發者支援。他們搭建了軟體的基礎底層,如Linux作業系統的埠和GNU工具鏈。Cartesi虛擬機器以確定性方式將其整個狀態對映到實體記憶體。Cartesi虛擬機器的鏈下執行除了完成計算執行之外,還支援解決有關計算結果的爭議。為了提供這些服務,Cartesi虛擬機器的鏈下執行有可程式設計的介面。

Cartesi虛擬機器也是透明的,任何人透過任一時刻的虛擬機器狀態,都可以預測下一個處理器週期指令完成後的狀態。Cartesi的這種設計機制保證了可信計算。獲得Cartesi虛擬機器初始狀態的不同各方在各自的Cartesi節點中執行Cartesi虛擬機器都會獲得完全一致的結果。Cartesi虛擬機器的狀態可以透過默克爾樹表達,也意味著可以透過鏈上實現仲裁。

其中鏈下Cartesi虛擬機器主要由記憶體和各種驅動器組成。其中,Linux核心被載入到記憶體中,其中有的驅動器會包含Linux檔案系統。驅動器被看作為Cartesi節點中的普通檔案,Cartesi虛擬機器將普通檔案當作裝置給Linux核心掛載,這些裝置被掛載後,對於Linux下執行的程式來說,就相當於能讀寫檔案和目錄的檔案系統。

透過默克爾樹的狀態雜湊,Cartesi虛擬機器將其狀態在鏈上呈現。狀態包括記憶體和驅動器、以及其他Cartesi虛擬機器執行所需的內容。透過默克爾樹的根雜湊,可以判定區域性的子狀態是否正確。

· 爭議的解決機制

當dApp的參與方相互之間產生糾紛時,怎麼辦?首先,挑戰方會存入抵押資產發起訴訟,如果被挑戰方想要進行自我辯護,也需要存入同樣價值的抵押資產。

然後雙方陳述過程,鏈上透過根雜湊狀態的對比,進行判決。智慧合約會查出雙方在執行Cartesi虛擬機器第一次產生不一致結果的指令。之後,智慧合約透過在鏈上執行此條RISC-V指令,從而獲得狀態的根雜湊,智慧合約將其與雙方的根雜湊進行對比,這樣可以判定誰的結果是正確的。

為了懲罰作惡者,獲勝一方將獲得對方的抵押資產。這可以防止作惡的行為。此外,在鏈上執行單個RISC-V指令相對輕鬆,因為查出第一次不一致的指令相對容易。鏈上的工作主要是保持雜湊的更新,不用關心dApp的邏輯,也用不儲存dApp的操作。同時,由於作惡存在成本,且也能被發現,這導致作惡行為會比較少見。

Cartesi與TrueBit

之前有個專案叫TrueBit,它也有類似的思考架構,將密集計算移至鏈下,並在鏈上進行驗證來解決爭議。雖然基本的思考架構類似,Cartesi跟TrueBit的具體解決方案存在不同。

TrueBit基於WebAssembly做的虛擬機器,而Cartesi是基於RISC-V的指令集架構。前者是應用級別,後者是作業系統級別。WebAssembly會帶來外部性,也就是不確定性,因為它用於應用間的協同、應用和使用者或節點的作業系統的互動。而RISC-V更加底層,具有確定性。

此外,TrueBit更專注於智慧合約計算能力的擴充套件,對執行環境更有約束,而真實場景的應用存在互動,Cartesi選擇支援Linux的執行環境,RISC-V能提供更好的服務。

此外,在鏈下計算的動力方面,TrubeBit跟Cartesi存在很大差異。Cartesi的鏈下計算是依賴於智慧合約背書,所有參與者都有責任執行鏈下計算,一旦出現爭議,需要提交到鏈上解決。而TrueBit需要透過激勵層的設計來解決糾紛。在TrueBit上,智慧合約將計算的需求提交到由不可信方構成的市場,由其中的參與者執行鏈下計算並返回結果。為了保持成員的參與度,帶有錯誤結果的計算誘餌會被投放到激勵市場,這是相對低效的激勵。

此外,Cartesi也考慮了應用中可能出現的大儲存問題,透過Cartesi虛擬機器,將程式碼和資料狀態的雜湊值提交到鏈上,計算只需在相關參與者節點中執行即可,這也使得Cartesi能夠做到鏈下計算的跨鏈。這些是Truebit沒有設計的。

Cartesi對於dApp開發者意味著什麼?

Cartesi將密集計算從底層區塊鏈中解放出來,將複雜的邏輯放到鏈下進行可重現計算。Cartesi虛擬機器是確定性的計算模型,可以託管現代作業系統。Cartesi虛擬機器上的標準工具鏈和作業系統是可用的。這為開發者提供了很多方便。

對於dApp 開發者來說,Cartesi意味著新的dApp開發正規化。如果Cartesi能順利落地,dApp的開發者們可以專注於業務本身的構建,而不用擔心是否懂區塊鏈的底層,因為dApp的開發者可以使用熟悉的程式語言和工具來開發dApp,這大大減輕了dApp開發者的研發成本。

與此同時,Cartesi節點為dApp開發者提供了大規模可信計算,開發者們可以使用可重現計算的Cartesi虛擬機器。可信計算透過原語整合到公鏈智慧合約,原語能夠提供靈活性和複雜邏輯的計算能力。在Cartesi虛擬機器計算中如出現有爭議的結果,可以透過主鏈進行仲裁。

此外,由於大規模的鏈下計算,基於Cartesi構建的dApp可以實現在多個鏈上執行。

總言之,Cartesi對於dApp 開發者來說很友好,這將解鎖去中心化應用的潛力,開發者能在熟悉環境下利用dApp的優勢,構建出跟之前完全不同的應用。

結語

要想dApp達成App的使用者體驗,公鏈需要儲存層和計算層的幫忙。關於儲存層的專案,藍狐筆記之前也提到過,這裡不做贅述。而計算層方面也是值得關注的部分。

Cartesi的目標旨在成為區塊鏈的計算層,為公鏈和dApp開發者提供去中心化的通用計算平臺。

對於公鏈來說,Cartesi可以幫助其專注於底層鏈的安全和價值儲存,幫助其構建更大的開發者生態;而對於dApp 開發者來說,基於Cartesi開發dApp,可以使用熟悉的程式語言和工具來進行開發,既能享受到dApp的優勢,同時還能有App級別的使用者體驗。

隨著區塊鏈行業的深入發展,整個行業的生態拼圖將會日趨完善,不僅有公鏈、dApp,也有為公鏈和dApp服務的儲存層、計算層等。這些拼圖相互補充和協作,最終推動區塊鏈行業發生質變,從而將區塊鏈的影響力提升到新的高度。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;