こんにちは。C-VoxelというdAppを開発しているKantaroです。C-Voxelは、ユーザーが自身のオンチェーントランザクションにコンテキストを付与しDIDと紐づけることで、web3上のアイデンティティを表現するプロトコルです。
今回は、C-Voxelも利用しているCeramic Networkというプロトコルについて紹介します。
Ceramic Networkは3Box Labが開発する、分散型のコンポーザブルデータネットワークプロトコルです。
先日にはシリーズAで$30,000,000の調達も実施し注目を集めているプロトコルですが、そんなCeramic Networkについて一部ですがご紹介していきたいと思います。
Ceramicの大きな特徴の一つは、更新可能な分散型データストレージです。分散型データストレージで有名なIPFSでは、データによってCIDが発行されるため、データを更新するとCID(エンドポイント)も変化します。
Ceramicではストリームと呼ばれるデータの更新コミットの集合によって各データを表現しています。それぞれのストリームはストリームIDという不変なIDを持っており、データを変更するとコミットログが追加される一方でストリームID自体は変わらないため、更新可能なデータストアを実現することが可能となっています。
ストリームのイメージとしては、Gitのツリーを思い浮かべていただくと近いと思います。更新をコミットするとそのコミットログは残りますしレポジトリ内のデータも更新されますが、レポジトリのIDは変わらないですよね?そのレポジトリIDに当たるものが、ストリームIDということになります。下記の図はストリームのイメージです。非常に簡略化しており正しいものではないですが、あくまでイメージとしてご参考ください。
また別の表現をすれば、それぞれのストリームはそのドキュメントデータにとってのブロックチェーンのようなものともいうことができます。(実際にはブロックチェーンの仕組みではなくIPLDに格納されたDAGの仕組みなのですが、本記事では割愛します。あくまでイメージです)
上でブロックチェーンのようなもの、という表現をしましたが、ブロックチェーンと大きく異なる点の一つが、スケーラビリティです。例えばL1のブロックチェーンでは、グローバルな状態をコンセンサスを取りながら更新していくため、誤解を恐れずにいえば現状そのスケーラビリティには限りがあります。(もちろんそれを改善する様々な技術が出てきていますが。) 一方でCeramicでは、原則としてアカウント間で共有するデータ状態を持ちません。全てのデータは、それを作成しコントロール権を持つ(=所有する)アカウントによってのみ更新されます。この構成により、データの更新状態を綺麗に整理することができ、システムを非常に綺麗に水平方向にスケールすることができるようになります。(もちろんこれはブロックチェーンより優れてる!とかの話ではなく、扱うと想定するデータの性質によって向いている構成も変わるよね、という話です)
Ceramicのストリームはストリームタイプと呼ばれる処理ロジックを指定する必要があります。これはそのストリームのデータ構造やコンテンツ形式、コンセンスサスメカニズムなど、そのストリームの性質を決定する関数です。
Tile DocumentはCeramicが定めている主要なストリームタイプの一つで、JSONドキュメントを保存しNoSQLドキュメントストアと同様の機能を提供しています。さらにDIDによる認証を備えており、ストリームの更新は、そのストリームのコントローラーとして指定されたDIDの署名が必要です。
DID Datastoreは、Ceramicを代表するものの一つです。分散型IDをベースとしてユーザーが自身のアイデンティティに紐づくデータを所有できるようなデータストアを提供しています。Ceramicと聞くとこちらを思い浮かべる方も多いのではないでしょうか。DID Datastoreが実装しているIDX protocolのアーキテクチャの簡略図は下記のようになっています。
DID Datastoreの構成について簡単に見てみましょう。
Indexは、ユーザーのDIDによって制御されるストリームで、Definition(streamIDで表される)とRecord(streamIDで表される)のマッピングからなるエントリーを格納しています。すべてのDIDは1つのグローバルインデックスを持っています。
Schemaはデータ型を指定するJSON schemaで、DefinitionはそのSchemaによって定義されたTile Documentです。このDefinitionのIDに対応するRecordというTile Documentがマッピングされています。
Schemaは自由に定義することができるため、とても柔軟にDIDに紐付けるデータモデルを表現することが可能です。例えばC-Voxelの場合には、「トランザクションにコンテキストを追加する」ためのデータモデルを定義しています。
このプロトコルの仕組みのおかげで他の開発者の作ったデータモデルを活用したり組み合わせることができるため、コンポーザビリティに優れたデータエコシステムが作られているのです。
今回は勉強会用に簡単にまとめてみました。Ceramicは非常に幅広く奥も深いため、簡単な部分しか触れることはできませんでしたが、参考になれば幸いです。(時間作って改めてもっとまとめ直そうと思います)
お読みいただきありがとうございました!