# Ceramic Networkとは？

By [0xKantaro](https://paragraph.com/@kantaro) · 2022-05-21

---

こんにちは。C-VoxelというdAppを開発しているKantaroです。C-Voxelは、ユーザーが自身のオンチェーントランザクションにコンテキストを付与しDIDと紐づけることで、web3上のアイデンティティを表現するプロトコルです。

[https://testnet.cvoxel.xyz/intro](https://testnet.cvoxel.xyz/intro)

今回は、C-Voxelも利用している**Ceramic Network**というプロトコルについて紹介します。

Ceramic Networkとは
-----------------

[https://ceramic.network/](https://ceramic.network/)

Ceramic Networkは3Box Labが開発する、分散型のコンポーザブルデータネットワークプロトコルです。

先日には[シリーズAで$30,000,000の調達](https://blog.ceramic.network/30-million-series-a-multicoin-usv/)も実施し注目を集めているプロトコルですが、そんなCeramic Networkについて一部ですがご紹介していきたいと思います。

Mutable data storage
--------------------

Ceramicの大きな特徴の一つは、**更新可能な**分散型データストレージです。分散型データストレージで有名なIPFSでは、データによってCIDが発行されるため、データを更新するとCID(エンドポイント)も変化します。

Ceramicでは**ストリーム**と呼ばれるデータの更新コミットの集合によって各データを表現しています。それぞれのストリームは**ストリームID**という不変なIDを持っており、データを変更するとコミットログが追加される一方でストリームID自体は変わらないため、更新可能なデータストアを実現することが可能となっています。

ストリームのイメージとしては、Gitのツリーを思い浮かべていただくと近いと思います。更新をコミットするとそのコミットログは残りますしレポジトリ内のデータも更新されますが、レポジトリのIDは変わらないですよね？そのレポジトリIDに当たるものが、ストリームIDということになります。下記の図はストリームのイメージです。非常に簡略化しており正しいものではないですが、あくまでイメージとしてご参考ください。

![](https://storage.googleapis.com/papyrus_images/2a0677ca5c774969bc33b458ed6b0659049f5d6c88937d6b8e1d76bca7ae9beb.jpg)

また別の表現をすれば、それぞれのストリームはそのドキュメントデータにとってのブロックチェーンのようなものともいうことができます。(実際にはブロックチェーンの仕組みではなくIPLDに格納されたDAGの仕組みなのですが、本記事では割愛します。あくまでイメージです)

Scalability
-----------

上でブロックチェーンのようなもの、という表現をしましたが、ブロックチェーンと大きく異なる点の一つが、**スケーラビリティ**です。例えばL1のブロックチェーンでは、グローバルな状態をコンセンサスを取りながら更新していくため、誤解を恐れずにいえば現状そのスケーラビリティには限りがあります。(もちろんそれを改善する様々な技術が出てきていますが。) 一方でCeramicでは、原則としてアカウント間で共有するデータ状態を持ちません。全てのデータは、それを作成しコントロール権を持つ(=所有する)アカウントによってのみ更新されます。この構成により、データの更新状態を綺麗に整理することができ、システムを非常に綺麗に水平方向にスケールすることができるようになります。(もちろんこれはブロックチェーンより優れてる！とかの話ではなく、扱うと想定するデータの性質によって向いている構成も変わるよね、という話です)

Tile Document
-------------

Ceramicのストリームは**ストリームタイプ**と呼ばれる処理ロジックを指定する必要があります。これはそのストリームのデータ構造やコンテンツ形式、コンセンスサスメカニズムなど、そのストリームの性質を決定する関数です。

**Tile Document**はCeramicが定めている主要なストリームタイプの一つで、JSONドキュメントを保存しNoSQLドキュメントストアと同様の機能を提供しています。さらにDIDによる認証を備えており、ストリームの更新は、そのストリームのコントローラーとして指定されたDIDの署名が必要です。

DID Datastore/IDX protocol
--------------------------

**DID Datastore**は、Ceramicを代表するものの一つです。分散型IDをベースとしてユーザーが自身のアイデンティティに紐づくデータを所有できるようなデータストアを提供しています。Ceramicと聞くとこちらを思い浮かべる方も多いのではないでしょうか。DID Datastoreが実装しているIDX protocolのアーキテクチャの簡略図は下記のようになっています。

![](https://storage.googleapis.com/papyrus_images/dafb2faae6a6a83360b2c20b0e357fdabd5f49fbbbfb9ddbf8b65a7e53e29872.png)

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は非常に幅広く奥も深いため、簡単な部分しか触れることはできませんでしたが、参考になれば幸いです。(時間作って改めてもっとまとめ直そうと思います)

お読みいただきありがとうございました！

[https://twitter.com/kitakaze\_kan13](https://twitter.com/kitakaze_kan13)

---

*Originally published on [0xKantaro](https://paragraph.com/@kantaro/ceramic-network)*
