본문으로 건너뛰기

양자 안전 정산 영수증

정산 영수증(settlement receipt) 은 롤업의 정산 배치가 포스트 양자 서명 아래 메인 체인에 앵커링되었음을 증명하는, 휴대 가능하고 자체 완결적인 증명입니다. 특정 배치를 해당 높이에서 롤업의 상태를 커밋한 온체인 앵커에 바인딩하며, 완전히 오프라인으로 검증할 수 있습니다 — 노드도 필요 없고, 검증자의 네트워크 경로를 신뢰할 필요도 없습니다.

앵커 서명은 메인 체인이 사용하는 것과 동일한 포스트 양자 방식인 ML-DSA-87(Dilithium-5, FIPS-204)이므로, 영수증은 기본 체인의 양자 안전 무결성을 그대로 물려받습니다.

정규 앵커 메시지

검증은 앵커 필드를 아래의 정확한 순서로 연결하여 만든 정규 메시지에 대한 Dilithium-5 서명을 확인합니다:

layer_id || layer_height (8-byte big-endian) || state_root || validator_set_hash

anchorSignBytes(...)가 이 바이트를 생성합니다. 검증자는 영수증으로부터 이를 재구성한 뒤, 레이어 생성자가 등록한 ML-DSA-87 키에 대해 서명을 확인합니다.

빌드 및 검증 (TypeScript)

import {
createRdkClient,
buildSettlementReceipt,
verifySettlementReceipt,
} from "@qorechain/rdk";

// The public qore.host endpoints are baked into the presets (RDK ≥ 0.4.2);
// pass `endpoints` only to target your own node.
const rdk = createRdkClient({ network: "testnet" });

// Build a portable receipt for one batch.
const receipt = await buildSettlementReceipt(rdk, "my-roll", 7);

// Persist it, ship it, hand it to a counterparty — it is self-contained JSON.

// Verify fully offline. With no client, you must supply the creator's key.
const result = await verifySettlementReceipt(receipt, {
creatorPublicKey: "<layer creator ML-DSA-87 public key>",
});

console.log(result.valid); // true when the signature and the batch↔anchor binding both hold

creatorPublicKey 대신(또는 함께) client를 전달하면, 검증 과정에서 레이어 생성자가 등록한 ML-DSA-87 키를 체인에서 가져옵니다 (getPqcAccount(address)). 그런 다음 검증은 두 가지를 확인합니다:

  1. 정규 앵커 메시지에 대한 Dilithium-5 서명, 그리고
  2. 배치 ↔ 앵커 상태 루트 바인딩 — 여러분이 보유한 배치가 앵커가 커밋한 바로 그 배치인지 여부.
// Online verification: fetch the creator's PQC key from the chain.
const online = await verifySettlementReceipt(receipt, { client: rdk });

앵커 읽기

영수증은 온체인 x/multilayer Anchor 쿼리로부터 만들어지며, 이 쿼리는 체인 버전 v3.1.80부터 gRPC와 REST 모두에서 사용할 수 있습니다 (REST / gRPC 엔드포인트 참조). 읽기 메서드는 다음과 같습니다:

  • getAnchor(layerId) — 레이어의 앵커.
  • getLatestAnchor() — 가장 최근 앵커.
  • getAnchors(layerId) — 레이어의 앵커 히스토리.
  • getPqcAccount(address) — 등록된 포스트 양자 계정(해당 ML-DSA-87 키). 생성자의 서명을 검증하는 데 사용됩니다.

CLI

# Build a receipt and print it.
qorollup receipt my-roll 7

# Build, then verify it inline.
qorollup receipt my-roll 7 --verify

# Build and write it to a file.
qorollup receipt my-roll 7 --out receipt.json

전체 qorollup 운영자 CLI는 롤업 배포하기를 참조하세요.

다른 언어

Python, Go, Rust, Java(JVM) 클라이언트도 동일한 빌드/검증 인터페이스를 제공합니다. 이들 클라이언트는 번들된 JavaScript 구현 대신 qorechain-pqc 라이브러리를 통해 ML-DSA-87 검증을 수행하므로, 사용하는 언어의 RDK 클라이언트와 함께 해당 라이브러리를 설치하세요.