qub Protokollýsing

qub er ein protokoll fyri kryptografiskar tíðarbundnar bindingar: ein skipan til at innsigla orð til ein framtíðardag og seinni vátta nágreiniliga, hvat varð innsiglað, hvør drand-umfar stýrdi útgávuni, og—tá ein goymslutransaktión ella eitt prógv úr gjøgnumskygni-logginum er tøkt—eitt sjálvstøðugt tíðarstemplað evsta mark fyri, nær dulmálsteksturin varð bundin.

Tríggjar grundeindir fáa tað at virka. drand er ein desentraliseraður tilvildarviti—avdúkingardagurin verður framfylgdur dulmálsliga heldur enn av góðvilja qubs. Varandi goymsla saman við einum gjøgnumskygni-loggi, sum bara kann vaksa, varðveitir innsiglaðu bætini og ankrar bólkaðar bindingar í varandi almennari goymslu; tann goldna T3-leiðin skrivar eisini eina einstaka varandi goymslutransaktión. ML-DSA-65 er ein post-kvanta talgild undirskrift—tá ið høvundskapur er virkin, er qubið bundið at einum lyklapari, hvørs loyndarmál ongantíð fer av eind høvundans.

Saman gera hesar grundeindir eina frágreiðing, sum er tíðarlæst og manipulatiónsávísandi, kann hava høvund og kann tíðarstemplast sjálvstøðugt—ein kvittan, hvørs virði veksur, so hvørt sum førleikin hjá heiminum at smíða fortíðina batnar.

Restin av hesum skjali er tann normativa fyriskipanin, sum krevst fyri samvirkandi ímótkomningar.


qub Protokoll Fyriskipan

Teigur Virði
Skjalaútgáva 1.0.0 (protocol-v1.0.0)
Tráðaprotokollur 0x01
Ytri umbúgving 0x01
Gildiskomudagur 2026-09-23
Støða Galdandi
Eftirkannað fram til 2026-09-23

Hetta skjalið er tann normativa protokollfyriskipanin fyri qub tíðarbundnu bindingarskipanina. Hon ásetir dátubygnaðir, raðfestingarreglur, avleiðingarformlar og verifikatiónsmannagongdir, sum krevjast fyri samvirkandi ímótkomningar.

Umfang: protokollagið er við vilja málneutralt — qub-likamið er ógjøgnumskygt reintekstur / markdown / pakt-bæti, og staðbundin framsýning er ábyrgd vísarans (qub.social vevtænasta, <qub-embed> iframe, MCP-klientar, o.s.fr.).


1. Teknleiðing og Vanir

Teknleiðing Merking
u8, u64, i64 Tekn-/tekleys heiltøl við ásettari bitabreidd
[u8; N] Fastlongdar bætibrá av N bætum
Vec<u8> Broytilig-longdar bætibrá
Option<T> Virði av slag T, ella fráverandi
String UTF-8 tekstrein, NFC-normaliserað
`
SHA3-256(x) NIST SHA3-256 stytting av bætisreini x (FIPS 202)
ceil(x) Loftfunksjón: minsta heiltal ≥ x
CBOR Concise Binary Object Representation (RFC 8949)
big-endian Mest týðandi bæti fyrst

Øll heiltøl í forímyndabygningum verða raðfest sum big-endian fastbreiddar bætibráir (i64 → 8 bæti, u8 → 1 bæti) uttan so at annað er ásett.

Øll tíðarmerki eru Unix-sekund í UTC.


2. Dátubygnaðir

2.1 ComposeQub (innminnisstøða hjá høvundi)

Ikki raðfest til CBOR. Ikki skrivað til varandi goymslupláss. Staðbundið hjá høvundaappini.

ComposeQub {
    draft_id:       [u8; 16],        // Random, generated locally
    created_at:     i64,             // Unix seconds UTC
    unlock_at:      Option<i64>,     // Unix seconds UTC; None while composing
    visibility:     u8,              // 0x00 = private; 0x01 = public
    content_type:   u8,              // 0x01 text; 0x03 pact; 0x04 verdict
    plaintext:      Vec<u8>,         // Raw body bytes (UTF-8 for text)
    sender_label:   Option<String>,  // Display name; V2-signed when authorship is enabled
    title:          Option<String>,  // Plaintext countdown title; bound via title_hash
    reply_to:       Option<[u8; 32]>,// Parent qub_id; V2-signed when authorship is enabled
    outcome_at:     Option<i64>,     // Optional future judgment time; bound to qub_id
    status:         DraftStatus,     // Composing | Sealed | Uploaded | Failed
}

2.2 QubEnvelope (Avkrypterað Nýttulast)

Raðfest við kanoniskum CBOR (§3). Krypterað innan í SealedQub. Hetta er bygnaðurin, sum prógvar innihaldsheild eftir avkryptering.

QubEnvelope {
    version:             u8,              // Protocol major version (0x01 for v1)
    qub_id:              [u8; 32],        // Derived (see §4.1)
    content_type:        u8,              // Content type registry (see §6)
    created_at:          i64,             // Unix seconds UTC
    unlock_at:           i64,             // Unix seconds UTC
    outcome_at:          Option<i64>,     // When reality renders judgment; bound to qub_id
    sender_label:        Option<String>,  // Not in qub_id; V2-signed when authorship is enabled
    reply_to:            Option<[u8; 32]>,// Parent qub_id; not in qub_id; V2-signed when present
    body:                Vec<u8>,         // UTF-8 text or canonical CBOR pact/verdict body
    body_hash:           [u8; 32],        // SHA3-256(body) (see §4.2)
    sig_alg:             u8,              // Signature algorithm (see §9.2)
    author_signature:    Option<Vec<u8>>, // Set when sig_alg != 0x00
    author_pubkey:       Option<Vec<u8>>, // Set when sig_alg != 0x00
    cosigner_pubkey:     Option<Vec<u8>>, // Set for cosigned pact bilateral agreements
    cosigner_signature:  Option<Vec<u8>>, // Set for cosigned pact bilateral agreements
}

Grundlinja (óundirskrivaður tekst-qub): version = 0x01, content_type = 0x01, sig_alg = 0x00, allir Option-teigar fráverandi.

Aðrar v1-uppsetingar: content_type = 0x03 (pakt-likam, sí §6.1); sig_alg = 0x01 (ML-DSA-65) við author_signature og author_pubkey til staðar (sí §9.3); cosigner_pubkey og cosigner_signature til staðar saman fyri samundirskrivaðar paktir (sí §9.7); reply_to sett til foreldur-qubsins qub_id fyri svarkeðju-qub-ar (sí §9.3 fyri avleiðingarnar fyri undirskriftarumfangið).

2.3 SealedQub (Kanoniskt Tráðasnið)

Raðfest við kanoniskum CBOR (§3). Hetta er innara tráðartefaktið: almenn veiting goymir hesi bætini ber, meðan privat veiting pakkar tey inn í OuterWrapper undan goymslu (§13).

SealedQub {
    version:           u8,              // Protocol major version (0x01 for v1)
    qub_id:            [u8; 32],        // Same as QubEnvelope.qub_id
    visibility:        u8,              // 0x00 = private/wrapped; 0x01 = public/bare
    unlock_at:         i64,             // Unix seconds UTC
    outcome_at:        Option<i64>,     // Surfaced on the verdict-watch CTA
                                        //   before reveal; mirrors QubEnvelope.outcome_at;
                                        //   bound to qub_id via the §4.1 preimage.
    drand_chain_id:    String,          // drand chain hash (hex string)
    drand_round:       u64,             // Target drand round number
    drand_chain_version: Option<u8>,    // W3 — chain-migration version. Absent / 0 = quicknet
                                        //   (the only chain today). Lets a future chain swap
                                        //   be expressed on the wire without a breaking format
                                        //   change. NOT part of the §4.1 qub_id preimage, so its
                                        //   addition never alters an existing qub's identity.
    tlock_ciphertext:  Vec<u8>,         // tlock-encrypted QubEnvelope CBOR bytes
    recipient_pubkey:  Option<[u8; 32]>,// Reserved field; accepted by canonical CBOR
                                        //   but not interpreted by the v1 reference viewer
    title:             Option<String>,  // Plaintext title surfaced on the viewer
                                        //   countdown before reveal. Bound to qub_id
                                        //   via title_hash (§4.1). 1..=100 NFC code
                                        //   points, no hostile/control code points.
}

2.4 RevealedQub (Vísara Applikatiónsstøða)

Ikki raðfest til CBOR. Staðbundið hjá vísaraappini. Bygt eftir væleydnaða avkryptering og verifikatión.

RevealedQub {
    qub_id:              [u8; 32],
    arweave_tx_id:       String,
    visibility:          u8,
    content_type:        u8,
    created_at:          i64,
    unlock_at:           i64,
    outcome_at:          Option<i64>,       // Carried from both wire layers; drives the verdict-watch block
    drand_chain_id:      String,
    drand_round:         u64,
    sender_label:        Option<String>,
    title:               Option<String>,    // Carried forward from SealedQub.title
    reply_to:            Option<[u8; 32]>,
    body:                Vec<u8>,
    body_hash:           [u8; 32],
    body_hash_verified:  bool,
    author_signature:    Option<Vec<u8>>,
    author_pubkey:       Option<Vec<u8>>,
    signature_verified:  Option<bool>,
    cosigner_pubkey:     Option<Vec<u8>>,
    cosigner_signature:  Option<Vec<u8>>,
    cosigner_verified:   Option<bool>,
}

3. Kanoniska CBOR-Profilið

Øll SealedQub- og QubEnvelope-raðfesting MÁ samsvara hesum profili. Tveir ímótkomningar, sum fáa sama logiska bygnaðin, MÚGVA framleiða eins bæti.

3.1 Raðfestingarreglur

Regla Fyriskipan
Støðil RFC 8949 §4.2.1 (Core Deterministic Encoding Requirements)
Kortlyklaraðseting Raðað eftir raðfestari bætilongd fyrst (stytri fyri longri), so leksikografiskt (bæti fyri bæti fyri raðfestingar av sömu longd)
Heiltalsraðfesting Stytsta formi: 0–23 í byrjanarbæti; 24–255 í 2 bætum; 256–65535 í 3 bætum; o.s.fr.
Longdarraðfesting Bert ávísar longdir. Ongar óávísar-longdar brár, kort, bætisreinir ella tekstreinir (eyka-upplýsing = 31 er forboðin).
Tag Ongi CBOR-tag (høvuðsslag 6 er forboðið).
Flótipunkt Ongi flótitøl (høvuðsslag 7 virði 0xF9–0xFB eru forboðin).
Tekstreinir UTF-8-raðfestar, NFC-normaliseraðar (Unicode Normalization Form C).
Bætisreinir Rá bæti. Ongin base64-raðfesting á CBOR-laginum.
Tvífaldir lyklar Avvís við feili. Tólkarar MÚGVA IKKI tigandi taka ímóti tvífaldum kortlyklum.
Ókendir lyklar Avvís við feili. Tólkarar MÚGVA IKKI tola kortlyklar uttan fyri slagsins kanoniska lyklasett — tvær ymiskar kanoniskar bætisreinir mugu ongantíð avkoda til sama virði (encode(decode(x)) == x), og fyri undirskrivað likam hevði ein eyka lykil verið fjalt innihald, sum báðar undirskriftirnar binda seg at. Skemamenning fer ígjøgnum version, ongantíð gjøgnum eyka lyklar.
Einføld virði Bert true (0xF5), false (0xF4) og null (0xF6) eru loyvd.
Valfríir teigar Fráverandi valfríir teigar verða slept burtur úr CBOR-kortinum heilt og holt (ikki raðfestir sum null). Tilstaðarverandi valfríir teigar verða tiknir við í raðaðari lyklaraðseting.

3.2 Verifiseraðar Kanoniskar Lyklaraðsetingar

Hesar lyklaraðsetingar eru normativar. Ímótkomningar MÚGVA senda lyklar út í júst hesi raðseting. Avlúsingar-staðfestingar EIGA at verifisera raðsetingina í ikki-útgávubygdum.

QubEnvelope (útgáva 0x01, óundirskrivaður, allir valfríir teigar fráverandi):

"body"                (5 encoded bytes)
"qub_id"              (7 encoded bytes)
"sig_alg"             (8 encoded bytes)
"version"             (8 encoded bytes)
"reply_to"            (9 encoded bytes)   ← only if present (reply chains)
"body_hash"           (10 encoded bytes)
"unlock_at"           (10 encoded bytes)
"created_at"          (11 encoded bytes)
"outcome_at"          (11 encoded bytes)  ← only if present (verdict mechanic)
"content_type"        (13 encoded bytes)
"sender_label"        (13 encoded bytes)  ← only if present
"author_pubkey"       (14 encoded bytes)  ← only if present
"cosigner_pubkey"     (16 encoded bytes)  ← only if present (pact cosign)
"author_signature"    (17 encoded bytes)  ← only if present
"cosigner_signature"  (19 encoded bytes)  ← only if present (pact cosign)

QubEnvelope lyklaraðsetingaravleiðing: hvør lykil er ein CBOR-tekstrein. Raðfest longd = 1 bæti høvur + reinlongd (fyri reinir undir 24 bætum). Raða eftir samlaðari raðfestari longd fyrst, so leksikografiskt fyri lyklar av sömu longd.

SealedQub (útgáva 0x01, alment, eingin móttakari):

"title"             (6 encoded bytes)   ← only if present
"qub_id"            (7 encoded bytes)
"version"           (8 encoded bytes)
"unlock_at"         (10 encoded bytes)
"outcome_at"        (11 encoded bytes)  ← only if present (verdict mechanic)
"visibility"        (11 encoded bytes)
"drand_round"       (12 encoded bytes)
"drand_chain_id"    (15 encoded bytes)
"recipient_pubkey"  (17 encoded bytes)  ← only if present
"tlock_ciphertext"  (17 encoded bytes)
"drand_chain_version" (20 encoded bytes) ← only if present (W3; absent = quicknet)

PactTerms (pakt-likam, content_type 0x03):

"notes"         (6 encoded bytes)  ← only if present
"terms"         (6 encoded bytes)
"title"         (6 encoded bytes)
"party_a"       (8 encoded bytes)
"party_b"       (8 encoded bytes)
"pact_version"  (13 encoded bytes)

PactTerm (rað í terms-bránni):

"key"    (4 encoded bytes)
"value"  (6 encoded bytes)

PartyIdentifier (party_a / party_b kort):

"label"    (6 encoded bytes)
"contact"  (8 encoded bytes)  ← only if present

3.3 Bætiraðfestingarúrtak

Slag CBOR-raðfesting Dømi
SHA3-256 stytting (32 bæti) 0x58 0x20 + 32 bæti body_hash, qub_id
Tíðarmerki (i64) Høvuðsslag 0 (positivt) ella 1 (negativt), stytsta raðfesting Unix-sekund
Útgáva (u8, virði 1) 0x01 (eitt bæti)
Innihaldsslag (u8, virði 1) 0x01 (eitt bæti)
sig_alg (u8, virði 0) 0x00 (eitt bæti)
ML-DSA-65 undirskrift (3.309 bæti) 0x59 0x0C 0xED + 3.309 bæti author_signature, cosigner_signature
ML-DSA-65 alment lyklað (1.952 bæti) 0x59 0x07 0xA0 + 1.952 bæti author_pubkey, cosigner_pubkey

4. Normativar Avleiðingar

4.1 qub_id

qub_id eyðmerkir ein qub einstaknliga og bindir QubEnvelope at SealedQub. Hann verður avleiddur deterministiskt úr brævainnihaldinum.

qub_id = SHA3-256(
    "QUB_ID_V2"          ||  // domain separator: ASCII bytes [0x51 0x55 0x42 0x5F 0x49 0x44 0x5F 0x56 0x32] (9 bytes) + 0x00 padding (1 byte) = 10 bytes
    version              ||  // u8 (1 byte)
    content_type         ||  // u8 (1 byte)
    created_at           ||  // i64 big-endian (8 bytes)
    unlock_at            ||  // i64 big-endian (8 bytes)
    outcome_at_or_zero   ||  // i64 big-endian (8 bytes; 0 when outcome_at is absent)
    drand_round          ||  // u64 big-endian (8 bytes)
    body_hash            ||  // [u8; 32] (32 bytes)
    title_hash               // [u8; 32] (32 bytes; absent-sentinel = [0u8; 32])
)
// Total preimage: 108 bytes → 32-byte output

Økisskiljara-raðfesting: Reinurin "QUB_ID_V2" er 9 ASCII-bæti. Eitt einstakt 0x00 fyllibæti verður lagt aftanat at náa 10 bæti fyri samrøðing. Ímótkomningar MÚGVA brúka júst hesi 10 bæti: [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00].

outcome_at-raðfesting: V1.1 víðkaði forímyndina úr 92 til 100 bæti fyri at fella tann valfría outcome_at-teigin inn í bindingina. Fráverandi outcome_at verður raðfest sum 8 núll-bæti; protokoll-váttararnir avvísa outcome_at <= 0 allastaðni, so hetta varðveitslin kann ikki rekast saman við einum lógligum virði. Sí §3.2 (tráðasnið) og tað innantrægra tasks/verdict-uplift-plan.md fyri tann dóma-mekanismin, sum krevur hendan teig.

drand_round-raðfesting: V1.2 víðkaði forímyndina úr 100 til 108 bæti fyri at fella drand_round (tann ætlaða drand-rundu, §4.3) inn í bindingina, og økti økisskiljaran til QUB_ID_V2. Hetta bindur tíðarlás-rundina inn í qub-samleikan: ein gátt kann ikki binda dulorðstekstin aftur til eina aðra rundu (t.d. eina longu gingna) enn tað, sum vístu unlock_at ímplikerar. Avlæsingarprotokollurin (§8) váttar harumframt, at tann runda, sum er bakað inn í tlock-dulorðstekstins stanza, samsvarar unlock_round(unlock_at), so tann vístu avlæsingartíðin er prógvanliga tann runda, sum gáttar avkrypteringina.

Eginleikar:

4.2 body_hash

body_hash = SHA3-256(body)

Har body er tann ráa Vec<u8> innihaldsnýttulastin. Fyri tekst-qub-ar er hetta tann UTF-8-raðfesta qub-likamið.

4.2.1 title_hash

title_hash = SHA3-256(NFC(title).utf8_bytes)   if title is present
title_hash = [0u8; 32]                         if title is absent

Har title er tað valfría reintekst-heitið, sum verður víst á vísara-niðurteljingini áðrenn avdúkingina (sí §3.2). NFC-normalisering koyrir á styttingartíðspunkti, so styttingin er støðug yvir sjónliga-javnvirði kodupunkt-raðir. Allir-núll varðveitslin er varðveitt fyri fráverandi førið; ein tómur reinur verður avvístur á kanoniska CBOR-markinum sum ein ikki-kanonisk raðfesting av "fráverandi" (tann kanoniska raðfestingin sleppir teiginum heilt burtur).

4.3 Avlæsingarrunda-Kortlegging

drand_round = floor((unlock_at - chain_genesis_time) / chain_period_seconds) + 1
Parametur Kelda Dømi
unlock_at Brúkara-valdar Unix-sekund UTC 1735689600 (2025-01-01 00:00:00 UTC)
chain_genesis_time drand keðju-upplýsing (genesis_time) 1595431050
chain_period_seconds drand keðju-upplýsing (period) 30

ceil()-atgerðin velur fyrstu drand-rundu, hvørs avdúkingartíð er ≥ unlock_at. Hetta tryggjar, at qub ikki verður avkrypteranligur, áðrenn tann valda avlæsingartíðin.

Útjaðaraføri: um (unlock_at - chain_genesis_time) er júst deilibart við chain_period_seconds, er úrslitið júst tann runda — qub avlæsist beint á avdúkingartíð teirrar rundu.

Vátting: unlock_at MÁ vera í framtíðini á innsiglingartíð. unlock_at MÁ IKKI vera meira enn 10 ár frá created_at (fyri at avmarka langtíðar drand-veltingarvanda; brúkaramótið EIGUR at vára fyri avlæsingardøgum lengri enn 2 ár burtur).


5. Tráðasniðs-Nýggjslag

Tráðasniðs-nýggjslag veita samanseting-tíðar trygd ímóti at blanda CBOR-bæti saman við JSON, rátt reintekst ella aðrar bætiraðfestingar.

Slag Inniheldur Framleitt av Brúkað av
SealedQubCbor Kanoniskt CBOR av SealedQub serialize_sealed_qub() Innara tráðartefakt; goymt bert fyri almenna veiting ella innpakkað fyri privata veiting og síðani endurfingið av vísaranum
QubEnvelopeCbor Kanoniskt CBOR av QubEnvelope serialize_qub_envelope() tlock-krypteringar-inntak, tlock-avkrypteringarúttak

5.1 Samanseting-Reglur

// Production code — only through CBOR serialisers:
let sealed = SealedQubCbor::from_encoded(cbor_bytes);

// There is deliberately NO From<Vec<u8>> implementation.
// You cannot accidentally wrap arbitrary bytes in a wire format type.

// Accessing raw bytes:
let bytes: &[u8] = sealed.as_bytes();
let bytes: Vec<u8> = sealed.into_bytes();

5.2 Vátting við Samanseting

from_encoded() EIGUR at vátta, at inntakið byrjar við einum gildugum CBOR-kort-høvri. Full bygnaðarvátting hendir á tólkingartíð, ikki samanseting-tíð, fyri at sleppa undan tvítólking.


6. Innihaldsslags-Skráseting

Virði Slag Mest Likamsstødd Viðmerkingar
0x00 Varðveitt (ógildugt) — MÁ IKKI brúkast
0x01 Reintekstur (UTF-8, avmarkað Markdown) 50 KB rindað / 10 KB frítt Sí §10 fyri framsýningarreglur. Frítt / rindað býti verður framfylgt av upphalanartænastuni; harðtakið á protokollaginum er 50 KB.
0x02 Varðveitt (framtíðar) — Tillutað fyri eitt framtíðar innihaldsslag; ikki gildugt í v1. Vísarar MÚGVA avvísa tað sambært reglini niðanfyri.
0x03 Pakt (tvíhliða semja, CBOR-likam) 100 KB Likamið er kanoniskt CBOR PactTerms (§6.1). Samundirskrivara-undirskriving sambært §9.7.
0x04 Úrskurður (eginmeting hjá høvundi, CBOR-likam) 8 KB Likamið er kanoniskt CBOR VerdictBody (§6.2). Bara givið út av skipanarætlanini verdict. Foreldrasambandið er á Arweave-merkinum Parent-Tx-Id, ikki á likaminum. Sí verdict-uplift-plan §3.4.

Vísarar MÚGVA avvísa ókend innihaldsslag við einum greiðum brúkara-sjónligum feili. Vísarar MÚGVA IKKI royna at framsýna ókend slag sum tekst.

6.1 Pakt-Likam (content_type = 0x03)

Eitt pakt-likam er tann kanoniska CBOR-raðfestingin av einum PactTerms-virði:

PactTerms {
    pact_version:  u8,                    // 0x01 for structured/v1
    title:         String,                // ≤ 200 bytes, NFC
    terms:         Vec<PactTerm>,         // ≤ 20 rows
    party_a:       PartyIdentifier,       // initiator
    party_b:       PartyIdentifier,       // counter-signer
    notes:         Option<String>,        // ≤ 5,000 bytes, NFC; absent key if none
}

PactTerm       { key: String (≤ 100 bytes), value: String (≤ 2,000 bytes) } // NFC
PartyIdentifier{ label: String (≤ 100 bytes), contact: Option<String (≤ 320 bytes)> }

Kanoniskar CBOR-lyklaraðsetingar fyri øll trý kort eru givnar í §3.2. Samlað raðfest pakt-CBOR MÁ IKKI fara um 100 KB (samsvarar §6).

Skema-skiljari. Fyrsta raðin í terms fyri ein structured/v1-pakt MÁ vera { key: "pact_schema", value: "structured/v1" }. Raðir uttan hesa merking eru "egindefineraðir" paktir og fáa onga bygda vátting ella skema-vitandi framsýning.

Frystir váttanarpláss. structured/v1-paktir bera júst fýra váttanarraðir undir hesum lyklum:

"initiator_standard_terms"
"initiator_capacity_terms"
"counterparty_standard_terms"
"counterparty_capacity_terms"

value fyri hvønn er ein av átta frystum enskum reinum, vald av (role, kind)-parinum, har role ∈ { seller, buyer, provider, client } og kind ∈ { standard, capacity }. Sjálvir reinirnir eru normativ protokoll-dáta — báðir parta ML-DSA-65-undirskriftir binda seg at júst teimum bætum gjøgnum body_hash. Teir verða IKKI staðbundnir; tann undirskrivaða likamið er málneutralt. Onkur orðingarbroyting krevur eina nýggja skemaútgávu (structured/v2).

Teir átta reinirnir, teirra uppfletting (acknowledgement_for(role, kind)) og grundgevingin fyri hvønn eru fastsett av tilvísingar-ímótkomningini. Samsvarandi ímótkomningar MÚGVA senda út bæti-eins váttanarvirði; gulligrundar SHA3-256 likams-styttingar-roynir, sum fevna um allar fýra hlutverka-samansetingar, fanga onkra reki.

Vísara-framsýningarraðseting. Váttanarreinirnir innihalda orðingar sum "lýst omanfyri", sum áseta, at lýsingar- / umfangsraðir verða framsýndar undan váttanunum. Vísarar MÚGVA framsýna terms-bráina í CBOR-raðseting; umraðseting brýtur prosa-merkingina.

Mótpartsamband. Tá ið Parts B contact er eitt gildugt teldupost-adressu, sendir qub-upphalanartænastan sjálvvirkandi eitt eftirkanningar- / samundirskrivingar-boð á sviðstíð og bindur eventuella samundirskriving at vátting av sama adressu (§9.7). Paktir, hvørs Parts B-samband er fráverandi, kunnu framvegis verða samundirskrivaðir, men bert gjøgnum ein utanteldupost-kanal — tænastan noktar samundirskrivingar-umbønir, sum ikki kunnu framleiða eina samsvarandi 15-minuttu teldupost-váttingarmerking.

6.2 Dóma-Likam (content_type = 0x04)

Eitt dóma-likam er tann kanoniska CBOR-raðfestingin av einum VerdictBody-virði:

VerdictBody {
    verdict_version: u8,                  // 0x01 for structured/v1
    outcome:         u8,                  // 1=Right · 2=Partial · 3=Wrong · 4=Unfalsifiable
    reflection:      Option<String>,      // ≤ 2,000 bytes NFC; "what changed, what did you learn"
    evidence_url:    Option<String>,      // ≤ 2,048 bytes; HTTPS only; absent key when omitted
}

Kanonisk CBOR-lyklaraðseting:

"outcome"          (8 encoded bytes)
"reflection"       (11 encoded bytes)  ← only if present
"evidence_url"     (13 encoded bytes)  ← only if present
"verdict_version"  (16 encoded bytes)

Samlað raðfest dóma-CBOR MÁ IKKI fara um 8 KB (samsvarar skrásetingar-raðnum omanfyri).

Úrslits-enum. Tráðabætið er ætlanar-neutralt; teir fýra bólkarnir Right / Partial / Wrong / Unfalsifiable fevna um úrslits-rúmið hjá hvørjari dóma-berandi ætlan. Per-ætlanar-merkir ("Sá tað fyri" / "Helt tað" / "Sendi avstað" / "Vátta" fyri Right, o.s.fr.) eru ein vísara-sniðs-spurningur, ið verður loystur ímóti ætlanini hjá foreldra-qubinum — tráðurin verður mál- og ætlanar-neutralur. Virði uttan fyri 1..=4 MUGU verða avvíst í avkodingini.

Foreldra-samband. Eitt dóma-qub ber IKKI foreldra-tilvísingina í sínum likami. Arweave-veksil-eyðmerkin hjá foreldra-qubinum verður givin út sum Parent-Tx-Id-goymslumerki á upphaldsstundini (§7 goymslumerkislag). Hetta letur likamið vera eina sjálvberandi undirskrivaða lýsing av sjálvsdøming; eftirlitskeðjan ("rættur um hvat?") verður grundað við Arweave-merkis-uppfletting.

Trygd hjá vitnisburðar-URL (normativt). Tá ið evidence_url er til staðar, MUGU váttararnir (saman­seting-síðan, tráðasíðan, Worker-jaðarin) framfylgja:

  1. Bert HTTPS. Reinurin MÁ byrja við bætirøðini https://. Onkur annar háttur — http, ftp, javascript, data, file, o.s.fr. — verður avvístur.
  2. Longdarmark. ≤ 2.048 bæti (praktiska URL-mark hjá kagaranum).
  3. NFC + fíggindarliga-bætis-kanning. Sama regla sum title og reflection — bidi-yvirskriving / núll-vídd / merkis-blokkur / BOM / C0 / C1-bæti verða avvíst. Skilamarkið samsvarar Rust crate::handle::contains_hostile_text_codepoint og TS workers/api/src/utils/unicode.ts::isHostileCodepoint (haldist í takt).
  4. Onki millumrúm, ongi ASCII-stýristekn. Millumrúm / DEL / sub-0x20-bæti hvar sum helst í URL-num verða avvíst — letur niður tann \n/\t-inntrokings-vektorin, sum bidi-reglan ikki tekur við.
  5. Ikki-tómt vert-stykki. Alt millum https:// og fyrsta /, ? ella # MÁ vera ikki-tómt.

Ongin tænara-síðis heinting. Workeren MÁ IKKI fyriumboða, heinta ella framvísa URL-ina. Protokollin goymir ein streng; framsýningin hendir á vísara-síðuni við rel="nofollow noopener noreferrer" target="_blank" og einum sjónligum verti vístan saman við leinkju-tekstinum.

Umhugsan. Valfrítt umhugsanartekst skrivað av høvundinum ("hvat broyttist, hvat lærdi tú"). Sama NFC + fíggindarliga-bætis-vátting sum title. Tómt / bert-millumrúms inntak fellur saman til fráverandi á samansetingarstundini.

Skema-útgáva. v1 stuðlar bert verdict_version = 0x01. Komandi skema-broytingar økja hetta bætið og koma saman við einari nýggjari protokoll-útgávu sambært §12.


7. Innsiglingarprotokollur

Tann fullkomna innsiglingarrøðin. Hvørt stig er normativt.

 1. User composes plaintext and metadata in ComposeQub.
 2. Validate:
    a. body is non-empty.
    b. body size ≤ max for content_type and user tier (see §6).
    c. unlock_at is in the future.
    d. unlock_at ≤ created_at + 10 years.
    e. content_type is a known, supported value.
    f. visibility is 0x00 (private) or 0x01 (public).
 3. Compute body_hash = SHA3-256(body).
 4. Set created_at = current Unix seconds UTC.
 5. Select drand chain. Load chain_genesis_time and chain_period_seconds, and
    compute drand_round = floor((unlock_at - chain_genesis_time) / chain_period_seconds) + 1
    (§4.3). (Computed here, before qub_id, because drand_round is bound into the
    qub_id preimage—§4.1.)
 6. Compute qub_id (see §4.1), folding in drand_round from step 5.
 7. Construct QubEnvelope with all fields.
 8. Serialise QubEnvelope using canonical CBOR → bytes B.
    Assert: serialised output matches canonical profile (§3).
 9. Compute C = tlock_encrypt(B, drand_round, drand_chain_public_key).
10. Construct SealedQub with tlock_ciphertext = C and matching qub_id, version,
    visibility, unlock_at, drand_chain_id, and drand_round.
11. Serialise SealedQub using canonical CBOR → SealedQubCbor.
12. Select the delivery shape from visibility:
    a. Private (0x00): generate K = 32 random bytes and N = 12 random bytes
       using a CSPRNG. Compute W = wrap_sealed_qub(SealedQubCbor,
       qub_id=qub_id, key=K, nonce=N) per §13. Upload payload = W.
    b. Public (0x01): upload payload = bare SealedQubCbor; do not generate K.
13. Display seal-time disclosure. User confirms.
14. Validate upload eligibility via the qub upload service (bot-detection, entitlement, rate limits).
15. Submit the selected upload payload to the qub upload service. For a private
    browser seal, the service is byte-blind to the inner SealedQubCbor and never
    receives K. The Builder `/api/v1/seal` route is an explicit exception: it
    receives plaintext and caller-supplied K in memory, then persists neither.
16. Receive arweave_tx_id from the service. For private delivery, construct
    `<origin>/c/<arweave_tx_id>#<base64url(K)>` (or the equivalent short-code
    path). For public delivery, omit the fragment. Browsers do not transmit URL
    fragments to servers, so K from the browser-seal path is not observed by
    qub.social or any storage gateway.

Goymslumerkjalag (uttan fyri sniðið). Uppleggingartænastan hjá qub leggur eitt tilvitað lítið sett av goymslutransaktiónsmerkjum afturat valdu uppleggingarnýttulastini. Content-Type=application/octet-stream er normativt kravt. Tilvísingartænastan leggur harumframt trý valfrí merki afturat, tá ið høvundurin velur at vísa tey: Intent (loyvilista-váttað samansetingarætlan—announcement, thesis, prediction, letter, secret, commitment, proof ella skipanarútgivið verdict), Author (høvundans §9.3 almenn-lykla fingramerki sum 64 lágstavs hex-tekn) og Parent-Tx-Id (goymslutransaktiónskenni hjá foreldraqubinum fyri svarkeðjur, 43-tekna base64url).

Author-merkið er valfrítt fyri hvønn qub: tilvísingar-høvundaappin leggur tað bara afturat, tá ið brúkarin greitt virkjar almenna høvundatilskriving við innsigling. Tá skiftarin er sløktur—sum standard—verður einki Author-merki skrivað, og qubið er uttan høvundatilskriving í varandi goymslu: einki har bindur uppleggingina at handfangi, telduposti ella øðrum qub-um hjá høvundinum. Tá skiftarin er virkin, loysist Author-fingramerkið til valda @handle hjá høvundinum gjøgnum §9.5-váttanarkeðjuna. Svarkeðjusambond og Intent eru ikki eyðmerkjandi. Fyri privata veiting krypterar ytra umbúgvingin (§13) kenniliga innara SealedQub-artefaktið, so innheysting av goymdum umbúgvingum saman við almennum drand-undirskriftum framvegis ikki er nóg mikið til at endurfáa likamið uttan K; goymslumerkini eru tilvitað almenn metadáta.

Tilvísingartænastan leggur við vilja IKKI App-Name-, App-Version- ella Type-tag afturat: nakar slíkur einvirðis-filtur fór at skilað øllum qub-savninum aftur til eina GraphQL-fyrispurning, sum ikki samsvarar umbúgvingarinnar likams-bert loyndarumfang.

Ein samsvarandi verifiserari MÁ IKKI velta á nakað goymslupláss-tag fyri §11 triðjapartsverifikatión; likams-styttingin / qub_id / undirskriftin binda seg bert at innra CBOR, ongantíð at tag-settinum.


8. Avlæsingarprotokollur

Tann fullkomna avlæsingarrøðin. Hvørt stig er normativt.

 1. Viewer opens delivery URL. Extract arweave_tx_id from the path and retain
    the optional URL fragment. Do not assume a missing fragment is an error:
    public/bare delivery intentionally has no K.
 2. Check denylist. If tx_id is denylisted → display block message. Stop.
 3. Fetch the stored bytes (with multi-gateway fallback).
 3a. Resolve the delivery shape structurally:
    a. If the bytes parse as OuterWrapper, require a well-formed 32-byte K in
       the URL fragment, require wrapper version 0x01, and unwrap per §13.
       Any missing/malformed K or AEAD failure is a terminal error.
    b. Otherwise require the bytes to parse as bare SealedQubCbor; no K is
       required. If neither shape parses, report an integrity error.
 4. Parse SealedQubCbor → SealedQub.
 5. Validate: SealedQub.version is known (0x01), visibility is known, and the
    delivery shape matches it (wrapped = 0x00 private; bare = 0x01 public).
    Reject any mismatch or unknown value.
 6. If current time < SealedQub.unlock_at → display countdown. Poll or wait.
 6a. Round-binding check. Recompute expected_round from
    SealedQub.unlock_at per §4.3. Reject unless SealedQub.drand_round ==
    expected_round OR SealedQub.drand_round == expected_round - 1 (the
    legacy pre-release mapping—see §4.3), AND the round baked into the tlock
    ciphertext stanza (read via the age/tlock header, no signature required)
    == SealedQub.drand_round exactly. The stanza round is the one that
    actually gates decryption; without this check a malicious creator could
    bind the ciphertext to an already-past round while displaying a future
    countdown, so anyone reading the stored bytes could decrypt before
    unlock_at. Implementations with no chain identity (test mocks) skip this
    check.
 7. Once current time ≥ SealedQub.unlock_at:
    a. Fetch drand round signature for SealedQub.drand_round from drand network.
    b. Compute B = tlock_decrypt(SealedQub.tlock_ciphertext, round_signature).
 8. Parse B → QubEnvelope.
 9. Validate QubEnvelope.version is known.
10. Verify: SHA3-256(QubEnvelope.body) == QubEnvelope.body_hash.
    Fail → integrity error.
11. Verify: QubEnvelope.qub_id == SealedQub.qub_id.
    Fail → integrity error.
12. Verify: QubEnvelope.unlock_at == SealedQub.unlock_at.
    Fail → integrity error.
12a. Verify: QubEnvelope.outcome_at == SealedQub.outcome_at (both absent, or
    both present and equal). Fail → integrity error.
12b. Content re-derivation. Recompute qub_id per §4.1 from the decrypted
    fields — (QubEnvelope.version, content_type, created_at, unlock_at,
    outcome_at, SealedQub.drand_round, QubEnvelope.body_hash,
    title_hash(SealedQub.title)) — and verify it equals SealedQub.qub_id.
    Fail → integrity error. The pairwise checks in steps 10-12a only prove
    the two layers agree with EACH OTHER; a forger who rewrites a bound
    field consistently on both surfaces (a pre-reveal title swap, or a
    post-round body swap with a recomputed body_hash re-encrypted to the
    same round under the same qub_id) passes them all. Only re-deriving
    the identity from content closes this.
13. Verify: QubEnvelope.content_type is known and renderable.
    Known values: 0x01 (text), 0x03 (pact), 0x04 (verdict).
    Unknown → display error.
14. If QubEnvelope.sig_alg != 0x00 → verify author signature (see §9.4).
15. If cosigner_pubkey or cosigner_signature present → verify cosigner (see §9.7).
16. Render content using the appropriate renderer (see §10 for text and §6 for pact/verdict).
17. Construct RevealedQub for display.

9. Høvundaundirskriving

9.1 Grundgeving

qub-ar verða goymdir í varandi goymslupláss. Høvundaundirskriftir mugu verða ófalsanligar í alla framtíð, sum er orsøkin til, at v1.0 brúkar tað post-kvantum ML-DSA-65 skemað (FIPS 204) heldur enn eitt klassiskt skema, hvørs trygd kann minka innan qubsins varandi lívskeið.

9.2 Algoritmu-Skráseting

sig_alg Skema Lyklastødd Undirskriftarstødd Støða
0x00 Eingin undirskrift (óundirskrivað) — — Virkið
0x01 ML-DSA-65 (FIPS 204) 1.952 bæti 3.309 bæti Virkið
0x02 Ed25519 32 bæti 64 bæti Frátekin fasti; ikki stuðlað í protokoll v1

Vísarar fyri protokoll v1 MÚGVA avvísa øll virði uttan fyri {0x00, 0x01}, íroknað frátikna virðið 0x02. Frátøkan forðar óvart endurnýtslu; hon er ikki virking. Virking krevur stýrdu broytingina í §15.

9.3 Undirskrivað Forímynda-Bygning

Tvær forímynda-útgávur hava verið til. Allar undirskriftir MÚGVA brúka V2, og verifiserarar MÚGVA bert góðtaka V2. Tann gamla V1-forímyndin (skjalfest niðanfyri sum søgulig tilvísing) varð góðtikin sum ein loysn, ið bert varð brúkt til verifikatión, undir flytingini til V2; henda loysnin er nú avtikin, og ein undirskrift, sum bert byggir á V1, verður nú avvíst.

V2 (núverandi — framleidd av allari nýggjari høvundaundirskriving, og av báðum undirskriftum í pakt-sviðsetingar- / samundirskrivingar-gongdini):

sig_input = SHA3-256(
    "QUB_AUTHOR_SIG_V2"  ||    // domain separator (17 bytes)
    version              ||    // u8 (1 byte)
    qub_id               ||    // [u8; 32] (32 bytes)
    body_hash            ||    // [u8; 32] (32 bytes)
    unlock_at            ||    // i64 big-endian (8 bytes)
    0x00                 ||    // u8 (1 byte): MUST be 0x00 in v1.x
    sender_label_hash    ||    // [u8; 32]: SHA3-256(NFC(sender_label)),
                               //   or 32 zero bytes when absent
    reply_to_or_zero           // [u8; 32]: parent qub_id, or 32 zero
                               //   bytes when absent
)

// Total preimage: 155 bytes → 32-byte hash

signature = Sign(author_secret_key, sig_input)

sender_label_hash fylgir sömu fráverandi-sentinel-venju sum title_hash (§4.2.1): 32 null-bæti eru ikki eitt gildugt SHA3-256-úttak, so „fráverandi" kann ongantíð stoyta saman við eitt til staðar verandi heiti. Allir teigar eru fastbreiddir, so forímyndin er ótvíræð uttan longdarforskoyti.

V1 (gomul — AVTIKIN; ikki longur framleidd og ikki longur góðtikin við verifikatión):

sig_input = SHA3-256(
    "QUB_AUTHOR_SIG_V1"  ||    // domain separator (17 bytes)
    version              ||    // u8 (1 byte)
    qub_id               ||    // [u8; 32] (32 bytes)
    body_hash            ||    // [u8; 32] (32 bytes)
    unlock_at            ||    // i64 big-endian (8 bytes)
    0x00                       // u8 (1 byte): MUST be 0x00 in v1.0
)

// Total preimage: 91 bytes → 32-byte hash

V1-forímyndin vantaði sender_label og reply_to. Hon varð góðtikin sum ein loysn, ið bert varð brúkt til verifikatión, undir flytingini til V2; henda loysnin er síðani avtikin — verifiserarar MÚGVA bert góðtaka V2-forímyndina. Skilgreiningin verður varðveitt her sum søgulig tilvísing og til at greiða frá økisskiljaranum niðanfyri. Ein undirskrift, sum bert verifiserar móti V1, MÁ verða viðgjørd sum ein verifikatiónsfeilur.

Økisskiljarar: "QUB_AUTHOR_SIG_V1" / "QUB_AUTHOR_SIG_V2" eru hvør 17 ASCII-bæti ([0x51, 0x55, 0x42, 0x5F, 0x41, 0x55, 0x54, 0x48, 0x4F, 0x52, 0x5F, 0x53, 0x49, 0x47, 0x5F, 0x56, 0x31/0x32]). Eingin fylling. Tann ymiski skiljarin økisskilir báðar bygningarnar, so ein undirskrift yvir eina forímynd kann ongantíð verifisera sum hin.

org_id_present-bæti: bætið eftir unlock_at MÁ vera 0x00. Tilvísingar-ímótkomningin vísir hetta sum fastvirðið ORG_ID_PRESENT_INDIVIDUAL = 0x00 í crates/qub-core/src/signing.rs; vísarar, sum endurbyggja sig_input fyri verifikatión, MÚGVA senda út sama bæti.

Undirskriftarumfang — hvat er og er ikki fevnt. V2-sig_input bindur seg beinleiðis at version, qub_id, body_hash, unlock_at, sender_label og reply_to (umframt tann fasta økisskiljaran og org_id_present-bætið). qub_id verður sjálvur avleiddur úr version, content_type, created_at, unlock_at, outcome_at, drand_round og body_hash gjøgnum §4.1-forímyndina, so ein og hvør broyting á hesum teigum framleiðir ein annan qub_id og ger undirskriftina ógilduga transitivt. Tann beinleiðis-váttaða yvirvøddin er tí:

Teigur Váttaður av undirskrift Hvussu
version ✓ Beinleiðis inntak til sig_input
qub_id ✓ Beinleiðis inntak
body_hash ✓ Beinleiðis inntak
unlock_at ✓ Beinleiðis inntak
sender_label ✓ Beinleiðis inntak gjøgnum sender_label_hash (V2-forímynd — tann einasta góðtikna formin)
reply_to ✓ Beinleiðis inntak gjøgnum reply_to_or_zero (V2-forímynd — tann einasta góðtikna formin)
content_type ✓ Transitivt, gjøgnum qub_id-forímynd
created_at ✓ Transitivt, gjøgnum qub_id-forímynd
outcome_at ✓ Transitivt, gjøgnum qub_id-forímyndina
drand_round ✓ Transitivt, gjøgnum qub_id-forímyndina (V1.2)
body ✓ Transitivt, gjøgnum body_hash = SHA3-256(body)
author_pubkey — (undirskilt) Lykilin, sum verifiseraði undirskriftina, er høvundurin, sambært skilgreining
cosigner_pubkey / cosigner_signature — Sjálvstøðugt undirskrivað yvir sama sig_input (sí §9.7)
drand_chain_id, tlock_ciphertext, visibility — Ytri SealedQub-teigar, ikki innan í brævinum — fevndir av teirra egnu bygnaðar-stødufeingjum (runda / keðju-samsvar), men ikki av høvundaundirskriftini. (drand_round er nú bundið transitivt gjøgnum qub_id-forímyndina — sí omanfyri.)

Hví V2 er tann einasta góðtikna forímyndin.

Ímótkomningar, sum framsýna sender_label ella reply_to fyri endabrúkarum, MÚGVA vísa tann váttaða samleikan (alment-lyklað fingramerki, váttan) sum tað fremsta samleikasignalið, ikki heitið.

9.4 Verifikatiónsmannagongd

1. Read sig_alg from QubEnvelope.
2. If sig_alg == 0x00 → unsigned. No verification. Display "unsigned qub."
3. If sig_alg is unknown → reject. Display "unrecognised signature scheme."
4. Extract author_signature and author_pubkey. If either is absent → integrity error.
5. Reconstruct sig_input using fields from QubEnvelope (V2 formula, §9.3).
6. Verify(author_pubkey, sig_input, author_signature). The V2 preimage is the
   only accepted form — the legacy V1 fallback is retired (§9.3), so a
   signature that does not verify against V2 fails, full stop.
7. If verification succeeds → display "signed by [key fingerprint]."
8. If verification fails → display "signature verification failed."

Undirskriftarverifikatión er tann dýrasta atgerðin (serliga ML-DSA-65). Hon EIGUR at verða gjørd eftir, at allar bíligari kanningar (stytting, qub_id, unlock_at) eru væleydnaðar.

9.5 Samleika-Váttanir

Samleika-váttanir — kortleggingin av author_pubkey til mennisklig-kennaligar samleikakrøv sum eitt qub-handil, teldupostadressu, sosialt handil ella passlyklareingisbevís — eru ein vísara-síðu progressiv betran og verða ikki kravdar fyri undirskriftarverifikatión. Vísarar, sum loysa váttanir upp til ein framsýningarsamleika, MÚGVA brúka raðfestingina:

handle > email > social > fingerprint

Fingramerki-uppgávan er tann lágstavur hex av SHA3-256(author_pubkey); hon er altíð tøk fyri nakran undirskrivaðan qub. Vísarar KUNNU stytta hana fyri framsýning — tilvísingar-vísarin framsýnir qub: fylgt av tey fyrstu og tey síðstu fýra bætini (qub:<8 hex>…<8 hex>).

Ein samsvarandi verifiserari kann fullføra hvørja kanning í §9.4 uttan at samband við qub-API, uttan nakað net umframt varandi goymslupláss og drand, og uttan nakra ambætara-síðu uppfletting. Váttanarloysing er eitt skilt besta-royndar stig, sum bert verður gjørt eftir, at undirskriftarverifikatión hevur eydnast.

9.6 Støddaráhrørsla

Ed25519 ML-DSA-65
Undirskrift 64 bæti 3.309 bæti
Alment lyklað 32 bæti 1.952 bæti
Tilsamans fyri hvønn qub 96 bæti 5.261 bæti
Goymslupláss-kostnaðarmunur (við ~$5/MB) ~$0.0005 ~$0.026

Fyri ein tekst-qub av 500–2.000 bætum tríðfaldar ML-DSA-65 grovt tann goymdu støddina. Tann absoluti kostnaðurin er ómunaligur.

9.7 Samundirskrivara-Verifikatión (Pakt Tvíhliða Semjur)

Fyri tvíhliða semjur (content_type = 0x03) prógvar eitt annað undirskriftarlag, at báðir partar samtyktu somu treytir.

Brævateigar:

Báðir teigar MÚGVA vera til staðar saman ella báðir fráverandi. Um júst ein er til staðar, MÚGVA vísarar fráboða ein heildarfeil.

Verifikatiónsmannagongd:

1. If cosigner_pubkey absent and cosigner_signature absent → no cosigner. Done.
2. If exactly one is present → integrity error.
3. Verify cosigner_pubkey != author_pubkey (prevent self-cosigning).
   Fail → display "cosigner pubkey must differ from author."
4. Reconstruct sig_input using the same formula as §9.3 (V2 only — the
   legacy V1 fallback is retired; all pact clients produce V2 signatures).
5. Verify(cosigner_pubkey, sig_input, cosigner_signature).
6. Success → display "co-signed by [cosigner fingerprint]."
7. Failure → display "co-signature verification failed."

Eginleikar:

Teldupost-bindingar-gátt (rakstrarlig). Tá ið ein sviðsettur paktur ber ein Parts B-teldupostsamband (§6.1), MÁ qub-upphalanartænastan nokta samundirskrivingar-umbønini, uttan so at ein stuttlívd teldupost-váttingarmerking finst, sum samsvarar bæði sviðsetingareyðmerkingini og normaliseraða-teldupost-styttingini av tí sambandinum. Merkingin verður skrivað av /api/v1/auth/verify, tá ið maginlink-teknið ber eitt staging_id og tað verifiseraða adressuið samsvarar SHA-256(normalise_email(party_b.contact)) — har normalise_email(addr) varðveitir lokala-partsins stavstødd og lágstavar bert økispartin (sambært RFC 5321 §2.3.11), og SHA-256 her er NIST FIPS 180-4 styttingin (ymisk frá tí SHA3-256, sum verður brúkt í §4-avleiðingum) — og rennur út 900 sekund (15 minuttir) eftir útgávu. Hetta er ein rakstrarlig anti-eftirlíkingar-gátt, IKKI partur av tí á-keðju qub-prógvi — ein triðjaparts-verifiserari, sum endurspælir §11, tørvar bert varandi goymslupláss og drand, uttan nakra ambætara-síðu uppfletting. Merkingin finst bert ambætara-síðu og er ongantíð partur av tí undirskrivaða likami.

Støddaráhrørsla (ML-DSA-65 høvundur + samundirskrivari):

Eind Stødd
Høvundaundirskrift 3.309 bæti
Høvunda alment lyklað 1.952 bæti
Samundirskrivara-undirskrift 3.309 bæti
Samundirskrivara alment lyklað 1.952 bæti
Tilsamans kryptografisk eyka-byrði 10.522 bæti
Goymslupláss-kostnaðarmunur ~$0.05

10. Markdown Framsýning og Reinsing

Hesin parturin er trygdar-avgerðandi. Vísarin framsýnir tekst-qub-ar (content_type = 0x01) við einum avmarkaðum Markdown-undirsetti.

10.1 Loyvd Eind

10.2 Forboðin Eind

Eind Viðgerð
Ráur HTML (<div>, <script>, o.s.fr.) Strikað heilt og holt. Ongin HTML sleppur ígjøgnum.
Myndir (![alt](url)) Strikaðar. Mynda-syntaks verður tikið burtur úr úttaki.
Leinkjur ([text](url)) URL framsýnd sum sjónligur reintekstur. Ikki sjálvleinkjað. Ikki klikkilig uttan uttrýkiliga brúkaraatgerð.
Vandamiklir URL-skemar javascript:, data:, vbscript:, file: — strikaðir.
Iframes, innteknaðir, lutir Strikaðir.
HTML-eindir Avkodaðar til framsýningartekn bert um trygt.

10.3 Ímótkoming

Ímótkomningar MÚGVA brúka ein strangan loyvilista-tólkara, ikki ein avvísingarlista. Tann viðmæltu atgerðin:

  1. Tólka Markdown við pulldown-cmark (ella javnvirði).
  2. Gang gjøgnum AST og slepp nakran node, sum ikki er á loyvilistanum (§10.1).
  3. Fyri leinkju-nodes: send út URL sum sjónligan tekst, ikki sum eitt klikkiligt <a>-element.
  4. Umset tann filtreraða AST til eina slag-defineraða millumframsetting (t.d., ein MarkdownNode-enum við bert tryggum variantum). Ráur HTML er bygnaðarliga ófyriskipanligur í hesi IR.
  5. Framsýn úr tí slag-defineraðu IR til mál-vísarlagið (t.d., reaktiv vísarkomponentir, DOM-nodes). Eingin HTML-rein-samanseting ella innerHTML á nøkrum tíðspunkti.

Avvísingarlista-atgerðir eru veikar, av tí at nýggj Markdown-víðkanir ella tólkara-eyðkenni kunnu innføra ófiltreraðar eindir. Tann slag-defineraða AST-atgerðin gerð XSS bygnaðarliga ómøguligt — har er eingin variantur, sum kann bera tilvildarligan HTML.

10.4 Størri- og Bygnaðarmark


11. Triðjapartsverifikatión

Ein og hvør triðjipartur, sum hevur goymdu bætini (og K fyri eitt privat/innpakkað qub), kann vátta dulmálsliga artefaktið uttan samstarv frá qub. Ein sjálvstøðugt tíðarstemplað fullyrðing um tilveru krevur harumframt antin váttaða íroknan í varandi goymslu fyri tað einstaka qubið ella eitt váttað prógv úr §16-gjøgnumskygni-logginum.

1. Obtain the stored bytes. For a private delivery, also obtain K from the
   delivery-link fragment.
2. Resolve the delivery shape (§8 step 3a): unwrap OuterWrapper with K, or
   accept bare SealedQubCbor. Require shape/visibility agreement.
3. Parse SealedQubCbor → SealedQub; validate protocol version, visibility,
   content type, chain identity, and structural bounds.
4. Recompute expected_round from unlock_at (§4.3); require the stored round
   (allowing the documented legacy minus-one case) and ciphertext-stanza round
   to agree exactly as §8 step 6a specifies.
5. Obtain the drand signature for SealedQub.drand_round and verify its BLS
   signature against the pinned chain public key.
6. tlock_decrypt(tlock_ciphertext, round_signature) → QubEnvelope CBOR bytes.
7. Parse → QubEnvelope.
8. Verify SHA3-256(body) == body_hash.
9. Verify envelope/sealed equality for qub_id, unlock_at, and outcome_at.
10. Recompute qub_id from the decrypted fields, sealed drand_round, and title;
    require it to equal the carried qub_id (§4.1).
11. If sig_alg != 0x00, verify the V2 author signature (§9.4). If cosigner
    fields are present, verify their pairing, key separation, and signature
    (§9.7).
12. For an existence-time claim, independently verify either:
    a. the permanent-storage transaction's data-to-id binding, owner, block
       inclusion, and block timestamp; or
    b. a §16 inclusion proof through its pinned anchor and anchor block time.
13. Report each verified claim separately; do not collapse an absent storage
    or anchor proof into a successful timing verdict.

Hvat váttan prógvar:

Prógvinntak Hvat tað staðfestir
Gildugur búnti / innsiglað artefakt + drand-undirskrift Endurfingna likamið samsvarar body_hash; metadáta, sum eru bundin í qub_id, eru óskalað; dulmálsteksturin er bundin at uppgivna drand-umfarinum; og umfarið er farið. Hetta staðfestir ikki, nær dulmálsteksturin varð gjørdur.
Gildug V2-høvunda-/samundirskrift Eigari/eigarar av samsvarandi loynilykli/lyklum váttaðu undirskrivaðu yvirflatuna í §9.3.
Sjálvstøðugt váttað goymslutransaktión fyri einstaka qubið Nákvæmi goymdi dulmálsteksturin var til í seinasta lagi við blokktíðarmerkið.
Gildugt ankrað prógv úr gjøgnumskygni-logginum Fullyrðingin fyri slagið av blaði í §16.11, íroknað eitt evsta bindingartíðarmark frá ankarblokkinum.

Hvat váttan IKKI prógvar:

Ikki-prógv Hví
Høvundaskapur sender_label er pyntandi. Uttan sig_alg ≥ 0x01 kundi nakar hava innsiglað hetta innihaldið.
Ætlan Artefaktið prógvar bæti og dulmálslig sambond, ikki hvat høvundurin hugsaði.
Undanfarandi binding úr .qub einsamøllum Ein høvundur kann gera ein gildugan búnta eftir, at bundna umfarið er farið. Innbygda drand-undirskriftin prógvar, at umfarið er farið, ikki at dulmálsteksturin var til áðrenn.
Nákvæm tíð fyri innsiglingarknøttin Eitt goymslu- ella ankarblokktíðarmerki er eitt sjálvstøðugt váttanarligt evsta mark og kann koma eftir staðbundnu atgerð brúkarans. sealed_at / received_at-fullyrðingar eru ikki próvfastar.

Íverksetti gjøgnumskygni-loggurin (§16) víðkar váttan tvørtur um qub-ar við manipulatiónsávísandi raðseting og einum álitsleysum evsta bindingartíðarmarki (ankarblokktíðin), avmarkað eftir blaðslagi (§16.11). Hann leggur ikki høvundskap ella ætlan afturat; fyri vanligu bæti-blindu uppleggingarleiðina prógvar hann ikki sjálvur body_hash ella drand_round, sum framvegis koma úr artefaktkanningunum.


12. Útgávu- og útgávustýring

Skjalaútgávur, innari tráðaprotokollur og ytri umbúgving eru trý ymisk útgávurúm. Ein greiðing, sum bara broytir skjalið, broytir tí ikki tigandi bætini, og ein framtíðar tráðaflyting kann ikki látast vera ein ritstjórnarlig rætting.

12.1 Skjalaútgáva

Henda fyriskipanin nýtir semantiskar skjalaútgávur (MAJOR.MINOR.PATCH) og eitt óbroytiligt Git-merki við navninum protocol-v<release>.

Útgávustøðan er ein av Uppkast (enn ikki normativ), Galdandi (eina viðmælda málið fyri íverksetan) ella Avloyst (varðveitt fyri søguliga váttan). Leiðin /protokoll uttan útgávunummar vísir galdandi útgávu; útgávumerkið varðveitir nágreiniligu kelduna og hvørt mál, sum varð útgivið saman við henni. Broyting av støðu ella útgávunummari krevur, at henda talvan og útgávusøgan verða dagførdar í somu endurskoðaðu broyting.

Skjalaútgáva Gildiskomudagur Støða Tráðaprotokollur Umbúgving Kelda
1.0.0 2026-09-23 Galdandi 0x01 0x01 protocol-v1.0.0

Skjalaútgávan verður ikki raðfest inn í protokollartefakt og er ikki tann sama sum SealedQub.version.

12.2 Protokollútgáva

version-teigurin (u8) í bæði SealedQub og QubEnvelope eyðmerkir høvuðs-protokollútgávuna.

12.3 Protokollútgávusøga

Útgáva Virði Lýsing
v1 0x01 Privat/innpakkað og alment/bert veiting; tekst- (0x01), sáttmála- (0x03) og úrskurðarlikam (0x04); ML-DSA-65 V2 høvunda-/samundirskriving; drand quicknet tlock; SHA3-256.

12.4 Framkompatibilitetur

Ein v1-vísari, sum møtir einum QubEnvelope við ókendum CBOR-kortlyklum (lyklar ikki í §3.2-kanonisku raðsetingini), MÁ avvísa tað við einum avkodingarfeili (§3.1). Framkompatibilitetur hvílir á version-teiginum, ikki á toli fyri ókendum lyklum: framtíðar viðbøtur — sjálvt smá metadáta — verða givnar út undir einum nýggjum version-virði, sum ein v1-vísari avvísir við einum greiðum "nýggjari protokollur"-feili, heldur enn tigandi at sleppa innihaldi burtur, sum undirskriftirnar binda seg at.

Ein v1-vísari, sum møtir sig_alg = 0x01 (ML-DSA-65) men manglar ML-DSA-65-verifikatiónsstuðul, EIGUR at framsýna qub-innihaldið við einum "undirskrift til staðar men ikki verifiserandi"-fráboðan, ikki at avvísa qub-in heilt. Tilvísingar-ímótkomningin í dag avvísir hvørt sig_alg-virði annað enn 0x00 og 0x01, av tí at v1-skrásetingin inniheldur ongan annan gildugan algoritm — strangt avvísing og bløyt-feilur eru observatiónsliga eins, fram til ein triði algoritmur verður skrásettur. Tann bløyt-feilar-atferðin omanfyri verður byrðiberandi, tá ið §9.2 sleppir inn eini nýggjari innfeti, og tilvísingar-vísarin verður dagførdur til at bløyt-feila á tí tíðspunkti.

12.5 Ytri Umbúgvingsútgáva

Tann OuterWrapper, sum er lýstur í §13, ber sína egnu version-bæti, óheft av SealedQub.version og QubEnvelope.version. Tey tvey útgávuríini menast hvør sær: ein framtíðar post-kvantum-tryggur symmetriskur avloysari lyftir umbúgvingar-bætið uttan at nerta innra protokollútgávuna, og ein framtíðar protokollag-viðbót (t.d., ein nýggjur brævateigur) lyftir innra útgávuna uttan at nerta umbúgvingar-bætið.

OUTER_WRAPPER_VERSION_* Virði Algoritmur Støða
OUTER_WRAPPER_VERSION_1 0x01 AES-256-GCM við 12-bæti nonce, 16-bæti váttanartag, AAD bundið at qub_id Virkin fyri privata veiting
— 0x02–0xFF Varðveitt Framtíð

Vísarar MÚGVA avvísa ókendar umbúgvingsútgávur við einum greiðum feili. Protokollurin heldur við vilja umbúgvingsútgávuríið smátt, fram til ein nakanligur flytingar-fyrisláttur kemur fram (t.d., NIST-vegleiðing, sum yndir ein annan AEAD); eitt 0x02-pláss verður tillutað í somu broyting, sum innførir algoritmin.


13. Ytri Krypteringarumbúgving

13.1 Grundgeving

Protokollagini (QubEnvelope → tlock → SealedQub) gera ein innsiglaðan qub tíðarlæstan: likamið er ólesiligt fram til unlock_at og drand-runda-undirskriftin hevur verið útgivin. Eftir avlæsing er runda-undirskriftin tó alment, og tann kanoniska CBOR-lagin av SealedQub er kennilig, so ein høstari, sum skrásetti varandi-goymslupláss handlar, kundi masseavkrypterað alt qub-savnið.

Fyri privata veiting stongir ytra krypteringarumbúgvingin hesa rásina við einum eyka symmetriskum AEAD-lagi millum kanoniska SealedQubCbor og goymdu bætini. Á innsiglingarleiðini í kagaranum livir 256-bita lykilin K bara í URL-brotinum av veitingar-URL'ini og á brúkaraeindum; kagar senda ikki URL-brot til ambætarar, so qub.social, allar goymslugáttir og øll CDN frammanfyri eru blind fyri K. Goymda umboðan hjá einum privatum qubi er tí ógjøgnumskyggjur dulmálstekstur, hvørs reintekstur ikki kann endurfáast uttan URL'ina, sum høvundurin valdi at deila. Almenn veiting letur við vilja hetta lagið vera burtur (§13.8).

Net-úrslit:

13.2 Lagaseting

plaintext body                       ← QubEnvelope.body (§2.2)
  ↓ canonical CBOR (§3)
envelope CBOR
  ↓ tlock encrypt to drand round (§7 step 10)
tlock_ciphertext (inside SealedQub) (§2.3)
  ↓ canonical CBOR (§3)
SealedQubCbor bytes                  ← inner wire artifact
  ├─ public (visibility=0x01) ───────────────▶ stored directly (§13.8)
  └─ private (visibility=0x00)
       ↓ AES-256-GCM(K, nonce, AAD=qub_id) (§7 step 12, this section)
     OuterWrapper CBOR bytes         ← stored private payload

Innsigling og avlæsing á protokollaginum (§7, §8) eru óbroyttar undir umbúgvingar-markinum; umbúgvingin festist á kallstaðnum hjá seal() og loysist á kallstaðnum hjá unlock().

13.3 OuterWrapper Dátubygnaður

struct OuterWrapper {
    version:    u8,           // 0x01, see §12.5
    qub_id:     [u8; 32],     // copied from inner SealedQub; AEAD AAD
    nonce:      [u8; 12],     // 96-bit AEAD nonce
    ciphertext: Vec<u8>,      // AES-256-GCM(K, nonce, SealedQubCbor, AAD=qub_id) || 16-byte tag
}

Teig-stødufeingi.

CBOR-raðfesting. Kanoniskt CBOR sambært §3, við somu lyklaraðsetingar-regluni (raðað eftir raðfestari bætilongd vaksandi, so leksikografiskt). Teir fýra lyklarnir eru:

Lykil Raðfest bæti Raðseting
nonce 6 1
qub_id 7 2
version 8 3
ciphertext 11 4

Tað fyrsta bæti av OuterWrapper-CBOR er tí tann ávísa-longdar kort-høvur fyri eitt 4-innfetis kort (0xA4).

13.4 AAD-Binding at qub_id

Umbúgvingin bindur qub_id sum AEAD eyka váttaða dáta. Hetta er tann byrðiberandi bygnaðarliga vørnin móti trimum sløgum av álopum:

Álop Vørn
Flyt dulorð undir ein annan qub_id-teig í umbúgvingini AAD-misrætt → AEAD-vátting dettur
Blanda URL-brotið av qub A við goymdu bætini av qub B Skeivur lykil (og sjálvstøðugt bundið AAD) → AEAD-vátting dettur
Manipulera qub_id-teigin í umbúgvingini eftir upphalan AAD-misrætt → AEAD-vátting dettur

At bera qub_id í umbúgvingar-reintekstinum veikir ikki uppteljingar-ónæmi munandi — qub_id er sjálvur ein SHA3-256-stytting av §4.1-forímyndini uttan nakra endurfáanliga forímynd úr styttingini, og ein uppteljari, sum longu hevur høstað umbúgvingar-bætini, lærir einki av tí sjónliga qub_id, sum hann ikki kundi sluttað sær til frá tilveruni av sjálvari upphalanini.

13.5 Umbúgvingar- og Avumbúgvingar-Algoritmar

wrap_sealed_qub(SealedQubCbor S, qub_id Q, key K, nonce N):
    require K.len() == 32 and N.len() == 12 and Q.len() == 32
    I := canonical_cbor_decode(S) as SealedQub
    require I.qub_id == Q               // reject mismatched caller AAD
    C := AES_256_GCM_encrypt(key=K, nonce=N, msg=S, aad=Q)
    // C includes the 16-byte authentication tag at the end
    return canonical_cbor_encode(OuterWrapper{
        version:    0x01,
        qub_id:     Q,
        nonce:      N,
        ciphertext: C,
    })

unwrap_sealed_qub(OuterWrapper bytes W, key K):
    require K.len() == 32
    O := canonical_cbor_decode(W) as OuterWrapper
    require O.version == 0x01           // §12.5
    P := AES_256_GCM_decrypt(
            key=K, nonce=O.nonce, ciphertext=O.ciphertext, aad=O.qub_id
         )
    // any AEAD failure → DECRYPT_FAILED, indistinguishable to caller
    S := canonical_cbor_decode(P) as SealedQub
    require S.qub_id == O.qub_id       // explicit inner/outer cross-check
    return P                            // P is the validated SealedQubCbor

Feilstøðu-samanfall. Skeivur K, skeivt nonce, AAD-misrætt og manipulerað dulorð framleiða øll sama DECRYPT_FAILED-feil. Hetta er ein viljaður AEAD-eginleiki: at skilja feilstøðuna fór at gjørt eina síðukanal, sum ein fjar-álopsmaður kundi probað við at senda misformaðar umbúgvingar og taka tíð á svarinum. Tilvísingar-ímótkomningar MÚGVA samanfella allar AEAD-feilir til eina einasta feil-formi.

13.6 Lyklatilfar og Útbýti

Umbúgvingar-lykilin K er eitt 256-bita javnt tilvildarvirði, framleitt fyri hvønn qub av einum CSPRNG. Tilvísingar-ímótkomningarnar fáa hann frá:

Útbýti: K MÁ verða raðfest sum URL-trygt base64 (RFC 4648 §5, eingin fylling) og lagt afturat avgreiðslu-URL sum brot-eindina:

delivery_url = <origin>/c/<arweave_tx_id>#<base64url(K)>

Brotið verður ongantíð sent til nakan ambætara av einum samsvarandi kaga. Endurfáanarkanalar (ambætara-síðu søguskráseting, valfríur teldupost-sjálvsending), sum varðveita tann fulla avgreiðslu-URL — íroknað brotið — út um brúkarans tóleind, eru eitt skilt skifti móti tí sjálvsettu krypto-smildru-støðuni og MÚGVA verða gátta á uttrýkiligu brúkarasamtykki.

Brot-tap. Um ein brúkari missir URL-brotið og hevur ongan endurfáanarkanal, er qub ólesiligur. Hetta er tað byrðiberandi skiftið í sniðnum og MÁ verða greitt frá fyri brúkaranum á innsiglingartíð. MVP styrkir innsiglingartíðar-frágreiðingina við uttrýkiligum "goym hendan URL"-tekst og einum verifiseraðum-teldupost endurfáanarkanali fyri brúkarar, sum velja tað.

13.7 Utanmark fyri Hendan Partin

13.8 Almennir qub-ar (umbúgvingar-burturlating)

Tann ytri umbúgvingin er valfrí á avgreiðslulaginum. Ein høvundur kann innsigla ein qub sum almennan, og í tí føri fer tann kanoniski SealedQubCbor beinleiðis inn í goymslutilgongdina, uttan nakað OuterWrapper-lag og uttan nakran lykil K:

SealedQubCbor bytes  ──(public)──▶  stored as-is
SealedQubCbor bytes  ──(private)─▶  AES-256-GCM(K, …) ▶ OuterWrapper ▶ stored

Ein almennur qub er tíðarlæstur men ikki leinkju-stýrdur: hann verður verandi ólesiligur fram til drand-runda hansara verður útgivin (tlock-lagið er óbroytt), men eftir avlæsing kann hvør, sum hevur samleikan hjá goymsluhandlinum, avkryptera hann — eingin URL-brot-eind er kravd, tí einki K er. Hetta er tað viljaða skiftið fyri yvirbríkar, sum ambætarin má dríva: avdúkingar-fráboðanar-teldupostar, fragmentleysir oEmbed-/sjálvvirknir embed-leinkjur og ríkari eftir-avdúkingar-SEO krevja øll eina leinkju, sum riggar uttan ein loyndarleynd, sum ambætarin ongantíð heldur (§13.6). Ein privatur qub kann framvegis nýta tað úttrykkiliga sniðið <qub-embed src="full_delivery_url">, tá útgevarin letur fulla førleikan við brotinum fylgja.

Avleiðingar, sum ein framleiðari MÁ taka hædd fyri:

Privatur (umbúgvdur) verður verandi sjálvsettur; almennur er eitt uttrýkiligt høvunda-val fyri hvønn qub.


14. Royndarvektorir

14.1 qub_id Avleiðing

Input:
  version      = 0x01
  content_type = 0x01
  created_at   = 1735689600 (2025-01-01 00:00:00 UTC)
  unlock_at    = 1736294400 (2025-01-08 00:00:00 UTC)
  outcome_at   = absent
  drand_round  = 4695446  (= floor((1736294400 - 1595431050) / 30) + 1, §4.3 mapping, drand mainnet params §14.2)
  body         = "Hello, future."  (UTF-8, 14 bytes)
  title        = absent

Intermediate:
  body_hash  = SHA3-256("Hello, future.")
             = 76ab8b3f843c6ed4f2d0fd75b9f457b4
               ad49dd4450f9c22723ae430e3af3211d
  title_hash = [0u8; 32]   (title absent — §4.2.1 sentinel)

Domain separator (10 bytes):
  [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00]

Preimage (108 bytes—current protocol v1):
  domain_separator    ||  // 10 bytes
  0x01                ||  // version
  0x01                ||  // content_type
  0x0000000067748580  ||  // created_at as i64 big-endian (1735689600)
  0x00000000677DC000  ||  // unlock_at as i64 big-endian (1736294400)
  0x0000000000000000  ||  // outcome_at_or_zero (outcome_at absent)
  0x000000000047A596  ||  // drand_round as u64 big-endian (4695446)
  body_hash           ||  // 32 bytes
  title_hash              // 32 bytes (all-zeros sentinel; title absent)

Expected output:
  qub_id = SHA3-256(preimage)
         = 4a84e3dfaec32954949c30073f8e6506
           fd3204c1bb97f9162b81c7587afe412e

Ímótkomningar MÚGVA framleiða eins body_hash- og qub_id-virði fyri hetta inntakið. Hesin royndarvektorin EIGUR at vera tann fyrsta eindarroyndin, sum verður skrivað. Tey kanonisku virðini omanfyri vórðu roknað av tilvísingar-ímótkomningini og MÚGVA samsvara bita fyri bita. Søguligar forímynd-skipanir (fyrr-byrjan — eingir livandi qub-ar veltu á hesum): tann 92-bæta V1.0 qub_id var 3d9fc2390eab043d38a1669ed3b71be76f9eefe872b9569ab1aaa027b88392b0; tann 100-bæta V1.1 qub_id (eftir at outcome_at_or_zero varð felt inn) var b0d032898ad629795150fdcb3f84e518f59ed05b7a2a82bc24ebdb87f52144ed. V1.2 fellir drand_round inn og økir økisskiljaran til QUB_ID_V2.

14.2 Avlæsingarrunda-Kortlegging

Input:
  unlock_at           = 1735689600
  chain_genesis_time  = 1595431050
  chain_period_seconds = 30

Calculation:
  (1735689600 - 1595431050) / 30 = 4675285.0
  floor(4675285.0) + 1 = 4675286

drand_round = 4675286

14.3 Kanoniskt CBOR Hringferð

Ímótkomningar MÚGVA vátta, at serialize(parse(serialize(qub))) == serialize(qub) fyri øll gildug inntøk. Hetta er ein eginleikaroynd, ikki ein einstakur vektorur.

14.4 PactTerms CBOR (content_type 0x03)

Input:
  pact_version = 1
  title        = "Scooter deposit"
  terms        = [
    { key: "Item",    value: "Honda Metropolitan scooter" },
    { key: "Price",   value: "$100" },
    { key: "Deposit", value: "$10" }
  ]
  party_a      = { label: "Alice" }
  party_b      = { label: "Bob", contact: "bob@example.com" }
  notes        = absent

Canonical CBOR key order (PactTerms):
  "notes"(6) < "terms"(6) < "title"(6) < "party_a"(8) < "party_b"(8) < "pact_version"(13)

Canonical CBOR key order (PactTerm):
  "key"(4) < "value"(6)

Canonical CBOR key order (PartyIdentifier):
  "label"(6) < "contact"(8)

Tey kanonisku CBOR-bætini og SHA3-256 body_hash verða roknað av tilvísingar-ímótkomningini. Ímótkomningar MÚGVA framleiða bæti-eins CBOR fyri hetta inntakið.

Ímótkomningar MÚGVA eisini vátta, at serialize(parse(serialize(pact))) == serialize(pact) fyri øll gildug PactTerms-inntøk (eginleikaroynd).

14.5 Ytri Umbúgving Tvørmáls-Vektorir

Tann ytri umbúgvingin (§13) hevur eina sjálvstøðuga kanoniska grundgrein á crates/qub-core/tests/vectors/wrapper_v1.json. Hvørt føri fastsetur eitt (key, nonce, qub_id, sealed_cbor)-tupul sum ógjøgnumskygd hex-inntøk og áseta eitt ávíst expected_wrapper_hex-úttak. Báðar tilvísingar-ímótkomningarnar nýta sama JSON-fílu:

Grundgreinin fastsetur í løtuni trý lágtøknilig umbúgvingarføri. Tey royna deterministiska OuterWrapper-enkoding og AEAD-samsvar óheft av veitingarskapstreytini í §13.8; serliga gera søguliga navnið basic-text-public og innara visibility = 0x01 ikki tey innpakkaðu bætini til eina samsvarandi almenna veiting. Ein framleiðari MÁ framvegis goyma almenn innarabæti ber og bara pakka privat (0x00) innarabæti inn.

Føri Fevjing
basic-text-public Søguligt lágtøkniligt navn. Minsta veruliga SealedQub-skapið, uttan valfríar teigar; roynir bara umbúgvingarbæti og er ikki ein samsvarandi §13.8-goymd veiting.
with-recipient-pubkey SealedQub við recipient_pubkey settum (frátekin framtíðarleið). Roynir eitt annað innara CBOR-lyklasett; serstaka innihaldið í grundgreinini gevur sjálvstøðugt eitt annað qub_id (recipient_pubkey er ikki sjálvur í §4.1-forímyndini).
longer-body ~4 KiB likam — royna fleirbæti CBOR-longdar-forskriftir innan í bæði innra brævinum og ytra dulorðinum.

Ímótkomningar MÚGVA framleiða bæti-eins expected_wrapper_hex fyri tey skrásettu inntøkini. At endurgenera grundgreinina krevur QUB_REGEN_VECTORS=1 cargo test -p qub-core --test wrapper_vectors og er varðveitt fyri skildar snið-broytingar.


15. Krypto-Profil Stýring (Framtíð)

Hesin parturin er upplýsandi fyri v1 og verður normativur fyrstu ferð, eitt annað algoritmur fer inn í nakra av qubs kryptografisku grundleggjandi eindunum.

15.1 Núverandi Støða

Protokollur v1 bindur júst ein algoritm fyri hvørt grundleggjandi eind:

Váttararnir fastkoda í dag lykla- og undirskriftslongdir fyri hvørja virkna grundeind. Bætini fyri sig_alg og umbúgvingsútgávu eru greiðir veljarar, men v1 samráðist ikki um tey í bandinum og loyvir bara virknu virðunum omanfyri.

15.2 Ætlaða Lag

Tá ið eitt annað algoritmur fer inn í protokollin, verður verifiserarin settur upp fyri ein nevndan CryptoProfile (t.d., ExqubV1), sum listir tað júst settið av loyvdum virðum fyri hvørt grundleggjandi eind — sig_algs, drand-keðjur, umbúgvingsútgávur, innihaldsslag. Profilið er fastsett á verifikatiónstíð, ongantíð samhandlað í-band. Hvørt virði uttanfyri tað virkna profilið verður avvíst.

Hetta tryggjar, at at leggja ML-DSA-87 afturat ella at virkja Ed25519 kann ikki afturvirkandi veikja tilstaðarverandi verifiserara-uppsetingar: ein v1-verifiserari verður verandi ein v1-verifiserari, sjálvt eftir at eitt v2-profil er útgivið.

15.3 Útloysingartreytir

Lyft §15 til normativa støðu, tá ið nakað av tí fylgjandi verður fyriskotið:

Til tá er §15 ein staðhaldari, sum fastsetur flytingar-lagið, so framtíðar PRar lenda móti einum kendum máli heldur enn at endurmeta samhandlingar-yvirvøddina frá byrjan.


16. Flogavísari fyri gagnsæi og haldføri stig (Innført — gjøgnumgangur liðugur)

Støða. Hetta kapituli er framkvæmd (W5/UP-B1, Stig 1–8), við framleiðaranum og trúðarrotarspørkinum nevnt her. Teinformatiónirnar, hash-ingar, og virknarleiðirnar eru livandi: kjarnan Merkle + kanoniska CBOR-typurnar (qub-core), TypeScript-spegl + ANS-104 bólingarveitari (workers/api/src/crypto/), tann einstaka rithøvundurin LogDO + samansett R2 knútavøra við kordinataleysing, tann /upload log-append roynd, dagligu akker + bundler-drain crons, ta GET /api/v1/qub/:tx_id/proof (innihald) og GET /api/v1/log/consistency (RFC 9162) próv-endpoint, tað týpda viðfaringarpróvið ið verður borið í .qub pakki (§17.5), tann innføddi ANS-104 akkerispróvarin (tools/qub-verify), og teir báðu sjálvútgivnu høvdingarnir kroka (§16.6). Ein eydnusamur /upload er altíð R2-viðhaldsfastur, men er bert logg-dekkaður tá LOG_DO er stillað upp og inline-viðførsla eydnast; bert tá ber svar hennara log_seq, receipt, og anchor_status. Um RECEIPT_SK er fjarverandi ella ógyldig, tann kvittan sig_b64url er tóm og veitir onga trygging fyri, at tað ikki kann batast. Núverandi /seal og sáttmálans útgávustíggið skrásetir einstakar Arweave-transaktiónir, men leggur ikki afturat ein log-bløð. Onkur kóði fremur í løtuni ikki /upload viðmerking umframtlagt seinni sáttmála eftir eitt viðbótarbrest. W5 uttanlands kanning er liðug: §16.15 skrivar hönnunaravgerðir og startmøguleikar, men hesi avmarkingar víðka ikki framleiðaradekningina sum fyrr er sagt. Trý trúnaðar-/útflytingarliðir eru framvegis avmarkaðir: (a) tann serstaka akkerispungin (ANCHOR_JWK; LogProfile.anchor_owner er framvegis tað [0xAB; 32] plásshildari); (b) kvittan undirskriftarlykilin og samsvarandi almenn-lyklapin (RECEIPT_SK er valfrøðiligur og LogProfile.receipt_pubkey er í løtuni tómur); og (c) GitHub-útgáva-høvda-sjálv-gjørt goymslu + token (§16.6). Innan tær tíðir sum akker/profil pinna eru tøkar, ber ein sjálvstøðugur prógviefdarar til frágreiða próvstatus sannførandi í staðin fyri at staðfesta eina fullkomiliga akkeraða, pinnaða próvtøku. Hönanin er strangliga eyka og er einki broyting til tað SealedQub / QubEnvelope strengjuformat.

16.1 Røktargrundarlag og tryggingarløg

Tey núverandi útgávuvegirnir skera sambandi millum viðurkenning og Arweave staðfesting: tey framleiða og undirskriva eina einstaka viðgerð, varðveita listaverkið og nágreiniliga innsendingarstøðu í R2, og leggja síðani út ósamstundis. Transparency logfiletið leggur eina sjálvstøðugt forankraða raðfestingarlag fyri undirbýtið av almenna /upload fyrrispurningar, sum LogDO legg til eydnast:

Stig Navn Trygd Tá
T1 R2-fyrsti samtíða staðfesting Tíðarhalds gólf — løgd bíta og nágreinilig útgávustøða verða skrivað til varandi goymslu áðrenn eydnaður verður vístur. Sett í verk tvørtur um núverandi útgávuleiðir.
T2 Batchað gjøgnumskygni-logg innlegging Bert við viðfesti, manipulerað ábyrgd + samlað bílegging, tá ið tað er viðgjørt og fest. Núverandi framleiðari: eydnusamur LogDO leggur afturat frá /upload; svarið ber við kvittanaratuplið. Einki universelt.
T3 Per-qub Arweave varan Ein einstøk Arweave-viðgerð fyri qub. Liggur nú klárur til hvørt góðkent útgávu og verður sendur ósamankoplað; tann nágreinliga undirskrivaða sendingin liggur í tømiligum útsendingarkassa til hon er latin.

Stigini lýsa ymisk vavið og halda eigindir, ikki tað núverandi vinnuliga ætlan. Núverandi kodin skrásetur framvegis eina einstaka Arweave-transaktión fyri hvørja góðtaka útgávu; hon vísur ikki T3 bert sum ein gjaldsvegur til at uppsjóða. API-lykil/accounts kvotetakningar eru framvegis hvør sínar umsóknarkontroller.

Táttføri og honnesti. T1-skrivingin er samstundis, so eitt eydnumevni svar tryggjar tøkni á umsóknarstigi uttan at awaita eftir einum Arweave-gátt. Hon stovnar sjálv ikki ein sjálvstøðugan tíðarmerking. Ein váttað einstaklingur viðgerða gevur yvirmálstíðina fyri blokkina. Fyrir eitt svar, sum ber við fullkomna T2-móttøkutuppli, kann næsta váttaða ankura veita dagførda prógin sum lýst niðanfyri. Um tuppli ikki er, kann ongin yvirflata vísa á, at hendan qub longu er í gegnsktáloga. Ankura- og útgávu-tískil eru eingi protokoll-stigi tøljustandlar.

16.2 LogLeaf Strúktur (tvey bundin form)

Ein dagføring í dagbók er ein LogLeaf, kodað sum hondskrivað kanoniskt CBOR undir §3.1 prófilinum (ákveðin longd, ongar merkingar, ongar flytandi kommatøl, stytsti formur av heiltølum, NFC tekst, valfríggjar økir latnar út tá tær eru ikki til staðar, lyklar raðaðir eftir kodaðu-bytar longd stigvís síðan eftir bytewise). §3.1 parse → re-encode → compare kanonisk vakt verður framd á kóðavegin áðrenn hashing (ikki bert á avkoding), so tvey útførslur kundu ikki vera ósamdar um lauf-bytes ígjøgnum eina heiltølu-breidd ella lykil-raðfesting mun. Allar heiltølur eru u8 / u64 / i64; øll digests eru 32-býta býarstrengir (bstr[32]). Ein goymd Arweave viðgerðarskráar-ID er ein raw 32-bita SHA-256 samanrenning flutt sum bstr[32], aldri ein base64url tekststrengur (samsvarar §3.3).

Bløðið hevur tveir formur valdir av einum kind být, tí almennu upploftingargongdin er bókstavablind: POST /api/v1/upload viðvitað viðger bæði góðtikin lastarkappingarmyndir sum ógreiðanligar og mótekur qub_id og unlock_at bara sum ótryggdar tryggingarsendingar frá kundum. Á standard privatari kós. body_hash, drand_round, created_at, og drand_chain_version eru afturat fult inni í §13 ytra umbúð, ið lykilin hjá Arbeiðaranum ongantíð hevur. Slagskipanin ásetur eisini ein staðfestan skikk fyri ein framleiðara, ið fremur body_hash / drand_round seg sjálvt. Núverandi /seal leiðin hevur hesi virðini, men kallar ikki LogDO, so framleiðsla gevur í løtuni bert staðfest (“0x02) leggur frá eydnaðari almennu-upplatingar viðbøtur. Deilingin heldur hvørjum bundnum virði rættvísi uttan at lata sum um tann staðfesta framleiðarin er tengdur:

Lykil Heftis longd Slag Líkaslag Merking
seq fýra u64 neyðugt Globala 0-byggða laublendisskrá; staðsetingin sum viðurkenningarggjaldið staðfestir.
kind fimm u8 neyðugt 0x01 staðfest-hæfur (avmarkaður, ikki sendur út løtuna) ella 0x02 staðfest (kundi-segl / bólt-blind uppload).
ref fýra bstr[32] neyðugt Blað vísa ID. Vitnaður → reinskur qub_id. Hevdið → te blindur ið SHA3-256(qub_id ‖ log_blind_secret) (§16.2.1).
chash seks bstr[32] neyðugt Innihaldsadressa SHA3-256(stored_bytes) — tann eini innihaldsbandið arbeiðarin altíð heiðarliga kann rokna, á báðum leiðunum.
unlock_at tíggju i64 neyðugt Avritað (vitnað) ella staðfest (staðfest); váttað > 0 áðrenn tað fer inn í blaðið.
received_at tólv i64 neyðugt Arbeiðari veggur-klukka á R2-ack. Óábyrgdaravekjandi (virkjarin-ásett; §16.6). Til staðfestingar fyri sjálvs-skriving, ongantíð prógv. Váttað > 0.
body_hash tíggju bstr[32] kind=0x01 bara Burturvald á 0x02 — arbeiðarin manglar tað sambært §13.
drand_round tólv u64 kind=0x01 bara Burturvald á 0x02.

A kind=0x02 laufið germeinandi framvegis einki body_hash nor drand_round: tað vitnar um ábyrgdina og raðfestingina av einari ógreiðari dulkóðaðari tekst við innihalds-adrressa chash, ásakandi qub_id og unlock_at — ikki taðs plaintekst ella runding. Plaintekst/runding beinini fyri ein staðfestan qub koma frá verandi §11 .qub-pakka váttan, ikki frá skrásetingini (§16.11). drand_chain_version er ikki í blaðnum (tað er inni í umbúðini á standardleiðnum); keðjulíðinginearv virkar á ankrið (§16.7). Kodaraðarhald: avvís alt-nulla ref ella chash, og vísa frá ikki-støðugum unlock_at / received_at, speglandi tað outcome_at > 0 vaktarvakt í cbor.rs.

16.2.1 Private-qub blindandi

Dagbókin má ikki gerast teljiorakulin, sum §13 ytri umbúgvingin bert er til at forða fyri (§13.1). Fyrir ein privataðan (umbúgvin) qub asserted lauf gerir brotini blindur kennari SHA3-256(qub_id ‖ log_blind_secret), har log_blind_secret er ein server-haldið loynismál, og útlátur body_hash. Ein triðjaparti kann ikki knýta eitt slikt blað til nakað ávíst qub_id; haldarin av qubnum, sum hevur levering URL-ina og tí qub_id, kann endurreikna tey blindu fyri at vátta teirra egnu inklusjón. Ein almenn qub (longu teljanlig, longu carrying the Visibility: public Arweave-merki sambært §13.8) bindur tað ósnilda qub_id. Hetta er tann einasta staðið har sjálvstøðug verifiserbarheit viljiðande gevur vegin fyri eini byrðamikla rønartryggdarreglu; sjálvstøðuga sambandið fyri privata qubs er chash (§16.9).

log_blind_secret vernd (loyst — §16.15 K4). Tey blindu verja bladsambandsleysni, ikki reinskriftarleynsemi (§13-umbúrið heldur tað sjálvstøðugt). Á eini log_blind_secret semja, fyri nakran qub_id mótarvinurin heldur longu ella kann endurskapa (hvørt qub, sum hann hevur bundlið/URL á, viðlíkum hvørjum lágentropi ella almennum qub_id) tað endurrokna blaðið ref í eitin hash og knýtir tað — hetta er beinleiðis samankopling av einari kendari fólkatalsbólki, ikki ein brútaltáttur á ein ókendan rúm. Flokkset log_blind_secret sum ein korrelatión/Sybil-støð á sama varðhaldsstigi sum aðrar servarleyndarmál, og snara framáftur bert (ein snaring endurnýggjar komandi bløð; hon kann ikki afturverkande loysa longu festu bløð).

16.3 Laukur- og knútahashing

RFC 6962 §2.1 lénis-skilja hashing við SHA-256 skift út við SHA3-256:

leaf_hash      = SHA3-256(0x00 || canonical_cbor(LogLeaf))
node_hash(l,r) = SHA3-256(0x01 || l || r)
empty tree     = SHA3-256("")          // defined but never anchored

Heimasíðuforstavi bítar 0x02 (inntøkukeðja, §16.4) og 0x03 (STH hash, §16.6) eru varðveitt og skiljast frá hesum. Tey eru einslig byte og kunnu tí ikki kolliða við tey núverandi 10-byte ASCII sjálvsmerktartoymið (“QUB_ID_V2, o.s.fr.). Træið er RFC 6962 vinstrumegin-fullur ójavnur tré (hvør innanfyri skipan er býtt við størsta styrkinum av tveimum, sum er striktið lægri enn talið av bløðunum í undirtrénum), sum loyvir viðurkendan og álitvirði próvtøku at deila eina eftirlitsleiðs algoritma. Reference spesifikasjónin hevur sjónligan vinstri/høgru derivatión pseudokóða og festir eina ekki-máttur-av-tvey (5-bløð) royndarvektor so tann rættarkantið kynstrarbestigningartilfarið — ið ein 4-bløðuga vektor fjalir — verður brúkt.

16.4 Hash keðjutilsing (innanhýsis)

LogDO heldur ein innanhýsis innskrivingar-keðju bert fyri tyggjunarkonsistens. Tað er aldin ikki útgivin og aldrin miðvíst móti váttara:

entry_chain[seq] = SHA3-256(0x02 || entry_chain[seq-1] || leaf_hash[seq])
entry_chain[-1]  = SHA3-256("QUB_TLOG_GENESIS_V1")

Tann útgivna viðfestu-hátti myndugleikin er samanlagt Merkle-rót + hennar ankur (§16.5–16.6), ongantíð tann upprunaliga raðin, sum virkið hendir sær at tæna bløðini: keðjan roknaði aftur fyri hvørja raðfylgju, sum verður tænt, so bert tann festi rótarpinnurin setur kanoniska støðu.

16.5 Kumulative Merkle-træ og samling

Verður ein altvaksandi RFC 6962 tré yvir øll bløð í seq raðfest — ikki einsamøll træ fyri hvørt part. (Ein carry-bløð-ketaður fyri hvørt part bygging varð vísað frá: hon er ikki ein verulig fyribrúkssamband, so hennara „samlaðarbýiningarpróv“ eru ikki haldgóð.) Hið samlaða træið gevur verulig RFC 9162 samlastøðurpróv og loysir eina eina nýliga ankara at prógva inkludering fyri øll eldri qub.

Tað LogDO Virknað Objekt er einsamallur rithøvundur (blockConcurrencyWhile, spegla QuotaDO / EntitlementDO) — at føra afturat einum felags loggi er at lesa-breyta-skriva á felags støðu og skal tí MÁ ganga um ein DO, ongantíð KV. Hann cachar trætopsins hægráa spælkan (O(log n) hashes) so at lata eina pakka er O(batch). A bunti er sett av bløðum bundin saman; tey innførdi kveikjararnir eru ein tree_size fráboðan á minst LOG_BATCH_MAX_LEAVES (standardur 4096), aldur, ið nærkast til tyngdarpunkt-taktin, ella ein ávísur stýris-/cron tvangsloking. root_i er tann samlaði Merkle Træ Hash yvir bløðini 0 .. tree_size_i.

16.6 Undirskrivaður Træs Høvd via Arweave Anchor

Arweave ankurtaningin er tá Undirskrivaða Trætopp-høvd kýtir ein leiðari undirskrift fyrir sjálvan træhøvdið: dagliga ankrið hevur ongan qub lykil vegna Arweave-transaktiónina owner er undirskriftin. Miðtekin um kósin heldur — tann óbroyttur grundarlagið, ikki ein qub-hildin loyniligheit, ber lastina fyri ta festu røtini.

Dagbókaruppskriftin krevur eina heita eydnuríka-viðlegg kvittanlykill (§16.10), fest í LogProfile og tvískrivað av anchor_owner. Núverandi útgáva hevur ikki lokið tann álit-rótar-útvegan: RECEIPT_SK er valfrítt, ein fjarverandi/ógildur lykil gevur sig_b64url: "", og samanumtókta LogProfile.receipt_pubkey er tóm. Soleiðis eitt kvittan kann lýsa viðfesta blaðið, men er ikki ein ikki-frásigandi undirskrivaðar kvittan. Har sterkara sniðkravið talan er bert galdandi, eftir at ein staðfestarifríðari letur fríggjarir pinnarnar til samsvarandi almannakeys lykil, og eigarin av grunnsteininum undirskrivar tað. Ein útgávusvar uttan fulla kvittanartúplu ger ongan krav um dagførdu góðkenning; ein við tómum undirskrift ger eitt krav um viðlegsstað men einki krav um undirskriftsframhald.

Tað SignedTreeHead er kanonisk CBOR (lyklar eftir kóðaðari longd): size:u64, root:bstr[32], batch:u64, prev:bstr[32] (fyrr) sth_hash; genesis = 32 null býar) log_id:bstr[32], first_seq:u64, anchored_at:i64. Its hash is sth_hash = SHA3-256(0x03 || canonical_cbor(SignedTreeHead)).

Festur treysta rót. log_id = SHA3-256("QUB_TLOG_V1" || anchor_owner_address). Ein samsvarandi eftirmetingarhtmlari MÁ krevja anchor_tx.owner == LogProfile.anchor_owner, har anchor_owner (og kvitansulyklakynsliga lykilin) er bakaður inn í qub_core sum LogProfile — samstundis við tey skjótnet konstantini, sum longu eru inn DrandTimelockProvider::quicknet() — og útflýggjað við verifier binary. Verifier má eisini viðmerkja Arweave tx data → tx_id binding lokalt frekar enn at stóla á ein gátt /raw/ svar. Hetta lokar rovskapspungsevniverkið: „taka festi á Arweave“ hevur ongan týdning, fyrr enn sannprógvarin festir hvørja pungin.

Rokking er ein §15 stýris útvidging, ikki eina endurnýtsla (loyst — §16.15 Q3). §15.2’s profilyvirflata telur í løtuni bert sig_algs / drand-keðjur / wrapper-útgávur / innihaldstýpur, og §15.3’s tennarar lista ongan av hesum — LogProfile / anchor_owner er ikki enn á yvirflatanum í §15. Róteringsstýring má tí verða bygd: §15.3 er útbygd (niðuranfyri) fyri at leggja til ta LogProfile tóta, og ein snúningur er undirskrivaður LogProfile bump sendur í eini verifisera-uppdatering. A ætlað rótatión ber eina útfara → innkomandi kross-signatur; ein sem byggir á fíggjarnevnur rotatión kann ikki (tá útfarandi lykilin er ótryggur/ófáanligur) og fellur aftur á §15-stýrdan bump, við fyrra-anker-gaffli-eftirkanningini (niðanfyri) avmarkandi skaða í millitíðini.

Tvístøða vindeyga (hástøðuliga álitspunktur). Eitt blað er bert tvítyðnis-motstøðuført, tá taðs umfataði akkeri er Arweave-váttað. Gluggin er received_at → anchor confirmation (cadence + Arweave endaliga, við ongum protocol seinkingartrygd). Áðrenn trust-root útvegan, veitir núverandi framseting drívniintegritetin hjá qub plus hvat sum helst óundirskrivað viðfesta metadata; tað veitir ikki tann ætlaða ikki-benignligan trygd. Tríggir accountability artefaktir áseta liðugt snið (trialupart-modellin er §16.15 Q2 loysningin):

  1. Papírs kvit fyri sel (á sjógvaskapi) — SCT-analógurin varð endurvildir tá ið eitt upload log-innskot eydnast (§16.10). Hann gerst ikki-nevnanligur fyrr enn sig_b64url er ikki-tóm og hin samsvarandi almenna lykil/viðfestur-eigara sambandið er fastrætt í sannførararnum. Hin nútómda framleiðsluprófílfasta kann ikki stuðla tí dóminum. Henda eftirlit áhepum ikki á ein útlitin kvittantuple ella ein undirskriftarleysan kvittan.
  2. Almannakunngjørd monitorerings-háttur + fyrri-keðja gongutúr — akkurin prev keðjan verður gingin høvud→uppruni; ein gaffil (tvey akrur á einum size við ymiskum root, ella brotna prev) er útgivandi prógv fyri óheppiligum atburði. At kenda tvískalaðheit er ein ásettur arbeiðsáttur, ikki ein stillfandi antin.
  3. Tvíbundin sjálvútgivin høvd — hvørja nýggja høvund {sth_hash, tree_size} er sent til ein serliga qub-eigdan almennur, bert viðlagt GitHub-goðskrá (talað-bera tamper-viðkomandi sjálvprentað bein), við einum samfelagsmiðla innlegg sum besta roynd at staðfesta bert. Ein misheppnað innsending MÁ síggja síðu (ikkje lata staðleysan mistak). *Framført (Stig 8) sum publishHead háls á akkeri cron (workers/api/src/utils/heads-publish.ts): a PUT til innihalds-API utan ein sha er bert til at leggja afturat (ein 422 býtir at høvdið longu er útgivið, ongantíð ein yvurskriving); velja / útseta-trygd á PUBLISH_HEAD_GITHUB_{TOKEN,OWNER,REPO} og inertur til goymslan er útvegað. Ein harð GitHub bilan síður gjøgnum health_alert rás og rísar ein varandi misboðsmátari (m:tlog_publish_head_fail); Arweave-ankrið sjálvt rullar ongantíð aftur við eina útgávu-vanlukku. „Ikki at misheppnast burturlítið“ er ábyrgdað av tí varandi málinum — sum operatørar MÁ setast á dashboard-alarm fyri — ja, sjálvt um bestu-tilfeingi telda-síðan ikki kann viðmerkjast. Tvey heiðarleys takmarkingar fylgja av „ankur-på-framstig“ (cron útgevur bert tá støddin framstig): ein bráður GitHub-vanlukka eftirlætur ein bil í útgivnu-høvdini røðini fyri hesa stødd — avmarkað, ikki still (hon blaðar), og tí at hvør høv commitir ein superset-træ, eitt §16.9 samanhangarsfrøði-brúar bilið; týdningarmikið, at hesin samanhangarsfrøði verður útroknaður frá ábyrgdar Arweave-jarðbundin træ, ikki frá GitHub-yvirflatanum, so ein GitHub-gap ongantíð veikjar váttanarmáttin. Ein innfylging sum fýrurheldur útskrivaðar høvd-gap er ein útsettur menning.

Heiðarleiki bundin (bindandi avmarking). Tí at qub stýrir bæði ætlaðu útleggingarflatum, er hetta sjálvútgivin, ikki sjálvstøðugt vitnað. Einki vørur, marknaðarføring ella lóglig yvirtøka kann halda, at loggin er „sjálvstøðugt vitnað“. Eftir at kvittan/profilu/høvuðsimportgáttirnar eru útvegaðar, er loyvt at siga, at tvívur er at finna og eitt viðurkennt undirskrivað viðlegg skilur eftir eina ikki-nevndari kvittan. Áðrenn tað, er henda krøv ikki tøkkur. Ein veruligur óheftur triðju-viðkomandi vitni verður sett aftur til eina framtíðar §15 stýrisuplifting.

received_at er operator-festur og einki krav kann stuðla seg á tað — tað fer ongantíð fram sum prógv ella sum mótuverskiljandi váttan á nakað vøru- / lógar- / API- / prógv-rendering yvirflatu. Arweave festiblokk-tíðin T er einasta treystaleysa tíðarmerkja (ein ovurstak á „skrivað av“). Nakar monitor sanitetarkanning á received_at SKAL samanbera móti T, ikki ímóti framvegis stýrdum av operatørinum anchored_at STH øki; ein slík kanning er bert ein vakt móti eini klokkuvillu hjá einum ærligum virkjara, ikki ein ábyrgdarviðgerð móti einum illkvittum leiðara (§16.15 Q5).

16.7 Anchor-samskiftisformat og rytma

Tað AnchorBundle er tann kanoniska-CBOR Arweave viðskiftikroppurin, skrivaður via §16.8 bundler: ver:u8, sth:bstr (kanonisk SignedTreeHead býtar), prev_anchor:bstr (fyrrverandi akkeris-transaktión id reyð bytes; útlatin við upphavi), chain_hash:tstr (tørra keðjan í virkni — quicknet), og pakka blað-CBOR straumur inn seq bílegging so at akkern er sjálvstøðug: ein eftirlitsmaður endurhugsar root frá kroppinum við null qub-fígging. (Um blaðstreymurin verður stórur við høgan umfong, kann ein framtíðar útgáva bert skriva ein blaðraðar við reference; merkt, ikki tikin í brúk í v1.)

Arweave merki eru ætlanarliga teljandi — dagbókin er * ætlað * at verða funnin, í mun til privata qubs: App-Name: qub-tlog, Anchor-Format: 1, Log-Id: <hex>, Batch: <n>, Tree-Size: <n>, Root: <hex>, Prev-Anchor: <tx>, Content-Type: application/cbor. Merkir eru ótrygd vísbendingar; CBOR-innihaldið er eina valdið.

Taktsyn dagliga sum sjálvval, endurskoðað við ummæli (stórðutriggarin styttir sjálvir effektiva taktsturðin undir álagi). Núverandi framleiðari fremur ikki ein gjaldstimplaðan kraft-bólthaldarakroka. The ankerpláta er dedikerað og lág-ára, skiljast frá upphalsibesiðaranum — tað MÁ vera tað egna eigin JWK (ein serstøk lykil, ikki ein logiskur leiklut á viðlíkahlutaplássinum) soleiðis at eitt uppuplas-viðlíkahluta brot ikki kann falska ankra — við einans ein strangan dagligan ankraumskiftibúskap. Hugsunin um varðveitslu er greitt fráboðin: ein nákvæmur stuttur skrásetingarvegin við tættan roðari og lága jøvnvág, ikki „kaldur“ — ein veski, sum sjálvvirkandi undirskrivar dagliga, kann ikki vera kaldur, og specifikasjonin ger ikki annað vart við.

16.8 ANS-104 Bindari

Ein innanhýsis ANS-104 DataItem kodari og djúpt-hash undirskriftari, uml. 300 linjur, Bert Web Crypto, einki npm-háðing (bæði Turbo SDK-ini miseydna npm ci --ignore-scripts veitingar-ketla gátt). DataItem bóltur útgerð:

signatureType (2, LE) || raw_signature || owner || target(flag+0|32) || anchor(flag+0|32) || num_tags(8, LE) || tags_len(8, LE) || avro_tags || data

Undirskriving er Arweave deepHash — ein endurtakandi SHA-384 meltan (krøvini til snúru hjá Arweave, crypto.subtle.digest("SHA-384")) omaná ["dataitem", "1", sig_type, owner, target, anchor, encoded_tags, data] — so RSA-PSS yvir dýpu hash við veskinum JWK gjøgnum crypto.subtle; id = base64url(SHA-256(signature)). SHA-384 her er isoleraður sum ein Arweave-snúr-berur frumgrein, ongantíð ein qub álit frumgrein (§15 skrásetur hekk; qub trust hashing er SHA3-256 altíð).

ANS-104 kóðaleiðin tænir til tikna bataveitslu/útstreymismaskinuna og skrivar AnchorBundle DataItems. Vanligi útgávuvegurin skapar fyrst ein nákvæman undirskrivaðan Arweave-traðk og heldur JSON hansara í einum varandi útpósti; beinleiðis útlegging er ein seinkingar-optimalisering, og tómavegurin roynir sama traðk aftur áðrenn hann nýtir bundler fallback hansara. Undirskriftarskipan (loyst — §16.15 Q8): v1 undirskrivar við RSA-PSS (undirskriftartype 1) endurnýtað tað verandi Arweave veski JWK menniskja (ekkert nýtt langlívt lykilansvar, tænir „ein færri loyndarmál“ greiningini); Ed25519 er útsett til §15 PQ-flutningsleiðina.

Hondrullaði djúpi hashurin er kóði við hægsta váða og lægsta náttúrliga umfatan í W5, so at hann verður stýrdur óviðrøkandi (§16.15 Spurning 8):

  1. Tværmáls-festingin tlog_v1.json (Rust + TS, §14.5 wrapper_v1.json mynstur) umfatar djúphash, DataItem byte + id, blað-hashir, ein 5-blaða røtur + eftirlitsslógi, ein STH-hash, ein innløgnar prógv, og ein samanhangilig prógv — í bæði undirskriva og tryggja leiðbeiningarnar (athyglini til staðfestingarstøðuna týdningarmikil tí §16.6’s lokale tx → tx_id kanning drar dýpa hash-in inn í hvørja støðuga staðfestara, ikki bert skrivaran).
  2. Ein einstøk interop rundferð gjøgnum ein reference ANS-104 bundler, brúkt sum støðug prógvsgögn bert — ongantíð eitt npm køri-tíðar áhugin (stillingin við bert Web-Crypto / einki-install-scripts stendur enn).
  3. Dýpri hash + RSA-PSS leiðin má ikki rundar-ferðast gjøgnum somu crypto.subtle grunnstig framleiðsluendamál, so innanhýsis kóderin er byte-samrýmdur.
  4. Verandi eftir-pakka góðkenning eftirlitsmaður váttar, at hvørt ankra / fallback DataItem veruliga fær Arweave góðkenning, við eini alarm + kretsbrotara — tí at djúpi hash eisini tænir til Arweave-ótilgjengiligheit fallback-røðina, so eina stille afturgongd hevði fylt hesa røð við netverksavvísdum punktum í júst tey útfallið, hon er til at dekka.

16.9 Innifatan og Samsvarandi Prógv

Bæði eru RFC 9162, SHA3-256, servert sum kanonisk CBOR.

Inkluderings prógv — GET /api/v1/qub/:tx_id/proof: ver:u8, leaf:bstr (ta nákvæmu blað CBOR — staðfestarin endurreknar leaf_hash seg sjálvt og treystir ongantíð á einu veittum hash), index:u64, size:u64, audit:[bstr[32]], root:bstr[32], anchor:{ txid:bstr[32], batch:u64, sth:bstr[32], log_id:bstr[32], block_height?:u64, anchored_at?:i64 }.

Samsvarsvitni — GET /api/v1/log/consistency?first=<size_a>&second=<size_b>: ver:u8, first_size:u64, second_size:u64, first_root:bstr[32], second_root:bstr[32], nodes:[bstr[32]], first_anchor, second_anchor. Ein einstøk ótvírædd lyklalisti, fest við royndar vektori.

Støðufest vátta (einki qub servari, víðkar §11):

1.  Parse .qub bundle → SealedQub; recompute qub_id (§4.1).
2.  Read leaf.kind.
3a. kind=0x01 (attested):
      assert leaf.ref == qub_id
      assert leaf.body_hash   == SHA3-256(body)
      assert leaf.drand_round == unlock_round(unlock_at)
3b. kind=0x02 (asserted):
      assert leaf.ref == SHA3-256(qub_id || blind)   // holder supplies blind
      OR treat ref as opaque and bind via leaf.chash == SHA3-256(stored_bytes)
4.  Recompute leaf_hash = SHA3-256(0x00 || leaf); fold `audit` per RFC 6962
    using index/size; require derived root == proof.root.
5.  Fetch anchor.txid from any gateway; verify the tx data → tx_id binding
    (do not trust a gateway /raw/ response); REQUIRE anchor_tx.owner ==
    LogProfile.anchor_owner.
6.  Parse AnchorBundle; require committed root == proof.root and size ==
    proof.size; read the Arweave block time T.
7.  Emit the claim scoped by leaf.kind (§16.11).

Stovnskoðilig goymsla til prógv MÁ vera samsvarandi lykil-sett (loyst — §16.15 Q7, blokkerandi forkrøv). Kalda blaðs próvvinding er rættvísis-neutral berra um R2 kanningarnevndarútgerðina er ein varandi Merkle-nútustøða goymsla við lyklum eftir absoluttum træ-koordinati (level, index) — ikki per-batch node-deltur. Við eini samanhangsliga-lyklaðu goymslu, hvørja (leaf i, size N) revfisleiðin er ein samling av O(log N) beinleiðis R2 GETvið einki endurútreiking tvørtur um bólkamark; við einum lotulyklasettum handli er tað ikki, ið er goymslulagsskeltið, sum henda loysnini stongir. Bløðkropparnir eru eisini innihaldsadressabelir við seq. Ein W5 royndarvektor MÁ prógva ein genesis-tíðar kald blað móti ein mun seinni røt við bert R2 + Arweave við LogDO goymsluna stroymda, soleiðis at endurheimingartryggingarkravið í §16.13 er grundgevitt heldur enn staðfest. O(log N) raðbundin R2 GETtilhoyra bara á tí ósambestandi próvtindinum — ongantíð á teinunum hjá seal (§16.10) ella ein per-tick cron.

16.10 R2-Fyrsta Ack raðfesting

Tað implementeraða POST /api/v1/upload røð er:

  1. Fremri helvtar hurðir (auth, váttan, idempotency shard lyklur) — óbroyttar.
  2. Stovna, merki og undirskriva tann eksakta einstaka Arweave-transaktiónina. Hetta stendst tx_id lokalt, hóast skapan av transaktsjón kann heinta virðis-/ankur-uppslýsing frá einum gátt. Ein fyrireikingarskeiva miseydnast framvegis fyrr enn áheitan er góðkend.
  3. Samsvarandi skriva tann valda listan á qub-cache/<tx_id> og viðhalda tey støðugu skapanar-virksemi-/útboksugrunnskrøvini. Hetta eru haldgóðsku- og royndargólv; mistøk áðrenn gjalding gevur 503.
  4. Tá LOG_DO er konfigurerað, samstundis royna LogDO.append(leaf). Einasti rithøvundurin setur seq, longar áinntøkukeðjuna og dagførir markið. Append-RPC ger bert tað; batch-close koyrir uttanfyri ávaringina. Ein append-flutnings-/umsóknar-skeinkslufall er í løtuni mistur-bjúgvin: svarið kann framvegis eydnast uttan log_seq, receipt, ella anchor_status. Hóast ein útførsla ummæli, er eingin sjálvvirk seinni dagbókar samsvarsupplýsing knýtt í dag.
  5. Vís aftur staðfestingina. Taka við { log_seq, anchor_status: "pending", receipt } bara tá appendið vardi tær fullkomnu eydnulegu tuple'ina. receipt.sig_b64url er tómur tá kvittanarin undirskrivarin ikki er tøkur; kundar MÁTA ikki kalla ta virðið undirskrivað ella ikki-frávísandi. Frávera av tupulini merkir bert varandi útgávu, ikki góðkenning í gegnum gegnsýnisloggin.
  6. Brúka eina útsetta uppgávu til at senda tann eksakt undirskrivaða transaksyonin. Vinna tekur burtur útboksina; mistøk lata hana vera fyri tann avmarkaða tømukronu og skulu ikki broyta tað, ið longu er staðfest. tx_id. Bráðfeingi metadata og aðrir best-fekkast viðbótarflokkar eru eisini útsettir.

Seinkingarmark. Umsóknarstøðvegin umfatar framhálfsheimild/kvotuarbeiði, fyrireiking/undirritan av færslu, haldføra R2-skrivingar, og (tá sett upp) ta LogDO roynd. < 300 ms vísir seg í sniðendurskoðan sum eitt virkandi mál, ikki sum eitt protokoll trygging; tann núverandi fyrireikingarstøðan hjá viðskiftinum kann fremja eina gateway metadata-biðing. Latensilig alarmar og startgáttir eru virkandi stýringar, ikki prógv sum eru tøk fyri ein kannara.

16.11 Fátrað tryggingarmódel — tann nágreiniliga áheitan, avmarkað við blaðslag

Fyri kind=0x01 (váttað) Hesin innihald — kroppur samsvarandi body_hash, staðfest av qub_id — varð útint í qub's append-only log við støði seq og eksisteirði ikki seinni enn Arweave blokk tíma T; tað var kryptografiskt ólæsiligt til drand-rundan R = unlock_round(unlock_at). Hetta er tað fulla {tlock round binding + Merkle inclusion + anchored root} trífalda.

Fyri kind=0x02 (áheitt, sjálvvalið): Ein ógreiður kryptografiskur tekstur við innihalds-fyribilsadressu chash, ásakandi qub_id og unlock_at, bleiv skrásett í viðskot-nú-bert logginum á støðu seq og eksisteirði ikki seinni enn Arweave blokk tíma T. Teir rundu og kroppaskapføturnar verða veittir av verandi §11 .qub-buntu vátta (qub_core::unlock), ikki við dagbókina; tað, sum dagbókin leggur afturat á ein bert per-qub-transaktión, er brotsliga sannaðar raðfesting, eina sjálvsáttu yvirmarksbindingartíð og mótstøðuføri móti tvíburðarboðum.

Bæði krøvini undantaka, sambært §11: rithøvundaskap uttan sig_alg ≥ 0x01, ætlan, og undir-festa-nákvleika tíðarskipan. Eina síður loyvir nakar kravi at styðja seg á received_at.

Kravloft (bindandi byrjunaravmarking — loyst §16.15 K1). Fyri ein staðfestan (kind=0x02) blað, tann umfataði kravið omanfyri er loft um hvat sum helst vørum, marknaðarføring, treytum, ella próvdarútføringarmi flatur kann staðfesta. Onkur flatur kann ikki siga ella ávísa, at loggið próvar innihaldið ella avlæsingsumfar av einari byte-blindari upphøgg — loggið próvar raðfesting + eina treystleysa ovurstøðu-bundna tíð fyri ein ógjøgufráa dulkóðað tekst. Innihald og umfarprógv koma einsamalt frá verandi §11 .qub-pakka eftirlit, sum er loggunavnirkt. Ein útgáva við ongan eydnan append/móttøku hevur ongantíð nakran logg-hevd.

16.12 Útgávustýring og W3 Samráð

Verður nei SealedQub vírrubumpa og tí einki protokoll-versjón hop (§12.2): dagbókin er ein sidecar, sum gevur seg við tilverandi øki og bita, so hon gongur ikki inn í §12.3 protokollufrásøgu um útgávur. W3's valfrítt drand_chain_version er óviðgjørd og gerst hin einasta valfría SealedQub øki. Í staðin leggur skráarkervið fram síni egnu óhefta útgávurúm — LOG_VERSION_1, ANCHOR_FORMAT_1, InclusionProof.ver — speglandi §12.5 kappingar-útgávu óheftni (kappingurin ber ein útgávubyte óheftan av protokolluútgávuni, og loggútgávurnar fylgja sama skipan).

Prógvaflutningur verður tikin sum standard, við eini valfrøðari ferð við. Ein prógv kann ikki vera til á bláttíð (ankrið er enn ikki skrivað), so bláttíðin .qub pakkin verður óprógvaður. W7's sannprógvari sær GET …/proof ein ferð, ella í fullkomiliga offline hátt endurbyggir prógvini frá almenna AnchorBundle gjøgnum ein Arweave fyrispurning um Log-Id. Tann .qub pakki (W7) tryggjar eitt valfrøðiligur inclusion_proof limur — frávikandi á teim staði, fylgt av einum eftir-festi endurnýtslu til kalda arkivering — fylgjandi sama „valfrítt, úteltið sum sjálvsagt, afturatkomandi“ mynstri sum W3's drand_chain_version.

16.13 varðveiting

Goymsluvindeygdirnar fyri LogDO opnu hali, R2 próvtænastusubstrat, forankurskivumbrotstalararnar og bundlar afturfallskøina eru ásettar í docs/DATA-RETENTION.md. Prinsipp: dagbókin's heita per-innskriving goymsla (LogDO) kann endurnýggjast eftir anskar; tess endurskoðanarevni — tann koordinata-lukkutlykkta (level, index) Merkle-nodur handla + tann seq-viðvikuliga blaðkroppar (§16.9) + Arweave leysarnir — er varandi. At fáa eitt kalt blað aftur frá DO ongantíð ger eina útflutta prógv ógilda, tí ein prógv loysir seg móti tí varandi R2 knútageymslu og Arweave leysara, ikki DO (og §16.9 strokna-DO testvísið prógvar hetta).

16.14 Test vektorar

W5 flytir tvørsmánalig útgerð tlog_v1.json (§16.8) pluss virka vektorar: ein kind=0x01 og ein kind=0x02 blað → leaf_hash; tann 5-bløðaða samlaða rótin; eitt inklusions prógv; eitt samanhangsøgt prógv; eitt AnchorBundle; og ein DataItem id. Hesir liva saman við §14.5 ytra-innpakking vektorunum og verða brúktir av báðum Rust (qub-core) og TypeScript (Worker) útgávur.

16.15 Yvirlit av avgerðum (V5 — loyst)

Útgjørda útsjónarkanningin W5 (ein mótmælishugskotsskrá + eigaraviðmerking) er lidin. Hvør avgerð niðanfyri er avgjørd og endurspeglað í §16 tekstinum omaná; atkvøðubindingarkranar avmarkingar verða endurtikin í enda. Frágreiðing kann framfarast undir teimum.

  1. Sjálvvalin-leið (kind=0x02) bløð heiðarleiki — AVGJORDAÐ. Sendi tvíbløðug-slagið skorið sum ásett: kind=0x02 ger ikki nakað body_hash nor drand_round. Nei *_body_hash øki á byte-blinda stígnum (tí hevði tað verið mest lættlesna falska „vísda“ boðskapurin fyri integrerar og er eina hentleika §11 longu gevur frá pakkinum). Gera ikki krafa server-seal fyri log-attesteraðar qubs (tað skuldi tvingað plaintext gjøgnum Worker og oyðilagt crypto-shredding mýrin). All self-describing short-circuit eigur at vera í .qub pakka / prógv umsløg sum ein sannpróvdur endurreiknaður vinningur, ongantíð eitt blaðøki. Eigara- staðfest krøv topp: §16.11.
  2. Tvísæling / undirlating ábyrgd — HØGGJING LOYST, MYNDUGØGL TÍÐINNI ÓFULLKOMIN. Umsitingin krevur, at tryggingarnøglin verður fest við LogProfile og tvískrivað av anchor_owner, pluss monitoreraðar metodur, prev-chain walk og tvær sjálvútgivnar høvd. Tað samansetta profilið og útferðarkrókar eru framvegis plassarhaldarar/valfríir sum greitt er í §16.6, so tann sterkari upptøkuførdi + kvitteraða kravið er ikki galdandi fyrr enn hesi gáttirnar eru stongdar. Tað skal aldrin verða marknað sum undanfarandi vitni. Eitt veruligt triðjapartsvitni verður útsett til ein §15 stýrisbump.
  3. Festur knútáar eigara treysta rót + snúningur — LOYST. Hevja LogProfile pin (§16.6); staðfestarinn kannar anchor_tx.owner == anchor_owner og staðfestir tx dátuna → tx_id binding lokalt. Rótatjónustustýring er ein §15 útbygging til at byggja (§15.3 trigger lagt til), ikki endurnýtt; ætlaðar snúningar kross-signa, kompromiss-drive snúningar venda aftur til §15 bump við gafla-kontrol at avmarka skaða.
  4. Private-qub blað blindandi — LOYST. Halda fram at blindast fyri privata qubs (ref = SHA3-256(qub_id ‖ log_blind_secret)), rávur qub_id fyrir almenna qub´s (jafnan §16.2.1), chash sum sjálvstøðugi bandið. log_blind_secret er ein samanhangur/Sybil- stig loyniligheit, bara snúa-framm (§16.2.1).
  5. received_at — AVGJORT. Halda tað í blaðnum, ásett men greinarliga ikki-sáttarfaklig; alinear ikki fram sum prógv ella mótspurn stuðul á nakran yvirflata. Allar eftirlitssansingar kanna móti Arweave blokktíðini T, ikki tann stýriður av virkjara anchored_at (§16.6).
  6. Trýstað prógvað tíma — HØGGILDISLOYSN, EKKI NÚVERANDI RUTING. Hin endurskoðaða útgávan gevur ankarlás-tíð til pakknaði stigið og nágreinigt tími prógv til goldna T3, uttan nakra talgilda SLA fyri tann fyrra. Núverandi leiðir hava ikki tikið hesu vinnuligu munin: tær skráseta eina einstaka viðskiftu fyri hvørt góðkent útgávu, og logg dekkingin verður framvegis treytað sum greitt í §16.1/§16.10. Vørukopi má lýsa útføringina, ikki hesa framtíðar stigbýti.
  7. Kumulativt træ á arbeiðarum — LOYST. Einki samandrátt RFC 9162 træ + frontier-cached einki-skrivaari LogDO (bíligur headroom móti umleið ~1k skriv/sec DO lofti; útset Merkle-av-skervurreum rótarskervingu til nær tað). Teigur-keyed (level, index) R2 node goymsla + strikað-DO køld-løv royndar vektori eru framdar (§16.9). < 300 ms er framvegis eitt snið-/virksemi mál, ikki eitt protokollavent (§16.10).
  8. ANS-104 undirskriftaskema + djúphash — LOYST. RSA-PSS (sig týpa 1, endurnýtaðu tað serstaka anchor-wallet JWK); Ed25519 útsett til §15 PQ leið. Hin handframaða SHA-384 djúpa hash er bundin at bæði vegir cross-impl fixture, ein statisk-bert reference-bundler samskeiðisroynd, hin deilda-crypto.subtle ferð aftur og fram, og post-pakka Arweave-godkenningar monitor (§16.8).

Atbundin útgávuskrásett trupulleikar (flyt fram í framkvæming + vøru/lógarliga ummæling):


17. Flytførur váttanarbúnti (.qub)

Støða. Hesin parturin er íverksettur (W7 / UP-C2): qub_core::export ger og tulkar búntan, og tools/qub-verify er eitt alment, sjálvstøðugt CLI, sum váttar hann frástadlaust. §11 og §16.9 vísa longu til ".qub-búntan" sum eindina, ið ein sjálvstøðugur váttari brúkar; hesin parturin ásetir bætini og váttanargongdina. Hann er strangt viðbótarligur—búntin pakkar verandi §11-inntøk og broytir einki tráðasnið á keðjuni.

17.1 Endamál

§11 staðfestir, at ein og hvør triðjipartur kann vátta dulmálsliga artefaktið hjá einum qubi uttan samstarv frá qub. .qub-búntin ger hesa váttan flytføra og frástadlausa: hann pakkar innsiglaða CBOR og drand-umfarsundirskriftina, sum letur tað upp, í eitt sjálvstøðugt artefakt, so ein móttakari kann vátta innihaldsheilleika, binding til umfarið og allar høvundaundirskriftir við ongum netkalli (eingin goymsluheinting, eingin beinleiðis drand-umbøn, einki qub-API). Búntin einsamallur prógvar ikki, nær dulmálsteksturin varð gjørdur; ein sjálvstøðugt váttað goymslutransaktión ella eitt ankrað loggprógv veitir ta serstøku tilverutíðarfullyrðingina (§11, §17.5).

17.2 Búntasnið

Ein QubBundle er handskrivað kanoniskt CBOR eftir §3.1-profilinum (ásett longd, eingi tag, eingi flottøl, stytsta heiltalssnið, NFC-tekstur, valfríir teigar latnir burtur, tá teir mangla, lyklar raðaðir eftir longd á enkodaðu bætunum vaksandi og síðani bætivíst). Teir tríggir 15-tekna lyklarnir raða d < i < s. Ein rá .qub-fíla er júst hesi bætini; fyri URL ella avrita-set inn flutning eru somu bæti base64url(uttan fylling).

Lykil Enk. longd Slag Atvera Týdningur
version 8 u8 kravt Útgáva av búntasniði (0x01).
sealed_at 10 i64 valfrítt Innsiglingartíð, sum høvundurin sjálvur uppgevur (Unix-sekund); sjálvlýsandi, ikki próvfast.
drand_round 12 u64 kravt Umfarið, sum qubið er læst at. Ein framskriving av innbygda innsiglaða qubinum.
arweave_tx_id 14 tstr kravt Transaktiónskennið, sum innsiglaðu bætini vórðu goymd undir (upprunatilvísing).
drand_chain_id 15 tstr kravt drand-keðjan (hex). Ein framskriving av innbygda innsiglaða qubinum.
drand_signature 16 bstr kravt drand-vita-undirskriftin fyri drand_round—virðið, sum letur dulmálstekstin upp.
inclusion_proof 16 bstr valfrítt §16 Merkle-íroknanarprógvið, tá loggurin er íverksettur (§17.5).
sealed_qub_cbor 16 bstr kravt Innaru SealedQubCbor-bætini (eftir §13-avumbúgving), t.e. §11-váttanarinntakið.

drand_round og drand_chain_id eru hentleika-framskrivingar av sealed_qub_cbor, bornar so amboð kunnu lesa tær uttan at tulka innara CBOR. Tær verða leiddar av við gerð og kannaðar aftur við avkoding móti tulkaða innsiglaða qubinum; ein búnti, har ytri teigur og nýttulast eru ósamd, verður avvístur. Enkodaraagi speglar restina av tráðasniðnum: avvís tóma drand_signature ella arweave_tx_id, og set mørk á allar teigar við broytiligari longd.

17.3 Hvat innbygda drand-undirskriftin prógvar

Búntin ber drand-undirskriftina heldur enn at krevja, at váttarin heintar hana. Tíðarlásavkryptering (tlock yvir drand-keðjuna, §8) kann bara eydnast við ekta vita-undirskriftini fyri bundna umfarið—eitt virði, sum keðjan bara gevur út, tá umfarið er farið, og sum er ein gildug BLS-undirskrift undir almenna lyklinum hjá keðjuni. Ein følsk ella skeiv undirskrift fellur í BLS-váttan ella IBE/AEAD-avkryptering. Ein búnti, sum verður avkrypteraður, prógvar tí: dulmálsteksturin er bundin at umfari R, og umfar R er farið. Váttarin festir keðjuna (DrandTimelockProvider::quicknet()) og nýtir §11-umfarsbindingarkanningina, so ein búnti kann ikki siga seg hava eitt umfar, sum dulmálsteksturin ikki er bundin at.

Hetta er eitt prógv fyri útgávutreytina, ikki eitt gerðartíðarmerki. Eftir at umfar R er farið, kann ein og hvør gera ein nýggjan dulmálstekst fyri R og pakka longu almennu undirskriftina saman við honum. Tí MÁ búntin einsamallur IKKI lýsast sum prógv fyri, at dulmálsteksturin ella innihaldið var til áðrenn R, áðrenn unlock_at ella áðrenn nakra hending.

17.4 Frástadlaus váttanargongd

qub-verify <file.qub> koyrir vanligu §11-mannagongdina heilt úr búntanum og stýrir qub_core::unlock::unlock við einum festum DrandTimelockProvider:

1. Parse the .qub bytes → QubBundle (canonical-CBOR guard; bound every field;
   re-check drand_round / drand_chain_id against the embedded sealed qub).
2. BLS-verify bundle.drand_signature for the pinned chain and round, then
   tlock_decrypt(sealed.tlock_ciphertext, bundle.drand_signature) → QubEnvelope.
3. Verify SHA3-256(body) == body_hash               (§11 step 8).
4. Verify QubEnvelope.qub_id   == SealedQub.qub_id   (§11 step 9).
5. Verify QubEnvelope.unlock_at == SealedQub.unlock_at (§11 step 10).
6. Verify ciphertext round == unlock_round(unlock_at) and the chain binding.
7. If sig_alg != 0x00: verify author_signature (and any cosigner; §9.4).
8. Report integrity, round-elapsed/round-binding, authorship, and cosigner
   verdicts separately, plus the recovered body. Do not report a commitment
   timestamp unless step 9 succeeds.
9. Optional existence-time leg: verify an included §16 proof through its pinned
   anchor, or independently verify the referenced storage transaction. Report
   its block time as an upper bound on ciphertext existence.

CLI'ið endar við 0 (váttað), 1 (váttan miseydnaðist—framvegis læst, body_hash samsvarar ikki, umfars-/keðjubinding brotin ella undirskrift miseydnaðist) ella 2 (nýtsla / illa skaptur búnti). Ein --json-frágreiðing ber somu úrskurðir til sjálvvirkan. Av tí at búntin er sjálvstøðugur, eru váttarakassin (qub-core) og CLI'ið (qub-verify) einasti ritbúnaðurin, ein triðjipartur tørvar; bæði eru almenn og endurnýta verandi váttanarleið í protokollini—eingin sergjørd krypto.

17.5 Sambandið við gjøgnumskygni-loggin

inclusion_proof er eitt valfrítt pláss fyri §16 Merkle-íroknanarprógvið. Váttan við búntanum einsamøllum (§17.4) er fullfíggjað fyri heilleika, umfarsbinding / farið umfar og møguligan høvundskap, men hevur við vilja onga sjálvstøðugt tíðarstemplaða tilverufullyrðing. Eitt útfylt, fult ankarváttað inclusion_proof leggur blaðslagssambundnu bindingina og evsta tíðarmarkið úr §16.11 afturat uttan at broyta útgávuna av búntasniðnum. Eitt prógv, sum manglar, merkir bara "einki prógv viðlagt"—ikki "ógildugt" og ikki neyðturviliga "ikki ankrað".

Í tilvísingarverkinum er plássið nú typað: qub_core::export::QubBundle::inclusion_proof_typed() gevur eitt Option<InclusionProof> við øllum §16.9-bygnaðinum (blað, eftirlitsleið, ankrað rót og AnchorRef) gjøgnum sama ógjøgnumskylda CBOR-teig—eingin lyfting av búntasniðsútgávuni. Sjálvstøðuga qub-verify-CLI'ið brúkar tað gjøgnum sína --anchor-leið og—til ankarveskið er útvegað (§16, Støða)—boðar eitt útfylt prógv við staðhaldaraeigara sum bara íroknan heldur enn fult ankrað-váttað.