個人データリポジトリ

ATプロトコルのリポジトリ構造のガイド

データリポジトリ

データリポジトリは、単一のユーザーによって公開されたデータのコレクションです。リポジトリは自己認証データ構造であり、各更新は署名され、誰でも検証できます。

リポジトリ仕様で詳細に説明されています。

データレイアウト

リポジトリの内容はMerkle探索木(MST)にレイアウトされ、状態が単一のルートハッシュに縮小されます。これは次のレイアウトとして視覚化できます。

┌────────────────┐
│     Commit     │  (Signed Root)
└───────┬────────┘
        ↓
┌────────────────┐
│   Tree Nodes   │
└───────┬────────┘
        ↓
┌────────────────┐
│     Record     │
└────────────────┘

すべてのノードはIPLDオブジェクト(dag-cbor)であり、CIDハッシュによって参照されます。上の図の矢印はCID参照を表します。

このレイアウトは、AT URIに反映されています。

Root       | at://alice.com
Collection | at://alice.com/app.bsky.feed.post
Record     | at://alice.com/app.bsky.feed.post/1234

データリポジトリへの「コミット」は、ルートノードのCIDに対する鍵ペア署名にすぎません。リポジトリが変更されるたびに、新しいコミットノードが生成されます。

識別子の種類

個人データリポジトリ内では、複数の種類の識別子が使用されます。

DID
分散型識別子(DID)はデータリポジトリを識別します。これは広くユーザーIDとして使用されますが、すべてのユーザーが1つのデータリポジトリを持っているため、DIDはデータリポジトリへの参照と見なすことができます。DIDの形式は使用される「DIDメソッド」によって異なりますが、すべてのDIDは最終的に鍵ペアとサービスプロバイダーのリストに解決されます。この鍵ペアは、データリポジトリへのコミットに署名できます。
CID
コンテンツID(CID)は、フィンガープリントハッシュを使用してコンテンツを識別します。これはリポジトリ全体で使用され、リポジトリ内のオブジェクト(ノード)を参照します。リポジトリ内のノードが変更されると、そのCIDも変更されます。ノードを参照する親は参照を更新する必要があり、その結果、親のCIDも変更されます。これはコミットノードまで連鎖し、その後コミットノードが署名されます。
NSID
名前空間識別子(NSID)は、リポジトリ内のレコードグループのLexiconタイプを識別します。
rkey
レコードキー(rkey)は、特定のリポジトリ内のコレクションに含まれる個々のレコードを識別します。形式はコレクションのLexiconによって指定されます。レコードを一つだけ持つコレクションは"self"などのキーでレコードを持ったり、多数のレコードを持つコレクションではキーにタイムスタンプ識別子(TID)と呼ばれるbase32エンコードされたタイムスタンプが使用されたりします。