CESS 研發總監:我們為何為 Substrate 開發存儲 Pallet

WEEX 唯客博客, CESS 為 Substrate 開發的存儲 pallet 已開發完成,使用 Substrate 開發項目的團隊均可以在 CESS 主網上線后使用該 pallet 實現直接調用 CESS 的存儲服務。讓我們來共同回顧一下 CESS 研發總監 Swowk 當初對為何要開發存儲 pallet 的思考。 1. 背景 作為一個多功能的區塊鏈框架,Substrate 有多個模塊(又名 pallet)供開發人員使用。從賬戶和資產等資源管理到隨機數生成器和調度器等實用工具,這些現有的托盤可以滿足大多數開發者應用場景的需求。但是,仍有改進的餘地。 近期我們有一個在 Substrate 上實現一個數據存儲服務的需求,但在檢查了所有現有的 pallet 后,我們並未找到一個滿足我們需求的 pallet。所以我們想開發一個定製 pallet 來解決這個問題。 我們不在這裡討論利基主義的東西,現實中應用程序在運行過程中會不斷消耗和生成各種數據,無論是系統、用戶還是臨時數據,這是一個常見的場景。許多 DApp 有大量需要鏈下數據存儲服務的場景,例如 NFT。選擇的存儲服務質量將直接影響整個應用程序的性能和可靠性。 因此,我們希望為 Substrate/Polkadot 社區提供專用於與當前 Substrate API 兼容的存儲服務的 pallet,開發人員只需添加少量代碼更改即可利用 CESS 穩定和安全的數據存儲。我們相信這將進一步提升使用 Substrate 時的開發體驗並豐富 Polkadot 生態系統。 2. 當前方案的缺陷 現有的 Substrate FRAME 中只有一個與數據存儲相關的 pallet,即 Transaction Storage Pallet。它支持與 Substrate 并行運行 IPFS 節點,並允許 IPFS 在將數據放入 Substrate 存儲后對其進行檢索。但是,由於其固有的特性和以下幾個方面的缺陷,其應用範圍受到很大限制: 數據需要上傳到區塊鏈網路。雖然這些數據實際上並沒有存儲在鏈上,但它們仍然會產生額外的 Gas 成本和擁塞,不適合大文件存儲; 所有驗證者節點都需要為自己建立 IPFS 服務,受到很多限制; 開發難度大,基於 Substrate 的代碼需要大量修改; 該 pallet 只支持 Substrate 端的文件上傳,查看者需要通過 IPFS 客戶端檢索它。 3. CESS 的新方案 我們設計並實現了基於 Substrate 的數據存儲服務。一方面,驗證者節點不需要啟動額外的服務,也不需要對基於基板的代碼進行重大修改。因此,無論是新建鏈還是現有鏈,開發者都可以輕鬆集成我們的存儲服務。 另一方面,通過自定義存儲 REST 組件,用戶可以方便地上傳和下載數據,而無需安裝額外的客戶端程序。 4. 設計架構 我們的提案架構如下圖所示,由 Data Storage Pallet 和定製的 Storage Sidecar 組成,該框架是受到了Substrate API Sidecar(https://github.com/paritytech/substrate-api-sidecar)的啟發。 數據存儲 pallet:實現存儲數據的記錄和管理。該pallet實現與元數據相關的功能,例如根數據管理、數據所有者管理和關於存儲數據的數據分類。 定製存儲 Sidecar:提供 RESTful 服務與Data Storage Pallet交互。與 Substrate API Sidecar 不同的是,Storage Sidecar 除了與基於Substrate的區塊鏈交互的基本功能外,還封裝了與存儲相關的 API,包括數據存儲和數據檢索。用戶傳輸的數據最終會通過該介面存儲在 CESS 存儲系統中。 5. 核心功能 數據存儲 用戶調用定製存儲Sidecar的數據存儲API上傳數據文件; 調用封裝好的CESS API,將數據轉發給CESS; 一旦確認數據已經寫入,定製存儲Sidecar 將調用Extrinsic 記錄鏈上數據文件的相關信息; CESS存儲系統在其整個生命周期內維護數據的完整性和隱私性。   數據檢索 用戶調用定製存儲 Sidecar 的存儲 API 獲取目標數據; 利用定製 Storage Sidecar,查詢鏈上數據路由信息; 使用路由信息調用 CESS 數據檢索 API; 從 CESS 存儲系統中檢索並返回目標數據; 將目標數據返回到定製的 Storage Sidecar; 定製的 Storage Sidecar 必要時更新鏈上信息; 將目標數據返回給用戶。 6. 使用方法 事實上,開發者只需兩步就可以體驗 CESS 存儲服務。 Step 1 將 Data Store Pallet 集成至 FRAME 在文本編輯器中從您的代碼中打開 runtime/Cargo.toml 配置文件; 通過將 crate 添加到依賴項列表中,導入 pallet-data-storecrate 以使其可用於運行時; pallet-data-store = { default-features = false, git = “https://github.com/paritytech/substrate.git”, branch = “main” } 將以下代碼添加進 features 模塊,可以通過將 pallet-data-store crate 加入 features 列表從而使其包含進 std feature; [features]default = [‘std’]std = [ … ‘pallet-aura/std’, ‘pallet-balances/std’, # Add this line “pallet-data-store/std”, …] 在文本編輯器中打開 runtime/src/lib.rs 文件; 在 Balances 代碼的最後一行之後,為 Data Store pallet 添加以下代碼: parameter_types! { pub const StringLimit: u32 = 1024;}/// Configure the pallet-data-store.impl pallet_data_store::Config for Runtime { type Event = Event; type StringLimit = StringLimit; type WeightInfo = pallet_data_store::weights::DataStoreWeight;} 將 Data Store 添加到 construct_runtime! 宏 // Create the runtime by composing the FRAME pallets that were previously configured. 通過運行以下命令以發布模式編譯節點 cargo build –release Step 2 使用定製 Storage Sidecar 存儲數據 當 Runtime FRAME 集成完成後,您現在可以通過我們的 Data Store Sidecar(https://github.com/CESSProject/data-store-sidecar)與您的區塊鏈網路進行交互並同時使用 CESS 存儲服務。以下是在 Sidecar 中使用 CESS 存儲功能的教程: 首先,請根據此鏈接(https://github.com/CESSProject/data-store-sidecar#source-code-installation-and-usage)的內容完成安裝和啟動。 當然,我們也支持使用 Docker 進行快速部署(https://github.com/CESSProject/data-store-sidecar#docker)。 服務啟動成功后,就可以直接調用了。有關用戶指南,請參閱 API 文檔(https://example-datastore.cess.cloud/docs/)。     WEEX唯客交易所官網:weex.com

Previous:

Next: