본문으로 건너뛰기

dig RPC란?

규범적 스펙

이 페이지는 개요 페이지입니다. 메서드, 청크 wire 객체, 노드 프로필, OpenRPC 문서를 포함한 권위 있는 기계 인터페이스 스펙은 프로토콜 · dig RPC에 있습니다.

dig RPC는 호스팅된 dig-store .dig capsule에서 콘텐츠를 직접 읽기 위한 네트워크 전역 인터페이스입니다. 이는 HTTPS POST 위에서 이야기되는 JSON-RPC 2.0 서비스입니다.

capsule을 호스팅하는 모든 노드 — https://rpc.dig.net의 레퍼런스 노드든, 어떤 서드파티 노드든 — 는 동일한 메서드를 동일한 시맨틱으로 노출합니다. 이 인터페이스를 대상으로 작성된 클라이언트는 하나의 엔드포인트를 통해 네트워크 전체를 읽습니다. CDN은 존재하지 않습니다. DIG의 모든 콘텐츠 서빙은 dig RPC를 통해 이루어집니다.

세 가지를 서빙합니다:

여러분이 가진 것…여러분이 호출하는 것…돌려받는 것…
리소스의 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 목록

이를 정의하는 세 가지 속성

  • 구조적으로 블라인드. 노드는 해시로 키가 지정된 불투명한 암호문을 서빙합니다. URN, 복호화 키, 평문을 절대 보지 않습니다. 요청이 매치되지 않으면 결정론적이고 구별 불가능한 decoy 스트림으로 응답합니다 — 절대 404가 아닙니다 — 따라서 읽기 경로가 존재 여부를 판별하는 오라클이 되는 일이 없습니다. 모든 복호화와 모든 증명 검증은 클라이언트에서 이루어집니다.
  • 신뢰 없이 검증 가능. 모든 실제 바이트는 온체인 generation root에 뿌리를 둔 merkle **포함 증명(inclusion proof)**과 함께 도착합니다. 클라이언트는 증명을 root까지 접어(fold) 자신이 신뢰하는 root와 일치할 때만 받아들입니다. 노드가 진짜 바이트를 반환했다고 신뢰할 필요가 없습니다.
  • 어떤 크기든 스트리밍 가능. 콘텐츠는 명시적인 연속(continuation)을 갖는, 64 KiB 단위로 정렬된 유한 청크로 읽힙니다. 1킬로바이트짜리 리소스와 100메가바이트짜리 capsule은 동일한 루프로 읽히며, 어떤 단일 응답도 무한하지 않습니다.

dig-store와 어떻게 맞물리는가

dig-store는 포맷을 제공합니다: 콘텐츠 주소 지정 방식의 암호화된 store로, 단일 자기방어형 .wasm capsule로 컴파일되며, URN으로 주소가 지정되고 URN 자체가 곧 키입니다. dig RPC는 그 capsule이 호스트를 신뢰하지 않고도 네트워크에서 서빙되는 방법입니다:

  1. store를 컴파일하고 generation을 온체인에(CHIP-0035 DataLayer 싱글톤으로) 고정합니다. 콘텐츠 root가 신뢰 앵커입니다.
  2. 노드가 capsule을 호스팅하고 dig RPC로 노출합니다.
  3. 리더(reader)는 retrieval_key = sha256(urn)을 도출하고, dig.getContent를 호출하고, 스트리밍된 암호문을 재조립하고, 온체인 root에 대해 포함 증명을 검증하고, URN에서 도출한 키로 복호화합니다 — 이 모든 과정이 클라이언트 측에서만 이루어집니다.

노드는 오직 해시만을 알았을 뿐, 자신이 무엇을 서빙했는지는 전혀 알지 못했습니다.

한 번의 호출로 읽기

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을 반복하고, 재조립된 바이트에 대해 root를 기준으로 inclusion_proof를 검증한 다음 복호화합니다. "decoy": true인 결과는 찾을 수 없음을 의미합니다 — 중단하고 그렇게 보고하세요.

이 문서 읽는 방법

  • 메서드 — 전체 메서드 집합(dig.getContent, dig.getProof, dig.getProofStatus, dig.getCapsule, dig.getManifest, dig.getMetadata, dig.listCapsules, dig.health, dig.methods), 각각의 파라미터와 결과.
  • 공개 네트워크 RPC 사용하기 — 클라이언트를 rpc.dig.net(또는 어떤 노드든)으로 지정하기, 엔드포인트, 직접 운영하기.
  • 스트리밍 — 청크 모델, 재조립, 증명 검증, 레퍼런스 클라이언트 루프.
  • 적합성 — 네트워크 읽기 경로의 구성원이 되기 위해 노드가 반드시 구현해야 하는 것, 그리고 CORS, 오류, 블라인드 모델 전체.
노트

dig RPC는 DIG Network의 일부입니다. 전체 규범적 명세는 네트워크 콘텐츠 인터페이스인 프로토콜 · dig RPC 섹션에 있습니다.