qub samskiptareglulýsing

qub er samskiptaregla fyrir dulritaðar tímaskuldbindingar: kerfi til að innsigla orð við framtíðardagsetningu og sanna, þegar sá dagur rennur upp, nákvæmlega hvað var sagt og hvenær.

Þrjár grunneiningar gera þetta mögulegt. drand er dreifður tilviljanaviti — birtingardagsetningin er framkvæmd af eðlisfræðinni sjálfri, ekki af velvild neins aðila. Varanleg opinber geymsla er breytingarþolin opinber geymsla — enginn aðili getur breytt eða eytt qub eftir að hann hefur verið innsiglaður. ML-DSA-65 er eftir-skammtafræðileg stafræn undirskrift — hver qub er bundinn lyklapari þar sem leyndarlykillinn yfirgefur aldrei tæki höfundarins.

Saman gera þessar grunneiningar yfirlýsingu sem er tímalæst, augljós ef átt er við, og rekjanleg — kvittun sem verður verðmætari eftir því sem geta heimsins til að falsa fortíðina batnar.

Það sem eftir er af þessu skjali er hin staðlaða útfærsluforskrift sem þarf til samvirkrar útfærslu.


qub samskiptareglu-forskrift

Reitur Gildi
Útgáfa 1.0 (samskiptareglu-útgáfa 0x01, ytri umbúðir útgáfa 0x01)
Dagsetning 2026-05-01
Staða Drög
Yfirfarið til 2026-05-01

Þetta skjal er staðlaða samskiptareglu-forskriftin fyrir qub tímaskuldbindingakerfið. Það skilgreinir gagnabyggingar, raðtalningarreglur, afleiðsluformúlur og staðfestingaraðferðir sem nauðsynlegar eru fyrir samvirka útfærslu.

Umfang: samskiptareglulagið er viljandi tungumálahlutlaust — qub líkaminn er ógagnsær texti / markdown / sáttmála bitar, og staðlingameðvituð birting er á ábyrgð lesandans (qub.social vefforrit, <qub-embed> iframe, MCP biðlarar, o.s.frv.).


1. Táknun og venjur

Táknun Merking
u8, u64, i64 Óformerktar/formerktar heiltölur með tilgreindri bitabreidd
[u8; N] Bætafylki af fastri lengd N bæta
Vec<u8> Bætafylki af breytilegri lengd
Option<T> Gildi af gerð T, eða fjarverandi
String UTF-8 textastrengur, NFC staðlaður
`
SHA3-256(x) NIST SHA3-256 hashgildi af bætastreng x (FIPS 202)
ceil(x) Þaksvörun: minnsta heiltala ≥ x
CBOR Concise Binary Object Representation (RFC 8949)
big-endian Mikilvægasta bætið fyrst

Allar heiltölur í forhneppingum eru kóðaðar sem big-endian bætafylki af fastri breidd (i64 → 8 bæti, u8 → 1 bæti) nema annað sé tilgreint.

Allir tímastimplar eru Unix sekúndur í UTC.


2. Gagnabyggingar

2.1 ComposeQub (staða höfundar í minni)

Ekki raðtalin í CBOR. Ekki skrifuð í varanlega geymslu. Staðbundin höfundarforritinu.

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,              // 0x01 = public (only value in MVP)
    content_type:   u8,              // 0x01 = text (only value in MVP)
    plaintext:      Vec<u8>,         // UTF-8 qub body
    sender_label:   Option<String>,  // Decorative display name; not authenticated
    status:         DraftStatus,     // Composing | Sealed | Uploaded | Failed
}

2.2 QubEnvelope (afkóðaður burður)

Raðtalin með kanónískri CBOR (§3). Dulkóðuð innan SealedQub. Þetta er byggingin sem sannar heilleika innihalds eftir afkóðun.

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>,     // V1.1 — when reality renders judgment (verdict-uplift-plan §3.1)
    sender_label:        Option<String>,  // Decorative; not authenticated in MVP
    reply_to:            Option<[u8; 32]>,// Parent qub_id for reply chains; not in qub_id preimage; not signed (see §9.3)
    body:                Vec<u8>,         // Content payload (UTF-8 for text, CBOR for pact)
    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
}

Grunngerð (óundirritað text qub): version = 0x01, content_type = 0x01, sig_alg = 0x00, allir Option reitir fjarverandi.

Aðrar v1 stillingar: content_type = 0x03 (sáttmála líkami, sjá §6.1); sig_alg = 0x01 (ML-DSA-65) með author_signature og author_pubkey til staðar (sjá §9.3); cosigner_pubkey og cosigner_signature saman til staðar fyrir meðundirritaða sáttmála (sjá §9.7); reply_to sett á qub_id foreldris fyrir svar-keðjur (sjá §9.3 fyrir afleiðingar á undirskriftarumfangi).

2.3 SealedQub (kanóníska þráðarsnið)

Raðtalin með kanónískri CBOR (§3). Skrifað í varanlega geymslu. Þetta er gripurinn á keðjunni.

SealedQub {
    version:           u8,              // Protocol major version (0x01 for v1)
    qub_id:            [u8; 32],        // Same as QubEnvelope.qub_id
    visibility:        u8,              // 0x01 = public; v1 viewers reject other values
    unlock_at:         i64,             // Unix seconds UTC
    outcome_at:        Option<i64>,     // V1.1 — 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
    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 control characters.
}

2.4 RevealedQub (lesandi forritsstaða)

Ekki raðtalin í CBOR. Staðbundin lesandaforritinu. Smíðuð eftir vel heppnaða afkóðun og staðfestingu.

RevealedQub {
    qub_id:              [u8; 32],
    arweave_tx_id:       String,
    visibility:          u8,
    content_type:        u8,
    created_at:          i64,
    unlock_at:           i64,
    outcome_at:          Option<i64>,       // V1.1 — flutt áfram úr QubEnvelope.outcome_at / SealedQub.outcome_at; knýr úrskurðar-bið blokkina á birtingarsíðunni (verdict-uplift-plan §5.1)
    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. Kanónískt CBOR snið

Öll raðtalning SealedQub og QubEnvelope SKAL fylgja þessu sniði. Tvær útfærslur, gefin sama rökrétta bygging, SKULU framleiða eins bæti.

3.1 Kóðunarreglur

Regla Forskrift
Staðall RFC 8949 §4.2.1 (Core Deterministic Encoding Requirements)
Röðun korta-lykla Raðað eftir kóðaðri bætalengd fyrst (styttri á undan lengri), síðan stafrófsröð (bæti fyrir bæti fyrir kóðanir af sömu lengd)
Kóðun heiltalna Stysta form: 0–23 í upphafsbæti; 24–255 í 2 bætum; 256–65535 í 3 bætum; o.s.frv.
Lengdarkóðun Aðeins ákveðnar lengdir. Engir óákveðnir fylkislengdar, kort, bætastrengir eða textastrengir (viðbótarinformation = 31 er bannað).
Merki Engin CBOR merki (aðalgerð 6 er bönnuð).
Fljótandi tölupunktur Engar fleytitölur (aðalgerðir 7 gildi 0xF9–0xFB eru bönnuð).
Textastrengir UTF-8 kóðaðir, NFC staðlaðir (Unicode Normalization Form C).
Bætastrengir Hrá bæti. Engin base64 kóðun á CBOR laginu.
Tvíteknir lyklar Hafna með villu. Þáttarar MEGA EKKI samþykkja tvítekna kort-lykla þegjandi.
Óþekktir lyklar Hafna með villu. Þáttarar MEGA EKKI þola kort-lykla utan kanónísks lyklamengis gerðarinnar — tveir aðgreindir kanónískir bætastrengir mega aldrei afkóðast í sama gildi (encode(decode(x)) == x), og fyrir undirritaða líkama væri auka-lykill falið efni sem báðar undirskriftir skuldbinda sig við. Hluttegundarþróun fer í gegnum version, aldrei í gegnum auka-lykla.
Einföld gildi Aðeins true (0xF5), false (0xF4), og null (0xF6) eru leyfileg.
Valfrjálsir reitir Fjarverandi valfrjálsir reitir eru felldir út alveg úr CBOR kortinu (ekki kóðaðir sem null). Til staðar valfrjálsir reitir eru með í raðaðri lyklaröð.

3.2 Staðfestar kanónískar lyklaraðir

Þessar lyklaraðir eru staðlaðar. Útfærslur SKULU senda lykla nákvæmlega í þessari röð. Aflúsunarstaðhæfingar ÆTTU að staðfesta röðunina í non-release smíðum.

QubEnvelope (útgáfa 0x01, óundirritað, allir valfrjálsir reitir fjarverandi):

"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 (V1.1 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)

Afleiðsla lyklaraðar QubEnvelope: hver lykill er CBOR textastrengur. Kóðuð lengd = 1 bæti haus + lengd strengs (fyrir strengi undir 24 bætum). Raða eftir heildar kóðaðri lengd fyrst, síðan stafrófsröð fyrir lykla af sömu lengd.

SealedQub (útgáfa 0x01, opinber, enginn móttakandi):

"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 (V1.1 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)

PactTerms (sáttmála líkami, 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 (röð í terms fylki):

"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 Tilvísun bæta-kóðunar

Gerð CBOR kóðun Dæmi
SHA3-256 hash (32 bæti) 0x58 0x20 + 32 bæti body_hash, qub_id
Tímastimplar (i64) Aðalgerð 0 (jákvætt) eða 1 (neikvætt), stysta kóðun Unix sekúndur
Útgáfa (u8, gildi 1) 0x01 (eitt bæti)
Innihaldsgerð (u8, gildi 1) 0x01 (eitt bæti)
sig_alg (u8, gildi 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 opinber lykill (1.952 bæti) 0x59 0x07 0xA0 + 1.952 bæti author_pubkey, cosigner_pubkey

4. Staðlaðar afleiðslur

4.1 qub_id

qub_id auðkennir qub einkvæmt og bindur QubEnvelope við SealedQub. Það er afleitt á ákveðinn hátt frá innihaldi umslagsins.

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

Kóðun lénsskiljara: Strengurinn "QUB_ID_V2" er 9 ASCII bæti. Einu 0x00 fyllingarbæti er bætt við til að ná 10 bætum í jöfnun. Útfærslur SKULU nota nákvæmlega þessi 10 bæti: [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00].

Kóðun outcome_at: V1.1 lengdi forhassið úr 92 bætum í 100 bæti til að fella valfrjálsa reitinn outcome_at inn í bindinguna. Fjarverandi outcome_at er kóðað sem 8 núllbæti; samskiptaregluvottendur hafna outcome_at <= 0 alls staðar, þannig að þetta merkigildi getur ekki rekist á við lögmætt gildi. Sjá §3.2 (þráðarsnið) og innanhúss-skjalið tasks/verdict-uplift-plan.md fyrir niðurstöðumekanismann sem hvetur til þessa reits.

Eiginleikar:

4.2 body_hash

body_hash = SHA3-256(body)

Þar sem body er hrár Vec<u8> innihaldsburður. Fyrir textaqub er þetta UTF-8 kóðaður qub líkami.

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

Þar sem title er valfrjáls hrein-texti titill sem birtist á niðurtalningu lesandans fyrir birtingu (sjá §3.2). NFC stöðlun keyrir á hash-tíma svo digestið sé stöðugt yfir sjónrænt jafngildar kóðapunktaraðir. Allt-núll sjenta er frátekið fyrir fjarverandi tilfellið; tómur strengur er hafnað á kanónísku CBOR mörkunum sem ókanónísk kóðun á "fjarverandi" (kanóníska kóðunin sleppir reitnum alveg).

4.3 Vörpun aflæsingarumferðar

drand_round = ceil((unlock_at - chain_genesis_time) / chain_period_seconds)
Færibreyta Heimild Dæmi
unlock_at Notenda-valdar Unix sekúndur UTC 1735689600 (2025-01-01 00:00:00 UTC)
chain_genesis_time drand keðju upplýsingar (genesis_time) 1595431050
chain_period_seconds drand keðju upplýsingar (period) 30

ceil() aðgerðin velur fyrstu drand umferð þar sem birtingartími er ≥ unlock_at. Þetta tryggir að qub verður ekki afkóðanlegt fyrir valinn aflæsingartíma.

Jaðartilfelli: ef (unlock_at - chain_genesis_time) er nákvæmlega deilanlegt með chain_period_seconds, er útkoman sú nákvæma umferð — qub aflæsist nákvæmlega við birtingartíma þeirrar umferðar.

Staðfesting: unlock_at SKAL vera í framtíðinni á innsiglunartíma. unlock_at SKAL EKKI vera meira en 10 ár frá created_at (til að takmarka langtíma drand áhættu; notendaviðmótið ÆTTI að vara við aflæsingardagsetningum lengra en 2 ár í burtu).


5. Þráðarsniða nýtegundir

Þráðarsniða nýtegundir veita öryggi á þýðingartíma gegn því að rugla CBOR bætum saman við JSON, hreinan texta, eða aðrar bætakóðanir.

Gerð Inniheldur Framleidd af Neytt af
SealedQubCbor Kanónísk CBOR af SealedQub serialize_sealed_qub() Upphlaðning í varanlega geymslu, lesandasókn
QubEnvelopeCbor Kanónísk CBOR af QubEnvelope serialize_qub_envelope() tlock dulkóðunarinntak, tlock afkóðunarúttak

5.1 Smíðareglur

// 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 Staðfesting við smíði

from_encoded() ÆTTI að staðfesta að inntakið byrji á gildum CBOR korta-haus. Full byggingarleg staðfesting gerist á þátta-tíma, ekki smíða-tíma, til að forðast tvíþáttun.


6. Skráning innihaldsgerða

Gildi Gerð Hámarks líkamsstærð Athugasemdir
0x00 Frátekið (ógilt) SKAL EKKI nota
0x01 Hreinn texti (UTF-8, takmarkað Markdown) 50 KB greitt / 10 KB ókeypis Sjá §10 fyrir birtingarreglur. Skiptingin á milli ókeypis / greitts er framfylgd af upphlaðningarþjónustunni; samskiptareglu-lagsins harða þak er 50 KB.
0x02 Frátekið (framtíð) Úthlutað fyrir framtíðar innihaldsgerð; ekki gilt í v1. Lesendur SKULU hafna samkvæmt reglunni hér að neðan.
0x03 Sáttmáli (tvíhliða samkomulag, CBOR líkami) 100 KB Líkami er kanónísk CBOR PactTerms (§6.1). Meðundirritun samkvæmt §9.7.
0x04 Úrskurður (sjálfsmat höfundar, CBOR líkami) 8 KB Líkami er kanónísk CBOR VerdictBody (§6.2). Aðeins gefið út af kerfis-hliðar verdict ætlun. Foreldris-tengsl eru á Parent-Tx-Id Arweave merkinu, ekki á líkamanum. Sjá verdict-uplift-plan §3.4.

Lesendur SKULU hafna óþekktum innihaldsgerðum með skýrri notenda-sýnilegri villu. Lesendur SKULU EKKI reyna að birta óþekktar gerðir sem texta.

6.1 Sáttmála líkami (content_type = 0x03)

Sáttmála líkami er kanóníska CBOR kóðun á PactTerms gildi:

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), value: String (≤ 2,000) }   // NFC on both sides
PartyIdentifier{ label: String (≤ 100), contact: Option<String (≤ 320)> }

Kanónískar CBOR lyklaraðir fyrir öll þrjú kortin eru gefnar í §3.2. Heildar raðtalaður sáttmála CBOR SKAL EKKI fara yfir 100 KB (passar við §6).

Hluttegundargreinir. Fyrsta röðin í terms fyrir structured/v1 sáttmála SKAL vera { key: "pact_schema", value: "structured/v1" }. Raðir án þessa merkis eru "sérsniðnir" sáttmálar og fá enga byggingarstaðfestingu eða hluttegundarmeðvitaða birtingu.

Frystar viðurkenningarrifur. structured/v1 sáttmálar bera nákvæmlega fjórar viðurkenningarraðir undir þessum lyklum:

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

value fyrir hvern er einn af átta frystum enskum strengjum valinn eftir (role, kind) pari, þar sem role ∈ { seller, buyer, provider, client } og kind ∈ { standard, capacity }. Strengirnir sjálfir eru stöðluð samskiptareglu-gögn — ML-DSA-65 undirskriftir beggja aðila skuldbinda sig við nákvæmu bætin í gegnum body_hash. Þeir eru EKKI staðfærðir; undirritaður líkami er tungumálahlutlaus. Allar orðabreytingar krefjast nýrrar hluttegundarútgáfu (structured/v2).

Strengirnir átta, uppfletting þeirra (acknowledgement_for(role, kind)), og rökstuðningur fyrir hverjum eru festir af viðmiðunarútfærslunni. Samsvarandi útfærslur SKULU senda byte-eins viðurkenningargildi; gulu-festu SHA3-256 body-hash prófanir sem hylja öll fjögur hlutverkasambönd grípa allan flutning.

Birtingarröð lesandans. Viðurkenningarstrengirnir innihalda orðasambönd eins og "lýst að ofan", sem gera ráð fyrir að lýsingar / umfangs raðir birtist á undan viðurkenningunum. Lesendur SKULU birta terms fylkið í CBOR röð; endurröðun brýtur merkingu textans.

Móttakanda samband. Þegar contact Party B er gilt tölvupóstfang, sendir qub upphlaðningarþjónustan sjálfkrafa skoðunar- / meðundirritunarboðspóst á sviðsetningartíma og bindur að lokum meðundirritunina við staðfestingu sama heimilisfangs (§9.7). Sáttmálar þar sem samband Party B er fjarverandi geta enn verið meðundirritaðir, en aðeins um band-utan rás — þjónustan hafnar meðundirritunarbeiðnum sem geta ekki framleitt samsvarandi 15-mínútna tölvupóst-staðfestingarmerki.

6.2 Úrskurðar líkami (content_type = 0x04)

Úrskurðar líkami er kanóníska CBOR kóðun á VerdictBody gildi:

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
}

Kanónísk CBOR lyklaröð:

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

Heildar raðtalaður úrskurðar CBOR SKAL EKKI fara yfir 8 KB (passar við skráningarröðina hér að ofan).

Útkomu-enum. Vír-bætið er ætlunarhlutlaust; flokkarnir fjórir Right / Partial / Wrong / Unfalsifiable ná yfir útkomurými sérhverrar úrskurðar-berandi ætlunar. Per-ætlun merkingar ("Rétt spáð" / "Stóð við það" / "Afgreitt" / "Staðfest" fyrir Right, o.s.frv.) eru birtingaratriði lesandans, leyst gagnvart ætlun foreldris-qub-sins — vírinn helst tungumáls- og ætlunarhlutlaus. Gildum utan 1..=4 SKAL hafnað við afkóðun.

Foreldris-tengsl. Úrskurðar-qub ber EKKI foreldris-tilvísunina í líkama sínum. Arweave-færslu-auðkenni foreldris-qub-sins er gefið út sem Parent-Tx-Id geymslumerki á upphlaðningartíma (§7 geymslumerkja-lag). Þetta heldur líkamanum sem sjálfstæðri undirritaðri yfirlýsingu um sjálfsmat; endurskoðunarkeðjan ("rétt um hvað?") er staðfest með Arweave-merkja uppflettingu.

Öryggi sönnunar-URL (skuldbindandi). Þegar evidence_url er til staðar, SKULU staðfestar (innsiglunarhlið, vír-hlið, Worker brún) framfylgja:

  1. Aðeins HTTPS. Strengurinn SKAL byrja á bæta-runu https://. Allar aðrar samskiptareglur — http, ftp, javascript, data, file, o.s.frv. — er hafnað.
  2. Lengdarþak. ≤ 2.048 bæti (vafraskráhámark í reynd).
  3. NFC + óvinveittra-kóðapunkta athugun. Sama regla og fyrir title og reflection — bidi-yfirskrift / núll-breidd / merkjablokk / BOM / C0 / C1 kóðapunktum er hafnað. Skilgreining passar við Rust crate::handle::contains_hostile_text_codepoint og TS workers/api/src/utils/unicode.ts::isHostileCodepoint (haldið í samspili).
  4. Engin auðstaf, engin ASCII stýring. Auðstaf / DEL / undir-0x20 bætum hvar sem er í URL-inu er hafnað — lokar \n/\t innspýtingar-vektornum sem bidi reglan nær ekki yfir.
  5. Ekki-tómt hýsil-hluti. Allt á milli https:// og fyrsta /, ?, eða # SKAL vera ekki-tómt.

Engin þjóns-hliðar sókn. Worker SKAL EKKI proxa, sækja, eða forskoða URL-ið. Samskiptareglan geymir streng; birting gerist lesanda-megin með rel="nofollow noopener noreferrer" target="_blank" og sýnilegum hýsil birtum samhliða tengill-texta.

Íhugun. Valfrjáls höfundar-ritaður íhugunartexti ("hvað breyttist, hvað lærðir þú"). Sama NFC + óvinveittra-kóðapunkta staðfesting og fyrir title. Tómt / aðeins-auðstafa inntak fellur niður í fjarverandi á smíðatíma.

Hluttegundarútgáfa. v1 styður aðeins verdict_version = 0x01. Framtíðar hluttegundarendurskoðanir hækka þetta bæti og lenda samhliða nýrri samskiptareglu-útgáfu samkvæmt §12.


7. Innsiglunarregla

Full innsiglunarröð. Hvert skref er staðlað.

 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.
 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 = ceil((unlock_at - chain_genesis_time) / chain_period_seconds).
    (Computed here, before qub_id, because drand_round is bound into the qub_id
    preimage — §4.1, V1.2.)
 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,
    unlock_at, drand_chain_id, drand_round.
12. Serialise SealedQub using canonical CBOR → SealedQubCbor.
12a. Generate K = 32 random bytes (CSPRNG) and N = 12 random bytes (CSPRNG).
     Compute W = wrap_sealed_qub(SealedQubCbor, qub_id=qub_id, key=K, nonce=N)
     per §13. The bytes uploaded to permanent storage are the OuterWrapper CBOR W,
     never the bare SealedQubCbor. K leaves the device only as the URL
     fragment in step 16.
13. Display seal-time disclosure. User confirms.
14. Validate upload eligibility via the qub upload service (bot-detection, entitlement, rate limits).
15. Submit W (the OuterWrapper bytes) to the qub upload service; the service
    signs and uploads to permanent storage. The service is byte-blind to the inner
    SealedQubCbor and never receives K.
16. Receive arweave_tx_id from the service. Construct delivery URL as
    `<origin>/c/<arweave_tx_id>#<base64url(K)>` (or `<origin>/s/<short_code>#<base64url(K)>`
    when a short code is allocated). Browsers do not transmit URL fragments
    to servers, so K is never observed by qub.social or any storage gateway.

Geymslumerkjalag (utan bands). qub upphlaðningarþjónustan festir vísvitandi lítið mengi af geymslufærslumerkjum við hlið hins pakkaða burðar. Content-Type=application/octet-stream er staðlað krafa. Viðmiðunarþjónustan festir auk þess þrjú valfrjáls merki þegar höfundur velur að sýna þau: Intent (heimilislisti-staðfestur samsetningarásetningur — t.d. quote, reply, commitment), Author (§9.3 opinber lykilfingrafar höfundar sem 64-stafa lágstafa hex), og Parent-Tx-Id (geymslufærsluauðkenni foreldris qub fyrir svar-keðjur, 43-stafa base64url).

Author merkið er opt-in fyrir hvern qub: viðmiðunar höfundarforritið festir það aðeins þegar notandi virkar opinbera rekjanleika beinlínis á innsiglunartíma. Þegar rofinn er af — sjálfgildið — er ekkert Author merki skrifað og qub er órekjanlegur á keðjunni: ekkert í varanlegri geymslu tengir upphlaðninguna við handle, tölvupóst, eða aðra qub höfundar. Þegar rofinn er á, leysist Author fingrafarið í valinn @handle höfundar í gegnum §9.5 staðfestingakeðjuna. Svar-keðju sambönd og Intent eru ekki auðkennandi. Ytri umbúðirnar (§13) vernda innri líkamann gegn dulkóðunarsamsvörun — koma í veg fyrir að uppskerumaður þekki og fjöldaafkóði qub-laga upphlaðningar eftir að drand umferð þeirra birtist.

Viðmiðunarþjónustan festir vísvitandi EKKI App-Name, App-Version, eða Type merki: hvert slíkt einnar gildis sía myndi skila öllum qub korpus til GraphQL fyrirspurnar, sem stangast á við líkamans-eingöngu trúnaðarumfang umbúðanna.

Samsvarandi staðfestingaraðili SKAL EKKI byggja á neinu geymslumerki fyrir §11 þriðju aðila staðfestingu; líkamstæti / qub_id / undirskrift skuldbindur sig aðeins við innri CBOR, aldrei merkjamengið.


8. Aflæsingarregla

Full aflæsingarröð. Hvert skref er staðlað.

 1. Viewer opens delivery URL. Extract arweave_tx_id from path AND
    K = base64url_decode(fragment) from the URL fragment. If the fragment
    is absent or malformed → display "this URL is missing its decryption
    key" and stop; the viewer MUST NOT contact the storage gateway
    without K, since fetching wrapped bytes the viewer cannot decrypt
    serves no purpose and only leaks the access attempt.
 2. Check denylist. If tx_id is denylisted → display block message. Stop.
 3. Fetch OuterWrapper bytes from permanent storage (with multi-gateway fallback).
 3a. Unwrap: parse the bytes as OuterWrapper (§13), verify the wrapper
    `version` byte is `0x01`, and compute SealedQubCbor =
    unwrap_sealed_qub(OuterWrapper, key=K). Any AEAD authentication
    failure (wrong K, tampered ciphertext, swapped qub_id-as-AAD,
    swapped nonce) → display "this URL's decryption key does not match
    the stored qub" and stop. Authentication failures are
    indistinguishable to the viewer per §13.5.
 4. Parse SealedQubCbor → SealedQub.
 5. Validate: SealedQub.version is known (0x01). Reject unknown versions.
 6. If current time < SealedQub.unlock_at → display countdown. Poll or wait.
 6a. Round-binding check (V1.2). Recompute expected_round =
    ceil((SealedQub.unlock_at - chain_genesis_time) / chain_period_seconds).
    Reject unless SealedQub.drand_round == expected_round AND the round baked
    into the tlock ciphertext stanza (read via the age/tlock header, no signature
    required) == expected_round. 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.
13. Verify: QubEnvelope.content_type is known and renderable.
    Known values: 0x01 (text), 0x03 (pact). 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 appropriate renderer (see §10 for text, §6 for pact).
17. Construct RevealedQub for display.

9. Höfundar-undirritun

9.1 Rökstuðningur

qub eru geymd í varanlegri geymslu. Höfundar-undirskriftir verða að halda áfram að vera ófalsanlegar að eilífu, sem er ástæðan fyrir því að v1.0 notar eftir-skammtafræðilegu ML-DSA-65 aðferðina (FIPS 204) frekar en klassíska aðferð þar sem öryggi gæti rýrnað innan varanlegrar líftíma qub.

9.2 Skráning algríms

sig_alg Aðferð Lyklastærð Undirskriftarstærð
0x00 Engin undirskrift (óundirritað)
0x01 ML-DSA-65 (FIPS 204) 1.952 bæti 3.309 bæti

Lesendur SKULU hafna óþekktum sig_alg gildum.

9.3 Smíði undirritaðs forhneppingar

Tvær útgáfur forhneppingar hafa verið til. Allar undirskriftir SKULU nota V2, og staðfestingaraðilar SKULU aðeins samþykkja V2. Eldri V1 forhneppingin (skjalfest hér að neðan til sögulegrar viðmiðunar) var samþykkt sem varaleið eingöngu við staðfestingu meðan á flutningi yfir í V2 stóð; sú varaleið hefur verið tekin úr notkun og undirskrift sem aðeins stenst V1 er nú hafnað.

V2 (núverandi — framleitt af allri nýrri höfundar-undirritun, og af báðum undirskriftum í sviðsetningar- / meðundirritunarflæði sáttmála):

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 fjarveru-gildisvenju og title_hash (§4.2.1): 32 núllbæti eru ekki gilt SHA3-256 úttak, svo „fjarverandi" getur aldrei rekist á fyrirliggjandi merkimiða. Allir reitir eru fastrar breiddar, svo forhneppingin er ótvíræð án lengdarforskeyta.

V1 (eldri — TEKIN ÚR NOTKUN; ekki lengur framleidd og ekki lengur samþykkt við staðfestingu):

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 forhneppingin sleppti sender_label og reply_to. Hún var samþykkt sem varaleið eingöngu við staðfestingu meðan á flutningi yfir í V2 stóð; sú varaleið hefur síðan verið tekin úr notkun — staðfestingaraðilar SKULU aðeins samþykkja V2 forhneppinguna. Skilgreiningin er varðveitt hér til sögulegrar viðmiðunar og til að útskýra lénsskiljarann hér að neðan. Undirskrift sem aðeins stenst staðfestingu gegn V1 SKAL meðhöndlast sem staðfestingarbrestur.

Lénsskiljarar: "QUB_AUTHOR_SIG_V1" / "QUB_AUTHOR_SIG_V2" eru 17 ASCII bæti hvor ([0x51, 0x55, 0x42, 0x5F, 0x41, 0x55, 0x54, 0x48, 0x4F, 0x52, 0x5F, 0x53, 0x49, 0x47, 0x5F, 0x56, 0x31/0x32]). Engin fylling. Ólíki skiljarinn lén-aðgreinir smíðarnar tvær, svo undirskrift yfir aðra forhneppinguna getur aldrei staðfest sem hin.

org_id_present bæti: bætið sem fylgir unlock_at SKAL vera 0x00. Viðmiðunarútfærslan birtir þetta sem fastann ORG_ID_PRESENT_INDIVIDUAL = 0x00 í crates/qub-core/src/signing.rs; lesendur sem endurbyggja sig_input fyrir staðfestingu SKULU senda sama bætið.

Umfang undirskriftar — hvað er hulið og hvað ekki. V2 sig_input skuldbindur sig beint við version, qub_id, body_hash, unlock_at, sender_label, og reply_to (auk fasta lénsskiljarans og org_id_present bætisins). qub_id er sjálft afleitt frá version, content_type, created_at, unlock_at, outcome_at, drand_round, og body_hash í gegnum §4.1 forhneppinguna, svo öll breyting á þessum reitum framleiðir annað qub_id og ógildir undirskriftina yfir tilfærslu. Beint-staðfest yfirborðið er því:

Reitur Staðfest af undirskrift Hvernig
version Bein inntak í sig_input
qub_id Bein inntak
body_hash Bein inntak
unlock_at Bein inntak
sender_label Bein inntak í gegnum sender_label_hash (V2 forhnepping — eina samþykkta formið)
reply_to Bein inntak í gegnum reply_to_or_zero (V2 forhnepping — eina samþykkta formið)
content_type Yfir tilfærslu, í gegnum qub_id forhneppingu
created_at Yfir tilfærslu, í gegnum qub_id forhneppingu
outcome_at Yfir tilfærslu, í gegnum qub_id forhneppingu
drand_round Yfir tilfærslu, í gegnum qub_id forhneppingu (V1.2)
body Yfir tilfærslu, í gegnum body_hash = SHA3-256(body)
author_pubkey — (gefið) Lykillinn sem staðfesti undirskriftina er höfundurinn, samkvæmt skilgreiningu
cosigner_pubkey / cosigner_signature Sjálfstætt undirritað yfir sama sig_input (sjá §9.7)
drand_chain_id, tlock_ciphertext, visibility Ytri SealedQub reitir, ekki innan umslagsins — huldir eigin byggingarinvariöntum (umferð / keðju samkvæmni) en ekki af höfundar-undirskriftinni. (drand_round er nú bundið yfir tilfærslu í gegnum qub_id forhneppinguna — sjá að ofan.)

Hvers vegna V2 er eina samþykkta forhneppingin.

Útfærslur sem birta sender_label eða reply_to til endanotenda SKULU sýna staðfest auðkenni (opinber lykils fingrafar, staðfesting) sem aðal auðkennismerki, ekki merkimiðann.

9.4 Staðfestingaraðferð

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."

Staðfesting undirskriftar er dýrasta aðgerðin (sérstaklega ML-DSA-65). Hún ÆTTI að vera framkvæmd eftir að allar ódýrari athuganir (tæti, qub_id, unlock_at) hafa staðist.

9.5 Auðkennisstaðfestingar

Auðkennisstaðfestingar — vörpun á author_pubkey í mannlæsileg auðkenniskröfur eins og qub handle, tölvupóstfang, samfélagsmiðla handle, eða passkey skilríki — eru lesanda-megin framsækin viðbót og eru ekki nauðsynlegar fyrir undirskriftarstaðfestingu. Lesendur sem leysa staðfestingar í birtingarauðkenni SKULU beita forgangi:

handle > email > social > fingerprint

Fingrafars varaleið er lágstafa hex af SHA3-256(author_pubkey); það er alltaf tiltækt fyrir hvert undirritað qub. Lesendur MEGA stytta það fyrir birtingu — viðmiðunarlesandinn birtir qub: og þar á eftir fyrstu og síðustu fjögur bætin (qub:<8 hex>…<8 hex>).

Samsvarandi staðfestingaraðili getur lokið hverri athugun í §9.4 án þess að hafa samband við qub API, án nokkurs netkerfis umfram varanlega geymslu og drand, og án nokkurrar miðlara-megin uppflettingar. Staðfestingaúrlausn er aðskilið besta-átaks skref framkvæmt aðeins eftir að undirskriftarstaðfesting hefur tekist.

9.6 Stærðaráhrif

Ed25519 ML-DSA-65
Undirskrift 64 bæti 3.309 bæti
Opinber lykill 32 bæti 1.952 bæti
Heild á hvern qub 96 bæti 5.261 bæti
Geymslukostnaðarmunur (við ~$5/MB) ~$0,0005 ~$0,026

Fyrir textaqub upp á 500–2.000 bæti þrefaldar ML-DSA-65 nokkurnveginn geymda stærðina. Heildarkostnaður er hverfandi.

9.7 Staðfesting meðundirritara (sáttmála tvíhliða samkomulag)

Fyrir tvíhliða samkomulag (content_type = 0x03), sannar annað undirskriftarlag að báðir aðilar samþykktu sömu skilmála.

Umslagsreitir:

Báðir reitir SKULU vera til staðar saman eða báðir fjarverandi. Ef nákvæmlega einn er til staðar SKULU lesendur tilkynna heilleikavillu.

Staðfestingaraðferð:

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."

Eiginleikar:

Tölvupósts-bindingar hlið (rekstrarlegt). Þegar sviðsetur sáttmáli ber Party B tölvupóst tengilið (§6.1), SKAL qub upphlaðningarþjónustan hafna meðundirritunarbeiðninni nema skammlíft tölvupósts-staðfestingarmerki sé til samsvarandi bæði sviðsetningar-id og staðlað-tölvupósts hash þess tengiliðs. Merkið er skrifað af /api/v1/auth/verify þegar magic-link auðkennið ber staging_id og staðfest heimilisfang passar við SHA-256(normalise_email(party_b.contact)) — þar sem normalise_email(addr) viðheldur hástafsstöðu staðar-hluta og lágstafar aðeins lén hlutann (samkvæmt RFC 5321 §2.3.11), og SHA-256 hér er NIST FIPS 180-4 hash (aðgreint frá SHA3-256 sem notað er í §4 afleiðslum) — og rennur út 900 sekúndum (15 mínútum) eftir útgáfu. Þetta er rekstrarleg and-yfirgjafa hlið, EKKI hluti af qub sönnun á keðjunni — þriðji aðila staðfestingaraðili sem endurspilar §11 þarf aðeins varanlega geymslu og drand, án nokkurrar miðlara-megin uppflettingar. Merkið er aðeins til miðlara-megin og er aldrei hluti af undirrituðum líkamanum.

Stærðaráhrif (ML-DSA-65 höfundur + meðundirritari):

Hluti Stærð
Höfundar-undirskrift 3.309 bæti
Höfundar opinber lykill 1.952 bæti
Meðundirritara undirskrift 3.309 bæti
Meðundirritara opinber lykill 1.952 bæti
Heildar dulkóðunaryfirvinna 10.522 bæti
Geymslukostnaðarmunur ~$0,05

10. Markdown birting og hreinsun

Þessi hluti er öryggis-mikilvægur. Lesandinn birtir textaqub (content_type = 0x01) með takmarkað Markdown hlutmengi.

10.1 Leyfðir þættir

10.2 Bannaðir þættir

Þáttur Meðhöndlun
Hrátt HTML (<div>, <script>, o.s.frv.) Strípað alveg. Ekkert HTML kemst í gegn.
Myndir (![alt](url)) Strípaðar. Mynd-málskipan er fjarlægð úr úttaki.
Tenglar ([texti](url)) URL birt sem sýnilegur hreinn texti. Ekki sjálfvirkt tengt. Ekki smelltanlegt án skýrrar notenda-aðgerðar.
Hættulegar URL áætlanir javascript:, data:, vbscript:, file: — strípaðar.
Iframes, ívofnir, hlutir Strípuð.
HTML einingar Afkóðaðar í birtingarstafi aðeins ef öruggar.

10.3 Útfærsla

Útfærslur SKULU nota strangan heimilislista-þáttara, ekki bannlista. Mælt með aðferð:

  1. Þátta Markdown með pulldown-cmark (eða jafngildu).
  2. Gangaðu yfir AST og slepptu öllum hnúti sem er ekki á heimilislistanum (§10.1).
  3. Fyrir tengla-hnúta: sendu URL sem sýnilegan texta, ekki sem smelltanlegan <a> þátt.
  4. Breyttu síaða AST yfir í tegundavarið milliform (t.d. MarkdownNode enum með aðeins öruggum afbrigðum). Hrátt HTML er byggingarlega ósýnilegt í þessu IR.
  5. Birttu frá tegundavarna IR yfir í markaðsýn (t.d. viðbragðs view-hluti, DOM hnúti). Engin HTML strengjasamtenging eða innerHTML á neinum tímapunkti.

Bannlista aðferðir eru viðkvæmar vegna þess að nýjar Markdown viðbætur eða þáttarasvíkjur geta innleitt ósíaða þætti. Tegundavarin-AST aðferðin gerir XSS byggingarlega ómögulegt — það er ekkert afbrigði sem getur borið handahófskennt HTML.

10.4 Stærðar- og byggingartakmörk


11. Þriðju aðila staðfesting

Hver þriðji aðili getur staðfest opinbert qub án qub samvinnu. Staðfestingaraðferð:

1. Obtain arweave_tx_id (from delivery URL or direct knowledge).
2. Fetch SealedQubCbor from any storage gateway.
3. Confirm storage block inclusion (block height, block timestamp).
4. Parse SealedQubCbor → SealedQub.
5. Fetch drand round signature for SealedQub.drand_round.
6. tlock_decrypt(tlock_ciphertext, round_signature) → QubEnvelope CBOR bytes.
7. Parse → QubEnvelope.
8. Verify SHA3-256(body) == body_hash.
9. Verify QubEnvelope.qub_id == SealedQub.qub_id.
10. Verify QubEnvelope.unlock_at == SealedQub.unlock_at.
11. If sig_alg != 0x00: verify author_signature (see §9.4).
12. All checks pass → qub is verified.

Hvað staðfesting sannar:

Sönnun Hvað hún setur fram
Skuldbinding Dulkóðaði textinn var til við geymslu-blokka-tímastimpil.
Heilleiki Hreinn-texti líkaminn passar við skuldbundna hashið og hefur ekki verið breytt.
Tímasetning Innihaldið var ólæsilegt þar til drand umferðin, sem samsvarar völdum aflæsingartíma (háð tlock og drand öryggisforsendum).

Hvað staðfesting EKKI sannar:

Ekki-sönnun Af hverju
Höfundarréttur sender_label er skreyting. Án sig_alg0x01, hefði hver sem er getað innsiglað þetta innihald.
Ásetningur qub sannar innihald og tímasetningu, ekki hvað höfundurinn meinti huglægt.
Tímasetning fyrir atburð Geymslu-blokka-innifel getur dregist um mínútur frá raunverulegri upphlaðningu. Skuldbindingar tímastimpillinn er blokka-tími, ekki augnablikið þegar notandi ýtti á „innsigla.“

12. Útgáfustjórnun

12.1 Samskiptareglu-útgáfa

version reiturinn (u8) í bæði SealedQub og QubEnvelope auðkennir aðal-útgáfu samskiptareglunnar.

12.2 Útgáfusaga

Útgáfa Gildi Lýsing
v1 0x01 Opinber textaqub (content_type 0x01), sáttmála tvíhliða samkomulag (0x03, structured/v1 hluttegund, ML-DSA-65 höfundur + meðundirritari), tlock, SHA3-256

12.3 Framvirk samhæfni

v1 lesandi sem rekst á QubEnvelope með óþekkta CBOR korta-lykla (lyklum ekki í §3.2 kanónísku röðinni) SKAL hafna umslaginu með afkóðunarvillu (§3.1). Framvirk samhæfni hvílir á version reitnum, ekki á lykla-umburðarlyndi: framtíðar viðbætur — jafnvel smávægileg lýsigögn — koma út undir nýju version gildi, sem v1 lesandi hafnar með skýrri „nýrri samskiptaregla“ villu frekar en að fella þegjandi niður efni sem undirskriftirnar skuldbinda sig við.

v1 lesandi sem rekst á sig_alg = 0x01 (ML-DSA-65) en skortir ML-DSA-65 staðfestingarstuðning ÆTTI að birta qub innihaldið með „undirskrift til staðar en ekki staðfestanleg“ tilkynningu, ekki að hafna qub alveg. Viðmiðunarútfærslan í dag hafnar hverju sig_alg gildi öðru en 0x00 og 0x01 vegna þess að v1 skráningin inniheldur ekkert annað gilt algrím — strangt höfnun og mjúk-bilun eru athugunarlega eins þangað til þriðja algrími er skráð. Mjúk-bilunarhegðunin að ofan verður burðar-berandi þegar §9.2 viðurkennir nýja færslu, og viðmiðunarlesandinn verður uppfærður til að mjúk-bila á þeim tímapunkti.

12.4 Ytri umbúða útgáfa

OuterWrapper sem lýst er í §13 ber sitt eigið version bæti, sjálfstætt frá SealedQub.version og QubEnvelope.version. Útgáfu-rýmin tvö þróast aðskild: framtíðar eftir-skammtafræðilega-örugg samhverf útskipting hækkar umbúða bætið án þess að snerta innri samskiptareglu-útgáfuna, og framtíðar samskiptareglu-lags viðbót (t.d. nýr umslagsreitur) hækkar innri útgáfuna án þess að snerta umbúða bætið.

OUTER_WRAPPER_VERSION_* Gildi Algrími Staða
OUTER_WRAPPER_VERSION_1 0x01 AES-256-GCM með 12-bæta nonce, 16-bæta sönnunarmerki, AAD bundið qub_id v1 sjálfgildi
0x020xFF Frátekið Framtíð

Lesendur SKULU hafna óþekktum umbúða útgáfum með skýrri villu. Samskiptareglan heldur vísvitandi umbúða útgáfu-rýminu þröngu þar til áþreifanlegur flutnings drifkraftur birtist (t.d. NIST leiðbeiningar sem hygla annarri AEAD); 0x02 rifa verður úthlutuð í sömu endurskoðun og innleiðir algrímið.


13. Ytri dulkóðunar umbúðir

13.1 Rökstuðningur

Samskiptareglu-lögin (QubEnvelope → tlock → SealedQub) gera innsiglaðan qub tímalæstan: líkaminn er ólæsilegur þar til unlock_at og drand umferðar undirskriftin hefur verið birt. Eftir aflæsingu er hins vegar umferðar undirskriftin opinber og kanóníska CBOR lögun SealedQub þekkjanleg, svo uppskerumaður sem flokkaði geymslufærslur gæti fjöldaafkóðað allan qub korpus.

Ytri dulkóðunar umbúðirnar loka þeirri rás með því að setja inn aukið samhverft AEAD lag á milli kanóníska SealedQubCbor og bætanna sem skrifuð eru í varanlega geymslu. 256-bita lykillinn K býr aðeins í URL brotinu á afhendingar URL og á notenda tækjum; vafrar senda ekki URL brot til miðlara, svo qub.social, hver geymslugátt, og hver CDN fyrir framan annað hvort eru athugunarlega blind fyrir K. Hver qub í varanlegri geymslu er því ógagnsær dulkóðaður texti þar sem hreinn-texti er óendurheimtanlegur án URL sem höfundurinn valdi að deila.

Nettóáhrif:

13.2 Lögun

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
  ↓ AES-256-GCM(K, nonce, AAD=qub_id) (§7 step 12a, this section)
OuterWrapper CBOR bytes              ← uploaded to permanent storage (§7 step 15)

Innsiglun og aflæsing á samskiptareglu-laginu (§7, §8) eru óbreytt undir umbúða-mörkunum; umbúðirnar festast við kallstað seal() og losna við kallstað unlock().

13.3 OuterWrapper gagnabygging

struct OuterWrapper {
    version:    u8,           // 0x01, see §12.4
    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
}

Reita-invariantar.

CBOR kóðun. Kanónísk CBOR samkvæmt §3, með sömu lyklaröðunarreglu (raðað eftir kóðaðri bætalengd hækkandi, síðan stafrófsröð). Fjórir lyklarnir eru:

Lykill Kóðuð bæti Röð
nonce 6 1
qub_id 7 2
version 8 3
ciphertext 11 4

Fyrsta bæti OuterWrapper CBOR er því ákveðin-lengdar korta haus fyrir 4-færslu kort (0xA4).

13.4 AAD binding við qub_id

Umbúðirnar binda qub_id sem AEAD viðbótar staðfest gögn. Þetta er burðar-berandi byggingarvörnin gegn þremur árásarflokkum:

Árás Vörn
Færa dulkóðunartexta undir annan qub_id reit í umbúðunum AAD ósamsvörun → AEAD staðfesting mistekst
Blanda saman URL broti qub A við varanlegrar-geymslu bæti qub B AAD ósamsvörun → AEAD staðfesting mistekst
Eiga við qub_id reit umbúðanna eftir upphlaðningu AAD ósamsvörun → AEAD staðfesting mistekst

Að bera qub_id í umbúða hreinum texta veikir ekki talningar-ónæmi merkjanlega — qub_id er sjálft SHA3-256 hash af §4.1 forhneppingu án endurheimtanlegrar forhneppingar úr digestinu, og talningarmaður sem þegar hefur uppskorið umbúða bætin lærir ekkert af sýnilega qub_id sem þeir gætu ekki ályktað út frá tilvist upphlaðningarinnar sjálfrar.

13.5 Umbúða og af-umbúða algrími

wrap_sealed_qub(SealedQubCbor S, qub_id Q, key K, nonce N):
    require K.len() == 32 and N.len() == 12 and Q.len() == 32
    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.4
    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
    return P                            // P is the inner SealedQubCbor

Bilunar-hams samhrun. Rangt K, rangt nonce, AAD ósamsvörun, og átta dulkóðunartexti framleiða allt sömu DECRYPT_FAILED villu. Þetta er vísvitandi AEAD eiginleiki: að aðgreina bilunar-haminn myndi skapa hliðar rás sem fjar árásarmaður gæti rannsakað með því að senda gallaðar umbúðir og tímamæla viðbragðið. Viðmiðunarútfærslur SKULU hrynja allar AEAD bilanir saman í eina villu lögun.

13.6 Lyklaefni og dreifing

Umbúða lykillinn K er 256-bita einsleitt handahófskennt gildi framleitt fyrir hvern qub af CSPRNG. Viðmiðunarútfærslurnar fá það frá:

Dreifing: K SKAL kóðað sem URL-örugg base64 (RFC 4648 §5, engin fylling) og bætt við afhendingar URL sem brot íhlut:

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

Brotið er aldrei sent til neins miðlara af samsvarandi vafra. Endurheimtarrásir (miðlara-megin saga skrá, opt-in tölvupósts sjálfsending) sem viðhalda fullum afhendingartengli — þar með talið brotinu — utan tækis notandans eru skýrt skipti á sjálfgefnu dulkóðun-tætings stöðunni og SKULU vera bundnar við skýrt samþykki notanda.

Tap brots. Ef notandi tapar URL brotinu og hefur enga endurheimtarrás, er qub ólæsilegt. Þetta er burðar-berandi skipti hönnunarinnar og SKAL upplýst um til notandans á innsiglunartíma. MVP styrkir innsiglunar-tíma upplýsingarnar með skýru "geyma þessa URL" texta og staðfest-tölvupósts endurheimtarrás fyrir notendur sem skrá sig inn.

13.7 Utan-umfangs fyrir þennan hluta

13.8 Opinber qub (umbúðum sleppt)

Ytri umbúðirnar eru valfrjálsar á afhendingarlaginu. Höfundur má innsigla qub sem opinbert, í hvaða tilfelli kanóníska SealedQubCbor er skrifað í varanlega geymslu beint, án OuterWrapper lags og án lykils K:

SealedQubCbor bytes  ──(public)──▶  uploaded to permanent storage as-is
SealedQubCbor bytes  ──(private)─▶  AES-256-GCM(K, …) ▶ OuterWrapper ▶ uploaded

Opinbert qub er tímalæst en ekki tengla-stýrt: það helst ólæsilegt þar til drand umferð þess birtist (tlock lagið er óbreytt), en eftir aflæsingu getur hver sá sem hefur arweave_tx_id afkóðað það — ekkert URL brot er krafist, því það er ekkert K. Þetta eru vísvitandi skiptin fyrir fleti sem miðlarinn verður að knýja: birtingar-tilkynningar tölvupóstar, þriðja-aðila innfellingar, og ríkari eftir-birtingar SEO þurfa öll tengil sem virkar án leyndarmáls sem miðlarinn heldur aldrei (§13.6).

Afleiðingar sem framleiðandi SKAL gera ráð fyrir:

Einka (pakkað) helst sjálfgildið; opinbert er skýrt val höfundar fyrir hvern qub.


14. Prófunarvigrar

14.1 qub_id afleiðsla

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  = 4695445  (= (1736294400 - 1595431050) / 30, 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 — V1.2):
  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)
  0x000000000047A595 ||  // drand_round as u64 big-endian (4695445)
  body_hash          ||  // 32 bytes
  title_hash             // 32 bytes (all-zeros sentinel; title absent)

Expected output:
  qub_id = SHA3-256(preimage)
         = 3a9fcb31b750d985c262fada6d4f777f
           d6a28be831d941d85c131f5a4bbaf8a4

Útfærslur SKULU framleiða eins body_hash og qub_id gildi fyrir þetta inntak. Þessi prófunarvigur ÆTTI að vera fyrsta einingaprófið skrifað. Kanónísku gildin að ofan voru reiknuð af viðmiðunarútfærslunni og SKULU passa bit-fyrir-bit. Sögulegar forhneppingar (fyrir-ræsing — engin lifandi qub voru háð þeim): 92-bæta V1.0 qub_id var 3d9fc2390eab043d38a1669ed3b71be76f9eefe872b9569ab1aaa027b88392b0; 100-bæta V1.1 qub_id (eftir að outcome_at_or_zero var fellt inn) var b0d032898ad629795150fdcb3f84e518f59ed05b7a2a82bc24ebdb87f52144ed. V1.2 fellir drand_round inn og hækkar lénsskiljarann í QUB_ID_V2.

14.2 Vörpun aflæsingarumferðar

Input:
  unlock_at           = 1735689600
  chain_genesis_time  = 1595431050
  chain_period_seconds = 30

Calculation:
  (1735689600 - 1595431050) / 30 = 4675285.0
  ceil(4675285.0) = 4675285

drand_round = 4675285

14.3 Kanónísk CBOR hringferð

Útfærslur SKULU staðfesta að serialize(parse(serialize(qub))) == serialize(qub) fyrir öll gild inntök. Þetta er eiginleika-próf, ekki einn vigur.

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)

Kanónísku CBOR bætin og SHA3-256 body_hash eru reiknuð af viðmiðunarútfærslunni. Útfærslur SKULU framleiða byte-eins CBOR fyrir þetta inntak.

Útfærslur SKULU einnig staðfesta að serialize(parse(serialize(pact))) == serialize(pact) fyrir öll gild PactTerms inntök (eiginleika-próf).

14.5 Ytri umbúða þvert-á-tungumál vigrar

Ytri umbúðirnar (§13) hafa sérstaka kanóníska fastingu á crates/qub-core/tests/vectors/wrapper_v1.json. Hvert tilvik festir (key, nonce, qub_id, sealed_cbor) túplu sem ógagnsæ hex inntök og staðfestir tiltekið expected_wrapper_hex úttak. Báðar viðmiðunarútfærslur neyta sömu JSON skrár:

Festingin festir nú þrjú tilvik:

Tilvik Þekja
basic-text-public Minnsta raunhæfa SealedQub lögun; engir valfrjálsir reitir. Festir kanóníska umbúða lögun fyrir v1.0-dæmigert qub.
with-recipient-pubkey SealedQub með recipient_pubkey sett (Phase 2 leið). Önnur innri CBOR lykla mengi, annað qub_id.
longer-body ~4 KiB líkami — æfir margbæta CBOR lengdarforskeyti innan bæði innra umslags og ytri dulkóðunartexta.

Útfærslur SKULU framleiða byte-eins expected_wrapper_hex fyrir skráð inntök. Að endurskapa festinguna krefst QUB_REGEN_VECTORS=1 cargo test -p qub-core --test wrapper_vectors og er frátekið fyrir vísvitandi sniða breytingar.


15. Stjórnun dulkóðunar-sniðs (framtíð)

Þessi hluti er upplýsandi fyrir v1 og verður staðlaður í fyrsta sinn þegar annað algrími kemur inn í einhverja af dulkóðunar grunneiningum qub.

15.1 Núverandi staða

Samskiptaregla v1 bindur nákvæmlega eitt algrími á grunneiningu:

Staðfestingaraðilar hörð-kóða nú lykla- og undirskriftarstærðir á grunneiningu. Engin liðleika yfirborð er sýnt af þráðarsniðinu.

15.2 Ætluð lögun

Þegar annað algrími kemur inn í samskiptaregluna, verður staðfestingaraðilinn stilltur fyrir nafngreint CryptoProfile (t.d. ExqubV1) sem lista nákvæma mengi af leyfðum gildum á grunneiningu — sig_algs, drand keðjur, umbúða útgáfur, innihaldsgerðir. Sniðið er fast á staðfestingartíma, aldrei samið í-bandi. Hvert gildi utan virka sniðsins er hafnað.

Þetta tryggir að það að bæta við ML-DSA-87 eða virkja Ed25519 getur ekki afturvirkt veikt fyrirliggjandi staðfestingar-stillingar: v1 staðfestingaraðili er enn v1 staðfestingaraðili jafnvel eftir að v2 snið er birt.

15.3 Kveikju skilyrði

Stigjaðu §15 upp í staðlaða stöðu þegar eitthvað af eftirfarandi er stungið upp á:

Þangað til er §15 staðsetningarmerki sem festir flutnings lögunina svo framtíðar PRs lendi á þekktum markmiði frekar en að endurræða samningayfirborðið frá grunni.


16. Gegnsæisannáll og endingarstig (Hönnun — endurskoðun lokið)

Staða. Þessi hluti er hönnunarforskrift. Þráðarsniðin, tæting og traustlíkanið að neðan eru staðlandi fyrir útfærsluna, en enginn gegnsæisannáls-kóði hefur verið sendur enn. W5 ytri endurskoðunin er lokið: §16.15 skráir leystu ákvarðanirnar og bindandi sjósetningar-takmarkanirnar sem komu út úr henni. Útfærsla má halda áfram undir þeim takmörkunum. §16 er enn framsýn í sömu merkingu og §15 — hann festir markmiðið svo útfærslan lendi á útkljáðri hönnun frekar en að endurleiða traustlíkanið í kóðaendurskoðun. Hann er strangt viðbótarlegur — hvert fyrirliggjandi qub heldur sinni einstöku Arweave-færslu og það er engin breyting á SealedQub / QubEnvelope þráðarsniðinu.

16.1 Rökstuðningur og endingarstig

Í dag hvíla bæði ending qub og tímaskuldbinding þess á einni Arweave-færslu á hvert qub (§11). Það tengir innsiglunar-biðtíma við Arweave-lokafærslu, gerir upphlaðninguna á hvert qub að vöruverðsþaki (ARWEAVE_DAILY_CEILING), og gefur enga fölsunar-augljósa röðun þvert á qub. Gegnsæisannállinn bætir tveimur lögum undir og umhverfis það eina stig:

Stig Nafn Trygging Hvenær
T1 R2-fyrst samstillt staðfesting Endingar-gólf — innsigluð bæti eru skrifuð í varanlega geymslu áður en innsiglunin skilar (< 300 ms p95). Hvert qub, samstillt (§16.10).
T2 Pakkað gegnsæisannáls-innifeli Algild eingöngu-viðbótar, fölsunar-augljós skuldbinding + heildarröðun, akkerað við Arweave. Hvert qub, frestað + pakkað (§16.5–16.7).
T3 Arweave-varanleiki á hvert qub Einstök Arweave-færsla fyrir qub. Greidd uppsala, og Arweave-óaðgengileika varaleið (§16.8).

T2 gerir Arweave á hvert qub að vali (T3) frekar en eina endingarleiðin. ARWEAVE_DAILY_CEILING er lagt niður sem vöruþak og lækkað í straumrofa á sérstaka akkeris-veskinu einu (§16.7); innsiglanir notenda eru aldrei hafnaðar fyrir að fara yfir það.

Endingar-heiðarleiki (leyst — §16.15 Q6). Ending fer ekki aftur á bak: T1 R2-skriftin er samstillt og skrifuð-einu-sinni, svo qub á frírri hæð sem keypti ekki T3 er að fullu endingargott á því augnabliki sem innsiglunin skilar. Það sem grófnar er sannanlegi efri-marka skuldbindingartíminn: fyrir frítt qub verður hann akkeris-blokka tíminn frekar en blokka-tími færslu á hvert qub. Við lítið magn — raunhæfa snemm-sjósetningar og utan-háanna staðan — er fulla daglega taktfastan dæmigerða gólfið, ekki sjaldgæft jaðartilvik. Vöru-rammasetningin er því efra mark með engri skuldbundinni tölulegri biðtöf — „innsiglað og endingargott núna; óháður opinber tímastimpill er bætt við á næsta annáls-akkeri (yfirleitt daglega)“ — og nákvæm-stundar skuldbindingar-sönnun er greidd T3 eiginleiki, upplýst á stiga-samanburðar fletinum og í skilmálum (§16.11, §16.15 Q6). Hvert tímamark er aðeins innra SLO, aldrei markaðssett SLA.

16.2 LogLeaf bygging (tvær skuldbundnar lögun)

Annáls-færsla er LogLeaf, kóðuð sem handskrifuð kanónísk CBOR undir §3.1 sniðinu (ákveðin-lengd, engin merki, engar fleytitölur, stysta-forms heiltölur, NFC texti, valfrjálsir reitir felldir út þegar fjarverandi, lyklar raðaðir eftir kóðaðri bætalengd hækkandi síðan bæti-fyrir-bæti). §3.1 þátta → endurkóða → bera saman kanóníska vörnin er beitt á kóðunarleiðinni fyrir tæting (ekki aðeins við afkóðun), svo tvær útfærslur geta ekki verið ósammála um lauf-bætin gegnum heiltölu-breiddar eða lyklaraðar mun. Allar heiltölur eru u8 / u64 / i64; öll digest eru 32-bæta bætastrengir (bstr[32]). Geymt Arweave-færsluauðkenni er hrátt 32-bæta SHA-256 digest borið sem bstr[32], aldrei base64url textastrengur (passar við §3.3).

Laufið hefur tvær lögun valdar með kind bæti, því á sjálfgefnu upphlaðningarleiðinni er Worker bæta-blindur: POST /api/v1/upload fær aðeins qub_id og unlock_at sem óáreiðanlegar staðhæfingar biðlarabody_hash, drand_round, created_at, og drand_chain_version eru öll innsigluð inni í §13 ytri umbúðunum, en lykil þeirra heldur Worker aldrei. Aðeins miðlara-innsiglunar-leiðin (POST /api/v1/seal) leiðir body_hash / drand_round af hreinum texta. Ein lauf-lögun sem ber body_hash + drand_round myndi því skuldbinda gildi sem rekandinn staðfesti aldrei fyrir meirihluta raunverulegra qub. Skiptingin heldur hverju skuldbundnu gildi heiðarlegu:

Lykill Kóð. lengd Gerð Tilvist Merking
seq 4 u64 krafist Algilt 0-grundað lauf-vísitala; staðan sem innifelis-sönnunin skuldbindur sig við.
kind 5 u8 krafist 0x01 vottað (miðlara-innsiglun) eða 0x02 staðhæft (biðlara-innsiglun / bæta-blind upphlaðning).
ref 4 bstr[32] krafist Lauf-tilvísunarauðkenni. Vottað → hrátt qub_id. Staðhæft → blindaða auðkennið SHA3-256(qub_id ‖ log_blind_secret) (§16.2.1).
chash 6 bstr[32] krafist Innihaldsvistfang SHA3-256(stored_bytes) — eina innihaldstengingin sem Worker getur alltaf reiknað heiðarlega, á báðum leiðum.
unlock_at 10 i64 krafist Afritað (vottað) eða staðhæft (staðhæft); staðfest > 0 áður en það fer inn í laufið.
received_at 12 i64 krafist Worker veggklukka við R2-staðfestingu. Ekki-sönnunarbært (rekanda-staðhæft; §16.6). Til staðar fyrir sjálfslýsingu, aldrei sönnun. Staðfest > 0.
body_hash 10 bstr[32] aðeins kind=0x01 Fellt út á 0x02 — Worker skortir það undir §13.
drand_round 12 u64 aðeins kind=0x01 Fellt út á 0x02.

kind=0x02 lauf skuldbindur vísvitandi hvorki body_hashdrand_round: það vottar skuldbindingu og röðun ógagnsæs dulkóðunartexta á innihaldsvistfangi chash, sem heldur fram qub_id og unlock_at — ekki hreinan texta þess eða umferð. Hreinn-texti/umferðar leggirnir fyrir staðhæft qub koma frá fyrirliggjandi §11 .qub-búnts staðfestingu, ekki frá annálnum (§16.11). drand_chain_version er ekki í laufinu (það er inni í umbúðunum á sjálfgefnu leiðinni); keðju-fínleiki býr á akkerinu (§16.7). Kóðunar-agi: hafna alnúll ref eða chash, og hafna ó-jákvæðu unlock_at / received_at, samhliða outcome_at > 0 sentinel-vörninni í cbor.rs.

16.2.1 Einka-qub blindun

Annállinn má ekki verða talningar-véfréttin sem §13 ytri umbúðirnar eru til að koma í veg fyrir (§13.1). Fyrir einka (pakkað) qub skuldbindur asserted laufið blindaða auðkennið SHA3-256(qub_id ‖ log_blind_secret), þar sem log_blind_secret er miðlara-haldið leyndarmál, og fellir út body_hash. Þriðji aðili getur ekki tengt slíkt lauf við tiltekið qub_id; handhafi qub, sem hefur afhendingar-URL og því qub_id, getur endurreiknað blindunina til að staðfesta sína eigin innifeli. Opinbert qub (þegar talningarbært, þegar berandi Visibility: public Arweave-merki samkvæmt §13.8) skuldbindur hrátt qub_id. Þetta er eini staðurinn þar sem sjálfstæð staðfestanleiki gefur vísvitandi eftir fyrir burðar-berandi einkalífs-invarianta; sjálfstæða tengingin fyrir einka qub er chash (§16.9).

log_blind_secret vörsla (leyst — §16.15 Q4). Blindunin verndar lauf-ótengjanleika, ekki hreins-texta trúnað (§13 umbúðirnar halda því sjálfstætt). Við log_blind_secret málamiðlun, fyrir hvert qub_id sem andstæðingurinn heldur þegar eða getur endurbyggt (hvert qub sem hann hefur búnt/URL af, auk hvers lág-óreiðu eða opinbers qub_id) endurreiknar hann lauf-ref í einu tæti og tengir það — þetta er bein tenging þekkts þýðis, ekki brute-force yfir óþekkt rými. Flokkaðu log_blind_secret sem fylgni/Sybil-stigs leyndarmál í sama vörslustigi og önnur miðlara-leyndarmál, og snúðu því aðeins framvirkt (snúningur endur-blindar framtíðar lauf; hann getur ekki afturvirkt aftengt þegar-akkeruð).

16.3 Lauf- og hnút-tæting

RFC 6962 §2.1 lén-aðgreind tæting með SHA-256 skipt út fyrir 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

Lén-forskeyti bætin 0x02 (færslukeðja, §16.4) og 0x03 (STH tæti, §16.6) eru frátekin og sundurlæg frá þessum. Þau eru stök bæti og geta því ekki rekist á fyrirliggjandi 10-bæta ASCII lén-aðgreinarana (QUB_ID_V2, o.s.frv.). Tréð er RFC 6962 vinstri-fullt ójafnvægt tré (hver innri skipting við stærsta tvíveldi strangt minna en lauffjöldi undirtrésins), sem leyfir innifelis- og samkvæmnis-sönnunum að deila einum endurskoðunar-slóðar algrími. Viðmiðunarforskriftin ber skýran vinstri/hægri afleiðslu-gerviforrita og festir ekki-tvíveldis (5-laufa) prófunarvigur svo hægri-jaðars upphækkunar tilvikið — sem 4-laufa vigur felur — er reynt.

16.4 Tæti-keðjun (innri)

LogDO viðheldur innri færslukeðju aðeins fyrir hruns-samkvæmni. Hún er aldrei birt og aldrei staðfestingaraðila-vísandi:

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

Birta eingöngu-viðbótar valdið er uppsöfnuð Merkle-rót + akkeri hennar (§16.5–16.6), aldrei hráa röðin sem rekandinn þjónar laufum í: keðjan endurreiknast fyrir hvaða röð sem þjónað er, svo aðeins akkeraða rótin festir kanóníska stöðu.

16.5 Uppsafnað Merkle-tré og pökkun

Það er eitt sívaxandi RFC 6962 tré yfir öll lauf í seq röð — ekki einangruð tré á hvern pakka. (Berandi-laufs-keðjuð smíði á hvern pakka var hafnað: hún er ekki sönn forskeytis-tengsl, svo „samkvæmnis-sannanir“ hennar eru óvissar.) Uppsafnaða tréð gefur ósviknar RFC 9162 samkvæmnis-sannanir og leyfir einu nýlegu akkeri að sanna innifeli fyrir hvaða eldra qub sem er.

LogDO Durable Object er eini skrifarinn (blockConcurrencyWhile, sem speglar QuotaDO / EntitlementDO) — að bæta við sameiginlegan annál er lesa-breyta-skrifa á sameiginlegri stöðu og SKAL því fara gegnum DO, aldrei KV. Hann skyndiminnir hægri-jaðar tréssins (O(log n) tæti) svo að loka pakka er O(batch). Pakki er mengið af laufum sem eru akkeruð saman; kveikjur hans eru stillanlegar, ekki samskiptaregla-frystar: tree_size framgangur um að minnsta kosti LOG_BATCH_MAX_LEAVES (sjálfgildi 4096), eða aldur sem nær akkeris-taktfastanum, eða þvinguð útskolun þegar greitt T3 innsigli lendir. root_i er uppsafnaða Merkle-trés tætið yfir lauf 0 .. tree_size_i.

16.6 Undirritaður trjáhaus gegnum Arweave-akkeri

Arweave-akkeris-færslan er undirritaði trjáhausinn og kemur í staðinn fyrir undirritun rekanda fyrir trjáhausinn sjálfan: daglega akkerið þarf engan qub-lykil því Arweave-færslu owner er undirskriftin. Vígisrökin halda — óbreytanlega undirlagið, ekki qub-haldið leyndarmál, er burðar-berandi fyrir akkeruðu rótina.

Það er nákvæmlega einn heitur qub-undirritunarlykill í hönnuninni, og hann er festur: kvittunarlykillinn á hverja innsiglun (§16.10). Opinber lykill hans er skuldbundinn í LogProfile (dreift með staðfestingaraðilanum) og þver-undirritaður af anchor_owner, svo staðfestingaraðili staðfestir kvittun gegn sömu festu rótinni og akkerið. Þetta er lausn §16.15 Q2 — ófestur, rekanda-snúanlegur kvittunarlykill væri afneitanlegur (rekandinn gæti neitað að lykillinn væri hans), sem myndi ógilda ábyrgðargildi kvittunarinnar gegn rekanda-stigs andstæðingnum sem kvittunin er til að hindra. Svo: qub heldur engum ófestum annáls-undirritunarlykli; kvittunarlykillinn er festur og anchor_owner-þver-undirritaður.

SignedTreeHead er kanónísk CBOR (lyklar eftir kóðaðri lengd): size:u64, root:bstr[32], batch:u64, prev:bstr[32] (fyrra sth_hash; uppruni = 32 núll-bæti), log_id:bstr[32], first_seq:u64, anchored_at:i64. Tæti hans er sth_hash = SHA3-256(0x03 || canonical_cbor(SignedTreeHead)).

Fest traustrót. log_id = SHA3-256("QUB_TLOG_V1" || anchor_owner_address). Samræmdur staðfestingaraðili SKAL krefjast anchor_tx.owner == LogProfile.anchor_owner, þar sem anchor_owner (og kvittunarlykils opinber lykill) er bakaður inn í qub_core sem LogProfile — samhliða quicknet föstunum sem þegar eru í DrandTimelockProvider::quicknet() — og dreift með staðfestingaraðila-tvíundunni. Staðfestingaraðilinn SKAL einnig staðfesta Arweave-færslu gögn → tx_id bindingu staðbundið frekar en að treysta gáttar /raw/ svari. Þetta lokar þrjóts-veskis tvíræðnis-holunni: „akkerað á Arweave“ er merkingarlaust þar til staðfestingaraðilinn festir hvaða veski.

Snúningur er §15 stjórnunar-útvíkkun, ekki endurnýting (leyst — §16.15 Q3). §15.2 sniðs-yfirborð telur nú aðeins upp sig_algs / drand keðjur / umbúða útgáfur / innihaldsgerðir, og §15.3 kveikjur telja enga þeirra — LogProfile / anchor_owner er ekki enn á yfirborði §15. Snúnings-stjórnun verður því að byggja: §15.3 er útvíkkað (að neðan) til að bæta við LogProfile kveikjunni, og snúningur er undirritað LogProfile hækkun send í staðfestingaraðila-uppfærslu. Áætlaður snúningur ber útgengna → ingangs þver-undirskrift; málamiðlunar-drifinn snúningur getur það ekki (útgengni lykillinn er óáreiðanlegur/óaðgengilegur einmitt þá) og fellur til baka í §15-stjórnaða hækkun, með fyrra-akkeris klofnings-athugunni (að neðan) sem afmarkar skaða á meðan.

Tvíræðnis-gluggi (fyrsta-flokks traustbreyta). Lauf er tvíræðnis-ónæmt aðeins þegar þekjandi akkeri þess er Arweave-staðfest. Glugginn er received_at → akkeris-staðfesting (≤ taktfasti + Arweave-lokafærsla). Innan hans eru einu tryggingarnar festa innsiglunar-kvittunin (§16.10) og rekstrar-heilleiki qub. Þrír ábyrgðar-gripir gera þetta heiðarlegt frekar en handveifað (vitnislíkanið er lausn §16.15 Q2):

  1. Fest undirrituð innsiglunar-kvittun — SCT-hliðstæðan sem skilað er í upphlaðningar-svarinu (§16.10), undirrituð af festa, anchor_owner-þver-undirritaða kvittunarlyklinum. Lauf sem er fellt áður en akkeri þess kemur skilur fórnarlambinu eftir óafneitanlega kvittun til að birta, sem lokar þöglu-úrfellingar holunni.
  2. Birt vöktunar-aðferðafræði + fyrra-keðju ganga — akkeris prev keðjan er gengin haus→uppruni; klofningur (tvö akkeri við eina size með ólíkri root, eða brotin prev) er birtanleg sönnun misferlis. Tvíræðnis-greining er yfirlýst rekstrar-skuldbinding, ekki þögul forsenda.
  3. Tvöfaldir sjálfs-birtir hausar — hver nýr haus {sth_hash, tree_size} er settur á sérstaka qub-eigna opinbera, eingöngu-viðbótar GitHub-gagnasafnið (burðar-berandi fölsunar-augljósa sjálfs-birtingar-leggurinn), með samfélags-færslu sem bestu-viðleitnis staðfestingu eingöngu. Misheppnuð birting SKAL kalla á (ekki bila þögult).

Heiðarleika-mark (bindandi takmörkun). Þar sem qub stýrir báðum birtingar-flötum er þetta sjálfs-birt, ekki óháð vottað. Enginn vöru-, markaðs- eða lögfræði-flötur má halda fram að annállinn sé „óháð vottaður“; leyfða fullyrðingin er að tvíræðni sé greinanleg og skilji eftir óafneitanlega kvittun. Sannt óháð þriðja-aðila vitni er frestað til framtíðar §15 stjórnunar-hækkunar.

received_at er rekanda-staðhæft og engin fullyrðing má hvíla á því — það er aldrei sýnt sem sönnun eða sem ágreinings-staðfesting á neinum vöru- / lögfræði- / API- / sönnunar-birtingar fleti. Arweave-akkeris-blokka tíminn T er eini traustlausi tímastimpillinn (efra mark á „skráð fyrir“). Hver vöktunar-heilbrigðis-athugun á received_at SKAL bera saman við T, ekki við rekanda-stýrða anchored_at STH reitinn; slík athugun er vörn gegn klukku-villu heiðarlegs rekanda eingöngu, ekki ábyrgðar-stjórntæki gegn illgjörnum rekanda (§16.15 Q5).

16.7 Akkeris-færslusnið og taktfasti

AnchorBundle er kanónísk-CBOR Arweave-færslu líkami, skrifaður gegnum §16.8 búntarann: ver:u8, sth:bstr (kanónísk SignedTreeHead bæti), prev_anchor:bstr (fyrra akkeris-færsluauðkenni hrá bæti; fellt út við uppruna), chain_hash:tstr (drand keðjan í gildi — quicknet), og lauf-CBOR straumur pakkans í seq röð svo akkerið er sjálfstætt: vöktun endurleiðir root af líkamanum með núll qub-háðni. (Ef lauf-straumurinn verður stór við hátt magn má framtíðar endurskoðun skuldbinda aðeins lauf-svið með tilvísun; tekið fram, ekki tekið upp í v1.)

Arweave-merki eru vísvitandi talningarbær — annállinn á finnast, ólíkt einka qub: App-Name: qub-tlog, Anchor-Format: 1, Log-Id: <hex>, Batch: <n>, Tree-Size: <n>, Root: <hex>, Prev-Anchor: <tx>, Content-Type: application/cbor. Merki eru óáreiðanlegar vísbendingar; CBOR líkaminn er eina valdið.

Taktfasti: daglega sjálfgefið, endurskoðað með magni (stærðar-kveikjan styttir sjálfkrafa virka taktfastann undir álagi); greitt T3 innsigli þvingar akkeri svo greiðandi viðskiptavinir bíða aldrei dag. Akkeris-veskið er sérstakt og lág-hraða, aðskilið frá upphlaðningar-veskinu — það SKAL vera sitt eigið JWK (aðgreindur lykill, ekki rökrétt hlutverk á upphlaðningar-veskinu) svo upphlaðningar-veskis málamiðlun geti ekki falsað akkeri — með hörðu akkeris-færslu fjárhagsáætlun á dag (lækkaða ARWEAVE_DAILY_CEILING). Vörslustaðan er sögð berum orðum: þröng-umfangs heitur lykill með þéttum straumrofa og lágu jafnvægi, ekki „kaldur“ — veski sem sjálf-undirritar daglega getur ekki verið kalt, og forskriftin þykist ekki annað.

16.8 ANS-104 búntari

Innanhúss ANS-104 DataItem kóðari og djúp-tæti undirritari, um það bil 300 línur, aðeins Web Crypto, núll npm háðir (báðir Turbo SDK falla á npm ci --ignore-scripts aðfangakeðju-hliðinu). DataItem bæta uppröðun:

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

Undirritun er Arweave deepHash — endurkvæmt SHA-384 digest (Arweave þráðar-krafa, crypto.subtle.digest("SHA-384")) yfir ["dataitem", "1", sig_type, owner, target, anchor, encoded_tags, data] — síðan RSA-PSS yfir djúp-tætið með veskis-JWK gegnum crypto.subtle; id = base64url(SHA-256(signature)). SHA-384 hér er einangrað sem Arweave-þráðar-eingöngu grunneining, aldrei qub traust-grunneining (§15 skráir girðinguna; qub trausttæting er SHA3-256 alls staðar).

Ein kóðaleið þjónar þremur neytendum: greitt T3 á-hvert-qub varanleiki, Arweave-óaðgengileika varaleið (setja DataItem í biðröð, skila R2-fyrst staðfestingu óháð — þetta lokar núverandi ARWEAVE_UNAVAILABLE 503 öngstræti), og skrifun AnchorBundle. Undirskriftarkerfi (leyst — §16.15 Q8): v1 undirritar með RSA-PSS (undirskriftargerð 1) sem endurnýtir fyrirliggjandi Arweave-veskis JWK fyrirkomulag (núll ný langlíf lykil-varsla, þjónar „einu leyndarmáli færra“ rökunum); Ed25519 er frestað til §15 PQ-flutnings-leiðar.

Handvalsaða djúp-tætið er hæst-áhættu, lægst-náttúrulega-þekju kóðinn í W5, svo hliðun þess er ósamningshæf (§16.15 Q8):

  1. Þver-mál festingin tlog_v1.json (Rust + TS, §14.5 wrapper_v1.json mynstrið) þekur djúp-tæti, DataItem bæti + id, lauf-tæti, 5-laufa rót + endurskoðunar-slóð, STH tæti, innifelis-sönnun, og samkvæmnis-sönnun — í bæði undirritunar- og staðfestingar-áttinni (staðfestingar-áttin skiptir máli því §16.6 staðbundna tx → tx_id athugunin dregur djúp-tætið inn í hvern sjálfstæðan staðfestingaraðila, ekki aðeins skrifarann).
  2. Einskiptis víxlvirkni hringferð gegnum viðmiðunar ANS-104 búntara, neytt sem stöðug prófunargögn eingöngu — aldrei npm keyrslu-háð (Web-Crypto-eingöngu / engin-uppsetningar-skriftu staðan stendur).
  3. Djúp-tæti + RSA-PSS leiðin verður að fara hringferð gegnum sömu crypto.subtle grunneiningar og framleiðsla notar, svo innanhúss kóðarinn er bæta-samhæfur.
  4. Áframhaldandi eftir-búnts samþykkis-vöktun staðfestir að hvert akkeri / varaleið DataItem nái raunverulega Arweave-samþykki, með viðvörun + straumrofa — því djúp-tætið þjónar einnig Arweave-óaðgengileika varaleiðar-biðröðinni, svo þögul afturför myndi fylla þá biðröð með net-höfnuðum atriðum á meðan einmitt þeirri bilun sem hún er til að dekka stendur.

16.9 Innifelis- og samkvæmnis-sannanir

Báðar eru RFC 9162, SHA3-256, þjónaðar sem kanónísk CBOR.

InclusionProofGET /api/v1/qub/:tx_id/proof: ver:u8, leaf:bstr (nákvæma lauf-CBOR — staðfestingaraðilinn endurreiknar leaf_hash sjálfur og treystir aldrei tilteknu tæti), 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 }.

ConsistencyProofGET /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. Einn ótvíræður lyklalisti, festur með prófunarvigri.

Sjálfstæð staðfesting (enginn qub-miðlari, útvíkkar §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).

Sönnunar-þjónandi geymsla SKAL vera hnita-lyklað (leyst — §16.15 Q7, hindrandi forsenda). Köld-laufs sönnunar-framleiðsla er réttleika-hlutlaus aðeins ef R2 endurskoðunar-efnið er viðvarandi Merkle-hnúta geymsla lyklað eftir algildu trés-hniti (level, index) — ekki á-hvern-batch hnúta-mismunum. Með hnita-lyklaðri geymslu er hver (leaf i, size N) endurskoðunar-slóð mengi af O(log N) beinum R2 GET með engri endurreikningu þvert á pakka-mörk; með pakka-lyklaðri geymslu er hún það ekki, sem er geymslu-uppröðunar gjáin sem þessi lausn lokar. Lauf-líkamarnir eru sömuleiðis innihaldsvistfangsbærir eftir seq. W5 prófunarvigur SKAL sanna uppruna-tíma kalt lauf gegn miklu-seinni rót með aðeins R2 + Arweave með LogDO geymsluna þurrkaða út, svo endurheimtar-öryggis fullyrðingin í §16.13 er studd frekar en staðhæfð. O(log N) raðbundnu R2 GET tilheyra aðeins ósamstilltu sönnunar-endapunktinum — aldrei innsiglunar-heitri-leið (§16.10) eða á-hverja-tikk cron.

16.10 R2-fyrst staðfestingar-röðun

POST /api/v1/upload röðin verður:

  1. Fram-helmings hlið (auðkenning, staðfesting, sjálfvirkni-leysni brota-lykill) — óbreytt.
  2. Samstillt await QUB_CACHE.put(qub-cache/<tx_id>, wrappedBytes) — endingar-gólfið; lokar einnig W1 forskyndiminnis-kapphlaupinu (áður ctx.waitUntil eftir Arweave-sendinguna).
  3. Samstillt await LogDO.append(leaf) — eitt í-colo DO RPC; eini skrifarinn úthlutar seq, framlengir færslukeðjuna, og uppfærir jaðarinn. (LBS á sameiginlegri stöðu → DO, aldrei KV.) append RPC gerir aðeins það — O(batch) Merkle pakka-loka vinnan keyrir utan þessa RPC á LogDO viðvöruninni, annars rýkur viðbótar-p95 upp við hverja LOG_BATCH_MAX_LEAVES-tu innsiglun.
  4. Skila staðfestingu núna — með innsiglunar-kvittuninni (undirritaðri af festa kvittunarlyklinum, §16.6) og { tx_id, log_seq, anchor_status: "pending" }. Marg-sekúndna Arweave útbreiðslan er fjarlægð úr gagnrýnu leiðinni.
  5. Eitt ctx.waitUntil setur frestaða vinnu í biðröð: á-hvert-qub Arweave sendingin (nú bestu-viðleitni / greidd; við bilun beinist hún í búntara varaleiðar-biðröðina frekar en að 503-a notandann) auk fyrirliggjandi bráðabirgða-lýsigagna skrifa. Pakka-loka og akkering keyra sjálfstætt af LogDO viðvöruninni og daglegu akkeris-cron. Ekkert ctx.waitUntil inni í lykkju; fyrirliggjandi sjálfvirkni-leysni brota-lykill er varðveittur.

Biðtíma-fjárhagsáætlun (leyst — §16.15 Q7). < 300 ms p95 markmiðið er mælt sjósetningar-hlið, ekki forsenda. Heiðarlega gagnrýna leiðin er fram-helmings KV lestrar + eitt R2 PUT + tveir raðbundnir Durable Objects — fyrirliggjandi QuotaDO innsiglunar-kvóta skuldfærsla og nýja LogDO viðbótin — svo fjárhagsáætlunin verður að gera ráð fyrir tveimur í-colo DO hringferðum, ekki einni. Sendu LogDO biðtíma-viðvörun sem speglar QuotaDO, og meðhöndlaðu p95 afturför sem útgáfu-hindrun.

16.11 Traustlíkan — nákvæma fullyrðingin, afmörkuð eftir lauf-tegund

Fyrir kind=0x01 (vottað): „Þetta innihald — líkami sem passar við body_hash, auðkennt með qub_id — var skuldbundið í eingöngu-viðbótar annál qub á stöðu seq og var til eigi síðar en Arweave-blokka tími T; það var dulfræðilega ólæsilegt þar til drand umferð R = unlock_round(unlock_at).“ Þetta er fulla {tlock umferðar-binding + Merkle innifeli + akkeruð rót} þrenndin.

Fyrir kind=0x02 (staðhæft, sjálfgefið): „Ógagnsær dulkóðunartexti með innihaldsvistfangi chash, sem heldur fram qub_id og unlock_at, var skuldbundinn í eingöngu-viðbótar annálinn á stöðu seq og var til eigi síðar en Arweave-blokka tími T.“ Umferðar- og líkama-leggirnir eru lagðir til af fyrirliggjandi §11 .qub-búnts staðfestingu (qub_core::unlock), ekki af annálnum; það sem annállinn bætir yfir bera á-hvert-qub færslu er fölsunar-augljós röðun, traustlaus efri-marka skuldbindingartími, og tvíræðnis-ónæmi.

Báðar fullyrðingar útiloka, samkvæmt §11: höfundarrétt án sig_alg ≥ 0x01, ásetning, og undir-akkeris-fínleiks tímasetningu. Hvorug leyfir neinni fullyrðingu að hvíla á received_at.

Fullyrðingar-þak (bindandi sjósetningar-takmörkun — leyst §16.15 Q1). Fyrir frí / sjálfgefin (kind=0x02) qub er afmarkaða kind=0x02 fullyrðingin að ofan þakið á því sem hver vöru-, markaðs-, skilmála-, eða sönnunar-birtingar flötur má halda fram. Enginn flötur má fullyrða eða gefa í skyn að annállinn sanni innihaldið eða aflæsingarumferð sjálfgefins qub — annállinn sannar röðun + traustlausan efri-marka skuldbindingartíma ógagnsæs dulkóðunartexta. Innihalds- og umferðar-sönnun kemur eingöngu frá fyrirliggjandi §11 .qub-búnts staðfestingu, sem er annáls-óháð. Þetta er hörð sjósetningar-hindrun á texta, ekki stílræn val; það er lausnin sem heldur bæta-blindu sjálfgefnu leiðinni heiðarlegri.

16.12 Útgáfustjórnun og W3 samhæfing

Það er engin SealedQub þráðar-hækkun og því engin samskiptaregla-útgáfu hækkun (§12.1): annállinn er hliðarvagn sem skuldbindur sig við fyrirliggjandi reiti og bæti, svo hann fer ekki inn í §12.2 samskiptaregla-útgáfusöguna. Valfrjáls drand_chain_version W3 er ósnert og er enn eini valfrjálsi SealedQub reiturinn. Þess í stað kynnir annállinn sín eigin sjálfstæðu útgáfu-rými — LOG_VERSION_1, ANCHOR_FORMAT_1, InclusionProof.ver — sem speglar §12.4 umbúða-útgáfu sjálfstæðið (umbúðirnar bera útgáfu-bæti sjálfstætt frá samskiptaregla-útgáfunni, og annáls-útgáfurnar fylgja sömu aðgreiningu).

Sönnunar-afhending er sótt sjálfgefið, með valfrjálsri samferð. Sönnun getur ekki verið til á innsiglunartíma (akkerið hefur ekki verið skrifað enn), svo innsiglunar-tíma .qub búntið helst sönnunar-laust. W7 staðfestingaraðili sækir GET …/proof einu sinni, eða í fullkomlega-ótengdum ham endurbyggir sönnunina af opinbera AnchorBundle gegnum Arweave-fyrirspurn á Log-Id. .qub búntið (W7) frátekur valfrjálsan inclusion_proof lim — fjarverandi við innsiglun, fyllt af eftir-akkeris endurútflutningi fyrir kalda geymslu — sem fylgir sama „valfrjálsa, fellt út sjálfgefið, viðbótarlega“ mynstri og W3 drand_chain_version.

16.13 Varðveisla

Varðveislu-gluggar fyrir LogDO opna halann, R2 sönnunar-þjónandi undirlagið, akkeris-straumrofa teljarana, og búntara varaleiðar-biðröðina eru tilgreindir í docs/DATA-RETENTION.md. Meginregla: heita á-hverja-færslu geymsla annálsins (LogDO) er endurheimtanleg eftir akkeri; endurskoðunar-efni hennar — hnita-lyklaða (level, index) Merkle-hnúta geymslan + seq-vistfangsbæru lauf-líkamarnir (§16.9) + Arweave-akkerin — er varanlegt. Að endurheimta kalt lauf úr DO ógildir aldrei útgefna sönnun, því sönnun leysist gegn þeirri varanlegu R2 hnúta-geymslu og Arweave-akkerinu, ekki DO (og §16.9 þurrkaða-DO prófunarvigurinn sannar það).

16.14 Prófunarvigrar

W5 sendir þver-mál festinguna tlog_v1.json (§16.8) auk unninna vigra: kind=0x01 og kind=0x02 lauf → leaf_hash; 5-laufa uppsafnaða rótin; ein innifelis-sönnun; ein samkvæmnis-sönnun; eitt AnchorBundle; og eitt DataItem id. Þessir búa samhliða §14.5 ytri-umbúða vigrunum og eru reyndir af bæði Rust (qub-core) og TypeScript (Worker) útfærslunum.

16.15 Endurskoðunar-ákvarðanir (W5 — leystar)

W5 ytri endurskoðunin (andstæð hönnunar-yfirferð + eigenda samþykki) er lokið. Hver ákvörðun að neðan er útkljáð og endurspegluð í §16 textanum að ofan; bindandi sjósetningar-takmarkanirnar eru endurteknar í lokin. Útfærsla má halda áfram undir þeim.

  1. Sjálfgefin-leiðar (kind=0x02) lauf-heiðarleiki — LEYST. Sendu tveggja-lauf-tegunda skiptinguna eins og tilgreint er: kind=0x02 skuldbindur hvorki body_hashdrand_round. Enginn *_body_hash reitur á bæta-blindu leiðinni (það væri læsilegasta falska „staðfesta“ merkið fyrir samþættingaraðila og er þægindi sem §11 veitir þegar af búntinu). Krefstu ekki miðlara-innsiglunar fyrir annáls-vottuð qub (það myndi þvinga hreinan texta gegnum Worker og eyðileggja dulkóðun-tætings vígið). Hver sjálfslýsandi skammhlaup tilheyrir .qub búntinu / sönnunar-umslagi sem staðfestingaraðila-endurreiknaður reitur, aldrei lauf-reitur. Eigenda-staðfest fullyrðingar-þak: §16.11.
  2. Tvíræðnis- / úrfellingar-ábyrgð — LEYST. Innsiglunar-kvittunarlykillinn er festur í LogProfile + anchor_owner-þver-undirritaður (lokar fyrri „enginn undirritunarlykill“ mótsögn; §16.6). Sjósetningar-vitnislíkan: fest kvittun + vöktunar-aðferðafræði + fyrra-keðju ganga + tvöfaldir sjálfs-birtir hausar (qub-eignað opinbert GitHub-gagnasafn, samfélag bestu-viðleitni), markaðssett sem greinanlegt + kvittað, aldrei óháð vottað. Sannt þriðja-aðila vitni er frestað til §15 stjórnunar-hækkunar.
  3. Fest akkeris-eiganda traustrót + snúningur — LEYST. Taktu upp LogProfile festinguna (§16.6); staðfestingaraðilinn athugar anchor_tx.owner == anchor_owner og staðfestir tx gögn → tx_id bindingu staðbundið. Snúnings-stjórnun er §15 útvíkkun til að byggja (§15.3 kveikju bætt við), ekki endurnýting; áætlaðir snúningar þver-undirrita, málamiðlunar-drifnir snúningar falla til baka í §15 hækkun með klofnings-athuguninni sem afmarkar skaða.
  4. Einka-qub lauf-blindun — LEYST. Haltu blindun fyrir einka qub (ref = SHA3-256(qub_id ‖ log_blind_secret)), hrátt qub_id fyrir opinber qub (þegar §16.2.1), chash sem sjálfstæðu tenginguna. log_blind_secret er fylgni/Sybil-stigs leyndarmál, snúa-framvirkt eingöngu (§16.2.1).
  5. received_at — LEYST. Haltu því í laufinu, skuldbundnu en skýrt ekki-sönnunarbæru; aldrei sýnt sem sönnun eða ágreinings-staðfesting á neinum fleti. Hver vöktunar-heilbrigðis-athugun ber saman við Arweave-blokka tíma T, ekki rekanda-stýrða anchored_at (§16.6).
  6. Frí-hæðar sannanleg-tímasetning — LEYST (eigenda samþykki). Ending fer ekki aftur á bak; aðeins sannanlegi efri-marka skuldbindingartíminn grófnar í akkeris-blokka tíma. Frí-hæðar texti notar engan tölulegan SLA („…bætt við á næsta annáls-akkeri, yfirleitt daglega“); nákvæm-stundar sönnun er greidd T3 eiginleiki, upplýst á stiga-samanburðar fletinum + í skilmálum (§16.1).
  7. Uppsafnað tré á Workers — LEYST. Eitt uppsafnað RFC 9162 tré + jaðar-skyndiminnaður eini-skrifara LogDO (þægilegt svigrúm gegn ~1k skriftir/sek DO þakinu; frestaðu Merkle-af-skerðingar-rótum skerðingu þar til nálægt því). Hindrandi forsenda: hnita-lyklað (level, index) R2 hnúta-geymsla + þurrkaða-DO köld-laufs prófunarvigurinn (§16.9); < 300 ms er mælt sjósetningar-hlið yfir tveimur raðbundnum DO (§16.10).
  8. ANS-104 undirskriftarkerfi + djúp-tæti — LEYST. RSA-PSS (sig gerð 1, endurnýtir sérstaka akkeris-veskis JWK); Ed25519 frestað til §15 PQ leiðar. Handvalsaða SHA-384 djúp-tætið er hliðað á báðar-áttir þver-útfærslu festinguna, stöðug-eingöngu viðmiðunar-búntara víxlvirkni athugun, sameiginlega-crypto.subtle hringferð, og eftir-búnts Arweave-samþykkis vöktun (§16.8).

Bindandi sjósetningar-takmarkanir (berast inn í útfærslu + vöru/lögfræði endurskoðun):