データ リポジトリ
データ リポジトリは、単一のユーザーによって公開されたデータのコレクションです。リポジトリは自己認証データ構造であり、各更新は署名されており、誰でも検証できます。
リポジトリ仕様 で詳細に説明されています。
データ レイアウト
リポジトリの内容は Merkle 検索ツリー (MST) にレイアウトされ、状態が単一のルート ハッシュに縮小されます。これは次のレイアウトとして視覚化できます:
┌────────────────┐
│ Commit │ (Signed Root)
└───────┬────────┘
↓
┌────────────────┐
│ Tree Nodes │
└───────┬────────┘
↓
┌────────────────┐
│ Record │
└────────────────┘
すべてのノードは IPLD オブジェクト (dag-cbor) であり、CID ハッシュによって参照されます。上の図の矢印は CID 参照を表します。
このレイアウトは、AT URI に反映されています:
ルート | at://alice.com
コレクション | at://alice.com/app.bsky.feed.post
レコード | at://alice.com/app.bsky.feed.post/1234
データ リポジトリへの「コミット」は、ルート ノードの CID に対するキーペア署名にすぎません。リポジトリが変更されるたびに、新しいコミット ノードが生成されます。
識別子の種類
個人データ リポジトリ内では、複数の種類の識別子が使用されます。
- DIDs
- 分散 ID (DID) は、データ リポジトリを識別します。これらはユーザー ID として広く使用されていますが、すべてのユーザーには 1 つのデータ リポジトリがあるため、DID はデータ リポジトリへの参照と見なすことができます。DID の形式は使用される「DID 方式」によって異なりますが、すべての DID は最終的にキー ペアとサービス プロバイダーのリストに解決されます。このキー ペアは、データ リポジトリへのコミットに署名できます。
- CIDs
- コンテンツ ID (CID) は、フィンガープリント ハッシュを使用してコンテンツを識別します。これらはリポジトリ全体で使用され、リポジトリ内のオブジェクト (ノード) を参照します。リポジトリ内のノードが変更されると、その CID も変更されます。ノードを参照する親は参照を更新する必要があり、その結果、親の CID も変更されます。これはコミット ノードまで連鎖し、その後コミット ノードが署名されます。
- NSIDs
- 名前空間識別子 (NSID) は、リポジトリ内のレコード グループの Lexicon タイプを識別します。
- rkey
- レコード キー ("rkeys") は、特定のリポジトリ内のコレクション内の個々のレコードを識別します。形式はコレクション Lexicon によって指定され、一部のコレクションには "self" などのキーを持つレコードが 1 つだけ含まれ、他のコレクションには多数のレコードがあり、キーにはタイムスタンプ識別子 (TID) と呼ばれる base32 エンコードされたタイムスタンプが使用されます。