qub-imut Protokollimik allatigineqartoq

qub tassaavoq protokoli kryptografiamut piffeqartumik isumaqatigiissutinut: oqaaseqatigiit siunissami ulluni matusernissaanut atugassiaq, ullorlu eqquni, suna oqaatigineqarsimanersoq qaqugulu sukkulluunniit uppernarsaatissiivoq.

Pingasut akuusaartoq atorlugit suliarineqarpoq. drand tassaavoq sianigissummik agguarsimasumik tappiusartoq — saqqummersitsineq ullua peqqissaarniartumi pissutsinit, naapertorlugu allamiup aalajangerneqartumit ajornanngitsumit, atortuunneqarpoq. Naassaanngitsumut tamanut toqqorsivik tassaavoq toqqorsivik tamanut paasissutissaqartitsiviusoq allanngortikkuminaatsoq — qub matusereeruni allanngortinneqartussaanngilaq peerneqartussaanngilluniluunniit. ML-DSA-65 tassaavoq atsiorneq kvantum-kingorna allakkanut — qub tamarmik isumassuissamut paarinut atassuteqartillugu, taakkuami isertuussap nammineq atortuminit qimagujuissanngilaq.

Akuusaartut taakku ataatsimoorlutik oqaatigeqqissaarpaat piffimmik-matuserneqarsimasoq, akornutaanngitsumik, attaveqartoqarluniluunniit — uppernarsaat naluneraneq silarsuup siusinnerusukkut ilanngullugu suliareqqinnissaminut sapinngassusianut akuersaarami atorneqarluartoq.

Allagaq sinnera tassaavoq normativeq atorluarneqarsinnaajumallugu paatsoorneqarsinnaanngitsutut illernarsineq.


qub Protokolimik Erseqqissaaneq

Naasoq Naliliineq
Versioni 1.0 (protokoli-versioni 0x01, ilai pusinneqartut versionii 0x01)
Ulloq 2026-05-01
Killiffik Drafti
Misissoreerneqartoq 2026-05-01

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],        // Sianigissummik, najuminni pilersinneqartumik
    created_at:     i64,             // Unix sekundi UTC
    unlock_at:      Option<i64>,     // Unix sekundi UTC; None pilersinneqartillugu
    visibility:     u8,              // 0x01 = tamanut (MVP-mi naliliineq kisiat)
    content_type:   u8,              // 0x01 = allatat (MVP-mi naliliineq kisiat)
    plaintext:      Vec<u8>,         // UTF-8 qub-ip timaa
    sender_label:   Option<String>,  // Saqqummiussinermut atinik takutitsineq; uppernarsaaneqartumik atorneqanngilaq
    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,              // Protokolip versionia pingaarnerpaaq (0x01 v1-mut)
    qub_id:              [u8; 32],        // Aalajangiussaq (qiviarit §4.1)
    content_type:        u8,              // Imai sumut atatillugu (qiviarit §6)
    created_at:          i64,             // Unix sekundi UTC
    unlock_at:           i64,             // Unix sekundi UTC
    outcome_at:          Option<i64>,     // V1.1 — qaqugu pissutsit eqqortumik aalajangiisut (verdict-uplift-plan §3.1)
    sender_label:        Option<String>,  // Saqqummiussamut; uppernarsaaneqarnatik MVP-mi
    reply_to:            Option<[u8; 32]>,// Angajulliit qub_id-aat akissummut atatillugu; qub_id preimage-imi peqanngilaq; atsiorneqanngilaq (qiviarit §9.3)
    body:                Vec<u8>,         // Imai nassiussassaq (UTF-8 allakkanut, CBOR isumaqatigiissummut)
    body_hash:           [u8; 32],        // SHA3-256(body) (qiviarit §4.2)
    sig_alg:             u8,              // Atsiorneqarnerup algoritmia (qiviarit §9.2)
    author_signature:    Option<Vec<u8>>, // Inissinneqartoq sig_alg != 0x00 imminuna
    author_pubkey:       Option<Vec<u8>>, // Inissinneqartoq sig_alg != 0x00 imminuna
    cosigner_pubkey:     Option<Vec<u8>>, // Inissinneqartoq atsiorqatigiinneq pact bilateral-mut
    cosigner_signature:  Option<Vec<u8>>, // Inissinneqartoq atsiorqatigiinneq pact bilateral-mut
}

Tunngavik (qub allataq atsiorneqartumik): version = 0x01, content_type = 0x01, sig_alg = 0x00, Option-iliarineqartut tamarmik peqanngitsut.

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)

CBOR-imi aaqqissuussamiut atorlugit nalunaaqutigineqarpoq (§3). Naassaanngitsumut toqqorsivimmut uploadineqartoq. Una tassaavoq chain-imi pisariusoq.

SealedQub {
    version:           u8,              // Protokolip versionia pingaarnerpaaq (0x01 v1-mut)
    qub_id:            [u8; 32],        // QubEnvelope.qub_id assigaa
    visibility:        u8,              // 0x01 = tamanut; v1 isiginnaartut allat nalingisut itigartippaat
    unlock_at:         i64,             // Unix sekundi UTC
    outcome_at:        Option<i64>,     // V1.1 — verdict-watch CTA-mi saqqummiunneqartoq
                                        //   saqqummersitsineq sioqqullugu; QubEnvelope.outcome_at assingusoq;
                                        //   §4.1 preimage atorlugu qub_id-mut atassuteqartoq.
    drand_chain_id:    String,          // drand piorsaaviup hash-ia (hex-imi oqaaseq)
    drand_round:       u64,             // drand-imi anguinneq target
    tlock_ciphertext:  Vec<u8>,         // tlock-ip allakkat isertut QubEnvelope CBOR byteinik
    recipient_pubkey:  Option<[u8; 32]>,// Sernigineqartoq; CBOR aaqqissuussamiummi akuersaagaq
                                        //   nalingiserneqassanani v1 reference isiginnaartumi
    title:             Option<String>,  // Plaintext-imi qulequtaq isiginnaartumi saqqummiunneqarsinnaasoq
                                        //   nikingaalaarpalukkamik saqqummersitsineq sioqqullugu. qub_id-imut
                                        //   atassuteqartoq title_hash atorlugu (§4.1). 1..=100 NFC-imi naasoq
                                        //   sissimasut, nakuusernissamut allatat peqanngitsoq.
}

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>,       // V1.1 — QubEnvelope.outcome_at / SealedQub.outcome_at-mit ingerlatissaq; saqqummersitsivimmi naliliinermut utaqqinerup blokkiata ingerlanninneranut atorpoq (verdict-uplift-plan §5.1)
    drand_chain_id:      String,
    drand_round:         u64,
    sender_label:        Option<String>,
    title:               Option<String>,    // SealedQub.title-mit ingerlatissaq
    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 byte allaaserineqartut)
"qub_id"              (7 byte allaaserineqartut)
"sig_alg"             (8 byte allaaserineqartut)
"version"             (8 byte allaaserineqartut)
"reply_to"            (9 byte allaaserineqartut)   ← peqartillugu kisiat (akissut sineriaqartut)
"body_hash"           (10 byte allaaserineqartut)
"unlock_at"           (10 byte allaaserineqartut)
"created_at"          (11 byte allaaserineqartut)
"outcome_at"          (11 byte allaaserineqartut)  ← peqartillugu kisiat (V1.1 verdict atortussaq)
"content_type"        (13 byte allaaserineqartut)
"sender_label"        (13 byte allaaserineqartut)  ← peqartillugu kisiat
"author_pubkey"       (14 byte allaaserineqartut)  ← peqartillugu kisiat
"cosigner_pubkey"     (16 byte allaaserineqartut)  ← peqartillugu kisiat (isumaqatigiissummi atsiorqatigiinneq)
"author_signature"    (17 byte allaaserineqartut)  ← peqartillugu kisiat
"cosigner_signature"  (19 byte allaaserineqartut)  ← peqartillugu kisiat (isumaqatigiissummi atsiorqatigiinneq)

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 byte allaaserineqartut)   ← peqartillugu kisiat
"qub_id"            (7 byte allaaserineqartut)
"version"           (8 byte allaaserineqartut)
"unlock_at"         (10 byte allaaserineqartut)
"outcome_at"        (11 byte allaaserineqartut)  ← peqartillugu kisiat (V1.1 verdict atortussaq)
"visibility"        (11 byte allaaserineqartut)
"drand_round"       (12 byte allaaserineqartut)
"drand_chain_id"    (15 byte allaaserineqartut)
"recipient_pubkey"  (17 byte allaaserineqartut)  ← peqartillugu kisiat
"tlock_ciphertext"  (17 byte allaaserineqartut)

PactTerms (isumaqatigiissummi timaa, content_type 0x03):

"notes"         (6 byte allaaserineqartut)  ← peqartillugu kisiat
"terms"         (6 byte allaaserineqartut)
"title"         (6 byte allaaserineqartut)
"party_a"       (8 byte allaaserineqartut)
"party_b"       (8 byte allaaserineqartut)
"pact_version"  (13 byte allaaserineqartut)

PactTerm (sineriaq terms array-mi):

"key"    (4 byte allaaserineqartut)
"value"  (6 byte allaaserineqartut)

PartyIdentifier (party_a / party_b map):

"label"    (6 byte allaaserineqartut)
"contact"  (8 byte allaaserineqartut)  ← peqartillugu kisiat

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"    ||    // tunngaviusoq immikkoorut: ASCII byte [0x51 0x55 0x42 0x5F 0x49 0x44 0x5F 0x56 0x32] (9 byte) + 0x00 ilaateqaalu (1 byte) = 10 byte
    version        ||    // u8 (1 byte)
    content_type   ||    // u8 (1 byte)
    created_at         ||  // i64 big-endian (8 byte)
    unlock_at          ||  // i64 big-endian (8 byte)
    outcome_at_or_zero ||  // i64 big-endian (8 byte; 0 outcome_at peqanngippat)
    drand_round        ||  // u64 big-endian (8 byte)
    body_hash          ||  // [u8; 32] (32 byte)
    title_hash             // [u8; 32] (32 byte; peqanngippat-malugaq = [0u8; 32])
)
// Preimage tamarmiusoq: 108 byte → 32-byte saqqummiineq

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: V1.1 preimage 92 byte-mit 100 byte-mut takinerulersippaa outcome_at sapinginnermut peqartoq atassutsinermut ilaalersitassagaani. outcome_at peqanngippat byte nuller 8-tut allaaserineqartoq; protokolimi uppernarsaasut sumi tamani outcome_at <= 0 itigartittarpaat, taamaalimmat malugaq una naliliineq pissusilisorpat naapittatassanngilaq. Qiviarit §3.2 (wire format) aamma in-tree tasks/verdict-uplift-plan.md verdict atortussaq naasoq una akuersaasaa.

drand_round allaaserineqarnera: V1.2 preimage 100 byte-mit 108 byte-mut takinerulersippaa drand_round (drand-imi anguinneq target, §4.3) atassutsinermut ilaalersillugu, aamma tunngaviusoq immikkoorut QUB_ID_V2-mut qaffappaa. Tamanna piffimmik-matusernermut anguinneq qub-ip kinaassusianut atassutsivaa: gateway-it ciphertext anguinnermut allamut (assersuutigalugu qaangiukkamut) inisseqqissinnaanngilaa unlock_at takutinneqartumi isumaqartumut allamut. Matusinerup peernera (§8) saniatigut uppernarsarpaa tlock ciphertext suluani anguinneq pisup unlock_round(unlock_at)-imut naapittoq, taamaalimmat matusinerup ulloq takutinneqartoq uppernarsarluinnarpoq anguinneq matusinnermut piffimmut paasaqartoq.

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)   title peqarpat
title_hash = [0u8; 32]                         title peqanngippat

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 = ceil((unlock_at - chain_genesis_time) / chain_period_seconds)
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.

Ungasinnerusumi: (unlock_at - chain_genesis_time) chain_period_seconds-mut tukkiinnarpoq agguarneqarsinnaagunarmat, tassanitappoq anguinnertaa eqqortussaq — qub matusersutaasoq nipingarmat anguinnerup saqqummersitsiviani piffimmi.

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 CBOR-imi aaqqissuussamiut serialize_sealed_qub() Naassaanngitsumut toqqorsivimmut uploadineq, isiginnaartup aaqqissuussinera
QubEnvelopeCbor QubEnvelope-imi CBOR-imi aaqqissuussamiut serialize_qub_envelope() tlock isertinnermut input, tlock isertuussap qaffaaneranik output

5.1 Pilersinnerinut Malittarisassat

// Production-imi suliarineqartoq — CBOR serialiseringeqartumi kisiat:
let sealed = SealedQubCbor::from_encoded(cbor_bytes);

// Periartumik From<Vec<u8>>-imik suliarineqarsimanngilaq.
// Byte tamatigut wire format suunersuanut isumakuluuteqarunnaanngilatit.

// Raw byte-it tigussussallugit:
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 aaqqissuussamiunut/v1-mut
    title:         String,                // ≤ 200 byte, NFC
    terms:         Vec<PactTerm>,         // ≤ 20 sineriaq
    party_a:       PartyIdentifier,       // pilersitsisoq
    party_b:       PartyIdentifier,       // atsiorqatigiisoq
    notes:         Option<String>,        // ≤ 5,000 byte, NFC; peqanngitsumut peqanngitsoq
}

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

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 aaqqissuussamiunut/v1-mut
    outcome:         u8,                  // 1=Eqqortoq · 2=Ilaa · 3=Kukkussoq · 4=Misilerneqarsinnaanngitsoq
    reflection:      Option<String>,      // ≤ 2,000 byte NFC; "suna allanngorpa, suna ilikkarpiuk"
    evidence_url:    Option<String>,      // ≤ 2,048 byte; HTTPS-mi kisiat; peqanngippat key peqanngilaq
}

CBOR-imi aaqqissuussamiut key-itik tulleriiaa:

"outcome"          (8 byte allaaserineqartut)
"reflection"       (11 byte allaaserineqartut)  ← peqartillugu kisiat
"evidence_url"     (13 byte allaaserineqartut)  ← peqartillugu kisiat
"verdict_version"  (16 byte allaaserineqartut)

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. Atugaq plaintext aamma metadata ComposeQub-imi suliarivoq.
 2. Misissuilluni:
    a. body peqarpoq.
    b. body annertussusii ≤ content_type-mut aamma atugaq tier (qiviarit §6).
    c. unlock_at siunissamiipoq.
    d. unlock_at ≤ created_at + 10 ukiut.
    e. content_type ilisarnaajoq, akuersaartoq.
 3. Naatsorsuiniarit body_hash = SHA3-256(body).
 4. Inissinniarluni created_at = sapinginnermi Unix sekundi UTC.
 5. drand piorsaavik toqqaruk. Nakkutigilluku chain_genesis_time aamma chain_period_seconds, aamma
    naatsorsuiniarit drand_round = ceil((unlock_at - chain_genesis_time) / chain_period_seconds).
    (Maani, qub_id sioqqullugu, naatsorsorneqarpoq, drand_round qub_id preimage-imut
    atassutsivimmat — §4.1, V1.2.)
 6. Naatsorsuiniarit qub_id (qiviarit §4.1), drand_round 5-mit ilanngullugu.
 7. Pilersiniarluni QubEnvelope sumi tamani naasoqartumi.
 8. Nalunaarutigissallugu QubEnvelope canonical CBOR atorlugu → byte B.
    Misissorlugu: nalunaaqutigineqartoq tunisarneqarnera profile naapertortikkit (§3).
 9. Naatsorsuiniarit C = tlock_encrypt(B, drand_round, drand_chain_public_key).
10. Pilersiniarluni SealedQub tlock_ciphertext = C, qub_id, version,
    unlock_at, drand_chain_id, drand_round assertortillugit.
12. Nalunaarutigissallugu SealedQub canonical CBOR atorlugu → SealedQubCbor.
12a. Pilersikkit K = 32 sianigissummik byte (CSPRNG) aamma N = 12 sianigissummik byte (CSPRNG).
     Naatsorsuiniarit W = wrap_sealed_qub(SealedQubCbor, qub_id=qub_id, key=K, nonce=N)
     §13 naapertorlugu. Byte-it naassaanngitsumut toqqorsivimmut uploadineqartut tassaavoq OuterWrapper CBOR W,
     SealedQubCbor naliusaq imminuna ataaseq. K atortumini qimaatissaq URL-imi
     killip imaa 16 imminuna.
13. Saqqummiussiniarlugu matusinermi saqqummiussineq. Atugaq aalajangerpoq.
14. Misissuiniartoq upload akuerineqarsinnaanera qub upload atorfilersuuteqarfia atorlugu (bot-mut misissornermut, atorfeqartumut, kingunersuutinut killiit).
15. Aalakoorluku W (OuterWrapper byte) qub upload atorfilersuuteqarfimut; atorfilersuuteqarfik
    atsiorpaa aamma naassaanngitsumut toqqorsivimmut uploadineqarpoq. Atorfilersuuteqarfik byte-mut paasinanngitsoq iluani
    SealedQubCbor-mut aamma K-mik tigusisoqannginneranik.
16. arweave_tx_id atorfilersuuteqarfimit tigutigissavat. Tunniunnermut nittartagaq pilersiniarluni
    `<origin>/c/<arweave_tx_id>#<base64url(K)>` (imaluunniit `<origin>/s/<short_code>#<base64url(K)>`
    short code-imik inissinneqartillugu). Browser-it URL fragment server-imut nassiunneqarsinnaanngilat,
    K qub.social toqqorsivimmi gateway-imut tamannallu malugineqarsinnaanngitsoq.

Toqqorsivimmi tag-it (out-of-band). qub upload atorfilersuuteqarfia mikitsumik tigussaa toqqorsivimmi transaktionimik tag-it pusinneqarsimasumut nassiussassanut. Content-Type=application/octet-stream normativiusumik PISARIAQARPOQ atorneqartoq. Reference atorfilersuuteqarfik tigussaa pingasunik tag sapinginnermut piumassusiisartut pilersitsisoq saqqummiunneqassasoq toqqarpat: Intent (allowlist atorlugu misissorneqartoq compose intent — assersuutigalugu, quote, reply, commitment), Author (pilersitsisup §9.3 pubkey fingerprint 64-byte mikilersitamut hex), aamma Parent-Tx-Id (angajulliup qub-ip toqqorsivimmi transaktioniata ID akissummut sineriaqartut, 43-byte base64url).

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. Pusinneqartumi puua (§13) sernigaa timaata ciphertext sineriallaarneq — nakkutiliusumik qub-tut suluit upload taakkua paasinaarsinnaajumallugu bulk-mik isertinaarlugit drand-imi anguinnerat saqqummersikkaangat.

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. Isiginnaartoq tunniunneqarnermut nittartagaq ammaapaa. arweave_tx_id-mik aqqut-iliarit
    AAMMA K = base64url_decode(fragment) URL fragmentimit. Fragmenti peqanngippat
    aqqutilluunniit ajortillugu → saqqummiussissava "URL-i matua isertorneqarnermut
    isumassuissaminik peqanngilaq" aamma unitsillugit; isiginnaartumut PISARIAQARPOQ
    toqqorsivimmi gateway-imut attavigeqqaarani K-mik peqanngitsumi, kingumut pusinneqartumi
    byte isertorneqarsinnaanngitsumi pissarsiarniarluni siunertaqanngilaq atortumullu
    attaveqarnissamik tassanngaannaq saqqummersitsisarmat.
 2. Inerteqquniarit denylist. tx_id denylistemiittoq → unitsileqqummik saqqummiussit. Unitsillugu.
 3. Tigusisoq OuterWrapper byte naassaanngitsumut toqqorsivimmit (gateway tassanga-aliartiteriinnarluni).
 3a. Pusisitsineq: byte-it parse-eriarlugit OuterWrapper-tut (§13), wrapper-mi
    `version` byte `0x01` misissorlugu, naatsorsuiniarluni SealedQubCbor =
    unwrap_sealed_qub(OuterWrapper, key=K). AEAD-imut uppernarsaaneqarluni naammasinneq
    (K kukkupput, ciphertext malugaq, qub_id-as-AAD allaajaq, nonce allaajaq) →
    saqqummiussit "URL-imi isertorneqarnermut isumassuissaq qub toqqorneqartumut
    naammassinngilaq" aamma unitsillugu. AEAD-imut uppernarsaanerni naammasinnerit
    isiginnaartumut paasiuminaapput §13.5 naapertorlugu.
 4. Parse-eriarluni SealedQubCbor → SealedQub.
 5. Misissulluni: SealedQub.version paasineqartoq (0x01). Version paasineqartumik ajortoq itigartillugu.
 6. Pisarit pissuserivigineqarnera < SealedQub.unlock_at → countdown saqqummiussit. Misissuiniaqatigit utaqqillutit.
 6a. Anguinnermut-atassutsinermut misissuineq (V1.2). Utertillugu naatsorsuiniarit expected_round =
    ceil((SealedQub.unlock_at - chain_genesis_time) / chain_period_seconds).
    Itigartillugu SealedQub.drand_round == expected_round AAMMA tlock ciphertext suluani
    anguinneq (age/tlock header-imit atuarneqartoq, atsiorneq pisariaqanngitsoq) == expected_round
    naammassinngippata. Suluani anguinneq tassaavoq matusinnermut ilumut piffimmut paasaqartoq;
    una misissuineq ajorpat pilersitsisoq akornusersuisinnaasoq ciphertext anguinnermut qaangiukkamut
    atassutsisinnaavaa countdown siunissami takutillugu, taamaalimmat kinaluunniit byte toqqorneqartut
    atuartut unlock_at sioqqullugu isertorsinnaapput. Suliarinerit piorsaaviup kinaassusianik
    peqanngitsut (test mock) una misissuineq itigartippaat.
 7. Pissuserivigineqarnera ≥ SealedQub.unlock_at-mut:
    a. Pisariaqartumik drand-imi anguinnerup atsiorneqarnera SealedQub.drand_round-imut drand-imut tigutiniariarluni.
    b. Naatsorsuiniarluni B = tlock_decrypt(SealedQub.tlock_ciphertext, round_signature).
 8. Parse-eriarluni B → QubEnvelope.
 9. Misissulluni QubEnvelope.version paasineqartoq.
10. Uppernarsuluni: SHA3-256(QubEnvelope.body) == QubEnvelope.body_hash.
    Naammassinngippat → akornutaqarnermut kukkunersiut.
11. Uppernarsuluni: QubEnvelope.qub_id == SealedQub.qub_id.
    Naammassinngippat → akornutaqarnermut kukkunersiut.
12. Uppernarsuluni: QubEnvelope.unlock_at == SealedQub.unlock_at.
    Naammassinngippat → akornutaqarnermut kukkunersiut.
13. Uppernarsuluni: QubEnvelope.content_type paasineqartoq aamma saqqummiunneqarsinnaasoq.
    Naliliisaq paasineqartut: 0x01 (allataq), 0x03 (isumaqatigiissut). Paasineqanngitsoq → kukkunersiut saqqummiussit.
14. QubEnvelope.sig_alg != 0x00 → atsiorneqarnera atsiorneqartumut uppernarsiniaruk (qiviarit §9.4).
15. cosigner_pubkey imaluunniit cosigner_signature peqarpat → atsiorqatigiisoq uppernarsiniaruk (qiviarit §9.7).
16. Imai naapertorlugu saqqummiunniartumut atorlugu rendererneqarluni (qiviarit §10 allatamut, §6 isumaqatigiissummut).
17. RevealedQub pilersikkit saqqummiussiniarluni.

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
0x00 Atsiorneqarsimanngitsoq
0x01 ML-DSA-65 (FIPS 204) 1,952 byte 3,309 byte

Isiginnaartut PISARIAQARPOQ paasinarnatik sig_alg naliliineqartut itigartittariaqarpaat.

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"  ||    // tunngaviusoq immikkoorut (17 byte)
    version              ||    // u8 (1 byte)
    qub_id               ||    // [u8; 32] (32 byte)
    body_hash            ||    // [u8; 32] (32 byte)
    unlock_at            ||    // i64 big-endian (8 byte)
    0x00                 ||    // u8 (1 byte): PISARIAQARPOQ 0x00 v1.x-mut
    sender_label_hash    ||    // [u8; 32]: SHA3-256(NFC(sender_label)),
                               //   imaluunniit peqanngippat nuller-tamaasa 32 byte
    reply_to_or_zero           // [u8; 32]: parent qub_id, imaluunniit nuller-
                               //   tamaasa 32 byte peqanngippat
)

// Preimage tamarmiusoq: 155 byte → 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"  ||    // tunngaviusoq immikkoorut (17 byte)
    version              ||    // u8 (1 byte)
    qub_id               ||    // [u8; 32] (32 byte)
    body_hash            ||    // [u8; 32] (32 byte)
    unlock_at            ||    // i64 big-endian (8 byte)
    0x00                       // u8 (1 byte): PISARIAQARPOQ 0x00 v1.0-mut
)

// Preimage tamarmiusoq: 91 byte → 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. QubEnvelope-imit sig_alg-mik atuariniaqit.
2. sig_alg == 0x00 → atsiorneqarsimanngitsoq. Uppernarsaqanngilaq. "qub atsiorneqarsimanngitsoq" saqqummiussit.
3. sig_alg paasineqanngippat → itigartittariaqarpoq. "atsiorneqarnermut aaqqissuussaq paasineqanngitsoq" saqqummiussit.
4. author_signature aamma author_pubkey nuussiniaqit. Naliliineq aappa peqanngippat → akornutaqarnermut kukkunersiut.
5. Uutivigit sig_input QubEnvelope-imi naasut atorlugit (V2 formula, §9.3).
6. Verify(author_pubkey, sig_input, author_signature). V2 preimage tassaavoq ilusaq
   akuerineqartoq kisiat — V1 taarsiissut pisoqaq atorunnaarsinneqarpoq (§9.3),
   taamaalimmat atsiorneq V2-mut uppernanngitsoq naammassinngilaq, taamaannarlu.
7. Uppernarsaaneq iluatsippat → "atsiorneqarsimasoq [isumassuissap fingerprint-iat]" saqqummiussit.
8. Uppernarsaaneq naammasinngippat → "atsiorneqarsimasup uppernarsaaneqarnera naammasinngilaq" saqqummiussit.

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. cosigner_pubkey peqanngippat aamma cosigner_signature peqanngippat → atsiorqatigiisoq peqanngilaq. Naammassivoq.
2. Ataasiullaaq peqarpat → akornutaqarnermut kukkunersiut.
3. Uppernarsuluni cosigner_pubkey != author_pubkey (namminneq atsiorqatigiinneq pinaveersaarniarluni).
   Naammassinngippat → "atsiorqatigiisup pubkey-ata pilersitsisumiit assingunneqassanngilaq" saqqummiussit.
4. Uutivigit sig_input §9.3-mi formula assigaa atorlugu (V2 kisiat — V1 taarsiissut
   pisoqaq atorunnaarsinneqarpoq; pact client-it tamarmik V2 atsiornernik pilersitsipput).
5. Verify(cosigner_pubkey, sig_input, cosigner_signature).
6. Iluatsippoq → "atsiorqatigiinneq [atsiorqatigiisup fingerprint-iat]" saqqummiussit.
7. Naammassinngippoq → "atsiorqatigiinnermut uppernarsaaneq naammasinngilaq" saqqummiussit.

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 pingajussaaq sumiluunniit tamanut qub uppernarsarsinnaavaa qub-imut suleqatigeqqaarani. Uppernarsaanermut periusissaq:

1. arweave_tx_id pisarit (tunniunneqarnermut nittartagamit imaluunniit ilisarisimasaminit).
2. Tigusisoq SealedQubCbor toqqorsivimmi gateway sumi tamani.
3. Misissulluni toqqorsivimmi block inkluderi (block-mi qule, block-mi pissuserivik).
4. Parse-erluku SealedQubCbor → SealedQub.
5. Tigusisoq drand-imi anguinnerup atsiorneqarnera SealedQub.drand_round-imut.
6. tlock_decrypt(tlock_ciphertext, round_signature) → QubEnvelope CBOR byte.
7. Parse-erluku → QubEnvelope.
8. Misissulluni SHA3-256(body) == body_hash.
9. Misissulluni QubEnvelope.qub_id == SealedQub.qub_id.
10. Misissulluni QubEnvelope.unlock_at == SealedQub.unlock_at.
11. sig_alg != 0x00 atugaq: misissulluni author_signature (qiviarit §9.4).
12. Misissuinerit tamaat iluatsippoq → qub uppernarsaaneqarpoq.

Uppernarsaaneq sumut uppernartunngorneraat:

Uppernarsaaneq Suna aalajangerneqartoq
Aalajangersimasaq Ciphertext piaareerpoq toqqorsivimmi block-mut pissuserivigineqartumi.
Akornusersitiineq Plaintext-imi timaa hash-imi aalajangersarsimasumut naapertortinneqarpoq, taamaalimmat allangortinneqarsimanngitsoq.
Piffeqarluni Imai paasiuminaattup drand-imi anguinneq, taakku toqqagaq matusinnernut piffimmut paasaqartoq (tlock aamma drand isumannaarnermut malugartumut).

Uppernarsaaneq suna NALI uppernartunngorpaa:

Uppernarsaaneqanngilaq Pissutaa
Pilersitsineq sender_label saqqummiussamut. sig_alg0x01 peqanngippat, sumi tamani imai matuneqarsimassagaluartoq.
Siunertaq qub uppernarsaavaa imai aamma piffeqartoq, pilersitsisoq qanoq aalajangersimanertik isumarisaanngitsoq.
Sapinginnermut-pisup sioqqullugu piffeqarneq Toqqorsivimmi block-imut inkluderi atortumi upload-imut minutsit kingusinnerusinaqaaq. Aalajangersimasoq pissuserivigineqarpoq block piffia, atugaq "matusineq" inniinnera pinnagu.

12. Versionerneqarnera

12.1 Protokolip Versionia

SealedQub aamma QubEnvelope tamarmik version naasoq (u8) protokolip pingaarnerpaamik versioniata tikkuussisut.

12.2 Versioneqarluni Oqaluttuassartaq

Versioni Naliliineq Erseqqissaaneq
v1 0x01 Tamanut atortut allataq qub (content_type 0x01), isumaqatigiissut bilateral (0x03, structured/v1 schema, ML-DSA-65 pilersitsisup + atsiorqatigiisup), tlock, SHA3-256

12.3 Siunissami Akuersaarsinnaaneq

V1-mi isiginnaartoq QubEnvelope CBOR-imi map key-inik paasineqanngitsunik (key-it §3.2 aaqqissuussamiut ileqquini peqanngitsut) takukkamigit PISARIAQARPOQ decode-imi kukkunermik itigartittariaqarpaa (§3.1). Siunissami akuersaarsinnaaneq version naasoq aqqutigalugu pivoq, key-inik akuersaarnikkut pinnani: siunissami ilassutit — metadata mikisulluunniit — version-imi naliliineq nutaaq ataani saqqummiunneqartarput, taannalu V1-mi isiginnaartup erseqqissumik "protokoli nutaanerusoq" kukkunermik itigartittarpaa, imaq atsiornerit uppernarsagaat nipangiumik peerinnarnagu.

12.4 Avammut Pusinneqartumut Versionia

OuterWrapper §13-mi erseqqissarneqartoq nammineq version byte-eqarpoq, immikkut peqaqqaarpoq SealedQub.version aamma QubEnvelope.version allaapaat. Pinerlilernerinik marluk taakku immikkut ineriartorput: kingorna kvantum-isumassugut symmetric-imik allamut taarsisaq wrapper byte allangortippoq protokolip iluani versioniata atornaa, aamma siunissami protokoli-mi ilaaq (assersuutigalugu, puuata naasoq nutaaq) iluani versioniat allangortippaa wrapper byte attorlugu.

OUTER_WRAPPER_VERSION_* Naliliineq Algoritmi Killiffik
OUTER_WRAPPER_VERSION_1 0x01 AES-256-GCM 12-byte nonce-mik, 16-byte uppernarsaanermut tag, AAD qub_id-mut atassuteqartoq v1 default
0x020xFF Sernigineqartoq Siunissami

Isiginnaartut PISARIAQARPOQ paasineqanngitsumi wrapper versionit itigartittariaqarpaat erseqqissumik kukkunersiullutik. Protokoli erseqqissumik wrapper-imi versionermi sumiiffia mikitsumik tigussavaa allangorsivimmik aalajangersimasut saqqummeruttoq (assersuutigalugu, NIST-imi paasissutissaq AEAD allamut tulluartumi); 0x02-mut inissiineqarpoq aaqqissuussinerlu assingisuni algoritmi saqqummiussartoq.


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.

Avammut isertorneqarnermut pusinneq nutaaliami tassanga matuvoq atassusiarluni allatigutsianngorlugu symmetric AEAD-mik akornutaqalersarnermut canonical SealedQubCbor aamma byte naassaanngitsumut toqqorsivimmut uploadineqartut akornanniippoq. 256-bit isumassuissaq K najugaqarpoq kisiat tunniunneqarnermut URL-imi fragment-iata atorfia aamma inuk atortuini; browser-it URL fragment-it server-imut nassiussisanngillat, taamaalimmat qub.social, toqqorsivimmi gateway tamarmik, aamma CDN tamarmik siusinnerusukkummut sumi tamani malugartumik tappiineqartoq K-mut. qub-it tamarmik naassaanngitsumut toqqorsivimmi taava paasiuminaappoq ciphertext-tut imaata utertinneqarsinnaanngitsoq URL-i pilersitsisoq toqqarsimasaa angeqqaarani.

Tamarmiusoq akeqartoq:

13.2 Pusinnerit Tulleriaarnerinik

plaintext timaa                      ← QubEnvelope.body (§2.2)
  ↓ aaqqissuussamiut CBOR (§3)
puuata CBOR
  ↓ tlock isertortuq drand-imi anguinneq (§7 step 10)
tlock_ciphertext (SealedQub iluani) (§2.3)
  ↓ aaqqissuussamiut CBOR (§3)
SealedQubCbor byte                   ← iluani wire suliarineq
  ↓ AES-256-GCM(K, nonce, AAD=qub_id) (§7 step 12a, kapital una)
OuterWrapper CBOR byte               ← naassaanngitsumut toqqorsivimmut uploadineqartoq (§7 step 15)

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, qiviarit §12.4
    qub_id:     [u8; 32],     // SealedQub iluani-imit kopiarisaq; 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 naassaanngitsumi-toqqorsivimmi byte qub B-mut akulissuk AAD assingunngitsoq → AEAD uppernarsaaneq 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
    C := AES_256_GCM_encrypt(key=K, nonce=N, msg=S, aad=Q)
    // C 16-byte uppernarsaanermut tag-imut kingusiinarluni ilanngullugu
    return canonical_cbor_encode(OuterWrapper{
        version:    0x01,
        qub_id:     Q,
        nonce:      N,
        ciphertext: C,
    })

unwrap_sealed_qub(OuterWrapper bytes W, key K):
    require K.len() == 32
    O := canonical_cbor_decode(W) as OuterWrapper
    require O.version == 0x01           // §12.4
    P := AES_256_GCM_decrypt(
            key=K, nonce=O.nonce, ciphertext=O.ciphertext, aad=O.qub_id
         )
    // AEAD-imut naammassinngitsut tamaat → DECRYPT_FAILED, atorsisumut paasineqarsinnaanngitsoq
    return P                            // P SealedQubCbor iluaniipput

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 naassaanngitsumut toqqorsivimmut allanneqassaaq tassanngaannaq, OuterWrapper qulequtaqanngitsoq aamma isumassuissaq K peqanngitsoq:

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

qub tamanut tassaavoq piffimmik-matuneqarsimasoq kisiannili nittartakkamik-matuneqarsimanngitsoq: drand-imi anguinnera saqqummeruttunnagu atuarneqarsinnaanngitsoq (tlock-ip killinga allanngortinneqarsimanngilaq), kisianni matuserneqareerpat kina tamaat arweave_tx_id-mik tigussaqartoq isertorsinnaavaa — URL-imi fragmenti pisariaqanngilaq, K peqanngimmat. Una tassaavoq aalajangersimaarluni akeqartoq killinganut server-ip ingerlatariaqakkaanut: matuserneqarnermut nalunaarummut email-it, allamiunnit embed-it, aamma matuserneqareernerup kingorna SEO pitsaanerusoq tamarmik nittartakkamik pisariaqartippaat server-ip sumiluunniit tigummiunngisaanik isumassuissamik atornagu sulisartumik (§13.6).

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   = peqanngitsoq
  drand_round  = 4695445  (= (1736294400 - 1595431050) / 30, drand mainnet parameter-it §14.2)
  body         = "Hello, future."  (UTF-8, 14 byte)
  title        = peqanngitsoq

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

Tunngaviusoq immikkoorut (10 byte):
  [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00]

Preimage (108 byte — V1.2):
  domain_separator   ||  // 10 byte
  0x01               ||  // version
  0x01               ||  // content_type
  0x0000000067748580 ||  // created_at i64 big-endian (1735689600)
  0x00000000677DC000 ||  // unlock_at i64 big-endian (1736294400)
  0x0000000000000000 ||  // outcome_at_or_zero (outcome_at peqanngitsoq)
  0x000000000047A595 ||  // drand_round u64 big-endian (4695445)
  body_hash          ||  // 32 byte
  title_hash             // 32 byte (nuller-tamaasa sentinel; title peqanngitsoq)

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

Suliarinneq PISARIAQARPOQ body_hash aamma qub_id naliliineqartut assigiimmik saqqummiussaat input-imut. Misilernermut vektori una PITSAAVOQ unit test allaaserinissaminut siulleq. Naliliineqartut canonical qulaani naatsorsuiniarsimasut reference suliarineranit aamma PISARIAQARPOQ bit-tut bit-imut nalunaaqutigineqassasut. Preimage-it itsarnisartut aaqqissuussaat (tassanngaannaq aallartittussaq — qub atortussaq atortugaq pisup taakku naliliinerusut tunngavigissanngilai): 92-byte V1.0 qub_id tassaavoq 3d9fc2390eab043d38a1669ed3b71be76f9eefe872b9569ab1aaa027b88392b0; 100-byte V1.1 qub_id (outcome_at_or_zero ilanngullugu) tassaavoq b0d032898ad629795150fdcb3f84e518f59ed05b7a2a82bc24ebdb87f52144ed. V1.2 drand_round ilanngippaa aamma tunngaviusoq immikkoorut QUB_ID_V2-mut qaffappaa.

14.2 Matusernermut Anguinnermut Allaaserineq

Input:
  unlock_at           = 1735689600
  chain_genesis_time  = 1595431050
  chain_period_seconds = 30

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

drand_round = 4675285

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        = peqanngitsoq

Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PactTerms):
  "notes"(6) < "terms"(6) < "title"(6) < "party_a"(8) < "party_b"(8) < "pact_version"(13)

Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PactTerm):
  "key"(4) < "value"(6)

Aaqqissuussamiut CBOR-imi key-itik ileqquinik (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-i maannakkut pingasunik aalajangersarsimavaa:

Pissut Tunngavik
basic-text-public Mikinersaq pissusilitsumi SealedQub suluk; sapinginnermi naasut peqanngitsoq. Aaqqissuussinerup canonical wrapper suluk v1.0-imi nalingiusumi qub-imut aalajangersaa.
with-recipient-pubkey SealedQub recipient_pubkey aalajangersimasoq (Phase 2 aqqut). Iluani CBOR key set allamik, qub_id allamik.
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

Protokoli v1 eqqortumik atausiusumik algoritmimut atortumut atortussaq:

Uppernarsaasut maannakkut isumassuissamik aamma atsiorneqarnermik takinersaak hardcode-iarput algoritmimut atortussamut. Aalakoorneqarluni-sungiussatsineq saqqummiussaq pinngilaq wire-imi format-iata.

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. Transparency Log aamma Atuarsinnaanermut Killiit (Aaqqissuussineq — misissuineq naammassivoq)

Killiffik. Kapital una tassaavoq aaqqissuussinermut allataq. Wire format-it, hash-ineq, aamma tatigineqarnermut ilusaq ataani tassaapput normative suliarineranut, kisianni suli transparency-log code tunniunneqanngilaq. W5-imi avammut misissuineq naammassivoq: §16.15 aalajangersagaq aalajangersarsimasut aamma akornutaaqqissaarluni aallartitsinissamut killiliisut taakkunannga saqqummersut nalunaarutigai. Suliarineq killiliisat taakku ataanni ingerlasinnaavoq. §16 §15-tut assigiisumik siunissamut isiginnittarpoq — kapital nalivinnersaaramik suliarineq aaqqissuussamiut aalajangersimasunut apuussasoq tatigineqarnermut ilusaq code-imi misissuinerni nutaamik suliarineqarani. Tamatuma saniatigut additive-iuvoq — qub-it tamarmik nammineq Arweave-mut transaction-iartik attatippaat aamma SealedQub / QubEnvelope wire format-imut allannguineq peqanngilaq.

16.1 Naapertuusaaq aamma Atuarsinnaanermut Killiit

Ullumikkut qub-ip atuarsinnaanera aamma piffimmik-akeqarnera tamarmik atausiusumik qub-imut-ataasiakkaartumik Arweave-mut transaction-imut (§11) tunngavilipput. Tamanna matusinissamut latency-mik Arweave-mut finality-mut atassutilerpaa, qub-imut-ataasiakkaartumut upload-i atortumut akimut killilersuutaammat (ARWEAVE_DAILY_CEILING), aamma qub-it akornanni allangortinneqarsimasut-malugartut tulleriaarnerinik tunisinnaanngilaq. Transparency-log marlunnik killinik atassiummut taassuma ataani aamma avataani ilanngutsivoq:

Killiffik Atia Qulakkeerneq Qaqugu
T1 R2-siulleq synchron-imi ack Atuarsinnaanermut natseq — byte matusersimasut atuarsinnaasumut toqqorsivimmut allanneqarput matusineq utertinngilaq (< 300 ms p95). qub tamaat, synchron-imik (§16.10).
T2 Batch-iarsimasoq transparency-log inkluderi Tamanut append-only, allangortinneqarsimasut-malugartumut akeqartoq + tulleriaarneq tamarmiusoq, Arweave-mut anchor-iartoq. qub tamaat, kingusinnerusoq + batch-iarsimasoq (§16.5–16.7).
T3 qub-imut-ataasiakkaartumut Arweave naassaanngitsumut qub-imut ataasiakkaartumut Arweave-mut transaction. Akilersumut nikingajaaneq, aamma Arweave-pinngitsuugallaarnermi fallback (§16.8).

T2 qub-imut-ataasiakkaartumut Arweave toqqagaqartittippaa (T3) atuarsinnaanermut aqquteq ataasiinnaanngitsoq. ARWEAVE_DAILY_CEILING atortumut killiliisaatut peerneqarpoq aamma anchor-mut wallet-mut immikkut-aalajangersimasumut circuit breaker-itut nikitsinneqarpoq (§16.7); atortut matusinerinik takinerusumik itigartinneqartanngillat.

Atuarsinnaanermut ilumoorneq (aalajangersarsimasoq — §16.15 Q6). Atuarsinnaaneq kingumut ingerlanngilaq: T1 R2-mut allanneq synchron-iuvoq aamma ataasiarluni-allataasoq, taamaalimmat free-tier qub T3-mik pisinngitsoq matusineq utertinnermini tamarmik atuarsinnaanngorpoq. Allatamut nujui tassaavoq uppernarsarneqarsinnaasoq qaffasinnermut-killiliisaq piffia: free qub-imut tassanngaannaq anchor-imi block piffia ngorpoq qub-imut-ataasiakkaartumut transaction-imi block piffia pinnagu. Annertussusermi appasissumi — aallartitsinissamut siullermi aamma peqqissaarnerup-piffiani ilumoortoq — ullormut cadence tamarmiusoq tassaavoq nalingiusumi natseq, periarfissiaq ikittuinnaq pinnagu. Atortumut isiginnaarneq taamaattumik tassaavoq qaffasinnermut killiliisaq akimut numeric latency aalajangersagaq peqanngitsoq — "maanna matusersimasoq aamma atuarsinnaasoq; immikkut-aalajangersimasumi tamanut piffissaliineq transparency-log-imi anchor-imi tullianut ilanngunneqarpoq (nalingiusumi ullormut)" — aamma piffissamut-eqqortumut akeqartumut uppernarsaat tassaavoq T3 akilersumut pissuseq, killiit-naleqqiussaanermi saqqummiunneqartoq aamma terms-imi (§16.11, §16.15 Q6). Piffimmut killiliineq sumiluunniit tassaavoq iluani SLO-iuinnartoq, periarfissaq pinnagu marketing-imi SLA-itut.

16.2 LogLeaf Aaqqissuussineq (marluk akeqarsimasut suluit)

Log-imi nalunaarut tassaavoq LogLeaf-i, §3.1 profili ataani hand-written canonical CBOR-itut allataaq (takissuseq-aalajangersimasoq, tag-it peqanngitsoq, float-it peqanngitsoq, naasut takinersaat, NFC allataq, sapinginnermut naasut peqanngippata peerneqartut, key-itik allaaserineqartut byte-ata takissusianut qaffasitsumik taava bytewise ileqquinik). §3.1 parse → re-encode → naleqqut canonical-imut isumassuissaq encode-imi aqqut hash-iinnginnerani atorneqarpoq (decode-iinnarmi pinnagu), taamaalimmat marluit suliarineqarnerit leaf-imi byte-mut naasut-takissuseq imaluunniit key-ileqqui assigiinngippallugit assingunngittussaanngillat. Naasut tamaat u8 / u64 / i64; digest-it tamaat 32-byte byte string-it (bstr[32]). Toqqorsimasoq Arweave-mut transaction id tassaavoq raw 32-byte SHA-256 digest bstr[32]-itut nassartaq, suliuna base64url text string-itut (§3.3-mut assigaa).

Leaf-i marlunnik suluqarpoq kind byte-imik toqqarneqartut, default upload-imi aqqummi Worker byte-mit nalunaaqutsisinnaanngimmat: POST /api/v1/upload qub_id aamma unlock_at-iinnarmik tigusivoq atorsisup uppernarsanngitsumik nalunaarutigisaatutbody_hash, drand_round, created_at, aamma drand_chain_version tamarmik §13 avammut wrapper iluani matusersimasut, taassuma isumassuissaa Worker tigummiunngisaannik. Server-imi-matuserneq aqquinnaq (POST /api/v1/seal) body_hash / drand_round plaintext-imit nassarpaa. Leaf-suluk ataasiusoq body_hash + drand_round nassartoq taamaattumik atortuusup uppernarsanngisaanik naasunik akeqartussaaq qub-it ilumoortut amerlanerinut. Immikkoorut akeqartoq naasunik tamaasa ilumoortuutippaa:

Key Enc. takissuseq Type Peqarnera Isumaa
seq 4 u64 pisariaqartoq Tamanut 0-tunngaviusoq leaf indeks; inklusion-imut uppernarsaat tikkuagaa.
kind 5 u8 pisariaqartoq 0x01 attested (server-imi-matuserneq) imaluunniit 0x02 asserted (atorsisup-matuserninga / byte-mit-nalunaaqutsisinnaanngitsoq upload).
ref 4 bstr[32] pisariaqartoq Leaf-imut tikkuagaq id. Attested → raw qub_id. Asserted → blinded id SHA3-256(qub_id ‖ log_blind_secret) (§16.2.1).
chash 6 bstr[32] pisariaqartoq Imai najugaa SHA3-256(stored_bytes) — imaata atassusernera Worker-ip aqqutini marlunni ilumoortumik naatsorsorsinnaasaa.
unlock_at 10 i64 pisariaqartoq Kopiarisaq (attested) imaluunniit nalunaarutigisaq (asserted); > 0 uppernarsaalluni leaf-imut isertinnani.
received_at 12 i64 pisariaqartoq Worker-imi nalunaaqutaq R2-ack-imi. Uppernartunngorsinnaanngitsoq (atortuusup nalunaarutigisaa; §16.6). Imminut-nassuiaanermut peqarpoq, suliuna uppernarsaat. > 0 uppernarsaalluni.
body_hash 10 bstr[32] kind=0x01 kisiat 0x02-mi peerneqartoq — Worker §13 ataani peqanngilaa.
drand_round 12 u64 kind=0x01 kisiat 0x02-mi peerneqartoq.

kind=0x02 leaf-i piaarluni body_hash-imik drand_round-imilluunniit akeqanngilaq: imai najugaa chash-imi opaque-iusoq ciphertext-imut akeqarnera aamma tulleriaarnera, qub_id aamma unlock_at nalunaarutigisaa uppernarsarpaa — plaintext imaluunniit anguinnera pinnagu. Asserted-imi qub-imut plaintext/anguinnermut isua maannakkut §11 .qub-bundle uppernarsaanermit pisarpoq, log-imit pinnagu (§16.11). drand_chain_version leaf-imi peqanngilaq (default aqqummi wrapper iluaniippoq); chain-imi mikissusaa anchor-imiippoq (§16.7). Encoder-imut peqqissaarneq: nuller-tamaasa ref imaluunniit chash itigartiguk, aamma positive-iunngitsoq unlock_at / received_at itigartiguk, cbor.rs-imi outcome_at > 0 sentinel-isumassuissaq malillugu.

16.2.1 qub-imi-iluartumi blinding

Log-i enumeration-mut oracle §13 avammut wrapper inerteqqutiginiagaa (§13.1) ngortussaanngilaq. qub-imut iluartumut (wrapped) asserted leaf blinded id SHA3-256(qub_id ‖ log_blind_secret) akeqarpaa, log_blind_secret server-ip tigummiunngisaa, aamma body_hash peeruraa. Allatamut nujui taama leaf-imik qub_id ataasiakkaartumut atassusinnaanngilaa; qub-ip tigummiunginnga, tunniunneqarnermut URL-eqartoq taamaalimmat qub_id-eqartoq, blind utertittarsinnaavaa nammineq inklusion-ini uppernarsarniarlugu. qub tamanut (enumerable-iulereersimasoq, Visibility: public Arweave-mut tag-imik §13.8 naapertorlugu nassartoq) raw qub_id-imik akeqarpoq. Una tassaavoq sumi ataasiinnarmi standalone-imut uppernartunngorsinnaaneq piaarluni privacy-mut natseqalersuutaasumut ingerlassutigaa; qub-it iluartut standalone-imut atassusernerat tassaavoq chash (§16.9).

log_blind_secret paaqqissaarnera (aalajangersarsimasoq — §16.15 Q4). Blind-i leaf-imut atassusinnaanngitsumik sernigaa, plaintext-imut isertussinnermik pinnagu (§13 wrapper taanna immikkut tigummivaa). log_blind_secret ajortinneqarpat, qub_id sumiluunniit akornusersuisup tigummiungisaanik imaluunniit utertissinnaasaanik (bundle/URL-imik peqartup qub-ip tamaasa, aamma entropy-appasissumik imaluunniit tamanut qub_id-mik) leaf-imi ref hash-mi ataasiarluni utertippaa aamma atassuteqalerpaa — una tassaavoq ilisimasamik amerlanermut atassuteqaqqissaarneq, brute-force-imik ilisimanngisamut sumiiffimmut pinnagu. log_blind_secret atassusernermut/Sybil-mut-killiliisamut isumassuissatut classify-iuk server-imi isumassuissat sinnerinik assigiisumik paaqqissaarnermut killiliisaq, aamma siunissamut kisiat rotate-iaruk (rotation-ip siunissami leaf-it re-blind-iarpai; kingumut anchor-iarsimasut atassusernerat peersinnaanngilaa).

16.3 Leaf aamma Node Hash-ineq

RFC 6962 §2.1 domain-immikkoorlugu hash-ineq SHA-256 SHA3-256-imik taarserneqartumi:

leaf_hash      = SHA3-256(0x00 || canonical_cbor(LogLeaf))
node_hash(l,r) = SHA3-256(0x01 || l || r)
empty tree     = SHA3-256("")          // aalajangersarsimasoq kisianni suliuna anchor-iartoq

Domain-imi siuliusut byte 0x02 (entry chain, §16.4) aamma 0x03 (STH hash, §16.6) sernigineqarsimapput aamma taakkua avataaniipput. Byte ataasiakkaapput taamaalimmat 10-byte ASCII domain-immikkoorut (QUB_ID_V2, il.il.) peqarsimasunut assingunneqarsinnaanngillat. Tree-i tassaavoq RFC 6962 left-full unbalanced tree-i (interior split-it tamarmik subtree-imi leaf naasunit ataaniittumi marlukkuutaarnermut angisuussami), taanna inklusion-imut aamma consistency-mut uppernarsaat audit-path-imut algoritmi ataasiusoq atortuutippai. Reference-imi allataq left/right derivation pseudocode erseqqissumik nassartaq aamma non-power-of-two (5-leaf) misilernermut vektori tikkuagaa, taamaalimmat right-edge promotion pissut — 4-leaf vektori toqqugaa — misiligineqarpoq.

16.4 Hash Chaining (iluani)

LogDO entry chain iluartumik attatippaa crash-consistency-mut kisiat. Suliuna saqqummiunneqartoq aamma suliuna uppernarsaasumut-saaffigineqartoq:

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

Saqqummiunneqartoq append-only aaqqigaq tassaavoq cumulative Merkle root + anchor-iata (§16.5–16.6), suliuna atortuusup leaf-it qanoq tunisarnera raw-tut: chain-i qanoq tunisarneranut tamaasa utertippaa, taamaalimmat anchor-iarsimasumi root kisiat canonical-imut sumiiffimmik tikkuagaa.

16.5 Cumulative Merkle Tree aamma Batch-ineq

Tree RFC 6962 ataasiusoq naajuartoq leaf-it tamaasa seq ileqquinik qaqillugit peqarpoq — batch-mut-ataasiakkaartut tree-it immikkoortinneqarsimasut pinnagit. (Carry-leaf-chained batch-mut-ataasiakkaartumut aaqqissuusseq itigartinneqarpoq: prefix-imut atassuteq ilumoortoq pinngilaq, taamaalimmat "consistency-mut uppernarsaat" tunngavissaqanngillat.) Cumulative tree-i RFC 9162 consistency-mut uppernarsaat ilumoortut tunivai aamma anchor ataasiusoq nutaaq qub itsarnersaq sumiluunniit inklusion-imik uppernarsarsinnaavaa.

LogDO Durable Object tassaavoq allattartoq ataaseq (blockConcurrencyWhile, QuotaDO / EntitlementDO malillugu) — log-imut tamarmiusumut ilanngutsineq tassaavoq tamarmiusumi-killinganni read-modify-write taamaalimmat DO-mut PISARIAQARPOQ ingerlassasoq, KV-mut suliuna. Tree-ip right-edge frontier (O(log n) hash) cache-iarpaa taamaalimmat batch matusineq tassaavoq O(batch). Batch tassaavoq leaf-it ataatsikkut anchor-iarsimasut; aallartittussaa configurable-iupput, protokolimik-aalajangersimasoq pinnagit: tree_size qaffasinneq minnerpaamik LOG_BATCH_MAX_LEAVES (default 4096), imaluunniit ukiunngorneq anchor-imi cadence-imut tikiukkaa, imaluunniit forced flush akilersumut T3 matusineq tikikkaa. root_i tassaavoq cumulative Merkle Tree Hash leaf-it 0 .. tree_size_i qaqillugit.

16.6 Signed Tree Head Arweave Anchor atorlugu

Arweave anchor transaction tassaavoq Signed Tree Head aamma operatori-imi atsiorneqarneq tree head-imut imminut taarsersorpaa: ullormut anchor qub key-mik pisariaqanngilaq Arweave tx owner tassaammat atsiorneqarneq. Moat-imut isumaqarneq attavoq — substrate allangortinneqarsinnaanngitsoq, qub-imi-tigussaq isumassuissaq pinnagu, anchor-iarsimasumi root-imut killiliisaapput.

Aaqqissuussinermi warm qub-imi-atsiortumut key ataaseq peqarpoq, aamma pinneqarpoq: matusineq-tamaat receipt key (§16.10). Pubkey-aa LogProfile-imi akeqarpoq (uppernarsaasumut tunineqartoq) aamma anchor_owner-imit cross-signed-iuvoq, taamaalimmat uppernarsaasoq receipt-i root pinneqarsimasumut assigiisumut uppernarsaavaa anchor malillugu. Una tassaavoq §16.15 Q2-mut aalajangersagaq — receipt key pinneqanngitsoq, operatori-imit rotate-iarneqarsinnaasoq, repudiable-iussaaq (operatori key-i nammineq pissusilersinnaavaa), taanna receipt-imi accountability-naleqqaa operatori-imi-killinganni akornusersuisumut, taassuma uppernarsaaneq inerteqqutiginiagaa, peqannginnertippaa. Taamaattumik: qub suliuna pinneqanngitsumik log-imi-atsiortumut key tigummivaa; receipt key pinneqarpoq aamma anchor_owner-imit-cross-signed-iuvoq.

SignedTreeHead tassaavoq canonical CBOR (key-itik allaaserineqartut takissusianut): size:u64, root:bstr[32], batch:u64, prev:bstr[32] (siuliusoq sth_hash; genesis = 32 nuller byte), log_id:bstr[32], first_seq:u64, anchored_at:i64. Hash-iaa tassaavoq sth_hash = SHA3-256(0x03 || canonical_cbor(SignedTreeHead)).

Tatigineqarnermut pinneqarsimasoq root. log_id = SHA3-256("QUB_TLOG_V1" || anchor_owner_address). Uppernarsaasoq akuersaartoq PISARIAQARPOQ anchor_tx.owner == LogProfile.anchor_owner piumassuteqassasoq, anchor_owner (aamma receipt-key pubkey) qub_core-imut LogProfile-itut allanneqartoq — quicknet-imi naasut DrandTimelockProvider::quicknet()-imi peqareersut saniani — aamma uppernarsaasumut binary-mut tunineqartoq. Uppernarsaasoq aamma PISARIAQARPOQ Arweave tx data → tx_id atassusernera nammineq killinganni uppernarsassagaa gateway-imi /raw/ akinik tatiginagu. Una rogue-wallet-imut equivocation-imut periarfissaq matupaa: "Arweave-mut anchor-iarsimasoq" isumaqanngilaq uppernarsaasoq suna wallet pinninnagit.

Rotation tassaavoq §15-imi aqutsinermut ilanngussaq, atoqqinnermik pinnagu (aalajangersarsimasoq — §16.15 Q3). §15.2-imi profili-suluk maannakkut sig_alg-it / drand chain-it / wrapper version-it / content type-it kisiat allagai, aamma §15.3-imi aallartittussat tamaasa peqanngilaat — LogProfile / anchor_owner suli §15-imi suluani peqanngilaq. Rotation-mut aqutsineq taamaattumik PISARIAQARPOQ sananeqassasoq: §15.3 ilanngunneqarpoq (ataani) LogProfile aallartittussaq ilanngullugu, aamma rotation tassaavoq signed LogProfile qaffaaneq uppernarsaasumut update-imik tunineqartoq. Pilersaarutigineqartoq rotation anivimmut → iserumiarnermut cross-signature nassarpaa; ajortinneqarnermik-aallartisaq rotation pisinnaanngilaa (anivimmut key-i tatigineqanngitsoq/peqanngitsoq tamatuma piffiani) aamma §15-mut-aqutsineqarluni qaffaanermut nikitsippoq, prev-anchor fork-imut misissuineq (ataani) ajunaarnermik piffimmi killilersorlugu.

Equivocation-imut piffia (tatigineqarnermut naatsorsuutaasoq pingaarluinnartoq). Leaf-i equivocation-imut akornutaaqanngitsoq matusivvigaata anchor-ia Arweave-imut-uppernarsarneqareersimappat kisiat. Piffia tassaavoq received_at → anchor uppernarsaaneq (≤ cadence + Arweave finality). Iluani qulakkeerneq kisiat tassaapput receipt matusineq pinneqarsimasoq (§16.10) aamma qub-ip ingerlatsinermut ilumoornera. Accountability-mut artifact-it pingasut tamanna ilumoortuutippaa (witness-mut ilusaq tassaavoq §16.15 Q2-mut aalajangersagaq):

  1. Receipt matusineq pinneqarsimasoq atsiorneqarsimasoq — SCT-mut assingusaq upload-mut akimi utertinneqartoq (§16.10), pinneqarsimasoq anchor_owner-imit-cross-signed receipt key-imik atsiorneqarsimasoq. Leaf anchor-ia sioqqullugu tammartoq ajortilersortumut receipt repudiable-iunngitsoq saqqummiussassamik attappaa, sumi-tamani-peerneq periarfissaa matuppaa.
  2. Saqqummiunneqarsimasoq monitor-imut periuseq + prev-chain pisorneq — anchor prev chain head→genesis pisorneqarpoq; fork (anchor marluk size ataasiusumi root allatamik, imaluunniit prev napparsimasoq) tassaavoq ajortuliornermut saqqummiunneqarsinnaasoq uppernarsaat. Equivocation-imut nassaarineq tassaavoq ingerlatsinermut aalajangersagaq oqaatigineqarsimasoq, naatsorsuutaasoq nipangiusoq pinnagu.
  3. Imminut-saqqummiunneqartumut head marluk — head nutaaq tamaat {sth_hash, tree_size} qub-imi-pigineqartumut public, append-only GitHub repository-mut tunineqarpoq (imminut-saqqummiunnermut allangortinneqarsimasut-malugartumut killiliisaq), social-imut post-imik best-effort-tut isumannaakkuutigalugu kisiat. Tunniunneqarneq naammassinngippat PISARIAQARPOQ page-issasoq (nipangiusumik napparngitsoq).

Ilumoorneq killiliisaq (akornutaaqqissaarluni killiliisaq). qub posting-mut sumiiffinnik marlunnik aqummat, una tassaavoq imminut-saqqummiunneqartoq, allatigut-witness-iarsimanngitsoq. Atortumut, marketing-imut, imaluunniit legal-imut sumiiffik sumiluunniit log "allatigut-witness-iarsimasoq" oqaatigisinnaanngilaa; oqaatigineqarsinnaasoq tassaavoq equivocation nassaarineqarsinnaasoq aamma receipt repudiable-iunngitsumik qimagunneqartoq. Allatigut-ataani-witness ilumoortoq §15-imut aqutsinermut qaffaanermut siunissamut nikinneqarpoq.

received_at operatori-imit-nalunaarutigineqarpoq aamma akeqarneq sumiluunniit taassumunnga tunngavissaqassanngilaq — suliuna uppernarsaatut imaluunniit akerliliinermut isumannaakkuutaatut saqqummiunneqartoq atortumi / legal-imi / API-mi / uppernarsaammut-saqqummiussinermi sumiiffimmi tamarmi. Arweave anchor-imi block piffia T tassaavoq piffia-allaaserineqartoq tatigineqarsinnaasoq kisiat ("log-iarsimasoq" qaffasinnermut killiliisaq). Monitor-imi received_at-imut misissueqqissaarneq tamarmik PISARIAQARPOQ T-mut naleqqiussassasoq, operatori-imit-aqunneqartoq anchored_at STH suluk pinnagu; taama misissueqqissaarneq tassaavoq ilumoortumi operatori-imi nalunaaqutaata kukkunneranut isumannaammat kisiat, suliuna ajortinneqarnermik-aallartisamut operatori-imut accountability-mut killiliisaq (§16.15 Q5).

16.7 Anchor Transaction Format aamma Cadence

AnchorBundle tassaavoq canonical-CBOR Arweave transaction body, §16.8 bundler atorlugu allanneqartoq: ver:u8, sth:bstr (canonical SignedTreeHead byte), prev_anchor:bstr (siuliusoq anchor tx id raw byte; genesis-imi peerneqartoq), chain_hash:tstr (drand chain atorneqartoq — quicknet), aamma batch-imi leaf-CBOR stream seq ileqquinik taamaalimmat anchor imminut-naammassisimavoq: monitor-i root body-mit utertippaa qub-imut atassuteqaqqissaarani. (Leaf stream annertussusermi qulleruttuni angitilerpat, siunissami nutaarsiaq leaf-imut tikkuagaq killinganik kisiat akeqarsinnaavoq; nalunaarutigineqarpoq, v1-mi tigummiunneqarani.)

Arweave-mut tag-it piaarluni enumerable-iupput — log nassaarineqassasoq siunertaqarpoq, qub-it iluartut assigiisumik pinnagit: App-Name: qub-tlog, Anchor-Format: 1, Log-Id: <hex>, Batch: <n>, Tree-Size: <n>, Root: <hex>, Prev-Anchor: <tx>, Content-Type: application/cbor. Tag-it tassaapput uppernarsanngitsut tikkuagat; CBOR body tassaavoq aqutsisoq ataaseq.

Cadence: default-imi ullormut, annertussusermut malillugu misissoqqinneqartoq (size aallartittussaq cadence atortoq aalakuumut nikinnerusartippaa); akilersumut T3 matusineq anchor-imik tigussisarpaa taamaalimmat akilersartut ullormut utaqqisanngillat. Anchor wallet immikkut-aalajangersimasoq aamma low-velocity-iuvoq, upload wallet-imit immikkoortoq — PISARIAQARPOQ nammineq JWK-eqassasoq (key immikkut, upload wallet-imi role-itut pinnagu) taamaalimmat upload-wallet-imi ajortinneqarneq anchor-imik forge-isinnaanngitsoq — aamma akimut ullormut anchor-transaction-imut budget-eqarluni (ARWEAVE_DAILY_CEILING nikitsinneqartoq). Paaqqissaarnermut isiginnaarneq erseqqissumik oqaatigineqarpoq: narrow-scope hot key circuit breaker-imik teqqissaartumik aamma balance-imik appasissumik, "cold" pinnagu — wallet ullormut auto-sign-isartoq cold-iusinnaanngilaq, aamma allataq taama pinngeqaaq.

16.8 ANS-104 Bundler

Iluani ANS-104 DataItem encoder aamma deep-hash signer, ~300 line-iusoq, Web Crypto-innarmik, nul npm dependency-mik (Turbo SDK marluk tamarmik npm ci --ignore-scripts supply-chain-imut killiliisamik naammassisanngillat). DataItem byte ilusaa:

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

Atsiorneqarneq tassaavoq Arweave deepHash — recursive SHA-384 digest (Arweave-imi wire-mut piumasaa, crypto.subtle.digest("SHA-384")) ["dataitem", "1", sig_type, owner, target, anchor, encoded_tags, data] qaqillugit — taava RSA-PSS deep hash-imut wallet JWK crypto.subtle atorlugu; id = base64url(SHA-256(signature)). SHA-384 maaniittoq tassaavoq Arweave-wire-imut-kisiat primitive-itut quarantine-iarsimasoq, suliuna qub tatigineqarnermut primitive (§15 isuumut allappaa; qub tatigineqarnermut hash-ineq tassaavoq SHA3-256 tamaviarluni).

Code-imi aqqut ataaseq atortuussinik pingasunik tunivoq: akilersumut T3 qub-imut-ataasiakkaartumut naassaanngitsumut, Arweave-pinngitsuugallaarnermi fallback (DataItem queue-iaruk, R2-siulleq ack utertiguk sumiluunniit — una maannakkut ARWEAVE_UNAVAILABLE 503 dead-end matupaa), aamma AnchorBundle allanneq. Atsiorneqarnermut ilusaq (aalajangersarsimasoq — §16.15 Q8): v1 RSA-PSS (signature type 1) atorlugu atsiorpoq Arweave wallet JWK-imut periuseq peqareersoq atoqqillugu (nul nutaaq naassaanngitsumik key-imut paaqqissaarneq, "ataaseq ikinnerusoq isumassuissaq" isumaqarneq atortullugu); Ed25519 §15 PQ-migration-imut aqqummut nikinneqarpoq.

Hand-rolled deep hash tassaavoq W5-imi kappiisaalinerpaaq, coverage-imikut-natselerlualunni, taamaalimmat killisinerineqarnera akornisaaffigineqarsinnaanngilaq (§16.15 Q8):

  1. Oqaatsit-akornanni fixture tlog_v1.json (Rust + TS, §14.5 wrapper_v1.json ileqqu) deep-hash, DataItem byte + id, leaf hash, 5-leaf root + audit path, STH hash, inklusion-imut uppernarsaat, aamma consistency-mut uppernarsaat tunivai — sign aamma verify aqquinni tamani (verify aqquta pingaaruteqarpoq §16.6-imi local tx → tx_id misissuineq deep hash standalone uppernarsaasut tamaasa iserterivaa, allattartumut kisiat pinnagu).
  2. Reference ANS-104 bundler-imut atausiarluni interop round-trip, static misilernermut data-tut kisiat — suliuna npm runtime dependency (Web-Crypto-inarmik / install-script-pinngitsumik isiginnaarneq attasoq).
  3. Deep-hash + RSA-PSS aqqut PISARIAQARPOQ crypto.subtle primitive assigiisut production-imi atortut atorlugit round-trip-issasut, taamaalimmat iluani encoder byte-compatible-iuvoq.
  4. Ingerlaaqalik post-bundle-imut akuersuinermut monitor anchor / fallback DataItem tamaat Arweave-mut akuersisaalersimanera uppernarsarpaa, alarm-imik + circuit breaker-imik — deep hash aamma Arweave-pinngitsuugallaarnermi fallback queue-mut sullimmat, taamaalimmat nipangiusumi kingumut ingerlanneq queue taanna network-imit-itigartinneqartunik akpangaajussaaq ajunaarnerup taanna sernigissagaata piffiani.

16.9 Inklusion-imut aamma Consistency-mut Uppernarsaat

Tamarmik tassaapput RFC 9162, SHA3-256, canonical CBOR-itut tunineqartut.

InclusionProofGET /api/v1/qub/:tx_id/proof: ver:u8, leaf:bstr (leaf CBOR eqqortoq — uppernarsaasoq leaf_hash nammineq utertippaa aamma tunineqartumut hash-imut tatiginngilaq), index:u64, size:u64, audit:[bstr[32]], root:bstr[32], anchor:{ txid:bstr[32], batch:u64, sth:bstr[32], log_id:bstr[32], block_height?:u64, anchored_at?:i64 }.

ConsistencyProofGET /api/v1/log/consistency?first=<size_a>&second=<size_b>: ver:u8, first_size:u64, second_size:u64, first_root:bstr[32], second_root:bstr[32], nodes:[bstr[32]], first_anchor, second_anchor. Key-list ataaseq paatsiveeruteqanngitsoq, misilernermut vektorimik pinneqartoq.

Standalone-imut uppernarsaaneq (qub server peqanngitsoq, §11 iserterivaa):

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

Uppernarsaammut-tunisinermut toqqorsivik PISARIAQARPOQ coordinate-key-iartoq (aalajangersarsimasoq — §16.15 Q7, akornisaaffigineqarluni siuliusariaqartoq). Cold-leaf-imut uppernarsaammut-pilersitsineq correctness-imut-killinganni eqqortuuvoq R2 audit material tassaappat kisiat Merkle-node-imut toqqorsivik attasoq absolute tree coordinate (level, index)-imut key-iartoqbatch-imut-ataasiakkaartumut node delta pinnagit. Coordinate-key-iartumut toqqorsivimmik, (leaf i, size N) audit path tamaat tassaavoq O(log N) direct R2 GET-it batch killinganni utertinneqartoqarani; batch-key-iartumut toqqorsivimmik tamanna pinngilaq, taanna tassaavoq toqqorsivimmut-ilusaq paatsiveernera aalajangersagaq matupaa. Leaf body-it assigiisumik seq-imut content-addressable-iupput. W5 misilernermut vektori PISARIAQARPOQ genesis-piffimmut cold leaf root-imut kingusinnerusumut uppernarsassagaa R2 + Arweave kisiat atorlugit LogDO toqqorsivik salippallugu, taamaalimmat §16.13-imi reclamation-imut-isumannaarluni isumaqarneq tunngavissaqarpoq oqaatiginnarani. O(log N) sequential R2 GET-it kisiat asynchron-imut uppernarsaammut endpoint-imut atapput — suliuna matusineq hot path-imut (§16.10) imaluunniit per-tick-imut cron-imut.

16.10 R2-Siulleq Ack Tulleriaarnera

POST /api/v1/upload aqqut imatut ngorpoq:

  1. Siorna-affimmut gate-it (auth, validation, idempotency shard key) — allannguuteqanngitsut.

  2. Synchron-imik await QUB_CACHE.put(qub-cache/<tx_id>, wrappedBytes) — atuarsinnaanermut natseq; aamma W1-imi precache race-i matupaa (siusinnermi ctx.waitUntil Arweave submit-ip kingorna).

  3. Synchron-imik await LogDO.append(leaf) — in-colo DO RPC ataaseq; allattartoq ataaseq seq tunivaa, entry chain qaffappaa, aamma frontier nutarterpaa. (RMW tamarmiusumi-killinganni → DO, KV-mut suliuna.) append RPC tamanna kisiat suliarivaa — O(batch) Merkle batch-close suliaq off RPC tassaani ingerlavoq LogDO alarm-imi, imaluunniit append p95 LOG_BATCH_MAX_LEAVES-imut-tikkuutaartumut matusineq tamaat qaffappoq.

  4. Maanna ack utertiguk — receipt matusineq (pinneqarsimasoq receipt key-imik atsiorneqarsimasoq, §16.6) aamma { tx_id, log_seq, anchor_status: "pending" } ilanngullugit. Sekunde-arpassuit Arweave fan-out critical path-imit peerneqarpoq.

  5. Ataaseq ctx.waitUntil kingusinnerusumut suliamik queue-iarpaa: qub-imut-ataasiakkaartumut Arweave submit (maanna best-effort / akilersumut; naammassinngippat bundler fallback queue-mut ingerlavoq atortoq 503-issanagu) aamma provisional-meta allanneq peqareersoq. Batch close aamma anchor-ineq immikkut ingerlapput LogDO alarm-imit aamma ullormut anchor cron-imit. ctx.waitUntil loop-imi iluani peqanngilaq; idempotency shard key peqareersoq attatippaa.

Latency-mut budget (aalajangersarsimasoq — §16.15 Q7). < 300 ms p95-mut killiliisaq tassaavoq uttoqqaalluni aallartitsinissamut gate, naatsorsuutaasoq pinnagu. Critical path ilumoortoq tassaavoq siorna-affimmut KV-mut atuarneq + R2 PUT ataaseq + Durable Object marluk tulleriaarsimasutQuotaDO seal-quota-mut debit peqareersoq aamma LogDO append nutaaq — taamaalimmat budget-i in-colo DO round-trip marluk naliliissavai, ataaseq pinnagu. LogDO latency-mut alarm QuotaDO-mi malillugu ingerlassaguk aamma p95 kingumut ingerlanneq aallartitsinissamut akornusersuisutut isigiuk.

16.11 Tatigineqarnermut Ilusaq — akeqarneq eqqortoq, leaf-imi kind-imut killiliisaq

kind=0x01 (attested)-mut: "Imai una — body body_hash-imut naapertortoq, qub_id-imik nalunaarsugaq — qub-imi append-only log-imut position seq-imi akeqarpoq aamma Arweave-mi block piffia T kingorna pinngitsoq peqarpoq; cryptografiamik atuarneqarsinnaanngilaq drand round R = unlock_round(unlock_at) tikillugu." Una tassaavoq {tlock round atassusernera + Merkle inklusion + anchor-iarsimasoq root} pingasut tamarmiusut.

kind=0x02 (asserted, default)-mut: "Opaque-iusoq ciphertext imaata-najugaa chash-imik, qub_id aamma unlock_at nalunaarutigisaa, append-only log-imut position seq-imi akeqarpoq aamma Arweave-mi block piffia T kingorna pinngitsoq peqarpoq." Anguinnermut aamma body-mut isut §11 .qub-bundle uppernarsaaneq peqareersumit (qub_core::unlock) tunineqarput, suliuna log-imit; log-ip qub-imut-ataasiakkaartumut transaction nuilaani ilanngutsivaa tassaavoq allangortinneqarsimasut-malugartumut tulleriaarneq, qaffasinnermut-killiliisaq piffia tatigineqarsinnaasoq, aamma equivocation-imut akornutaaqarneq.

Akeqarnerit marluk peerpaat, §11 malillugu: pilersitsisup atsiorneqarnera sig_alg ≥ 0x01 peqanngitsoq, siunertaq, aamma anchor-ataani-mikissusermut piffia. Atausiulluunniit akeqarnermik received_at-imut tunngavissaqartittittanngilaq.

Akeqarnermut killiliisaq (akornutaaqqissaarluni aallartitsinissamut killiliisaq — aalajangersarsimasoq §16.15 Q1). Free / default (kind=0x02) qub-imut, qulaani killiliisaq kind=0x02 akeqarneq tassaavoq killiliisaq atortumut, marketing-imut, terms-imut, imaluunniit uppernarsaammut-saqqummiussinermut sumiiffik sumiluunniit oqaatigisinnaasaa. Sumiiffik sumiluunniit oqaatigisinnaanngilaa imaluunniit isumaqaqqusinnaanngilaa log-i default qub-imi imai imaluunniit anguinnera uppernarsarmagu — log-i opaque-iusup ciphertext-imi tulleriaarnera + qaffasinnermut-killiliisaq piffia tatigineqarsinnaasoq uppernarsarpaa. Imaata aamma anguinnermut uppernarsaat §11 .qub-bundle uppernarsaaneq peqareersumit kisiat pisarput, taanna log-imit-immikkoortoq. Una tassaavoq copy-imut akornisaaffigineqarluni aallartitsinissamut akornusersuisoq, ileqqumut toqqaaneq pinnagu; tassaavoq aalajangersagaq byte-mit-nalunaaqutsisinnaanngitsoq default aqqut ilumoortuutittartoq.

16.12 Versionerneqarnera aamma W3-mut Suleqatigiinneq

SealedQub wire qaffaaneq peqanngilaq taamaalimmat protokolimut-versionermut qaffaaneq peqanngilaq (§12.1): log-i tassaavoq sidecar suluit byte peqareersunut akeqartoq, taamaalimmat §12.2 protokolimut-versionermut oqaluttuassartamut iseqanngilaq. W3-imi sapinginnermut drand_chain_version attorneqanngilaq aamma SealedQub sapinginnermut suluk ataaseq attatippaa. Log-i taarsiullugu nammineq immikkut version-imut sumiiffinik tunivoq — LOG_VERSION_1, ANCHOR_FORMAT_1, InclusionProof.ver — §12.4 wrapper-versionermut immikkoorneq malillugu (wrapper version byte-eqarpoq protokolimut version-imit immikkoortumik, aamma log version-it immikkoorneq assigiisoq malippaat).

Uppernarsaammut tunisineq tassaavoq default-imi pisartoq, sapinginnermut ride-along-imik. Uppernarsaat matusinermi piffimmi peqarsinnaanngilaq (anchor suli allanneqanngilaq), taamaalimmat matusinermi-piffimmi .qub bundle uppernarsaammik-peqanngitsuuvoq. W7-imi uppernarsaasoq GET …/proof atausiarluni tigusivoq, imaluunniit tamarmik-offline-imi uppernarsaat public AnchorBundle-imit utertippaa Arweave-imi Log-Id-imut misissussamik. .qub bundle (W7) sapinginnermut inclusion_proof ilaa sernigaa — matusinermi peerneqartoq, anchor-ip kingorna re-export-imik cold archival-imut akpangaartoq — W3-imi drand_chain_version-imut "sapinginnermut, default-imi peerneqartoq, additive" ileqqu assigiisoq malillugu.

16.13 Atuarsinnaanermut Toqqorsineq

LogDO open tail-imut, R2 uppernarsaammut-tunisinermut substrate-imut, anchor circuit-breaker-imut naatsorsuutit, aamma bundler fallback queue-mut atuarsinnaanermut piffit docs/DATA-RETENTION.md-imi aalajangersarsimapput. Tunngaviusoq: log-ip hot per-entry toqqorsivia (LogDO) anchor-ip kingorna reclaimable-iuvoq; audit material-ia — coordinate-key-iartoq (level, index) Merkle-node-imut toqqorsivik + seq-imut-naatsorsorsimasoq leaf body-it (§16.9) + Arweave anchor-it — naassaanngitsuupput. Cold leaf DO-mit reclaim-ineq tunineqartumut uppernarsaammik nalivipallaartittanngilaq, uppernarsaat naassaanngitsumut R2 node-imut toqqorsivimmut aamma Arweave anchor-imut aalajangersarmat, DO-mut pinnagu (aamma §16.9-imi salippallugu-DO misilernermut vektori uppernarsarpaa).

16.14 Misilernermut Vektorit

W5 oqaatsit-akornanni fixture tlog_v1.json (§16.8) tuniuppaa aamma vektorit suliarisat: kind=0x01 aamma kind=0x02 leaf → leaf_hash; 5-leaf cumulative root; inklusion-imut uppernarsaat ataaseq; consistency-mut uppernarsaat ataaseq; AnchorBundle ataaseq; aamma DataItem id ataaseq. Taakku §14.5 avammut-wrapper vektorit saniani peqarput aamma Rust (qub-core) aamma TypeScript (Worker) suliarineqarnerinit tamarmik atorneqarput.

16.15 Misissuinermut Aalajangiineqarsimasut (W5 — aalajangersarsimasut)

W5-imi avammut misissuineq (adversarial-imut aaqqissuussamut aqqut + pigisup atsiornera) naammassivoq. Aalajangiineqarsimasoq ataani tamaat aalajangersarsimavoq aamma qulaani §16-imi allataq saqqummersinneqarpoq; akornutaaqqissaarluni aallartitsinissamut killiliisut isuani saqqummerneqaqqipput. Suliarineq taakku ataanni ingerlasinnaavoq.

  1. Default-aqqut (kind=0x02) leaf-imut ilumoorneq — AALAJANGERSARSIMASOQ. Leaf-kind marlunnik immikkoortinneq aalajangersarsimasoq malillugu ingerlaguk: kind=0x02 body_hash-imik drand_round-imilluunniit akeqanngilaq. *_body_hash suluk byte-mit-nalunaaqutsisinnaanngitsumut aqqummi peqanngilaq (integrator-imut "verified" eqqunngitsoq takussagaq legible-nersaaussagaaq aamma §11 bundle-imit peqareersumik tunngavissamik tunivoq). Server-imi-matuserneq log-imi-attested qub-imut piumassaqarniarnak (tamanna plaintext Worker-imut force-issaaq aamma crypto-shredding moat aserortissallugu). Imminut-nassuiaanermut-naatsulluni-attannermik leaf-imi suluk pinnagu .qub bundle / proof envelope-imi uppernarsaasup-utertippaa suluk peqarpoq. Pigisup-akuersaarnera akeqarnermut killiliisaq: §16.11.
  2. Equivocation / sumi-tamani-peerneq accountability — AALAJANGERSARSIMASOQ. Receipt-seal key LogProfile-imi pinneqarpoq + anchor_owner-imit-cross-signed-iuvoq (siusinnermi "atsiortumut key peqanngitsoq" paatsiveerneq matupaa; §16.6). Aallartitsinissamut witness ilusaq: receipt pinneqarsimasoq + monitor periuseq + prev-chain pisorneq + imminut-saqqummiunneqartumut head marluk (qub-imi-pigineqartumut public GitHub repo, social best-effort), nassaarineqarsinnaasoq + receipt-eqartoq marketing-iartoq, suliuna allatigut-witness-iarsimasoq. Allatigut-pingajuanut-witness ilumoortoq §15-imut aqutsinermut qaffaanermut nikinneqarpoq.
  3. Anchor-owner-imut tatigineqarnermut root pinneqarsimasoq + rotation — AALAJANGERSARSIMASOQ. LogProfile pin (§16.6) tiguk; uppernarsaasoq anchor_tx.owner == anchor_owner misissorpaa aamma tx data → tx_id atassusernera nammineq killinganni uppernarsarpaa. Rotation-imut aqutsineq tassaavoq §15-imut ilanngussaq sananeqartussaq (§15.3 aallartittussaq ilanngunneqartoq), atoqqinneq pinnagu; pilersaarutigineqartut rotation-it cross-sign-isarput, ajortinneqarnermik-aallartisat rotation-it §15 qaffaanermut nikitsipput fork-imut misissuineq ajunaarnermik killilersorlugu.
  4. qub-imi-iluartumi leaf-imut blinding — AALAJANGERSARSIMASOQ. qub-imut iluartumut blinding attatiguk (ref = SHA3-256(qub_id ‖ log_blind_secret)), qub tamanut raw qub_id (§16.2.1-imi peqareersoq), chash standalone-imut atassutaatut. log_blind_secret tassaavoq atassusernermut/Sybil-mut-killiliisaq isumassuissaq, siunissamut-kisiat-rotate-iartussaq (§16.2.1).
  5. received_at — AALAJANGERSARSIMASOQ. Leaf-imi attatiguk, akeqartoq kisiat erseqqissumik uppernartunngorsinnaanngitsoq; suliuna uppernarsaatut imaluunniit akerliliinermut isumannaakkuutaatut saqqummiunneqartoq sumiiffimmi sumiluunniit. Monitor-imi misissueqqissaarneq tamaat Arweave-mi block piffia T-mut naleqqiussaaq, operatori-imit-aqunneqartoq anchored_at pinnagu (§16.6).
  6. Free-tier-imut piffia-uppernarsarsinnaasoq — AALAJANGERSARSIMASOQ (pigisup-akuersaarnera). Atuarsinnaaneq kingumut ingerlanngilaq; qaffasinnermut-killiliisaq piffia uppernarsarsinnaasoq kisiat anchor-imi block piffiamut nikinnerusarpoq. Free-tier copy numeric SLA peqanngilaq ("…transparency-log-imi anchor-imi tullianut ilanngunneqartoq, nalingiusumi ullormut"); piffissamut-eqqortumut uppernarsaat tassaavoq T3 akilersumut pissuseq, killiit-naleqqiussaanermi + terms-imi saqqummiunneqartoq (§16.1).
  7. Cumulative tree Workers-imi — AALAJANGERSARSIMASOQ. Cumulative RFC 9162 tree ataaseq + frontier-cache-iartoq allattartumut-ataasiusumut LogDO (~1k writes/sec DO killiliisamut headroom-imik teqqissaartumik; Merkle-of-shard-roots sharding qanittumut tikillugu nikinneqarpoq). Akornisaaffigineqarluni siuliusariaqartoq: coordinate-key-iartoq (level, index) R2 node-imut toqqorsivik + salippallugu-DO cold-leaf misilernermut vektori (§16.9); < 300 ms tassaavoq uttoqqaalluni aallartitsinissamut gate DO tulleriaarsimasut marluk qaqillugit (§16.10).
  8. ANS-104 atsiorneqarnermut ilusaq + deep-hash — AALAJANGERSARSIMASOQ. RSA-PSS (sig type 1, anchor-wallet-imut immikkut-aalajangersimasumut JWK atoqqillugu); Ed25519 §15 PQ aqqummut nikinneqarpoq. Hand-rolled SHA-384 deep hash killisinerineqarpoq aqquinni-marlunni cross-impl fixture-imut, static-imut-kisiat reference-bundler-imut interop misissuinermut, shared-crypto.subtle round-trip-imut, aamma post-bundle-imut Arweave-akuersuinermut monitor-imut (§16.8).

Akornutaaqqissaarluni aallartitsinissamut killiliisut (suliarinermut + atortumut/legal-imut misissuinermut iserterneqartussat):