Ceramic核心技術概覽:動態存儲為什麼能更好地釋放數據價值?
作者:Wayne, Dongxuan, Linda
來源:BixinVentures
從石刻結繩到竹簡紙張,人類文明大部分時間都在解決數據的存儲媒介問題。之後,軟盤、硬盤、雲伺服器存儲等技術進一步解決了容量、安全、速度等效率問題。Filecoin,Arweave等去中心化存儲方案的興起,則帶來了為數據確權的機會------個人、組織、機構、企業,將真正擁有自己的數據,而不是被巨頭們壟斷,這是Web3精神的展現。
不過,當所有權得以確定,一個自然而然的問題得以顯現:所有者如何行使這份權利、如何獲取更大的價值?我們將這兩個問題歸結為"數據效用"問題。
作為一個用於可組合數據的去中心化存儲網絡,在"權利"進化為"效用"的里程上,Ceramic正在扮演關鍵角色。這是我們最近在持續關注、研究Ceramic網絡發展及其生態、應用建設的重要原因。
和幾個月前寂寂無聞相比,Ceramic正在展開眾多的開發者項目,並在Eth Denver、HackFS、DecentralHacks、DAO Global Hack等多場黑客松中都獲得了大量的開發者採用。根據Ceramic披露的數據,截至3月底,以Ceramic為底層建設的項目已經超過50余個,涉及NFT、DAO、Gamefi等多個領域。此外,3月初Ceramic還斬獲了由Multicoin和USV領投的3000萬美元投資。
關於Ceramic在數據可組合性方面的潛力,已經有不少文章可以參考,不再贅述,本文旨在從對動態數據優化、靈活的共識機制,網絡安全與隱私性等方面詳解Ceramic在提高數據效用上的技術可能性。同時,我們也將提供網絡節點、應用發展等方面的關鍵信息。在我們看來,Ceramic最關鍵的三個價值是建立了:
● 去中心化存儲水平擴展方案
● 社區驅動下的數據模型市場
● 開放的API網絡共享資源
一、動態數據存儲優化
去中心化存儲將數據存儲在節點而不是中心化伺服器中,這讓數據的使用權能更多被數據創造者而不是中心化的伺服器掌握。因為個人行為的不斷更新以及數據的連續使用和迭代,個人數據中存在大量動態數據(指在系統應用中隨時間變化而改變的數據),而IPFS、Sia,包括Arweave目前主要針對靜態數據(指不常調用或者更新的數據)進行存儲,對於動態數據處理能力欠佳且成本較高。
以IPFS為例,它通過為每一個用戶生成一個唯一的哈希值來實現基於內容的查找而不是基於地址的查找,當用戶需要檢索這個文件時,需要詢問IPFS誰有這個哈希就可以完成檢索。但使用哈希值標記數據有幾個顯而易見的問題:
- 每一次更新都會需要網絡驗證然後生成相關的哈希值,重複修改哈希值會提高花費的存儲時間;
- 在調用時核對哈希值不一定會比常見數據庫調用快------因為存在遠距離節點時,傳輸速度反而更慢;
- 將哈希值轉為數據之後很多時候還需要花費時間進行組合,這些問題對於靜態數據存儲和調用時的速度和價格影響不大,但是對於動態數據,重複進行這種操作不僅會影響存儲網絡的速度、容量等,還會產生較高的成本。
Ceramic通過"Streams控制機制"實現了動態數據存儲的優化,在降低存儲時間的同時也大大降低了存儲成本。這裡需要特別說明的是,此優化方案並非是脫離IPFS等去中心化存儲技術的獨立實現,而是建立在IPFS之上。
"Streams控制機制"是指,利用個人身份賬戶把個人某行為產生的數據即流(Stream)集合成數據流(Streams)進行數據控制的機制。
跟平時我們在使用共享文檔時經常能查看在某時某分的版本相似,每一個Stream都有自己固定的StreamID(類似做了一個共享文檔),而每一次動態數據進行修改,不會直接修改哈希值或者更新SteamID,而是更新日誌(Log),日誌是Ceramic中記錄了發生網絡中的Stream相關事件的參數,每一次修改代表一個特定版本,這樣對於常更新的數據只需要在更新內容後修改日誌值即可,不用重複生成哈希值,從而減少存儲消耗的時間。
Steams機制圖解
因為動態數據本身會隨著時間推移使用次數減少或者轉變為靜態數據,而且用戶本身也會生成靜態數據,所以,這些靜態數據或者更新次數少的動態數據也可以最終委託到IPFS或者Arweave等去中心化存儲或者AWS(亞馬遜雲)等傳統雲服務商上。
此外,正是由於"StreamID",數據的可組合性也變得更容易了。不同程序如果採用了不同的數據格式,那麼在調用時必然產生不兼容的效果,很多數據因此無法進行組合使用,而且調用時也存在調用權限不足的問題,比如在有時衡量個人信用時需要DAO中的貢獻數據和在Defi的借貸數據,即使有方法進行調用,也無法將數據直接做成信用數據。
而在Ceramic中應用程序經由API連接到 Ceramic 的去中心化數據網絡,存儲、修改和檢索數據。網絡上存在的所有數據都可以輕鬆地在其他應用程序中重複使用或重新利用了。
與其他去中心化存儲方案的結合
Ceramic為提高存儲速度設置了短期存儲提交的內置緩存機制,每當 Ceramic 節點對Stream執行寫入或查詢時,該Stream的所有提交首先從網絡同步並自動加載到該節點的內存緩存中。這導致最流行的Stream被複製得最多,從而提供了一定程度的數據持久性和可用性。但是為了保留磁碟空間和節點資源,內存緩存默認限制為 500 個Stream(但可以配置為任意數量,理論上數量較少會讓速度更快,而數量較多會讓使用率更高)。
一旦達到這個數字,最舊的Stream將從節點的緩存中被逐出,以便為較新的Stream騰出空間。
如果節點碰巧關閉或重啟,緩存將被清除。某些不會經常使用的動態數據或者沒有採用額外的數據持久性措施(比如存在本地硬碟或者放在雲端)的數據,如果沒有在其他節點之間進行足夠的複製將永遠丟失。
因此,僅靠緩存不是一個可靠的數據可用性來源。Ceramic的解決方案是,將節點綁定在IPFS、Arweave等一系列的存儲協議上面,避免數據丟失。
二、靈活的共識機制
上文提到了個人的操作產生的數據會形成Stream,Stream通過StreamID這種不可變的標識來確認用戶的身份和事件,從而讓同一Stream不斷更新的日誌都能匯總在一起。在這個過程中,一個重要的技術機制是"StreamType"。
數據的在更新過程中是通過每條Stream必備的StreamType進行共識操作的。Ceramic通過StreamType定義及處理Stream的數據結構到可以存儲在其提交中的內容、狀態轉換功能、身份驗證要求和衝突解決策略的所有內容。
值得注意的是,Ceramic的節點在數據存儲時,只會對跟自己相關的Streams進行驗證,不對無關Streams做處理或者驗證,這大大減輕了節點的任務量,為節點的高速運行和網絡的擴容打下了良好的基礎。
Ceramic本身有預設定好的StreamType供開發者選擇使用,開發者也可以選擇參考文檔自行編碼,目前StreamType主要有兩種不同的類型:
- Tile Document
Tile Documents經常被應用於身份元數據(個人資料、社交圖、聲譽評分、鏈接的社交帳戶等)、用戶生成的內容(博客文章、社交媒體等)、其他 StreamID 通過索引形成的數據集合和用戶表的數據庫替換、DID文件、可驗證聲明等多種方面。當節點使用Tile Document這種StreamType更新數據時,只有當存儲信息的用戶的DID簽名時才能進行有效更新,以此來保證了數據的安全性。
- CAIP-10 Link
CAIP-10 Link是一種將區塊鏈地址鏈接到DID的加密可驗證證明的StreamType。一個DID可以擁有無限數量的CAIP-10鏈接,這些鏈接將其綁定到許多不同區塊鏈網絡上的許多不同地址,這樣確保了同一個DID身份下能聚合所有相關數據。
除此之外,開發者還可以自定義StreamType並將其部署到自己的 Ceramic 節點上。
共識衝突
共識衝突指Stream中在更新時可能因為在不同的設備或者程序中出現同時更新的場景,出現誰先更新誰後更新的問題。
StreamType在數據更新時,對更新內容會調用json-patch方法,描述出json的文檔具體更改比如增、刪、改、查等,然後將生成的內容提交。提交構成Stream的單個 IPFS 記錄,也可能包含一個或多個提交,隨著不斷的提交,Ceramic也在不斷更新,在更新結束之後對StreamState進行更新。
在提交過程中,Stream控制器(Stream Controler)允許通過創建新的簽名提交來對Stream執行更新。在這時,同一Stream的兩個衝突日誌可能會出現。比如一個用戶在兩個鏈遊平台中進行遊戲,其中一個遊戲中刷怪戰鬥勝利和另一個遊戲中人物升級同時發生,或者一個用戶在手機和電腦端這種不同設備上同時操作時就會產生Streams驗證的衝突。
大多數 StreamTypes 依靠 "最早錨定者贏"(Earliest Anchor Wins) 策略來解決Stream日誌之間的衝突。節點會定期將其中的StreamID等更錨定到區塊鏈(目前是以太坊)上。這種不可變的發布證明用於獲取更新發生時間的去信任時間戳。而Stream的日誌衝突解決方案是,較早錨定的分支獲勝。如果一個分支已錨定而另一個未錨定,則首選已錨定的分支。
目前Ceramic團隊每天對節點定期錨定兩次,在未錨定時,可採用"更新最長鏈"(Longest update chain)的共識方法驗證,衝突時哪個日誌更長保留哪一個。
這樣可確保能留下具有最多更新的最活躍歷史記錄。如果存在具有相同長度的衝突未錨定分支,則系統會任意地選擇一個作為獲勝日誌,以確保所有節點在同一日誌上達成一致,這可能在罕見情況下,在幾秒鐘之內進行寫入操作發生衝突時會有數據丟失情況出現。這說明Ceramic目前不太適合依賴於允許多個最終用戶同時更新單個Stream的應用程序。
據官方披露的文件記載:只要更新間隔超過大約30秒,就應該有足夠的時間在整個Ceramic網絡中共享更新並防止發生此類衝突。
未來StreamTypes將能夠適合處理同時更新的不同共識機制,比如現在Ceramic正在研究CRDT技術來實現不同共識機制的處理與衝突的解決,所以衝突問題很可能之後會得到解決。
三、安全性、隱私性設計
Ceramic Protocol不僅規定了Ceramic網絡的"Streams控制機制",也在安全性、隱私性方面進行了專門設計。
- 安全性
通過加密簽名、發布證明(區塊鏈錨定)和哈希鏈接數據(將數據最終以哈希值存儲)的結構來構成協議的安全屬性,這些屬性一起允許構建可驗證的數據結構。除此之外,Ceramic 還依賴 libp2p(IPFS堆棧中一種點對點的通訊方法)來傳播有關Streams更新的信息。從而方便數據的驗證以及網絡中gossip查找。
Ceramic節點的主要安全考慮是Stream的任何新提示都可能是該Stream的虛假或無效提示,因此需要進行驗證。Ceramic在Dos attack、False log attack、Caip10Link clock synchronization等安全問題上都有自己的解決方案和驗證方式。
Dos attack:是指惡意節點可以通過發送大量消息向網絡中發送垃圾郵件,Ceramic將通過使用自動聲譽系統來限制單個節點可以發送的消息數量和系統會斷開與垃圾郵件節點的連接兩種方法解決此問題。不過目前的Ceramic中尚未使用聲譽系統,未來會逐步實現。
False log attack:惡意節點可以通過發送錯誤的提交日誌來向固定特定Stream的節點發送垃圾郵件。Ceramic採用的第一種方法是通過節點停止接受來自已證明不可靠的節點的提示來拒收垃圾郵件。第二種方法是構建一個包含一個遞歸零知識證明 StreamType來證明日誌確實與給定的 StreamID正確關聯,而不是不可靠節點隨機發送的。
Caip10Link clock synchronization:指的是CAIP 10 Link的多次重複綁定地址,或者把地址以指向之前鏈接到的任何DID。面對這種問題除了通過本地系統時間避免重複以外,Ceramic還提出一種使用隨機數或者指針的解決方法。
儘管上述一些方法還是計劃的一部分,但是可以看到Ceramic對虛假數據是有所準備的。
- 隱私性
因為API是開放的,數據調用時可能存在隱私直接被調用的情況,為了規避這種情況,Ceramic對數據進行Confidential streams和Private streams兩種Stream分類,前者是對Stream的每次更新的內容都將通過對稱密鑰進行加密。
每當Ceramic節點同步Streams時,它只有在具有該Stream的對稱密鑰時才能讀取Stream內容。Stream的元數據,例如哪個DID簽署了更新、以什麼順序以及何時錨定,仍然是公開的。但Private Streams採用Textile ThreadsDB方法只允許某些節點讀取元數據並使用Stream,但看不到具體內容,而其他節點根本看不到Stream中的任何內容。
Ceramic元數據舉例來源
通過安全性和隱私性的設計,Ceramic在共享網絡資源的前提下,也對網絡中數據的使用進行了規範,對於用戶未許可的數據調用,程序只能調取API中的元數據,並無法直接得到用戶全部數據,從而保障了用戶的數據權益,提高了數據的安全性。
四、關鍵價值
● 去中心化存儲水平擴展方案
Ceramic底層是可擴展的去中心化數據網絡,它提供著最基礎的數據存儲功能。Ceramic網絡由一組無需許可的節點組成,這些節點協同工作,在數據更新時,對跟自己有關的Streams進行快速驗證。
這種架構在Ceramic的共識機制下允許系統可以近乎無限水平擴展。根據官方例子:賬戶1 - 1,000,000在一組 Ceramic 節點上複製,而賬戶1,000,001 - 2,000,000在另一組節點上複製。前100萬個賬戶的Streams一般不會影響後100萬個賬戶的節點驗證過程,除非他們中的賬戶牽扯到其他節點的操作或者數據。
所以從理論上講,如果需要,網絡可以一直分片到每個單獨的用戶,而不會破壞可組合性。同時為了確保用戶分片之間的狀態可驗證性和可組合性。Ceramic節點負責將包含StreamID和Commit信息的錨點做成默克爾樹,這種聚合了所有用戶交易的默克爾樹的默克爾根會被上傳到選中的錨定區塊鏈上去,從而允許任何帳戶隨時驗證其他任何人的Streams的完整性。
同時Ceramic積極在鏈上發展,目前Ceramic協議已經支持七條公鏈的賬戶及信息等。
● 社區驅動的數據模型市場
Ceramic的數據模型市場更具體地說是不同的數據組件市場。一個人的姓名,住址,電話組合起來是一種數據模型,如果你希望你的數據用於收快遞,你需要使用這種數據模型,而Ceramic把這做成了組件的形式,需要使用時直接調用即可。Ceramic的數據模型市場由3Boxlab團隊與社區共建,但主要由社區驅動,用於解決跨應用程序數據的可組合性。
Ceramic允許任何開發人員輕鬆地與生態系統中的其他開發人員定義、共享和重用他們的模型。截止2022年4月6日,目前社區共有7位貢獻者貢獻了7種數據模型。
在Github上的Data Model 來源:Github
因為採用了相同的底層數據模型,應用程序能夠使用格式相同的數據進行本地互操作。這讓在 Ceramic上構建應用程序就像瀏覽數據模型市場,只需要將選中的數據模型插入應用程序,它們就會自動訪問存儲在這些模型中的網絡上的所有數據。開發者不需要擔心自己孤立的用戶和數據難以啟動應用程序,大大提高了開發效率。
● 開放的API網絡共享資源
API調用收費是一種典型的商業模式,但Ceramic的API目前是向開發人員免費提供的,而且其API是標準化和通用的,開發人員可以在存儲網絡上通過API得到共享資源。
用戶在使用過某程序後創造的數據在需要調取時是直接通過該應用的API得到的,Ceramic中很多應用都使用API來實現數據聚合功能,用戶在應用上的的行為操作會綁定相關的API,比如綁定Twitter賬戶之後,用戶即可調用自己Twitter相關信息。Ceramic可以通過調用API,一次性生成用戶所有的數據,得到真實且全面的用戶數據。
API示例 來源
這三大服務讓Ceramic的去中心化存儲網絡更加的開放與共享,其中數據在其中無論是通過API還是通過數據模型,都能實現強大的數據可組合性,提高了數據價值,也增加了數據應用場景,為存儲其上數據帶來更多效用。
五、節點
Ceramic節點運營商負責托管Ceramic 網絡。 Ceramic客戶端需要連接到節點才能訪問網絡,所以應用程序開發人員需要通過啟動自己的節點或將其客戶端連接到社區成員托管的節點之一來開始構建。
目前社區成員建設了三個節點專門用於開發者開發和測試,但是因為節點會定期進行清理數據,所以開發者如果想要獲得穩定、安全的存儲環境的話,還是需要建立自己的主網節點。目前Ceramic的大部分節點都是由開發者自建並獨立運行的,GeoWeb、MetaGame、Boardroom等程序都已經通過自建節點獲得了網絡使用權。在程序建立節點的過程中,Ceramic網絡本身也得到了擴展。
由Ceramic社區運行的臨時節點
雖然使用Ceramic不付費,但是在綁定底層的服務商時開發者卻需要進行付費。市場上的相關存儲應用比如IPFS、Arweave或者Aleph都是通過代幣獎勵節點的運行者,而Ceramic暫時沒有代幣激勵方案(社群中多次提到可能會有代幣激勵)但卻有尋求商業節點的想法,目前具體方案尚未推出,這也導致目前Ceramic存在開發者激勵不足的問題。
六、應用舉例
Ceramic原生產品,由Ceramic原團隊開發及運營,是一種多平台身份協議,它利用Ceramic的DID底層(Tile Document等StreamType)使用去中心化的替代方案代替集中式用戶表形式。 IDX 允許用戶建立一個由其所有數據組成的統一數字身份,同時使開發人員能夠打破孤島並在應用程序之間自由共享用戶數據。目前IDX已經被900個項目採用,共計3.5萬個身份註冊,一共產出25萬條相關記錄。
一個通過學習、使用最新的web3應用來賺取加密貨幣的Web3.0應用。RabbitHole 使用 IDX 將多個 Web3 錢包和 Web2 賬戶鏈接到一個統一的 DID。在計算總信用分數後,他們將這個可驗證的憑據存儲在用戶的身份中,以便在任何 Web3 應用程序上使用。
一個 DAO 發現和治理平台,塑造ownership economy的社區的家園。BoardRoom 為其治理應用程序存儲提案、評論、投票和其他用戶生成的內容。 自從切換到 Ceramic 後,他們已經能夠提高參與度、增加對治理的信任並移除他們的後端組件。
Geo Web 是一套開放協議和產權系統,用於將數字內容錨定到物理位置。GeoWeb 需要一種簡單且無需信任的方式來存儲只能由資產當前所有者更新的可編輯 NFT 數據。 Ceramic 的Stream和 NFT DID 方法非常適合解決他們的問題。
一款大型在線協作遊戲。MetaGame 使用 Ceramic 的身份協議 IDX 來存儲以太坊用戶的配置文件數據,這些數據可以被 Web3 元宇宙中的任何應用程序使用、添加或擴展。
除以上這些應用,Ceramic網絡上在DeFi、DAO、NFT、GamFi等領域還有許多的應用。基本都是通過其數據可組合性和開放共享的存儲網絡來解決數據的使用問題,提高數據組合後的價值,從而提高用戶的數據效用,也能讓應用本身得到相應價值。
總結
Ceramic的"Streams"控制機制令動態數據及靜態數據的存儲效率都得到了進一步提高,同時這種機制帶來的水平擴展性也讓Ceramic的存儲網絡在容量和數據處理量上都有極大的提高。底層數據的統一和開放API讓不同應用間的數據聚合使用,真正提升了數據的可用性,為數據存儲從效率提升到效用提升奠定了基礎。
不過,目前Ceramic也存在一些問題,這也是協議未來發展應當關注的:比如它目前還沒有針對節點運行者和開發者的激勵機制;內存緩存的限制也迫使使用Ceramic的項目方運行自己的節點,提高了開發負擔。