dig RPCとは?
これは概要ページです。権威あるマシンインターフェース仕様 — メソッド、チャンクのワイヤーオブジェクト、ノードプロファイル、OpenRPCドキュメント — はプロトコル・dig RPCにあります。
dig RPCは、ホストされたdig-storeの.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 root | dig.getCapsule | そのgenerationの.dig capsule全体、チャンク単位でストリーミング |
| store id | dig.getManifest / dig.getMetadata / dig.listCapsules | 公開用の発見マニフェスト/storeのメタデータマニフェスト/storeの確定済みgenerationリスト |
それを定義する3つの性質
- 構造上盲目。 ノードはハッシュでキー付けされた不透明な暗号文しか配信しません。URN 、復号キー、平文を一切見ることはありません。ミスしたリクエストには決定論的で見分けのつかないデコイストリームで応答します — 決して
404は返しません — そのため読み取りパスが存在オラクルになることはありません。すべての復号とすべての証明検証はクライアント側で行われます。 - 信頼なしに検証可能。 すべての本物のバイト列は、オンチェーンのgeneration rootに根ざしたmerkle包含証明とともに届きます。クライアントは証明をrootまで折りたたみ、それが自分が信頼するrootと一致した場合にのみ受け入れます。ノードが本物のバイト列を返したと信頼される必要は一切ありません。
- あらゆるサイズでストリーミング可能。 コンテンツは、明示的な継続指示付きで、境界のある64KiB単位のチャンクで読み取られます。1キロバイトのリソースと100メガバイトのcapsuleは同じループで読み取られ、単一のレスポンスが無制限になることはありません。
dig-storeとの関係
dig-storeはフォーマットを提供します。すなわち、コンテンツアドレス指定型で暗号化されたstoreであり、単一の自己防衛型.wasm capsuleにコンパイルされ、URNによってアドレス指定されます(URNが鍵そのものです)。dig RPCは、そのcapsuleがホストを信頼することなくネットワーク上で配信される方法です。
- storeをコンパイルし、generationをオンチェーンに固定します(CHIP-0035 DataLayerシングルトン)。そのcontent rootが信頼の起点です。
- ノードがcapsuleをホストし、それをdig RPC経由で公開します。
- 読み手は
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_proofをrootに対して検証してから復号します。"decoy": trueという結果は見つからなかったことを意味します — その時点で処理を止め、そのように報告してください。