Ana içeriğe geç

Kuantuma dayanıklı uzlaşma makbuzları

Bir uzlaşma makbuzu, bir rollup'un uzlaşma partisinin kuantum sonrası bir imza altında Ana Zincire çapalandığının taşınabilir, kendi kendine yeten bir kanıtıdır. Belirli bir partiyi, rollup'un durumunu o yükseklikte taahhüt eden zincir üzeri çapaya bağlar ve tamamen çevrimdışı olarak doğrulanabilir — düğüm yok, doğrulayıcının ağ yoluna güven yok.

Çapa imzası ML-DSA-87'dir (Dilithium-5, FIPS-204); Ana Zincirin kullandığı kuantum sonrası şemanın aynısıdır, böylece bir makbuz taban zincirin kuantuma dayanıklı bütünlüğünü devralır.

Kanonik çapa mesajı

Doğrulama, çapa alanlarından oluşturulan ve tam olarak şu sırayla birleştirilen kanonik bir mesaj üzerinde bir Dilithium-5 imzasını kontrol eder:

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

anchorSignBytes(...) bu baytları üretir; doğrulayıcı bunları makbuzdan yeniden oluşturur ve imzayı katman oluşturucunun kayıtlı ML-DSA-87 anahtarına karşı kontrol eder.

Oluşturma ve doğrulama (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

Bir creatorPublicKey yerine (veya onun yanında) bir client iletirseniz, doğrulama katman oluşturucunun kayıtlı ML-DSA-87 anahtarını zincirden getirir (getPqcAccount(address)). Doğrulama daha sonra iki şeyi kontrol eder:

  1. kanonik çapa mesajı üzerindeki Dilithium-5 imzası ve
  2. parti ↔ çapa durum-kökü bağlaması — elinizde tuttuğunuz partinin çapanın taahhüt ettiği parti olduğu.
// Online verification: fetch the creator's PQC key from the chain.
const online = await verifySettlementReceipt(receipt, { client: rdk });

Çapaları okuma

Makbuzlar, zincir sürümü v3.1.80 itibarıyla hem gRPC hem de REST üzerinden erişilebilen zincir üzeri x/multilayer Anchor sorgusundan oluşturulur (bkz. REST / gRPC Uç Noktaları). Okumalar:

  • getAnchor(layerId) — bir katman için çapa.
  • getLatestAnchor() — en son çapa.
  • getAnchors(layerId) — bir katman için çapa geçmişi.
  • getPqcAccount(address) — oluşturucunun imzasını doğrulamak için kullanılan, kayıtlı bir kuantum sonrası hesap (ML-DSA-87 anahtarı).

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

Tam qorollup operatör CLI'sı için Bir Rollup Dağıtma sayfasına bakın.

Diğer diller

Python, Go, Rust ve Java (JVM) istemcileri aynı oluşturma/doğrulama yüzeyini sunar. ML-DSA-87 doğrulamasını paketlenmiş bir JavaScript uygulaması yerine qorechain-pqc kütüphanesi aracılığıyla gerçekleştirirler; bunu diliniz için RDK istemcisinin yanında kurun.