CESS 研究開発ディレクター:なぜ私たちは Substrate のストレージパレットを開発するのか
CESSがSubstrate向けに開発したストレージパレットが完成しました。Substrateで開発しているプロジェクトのチームは、CESSのメインネットが立ち上がった後、このパレットを使用してCESSのストレージサービスを直接呼び出すことができます。では、CESSの研究開発ディレクターであるSwowkが、なぜストレージパレットを開発する必要があったのかを振り返ってみましょう。
1. 背景
多機能なブロックチェーンフレームワークであるSubstrateには、開発者が使用できる複数のモジュール(別名パレット)が用意されています。アカウントや資産などのリソース管理から、乱数生成器やスケジューラーなどのユーティリティまで、これらの既存のパレットはほとんどの開発者のアプリケーションシナリオのニーズを満たすことができます。しかし、改善の余地はまだあります。
最近、Substrate上でデータストレージサービスを実装する必要がありましたが、既存のすべてのパレットを確認したところ、私たちのニーズを満たすパレットは見つかりませんでした。そこで、私たちはこの問題を解決するためにカスタムパレットを開発することにしました。
ここではニッチなものについて議論するつもりはありませんが、現実のアプリケーションは実行中にさまざまなデータを消費し生成し続けます。システムデータ、ユーザーデータ、または一時的なデータなど、これは一般的なシナリオです。多くのDAppには、NFTなどのオフチェーンデータストレージサービスが必要なシナリオが多数あります。選択するストレージサービスの品質は、アプリケーション全体のパフォーマンスと信頼性に直接影響します。
したがって、私たちはSubstrate/Polkadotコミュニティに、現在のSubstrate APIと互換性のあるストレージサービス専用のパレットを提供したいと考えています。開発者は少量のコード変更を加えるだけで、CESSの安定した安全なデータストレージを利用できるようになります。これにより、Substrateを使用する際の開発体験がさらに向上し、Polkadotエコシステムが豊かになると信じています。
2. 現在のソリューションの欠陥
既存のSubstrate FRAMEには、データストレージに関連するパレットが1つしかありません。それはTransaction Storage Palletです。このパレットは、Substrateと並行してIPFSノードを実行することをサポートし、IPFSがデータをSubstrateストレージに格納した後にそれを取得できるようにします。しかし、その固有の特性と以下のいくつかの欠陥により、その適用範囲は大きく制限されています:
- データはブロックチェーンネットワークにアップロードする必要があります。これらのデータは実際にはチェーン上に保存されていませんが、それでも追加のガスコストと混雑を引き起こし、大きなファイルの保存には適していません;
- すべてのバリデータノードは自分自身のIPFSサービスを立ち上げる必要があり、多くの制限を受けます;
- 開発の難易度が高く、Substrateに基づくコードには大量の修正が必要です;
- このパレットはSubstrate側のファイルアップロードのみをサポートし、閲覧者はIPFSクライアントを介してそれを取得する必要があります。
3. CESSの新しいソリューション
私たちはSubstrateに基づくデータストレージサービスを設計し実装しました。一方で、バリデータノードは追加のサービスを起動する必要がなく、基板に基づくコードに大きな変更を加える必要もありません。したがって、新しいチェーンでも既存のチェーンでも、開発者は私たちのストレージサービスを簡単に統合できます。
他方で、カスタムストレージRESTコンポーネントを通じて、ユーザーは追加のクライアントプログラムをインストールすることなく、データを簡単にアップロードおよびダウンロードできます。
4. 設計アーキテクチャ
私たちの提案するアーキテクチャは以下の図のように、Data Storage PalletとカスタムStorage Sidecarで構成されています。このフレームワークはSubstrate API Sidecar(https://github.com/paritytech/substrate-api-sidecar)からインスパイアを受けています。
データストレージパレット:データの記録と管理を実現します。このパレットは、メタデータに関連する機能を実装しており、ルートデータ管理、データ所有者管理、ストレージデータに関するデータ分類などを含みます。
カスタムストレージ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ストレージサービスを体験するためにわずか2ステップで済みます。
- ステップ1 Data Store PalletをFRAMEに統合する
テキストエディタでコードのruntime/Cargo.toml設定ファイルを開きます;
依存関係リストにcrateを追加して、pallet-data-store crateをインポートし、ランタイムで使用できるようにします;
pallet-data-store = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "main" }
以下のコードをfeaturesモジュールに追加し、pallet-data-store crateをfeaturesリストに追加してstd機能に含めます; >
[features] default = ['std'] std = [ ... 'pallet-aura/std', 'pallet-balances/std', # この行を追加 "pallet-data-store/std", ... ]
テキストエディタでruntime/src/lib.rsファイルを開きます;
Balancesコードの最後の行の後に、Data Storeパレットの以下のコードを追加します:
parameter_types! { pub const StringLimit: u32 = 1024; } /// pallet-data-storeを設定します。 impl pallet_data_store::Config for Runtime { type Event = Event; type StringLimit = StringLimit; type WeightInfo = pallet_data_store::weights::DataStoreWeight<Runtime>; }
Data Storeをconstruct_runtime!マクロに追加します
// 以前に設定されたFRAMEパレットを組み合わせてランタイムを作成します。
次のコマンドを実行してリリースモードでノードをコンパイルします
cargo build --release
- ステップ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/)を参照してください。