メインコンテンツまでスキップ

dig RPCとは?

規範的な仕様

これは概要ページです。権威あるマシンインターフェース仕様 — メソッド、チャンクのワイヤーオブジェクト、ノードプロファイル、OpenRPCドキュメント — はプロトコル・dig RPCにあります。

dig RPCは、ホストされたDigStoreの.dig capsuleから直接コンテンツを読み取るための、ネットワーク全体のインターフェースです。 これはHTTPS POST上で話されるJSON-RPC 2.0サービスです。

capsuleをホストするすべてのノード — https://rpc.dig.netにあるリファレンスノードでも、任意のサードパーティのノードでも — は同じセマンティクスを持つ同じメソッドを公開します。このインターフェースに対して書かれたクライアントは、1つのエンドポイントを通じてネットワーク全体から読み取れます。CDNは存在せず、DIG上のすべてのコンテンツ配信はdig RPC経由です。

これは以下の3つを提供します。

あなたが持っているもの…あなたが呼び出すもの…あなたが受け取るもの…
リソースのretrieval key(取得キー)sha256(urn)dig.getContent / dig.getProofリソースの暗号文 + merkle包含証明(およびZK実行証明)、チャンク単位でストリーミング
store id + generation rootdig.getCapsuleそのgenerationの.dig capsule全体、チャンク単位でストリーミング
store iddig.getManifest / dig.getMetadata / dig.listCapsules公開用の発見マニフェスト/storeのメタデータマニフェスト/storeの確定済みgenerationリスト

それを定義する3つの性質

  • 構造上盲目。 ノードはハッシュでキー付けされた不透明な暗号文しか配信しません。URN、復号キー、平文を一切見ることはありません。ミスしたリクエストには決定論的で見分けのつかないデコイストリームで応答します — 決して404は返しません — そのため読み取りパスが存在オラクルになることはありません。すべての復号とすべての証明検証はクライアント側で行われます。
  • 信頼なしに検証可能。 すべての本物のバイト列は、オンチェーンのgeneration rootに根ざしたmerkle包含証明とともに届きます。クライアントは証明をrootまで折りたたみ、それが自分が信頼するrootと一致した場合にのみ受け入れます。ノードが本物のバイト列を返したと信頼される必要は一切ありません。
  • あらゆるサイズでストリーミング可能。 コンテンツは、明示的な継続指示付きで、境界のある64KiB単位のチャンクで読み取られます。1キロバイトのリソースと100メガバイトのcapsuleは同じループで読み取られ、単一のレスポンスが無制限になることはありません。

DigStoreとの関係

DigStoreはフォーマットを提供します。すなわち、コンテンツアドレス指定型で暗号化されたstoreであり、単一の自己防衛型.wasm capsuleにコンパイルされ、URNによってアドレス指定されます(URNが鍵そのものです)。dig RPCは、そのcapsuleがホストを信頼することなくネットワーク上で配信される方法です。

  1. storeをコンパイルし、generationをオンチェーンに固定します(CHIP-0035 DataLayerシングルトン)。そのcontent rootが信頼の起点です。
  2. ノードがcapsuleをホストし、それをdig RPC経由で公開します。
  3. 読み手はretrieval_key = sha256(urn)を導出し、dig.getContentを呼び出し、ストリーミングされた暗号文を再構成し、オンチェーンのrootに対して包含証明を検証し、URNから導出した鍵で復号します — すべてクライアント側で行われます。

ノードはハッシュしか知り得ず、自分が何を配信したのかを決して知りません。

1回の呼び出しでの読み取り

POST https://rpc.dig.net
Content-Type: application/json

{ "jsonrpc": "2.0", "id": 1, "method": "dig.getContent",
"params": {
"store_id": "5b1f…e9",
"root": "latest",
"retrieval_key": "9f23…c1"
} }
{ "jsonrpc": "2.0", "id": 1, "result": {
"ciphertext": "<base64>",
"total_length": 5242880,
"offset": 0, "length": 3145728,
"complete": false, "next_offset": 3145728,
"inclusion_proof": "<base64>",
"decoy": false,
"root": "a07c…4d" } }

クライアントはcompleteになるまでnext_offsetをループし、再構成されたバイト列に対するinclusion_proofrootに対して検証してから復号します。"decoy": trueという結果は見つからなかったことを意味します — その時点で処理を止め、そのように報告してください。

このドキュメントの読み方

  • メソッド — 全メソッド一式(dig.getContentdig.getProofdig.getProofStatusdig.getCapsuledig.getManifestdig.getMetadatadig.listCapsulesdig.healthdig.methods)、そのパラメータと結果。
  • 公開ネットワークRPCを使う — クライアントをrpc.dig.net(または任意のノード)に向ける方法、エンドポイント、自分でノードを運用する方法。
  • ストリーミング — チャンクモデル、再構成、証明検証、リファレンスクライアントのループ。
  • 準拠性 — ノードがネットワークの読み取りパスの一員となるために実装しなければならないこと、CORS、エラー、盲目モデルの詳細。
注記

dig RPCはDIG Networkの一部です。完全な規範仕様はプロトコル・dig RPCセクション(ネットワークのコンテンツインターフェース)にあります。