掃碼下載
BTC $76,463.92 -1.21%
ETH $2,288.67 -0.82%
BNB $624.49 -0.42%
XRP $1.38 -1.29%
SOL $83.88 -1.09%
TRX $0.3226 -0.73%
DOGE $0.0998 +0.87%
ADA $0.2468 -0.44%
BCH $452.99 +0.47%
LINK $9.24 -0.82%
HYPE $39.97 -3.94%
AAVE $96.28 -1.16%
SUI $0.9246 -1.06%
XLM $0.1620 -2.15%
ZEC $336.36 -5.02%
BTC $76,463.92 -1.21%
ETH $2,288.67 -0.82%
BNB $624.49 -0.42%
XRP $1.38 -1.29%
SOL $83.88 -1.09%
TRX $0.3226 -0.73%
DOGE $0.0998 +0.87%
ADA $0.2468 -0.44%
BCH $452.99 +0.47%
LINK $9.24 -0.82%
HYPE $39.97 -3.94%
AAVE $96.28 -1.16%
SUI $0.9246 -1.06%
XLM $0.1620 -2.15%
ZEC $336.36 -5.02%

Celestia 會成為DA模塊的頭牌嗎?

Summary: 我們回顧一個老生常談的問題:目前來說公鏈擴容的瓶頸是什麼?無論你的觀點是什麼,都不得不考慮數據可用性的問題。
 CryptoYCTech
2022-02-18 20:47:16
收藏
我們回顧一個老生常談的問題:目前來說公鏈擴容的瓶頸是什麼?無論你的觀點是什麼,都不得不考慮數據可用性的問題。

來源: CryptoYC Tech

Celestia是什麼

Celestia前身叫LazyLedger。是一個專精於"數據可用性"的基礎設施。當然它自己本身就是一條鏈,但是卻不涉及狀態計算的問題。所以,這裡就衍生出一系列先驗問題,例如:數據可用性的重要性以及和擴容的關係是什麼。

這裡就需要看下傳統區塊鏈的數據問題。以ETH為例,現在絕大多數的節點都是輕節點,本身不負責出塊,而是驗證區塊。但是,由於驗證的只是區塊頭,所以存在一種可能,就是區塊生產者發布一個正確有效的區塊頭,但是沒有包含/掩蓋了交易數據時,就會出現數據可用性的問題,輕節點很容易被欺騙或者接受無效區塊。

同時,由於全節點無法為輕節點生成數據可用性證明,以及無效區塊的欺詐證明,所以輕節點想要驗證區塊數據本身,就需要自己來進行。或者,假設絕大多數數據是誠實可信的。

明顯看出,如果為了安全,絕大多數節點必須下載全部交易數據並驗證數據可用性,這就進而引發了擴容問題。

說到這裡,我們不難發現數據可用性的兩個瓶頸:

  • 可用性證明:告訴其他節點,這個區塊的數據都是真實可用的

  • 欺詐證明:區塊是否是有效的

這就是Celestia想要解決的兩個問題。

怎麼做

那麼,Celestia是如何解決這兩個問題呢?很簡單:放棄鏈上執行,放棄鏈上狀態轉換,只通過二維 Reed-Solomon糾刪碼以及專門的命名空間默克爾樹結構來確保數據的可用性,而執行的部分則交給終端用戶自己執行。所以,我們簡單看下這兩個東西。

二維 R-S糾刪碼

這個東西概括來說,就是傳遞某個信息,不止是傳遞信息本身,還會加入一些可以容錯的冗餘,舉個簡單的例子:

  • 例如我想要給別人傳遞一個信息 1 2 3,但是我知道在信息傳遞過程中可能出現信息部分丟失或錯誤的情況,所以我為了讓別人能最大概率的正確確認我傳遞的信息,會選擇傳遞 one two three。

  • 假如別人接受到的信息是on, to, thee,只要接受者知道內容格式是什麼,這個例子裡是數字,那就可以大概率確認原本的數據是1 2 3。

當然,這裡面涉及到一個閾值問題,假設信息一共有n個片段,只要k個片段能夠正確傳輸,則完整信息就可以被還原,即成功傳遞的信息比例>k/n就可以。如果按照標準的Reed-Solomon糾刪碼,這個閾值就是50%。

具體到celestia,他們提出了一個新的採樣方式:二維採樣。將信息切分成橫縱數量一樣的二維分片。在驗證欺詐證明(數據可用性證明)時,輕節點只需要下載橫向或縱向的數據即可,這樣需要下載的數據量直接成 √N(假設數據分成n*n片)。

當然,因為沒有下載完整的數據,所以輕節點還需要下載每一行和每一列的默克爾樹根作為區塊頭的一部分進行驗證,以保證數據最大的可用性。這樣,整個celestia網絡就變成了一個基於P2P的種子下載網絡。用很少的數據,就可以大概率確認數據的可用性。

命名空間默克爾樹

我們都知道以太坊的狀態更新是全局同步的,每次狀態轉換會更新所有地址的狀態,舉個不恰當的例子:假設我在以太坊上更新了www.cryptoyc.com的數據,節點在更新狀態的時候不止是更新驗證cryptoyc的數據,還會把不相干的數據(例如www.123.com的狀態)也會更新和驗證顯然,這樣是不合理的。

所以,Celestia在存儲數據的時候用的是一種namespace merkle tree,為的是終端節點在執行應用時只用下載自己應用相關的數據,而不是和以太坊一樣需要下載全部區塊數據。所以通過這種結構,對應功能的節點可以將只包含終端應用需要的數據狀態返回給終端節點。

有關這個默克爾樹的詳細結構和組成規則以後有興趣的時候再說。概括來說,該結構是由命名空間hash(nsHash,以namespace identifer為前綴的warpper hash)為基本數據,根節點包含了所有子節點的相關命名數據(相關這兩個字很重要)。具體存的數據是json格式。而nsHash是由minNs, MaxNs, hash(x)三個元素組成。

  • minNs: 其根節點所屬的子節點中的最小namespace identifier。

  • maxNs: 其根節點所屬的子節點中的最大namespace identifier。

  • hash(x):就是子節點的hash值,和普通區塊的類似。

整個結構可以用這個例圖來表示:

image

白皮書:https://arxiv.org/pdf/1905.09274.pdf

整個流程就和AR的smartwave很相似:鏈負責存儲數據+共識,執行交給終端。不限開發語言,也沒有執行瓶頸,同時,支持節點在下載數據的時候只下載自己應用相關的數據,而不用將整個區塊數據都下載下來,提高效率。

但是,二者的不同之處在於,celestia將存儲和共識的角色再次分離,所以celestia網絡裡有三種角色:Consensus nodes, Storage nodes, Client nodes。

角色分工及基本流程

為了更好的理解Celestia角色分工和基本運作流程。我們需要從它想達到的目的來講。

  • 首先,Celestia希望解耦數據可用性和狀態轉換/計算。為什麼不說共識,是因為共識本身確認的就是數據可用性和真實性,所以很難和數據可用性再分開,否則也不算啥區塊鏈了。

  • 其次,只下載自己要的信息用來計算。Celestia希望執行計算的節點在執行計算的時候只檢索自己所需要的信息,而不用下載整個區塊鏈的信息去做狀態轉換。

  • 數據完整性。能夠發現數據被銷毀會隱藏。

  • 應用狀態的主權獨立。和第二點類似,執行節點不需要執行其他不相關應用的信息,除非是該應用的依賴應用(例如一個應用需要調用另一個支付功能的應用)。

知道了它的目的,我們就可以來看它的分工

  • 為了保證區塊鏈的共識,所以有專門的共識節點

  • 為了數據可用性,有專門的存儲節點

  • 有了上面兩個,執行的任務就交給了終端用戶,這些都算執行節點。

這些節點以一種點對點的網狀拓撲結構構成整個celestia網絡。需要注意的就是執行節點必須至少連接一個存儲節點,以用來執行自己應用的狀態轉換。

這裡需要提一下驗證規則。通常來說分為兩種:

  • 簡單驗證規則:通常區塊鏈的驗證方法,下載所有信息M,驗證Root(M) = mRoot。一旦驗證為true,就分發M和區塊頭h,並且需要存儲該M數據至少一定時間t'(網絡最大延遲),確保其他節點可以接受到信息(包括其他驗證節點和存儲節點)

  • 概率驗證規則:這就是celestia主推的2D Reed-Solomon。基本原理在上面已經說過。這裡再舉個官方例子來看下效果。

    如果糾刪碼閾值是1/4,一個塊被分為4096片(64*64),則每個節點只需要下載15個樣本就可以有99%的概率確認數據是可用的(具體驗證有另一篇純數學論文來搞,我還沒看)。意思是每個節點只用下載0.4%的原始數據片段就可以大概率推斷數據是否可用。

    當然,概率驗證規則要求所有節點下載的數據加起來是必須超過這個糾刪碼閾值的。例如閾值是50%的話,所有節點下載的數據加起來必須達到原始數據片段的50%以上(非重複),該數據可用性才能被確認,並最終參與出塊。

好了,基本的結構了解完畢,我們就需要來看下應用怎麼跑在上面了。

應用節點如何工作

首先,我們上面講過,執行應用是由終端客戶來執行的。他們在這個網絡中不止是用戶,同時也是執行節點。通過傳遞參數,即對應的hash和nid(namespace id,上面特殊的數據結構,用來獲取自己應用namespace相關的信息,而無需獲取其他不相干的信息),來獲取自己應用執行狀態轉換所需要的全部信息,在鏈下執行後將數據上傳到鏈上,以方便其他執行節點獲取執行。

當然,因為celestia不負責驗證執行結果,所以可能出現違反應用邏輯的交易,所以,這裡會加入一個新的函數transition,應用可以調用這個函數,返回一個狀態,以這個狀態來確認交易的合法性。

image

如果交易違法,則整個交易會回滾到原始的state。只有合法的交易才會返回state'。

當然,這裡就衍生出一個問題:應用升級。這點其實和smartwave的處理是一樣的: 如果一個交易使用了和現有應用不同的邏輯,導致交易沒有進行。這時候該節點執行的應用就會被算成一個新的應用,所以並不會影響其他使用原來應用的人。也就是說,不需要硬分叉,應用自己想要升級只要改變本地執行邏輯並且上傳註冊成新應用即可。不需要硬分叉也就不會影響到其他應用。

還有一個問題我們也需要解決:跨應用調用怎麼辦?

跨應用調用

想像一下,如果我們使用一個域名註冊的合約,我們付費,然後購買域名。由於市面上的支付工具合約已經很多了,所以我們使用的域名註冊合約會調用第三方的支付合約來一起完成這個業務流程。

這時候,按照Celestia的方式,問題就出現了:由於應用的獨立主權,各個應用的狀態不會互相干涉,而我們的域名註冊應用明顯會干涉到其他應用,這時候應該怎麼辦呢?

  • 前置條件調用:在完成A合約之前,必須先完成B合約(相當於修改了B合約狀態)才行。這個時候B合約可以設置專門的函數允許其他合約調用。上面的域名註冊合約就屬於這一種。對於這種情況,celestia規定在執行A合約的時候不止需要下載A需要的數據,同時還要下載B的數據,執行完B後再執行A。因為A的執行需要依賴B的狀態。而執行B合約的節點則不需要下載A的數據,因為B的執行不依賴於A。

  • 後置條件調用:完成A合約之後,需要修改B合約。例如郵件訂閱服務,訂閱郵件後,需要其他合約來按照訂閱服務的狀態發送郵件。這個時候就需要B合約在執行的時候下載A合約,執行A合約後再執行B合約。這種調用在celestia的設想裡應該很少才對,因為直接修改另一個應用的狀態違背了獨立主權的初衷。這裡就不可避免的需要下載全部數據了。

小結

至此,celestia的主體已介紹完畢。我們可以發現, 和smartwave的高度相似,或者說這也是現在除了常見區塊鏈結構的另一種結構,完全可組合結構。自己只保證數據可用性,不負責執行,也不驗證執行,可以和U盤一樣,即插即用,哪裡需要去哪裡(和中繼鏈還不一樣,中繼鏈還負責狀態轉換)。

天生可跨鏈,甚至兼容各類跨鏈原子交互(因為特殊的默克爾樹本身存的就是json信息,對內容無要求)。比AR強的一點在於驗證有效性的數據量上要少很多,所以還是很有前途的。目前不確定的一點在於代幣經濟。不知道代幣經濟會怎麼樣。

當然,至於celestia+Optimint, Arweave+ KYVE這兩者誰能笑到最後,還真不好說,畢竟這兩者都是筆者非常喜歡的項目,突出一個Nice

最後的最後,我們來看下對比圖,看下celestia的提升有多大。

image

白皮書:https://arxiv.org/pdf/1905.09274.pdf

果然Nice!

關聯標籤
warnning 風險提示
app_icon
ChainCatcher 與創新者共建Web3世界