qub-imut Protokollimik allatigineqartoq

qub tassaavoq piffissamut kryptografiskimik pituttorsimanermut protokoli: oqaaseqatigiit siunissami ullumut matusinissamut, kingusinnerusukkullu suna matuneqarsimanersoq, drand round sorleq saqqummersitsinermut gate-iusimanersoq aamma—toqqorsivimmi transaktioni imaluunniit transparency log-imi uppernarsaat peqarpat—ciphertext qaqugu kingusinnerpaamik pituttorsimanersoq nammineerluni timestamp-ilerneqarsimasoq uppernarsaanissamut systemi.

Akuusartut pingasut ingerlatippaat. drand tassaavoq randomness beacon agguarsimasoq—saqqummersitsinissamut ulloq qub-ip nammineq piumassusia pinnagu cryptografiimit enforce-rneqarpoq. Toqqorsivik sivisooq append-only transparency log-ilu byte-it matuneqarsimasut pigiinnarpai commitment-illu batch-iusut permanent public storage-imut anchor-ilerlugit; T3 path akilersugaq aamma permanent storage-imi transaktionimik ataasiakkaamik allattarpoq. ML-DSA-65 tassaavoq post-quantum digital signature—authorship atulersinneqarsimappat qub key pair-imut pituttorsimavoq, secret-ia pilersitsisup atortuanit qimagunneq ajortoq.

Akuusartut taakku ataatsimoorlutik nalunaarut piffissamut matuneqarsimasoq allanngortinneqarsimanerminillu paasineqarsinnaasoq, optional-imik pilersitsisumut attuumassusilik nammineerlunilu timestamp-ilerneqarsinnaasoq pilersippaat—uppernarsaat silarsuup oqaluttuarisaanermik sanarfisinnaassusia alliartortillugu naleqarnerulersoq.

Allagaq sinnera tassaavoq normativeq atorluarneqarsinnaajumallugu paatsoorneqarsinnaanngitsutut illernarsineq.


qub Protokolimik Erseqqissaaneq

Naasoq Naliliineq
Dokumentip saqqummersinnera 1.0.0 (protocol-v1.0.0)
Wire protocol 0x01
Outer wrapper 0x01
Atulersinneqarnerata ulloq 2026-09-23
Killiffik Maannakkut atuuttoq
Misissoreerneqartoq 2026-09-23

Allagaq una tassaavoq normativeq protokoli-erseqqissaaneq qub piffimmik-isumaqatigiissutaasut atorfilersuussiviata. Erseqqissarpai paasissutissat aaqqissuunneqarnerat, atorneqarnerinik malittarisassat, aalajangiussinermut formulit, uppernarsaaneqarnermut pisariaqartut atorluarneqarsinnaasumik suliarineqarsinnaanissaannut.

Sumi atortuunngitsut: protokoli-toqqap inuiaqatigiissimaartoq oqaatsinik atugaqarunngilaq — qub-ip timaata tassaavoq oqaatsinut paasinarsisaanngitsoq / markdown / isumaqatigiissut bytii, qanorlu oqaatsit naapertorlugu saqqummiunneqarnissaat isiginnaartup akisussaaffigaa (qub.social web app, <qub-embed> iframe, MCP-imi atugaqartoq, allallu).


1. Allaaserineq aamma Ileqqut

Allaaserineq Isumassuissaq
u8, u64, i64 Naasut nalingisut/naliliineqartut bitiit aalajangersagaqartillugit
[u8; N] Byte-fylki taagineqartumik takinersaani N bytenik
Vec<u8> Byte-fylki allanngorsinnaasumik takinersaaqartoq
Option<T> Naliliineq T-mut, peqanngitsorluunniit
String UTF-8 oqaaseqatigiit, NFC-mik aaqqissuussaq
`
SHA3-256(x) NIST SHA3-256 hash byte-mit ataqatigiimik x (FIPS 202)
ceil(x) Qulaani naasoq: naasut mikinerpaaq ≥ x
CBOR Concise Binary Object Representation (RFC 8949)
big-endian Bytemik pingaarnerpaaq siulleq

Naasut tamarmik preimage-mut aalajangersaanermut atatillugit big-endian-mut nalunaaqutigineqarput tukinersaagisaqartumi bytemi (i64 → 8 byte, u8 → 1 byte) allatut nalunaaqutigisaanngippat.

Pissuserivinnerit tamarmik Unix sekundimik UTC-mi allaaserineqarput.


2. Paasissutissat Aaqqissuussaat

2.1 ComposeQub (Pilersitsisup Toqqarvigaata Killiffia)

CBOR-mut nalunaaqutigineqarsimanngitsoq. Naassaanngitsumut toqqorsivimmi toqqorneqarsimanngitsoq. Pilersitsisup atortugaata appimi.

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 (Allakkat Erserititaq)

CBOR-imi aaqqissuussamiut atorlugit nalunaaqutigineqarpoq (§3). SealedQub-imi tunisarneqartut. Aaqqissuusserneq una tassaavoq saqqummersitap kingorna timaata akornutaqannginnera uppernarsarsinnaasaat.

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
}

Tunngavik (qub allataq atsiorneqanngitsoq): version = 0x01, content_type = 0x01, sig_alg = 0x00; signature- aamma cosigner-field-it peqanngillat. Metadata-field-it optional-it allat peqarsinnaapput.

v1 aaqqissuussaasut allat: content_type = 0x03 (isumaqatigiissut timaa, qiviarit §6.1); sig_alg = 0x01 (ML-DSA-65) author_signature aamma author_pubkey peqartillugu (qiviarit §9.3); cosigner_pubkey aamma cosigner_signature ataatsimoorlutik peqartillugit atsiorqatigiinneq isumaqatigiissummut (qiviarit §9.7); reply_to angajulliit qub-ip qub_id-aanut inissinneqartoq akissutaasoq qub-it (qiviarit §9.3 atsiorneqarnerup atortulinnut tunngassuteqartut).

2.3 SealedQub (Allat-Tunisarneqarnermut Aaqqissuussaq)

Canonical CBOR (§3) atorlugu serialiserneqarpoq. Tamanna tassaavoq inner wire artifact: public delivery byte-it taakku bare-iusut toqqortarpaat, private delivery-llu toqqorneqannginnerani OuterWrapper-imut puuttarpai (§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 (Isiginnaartup Atortua Killiffia)

CBOR-mut nalunaaqutigineqarsimanngitsoq. Isiginnaartumi atortugaata appimi. Pilersinneqartoq isertuussap qaffaanneranik aamma uppernarsarneranik kingorna iluatsillugu.

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. CBOR-imi Aaqqissuussamiut Profiilia

SealedQub aamma QubEnvelope tamarmik nalunaaqutigineqarnerat profile una malillugu PISARIAQARPOQ. Suliarineqarnerit marluk paasissutissat ataatsimoortuni byteinik assigiimmik suliarinittariaqarput.

3.1 Allaaserinermut Malittarisassat

Malittarisaq Erseqqissaaneq
Najoqqutaq RFC 8949 §4.2.1 (Core Deterministic Encoding Requirements)
Map key-itik ileqqui Siullermik byte-itik takinerannik allaaserineqartut (mikinersaq sioqqullugu takinersaq), aamma lexicographic-imik (byte-mut byte takissuseqarluni assigiimmut)
Naasut allaaserinerat Mikinersaq: 0–23 byte siullermi; 24–255 2 byte-mi; 256–65535 3 byte-mi; allatullu.
Takissusiup allaaserinera Takinerit aalajangersimasut kisiat. Aalajangersimaartut peqanngitsut array-it, map-it, byte-it allataallu (additional info = 31 inerteqqutaapput).
Tag-it CBOR-imi tag-it peqanngillat (major type 6 inerteqqutaavoq).
Floating-point Float-it peqanngillat (major type 7 naliliineqartut 0xF9–0xFB inerteqqutaapput).
Oqaatsit UTF-8-mik nalunaaqutigineqartut, NFC-mik aaqqissorneqarsimasut (Unicode Normalization Form C).
Byte-it oqaatsii Byte-it iluartumik. CBOR-imi base64-mik allaaserinneq peqanngilaq.
Map key-itik assigiimmik Itigartittariaqarput pulariarneqarnerat malillugu. Parser-it map key assigiimmik nipangiumik akuersaarsinnaanngillat.
Key-it paasineqanngitsut Kukkunermik itigartittariaqarput. Parser-it map key-it type-ip aaqqissuussamiut key-itaasa ileqquini peqanngitsut akuersaarsinnaanngillat — aaqqissuussamiut byte string-it marluk assigiinngitsut naliliinermut assigiimmut decode-erneqassanngillat (encode(decode(x)) == x), aamma payload-ini atsiorneqarsimasuni key ilassutaasoq imaq isertortoq atsiornerit marluk uppernarsagaat tassaassagaluarpoq. Schema-p ineriartornera version aqqutigalugu pisarpoq, key-inik ilassutaasunik pinnani.
Naliliineqartut sapinngisaminik Kisiat true (0xF5), false (0xF4), aamma null (0xF6) akuerineqarput.
Naasut sapinginnermut piumassusiisartut Naasut sapinginnermut piumassusiisartut peqanngitsut CBOR map-mit peerneqartussaapput (null-imik nalunaaqutigineqassanngillat). Peqartut sapinginnermut piumassusiisartut key-it ileqqui malillugit ilanngunneqarput.

3.2 Misissorneqarsimasut Aaqqissuussamiut Key-itik Ileqquinik

Key-it ileqqui makku normativeqarput. Suliarineqarnerit key-itik ileqquimi tassani allaaseritariaqarpaat. Debug assertion-it pitsaapput release-iliarineqarsimanngitsumi malittarisassat misissorlugit.

QubEnvelope (versioni 0x01, atsiorneqarsimanngitsoq, sapinginnermut peqartussat tamarmik peqanngitsut):

"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 key-itik ileqqui aalajangerneqarnerannut: key-it tamarmik CBOR-imi oqaaseqatigiit. Allaaserineqarnera takinersaa = 1 byte qulequtaq + oqaaseqatigiit takinersaat (oqaaseqatigiit 24 byte-imit mikinerusumik). Siullermik allaaserineqarnerup takinersaata ataaniittut, taava lexicographic-imik takinersaat assigiimmut.

SealedQub (versioni 0x01, tamanut, tigusisaqanngitsoq):

"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 (isumaqatigiissummi timaa, 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 (sineriaq terms array-mi):

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

PartyIdentifier (party_a / party_b map):

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

3.3 Byte-mut Allaaserinermut Najoqqutaq

Suunersoq CBOR-imi allaaserineq Assersuut
SHA3-256 hash (32 byte) 0x58 0x20 + 32 byte body_hash, qub_id
Pissuserivigineqarnerit (i64) Major type 0 (pisut) imaluunniit 1 (pinnaajusoq), mikinersaq Unix sekundi
Versioni (u8, naliliineq 1) 0x01 (atausermik byte)
Imai sumut atatillugu (u8, naliliineq 1) 0x01 (atausermik byte)
sig_alg (u8, naliliineq 0) 0x00 (atausermik byte)
ML-DSA-65 atsiorneq (3,309 byte) 0x59 0x0C 0xED + 3,309 byte author_signature, cosigner_signature
ML-DSA-65 pubkey (1,952 byte) 0x59 0x07 0xA0 + 1,952 byte author_pubkey, cosigner_pubkey

4. Normativeqarluni Aalajangiussinerit

4.1 qub_id

qub_id tassaavoq qub-imik kisermik aalajangiisoq aamma QubEnvelope-imik SealedQub-imut atassoq. Aalajangiivoq aalajangersimasumik puuata imaagisaanit.

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

Tunngaviusoq immikkoorut allaaserineqarnera: Oqaaseq "QUB_ID_V2" ASCII byte 9-aapput. Atausermik 0x00 ilaateqaalu naliusersorlugu 10-mik byte-isuunissamut. Suliarineqarnerit byte-it 10 makku PISARIAQARPOQ atortussaat: [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00].

outcome_at allaaserineqarnera: Pre-release implementation revision-ip preimage 92 byte-mit 100 byte-mut tallivaa outcome_at optional pituttorsimaffimmut ilanngullugu. outcome_at peqanngitsoq zero byte 8-tut encode-rneqarpoq; protocol validator-it sumi tamani outcome_at <= 0 itigartippaat, taamaattumik sentinel taanna value eqqortumik aporaaffissaqanngilaq. Verdict mechanic field-imik pisariaqartitsisoq pillugu §3.2 aamma tasks/verdict-uplift-plan.md takukkit.

drand_round allaaserineqarnera: Pre-release implementation revision kingusinnerusoq preimage 100 byte-mit 108 byte-mut tallivaa drand_round (drand round anguniagaq, §4.3) pituttorsimaffimmut ilanngullugu, domain separator-ilu QUB_ID_V2-mut qaffallugu. Tamanna timelock round qub-ip kinaassusianut pituttorpaa: gateway-ip ciphertext round-imut allamut (ass. qaangiutereersumut) unlock_at takutinneqartup isumaqarneranit allaanerusumut pituttorsinnaanngilaa. Unlock procedure (§8) aamma tlock ciphertext stanza-p round-ia unlock_round(unlock_at)-imut naapertuunersoq misissorpaa, taamaattumillu unlock time takutinneqartoq tassaavoq round decryption-imut gate-iusoq.

Pissusii:

4.2 body_hash

body_hash = SHA3-256(body)

body tassaavoq raw Vec<u8> imai nassiussassaq. Allataq qub-init, una tassaavoq UTF-8-mik allaaserineqarsimasoq qub-ip timaa.

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

title tassaavoq plaintext-imi qulequtaq isiginnaartumi saqqummersitsineq sioqqullugu takutinneqartoq sapinngisaminik (qiviarit §3.2). NFC-mut aaqqissuussineq hash-imut atatillugu ingerlapput digest-i aalajangersimasunngorlugu codepoint-mut takujumagaagaminik assigiimmik. Sumi tamani-nulleq malugaq sernigineqarpoq peqanngitsumut periarfissaq; isumassuissaq isumassuusiineq itigartinneqarpoq CBOR-imi aaqqissuussamiut killinganni kanonisikersimanngitsumik allaaserineqarnerinut "peqanngitsumut" (aaqqissuussamiut allaaserineqarnera naasoq tamaannarluinnaq peerneqartoq).

4.3 Matusernermut Anguinnermut Allaaserineq

drand_round = floor((unlock_at - chain_genesis_time) / chain_period_seconds) + 1
Naliliisut Tunngavik Assersuut
unlock_at Inuup toqqagaa Unix sekundi UTC 1735689600 (2025-01-01 00:00:00 UTC)
chain_genesis_time drand piorsaavik info (genesis_time) 1595431050
chain_period_seconds drand piorsaavik info (period) 30

ceil() suliaa toqqarpaa drand-imi anguinneq siulleq saqqummersitsivimmi ≥ unlock_at. Tamanna qulakkeerpaa qub matusernerup sioqqullugu isertorneqarsinnaanngitsoq toqqagaq.

Alignment property (piviusumi pingaaruteqartoq): (unlock_at - chain_genesis_time) chain_period_seconds-imut tamakkerlugu agguarneqarsinnaappat, round toqqarneqartup signature-ia unlock_at-imi exakt saqqummertarpoq, sioqqullugu pinnani. Reference deployment-imi tamanna tamatigut atuuppoq: quicknet genesis time (1692803367) period-ianut 3 sekundimut agguarneqarsinnaavoq, reference app-illu unlock time-it minutsinut tamarmiusunut pin-eqarput. unlock_at aligned-iunngippat round toqqarneqartup signature-ia period ataaseq inorlugu unlock_at sioqqullugu saqqummertarpoq—commitment-ip temporal precision-ia beacon period ataasiuvoq.

Legacy pre-release mapping aamma unlock-side tolerance: Mapping siulleq tassaavoq ceil((unlock_at - chain_genesis_time) / chain_period_seconds), period-aligned case-imi qulaani round unlock_at sioqqullugu period ataatsimik saqqummertartoq toqqarlugu, ciphertext period ataatsimik siusinaartumik matuersaajarneqarsinnaalersillugu. Mapping-it marluk delta period-imut tamakkerlugu agguarneqarsinnaappat exakt +1-imik assigiinngillat, allani isumaqatigiillutik. drand_round immutable qub_id preimage-imut (§4.1) pituttorsimammat artifact-it legacy mapping atorlugu matuneqarsimasut nutaamik re-derive-rneqarsinnaanngillat; verifier-ip §8 step 6a-mi round cross-check-imi stored drand_round derived round-imut imaluunniit derived round minus one-imut naligiittoq akuersaarniassavaa, tlock stanza round stored round-imut exakt naligiittussanngorlugu.

Uppernarsarneq: unlock_at PISARIAQARPOQ siunissami matuneqartumi siunertaa atorpaa. unlock_at created_at-mit ukiut 10-mit qaangiussisinnaanngilaq (tamanna agguarnersartoq killilernialerlugu drand-imut atatillugu; UI taava PITSAAVOQ mianersoqquluni unlock-it 2 ukiunit qaangiusserumaartut).


5. Wire Format Newtypes

Wire format newtype-it suliarinerinik mappersarneqartoq CBOR byte JSON-imut, raw plaintext, ilaqqilluunniit byte aaqqissuusserneqartut paatsoorneqartumut.

Suunersoq Imanik Suliarineqarpoq Tigummineqarpoq
SealedQubCbor SealedQub-imi canonical CBOR serialize_sealed_qub() Inner wire artifact; public delivery-mi bare-iusoq, private delivery-mi wrapped-iusoq toqqorneqartarpoq, isiginnaartumillu utertinneqarluni
QubEnvelopeCbor QubEnvelope-imi CBOR-imi aaqqissuussamiut serialize_qub_envelope() tlock isertinnermut input, tlock isertuussap qaffaaneranik output

5.1 Pilersinnerinut Malittarisassat

// 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 Suliarineq nalilersuinerni

from_encoded() PITSAAVOQ misissulertarluni input CBOR-imi map qulequtaa aalajangersimasoq atorpat. Aaqqissuussamiut tamarmik uppernarsarneqarnerat parse-eriarluni pivoq, suliarineqarluni pinnani, marloriaammik suliarineqarnissaa pinaveersaarniarlugu.


6. Imaa Suunersoq Allatamiut

Naliliineq Suunersoq Timaata Annerpaaffia Malugarsiivigineqartoq
0x00 Sernigineqartoq (akuerinneqanngitsoq) — ATORNEQASSANNGILAQ
0x01 Allataq nalingisoq (UTF-8, killilersimasumik Markdown) 50 KB akilerlugu / 10 KB akeqanngitsoq Qiviarit §10 saqqummiunnermut malittarisassat. Akeqanngitsumut/akiliisumut agguarsineq upload-imut atorfeqarfia atorlugu qulakkeerneqarpoq; protokoli-mi killiliivik ataasiusoq 50 KB-iuvoq.
0x02 Sernigineqartoq (siunissami) — Siunissami imai suunersoraat-mut tunniunneqartoq; v1-mi akuerinneqanngilaq. Isiginnaartut PISARIAQARPOQ itigartittussaat malittarisaq ataani naapertorlugu.
0x03 Isumaqatigiissut (bilateral, CBOR-imi timaa) 100 KB Timaa CBOR-imi aaqqissuussamiut PactTerms (§6.1). Atsiorqatigiinneq §9.7 naapertorlugu.
0x04 Naliliineq (pilersitsisup imminik kvalitatigineraa, CBOR-imi timaa) 8 KB Timaa CBOR-imi aaqqissuussamiut VerdictBody (§6.2). Atorfilersuuteqarfimmit verdict siunertaa kisiat saqqummiisarpoq. Angajulliusumi atassuteqarneq Arweave-mi Parent-Tx-Id tag-aniipoq, timaaniinnani. Qiviarit verdict-uplift-plan §3.4.

Isiginnaartut imai paasinarsinnatik akuerinneqanngitsoq itigartittariaqarpaat erseqqissumik atugartumut takutitsinermik kukkunersiisutik. Isiginnaartut imai paasinarsinnagit allatatut saqqummiunissaminik misilersortussaanngillat.

6.1 Isumaqatigiissummi Timaa (content_type = 0x03)

Isumaqatigiissummi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera PactTerms naliliineqartumut:

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)> }

CBOR-imi aaqqissuussamiut key-itik ileqquinut tamarmik map-it pingasunut §3.2-mi tunniunneqarput. Tamarmik nalunaaqutigineqartoq isumaqatigiissummi CBOR 100 KB-imit qaangiussisinnaanngilaq (§6 assertorlugu).

Schema kingumut paasisaq. terms-mi sineriaq siulleq structured/v1 isumaqatigiissummut PISARIAQARPOQ tassaassasoq { key: "pact_schema", value: "structured/v1" }. Sineriaq malugaq peqanngitsoq "ileqquminik" isumaqatigiissutaaput aamma aaqqissuussamiut uppernarsaaneqarnerannik schema-imut paasinninnermilluunniit saqqummersitsinerannik pissarsisitiineqanngitsut.

Aaqqissuusinnermi akuersaarnermut inissianngitsut. structured/v1 isumaqatigiissutit eqqortumik sisamanik akuersaartumut sineriaqartut imaattut key-isigut:

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

value tamarmik arfineq-pingasunit aaqqissuusinnermi tuluttut allataasut atuagaq atorlugu (role, kind) naliliisaq, tassani role ∈ { seller, buyer, provider, client } aamma kind ∈ { standard, capacity }. Oqaatsit imminuna protokoli-mi paasissutissat normative-ngorlugit — pingasut tamarmik ML-DSA-65 atsiorneqarnerat byte-it eqqorlugit body_hash-imut paasaqartumik. Localiserneqanngillat; atsiorneqartoq timaa oqaatsit naapertorlugu mikilersuiunngitsoq. Naliliineq sumi tamani allangortinneq schema-imik versioni nutaamik (structured/v2) atorpoq.

Arfineq-pingasut, ujarlernerat (acknowledgement_for(role, kind)), aamma tunngaviligissutaasaa najoqqutaqartoq pilersaarutigineqarpoq reference-mi suliarineqarnertik. Tamarmik suliarineqarnerit PISARIAQARPOQ byte-it eqqortumik akuersaarnermut naliliineqarnermut saqqummiussisinnasut; golden-fixture SHA3-256 body-hash-mut misilernerit role-i sisamat tamarmik atussusiusut aalajangersutsinnut tigussinerinik tigussagaqartillugit.

Isiginnaartumi saqqummiunneqartumi ileqquaa. Akuersaarneq oqaatsit imai imaattut "qulaaniittup allaaserineqartup tunngavigalugu" naatsorsuutiminerit, naatsoq-killip sineriai siulliuvoq akuersaartumi sioqqullugit saqqummiunneqartussat. Isiginnaartumut PISARIAQARPOQ terms array-i CBOR-imi ileqquaa atorlugu saqqummiussisut; allanngortinneq saqqummiunneqartut paasinarsiarneqarnera sequjuvoq.

Atsiorqatigiisup attaveqartussaa. Party B-mi contact mailimi tunngaviusumik tassaagaani, qub upload atorfilersuuteqarfia siunnersuussamik atsiorqatigiinnerlu nassippoq isertuussaminik ulluini tunngavilersuugaq aamma atsiorqatigiinneq imminuna piffimmilluunniit allaffigineqarnerat assingusoq misissoqqullugu (§9.7). Isumaqatigiissutit Party B contact peqanngitsut atsiorqatigiineqarsinnaapput, kisiannili out-of-band aqqutaa atorlugu — atorfilersuuteqarfik atsiorqatigiinnermut piumassuteqartumik itigartippoq, misiliusinnaasumik 15-minuti email-mut misissulinermut malugartussaq atorsinnaaneqartoq.

6.2 Naliliinermi Timaa (content_type = 0x04)

Naliliinermi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera VerdictBody naliliineqartumut:

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
}

CBOR-imi aaqqissuussamiut key-itik tulleriiaa:

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

Tamarmik nalunaaqutigineqartoq naliliinermi CBOR 8 KB-mit qaangiussisinnaanngilaq (qulaaniittumut registry-mut naapertorpoq).

Inernerup naliliisai. Wire byte siunertaqanngilaq; sisamat Eqqortoq / Ilaa / Kukkussoq / Misilerneqarsinnaanngitsoq siunertat naliliinermut atugassat tamaat inernerinik ataqatigiissaarput. Siunertanut ataasiakkaanut ilisarnaatit ("Naqissusiivunga" / "Naammassisimavara" / "Pilersaarutigineqartutut" / "Pisut nalunaarutigaat" Eqqortoq-mut, allallu) isiginnaartumi saqqummiunnermut tunngassuteqarpoq angajulliusoq qub-imi siunertaa tunngavigalugu aalajangerneqartoq — wire oqaatsinut aamma siunertanut atanngitsumik atassusaarpoq. 1..=4-mit avissaartumi naliliineqartut PISARIAQARPOQ decode-imi itigartittut.

Angajullimut atassuteqarneq. Naliliinermi qub angajulliusumut atassutaa timaaniippanngilaq. Angajulliusoq qub-imi Arweave transaktion-imi ID upload-imi Parent-Tx-Id toqqorsuutaata tag-aani saqqummiunneqarpoq (§7 toqqorsuutaata tag-aata sineriaa). Tamanna timaa imminik ineriartortillugu atsiorneqartumik nammineq nalilersuissummi oqaatsiusumik tigussinerinik tiguppaa; atorsimanermi malugartoq ("suna eqqorpa?") Arweave-mi tag-imi ujartornermut tunngaviusumik aalajangerneqarpoq.

Uppernarsaammi nittartagaq isumannaatsuunnera (normative). evidence_url peqartillugu, uppernarsaasut (matusiartortumi, wire-imi, Worker-ip sineriaani) PISARIAQARPOQ ingerlatsinerit imaattut:

  1. HTTPS-mi kisiat. Oqaaseq PISARIAQARPOQ https:// byte tulleriiarmik aallartittumik. Allat tulleriiat tamarmik — http, ftp, javascript, data, file, allallu — itigartinneqassapput.
  2. Takissusaata killilersugaa. ≤ 2,048 byte (browser-imi URL piffissami nalingisup killiliivia).
  3. NFC + akuersaanngitsumik codepoint-imik misissuineq. title aamma reflection malittarisaq assigissaa — bidi-override / silaqanngitsoq-aalavik / tag-block / BOM / C0 / C1 codepoint-it itigartinneqassapput. Naliliineq Rust-imi crate::handle::contains_hostile_text_codepoint aamma TS-imi workers/api/src/utils/unicode.ts::isHostileCodepoint malitsersuipput (ataqatigiilluni paaqqissaalluni).
  4. Akornusersugaq peqanngilaq, ASCII-mi aqutsisartoqanngilaq. Akornusersuut / DEL / 0x20-mit ataani byte-it URL-imi sumiluunniittut itigartinneqassapput — bidi malittarisartumi matunnertanngitsoq \n/\t injection vektor matusarpaa.
  5. Host-imi sineriaq peqanngitsuussanngilaq. https://-mit aamma /, ?, imaluunniit # siulliup akornanniittut PISARIAQARPOQ peqanngitsuussanngitsut.

Atorfilersuuteqarfik server-ip tungaaniittoq pissarsisaqarsinnaanngilaq. Worker-i URL-imik PISARIAQARPOQ proxy-iunneq, pissarsineq, imaluunniit siusinnerusumik takutitsineq saqqummiisanngitsoq. Protokoli oqaatsimik toqqortuivoq; saqqummiunneqarneq isiginnaartumi rel="nofollow noopener noreferrer" target="_blank"-imik aamma takuneqarsinnaasumik host-imik nittartagaq allaaserneqartumi saniani saqqummiunneqartumik pivoq.

Eqqarsaqatigiinneq. Pilersitsisumit allaaserisaq sapinginnermut eqqarsaqatigiissut ("suna allanngorpa, suna ilikkarpiuk"). title-imut assigiittumik NFC + akuersaanngitsumik codepoint-imik uppernarsaaneq. Peqanngitsoq / akornusersugaqarluinnartoq input pilersinnermi peqanngitsuusinneqarpoq.

Schema versionia. V1 verdict_version = 0x01 kisiat naapertorpaa. Siunissami schema allanngortinneqarnerit byte una qaffapput aamma protokoli versioni nutaaq §12 naapertorlugu tikilluni saqqummerput.


7. Matusinissamut Protokoli

Matusinerup tamarmiusup ingerlatsineranik. Aalajangiineq tamaat normative.

 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.

Toqqorsivimmi tag-it (out-of-band). qub upload service-ip storage transaction tag-it ikittuinnaat upload payload toqqarneqarsimasoq saniani ilannguttarpai. Content-Type=application/octet-stream normativimik piumasaqaataavoq. Reference service-ip tag-it optional-it pingasut ilannguttarpai pilersitsisoq saqqummiunneqarnissaat toqqarpat: Intent (compose intent allowlist-ikkut validaterneqartoq—announcement, thesis, prediction, letter, secret, commitment, proof, imaluunniit system-imit verdict), Author (pilersitsisup §9.3 public-key fingerprint-ia lowercase hex 64-character) aamma Parent-Tx-Id (reply chain-imi parent qub-ip storage transaction id-ia, base64url 43-character).

Author tag qub-imut atatillugu opt-in: reference pilersitsisup atortugaa tassanngaannaq atorpaa atugaq erseqqissumik tamanut atimineq matusinermi sapinginnermi pisut. Toggle-imi peqanngippat — default-imi — Author tag-imik allaaserineq pinngilaq aamma qub piorsaavimmi atinnik tunneqarpoq: naassaanngitsumut toqqorsivimmi suunngitsoq uploaditta pilersitsisup handle-iata, email-iata, qub allaata atassuteqassallutik. Toggle-imi peqarpat, Author fingerprint pilersitsisup toqqakkani @handle-mut sineriagineqarpoq §9.5 uppernarsaanermut atassuteqartillugu. Akissummut sineriaqartumut atassuteqarneq aamma Intent kinaassuserinineq pinngilaq. Private delivery-mi outer wrapper (§13) inner SealedQub artifact ilisarnartoq encrypt-erpaa, taamaalilluni stored wrapper-inik harvest-ineq public drand signature-nillu pissarsineq body K-qanngitsoq recover-erneqarsinnaanngilaq; storage tag-it public metadata-upput siunertaqartumik.

Reference atorfilersuuteqarfik siunissamilluunniit nassiussisanngilaq App-Name, App-Version, imaluunniit Type tag-it: imaammik atausimik-naliliisumik aalajangersinneq qub corpus tamarmiusoq utertinneqartussaq GraphQL-imi misissussamut, taamaattoq pusinneqartumi timi-kisiat illernaqqissaarnernut sungiusarnernut akersutaasoq.

Misissornermut malillugu PISARIAQARPOQ toqqorsivimmi tag atortumut §11 inummi-pingajuanut uppernarsaanernut tunngavissatut atorneqassanngitsoq; body hash / qub_id / atsiorneq tamaat naliusap CBOR-imut paasaqartoq imminuna, tag set-imut peqanngitsoq.


8. Qaffaanissamut Protokoli

Qaffaanerup tamarmiusup ingerlatsineranik. Aalajangiineq tamaat normative.

 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. Pilersitsisup Atsiorneqarnera

9.1 Naapertuusaaq

qub-it naassaanngitsumut toqqorsivimmi sumiiffeqarluinnarput. Pilersitsineq atsiorneqarnerat akornusiitisorneqarsinnaanngitsoq qaqugulluunniit ataqqinassanngittussat, taama pissutigalugu v1.0 atorpoq kingorna-kvantum ML-DSA-65 (FIPS 204) naliusap qaqugulluunniit naluneqarsinnaasup tunngavianik aalajangersaanissaminut qub-ip sumiiffia atussinnaapput.

9.2 Algoritmip Allataa

sig_alg Aaqqissuussaq Isumassuissap Annertussusia Atsiorneq Annertussusia Killiffik
0x00 Atsiorneqarsimanngitsoq — — Atuuttoq
0x01 ML-DSA-65 (FIPS 204) 1,952 byte 3,309 byte Atuuttoq
0x02 Ed25519 32 byte 64 byte Constant-i immikkoortitaq; protocol v1-imi tapersersorneqanngilaq

Protocol-v1-imi isiginnaartut value {0x00, 0x01} avataaniittut tamaasa itigartittariaqarpaat, 0x02 immikkoortitaq ilanngullugu. Immikkoortitsineq atoqqiinermik nalaatsortumik pinaveersaartitsivoq; atulersitsinertut isumaqanngilaq. Atulersitsineq §15-imi allanngortitsinermik aqutsinermut nassuiaatigineqartumik pisariaqartitsivoq.

9.3 Atsiorneqarsimasumut Preimage-mut Suliarineq

Preimage-mut versioni marluk pisimapput. Atsiornerni tamani V2 PISARIAQARPOQ atorneqartoq, uppernarsaasullu PISARIAQARPOQ V2 kisiat akuertariaqarpaat. V1 preimage pisoqaq (allaqqasoq ataani oqaluttuarisaanermut) V2-mut nuunneqarnerani uppernarsaanermut kisiat taarsiisussatut akuerineqarsimavoq; taarsiissut taanna atorunnaarsinneqarpoq V1-kisiat-atsiornerlu maanna itigartinneqarpoq.

V2 (maannakkut — pilersitsisup atsiornera nutaaq tamaat pilersippaa, aamma pact staging / cosign ingerlanermi atsiornerit marluk):

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 title_hash (§4.2.1) assigiimmik peqanngitsumut-sentinel ileqqoq malippaa: nuller-tamaasa 32 byte SHA3-256-mit iluartumik saqqummersinneqarsinnaanngimmat, taamaalimmat "peqanngitsoq" label-imut peqartumut qaqugulluunniit naapissanngilaq. Naasut tamarmik takissuseq-aalajangersimasut, taamaalimmat preimage takissusermut-siuartaqaratik paatsiveeruteqanngilaq.

V1 (pisoqaq — ATORUNNAARSINNEQARSIMASOQ; pilersinneqarunnaarpoq aamma uppernarsaanermi akuerineqarunnaarluni):

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 preimage sender_label aamma reply_to ilanngutinngilai. V2-mut nuunneqarnerani uppernarsaanermut kisiat taarsiisussatut akuerineqarsimavoq; taarsiissut taanna maannamut atorunnaarsinneqarpoq — uppernarsaasut PISARIAQARPOQ V2 preimage kisiat akuertariaqarpaat. Allaaserineq maani oqaluttuarisaanermut aamma ataani tunngaviusoq immikkoorut nassuiaataanut attatineqarpoq. Atsiorneq V1-imut kisiat uppernartoq PISARIAQARPOQ uppernarsaanermut naammassinngitsutut isigineqartariaqarpoq.

Tunngaviusut immikkoorutit: "QUB_AUTHOR_SIG_V1" / "QUB_AUTHOR_SIG_V2" ataasiakkaarlutik ASCII byte 17-iupput ([0x51, 0x55, 0x42, 0x5F, 0x41, 0x55, 0x54, 0x48, 0x4F, 0x52, 0x5F, 0x53, 0x49, 0x47, 0x5F, 0x56, 0x31/0x32]). Ilaateqaqanngilaq. Immikkoorutip assigiinngitsup suliarineqarnerit marluk immikkoortippai, taamaalimmat atsiorneq preimage ataasertumut aappaanut naanngitsumut uppernartinneqarsinnaanngilaq.

org_id_present byte: unlock_at-p kingornani byte PISARIAQARPOQ 0x00. Reference-imi suliarinerup tassuninnga ORG_ID_PRESENT_INDIVIDUAL = 0x00 konstantitut saqqummiussivaa crates/qub-core/src/signing.rs-imi; isiginnaartut sig_input uppernarsariniarpaat byte assigiimmik nassiussissut.

Atsiorneqartup sumi tamani — suna naliusaaffigineqartoq sunalu naliusaaffigineqanngitsoq. V2 sig_input toqqaannartumik nassuerutigivai version, qub_id, body_hash, unlock_at, sender_label, aamma reply_to (aamma aalajangersarsimasoq tunngaviusoq immikkoorut aamma org_id_present byte). qub_id imaa pilersinneqarpoq version, content_type, created_at, unlock_at, outcome_at, drand_round, aamma body_hash §4.1 preimage atorlugu, taamaalimmat naasut taakku allangortinneqarpata qub_id-mut allatut saqqummiisitsipput atsiorneqarnermilu malugartoqarluni. Naliuvigineqartoq sumi tamani imaattuvoq:

Naasoq Atsiorneqarnermut uppernarsaaneqartoq Qanoq
version ✓ sig_input-mut input ataasiussoq
qub_id ✓ Input ataasiussoq
body_hash ✓ Input ataasiussoq
unlock_at ✓ Input ataasiussoq
sender_label ✓ Input ataasiussoq sender_label_hash atorlugu (V2 preimage — ilusaq akuerineqartoq kisiat)
reply_to ✓ Input ataasiussoq reply_to_or_zero atorlugu (V2 preimage — ilusaq akuerineqartoq kisiat)
content_type ✓ Aqqut-iliartumik, qub_id preimage atorlugu
created_at ✓ Aqqut-iliartumik, qub_id preimage atorlugu
outcome_at ✓ Aqqut-iliartumik, qub_id preimage atorlugu
drand_round ✓ Aqqut-iliartumik, qub_id preimage atorlugu (V1.2)
body ✓ Aqqut-iliartumik, body_hash = SHA3-256(body) atorlugu
author_pubkey — (immaqimik) Atsiornermik uppernarsaasoq isumassuissaq pilersitsisuvoq, naapertorlugu
cosigner_pubkey / cosigner_signature — Naapertorlugu atsiorneqarsimasut sig_input assigiimmiut (qiviarit §9.7)
drand_chain_id, tlock_ciphertext, visibility — Avammut SealedQub naasut, puuata iluani peqanngitsut — namminnerannik atortulinnut aalajangersimaartumi (anguinneq / piorsaavik assigiittariniarneq) atortuneqartut, atsiorneqarnermilli pilersitsisup atorneqaratik. (drand_round maanna aqqut-iliartumik qub_id preimage atorlugu atassutsivoq — qiviarit qulaani.)

Sooq V2 preimage kisiat akuerineqartoq.

Suliarineqarnerit sender_label imaluunniit reply_to atugaq isiginnaartumut saqqummiunissaminnut PISARIAQARPOQ uppernarsaaneqartoq kinaassusiat (pubkey fingerprint, attestation) saqqummiunneqartussatut pingaarnerpaartut, label-imullu pinngitsoq.

9.4 Uppernarsaanermut Periusissaq

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

Atsiorneqarnermut uppernarsaaneq akiliuminartumik (ML-DSA-65 immikkut). PITSAAVOQ ingerlanneqartoq misissuinerit tamaat akinerusut (hash, qub_id, unlock_at) iluatsisimanerinit kingorna.

9.5 Kinaassutsimut Uppernarsaanerit

Kinaassutsimut uppernarsaanerit — author_pubkey-mut allaaserineq inungnut paasineqarsinnaasoq imaattumut qub handle, email, social handle, imaluunniit passkey credential — tassaapput isiginnaartup-tungaani sapinginnermut nikilersaaneq atsiorneqarnermut uppernarsaanermut PISARIAQANNGILAQ. Isiginnaartut attestation atortuusugaq saqqummiussumut kinaassusiat aalajangiisinnaasaat, taamaalimmat PISARIAQARPOQ malittarisaq atorlugu:

handle > email > social > fingerprint

Fingerprint-imut tigussaap atorneqartoq tassaavoq mikilersaagaq hex SHA3-256(author_pubkey)-imit; atsiorneqarsimasoq qub-imut tamaviarluni atortarpoq. Isiginnaartut saqqummiussinermut naatsorsorsinnaavaat — reference isiginnaartoq saqqummiisarpoq qub: malillugu byte-it sisamat siulliit aamma kingulliit (qub:<8 hex>…<8 hex>).

Suliarinneq attestation §9.4-mi misissuinerit tamaat suliarisinnaavaat qub API-mut attaverpata, naassaanngitsumut toqqorsivik aamma drand-imit allamiit atassutiusumik, atorfilersuuteqarfimi nakkutilliuneqarsimanaminnik. Attestation aalajangiussigit tassaavoq immikkut sapinginnerpaamik suliareqquneqartoq atsiorneqarnermut uppernarsaaneq iluatsillugu kingusiinnerusukkut.

9.6 Annertussusiisinnermut Sunniineq

Ed25519 ML-DSA-65
Atsiorneq 64 byte 3,309 byte
Pubkey 32 byte 1,952 byte
Tamarmiusoq qub-imut 96 byte 5,261 byte
Toqqorsivimmi akiliutiisalisinnerat (~$5/MB) ~$0.0005 ~$0.026

qub allataq 500–2,000 byte-imik annertutigisoq, ML-DSA-65 ataasiakkaarluni pingajussaq annertussusiisinaqaaq toqqarvigaata. Aki sapilinnerusoq mikiluartoq.

9.7 Atsiorqatigiisup Uppernarsaaneqarnera (Pact Bilateral Isumaqatigiissutit)

Bilateral isumaqatigiissutinut (content_type = 0x03), tullissaasoq atsiorneqarnerup ilaa tamarmik akiliisup assigiimmik aalajangersimanertik uppernarsaavaa.

Puuata naasui:

Naliliineq marluk PISARIAQARPOQ ataatsimoorlutik peqarpat imaluunniit marlukunnik peqanngitsoq. Ataasiullaaq peqarpat, isiginnaartut PISARIAQARPOQ akornutaqarnermut kukkunersiut saqqummiussissavaat.

Uppernarsaanermut periusissaq:

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

Pissusii:

Email-mut atassuteqarnermut matusineq (atorfilersuusiat). Pact pilersinneqartoq Party B-mi email contact peqarpat (§6.1), qub upload atorfilersuuteqarfia PISARIAQARPOQ atsiorqatigiinnermut piumassuteqarnera itigartittariaqarpoq email-mut uppernarsaanermut malugaq sivikitsumik atornagu staging-imi ID-mut imminuna assigiimik email-mut hash-iata contact aatsutsivigineqartumut paasinnitsivoq. Malugaq /api/v1/auth/verify-imit allagaq magic-link-i token staging_id-mik tigussisoq, address uppernarsarneqartoq SHA-256(normalise_email(party_b.contact)) assignaq — tassani normalise_email(addr) local-part-i sungiusarpaa aamma domain-i mikilersitamik kisiat (RFC 5321 §2.3.11 naapertorlugu), aamma SHA-256 taava NIST FIPS 180-4 hash (SHA3-256-mik §4-mi aalajangiineqartumit allamik) — aamma 900 sekundi (15 minuti) tunniunneqarsimasup kingorna naasoq. Atorfilersuusianut akornusersiarnermut matusineq, NOT on-chain qub uppernarsaanermut ilanngullugu — inummut-pingajuaq uppernarsaasoq §11 paarminni naassaanngitsumut toqqorsivik aamma drand-mut kisiat atorpat, atorfilersuuteqarfimi nakkutilliuneqarsimanaminnik. Malugaq atorfilersuuteqarfimi-tungaani kisiat tassuani peqarpoq atsiorneqartumi timaata ilaata peqanngitsoq.

Annertussusiisinnermut sunniineq (ML-DSA-65 pilersitsisoq + atsiorqatigiisoq):

Akuusaartoq Annertussusia
Pilersitsisup atsiorneqarnera 3,309 byte
Pilersitsisup pubkey 1,952 byte
Atsiorqatigiisup atsiorneqarnera 3,309 byte
Atsiorqatigiisup pubkey 1,952 byte
Crypto akuusaartut tamarmik 10,522 byte
Toqqorsivimmi akiliutiisalisinneq ~$0.05

10. Markdown Saqqummiunneqarnera aamma Sanitiseringi

Kapital una illernarsineqarluni-pingaartuvoq. Isiginnaartoq qub allatat (content_type = 0x01) saqqummiussivaa Markdown-imi killilersimasumik atorlugu.

10.1 Akuersaarsimasut Atortut

10.2 Inerteqquniarneqartut Atortut

Atortoq Suliarineqarnera
Raw HTML (<div>, <script>, allallu) Tamaat peerneqartoq. HTML allamillu ingerlatassanngilaq.
Assit (![alt](url)) Peerneqartoq. Assi syntax-imit peerneqartoq output-imit.
Atassutit ([text](url)) URL saqqummiussaaq nipangiisumi plain text. Auto-link-erneqassanngilaq. Atugartumut atorlugu kliki pissarsinngillat.
URL aaqqissuussamiut akornutaqartut javascript:, data:, vbscript:, file: — peerneqartussaapput.
Iframe, embed, object Peerneqartussaapput.
HTML entitii Decode-erneqartussaaq saqqummiunissamut sianigissummut kisiat.

10.3 Suliarineqarnera

Suliarinneq PISARIAQARPOQ malittarisaq allowlist parser, blocklist atornagu. Aqqut innersuussinneqartoq:

  1. Markdown parse-erluku pulldown-cmark atorlugu (assigissaat).
  2. AST-imut sangussigit nuna allowlist-imi peqanngitsumik ungalulluku (§10.1).
  3. Atassutimut nuna: URL saqqummiussit takutinneqartumi allatat, klik-erneqarsinnaasumut <a> atortumut pinngitsoq.
  4. AST sungiusarsimasoq taakkua typed intermediate representation-imut (assersuutigalugu, MarkdownNode enum sanasoq sianigissummut variantinik kisiat). Raw HTML tassani IR-mi atortuneqarsinnaanngilaq.
  5. Typed IR-mit render-eriarluni view layer tikilluuk (assersuutigalugu, reactive view atortut, DOM nuna). HTML oqaaseqatigiinik ataqatigiissaareqqitsineq imaluunniit innerHTML peqannginnera.

Blocklist aqqutigaluit aamarpalupput Markdown atatigut nutaat parser-illu allaattut atortut filterineqarsimanngitsut ataajumakkaagamik. Typed-AST aqqut XSS aaqqissuussamiunut ajornassaaq — variant peqanngitsoq HTML siaruartumik tigussinngitsoq atorsinnaasoq.

10.4 Annertussuseq aamma Aaqqissuussamiut Killiit


11. Inummi-Pingajuanut Uppernarsaaneq

Inuk pingajuat byte-inik toqqorneqarsimasunik (private/wrapped qub-imut K ilanngullugu) tigumminnittoq qub suleqatiginagu cryptographic artifact-imik uppernarsaasinnaavoq. Piffissaq piusimaneranut nammineerluni timestamp-ilerneqarsimasoq uppernarsassagaanni per-qub permanent-storage inclusion uppernarsarneqartoq imaluunniit §16 transparency-log proof uppernarsarneqartoq pisariaqarpoq.

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.

Uppernarsaaneq sumut uppernarsaat:

Uppernarsaammut input Suna aalajangerneqartoq
Bundle / sealed artifact eqqortoq + drand signature Body recovered body_hash-imut naapertuuppoq; metadata qub_id-imut pituttorsimasoq allanngorsimanngilaq; ciphertext drand round nalunaarutigineqartumut pituttorsimavoq; round-ilu taanna qaangiussimavoq. Tamanna ciphertext qaqugu pilersinneqarsimanersoq uppernarsaatiginngilaa.
V2 author/cosigner signature eqqortoq Secret key naleqquttoq tigummisup §9.3-mi signed surface authenticate-rsimavaa.
Per-qub storage transaction nammineerluni uppernarsarneqartoq Ciphertext toqqorneqarsimasoq exakt block timestamp-ianut kingusinnerpaamik piusimavoq.
Transparency-log proof anchor-ilerneqarsimasoq eqqortoq §16.11-mi leaf-kind-imut claim, anchor block-imit commitment time upper bound ilanngullugu.

Uppernarsaaneq suna NALI uppernarsaatiginngilaa:

Uppernarsaaneqanngilaq Pissutaa
Pilersitsineq sender_label saqqummersinermut label-iinnaavoq. sig_alg ≥ 0x01 peqanngippat kinaluunniit imarisat matussimasinnaavai.
Siunertaq Artifact-ip byte-it cryptographic relationship-illu uppernarsarpai, pilersitsisup qanoq eqqarsarsimanera pinnagu.
.qub kisimi atorlugu commitment siusinnerusoq Pilersitsisoq round pituttorsimasoq qaangiutereerpat bundle valid pilersissinnaavaa. Drand signature embedded-iusup round qaangiussimanera uppernarsarpaa, ciphertext-ip siusinnerusukkut piusimanera pinnagu.
Seal-button-ip piffissaa exakt Storage imaluunniit anchor block timestamp upper bound nammineerluni uppernarsarneqarsinnaasoq, atuisup najukkami iliuusianit kingusinnerusinnaasoq. sealed_at / received_at assertion-it uppernarsaatitut atorneqanngillat.

Transparency log implementererneqartoq (§16) qub-it akornanni verification-imut tulleriiaarneq allanngortinneqarsinnaanngitsumik takussutissaqartoq aamma commitment time upper bound tatigineqarsinnaasoq (anchor block time) ilannguppai, leaf kind (§16.11) tunngavigalugu killilerneqartoq. Authorship imaluunniit intent ilanngutinngilai; byte-blind upload path default-imi nammineq body_hash imaluunniit drand_round uppernarsaatiginngilai, taakku artifact check-init suli pissarsiarineqarlutik.



12. Versionerneqarnera Saqqummersitsinermullu Aqutsineq

Dokumentip release-i, inner wire protocol aamma outer wrapper version space-nik immikkoortunik peqarput. Taamaattumik dokumentiinnaq pillugu erseqqissaat conforming byte-inik allanngortitsinngilaq, wire migration siunissamiittoq editorial revision-itut saqqummersinneqarsinnaanani.

12.1 Dokumentip Saqqummersinnerata Versionia

Erseqqissaaneq una semantic document release (MAJOR.MINOR.PATCH) aamma Git tag allanngortinneqarsinnaanngitsoq protocol-v<release> atorpai.

Release status tassaavoq Draft (suli normative-iunngitsoq), Current (implementation target kisimi innersuussutigineqartoq), imaluunniit Superseded (historical verification-imut pigiinnarneqartoq). Route /protokoli version-eqanngitsoq release Current takutippaa; release tag-ip source exakt locale-illu tamarmik tassani saqqummersinneqartut pigiinnarpai. Status release number-iluunniit allanngortinneqassappat table una release history-lu change reviewed ataasiusumi nutarterneqassapput.

Dokumentip release-ia Atulersinneqarnerata ulloq Killiffik Wire protocol Wrapper Source
1.0.0 2026-09-23 Maannakkut atuuttoq 0x01 0x01 protocol-v1.0.0

12.2 Protokolip Versionia

SealedQub aamma QubEnvelope tamarmik version field (u8) protocol major version nalunaarutigaat.

12.3 Protokolip Versioniata Oqaluttuassartaa

Versioni Naliliineq Erseqqissaaneq
v1 0x01 Delivery private/wrapped aamma public/bare; text (0x01), pact (0x03) aamma verdict (0x04) body-t; ML-DSA-65 V2 author/cosigner signing; drand quicknet tlock; SHA3-256.

12.4 Siunissamut Akuersaarsinnaaneq

V1 viewer-ip QubEnvelope-imi CBOR map key ilisimaneqanngitsoq (§3.2 canonical order-imiinngitsoq) takuguniuk decode error-imik itigartittariaqarpaa (§3.1). Forward compatibility version field atorlugu pivoq, key tolerance atorlugu pinnani: future addition—even metadata minor—version value nutaap ataani saqqummersinneqassaaq, v1 viewer-ip “protocol newer” error erseqqissumik itigartillugu content signature-mut pituttorsimasoq nipangiusumik peersinnagu.

V1 viewer-ip sig_alg = 0x01 takuguniuk ML-DSA-65 verification tapersersunngikkaluarlugu, qub content “signature present but not verifiable” notice-ilimmik takutittariaqarpaa, qub tamakkerlugu itigartinnagu. Reference implementation-i ullumikkut 0x00 aamma 0x01 avataaniittut itigartippai, v1 registry-mi algorithm valid alla peqanngimmat. Soft-fail behavior algorithm pingajuat §9.2-mut ilanngunneqareerpat pingaaruteqassaaq.

12.5 Outer Wrapper Versionia

OuterWrapper §13-miittoq nammineq version byte-eqarpoq, SealedQub.version aamma QubEnvelope.version-imit immikkoortoq. Version space-it marluk immikkut ineriartorput: symmetric replacement siunissamiittoq wrapper byte qaffassavaa inner protocol version allanngortinnagu, protocol addition siunissamiittoq inner version qaffassavaa wrapper byte allanngortinnagu.

OUTER_WRAPPER_VERSION_* Naliliineq Algoritmi Killiffik
OUTER_WRAPPER_VERSION_1 0x01 AES-256-GCM, nonce 12-byte, authentication tag 16-byte, AAD qub_id-imut pituttorsimasoq Private delivery-mut atuuttoq
— 0x02–0xFF Reserved Siunissami

Viewer-ip wrapper version ilisimaneqanngitsoq erseqqissumik error-imik itigartittariaqarpaa. Protocol specification-ip wrapper-version registry mikisoq pigiinnassavaa concrete replacement saqqummerpat; 0x02 algorithm specification peer-reviewed peqarpat aatsaat allocate-rneqassaaq.



13. Avammut Isertorneqarnermut Pusinneq

13.1 Naapertuusaaq

Protokolip iluai (QubEnvelope → tlock → SealedQub) qub matusereersimasoq suliarivaat piffimmik-matusersuagaq: timaa atuarneqarsinnaanngilaq unlock_at aamma drand-imi anguinnermi atsiorneqarnera saqqummeruttutarpat. Matusinerup kingorna, anguinnerup atsiorneqarnera tamanut nalunaarutigineqarpoq aamma SealedQub CBOR-imi aaqqissuussamiut suluat paasiuminaapput, taamaalimmat nakkutilliuneqarsimasoq naassaanngitsumut toqqorsivik indeks-iarsimasoq qub corpus tamarmiusoq bulk-mik isertinnaarsinnaaqaaq.

Private delivery-mut outer encryption wrapper channel taanna matuarpaa canonical SealedQubCbor aamma byte-it toqqorneqarsimasut akornanni symmetric AEAD layer immikkut inissillugu. Browser-seal path-imi 256-bit key K delivery URL-ip fragment-iani atortunilu kisimiippoq; browser-it URL fragment-inik server-inut nassiussineq ajorput, taamaattumillu qub.social, storage gateway-it CDN-illu K-mik takunnissinnaanngillat. Private qub-ip stored representation-ia taamaattumik ciphertext opaque-iuvoq, pilersitsisup URL-ia avitseqatigiissutiginngikkaanni plaintext utertinneqarsinnaanani. Public delivery layer taanna siunertaqarluartumik atunngilaa (§13.8).

Tamarmiusoq akeqartoq:

13.2 Pusinnerit Tulleriaarnerinik

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

Matusinissaq aamma qaffaanissaq protokoli-iluani (§7, §8) allangortinneqarunnaarput pusinneqartumi killinganit; pusinneqartumi attaviginneqarpoq seal() allaffigineqarsimanerani aamma kuiakkani unlock()-imi.

13.3 OuterWrapper Paasissutissat Aaqqissuussaat

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
}

Naasut aalajangersaasut.

CBOR-imi allaaserineq. §3 naapertorlugu canonical CBOR, key-itik ileqqui malittarisaq assigaa (byte-itik allaaserineqartut takinersaat siulleq, taava lexicographic). Naasut sisamat:

Key Allaaserineqartut byte Ileqqua
nonce 6 1
qub_id 7 2
version 8 3
ciphertext 11 4

OuterWrapper CBOR byte siulleq taamaalimmat takissuseq-aalajangersimasoq map qulequtaa 4-isunut naasoqartumut (0xA4).

13.4 AAD-imut Atassusernera qub_id-mut

Pusinneqartoq qub_id aalajangersarpaa AEAD-imi additional authenticated data tut. Una tassaavoq aalajangersimaartoq akornutsisup pingasunut akornusersisaqarnermut:

Akornusersaaneq Akornusersaaneqarnernut
Ciphertext nuussinniaqit qub_id naasunut allat pusinneqartumi AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq
URL fragment qub A-mut stored byte-it qub B-meersut akulissukkit Key kukkusoq (aamma AAD namminersortumik pituttorsimasoq) → AEAD uppernarsarneq naammasinngilaq
Allangortikkit qub_id naasoq pusinneqartumi upload-imi kingorna AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq

qub_id pusinneqartumi plaintext-imi tigussinnaalersimagaa enumeration kappiisaalinerunik akornusersuinngivippoq — qub_id imminuna SHA3-256 hash §4.1 preimage atorlugu utertinneqarsinnaanngitsuni digest-imi, aamma nakkutilliuneqarsimasoq pusinneqartumi byte-mik kataginnermik pissarsivigineqarsimasoq sumi tamani upload-mi paasisaminik ilisariniqallisaqartumit.

13.5 Pussunissamut aamma Pusiata Qaffaanissamut Algoritmiit

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

Naammasinniaqitanut katigineq. K kukkupput, nonce kukkupput, AAD assingunngitsoq, ciphertext malugaq tamarmik DECRYPT_FAILED kukkunersiummik assigiimmik saqqummiusisarput. Una tassaavoq AEAD-mut aalajangersimaartoq pissusi: naammasinneq sumut paasineqassappat allatigut tunngavissaqarpoq ungasinnerusumi akornusersisup misissornagulu pussunneqarsimasut malugaq nassiullugu pisillugulu nipangatsillugu. Reference-imi suliarineqarnerat PISARIAQARPOQ tamaat AEAD-mut naammassinngitsut atausiaannarluni kukkunersiummut piittussaapput.

13.6 Isumassuissamut Atortut aamma Aalakoorneqarnerat

Pusinissamut isumassuissaq K 256-bit uniformeqartumik sianigissummik tigussaq qub-imut tamaviarluni CSPRNG-imit pilersinneqartoq. Reference suliarineqarnerit pisarput:

Aalakoorneqarnera: K PISARIAQARPOQ URL-tut-isumannaartumik base64-mik allaaserineqartoq (RFC 4648 §5, ilaateqaqanngitsoq) aamma tunniunneqarnermut URL-imut fragment komponentitut ataqatigiineqassasoq:

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

Fragmenti server sumiluunniit ingerlatassanngilaq browser malittariusumi. Utertitsineq aqqutit (atorfilersuuteqarfiup-tungaani oqaluttuassartaq indeks, opt-in email auto-send) tunniunneqarnermut URL-imut tamarmik atortuneqarunnaagit — fragmentilu ilanngullugu — inuk-atortugaata sinneranit allamiit default crypto-shreddingi sungiusarmat akilersuni atorpoq aamma PISARIAQARPOQ atugaq erseqqissumik akuersinerinik aalajangersinneqarsoq.

Fragmenti tammartoq. Atugaq URL fragmenti tammarpaa aamma utertitsiniarluni aqqut peqanngippat, qub atuarneqarsinnaanngitsoq. Una tassaavoq pilersaarutigineqartumi akornutsisutik atorlugit angerlassangerneqartoq aamma PISARIAQARPOQ atugartumut matusinermi piffia saqqummiunneqarsimassasoq. MVP-imi matusinermi-piffimmi nalunaaruteqarneq nakussatsippaa erseqqissumik "URL-i toqqorukkit" oqaaseqarluni aamma uppernarsarneqartumi-email-imut utertitsineq aqqut atugaq opt-in atorpat.

13.7 Kapital Una Sumut Sumut

13.8 qub tamanut (pusinneq peerneqarsimasoq)

Avataani pusinneq tassaavoq tunniunnermi killinganni sapinginnermut piumassusiisartoq. Pilersitsisoq qub matusersinnaavaa tamanut, taamaalimmat canonical SealedQubCbor storage pipeline-imut toqqaannartumik isertarpoq, OuterWrapper qulequtaqanngitsoq aamma isumassuissaq K peqanngitsoq:

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

qub tamanut tassaavoq piffimmik-matuneqarsimasoq kisiannili nittartakkamik-matuneqarsimanngitsoq: drand-imi anguinnera saqqummeruttunnagu atuarneqarsinnaanngitsoq (tlock-ip killinga allanngortinneqarsimanngilaq), kisianni matuserneqareerpat storage transaction id-imik tigussaqartoq kinaluunniit isertorsinnaavaa — URL-imi fragmenti pisariaqanngilaq, K peqanngimmat. Una tassaavoq aalajangersimaarluni akeqartoq killinganut server-ip ingerlatariaqakkaanut: matuserneqarnermut nalunaarummut email-it, fragment-eqanngitsut oEmbed/auto-embed link-it, aamma matuserneqareernerup kingorna SEO pitsaanerusoq tamarmik nittartakkamik pisariaqartippaat server-ip sumiluunniit tigummiunngisaanik isumassuissamik atornagu sulisartumik (§13.6). qub private-iusoq suli explicit <qub-embed src="full_delivery_url"> form atorsinnaavaa publisher-ip fragment-imik nassataqartumik capability tamakkiisoq tunniuppagu.

Producer-ip eqqumaffigisariaqakkai:

Iluartoq (pusinneqartoq) default-ttuassaaq; tamanut tassaavoq pilersitsisup qub-imut ataasiakkaartumik erseqqissumik toqqagaa.


14. Misilernermut Vektorit

14.1 qub_id Aalajangiineqarnera

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

Implementation-it input-imut body_hash aamma qub_id exakt assingusut pilersittariaqarpaat. Test vector una unit test-imi siullertut allanneqartariaqarpoq. Value canonical-it qulaaniittut reference implementation-imit naatsorsorneqarput bit-for-bit naapertuuttussaallutillu. Historical pre-launch prototype layout-it (siulliit marluk live qub-inut atorneqanngitsut) outcome_at sioqqullugu 92 byte (3d9fc2390eab043d38a1669ed3b71be76f9eefe872b9569ab1aaa027b88392b0) aamma outcome_at_or_zero ilanngunneqareermat 100 byte (b0d032898ad629795150fdcb3f84e518f59ed05b7a2a82bc24ebdb87f52144ed) atorsimavaat. Layout atuuttoq 108-byte kingorna drand_round aamma QUB_ID_V2 domain separator ilannguppai. Vector 108-byte siulleq legacy ceil mapping (drand_round = 4695445) atorlugu 3a9fcb31b750d985c262fada6d4f777fd6a28be831d941d85c131f5a4bbaf8a4 pilersippaa—round input-imut qub_id eqqortuuvoq, assersuut qulaaniittoq §4.3 current-round mapping malillugu.

14.2 Matusernermut Anguinnermut Allaaserineq

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

Round 4675286 1595431050 + (4675286 - 1) * 30 = 1735689600-imi saqqummersinneqassaaq—unlock_at-imut exakt, sioqqulluguunngitsoq. (Legacy pre-release ceil mapping-ip 4675285 toqqarpaa, 1735689570-imi saqqummersinneqartoq—sekundinik 30-nik siusinnerusukkut; uppernarsaasut legacy round taanna §4.3 naapertorlugu akuersaarput.)

14.3 Aaqqissuussamiut CBOR-imi Sineriarneqarluni Round-Trip

Suliarinneq PISARIAQARPOQ misissussavoq serialize(parse(serialize(qub))) == serialize(qub) input ajornanngitsut tamaviarluni. Una pissutsinik misilernermut, vektoriiluunniit ataasiusoq pinngitsoq.

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)

Aaqqissuussamiut CBOR byte aamma SHA3-256 body_hash reference-imi suliarineranit naatsorsuiniarput. Suliarinneq PISARIAQARPOQ byte-mut assigiimik CBOR saqqummiussissasut input matumut.

Suliarinneq PISARIAQARPOQ aamma misissussavoq serialize(parse(serialize(pact))) == serialize(pact) input ajornanngitsut tamaviarluni PactTerms (pissutsinik misilerneq).

14.5 Avammut Pusinneqartumi Oqaatsit-akornanni Vektorit

Avammut pusinneqartoq (§13) immikkut canonical fixture-eqarpoq crates/qub-core/tests/vectors/wrapper_v1.json-imi. Pissutsit tamarmik (key, nonce, qub_id, sealed_cbor) tuple-itik paasiuminaajunnaartumik hex input-itut aalajangersarpaa aamma expected_wrapper_hex output aalajangersamik aalajangersaarpaa. Marluit reference suliarineqarnerit JSON-imi atausiarluni atortuneqarput:

Fixture-ip low-level wrapper case pingasut aalajangersarpai. Taakku deterministic OuterWrapper encoding aamma AEAD interoperability §13.8 delivery-shape invariant-imit immikkoortillugit misilittarpaat; immikkut basic-text-public-ip historical name-ia inner visibility = 0x01-alu wrapped byte-inik public delivery conforming-inngortitsinngillat. Producer-ip public inner byte-it bare-iusut toqqortariaqarpai private (0x00) inner byte-iinnarlu wrapped-issallugu.

Pissut Tunngavik
basic-text-public Historical low-level fixture name. SealedQub shape piviusorpalaartoq mikinerpaaq optional field-eqanngitsoq; wrapper byte-iinnaq misilittarpai §13.8 stored delivery conforming-iunani.
with-recipient-pubkey SealedQub recipient_pubkey-imik aalajangersimasalik (reserved future path). Inner CBOR key set allaanerusoq misilittarpaa; fixture content-i immikkoortoq nammineerluni qub_id allaanerusoq pilersippaa (recipient_pubkey nammineq §4.1 preimage-imiinngilaq).
longer-body ~4 KiB timaa — multi-byte CBOR takissuseq qulequtaalu iluani puuata aamma avammut ciphertext atortunut.

Suliarinneq PISARIAQARPOQ byte-mut assigiimik expected_wrapper_hex saqqummiussissasut input toqqorneqartumut. Fixture-i pilersinneqaqqissasoq pisariaqartumut QUB_REGEN_VECTORS=1 cargo test -p qub-core --test wrapper_vectors atorlugu aamma aalajangersarsimavoq erseqqissumik aaqqissuussamiunut allanngorsitsineq.


15. Crypto Profilemut Aqutsineq (Siunissami)

Kapital una nalunaarut v1-mut aamma normativeqalersuni siullermik aaqqissuussamiunut allamut qub-imi cryptografiamut akuusaartoq isertoqattaarsimasoq.

15.1 Maannakkut Killiffia

Protocol v1 primitive-imut algorithm ataasiinnaq pituttorpaa:

Verifier-it primitive active-imut key- aamma signature-length hardcode-rpaat. sig_alg wrapper-version byte-ilu selector explicit-iupput, v1-ili in-band negotiation-eqanngilaq value active-it qulaaniittut kisiisa akuersaarlugit.

15.2 Siunissaminni Suluk

Algoritmi aappassinngneq protokolimut iserpat, uppernarsaasoq taqqaffigineqarpoq CryptoProfile taagisamut (assersuutigalugu, ExqubV1) aalajangersimasunik naliliisanut atortussunut atortunit — sig_algs, drand piorsaaviit, wrapper versionit, content type-it. Profil aalajangerneqarpoq uppernarsarnermi piffimmi, in-band-mi pisarpoq oqaluttuussassanngilaq. Naliliineq tamaat profilemi atortuujungippat itigartinneqarput.

Una qulakkeerpaa ML-DSA-87-mik ilaatittumik imaluunniit Ed25519-mik atorlugu kingumut uppernarsaasut atortullu uppernarsaasut nikilersaaneqarsinnaanngitsoq: v1 uppernarsaasoq v1 uppernarsaasutut pissimaaqissaaq v2 profili saqqummiussinneqareerpat.

15.3 Akornisaaffigineqarluni Pissusii

§15-mik normativetut suluit isumagineqaqquk apuuttortumut una imaattumut:

Tassanngaannaq §15-mi sumiiffeqarsimavoq aalajangersuusermi siunissami PR-it siusinnerusumi naapertorlugu tikiunneqartussaatut tikkuagaq atorlugu pinngivissumi aappassinneqannginnermik atortussaq atortugaq sungiussatsillugu.


16. Ersarissuseq Log aamma Durabilitet Tier (Atortuulersinneqarpoq — misissuineq naammassineqarpoq)

Inissisimanermik nalunaarut. Immikkoortoq una tassaavoq atuutilersinneqarpoq (W5/UP-B1, Fase 1–8), tunisassiortoq aammalu trust-root-ip annertussusaa uani allassimasoqarluni. Trådformatit, hashing aamma uppernarsaasiinermi aqqutit live-iupput: kerne Merkle + kanonisk-CBOR-typer (qub-core), TypeScript-imik ersarissumik + ANS-104-mik ataatsimoortitsisoq (workers/api/src/crypto/), ataatsimik allattoq LogDO + koordinat-taste R2 node-mik pisiniarfik, taanna /upload log-append misileraaneq, ulluinnarni ankeri + bundler-dren crons, taanna GET /api/v1/qub/:tx_id/proof (ilanngussaq) aamma GET /api/v1/log/consistency (RFC 9162) uppernarsaatinik kingullermik, typed inklusionsprøve tigummineqartoq .qub bundli (§17.5), ANS-104-mik ankerimik uppernarsaasiisoq (tools/qub-verify), aamma marlunnik nammineq saqqummersitsisartunik-niaqorlunneq (§16.6). A iluatsittoq /upload tassaavoq R2-mik atorsinnaasumik kisiannili log-imik qaqutigoortumik aatsaat qaqugu LOG_DO atorneqarpoq aamma inline append iluatsippoq; aatsaat taamaalilluni akissuteqaataa carry log_seq, receipt, aamma anchor_status. If RECEIPT_SK peqanngilaq imaluunniit atuunneqanngilaq, taanna kvitteri sig_b64url imaqarpoq aammalu non-repudiation-imik nioqquteqanngilaq. Ullumikkut /seal aamma pakt-imik saqqummersitsinermi aqqutit Arweave-mik suliassat ataasiakkaat pilersaarusiortarpaat kisiannili logblad-imik ilanngussaqanngillat. No code ullumikkut suliarisinnaanngilaa /upload kommentarip siunnersuutaa kingusinnerusukkut isumaqatigiinniarnissaq append-imik kukkunerup kingorna. W5-imi avatangiisinut misissuineq naammassivoq: §16.15-imi allassimapput sanaartornermut aalajangernerit aamma aallartitsinermut killissarititat, kisianni killissarititat taakku tunisassiortup kattuffianik aatsaat oqaatigineqartumik annertusaanngillat. Trust/ingerlatsinermi atortut pingasut suli gated-iupput: (a) dedikeret ankerpulje ( ).ANCHOR_JWK; LogProfile.anchor_owner suli tassaavoq [0xAB; 32] inissisimasoq); b) kvitterimik allaffissornikkut atortoq aammalu pin-imik public-key-mik naleqquttumik (RECEIPT_SK tassaavoq toqqarneqarsinnaasoq aamma LogProfile.receipt_pubkey ullumikkut imaqanngilaq); aamma (c) nammineq saqqummersitsisarfiit-qulequttat GitHub-imi allaffik + token (§16.6). Anker/profilpin-it neqeroorutigineqarnissaasa tungaanut, standalone-mik uppernarsaasiisoq uppernarsaatinik statusimik unneqqarissumik nalunaaruteqartarpoq, tamakkiisumik anker-imik, pin-imik uppernarsaammik piumasaqarnani. Design-i strikt additiv-iuvoq aammalu tassaavoq allanngortinneqanngilaq SealedQub / QubEnvelope ledningsformat.

16.1 Pissutaasoq aammalu atorsinnaassuseq Tier

Ullumikkut saqqummersitsisarnermi aqqutit tunniussineq Arweave-mik uppernarsaasiinermit avitseqatigiissutigaat: taakku ataasiakkaanik suliassaq aallaavigalugu allaffigisarpaat, R2-mi artefaktimik aammalu eqqortumik tunniussisarnermik inissisimaffimmik persistertarlutik, kingornalu asynkron-imik post-eqartarlutik. Transparency log-ip general-ip ilaanut nammineerluni ankerneqarsimasumik ordningslag-imik ilassuteqarpoq /upload piumasaqaatit kikkut LogDO append iluatsippoq:

Tier Ateq Qularnaveeqqut Qanga
T1 R2-siullermik synkron ack Durability floor — byte-t matuneqarsimasut aammalu eqqortumik saqqummersitsinermi inissisimaneq allanneqartarput atorsinnaasumik toqqorsivimmut, angusaqarluarneq uteqqinneqannginnerani. Ullumikkut saqqummersitsisarnermi aqqutit akornanni atuutilersinneqarpoq.
T2 Batched ersarissuseq-log ilanngunneqarneq Append-only, tamper-evident neriorsuut + tamakkerlugu inniminniineq ilanngunneqareerpat aamma ankerneqareerpat. Ullumikkut tunisassiortoq: iluatsippoq LogDO ilanngunneqarpoq fra /upload; akissuteqaat kvitterimik tuplemik tigummivoq. Tamanut tunngassuteqanngilaq.
T3 Per-qub Arnaq piujuartitsineq Arweave-mik ataasiakkaamik suliaqarneq qub-imut. Ullumikkut saqqummersitanut akuerineqarsimasunut tamanut piareersarneqartarpoq aammalu asynkron-imik ikkussorneqartarluni; eqqortumik allaffigineqarsimasoq tunineqarnissaata tungaanut drenable outboximiiginnarpoq.

Tier-it erseqqissumik uppernarsaatinik aammalu piujuaannartitsinermik piginnaasanik nassuiaateqarput, maannakkut aningaasarsiornikkut pilersaarut pinnagu. Kode-p maannamut atuuttup suli pilersaarusiorpaa Arweave-mik ataasiakkaanik suliaqarnissaq saqqummersitanut akuerineqarsimasunut tamanut; taanna T3-mik kisimi akiligassaqarluni upsell-itut saqqummiussinngilaq. API-key/kontomut pisassiissutit qaffasissusaat suli immikkut qinnuteqaatinut nakkutilliisuupput.

Piujuartitsineq unneqqarissuseq. T1-imik allanneq synkron-iuvoq, taamaattumik akissuteqaat iluatsittoq Arweave-gateway-mik utaqqisoqanngikkaluarluni applikation-niveau-mik atorsinnaassuseqartitsivoq. Nammineq namminersorluni piffissaq pilersitsineq ajorpaa. Nuussineq ataaseq uppernarsarneqarsimasoq blok-tid-ip qulaani killissamik nioqquteqarpoq. Akissuteqaateqarnissamut T2-mik kvitterimik tuplemik tamakkersimasumik, ankerip uppernarsarneqartup tulliup log-imik uppernarsaat ataani allaaserineqartoq tunniussinnaavaa. Tuple-q peqanngippat, pinnguaatit arlaannaalluunniit isumaqarsinnaanngilaq qub-i taanna transparency-log-imiilersimasoq. Anker aamma saqqummersitsinerup kinguarsarneqarnera protokol-niveau-mik kisitsisit SLA-mik peqanngillat.

16.2 LogLeaf Aaqqissuussaaneq (marluk imminut pisussaaffigineqarsimasut)

Log-imut allattorsimaffik tassaavoq a LogLeaf, §3.1-ip profiliata ataani assanit allanneqarsimasutut kanoniskiusumik CBOR-imik kodeqarsimasoq (definite-length, tag-inik peqanngilaq, float-inik peqanngilaq, integer-inik kortest-form-imik, NFC-mik allaaserisaq, peqannginnerani toqqarneqarsinnaasunik allagartat ilanngunneqartartut, tastatit kodeqarsimasut-byte-nik sivisussuseqarlutik ordneqarsimasut taava byte-nik sivisussuseqarlutik). §3.1-imi allassimasoq parse → re-encode → compare kanonimik guard atorneqarpoq hashing-erneq sioqqullugu kode-vej-imi (dekode-miinnaanngitsoq), taamaattumik implementering-it marluk bladbyte-t pillugit isumaqatigiinngissuteqarsinnaanngillat integer-bredde imaluunniit key-order-imik assigiinngissuteqarneq aqqutigalugu. Integerit tamarmik tassaapput u8 / u64 / i64; tamarmik 32-byte-nik byte-nik strengiupput (bstr[32]). Arweave-mik suliaqarnermi id-mik toqqorsimasoq tassaavoq 32-byte-nik SHA-256-imik digest-imik rå, soorlu bstr[32], qangaluunniit base64url-imik allaaserisaq (§3.3-mut naleqquttoq).

Pilutaq tassaavoq marluk toqqarneqarsimasut a kind byte, pissutigalugu upload-imut aqqut nalinginnaasoq byte-blind-iuvoq: POST /api/v1/upload ilisimasaqarluarluni akuerineqarsimasut marluk payload-formit opaque-tut isigalugit aammalu pissarsiaraa qub_id aamma unlock_at kisianni soorlu klient-imik uppernarsaatinik tatigineqanngitsunik. Namminersorlutik oqartussat aqqutaani, body_hash, drand_round, created_at, aamma drand_chain_version ilaatigut §13-imi avatangiisinut tunngasup iluani toqqorsimapput, taassumalu pingaarnertut Sulisup tigummigallartarpaa. Typesystemip aammattaaq tunisassiortumut uppernarsarneqarsimasumik ilusilersugaavoq, taannalu aallaaveqarpoq body_hash / drand_round nammineq. Ullumikkut /seal route taakku pingaarnertut peqarpoq kisianni sianerneq ajortoq LogDO, taamaattumik tunisassiorneq ullumikkut taamaallaat uppernarsarneqarpoq (0x02) ilannguppoq iluatsilluartumik general-upload-imik. Agguaassineq neriorsuutigineqarsimasut tamarmik unneqqarissumik inissisimatinniarpai, uppernarsarneqarsimasoq nioqqutissiortoq kabelilersimasoq isiginagu:

Matuersaat Illut. lin Suussusaa Peqataaneq Isumaqarpoq
seq 4 u64 piumasaqaataasoq Nunarsuaq tamakkerlugu 0-mik tunngaveqartumik pilutanik indeksi; inissisimaffik ilanngunneqarnermut uppernarsaat pisussaaffigisaa.
kind 5 u8 piumasaqaataasoq 0x01 uppernarsaatissaqarsinnaasoq (nassuiarneqarsimasoq, ullumikkut anisinneqanngitsoq) imaluunniit 0x02 uppernarsarneqarpoq (klient-seal / byte-blind upload).
ref 4 bstr[32] piumasaqaataasoq Bladnajoqqutassiaq id. Uppernarsarneqarsimasoq → rå qub_id. Uppernarsarneqarpoq → taanna blindeqarsimasoq id SHA3-256(qub_id ‖ log_blind_secret) (§ 16.2.1).
chash 6 bstr[32] piumasaqaataasoq Imarisassaq adresse SHA3-256(stored_bytes) — imaqartoq ataaseq Sulisup unneqqarissumik naatsorsorsinnaavaa, aqqutini marlunni.
unlock_at 10 i64 piumasaqaataasoq Kopierneqarsimasoq (uppernarsarneqarsimasoq) imaluunniit uppernarsarneqarsimasoq (uppernarsarneqarsimasoq); uppernarsarneqarpoq > 0 taanna qimmit qimuttut isertinnagit.
received_at 12 i64 piumasaqaataasoq Sulisoq væg-ur R2-ack-imi. Uppernarsaatissaqanngitsoq (ingerlatsisup uppernarsarpaa; §16.6). Nammineq nassuiaanissamut saqqummiussineq, uppernarsaataanngilaq. Uppernarsarneqarpoq > 0.
body_hash 10 bstr[32] kind=0x01 taamaallaat Omitted on 0x02 — Sulisoq §13 malillugu amigaatigaa.
drand_round 12 u64 kind=0x01 taamaallaat Omitted on 0x02.

A kind=0x02 leaf ilisimalluinnarlugu aamma suliarinngilaq body_hash aamma taannaanngitsoq drand_round: taanna uppernarsarpaa inniminni-adressimi opaque-mik ciphertekst-imik neriorsuineq aammalu ordning chash, piumasaqarluni qub_id aamma unlock_at — taassuma plaintekstia imaluunniit runde. Qub-imut uppernarsarneqarsimasumut plaintekst/runde leg-it §11-imi atuuttumiit aallaaveqarput .qub-bundlimik uppernarsaaneq, log-imiit pinnani (§16.11). drand_chain_version blad-imiinngilaq (taanna wrapper-ip iluaniippoq default-imik aqqusinermi); kæde granulariteti ankerimi inuuvoq (§16.7). Kode-disciplin: all-nul-imik itigartitsineq ref imaluunniit chash, aammalu positiviunngitsunik itigartitsineq unlock_at / received_at, spejl-imik outcome_at > 0 sentinel-imik nakkutilliisoq cbor.rs.

16.2.1 Namminersorlutik oqartussat-qub-imik atornerluineq

Log-i §13-imi avatangiisinut tunngasut pinaveersaartinniarlugit pinngortitamiittut allattorsimaffimmi oraklinngorsinnaanngilaq (§13.1). Privat (pakke) qub-imut tunngatillugu asserted blad-imik suliaqarpoq blindeqarsimasoq tunniussisoq SHA3-256(qub_id ‖ log_blind_secret), sumi log_blind_secret tassaavoq server-imik tigummineqartoq isertugaq, aammalu omits body_hash. Pingajussaa taamatut blad-imik immikkut ittumik ataqatigiissitsisinnaanngilaq qub_id; qub-ip piginnittua, taanna nioqqutissiornermut URL-imik piginnittuuvoq taamaattumillu qub_id, nammineq ilanngunneqarnertik uppernarsarniarlugu blinde-t recompute-ersinnaavaat. A public qub (naatsorsorneqarsinnaareersoq, tigummiartoq Visibility: public Arweave-taggi per §13.8) rå-mik suliaqarpoq qub_id. Tamanna tassaavoq sumiiffimmi ataatsimi standalone-mik uppernarsaasiisinnaaneq ilisimalluinnarlugu atortussanik privatimik invariantimut tunniussisartoq; namminersortunut qubs-inut immikkoortortaqarfik tassaavoq chash (§ 16.9).

log_blind_secret aqutsineq (aalajangiunneqarpoq — §16.15 Q4). Blind-ip blad-unlinkability illersorpaa, plaintext-imik isumannaallisaanermik illersuinngilaq (§13-imi wrapper-imi tamanna nammineerluni tiguneqarpoq). Ulloq a log_blind_secret kompromis, qanoq ittumik qub_id akeqqap pigilersimavaa imaluunniit sanaartorsinnaavaa (qub-it tamarmik bundle-mik/URL-imik pigisaqartut, aammalu low-entropy-mik imaluunniit public-imik qub_id) taanna blad-imik naatsorsuivoq ref iluani ataaseq hash aamma ataqatigiissitsivoq — tamanna tassaavoq ilisimaneqartumik innuttaasunik toqqaannartumik ataqatigiissitsineq, ilisimaneqanngitsumik sumiiffimmi brute-force-mik pinnani. Immikkoortitsineq log_blind_secret soorlu korrelation/Sybil-grade-mik isertortumik server-ip isertortumik allanik custody-tier-imi, aammalu siumut kisiat roterertoq (rotererneq siunissami qimmit qimuttut re-blind-ertarpai; taanna retroaktiv-imik unlink-ersinnaanngilaq anker-ersimasut).

16.3 Blad aamma node hashing

RFC 6962 §2.1 domænemik immikkoortinneqarsimasumik hashingimik SHA-256-imik taarserneqarluni SHA3-256-imik:

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

Domæne-p siulliup byte-i 0x02 (isertitsivik, §16.4) aamma 0x03 (STH hash, §16.6) taakkunannga immikkoortinneqarput aammalu immikkoortinneqarput. Taakku ataatsimik byte-upput taamaattumillu ASCII-mik domæne-mik immikkoortitsisartunik 10-byte-nik atuuttunik (QUB_ID_V2, Il.il.). Orpik tassaavoq RFC 6962 venstre-full eqqissisimanngitsoq tree (ataasiakkaat innermik anitsisartoq annerpaamik marlunnik strikt minnerusumik subtree bladtal-imik), taanna ilanngunneqarnermut aammalu ataqatigiinnermut uppernarsaatinik ataatsimik audit-path-algoritmimik avitseqatigiissitsisinnaavoq. Najoqqutassiaq spec-imi ersarissumik venstre/højre-mik aallaaveqartumik pseudokode-mik aamma pin-inik a-mik imaqarpoq marlunnik pisinnaassuseqanngitsoq (5-blad) misissuinermi vektor taamaattumik højrekant-imik promotion-case — taanna 4-blad-vektor-ip toqqoqqavoq — atorneqarpoq.

16.4 Hash-imik kædeqarneq (ingerlatsineq)

LogDO-p crash-konsistensimut kisimi innermik anitsisarnermik kæde-mik pilersitsisarpoq. Imaappoq saqqummersinneqarsimanngilaq aammalu verifier-facing-imik suliaqarsimanngilaq:

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

Saqqummersinneqartoq append-only oqartussaassuseq tassaavoq kumulativ Merkle-p root + taassuma ankeri (§16.5–16.6), qanoq iliorluniluunniit råordre, tassani operatørip kiffartuussisarnera, qimagussortarpaa: kæde-p kiffartuussineq qanoq ittuunersoq pillugu recomputereqartarpoq, taamaattumillu ankerneqarsimasoq root-ip kisimiilluni kanonimik inissisimaffimmik pinngitsoortitsisarpoq.

16.5 Kumulativ Merkle-p orpik aamma batching

Peqarpoq ataaseq RFC 6962-imik orpik ineriartortuaannartoq over tamarmik blad in seq ordre — immikkoortinneqanngillat per-batch-imik puisit. (Carry-leaf-chained per-batch-imik sanaartorneq itigartinneqarpoq: taanna ilumut prefix-relation-inngilaq, taamaattumillu "konsekvens-imik uppernarsaatinik" eqqortuunngillat.) Kumulativ træ-p ilumoortumik RFC 9162-mik konsistens-imik uppernarsaatinik tunniussisarpoq aammalu ataaseq kingulleq anker-imik uppernarsaatissaqarsinnaavoq qub-mik ilanngunneqarneq qanoq ittumik utoqqaanerusumik.

The... LogDO Durabelt Objekt tassaavoq ataatsimik allattoq (blockConcurrencyWhile, ersersitsineq QuotaDO / EntitlementDO) — log-imut ataatsimoorussamut ilanngussaq tassaavoq atuarneq-allanngortitsineq-allanneq ataatsimoorussamik inissisimaffimmi aamma taamaattumik DO-mik ingerlaqqittariaqarpoq, KV-mik pinngitsoorani. Taanna cache-ertarpaa orpik højrekant-killeq (O(log n) hashes) taamaattumik batch-imik matusineq tassaavoq O(batch). A parti tassaavoq qimmit ataatsimut ankerneqartut; taassuma atuutilersinneqarsimasut tassaapput a tree_size siuarsaanissaq minnerunngitsumik LOG_BATCH_MAX_LEAVES (standard 4096), ukiut ankerkadensimut tikittut, imaluunniit ersarissumik allaffissornikkut/kron-imik nukimik qanilliartorneq. root_i tassaavoq Merkle Tree Hash-imik akulerussaq 0 .. tree_size_i.

16.6 Arweave Anker aqqutigalugu allagartaq

Arweave-mik ankerimik suliaqarneq tassaavoq allagartaq Tree Hoved aamma taarserpaa operator-ip allaffia nammineq træhoved-imut: ulluinnarni ankeri qub-tast-imik pisariaqartitsineq ajortoq pissutigalugu Arweave tx owner tassaavoq allaffik. Moat-tesis-i taamaappoq — substrati allanngortinneqarsinnaanngitsoq, qub-imik tigummigallarneqarsimanngitsoq, ankerneqarsimasumut root-imut atortussaavoq.

Logdesign-ip ataatsimik kissartumik angusaqarluartumik-append-imik piumasaqarpoq kvitterinermut atortoq (§16.10), pinngitsoorani LogProfile aammalu kryds-allaffigineqartoq anchor_owner. Ullumikkut atuutsinneqarnerata trust-root-imik neqerooruteqarneq taanna naammassinngilaa: RECEIPT_SK tassaavoq toqqarneqarsinnaasoq, absent/invalid key-imik pissarsivoq sig_b64url: "", aammalu ataatsimoortinneqarsimasut LogProfile.receipt_pubkey imaqarpoq. Taamatut kvitterineq ilanngunneqarsimasoq nassuiarsinnaavaa kisianni tassaavoq naamik kvitterineq allaffigineqarsinnaanngitsoq. Design-imik piumasaqaat nukittunerusoq aatsaat atuuppoq uppernarsaasiisup saqqummersitsinerata public key-imik naleqquttumik pin-ernerata kingorna aammalu anker-imik piginnittup cross-signereernerata kingorna. Saqqummersitsinermut akissuteqaat kvitterimik tuplerneq tamakkerlugu peqanngitsumik log-acceptance-mik piumasaqaateqanngilaq; ataaseq allaffissornikkut imaqanngitsoq append-position-imik piumasaqaateqarpoq kisianni allaffissornikkut uppernarsaasiinermik piumasaqaateqanngilaq.

The... SignedTreeHead tassaavoq CBOR-i kanonisk (tasterit kode-mik sivisussuseqarlutik): size:u64, root:bstr[32], batch:u64, prev:bstr[32] (siornatigut sth_hash; genese = 32 nul byte), log_id:bstr[32], first_seq:u64, anchored_at:i64. Taassuma hash tassaavoq sth_hash = SHA3-256(0x03 || canonical_cbor(SignedTreeHead)).

Pinneqartoq upperinninnermik root. log_id = SHA3-256("QUB_TLOG_V1" || anchor_owner_address). Konformimik uppernarsaasiisoq pisariaqartinneqartariaqarpoq anchor_tx.owner == LogProfile.anchor_owner, sumi anchor_owner (aamma kvitteri-nøgle public key) baked-iuvoq qub_core soorlu aamma LogProfile — quicknet-konstantit ilanngunneqareersut saniatigut DrandTimelockProvider::quicknet() — aammalu uppernarsaatitut binaarimik agguataarneqartarluni. Uppernarsaasiisoq aamma Arweave tx-imik uppernarsaasariaqarpoq data → tx_id-mik binding najukkami gateway-mik upperinninnermiit /raw/ akissut. Tamanna rogue-wallet-imik eqqissisimatitsinermik hole-mik matusivoq: "anker på Arweave" isumaqanngilaq, uppernarsaasiisoq which wallet-imik pinngitsoornissaata tungaanut.

Rotation tassaavoq §15-imi aqutsineq annertusaaneq, atuineq ajortoq (aalajangiunneqarpoq — §16.15 Q3). §15.2-mi profilip pinnguaataa ullumikkut sig_algs / drand-kæder / wrapper-versionit / imarisaannik sorliit kisimik allattorsimapput, §15.3-milu trigger-it taakku ilaat ataaseq allassimanngilaq — . LogProfile / anchor_owner tassaavoq naamik suli §15-imi pinngitsoorani. Taamaattumik rotation-imik aqutsineq sanaartorneqartariaqarpoq: §15.3 annertusarneqarpoq (allatut) ilanngunneqarnissaanik LogProfile trigger, aammalu rotation tassaavoq allagartaq LogProfile bump uppernarsaatitut nutarterinermi nassiunneqarpoq. A pilersaarutaasoq rotation-ip krydssignatur-imik anisitsisoqarpoq; a isumaqatigiinniarnermik tunngaveqartoq rotation cannot (utgangsnøgle-i upperineqanngilaq/atorneqarsinnaanngilaq eqqortumik taamani) aamma §15-imik aqutsisoqartumut bumpimut uteqqittarpoq, prev-anker-gaffel-check-imik (allatut) killilersuinermik ajoquserneq akornanni.

Eqimattat igalaasartaat (uppernarsaanerup parameteria). Pilutaq eqqortumik akiuussinnaavoq aatsaat qalipaat ankeri Arweave-iuppat.uppernarsarneqarpoq. Igalaaq tassaavoq received_at → anchor confirmation (kadens + Arweave-p kingullermik, protokollimik kingusinnerusukkut qulakkeerisoqanngilaq). Trust-root-imik neqerooruteqarneq sioqqullugu ullumikkut atuutsinneqarnera qub-ip ingerlatsinermik ataqatigiinneranik neqerooruteqarpoq plus qanoq allaffigineqanngitsunik append-metadata-nik peqartoqarpat; taanna pilersaarutaasumik uppernarsaammik qularnaveeqqusiinermik nioqquteqanngilaq. Akisussaassuseqarnissamut artefaktit pingasut sanaartorneq naammassineqarsimasoq aalajangersarpaat (takunnittumik modeli tassaavoq §16.15 Q2-p aalajangigaa):

  1. Sillimmasiissut kvitterimik (pilersuineq apeqqutaatillugu) — SCT-analogi uteqqinneqartarpoq upload-ip log-iata ilanngunneqarnera iluatsippat (§16.10). Aatsaat qaqugu non-repudiable-nngortarpoq sig_b64url tassaavoq imaqanngitsoq aamma public key/anker-owner-imik ataqatigiinneq naleqquttoq uppernarsaasiinermi pinneqarpoq. Ullumikkut nioqqutissiornermi profilip pin-ia imaqanngitsoq aalajangiineq taanna tapersersorsinnaanngilaa. Aqutsineq taanna kvitterinermut tupimut ilanngunneqanngitsumut imaluunniit kvitterinermut allaffigineqanngitsumut atuutinngilaq.
  2. Monitorimut periuseq saqqummersinneqartoq + siusinnerusukkut kæde-mik pisunneq — ankeri prev kæde tassaavoq niaqoq→genese; a gaffel (marluk anker ataatsimut size assigiinngitsunik root, imaluunniit aserorsimasoq prev) tassaavoq pissusilersornermik uppernarsaat saqqummersinneqarsinnaasoq. Eqimattamik paasiniaaneq tassaavoq ingerlatsinermi pisussaaffik oqaatigineqartoq, nipaatsumik naatsorsuutigineqanngilaq.
  3. Marlunnik nammineq saqqummersitsisartunik niaqorlunneq — niaqorlunneq nutaaq ataaseq {sth_hash, tree_size} tassaavoq immikkut ittumik qub-imik piginnittumut tamanut ammasumik, append-imik GitHub-imi allagartaq (nammineq saqqummersitsisarnermik erseqqissumik tamper-evident leg), sociale post-imik best-effort-imik uppernarsaatitut kisimiilluni. Qupperneq MUST-imik allaaserisaq kukkuneqarsimasoq (nipittoq kukkuneqarsimanngilaq). Ingerlatsisoqarpoq (Etape 8) soorlu... publishHead anker cron-imi krog (workers/api/src/utils/heads-publish.ts): a PUT imarisaannut API-mut a sha tassaavoq ilanngussaq-allaat (a 422 isumaqarpoq niaqoq saqqummersinneqareersoq, never overskrift); opt-in / atulersitsineq-gated on PUBLISH_HEAD_GITHUB_{TOKEN,OWNER,REPO} aamma inert, atortussiassaq neqeroorutigineqarnissaata tungaanut. A hard GitHub-imi kukkunerit quppernerit aqqutigalugit health_alert kanali aamma bumpit atorsinnaasumik kukkunermik metrimik (m:tlog_publish_head_fail); Arweave-ankeri nammineq saqqummersitsinermi kukkuneqarpat rulleqarneq ajortoq. "Not fail silent" tassaavoq mittarfik taanna piujuartitsisoq — taanna ops-it dashboard-alert-ertariaqarpaat — naak pitsaanerpaamik emailikkut qupperneq nassiunneqarsinnaanngikkaluartoq. Marluk unneqqarissumik killilersuinerit "anchor-on-advance"-imiit malinneqarput (cron aatsaat saqqummersitsisarpoq annertussuseq siuariartorpat): GitHub-imi ajoquserneq piffissap ilaani a putoq published-heads-sekvensimi tassunga annertussusilimmut — killilersorneqarsimasoq, nipittuunngitsoq (it pages), aammalu niaqoq ataaseq superset-tree-mik suliaqartarmat, §16.9-mi ataqatigiinnermik uppernarsaat gap-imik aqqusaarpaa; pingaaruteqartumik, taanna konsistensprøve naatsorsorneqartarpoq aallaqqaammut oqartussaassuseqartoq Arweave-mik ankersimasoq, GitHub-ip pinnguaataanit pinngitsoq, taamaattumik GitHub-imi gap-ip uppernarsarsinnaaneq annikillisarpaa. Catch-up backfill, saqqummersinneqarsimasunik-niaqorlunnik immersuisoq, tassaavoq kinguarsarneqarsimasoq pitsanngorsaaneq.

Unneqqarissuseq killilersorneqarpoq (killilersuineq). Pissutigalugu qub-ip pilersaarutaasumik posting-imik pinnguaatit marluk aquppai, tamanna nammineq saqqummersinneqartoq, nammineerluni takuneqarsimanngitsoq. Arlaannaalluunniit nioqqutissaq, nittarsaassineq inatsisitigulluunniit pinngitsoorani oqaatigisinnaanngilaq log "namminersorluni takuneqarsimasoq". Kvitterineq/profil/hovedportit neqeroorutigineqareerpata, akuersissutigineqartoq tassaavoq equivocation-imik paasineqarsinnaavoq aammalu append-imik allaffigineqarsimasoq iluatsittoq kvitterimik uppernarsaatissaqartinneqarsinnaanngitsumik qimattarpaa. Taamani sioqqullugu piumasaqaat taanna atorneqarsinnaanngilaq. Ilumoortumik namminersortumik tredjepartsvidne siunissami §15-imi aqutsinermik bump-imut kinguarsarneqarpoq.

received_at tassaavoq ingerlatsisoq-assersorneqartoq aamma no claim tassunga tunngatinneqarsinnaanngilaq — taanna uppernarsaatitut imaluunniit isumaqatigiinnginnermik uppernarsaatitut nioqqutissamik / inatsisitigut / API-mik / uppernarsaatitut pinnguaatitut pinngitsoorani. Arweave-p ankerblokkip piffissaa T tassaavoq piffissaq upperineqarsinnaanngitsoq ataaseq ("logged by"-mi qulaani killissaq). Skærmimik sunaluunniit sanitetimik misissuineq received_at MUST naliginnaasumik T, ingerlatsisumit aqunneqartumut akerliunngilaq anchored_at STH-mik suliaqarneq; taamatut misissuineq unneqqarissumik ingerlatsisup nalunaaquttap kukkuneranut illersuisuuvoq, naamik ajortumik ingerlatsisumut akisussaassuseqarnissamik nakkutilliineq (§16.15 Q5).

16.7 Anker-imik suliaqarnerup formatia aamma kadense

The... AnchorBundle tassaavoq kanonimik-CBOR Arweave-mik suliassaqarfimmi, §16.8-mi bundler aqqutigalugu allanneqarsimasoq: ver:u8, sth:bstr (kanonimik SignedTreeHead bytit), prev_anchor:bstr (siusinnerusukkut anker tx id råbyte; genese-mi ilanngunneqanngilaq), chain_hash:tstr (drand-kæde atuuttoq — quicknet), aammalu batch-ip blad-CBOR-imik strøm in seq inniminnigaq taamaattumik ankeri nammineq piumassutsimik suliaqarpoq: monitor re-deriver root timimit nul qub-imik apeqqutaasumik. (Bladstrøm-i højvolumen-imi annertussuseqalerpat, siunissami kukkunersiuineq najoqqutassiamik blad-range-mik kisimi suliaqarsinnaavoq; maluginiarneqarpoq, v1-imi akuerineqanngilaq.)

Arweave-taggit siunertaqartumik naatsorsorneqarsinnaapput — log-i isumaqarpoq nassaarineqarnissaa, private qubs-it assigalugit: App-Name: qub-tlog, Anchor-Format: 1, Log-Id: <hex>, Batch: <n>, Tree-Size: <n>, Root: <hex>, Prev-Anchor: <tx>, Content-Type: application/cbor. Taaguutit tassaapput tips-it tatigineqanngitsut; CBOR-ip ataatsimiititaliaa kisimiilluni oqartussaasuuvoq.

Kadensi: ullormut atorneqartartoq, volumen-imik taarserneqartartoq (annertussutsimik atortoq auto-kortertarpaa effektiv kadens under belastning). Ullumikkut tunisassiortup akiligassaqarluni force-anker-krog-imik atuinngilaq. The... ankerpulje tassaavoq dedikeret aammalu lav-velocity, immikkoortinneqartoq upload-pulje-mit — taanna MUST-iussaaq its nammineq JWK (immikkuullarissumik pingaarnertut, upload-wallet-imi logiskimik rolle-unngitsoq) taamaattumik upload-wallet-imik isumaqatigiinneq ankerinik sanasinnaanngilaq — ullormut anker-transaktion-imik aningaasartuuteqarluni. Piginnittuunermi inissisimaneq ersarissumik allassimavoq: a narrow-scope hot key-imik qaqutigoortumik qaqutigoortumik aammalu aalajangersimasumik eqqissisimatitsisumik, "nilleq"-unngilaq — aningaasat ulluinnarni auto-signertartoq nilleqarsinnaanngilaq, aamma spec-i allatut isikkoqanngilaq.

16.8 ANS-104 Bundli

ANS-104-mik DataItem-imik kode-mik aamma deep-hash-imik allaffimmik ingerlatsisoq, 300-t missaannik linje-nik, Web Crypto kisiat, nul npm-imik apeqqutaasut (Turbo SDK-t marluk kukkupput npm ci --ignore-scripts nioqqutissiornermut port). DataItem byte-mik inissisimaneq:

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

Allaffissorneq tassaavoq Arweave deepHash — a rekursiviusoq SHA-384 digest (Arweave-p trådimik piumasaqaataa, crypto.subtle.digest("SHA-384")) qulaani ["dataitem", "1", sig_type, owner, target, anchor, encoded_tags, data] — taava RSA-PSS-imik atorlugu deep hash-imik aningaasanik JWK-mik aqqutigalugu crypto.subtle; id = base64url(SHA-256(signature)). SHA-384 tassaavoq Arweave-tråd-imik kisimi primitivitut karantenerneqarpoq, qub-imik tatiginninnermik primitivitut (§15-imi allassimavoq ungasinnerusoq; qub trust hashing tassaavoq SHA3-256 tamakkerlugu).

ANS-104-p kode-aqqutaa fallback/drain-maskiinamut kinguarsarneqarsimasumut kiffartuussivoq allallunilu AnchorBundle Paasissutissat. Saqqummersitsisarnermi aqqut nalinginnaasoq siullermik Arweave-mik eqqortumik allaffissornikkut suliassaq pilersitsisarpoq aammalu JSON-iminik atorluarsinnaasumik outbox-imiititsisarluni; direct posting tassaavoq latency-mik pitsanngorsaaneq, aammalu dren-ip aqqutaa bundler-imik fallback-imik atuinnginnermini suliassaq taanna misilittarpaa. Allaffissornikkut skema (aalajangiunneqarpoq — §16.15 Q8): v1-imik allaffissornikkut RSA-PSS-imik (allaffissornikkut type 1) Arweave-p aningaasaateqarfia JWK-mekanismeq pioreersoq atorluarlugu (nul nutaaq sivisuumik atuuffeqartoq pingaarnertut atorneqarnera, "one fewer secret" these-mik kiffartuussineq); Ed25519 §15 PQ-mik nuutsitsinermut aqqummut kinguarsarneqarpoq.

Deep hash-imik håndrulleqartoq tassaavoq W5-imi højrisiko-mik, lavste-naturlig-katte-kode, taamaattumik gating-i tassaavoq isumaqatigiinniutigineqarsinnaanngitsoq (§16.15 Q8):

  1. Oqaatsit akornanni fixture tlog_v1.json (Rust + TS, §14.5-imi allassimasoq wrapper_v1.json pattern) tassaavoq deep-hash, DataItem bytes + id, bladhash, 5-blad root + auditvej, STH hash, ilanngunneqarnermut uppernarsaat, aammalu ataqatigiinnermik uppernarsaat — in aamma allagartaq aamma uppernarsaatitut suussutsit (verify-mik suussuseq pingaaruteqarpoq, tassami §16.6-imi lokal tx → tx_id-mik misissuineq hash-imik itisuumik standalone-mik uppernarsaasiinermut tamanut ikkussisarpoq, allattoq kisiat pinnagu).
  2. Ataasiaannarluni interop-imik angalaneq najoqqutassiamik ANS-104-mik bundler aqqutigalugu, atuineq soorlu statisk testdata-t kisimik — npm-imik ingerlatsinermi apeqqutaasumik (Web-Crypto-allaat / scriptit-installertinneqanngitsutut inissisimaneq inissisimavoq).
  3. Deep-hash + RSA-PSS-ip aqqutaa round-trip-imik aqqusaartariaqarpoq assinga crypto.subtle primitivit produktion atortarpai, taamaattumik in-house-koderi byte-mik naleqqussaavoq.
  4. Ingerlaavartumik post-bundle-mik akuersissummik nakkutilliisoq uppernarsarpaa ataaseq anker / fallback DataItem-ip Arweave-p akuerineqarnera ilumut angusaqarfigaa, alarmik + strømforsyning-imik — tassami hash-ip itisuup aamma Arweave-mik atuisinnaannginnermik fallback-imik queue-mik kiffartuussisarmat, taamaattumik nipimik regression-ip queue-q taanna netværk-imik tunuarsimaarfiusunik atortunik immersinnaavaa, eqqortumik exi-p unitsinneqarnerata nalaani.

16.9 Ilaatinneqarnermut aammalu ataqatigiissaarnermut uppernarsaatinik

Taakku marluk tassaapput RFC 9162, SHA3-256, CBOR-itut kanonimik atuisoq.

IlaatinneqarneqUppernarsaat — . GET /api/v1/qub/:tx_id/proof: ver:u8, leaf:bstr (eqqortumik blad CBOR — uppernarsaasiisoq naatsorsuivoq leaf_hash nammineq aamma hash-imik tunniunneqarsimasumik tatiginninngilaq), 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 }.

KonsekvensUppernarsaat — . 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. Ataatsimik erseqqissumik pingaarnertut allattorsimaffik, testvektorimik pinneqarsimasoq.

Namminersorluni uppernarsaaneq (qub-server-eqanngilaq, §11-imi annertusarneqarpoq):

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

Uppernarsaatitut toqqorsivik koordinat-keyed-iussaaq (ajornartorsiutaavoq — §16.15 Q7, blokeringsfortreyt). Cold-leaf-imik uppernarsaatitut pilersitsineq eqqortuunermut neutraliuvoq taamaallaat R2-mi kukkunersiuinermut atortussaq tassaavoq a ataqqinnittumik Merkle-knude-mik pisiniarfik absolut trækoordinatimik atorlugu (level, index) — per- .batch node-delta-t. Koordinat-keyed-imik pisiniarfimmik, sumiluunniit (leaf i, size N) audit vej tassaavoq sæt O(log N) toqqaannartumik R2 GETs atorlugu batch-ip killeqarfii akimorlugit rekomputering-eqanngilaq; batch-keyed-imik pisiniarfimmik taamaanngilaq, tassalu pisiniarfimmik-layout-imik gap-imik resolution-ip matuma. Pilutat timii aammattaaq imaqarniliamik adresserneqarsinnaapput seq. W5-mik misissuinermi vektorip uppernarsartariaqarpaa a genesis-era-mi nillertumik blad-imik annertuumik kingusinnerusukkut root-imik R2 + Arweave-mik kisimi atorlugu LogDO-mik toqqorsivik atorlugu, taamaattumik §16.13-imi eqqissisimatitsinermut isumannaallisaanermut piumasaqaat uppernarsarneqanngilaq. The... O(log N) sekvensi R2 GETs ilaapput taamaallaat asynkron-imik uppernarsaatinik kingullermik — qaqugukkulluunniit seal-imik kissartumik vej-imi (§16.10) imaluunniit per-tikk-imik cron-imik.

16.10 R2-Siullermik Ack-imik Inniminniineq

Atortuulersinneqartoq POST /api/v1/upload sekvensi tassaavoq:

  1. Front-halvportit (auth, uppernarsaaneq, idempotens-imik shard-tast) — allanngortinneqanngilaq.
  2. Arweave-mik nuussineq eqqortoq ataasiakkaaq pilersiguk, taggileruk allallugulu. Tamanna aallaaveqarpoq tx_id lokalt, naak transaktioninik pilersitsineq gateway-imiit pissarsiaq/anker metadata-nik pissarsisinnaagaluartoq. Piareersarnermi kukkuneqarneq suli tunniussisoqannginnerani qinnuteqaat kukkuneqarpoq.
  3. Synkron-imik artefakti toqqarneqarsimasoq allaguk uunga qub-cache/<tx_id> aammalu stabilimik pilersitsineq-ingerlatsineq/outbox-imik allattorsimaffiit persisterlugit. Tamakku tassaapput durability aamma retry floor; kukkunerit isumaqatigiissuteqarneq sioqqullugu utertitsineq 503.
  4. Qanga LOG_DO aaqqissuunneqarpoq, synkron-imik misileraaneq LogDO.append(leaf). Allattoq ataaseq suliassaqarpoq seq, isertitsivik annertusarpaa, aammalu killeqarfik nutarterlugu. Append RPC-p taamaallaat taamaaliortarpoq; batch close alarmimi aqqusinermiit ingerlavoq. Ullumikkut append transport/applikation-imik ajornartorsiuteqarpoq kukku-soft: akissuteqaat suli iluatsissinnaavoq log_seq, receipt, imaluunniit anchor_status. Atortuulersitsinermut oqaaseqaateqaraluartoq, ullumikkut automatiskimik kingusinnerusukkut log-imik nakkutilliisoqanngilaq.
  5. Tunniussineq utertiguk. Ilanngullugu { log_seq, anchor_status: "pending", receipt } aatsaat append-ip tuple-q tamakkerlugu iluatsittoq utertippagu. receipt.sig_b64url kvitterimik allaffimmioq atorneqarsinnaanngippat imaqanngilaq; klientit taanna pingaarnertut allaffigineqarsimasoq imaluunniit uppernarsarneqarsinnaanngitsoq taasinnaanngilaat. Tuple-p peqannginnera isumaqarpoq piujuartumik saqqummersitsineq kisiat, transparency-log-imik akuersineq pinnagu.
  6. Suliassaq kinguartinneqartoq ataaseq atoruk nuussineq eqqortoq allaffigineqarsimasoq allattorlugu. Angusaqarluarneq outbox-imik peersitsivoq; kukkuneq taanna killilersugaasumik drenage cron-imut qimattarpaa aammalu akuerineqarsimasoq allanngortissinnaanngilaa tx_id. Aammattaaq piffissap ilaani metadata-t aamma pitsaanerpaamik sidecar-it allat kinguarsarneqartarput.

Latency-mik killeqarfik. Piumasaqaatip aqqutaani ilaapput front-halv oqartussaassuseq/kvote-mik suliaqarneq, transaktion-imik piareersarneq/allaffissaq, R2-mik allagartat piujuartitsisut, aamma (konfigurereqarpat) the LogDO pileritsappoq. < 300 ms sanaartornermi nalilersuinermi ingerlatsinermi anguniagassatut saqqummerpoq, protokollimik qulakkeerisuunngitsutut; ullumikkut transaktion-piareersarnermi trin gateway-mik metadata-mik piumasaqarsinnaavoq. Latency-alarmit aamma launch gates-it tassaapput ingerlatsinermi aqutsineq, uppernarsaatitut uppernarsaatitut pissarsiarineqarsinnaanngitsoq.

16.11 Trust Model — eqqortumik piumasaqaat, bladtype-mik annertussusilik

Uunga kind=0x01 (uppernarsarneqartoq): "Taanna imarisaq — timimik naleqqussaaneq body_hash, tunniunneqartoq qub_id — qub-ip append-only-mik log-ianut inissisimaffimmiittumut tunniussisimavoq seq aamma kingusinnerpaamik Arweave blok-ip nalaani pivoq T; taanna kryptografimik atuarneqarsinnaanngilaq drand rundep tungaanut R = unlock_round(unlock_at)." Tamanna tamakkerlugu {tlock round binding + Merkle inclusion + anchored root} marloriarluni.

Uunga kind=0x02 (uppernarsarneqarpoq, atorneqartoq): "Ciphertekst opaque imaqarniliamik-adresseqartoq chash, piumasaqarluni qub_id aamma unlock_at, inissisimaffimmi append-only-mik log-imut tunniussisimavoq seq aamma kingusinnerpaamik Arweave blok-ip nalaani pivoq T." Runde aamma timip illuatungaani §11-imi atuuttumi nioqqutigineqarput .qub-bundle uppernarsaaneq (qub_core::unlock), naamik log-imik; qanoq log-ip ilannguppaa bare per-qub-imik suliaqarnermi tassaavoq tamper-evident-imik tillinniarneq, uppernarsaatissaqanngitsoq qulaani-grænse-mik pisussaaffiliineq, aammalu eqimattanut akiuiniarneq.

Piumasaqaatit marluk ilaatinngilaat, per §11: atuakkiorneq peqanngitsumik sig_alg ≥ 0x01, siunertaq, aammalu allamik anker-granularitetimik piffissaq. Aammalu piumasaqaatit arlaannaalluunniit tunngatinneqarsinnaanngilaq received_at.

Piumasaqaatit qaffasissusaat (bindende lanseringsforslag — aaqqinneqarpoq §16.15 Q1). Assettereqarsimasumut (kind=0x02) blad, scoped krav qulaani tassaavoq qilaaq qanoq nioqqutissaq, nittarsaassineq, isumaqatigiissutit imaluunniit uppernarsaatitut pinnguaatit oqaatigisinnaanerat pillugu. Arlaannaalluunniit pinnguaatip oqaatigisinnaanngilaa imaluunniit isumaqarsinnaanngilaq log-ip byte-blind-imik upload-ip imarisaanik imaluunniit unlock-runde-mik uppernarsaateqartoq — log-ip uppernarsarpaa ordning + opaque ciphertekst-ip uppernarsaatissaqanngitsup qulaani-grænse-mik imminut pisussanngortitsinermik piffissaq. Imarisassaq aamma runde uppernarsaat §11-imi atuuttumiit kisimik aallaaveqarput .qub-bundle-mik uppernarsaaneq, taanna log-imik nammineerluni. Saqqummersitsineq append/receipt-imik iluatsittumik peqanngitsoq log-claim-imik arlaannaatigulluunniit peqanngilaq.

16.12 Versionerneq aamma W3-mik ataqatigiissaarineq

Peqarpoq Naamik SealedQub ledningsbump aamma taamaattumik protokol-version-imik bump-eqanngilaq (§12.2): log tassaavoq sidecar, taanna field-inik aamma byte-nik pioreersunik pisussaaffilersuivoq, taamaattumik §12.3-mi protokol-version-ip oqaluttuarisaaneranut ilanngunneqanngilaq. W3-p toqqarneqarsinnaavoq drand_chain_version atorneqanngilaq aammalu suli kisimi toqqagassaalluni SealedQub allaffissaq. Loggip taarsiullugu nammineq namminersorluni versionimik inissaqartitsivoq — . LOG_VERSION_1, ANCHOR_FORMAT_1, InclusionProof.ver — §12.5-imi wrapper-version-imik nammineersinnaaneq ersersitsivoq (wrapper-ip protokol-version-imit nammineersinnaasumik version byte-mik tigummivaa, aammalu log-versionit immikkoortitsineq taanna malippaat).

Uppernarsaatinik nassiussineq nalinginnaasutut tiguneqartarpoq, ride-along-imik toqqarneqarsinnaasumik. Uppernarsaat seal-time-imi pisinnaanngilaq (anker suli allanneqanngilaq), taamaattumik seal-time-mi .qub bundle uppernarsaatissaqanngitsumik inissisimavoq. W7-ip uppernarsaataa fetch-ertarpaa GET …/proof ataasiaannaq, imaluunniit tamakkiisumik offline-imi uppernarsaat tamanut ammasumik sanaartortarpaa AnchorBundle aqqutigalugu Arweave-mik apeqquteqaat ulloq Log-Id. The... .qub bundli (W7) reservet an nammineq toqqagassaq inclusion_proof ilaasortaq — absent på seal, populeret post-anker-re-export-imik koldarkivering-imut — malillugu "valgfrit, omitt by standard, additiv" W3-p malittarisassaatut drand_chain_version.

16.13 Tigummigallarneq

LogDO-p ammasumik illuatungaanut, R2-mik uppernarsaatinik atuinermut, anker-imik atortulersuutinut aammalu bundler-ip fallback-queue-anut atortulersuutit ilanngunneqarput docs/DATA-RETENTION.md. Periarfissaq: log-ip per-entry-mik kissartumik toqqorsivia (LogDO) tassaavoq post-anker-imik atorneqarsinnaasoq; taassuma kukkunersiuinermut atortussaa — koordinat-imik atortoq (level, index) Merkle-node pisiniarfik + taanna seq-adressede bladkropper (§16.9) + Arweave-ankerit — tassaavoq piujuartumik. DO-mit qimmit qimuttut pissarsiarineqarnerat uppernarsaat tunniunneqartoq atuunneq ajorpaa, tassami uppernarsaat taanna permanent R2-node-store-mut aamma Arweave-ankerimut akerliuvoq, DO-mut pinnani (aamma §16.9 wiped-DO test vector-ip tamanna uppernarsarpaa).

16.14 Misilitsinnermi vektorit

W5-ip oqaatsit akornanni fixture nassiussavaa tlog_v1.json (§16.8) aamma suliarineqarsimasut vektorit: a kind=0x01 aamma a kind=0x02 blad → leaf_hash; 5-blad-imik kumulatiiviusumik root; ataaseq ilanngunneqarnermut uppernarsaat; ataaseq ataqatigiinnermut uppernarsaat; ataaseq AnchorBundle; aamma ataaseq DataItem id. Taakku §14.5-imi avatangiisinut tunngasut vektorit saniatigut najugaqarput aammalu Rust-imit (qub-core) aamma TypeScript (Sulisoq) atuutsinneqarnerat.

16.15 Naliliinermi aalajangernerit (W5 — aalajangerneqarpoq)

W5-imik avatangiisinut misissuineq (adversarial design pass + piginnittumik allagartaq) naammassineqarpoq. Aalajangiinerit ataasiakkaat ataaniittut aalajangersarneqarput aammalu qulaani allaaserisami §16-imi ersersinneqarput; the bindende launch-imik killilersuinerit naggataani oqaatigineqartarput. Taakku ataani atuutilersitsineq ingerlasinnaavoq.

  1. Aqqut-standard (kind=0x02) blad unneqqarissuseq — ALLANGINNEQARPOQ. Marlunnik pilutalik split soorlu aalajangersarneqarsimasoq nassiuk: kind=0x02 aamma suliarisarpaa body_hash aamma taannaanngitsoq drand_round. Naamik *_body_hash felt byte-blind-imik aqqusinermi (taanna tassaassaaq integrator-inut atuarneqarsinnaanerpaamik eqqunngitsumik "verificereqarsimasoq" signali aammalu §11-imi bundlimit neqeroorutigineqareersoq). Do naamik piumasaqarpoq server-seal-imik qubs-inik log-imik uppernarsaatinik (taanna Sulisoq aqqutigalugu plaintext-imik pinngitsaalisaassaaq aammalu krypto-shredding-moat-imik aserugaqarsinnaavoq). Nammineq nassuiaasoq kortslutning sunaluunniit ilaavoq .qub bundli / uppernarsaatinik allagartaq uppernarsaatitut-rekomputeret felt-itut, bladfelt-iunngitsoq. Piginnittup uppernarsarsimasaa piumasaqaatit: §16.11.
  2. Eqqissisimatitsineq / atornerluineq akisussaaffik — DESIGN ALLERNEQARPOQ, PISSARSIARINEQ NAAMMASSINNEQARPOQ. Niuernermi piumasaqaataavoq seal-receipt-imik atortoq pinneqartariaqartoq LogProfile aammalu kryds-allaffigineqartoq anchor_owner, kiisalu monitorimik periuseq, prev-chain walk, aamma marlunnik nammineq saqqummersitsisartunik niaqorlunneq. Profili aamma atortussiassanik atortulersuutit suli inissisimapput/optional-iupput soorlu §16.6-imi erseqqissarneqartoq, taamaattumillu nukittunerusumik detectable + receipted-imik piumasaqaat atuuttussaanngilaq, taakku portit matuneqarnissaasa tungaanut. Taanna namminersorluni takunnittutut niuerneqartariaqanngilaq. Ilumoortumik tredjepartsvidne §15-imi aqutsinermik bump-imut kinguarsarneqarpoq.
  3. Pinneqartoq anker-piginnittoq upperinninnermik root + rotation — AALLAQQARNEQARPOQ. Adoptereqarneq LogProfile pin (§16,6); uppernarsaasiisoq misissuisarpoq anchor_tx.owner == anchor_owner aamma tx-data → tx_id-mik binding-imik najukkami uppernarsaasarpoq. Rotationsstyring tassaavoq §15 sanaartornissamut annertusaaneq (§15.3 trigger ilanngunneqarpoq), atuineq ajortoq; pilersaarusiorneqarsimasut tværsnittet, kompromis-driven rotationit §15-imut bumpimut uteqqipput gaffelcheck-imik killilersuinermik ajoqusernermik.
  4. Privat-qub-imik bladblindning — ALLAASERSIORNEQARPOQ. Privat qubs-it pillugit blinding-ertarneq (ref = SHA3-256(qub_id ‖ log_blind_secret)), aapasoq qub_id qubs-inut tamanut ammasunut (§16.2.1-imi), . chash soorlu immikkoortortaqarfik. log_blind_secret tassaavoq korrelation/Sybil-grade-mik isertugaq, roter-forward-imik kisimi (§16.2.1).
  5. received_at — Aalajangiiffigineqarpoq. Pilutamiitiguk, imminut pisussanngortilluni kisianni ersarissumik uppernarsaatissaqanngitsoq; never surfaced uppernarsaatitut imaluunniit isumaqatigiinnginnermik uppernarsaatitut pinnguaatit arlaanniluunniit. Skærmimik sanilliullugu misissuineq sunaluunniit Arweave-p blok-ip piffissaanut naleqqiullugu T, operatørimit aqunneqartoq pinnagu anchored_at (§ 16.6).
  6. Tiered provable-timing — DESIGN-RESOLUTIO, IKKE AKTUELLE ROUTING. Design-ip nalilersorneqartup anker-blok-imik piffissaq batched-tier-imut aammalu exact-hour-imik uppernarsaat T3-mut akiligassamut tunniuppaa, siullermut SLA-mik kisitsisit atorlugit. Ullumikkut aqqutit aningaasarsiornikkut immikkoortitsineq taanna ledningilersimanngilaat: saqqummersitsinermut akuerineqarsimasumut ataasiakkaamut pilersaarusiortarpaat, aammalu log-imik kattussuussineq suli piumasaqaateqarpoq soorlu §16.1/§16.10-mi allassimasoq. Nioqqutissap assiga atuutsinneqarnera nassuiartariaqarpaa, siunissami tier split una pinnagu.
  7. Sulisut pillugit kumulativ træ — ALLANGINNEQARPOQ. Ataatsimik kumulatiiviusumik RFC 9162-imik orpik + frontier-cache-imik ataatsimik allattorsimaffimmik LogDO (komfortabel hovedrum vs ~1k skrifter/sek DO plafond; Merkle-of-shard-roots-imik sharding-imik kinguarsaaneq qaninnerpaaffissaanut). Koordinat-imik atortoq (level, index) R2 node-store + wiped-DO-mik nillertumik blad-testvektor atuutilersinneqarput (§16.9). < 300 ms suli sanaartornermut/ingerlatsinermut anguniagaavoq, protokollimi neriorsuut pinnani (§16.10).
  8. ANS-104 allaffissornikkut skema + deep-hash — AALLAQQARNEQARPOQ. RSA-PSS (sig type 1, immikkut ittumik anker-pulje JWK-mik atuineq); Ed25519 §15 PQ-mut aqqut kinguarsarneqarpoq. SHA-384-imik assanit rulleqartoq deep hash-imik marlunnik suussutsimik cross-impl-imik atortumik gateqarpoq, statisk-allaat najoqqutassiamik-bundler-imik interop-mik misissuineq, avitseqatigiissutigineqartoq-crypto.subtle round-trip, aammalu Arweave-mik akuersissummik misissuineq kingorna (§16.8).

Bindende launch-imik killissarititat (atuutsilersitsineq + nioqqutissaq/inatsisitigut nalilersuineq):


17. Uppernarsaanermut Bundle Nuunneqarsinnaasoq (.qub)

Killiffik. Immikkoortoq una implementerneqareerpoq (W7 / UP-C2): qub_core::export bundle-mik pilersitsisarpoq parse-rsinnaallunilu, tools/qub-verify-lu tassaavoq CLI tamanut ammasoq nammineerlunilu ingerlasoq offline-imi uppernarsaasartoq. §11 aamma §16.9 .qub bundle-imut standalone verifier-ip unit-itut atorsinnaasaanut innersuussereerput; immikkoortup matuma byte-i walkthrough-ilu aalajangersarpai. Additive-iinnaq—§11 input pioreersut bundle-mut poortorpai on-chain wire format allanngortinnagu.

17.1 Siunertaq

§11 aalajangerpaa inuk pingajuat qub-ip cryptographic artifact-ia qub suleqatiginagu uppernarsarsinnaagaa. .qub bundle-ip verification taanna nuunneqarsinnaanngortillugulu offline-inngortippaa: sealed CBOR drand round signature-ilu unlock-ertitsisoq artifact namminersortoq ataasiinnarmut poortorpai, tigusisup content integrity, round binding atsiornerillu authorship-imut tunngasut network call ataasiinnarmilluunniit peqarnani uppernarsarsinnaaqqullugit (storage fetch-eqanngilaq, live drand request-eqanngilaq, qub API-eqanngilaq). Bundle kisimi ciphertext qaqugu pilersinneqarsimanersoq uppernarsaatiginngilaa; storage transaction nammineerluni uppernarsarneqartoq imaluunniit log proof anchor-ilerneqarsimasoq existence-time claim immikkut taanna pilersippaa (§11, §17.5).

17.2 Bundle Format

QubBundle tassaavoq §3.1 profile ataani canonical CBOR hand-written (definite length, tag-eqanngilaq, float-eqanngilaq, integer shortest-form, text NFC, optional field absent-iuppat peerneqartoq, key encoded-byte length ascending taava bytewise order). Key-it 15-character pingasut d < i < s-itut tulleriipput. .qub file raw tassaavoq byte-it taakku exakt; URL imaluunniit copy-paste transport-imut byte-it taakku base64url(no-pad)-imik encode-rneqarput.

Key Enc. len Type Presence Meaning
version 8 u8 required Bundle format version (0x01).
sealed_at 10 i64 optional Seal time pilersitsisumit assert-erneqartoq (Unix seconds); nammineq nassuiaasoq, uppernarsaatitut atorneqanngitsoq.
drand_round 12 u64 required Round qub-imut pituttorsimasoq. Sealed qub embedded-iusumit projection.
arweave_tx_id 14 tstr required Transaction id sealed byte-it toqqorneqarfiat (provenance pointer).
drand_chain_id 15 tstr required drand chain (hex). Sealed qub embedded-iusumit projection.
drand_signature 16 bstr required drand_round-imut beacon signature—ciphertext unlock-ertitsisoq.
inclusion_proof 16 bstr optional §16 transparency-log Merkle inclusion proof (§17.5).
sealed_qub_cbor 16 bstr required Inner SealedQubCbor byte-it (§13 unwrap kingorna), tassa §11 verification input.

drand_round aamma drand_chain_id tassaapput sealed_qub_cbor-imit convenience projection-it, tooling inner CBOR parse-rnagu atuarsinnaaqqullugu. Construction-imi derive-rneqarput decode-milu parsed sealed qub-imut nutaamik cross-check-rneqarlutik; top-level field payload-imut naapertuutinngitsoq itigartinneqassaaq. Encoder discipline wire format-ip sinneranut assinguvoq: drand_signature imaluunniit arweave_tx_id empty itigartillugu variable-length field tamaasa bound-erlugit.

17.3 Drand Signature Embedded-iusup Uppernarsagaa

Bundle drand signature nassarpaa verifier-ip aaniartariaqanngisaanik. Timelock decryption (drand chain qulaani tlock, §8) round pituttorsimasumut beacon signature eqqortoq kisiat atorlugu iluatsissinnaavoq—chain-ip round qaangiukkaangat aatsaat value taanna saqqummersittarpaa, chain public key-atalu ataani BLS signature valid-iulluni. Signature salloqittaataasoq imaluunniit kukkusoq BLS verification-imi imaluunniit IBE/AEAD decryption-imi ajutoorpoq. Bundle decryption-ia taamaattumik uppernarsarpaa: ciphertext round R-imut pituttorsimavoq, round R-ilu qaangiussimavoq. Verifier-ip chain pin-erpaa (DrandTimelockProvider::quicknet()) §11 round-binding check-ilu atorlugu, bundle round ciphertext-ip pituttorsimanngisaanik claim-eqarsinnaanani.

Tamanna release-condition proof-iuvoq, creation timestamp-iunani. Round R qaangiutereerpat kinaluunniit R-imut ciphertext nutaaq pilersissinnaavaa signature-ialu tamanut ammasoq ilanngullugu. Taamaattumik bundle kisimi ciphertext imaluunniit content R sioqqullugu, unlock_at sioqqullugu event-iluunniit sioqqullugu piusimaneranut uppernarsaatitut oqaatigineqassanngilaq.

17.4 Offline Uppernarsaanermut Walkthrough

qub-verify <file.qub> standard §11 procedure bundle-miit tamakkerlugu ingerlatissavaa, qub_core::unlock::unlock pinned DrandTimelockProvider-imik ingerlatillugu:

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 0 (verified), 1 (verification failed—suli locked, body-hash mismatch, round/chain binding broken, imaluunniit signature verify-rneqanngitsoq), imaluunniit 2 (usage / malformed bundle) exit-erpoq. --json report automation-imut verdict-it taakku nassarpai. Bundle self-contained-iummat verifier crate (qub-core) aamma CLI (qub-verify) tassaapput software inuk pingajuat pisariaqartitai; tamarmik public-iupput protocol-illu verification path pioreersoq atoqqillugu—crypto immikkut nutaamik peqanngilaq.

17.5 Transparency Log-imut Attuumassutaa

inclusion_proof tassaavoq §16 Merkle inclusion proof-imut slot optional. Bundle-only verification (§17.4) integrity, round binding / round elapsed aamma authorship optional pillugit naammappoq, nammineerlunili timestamp-ilerneqarsimasumik existence claim-eqanngilaq. inclusion_proof imaqartoq fully anchor-verified §16.11-mi leaf-kind-specific commitment aamma upper-bound time ilannguppai bundle format version allanngortinnagu. Proof absent isumaqarpoq “proof ilanngunneqanngilaq” kisiat—“invalid” pinnagu “not anchored”-imilluunniit pisariaqanngitsumik isumaqarnani.

Reference implementation-imi slot maanna typed-iuvoq: qub_core::export::QubBundle::inclusion_proof_typed() Option<InclusionProof> utertippaa §16.9 structure tamakkiisoq (leaf, audit path, anchored root, AnchorRef) CBOR field opaque taanna aqqutigalugu—bundle-format version bump-eqanngilaq. Standalone qub-verify CLI-p --anchor leg-ia atorlugu ingerlatippaa, anchor wallet provisionerneqarnissaata tungaanut (§16, Status) proof placeholder-owner-imik imalik fully anchored-verified pinnagu inclusion-only-tut nalunaarutigalugu.