qub-imut Protokollimik allatigineqartoq
qub tassaavoq piffissamut kryptografiskimik pituttorsimanermut protokoli: oqaaseqatigiit siunissami ullumut matusinissamut, kingusinnerusukkullu suna matuneqarsimanersoq, drand round sorleq saqqummersitsinermut gate-iusimanersoq aamma—toqqorsivimmi transaktioni imaluunniit transparency log-imi uppernarsaat peqarpat—ciphertext qaqugu kingusinnerpaamik pituttorsimanersoq nammineerluni timestamp-ilerneqarsimasoq uppernarsaanissamut systemi.
Akuusartut pingasut ingerlatippaat. drand tassaavoq randomness beacon agguarsimasoq—saqqummersitsinissamut ulloq qub-ip nammineq piumassusia pinnagu cryptografiimit enforce-rneqarpoq. Toqqorsivik sivisooq append-only transparency log-ilu byte-it matuneqarsimasut pigiinnarpai commitment-illu batch-iusut permanent public storage-imut anchor-ilerlugit; T3 path akilersugaq aamma permanent storage-imi transaktionimik ataasiakkaamik allattarpoq. ML-DSA-65 tassaavoq post-quantum digital signature—authorship atulersinneqarsimappat qub key pair-imut pituttorsimavoq, secret-ia pilersitsisup atortuanit qimagunneq ajortoq.
Akuusartut taakku ataatsimoorlutik nalunaarut piffissamut matuneqarsimasoq allanngortinneqarsimanerminillu paasineqarsinnaasoq, optional-imik pilersitsisumut attuumassusilik nammineerlunilu timestamp-ilerneqarsinnaasoq pilersippaat—uppernarsaat silarsuup oqaluttuarisaanermik sanarfisinnaassusia alliartortillugu naleqarnerulersoq.
Allagaq sinnera tassaavoq normativeq atorluarneqarsinnaajumallugu paatsoorneqarsinnaanngitsutut illernarsineq.
qub Protokolimik Erseqqissaaneq
| Naasoq | Naliliineq |
|---|---|
| Dokumentip saqqummersinnera | 1.0.0 (protocol-v1.0.0) |
| Wire protocol | 0x01 |
| Outer wrapper | 0x01 |
| Atulersinneqarnerata ulloq | 2026-09-23 |
| Killiffik | Maannakkut atuuttoq |
| Misissoreerneqartoq | 2026-09-23 |
Allagaq una tassaavoq normativeq protokoli-erseqqissaaneq qub piffimmik-isumaqatigiissutaasut atorfilersuussiviata. Erseqqissarpai paasissutissat aaqqissuunneqarnerat, atorneqarnerinik malittarisassat, aalajangiussinermut formulit, uppernarsaaneqarnermut pisariaqartut atorluarneqarsinnaasumik suliarineqarsinnaanissaannut.
Sumi atortuunngitsut: protokoli-toqqap inuiaqatigiissimaartoq oqaatsinik atugaqarunngilaq — qub-ip timaata tassaavoq oqaatsinut paasinarsisaanngitsoq / markdown / isumaqatigiissut bytii, qanorlu oqaatsit naapertorlugu saqqummiunneqarnissaat isiginnaartup akisussaaffigaa (qub.social web app, <qub-embed> iframe, MCP-imi atugaqartoq, allallu).
1. Allaaserineq aamma Ileqqut
| Allaaserineq | Isumassuissaq |
|---|---|
u8, u64, i64 |
Naasut nalingisut/naliliineqartut bitiit aalajangersagaqartillugit |
[u8; N] |
Byte-fylki taagineqartumik takinersaani N bytenik |
Vec<u8> |
Byte-fylki allanngorsinnaasumik takinersaaqartoq |
Option<T> |
Naliliineq T-mut, peqanngitsorluunniit |
String |
UTF-8 oqaaseqatigiit, NFC-mik aaqqissuussaq |
| ` | |
SHA3-256(x) |
NIST SHA3-256 hash byte-mit ataqatigiimik x (FIPS 202) |
ceil(x) |
Qulaani naasoq: naasut mikinerpaaq ≥ x |
| CBOR | Concise Binary Object Representation (RFC 8949) |
| big-endian | Bytemik pingaarnerpaaq siulleq |
Naasut tamarmik preimage-mut aalajangersaanermut atatillugit big-endian-mut nalunaaqutigineqarput tukinersaagisaqartumi bytemi (i64 → 8 byte, u8 → 1 byte) allatut nalunaaqutigisaanngippat.
Pissuserivinnerit tamarmik Unix sekundimik UTC-mi allaaserineqarput.
2. Paasissutissat Aaqqissuussaat
2.1 ComposeQub (Pilersitsisup Toqqarvigaata Killiffia)
CBOR-mut nalunaaqutigineqarsimanngitsoq. Naassaanngitsumut toqqorsivimmi toqqorneqarsimanngitsoq. Pilersitsisup atortugaata appimi.
ComposeQub {
draft_id: [u8; 16], // Random, generated locally
created_at: i64, // Unix seconds UTC
unlock_at: Option<i64>, // Unix seconds UTC; None while composing
visibility: u8, // 0x00 = private; 0x01 = public
content_type: u8, // 0x01 text; 0x03 pact; 0x04 verdict
plaintext: Vec<u8>, // Raw body bytes (UTF-8 for text)
sender_label: Option<String>, // Display name; V2-signed when authorship is enabled
title: Option<String>, // Plaintext countdown title; bound via title_hash
reply_to: Option<[u8; 32]>,// Parent qub_id; V2-signed when authorship is enabled
outcome_at: Option<i64>, // Optional future judgment time; bound to qub_id
status: DraftStatus, // Composing | Sealed | Uploaded | Failed
}
2.2 QubEnvelope (Allakkat Erserititaq)
CBOR-imi aaqqissuussamiut atorlugit nalunaaqutigineqarpoq (§3). SealedQub-imi tunisarneqartut. Aaqqissuusserneq una tassaavoq saqqummersitap kingorna timaata akornutaqannginnera uppernarsarsinnaasaat.
QubEnvelope {
version: u8, // Protocol major version (0x01 for v1)
qub_id: [u8; 32], // Derived (see §4.1)
content_type: u8, // Content type registry (see §6)
created_at: i64, // Unix seconds UTC
unlock_at: i64, // Unix seconds UTC
outcome_at: Option<i64>, // When reality renders judgment; bound to qub_id
sender_label: Option<String>, // Not in qub_id; V2-signed when authorship is enabled
reply_to: Option<[u8; 32]>,// Parent qub_id; not in qub_id; V2-signed when present
body: Vec<u8>, // UTF-8 text or canonical CBOR pact/verdict body
body_hash: [u8; 32], // SHA3-256(body) (see §4.2)
sig_alg: u8, // Signature algorithm (see §9.2)
author_signature: Option<Vec<u8>>, // Set when sig_alg != 0x00
author_pubkey: Option<Vec<u8>>, // Set when sig_alg != 0x00
cosigner_pubkey: Option<Vec<u8>>, // Set for cosigned pact bilateral agreements
cosigner_signature: Option<Vec<u8>>, // Set for cosigned pact bilateral agreements
}
Tunngavik (qub allataq atsiorneqanngitsoq): version = 0x01, content_type = 0x01, sig_alg = 0x00; signature- aamma cosigner-field-it peqanngillat. Metadata-field-it optional-it allat peqarsinnaapput.
v1 aaqqissuussaasut allat: content_type = 0x03 (isumaqatigiissut timaa, qiviarit §6.1); sig_alg = 0x01 (ML-DSA-65) author_signature aamma author_pubkey peqartillugu (qiviarit §9.3); cosigner_pubkey aamma cosigner_signature ataatsimoorlutik peqartillugit atsiorqatigiinneq isumaqatigiissummut (qiviarit §9.7); reply_to angajulliit qub-ip qub_id-aanut inissinneqartoq akissutaasoq qub-it (qiviarit §9.3 atsiorneqarnerup atortulinnut tunngassuteqartut).
2.3 SealedQub (Allat-Tunisarneqarnermut Aaqqissuussaq)
Canonical CBOR (§3) atorlugu serialiserneqarpoq. Tamanna tassaavoq inner wire artifact: public delivery byte-it taakku bare-iusut toqqortarpaat, private delivery-llu toqqorneqannginnerani OuterWrapper-imut puuttarpai (§13).
SealedQub {
version: u8, // Protocol major version (0x01 for v1)
qub_id: [u8; 32], // Same as QubEnvelope.qub_id
visibility: u8, // 0x00 = private/wrapped; 0x01 = public/bare
unlock_at: i64, // Unix seconds UTC
outcome_at: Option<i64>, // Surfaced on the verdict-watch CTA
// before reveal; mirrors QubEnvelope.outcome_at;
// bound to qub_id via the §4.1 preimage.
drand_chain_id: String, // drand chain hash (hex string)
drand_round: u64, // Target drand round number
drand_chain_version: Option<u8>, // W3 — chain-migration version. Absent / 0 = quicknet
// (the only chain today). Lets a future chain swap
// be expressed on the wire without a breaking format
// change. NOT part of the §4.1 qub_id preimage, so its
// addition never alters an existing qub's identity.
tlock_ciphertext: Vec<u8>, // tlock-encrypted QubEnvelope CBOR bytes
recipient_pubkey: Option<[u8; 32]>,// Reserved field; accepted by canonical CBOR
// but not interpreted by the v1 reference viewer
title: Option<String>, // Plaintext title surfaced on the viewer
// countdown before reveal. Bound to qub_id
// via title_hash (§4.1). 1..=100 NFC code
// points, no hostile/control code points.
}
2.4 RevealedQub (Isiginnaartup Atortua Killiffia)
CBOR-mut nalunaaqutigineqarsimanngitsoq. Isiginnaartumi atortugaata appimi. Pilersinneqartoq isertuussap qaffaanneranik aamma uppernarsarneranik kingorna iluatsillugu.
RevealedQub {
qub_id: [u8; 32],
arweave_tx_id: String,
visibility: u8,
content_type: u8,
created_at: i64,
unlock_at: i64,
outcome_at: Option<i64>, // Carried from both wire layers; drives the verdict-watch block
drand_chain_id: String,
drand_round: u64,
sender_label: Option<String>,
title: Option<String>, // Carried forward from SealedQub.title
reply_to: Option<[u8; 32]>,
body: Vec<u8>,
body_hash: [u8; 32],
body_hash_verified: bool,
author_signature: Option<Vec<u8>>,
author_pubkey: Option<Vec<u8>>,
signature_verified: Option<bool>,
cosigner_pubkey: Option<Vec<u8>>,
cosigner_signature: Option<Vec<u8>>,
cosigner_verified: Option<bool>,
}
3. CBOR-imi Aaqqissuussamiut Profiilia
SealedQub aamma QubEnvelope tamarmik nalunaaqutigineqarnerat profile una malillugu PISARIAQARPOQ. Suliarineqarnerit marluk paasissutissat ataatsimoortuni byteinik assigiimmik suliarinittariaqarput.
3.1 Allaaserinermut Malittarisassat
| Malittarisaq | Erseqqissaaneq |
|---|---|
| Najoqqutaq | RFC 8949 §4.2.1 (Core Deterministic Encoding Requirements) |
| Map key-itik ileqqui | Siullermik byte-itik takinerannik allaaserineqartut (mikinersaq sioqqullugu takinersaq), aamma lexicographic-imik (byte-mut byte takissuseqarluni assigiimmut) |
| Naasut allaaserinerat | Mikinersaq: 0–23 byte siullermi; 24–255 2 byte-mi; 256–65535 3 byte-mi; allatullu. |
| Takissusiup allaaserinera | Takinerit aalajangersimasut kisiat. Aalajangersimaartut peqanngitsut array-it, map-it, byte-it allataallu (additional info = 31 inerteqqutaapput). |
| Tag-it | CBOR-imi tag-it peqanngillat (major type 6 inerteqqutaavoq). |
| Floating-point | Float-it peqanngillat (major type 7 naliliineqartut 0xF9–0xFB inerteqqutaapput). |
| Oqaatsit | UTF-8-mik nalunaaqutigineqartut, NFC-mik aaqqissorneqarsimasut (Unicode Normalization Form C). |
| Byte-it oqaatsii | Byte-it iluartumik. CBOR-imi base64-mik allaaserinneq peqanngilaq. |
| Map key-itik assigiimmik | Itigartittariaqarput pulariarneqarnerat malillugu. Parser-it map key assigiimmik nipangiumik akuersaarsinnaanngillat. |
| Key-it paasineqanngitsut | Kukkunermik itigartittariaqarput. Parser-it map key-it type-ip aaqqissuussamiut key-itaasa ileqquini peqanngitsut akuersaarsinnaanngillat — aaqqissuussamiut byte string-it marluk assigiinngitsut naliliinermut assigiimmut decode-erneqassanngillat (encode(decode(x)) == x), aamma payload-ini atsiorneqarsimasuni key ilassutaasoq imaq isertortoq atsiornerit marluk uppernarsagaat tassaassagaluarpoq. Schema-p ineriartornera version aqqutigalugu pisarpoq, key-inik ilassutaasunik pinnani. |
| Naliliineqartut sapinngisaminik | Kisiat true (0xF5), false (0xF4), aamma null (0xF6) akuerineqarput. |
| Naasut sapinginnermut piumassusiisartut | Naasut sapinginnermut piumassusiisartut peqanngitsut CBOR map-mit peerneqartussaapput (null-imik nalunaaqutigineqassanngillat). Peqartut sapinginnermut piumassusiisartut key-it ileqqui malillugit ilanngunneqarput. |
3.2 Misissorneqarsimasut Aaqqissuussamiut Key-itik Ileqquinik
Key-it ileqqui makku normativeqarput. Suliarineqarnerit key-itik ileqquimi tassani allaaseritariaqarpaat. Debug assertion-it pitsaapput release-iliarineqarsimanngitsumi malittarisassat misissorlugit.
QubEnvelope (versioni 0x01, atsiorneqarsimanngitsoq, sapinginnermut peqartussat tamarmik peqanngitsut):
"body" (5 encoded bytes)
"qub_id" (7 encoded bytes)
"sig_alg" (8 encoded bytes)
"version" (8 encoded bytes)
"reply_to" (9 encoded bytes) ← only if present (reply chains)
"body_hash" (10 encoded bytes)
"unlock_at" (10 encoded bytes)
"created_at" (11 encoded bytes)
"outcome_at" (11 encoded bytes) ← only if present (verdict mechanic)
"content_type" (13 encoded bytes)
"sender_label" (13 encoded bytes) ← only if present
"author_pubkey" (14 encoded bytes) ← only if present
"cosigner_pubkey" (16 encoded bytes) ← only if present (pact cosign)
"author_signature" (17 encoded bytes) ← only if present
"cosigner_signature" (19 encoded bytes) ← only if present (pact cosign)
QubEnvelope key-itik ileqqui aalajangerneqarnerannut: key-it tamarmik CBOR-imi oqaaseqatigiit. Allaaserineqarnera takinersaa = 1 byte qulequtaq + oqaaseqatigiit takinersaat (oqaaseqatigiit 24 byte-imit mikinerusumik). Siullermik allaaserineqarnerup takinersaata ataaniittut, taava lexicographic-imik takinersaat assigiimmut.
SealedQub (versioni 0x01, tamanut, tigusisaqanngitsoq):
"title" (6 encoded bytes) ← only if present
"qub_id" (7 encoded bytes)
"version" (8 encoded bytes)
"unlock_at" (10 encoded bytes)
"outcome_at" (11 encoded bytes) ← only if present (verdict mechanic)
"visibility" (11 encoded bytes)
"drand_round" (12 encoded bytes)
"drand_chain_id" (15 encoded bytes)
"recipient_pubkey" (17 encoded bytes) ← only if present
"tlock_ciphertext" (17 encoded bytes)
"drand_chain_version" (20 encoded bytes) ← only if present (W3; absent = quicknet)
PactTerms (isumaqatigiissummi timaa, content_type 0x03):
"notes" (6 encoded bytes) ← only if present
"terms" (6 encoded bytes)
"title" (6 encoded bytes)
"party_a" (8 encoded bytes)
"party_b" (8 encoded bytes)
"pact_version" (13 encoded bytes)
PactTerm (sineriaq terms array-mi):
"key" (4 encoded bytes)
"value" (6 encoded bytes)
PartyIdentifier (party_a / party_b map):
"label" (6 encoded bytes)
"contact" (8 encoded bytes) ← only if present
3.3 Byte-mut Allaaserinermut Najoqqutaq
| Suunersoq | CBOR-imi allaaserineq | Assersuut |
|---|---|---|
| SHA3-256 hash (32 byte) | 0x58 0x20 + 32 byte |
body_hash, qub_id |
| Pissuserivigineqarnerit (i64) | Major type 0 (pisut) imaluunniit 1 (pinnaajusoq), mikinersaq | Unix sekundi |
| Versioni (u8, naliliineq 1) | 0x01 (atausermik byte) |
|
| Imai sumut atatillugu (u8, naliliineq 1) | 0x01 (atausermik byte) |
|
| sig_alg (u8, naliliineq 0) | 0x00 (atausermik byte) |
|
| ML-DSA-65 atsiorneq (3,309 byte) | 0x59 0x0C 0xED + 3,309 byte |
author_signature, cosigner_signature |
| ML-DSA-65 pubkey (1,952 byte) | 0x59 0x07 0xA0 + 1,952 byte |
author_pubkey, cosigner_pubkey |
4. Normativeqarluni Aalajangiussinerit
4.1 qub_id
qub_id tassaavoq qub-imik kisermik aalajangiisoq aamma QubEnvelope-imik SealedQub-imut atassoq. Aalajangiivoq aalajangersimasumik puuata imaagisaanit.
qub_id = SHA3-256(
"QUB_ID_V2" || // domain separator: ASCII bytes [0x51 0x55 0x42 0x5F 0x49 0x44 0x5F 0x56 0x32] (9 bytes) + 0x00 padding (1 byte) = 10 bytes
version || // u8 (1 byte)
content_type || // u8 (1 byte)
created_at || // i64 big-endian (8 bytes)
unlock_at || // i64 big-endian (8 bytes)
outcome_at_or_zero || // i64 big-endian (8 bytes; 0 when outcome_at is absent)
drand_round || // u64 big-endian (8 bytes)
body_hash || // [u8; 32] (32 bytes)
title_hash // [u8; 32] (32 bytes; absent-sentinel = [0u8; 32])
)
// Total preimage: 108 bytes → 32-byte output
Tunngaviusoq immikkoorut allaaserineqarnera: Oqaaseq "QUB_ID_V2" ASCII byte 9-aapput. Atausermik 0x00 ilaateqaalu naliusersorlugu 10-mik byte-isuunissamut. Suliarineqarnerit byte-it 10 makku PISARIAQARPOQ atortussaat: [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00].
outcome_at allaaserineqarnera: Pre-release implementation revision-ip preimage 92 byte-mit 100 byte-mut tallivaa outcome_at optional pituttorsimaffimmut ilanngullugu. outcome_at peqanngitsoq zero byte 8-tut encode-rneqarpoq; protocol validator-it sumi tamani outcome_at <= 0 itigartippaat, taamaattumik sentinel taanna value eqqortumik aporaaffissaqanngilaq. Verdict mechanic field-imik pisariaqartitsisoq pillugu §3.2 aamma tasks/verdict-uplift-plan.md takukkit.
drand_round allaaserineqarnera: Pre-release implementation revision kingusinnerusoq preimage 100 byte-mit 108 byte-mut tallivaa drand_round (drand round anguniagaq, §4.3) pituttorsimaffimmut ilanngullugu, domain separator-ilu QUB_ID_V2-mut qaffallugu. Tamanna timelock round qub-ip kinaassusianut pituttorpaa: gateway-ip ciphertext round-imut allamut (ass. qaangiutereersumut) unlock_at takutinneqartup isumaqarneranit allaanerusumut pituttorsinnaanngilaa. Unlock procedure (§8) aamma tlock ciphertext stanza-p round-ia unlock_round(unlock_at)-imut naapertuunersoq misissorpaa, taamaattumillu unlock time takutinneqartoq tassaavoq round decryption-imut gate-iusoq.
Pissusii:
- Preimage-imut pituttorsimasut ilaat—
version,content_type,created_at,unlock_at,outcome_at,drand_round, body-p byte-i raw-iusut (body_hashaqqutigalugu), imaluunniittitle(title_hashaqqutigalugu)—allanngortinneqarpatqub_idallaanerussaaq. - qub_id isertuussap sioqqullugu suliarineqarpoq. Tamarmik QubEnvelope aamma SealedQub qub_id assigiimmik nalingisut. Isiginnaartoq isertuussap qaffaaneranik kingorna assigiittarinnerinik uppernarsaavoq.
qub_idsender_label,reply_to, signature byte-inut signing public key-inulluunniit pituttorsimanngilaq. V2 signing construction atuuttumisender_labelaammareply_totaamaattoqsender_label_hashaammareply_to_or_zero(§9.3) aqqutigalugit signature peqarpat toqqaannartumik authenticate-rneqarput.- SealedQub
titleqaffaalersinnaqaat (sumi tamani allat aalajangersimanerinik) qub_id allanngorpoqtitle_hashatorlugu. Gateway-it taava plaintext-imi qulequtaq countdown-imi takutinneqartoq inisseqqissinnaanngilaa qub-ip kinaassusiata atornagu. - SealedQub
outcome_atallangortinneqarpat (sumi tamani allat aalajangersimanerinik),qub_idpreimage atorlugu allanngorpoq. Gateway-it saqqummersitsineq sioqqullugu countdown-imi verdict-on ulloq takutinneqartoq inisseqqissinnaanngilaq qub-ip kinaassusiata atornagu. drand_roundallangortinneqarpat (sumi tamani allat aalajangersimanerinik),qub_idpreimage atorlugu allanngorpoq. Gateway-it piffimmik-matusernermut ciphertext anguinnermut allamut inisseqqissinnaanngilaa qub-ip kinaassusiata atornagu; §8 matusinnermi piffimmi suluata-anguinnera-misissuinermut atatillugu,unlock_attakutinneqartoq tassaavoq anguinneq matusinnermut ilumut piffimmut paasaqartoq.
4.2 body_hash
body_hash = SHA3-256(body)
body tassaavoq raw Vec<u8> imai nassiussassaq. Allataq qub-init, una tassaavoq UTF-8-mik allaaserineqarsimasoq qub-ip timaa.
4.2.1 title_hash
title_hash = SHA3-256(NFC(title).utf8_bytes) if title is present
title_hash = [0u8; 32] if title is absent
title tassaavoq plaintext-imi qulequtaq isiginnaartumi saqqummersitsineq sioqqullugu takutinneqartoq sapinngisaminik (qiviarit §3.2). NFC-mut aaqqissuussineq hash-imut atatillugu ingerlapput digest-i aalajangersimasunngorlugu codepoint-mut takujumagaagaminik assigiimmik. Sumi tamani-nulleq malugaq sernigineqarpoq peqanngitsumut periarfissaq; isumassuissaq isumassuusiineq itigartinneqarpoq CBOR-imi aaqqissuussamiut killinganni kanonisikersimanngitsumik allaaserineqarnerinut "peqanngitsumut" (aaqqissuussamiut allaaserineqarnera naasoq tamaannarluinnaq peerneqartoq).
4.3 Matusernermut Anguinnermut Allaaserineq
drand_round = floor((unlock_at - chain_genesis_time) / chain_period_seconds) + 1
| Naliliisut | Tunngavik | Assersuut |
|---|---|---|
unlock_at |
Inuup toqqagaa Unix sekundi UTC | 1735689600 (2025-01-01 00:00:00 UTC) |
chain_genesis_time |
drand piorsaavik info (genesis_time) |
1595431050 |
chain_period_seconds |
drand piorsaavik info (period) |
30 |
ceil() suliaa toqqarpaa drand-imi anguinneq siulleq saqqummersitsivimmi ≥ unlock_at. Tamanna qulakkeerpaa qub matusernerup sioqqullugu isertorneqarsinnaanngitsoq toqqagaq.
Alignment property (piviusumi pingaaruteqartoq): (unlock_at - chain_genesis_time) chain_period_seconds-imut tamakkerlugu agguarneqarsinnaappat, round toqqarneqartup signature-ia unlock_at-imi exakt saqqummertarpoq, sioqqullugu pinnani. Reference deployment-imi tamanna tamatigut atuuppoq: quicknet genesis time (1692803367) period-ianut 3 sekundimut agguarneqarsinnaavoq, reference app-illu unlock time-it minutsinut tamarmiusunut pin-eqarput. unlock_at aligned-iunngippat round toqqarneqartup signature-ia period ataaseq inorlugu unlock_at sioqqullugu saqqummertarpoq—commitment-ip temporal precision-ia beacon period ataasiuvoq.
Legacy pre-release mapping aamma unlock-side tolerance: Mapping siulleq tassaavoq ceil((unlock_at - chain_genesis_time) / chain_period_seconds), period-aligned case-imi qulaani round unlock_at sioqqullugu period ataatsimik saqqummertartoq toqqarlugu, ciphertext period ataatsimik siusinaartumik matuersaajarneqarsinnaalersillugu. Mapping-it marluk delta period-imut tamakkerlugu agguarneqarsinnaappat exakt +1-imik assigiinngillat, allani isumaqatigiillutik. drand_round immutable qub_id preimage-imut (§4.1) pituttorsimammat artifact-it legacy mapping atorlugu matuneqarsimasut nutaamik re-derive-rneqarsinnaanngillat; verifier-ip §8 step 6a-mi round cross-check-imi stored drand_round derived round-imut imaluunniit derived round minus one-imut naligiittoq akuersaarniassavaa, tlock stanza round stored round-imut exakt naligiittussanngorlugu.
Uppernarsarneq: unlock_at PISARIAQARPOQ siunissami matuneqartumi siunertaa atorpaa. unlock_at created_at-mit ukiut 10-mit qaangiussisinnaanngilaq (tamanna agguarnersartoq killilernialerlugu drand-imut atatillugu; UI taava PITSAAVOQ mianersoqquluni unlock-it 2 ukiunit qaangiusserumaartut).
5. Wire Format Newtypes
Wire format newtype-it suliarinerinik mappersarneqartoq CBOR byte JSON-imut, raw plaintext, ilaqqilluunniit byte aaqqissuusserneqartut paatsoorneqartumut.
| Suunersoq | Imanik | Suliarineqarpoq | Tigummineqarpoq |
|---|---|---|---|
SealedQubCbor |
SealedQub-imi canonical CBOR | serialize_sealed_qub() |
Inner wire artifact; public delivery-mi bare-iusoq, private delivery-mi wrapped-iusoq toqqorneqartarpoq, isiginnaartumillu utertinneqarluni |
QubEnvelopeCbor |
QubEnvelope-imi CBOR-imi aaqqissuussamiut | serialize_qub_envelope() |
tlock isertinnermut input, tlock isertuussap qaffaaneranik output |
5.1 Pilersinnerinut Malittarisassat
// Production code — only through CBOR serialisers:
let sealed = SealedQubCbor::from_encoded(cbor_bytes);
// There is deliberately NO From<Vec<u8>> implementation.
// You cannot accidentally wrap arbitrary bytes in a wire format type.
// Accessing raw bytes:
let bytes: &[u8] = sealed.as_bytes();
let bytes: Vec<u8> = sealed.into_bytes();
5.2 Suliarineq nalilersuinerni
from_encoded() PITSAAVOQ misissulertarluni input CBOR-imi map qulequtaa aalajangersimasoq atorpat. Aaqqissuussamiut tamarmik uppernarsarneqarnerat parse-eriarluni pivoq, suliarineqarluni pinnani, marloriaammik suliarineqarnissaa pinaveersaarniarlugu.
6. Imaa Suunersoq Allatamiut
| Naliliineq | Suunersoq | Timaata Annerpaaffia | Malugarsiivigineqartoq |
|---|---|---|---|
0x00 |
Sernigineqartoq (akuerinneqanngitsoq) | — | ATORNEQASSANNGILAQ |
0x01 |
Allataq nalingisoq (UTF-8, killilersimasumik Markdown) | 50 KB akilerlugu / 10 KB akeqanngitsoq | Qiviarit §10 saqqummiunnermut malittarisassat. Akeqanngitsumut/akiliisumut agguarsineq upload-imut atorfeqarfia atorlugu qulakkeerneqarpoq; protokoli-mi killiliivik ataasiusoq 50 KB-iuvoq. |
0x02 |
Sernigineqartoq (siunissami) | — | Siunissami imai suunersoraat-mut tunniunneqartoq; v1-mi akuerinneqanngilaq. Isiginnaartut PISARIAQARPOQ itigartittussaat malittarisaq ataani naapertorlugu. |
0x03 |
Isumaqatigiissut (bilateral, CBOR-imi timaa) | 100 KB | Timaa CBOR-imi aaqqissuussamiut PactTerms (§6.1). Atsiorqatigiinneq §9.7 naapertorlugu. |
0x04 |
Naliliineq (pilersitsisup imminik kvalitatigineraa, CBOR-imi timaa) | 8 KB | Timaa CBOR-imi aaqqissuussamiut VerdictBody (§6.2). Atorfilersuuteqarfimmit verdict siunertaa kisiat saqqummiisarpoq. Angajulliusumi atassuteqarneq Arweave-mi Parent-Tx-Id tag-aniipoq, timaaniinnani. Qiviarit verdict-uplift-plan §3.4. |
Isiginnaartut imai paasinarsinnatik akuerinneqanngitsoq itigartittariaqarpaat erseqqissumik atugartumut takutitsinermik kukkunersiisutik. Isiginnaartut imai paasinarsinnagit allatatut saqqummiunissaminik misilersortussaanngillat.
6.1 Isumaqatigiissummi Timaa (content_type = 0x03)
Isumaqatigiissummi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera PactTerms naliliineqartumut:
PactTerms {
pact_version: u8, // 0x01 for structured/v1
title: String, // ≤ 200 bytes, NFC
terms: Vec<PactTerm>, // ≤ 20 rows
party_a: PartyIdentifier, // initiator
party_b: PartyIdentifier, // counter-signer
notes: Option<String>, // ≤ 5,000 bytes, NFC; absent key if none
}
PactTerm { key: String (≤ 100 bytes), value: String (≤ 2,000 bytes) } // NFC
PartyIdentifier{ label: String (≤ 100 bytes), contact: Option<String (≤ 320 bytes)> }
CBOR-imi aaqqissuussamiut key-itik ileqquinut tamarmik map-it pingasunut §3.2-mi tunniunneqarput. Tamarmik nalunaaqutigineqartoq isumaqatigiissummi CBOR 100 KB-imit qaangiussisinnaanngilaq (§6 assertorlugu).
Schema kingumut paasisaq. terms-mi sineriaq siulleq structured/v1 isumaqatigiissummut PISARIAQARPOQ tassaassasoq { key: "pact_schema", value: "structured/v1" }. Sineriaq malugaq peqanngitsoq "ileqquminik" isumaqatigiissutaaput aamma aaqqissuussamiut uppernarsaaneqarnerannik schema-imut paasinninnermilluunniit saqqummersitsinerannik pissarsisitiineqanngitsut.
Aaqqissuusinnermi akuersaarnermut inissianngitsut. structured/v1 isumaqatigiissutit eqqortumik sisamanik akuersaartumut sineriaqartut imaattut key-isigut:
"initiator_standard_terms"
"initiator_capacity_terms"
"counterparty_standard_terms"
"counterparty_capacity_terms"
value tamarmik arfineq-pingasunit aaqqissuusinnermi tuluttut allataasut atuagaq atorlugu (role, kind) naliliisaq, tassani role ∈ { seller, buyer, provider, client } aamma kind ∈ { standard, capacity }. Oqaatsit imminuna protokoli-mi paasissutissat normative-ngorlugit — pingasut tamarmik ML-DSA-65 atsiorneqarnerat byte-it eqqorlugit body_hash-imut paasaqartumik. Localiserneqanngillat; atsiorneqartoq timaa oqaatsit naapertorlugu mikilersuiunngitsoq. Naliliineq sumi tamani allangortinneq schema-imik versioni nutaamik (structured/v2) atorpoq.
Arfineq-pingasut, ujarlernerat (acknowledgement_for(role, kind)), aamma tunngaviligissutaasaa najoqqutaqartoq pilersaarutigineqarpoq reference-mi suliarineqarnertik. Tamarmik suliarineqarnerit PISARIAQARPOQ byte-it eqqortumik akuersaarnermut naliliineqarnermut saqqummiussisinnasut; golden-fixture SHA3-256 body-hash-mut misilernerit role-i sisamat tamarmik atussusiusut aalajangersutsinnut tigussinerinik tigussagaqartillugit.
Isiginnaartumi saqqummiunneqartumi ileqquaa. Akuersaarneq oqaatsit imai imaattut "qulaaniittup allaaserineqartup tunngavigalugu" naatsorsuutiminerit, naatsoq-killip sineriai siulliuvoq akuersaartumi sioqqullugit saqqummiunneqartussat. Isiginnaartumut PISARIAQARPOQ terms array-i CBOR-imi ileqquaa atorlugu saqqummiussisut; allanngortinneq saqqummiunneqartut paasinarsiarneqarnera sequjuvoq.
Atsiorqatigiisup attaveqartussaa. Party B-mi contact mailimi tunngaviusumik tassaagaani, qub upload atorfilersuuteqarfia siunnersuussamik atsiorqatigiinnerlu nassippoq isertuussaminik ulluini tunngavilersuugaq aamma atsiorqatigiinneq imminuna piffimmilluunniit allaffigineqarnerat assingusoq misissoqqullugu (§9.7). Isumaqatigiissutit Party B contact peqanngitsut atsiorqatigiineqarsinnaapput, kisiannili out-of-band aqqutaa atorlugu — atorfilersuuteqarfik atsiorqatigiinnermut piumassuteqartumik itigartippoq, misiliusinnaasumik 15-minuti email-mut misissulinermut malugartussaq atorsinnaaneqartoq.
6.2 Naliliinermi Timaa (content_type = 0x04)
Naliliinermi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera VerdictBody naliliineqartumut:
VerdictBody {
verdict_version: u8, // 0x01 for structured/v1
outcome: u8, // 1=Right · 2=Partial · 3=Wrong · 4=Unfalsifiable
reflection: Option<String>, // ≤ 2,000 bytes NFC; "what changed, what did you learn"
evidence_url: Option<String>, // ≤ 2,048 bytes; HTTPS only; absent key when omitted
}
CBOR-imi aaqqissuussamiut key-itik tulleriiaa:
"outcome" (8 encoded bytes)
"reflection" (11 encoded bytes) ← only if present
"evidence_url" (13 encoded bytes) ← only if present
"verdict_version" (16 encoded bytes)
Tamarmik nalunaaqutigineqartoq naliliinermi CBOR 8 KB-mit qaangiussisinnaanngilaq (qulaaniittumut registry-mut naapertorpoq).
Inernerup naliliisai. Wire byte siunertaqanngilaq; sisamat Eqqortoq / Ilaa / Kukkussoq / Misilerneqarsinnaanngitsoq siunertat naliliinermut atugassat tamaat inernerinik ataqatigiissaarput. Siunertanut ataasiakkaanut ilisarnaatit ("Naqissusiivunga" / "Naammassisimavara" / "Pilersaarutigineqartutut" / "Pisut nalunaarutigaat" Eqqortoq-mut, allallu) isiginnaartumi saqqummiunnermut tunngassuteqarpoq angajulliusoq qub-imi siunertaa tunngavigalugu aalajangerneqartoq — wire oqaatsinut aamma siunertanut atanngitsumik atassusaarpoq. 1..=4-mit avissaartumi naliliineqartut PISARIAQARPOQ decode-imi itigartittut.
Angajullimut atassuteqarneq. Naliliinermi qub angajulliusumut atassutaa timaaniippanngilaq. Angajulliusoq qub-imi Arweave transaktion-imi ID upload-imi Parent-Tx-Id toqqorsuutaata tag-aani saqqummiunneqarpoq (§7 toqqorsuutaata tag-aata sineriaa). Tamanna timaa imminik ineriartortillugu atsiorneqartumik nammineq nalilersuissummi oqaatsiusumik tigussinerinik tiguppaa; atorsimanermi malugartoq ("suna eqqorpa?") Arweave-mi tag-imi ujartornermut tunngaviusumik aalajangerneqarpoq.
Uppernarsaammi nittartagaq isumannaatsuunnera (normative). evidence_url peqartillugu, uppernarsaasut (matusiartortumi, wire-imi, Worker-ip sineriaani) PISARIAQARPOQ ingerlatsinerit imaattut:
- HTTPS-mi kisiat. Oqaaseq PISARIAQARPOQ
https://byte tulleriiarmik aallartittumik. Allat tulleriiat tamarmik —http,ftp,javascript,data,file, allallu — itigartinneqassapput. - Takissusaata killilersugaa. ≤ 2,048 byte (browser-imi URL piffissami nalingisup killiliivia).
- NFC + akuersaanngitsumik codepoint-imik misissuineq.
titleaammareflectionmalittarisaq assigissaa — bidi-override / silaqanngitsoq-aalavik / tag-block / BOM / C0 / C1 codepoint-it itigartinneqassapput. Naliliineq Rust-imicrate::handle::contains_hostile_text_codepointaamma TS-imiworkers/api/src/utils/unicode.ts::isHostileCodepointmalitsersuipput (ataqatigiilluni paaqqissaalluni). - Akornusersugaq peqanngilaq, ASCII-mi aqutsisartoqanngilaq. Akornusersuut / DEL /
0x20-mit ataani byte-it URL-imi sumiluunniittut itigartinneqassapput — bidi malittarisartumi matunnertanngitsoq\n/\tinjection vektor matusarpaa. - Host-imi sineriaq peqanngitsuussanngilaq.
https://-mit aamma/,?, imaluunniit#siulliup akornanniittut PISARIAQARPOQ peqanngitsuussanngitsut.
Atorfilersuuteqarfik server-ip tungaaniittoq pissarsisaqarsinnaanngilaq. Worker-i URL-imik PISARIAQARPOQ proxy-iunneq, pissarsineq, imaluunniit siusinnerusumik takutitsineq saqqummiisanngitsoq. Protokoli oqaatsimik toqqortuivoq; saqqummiunneqarneq isiginnaartumi rel="nofollow noopener noreferrer" target="_blank"-imik aamma takuneqarsinnaasumik host-imik nittartagaq allaaserneqartumi saniani saqqummiunneqartumik pivoq.
Eqqarsaqatigiinneq. Pilersitsisumit allaaserisaq sapinginnermut eqqarsaqatigiissut ("suna allanngorpa, suna ilikkarpiuk"). title-imut assigiittumik NFC + akuersaanngitsumik codepoint-imik uppernarsaaneq. Peqanngitsoq / akornusersugaqarluinnartoq input pilersinnermi peqanngitsuusinneqarpoq.
Schema versionia. V1 verdict_version = 0x01 kisiat naapertorpaa. Siunissami schema allanngortinneqarnerit byte una qaffapput aamma protokoli versioni nutaaq §12 naapertorlugu tikilluni saqqummerput.
7. Matusinissamut Protokoli
Matusinerup tamarmiusup ingerlatsineranik. Aalajangiineq tamaat normative.
1. User composes plaintext and metadata in ComposeQub.
2. Validate:
a. body is non-empty.
b. body size ≤ max for content_type and user tier (see §6).
c. unlock_at is in the future.
d. unlock_at ≤ created_at + 10 years.
e. content_type is a known, supported value.
f. visibility is 0x00 (private) or 0x01 (public).
3. Compute body_hash = SHA3-256(body).
4. Set created_at = current Unix seconds UTC.
5. Select drand chain. Load chain_genesis_time and chain_period_seconds, and
compute drand_round = floor((unlock_at - chain_genesis_time) / chain_period_seconds) + 1
(§4.3). (Computed here, before qub_id, because drand_round is bound into the
qub_id preimage—§4.1.)
6. Compute qub_id (see §4.1), folding in drand_round from step 5.
7. Construct QubEnvelope with all fields.
8. Serialise QubEnvelope using canonical CBOR → bytes B.
Assert: serialised output matches canonical profile (§3).
9. Compute C = tlock_encrypt(B, drand_round, drand_chain_public_key).
10. Construct SealedQub with tlock_ciphertext = C and matching qub_id, version,
visibility, unlock_at, drand_chain_id, and drand_round.
11. Serialise SealedQub using canonical CBOR → SealedQubCbor.
12. Select the delivery shape from visibility:
a. Private (0x00): generate K = 32 random bytes and N = 12 random bytes
using a CSPRNG. Compute W = wrap_sealed_qub(SealedQubCbor,
qub_id=qub_id, key=K, nonce=N) per §13. Upload payload = W.
b. Public (0x01): upload payload = bare SealedQubCbor; do not generate K.
13. Display seal-time disclosure. User confirms.
14. Validate upload eligibility via the qub upload service (bot-detection, entitlement, rate limits).
15. Submit the selected upload payload to the qub upload service. For a private
browser seal, the service is byte-blind to the inner SealedQubCbor and never
receives K. The Builder `/api/v1/seal` route is an explicit exception: it
receives plaintext and caller-supplied K in memory, then persists neither.
16. Receive arweave_tx_id from the service. For private delivery, construct
`<origin>/c/<arweave_tx_id>#<base64url(K)>` (or the equivalent short-code
path). For public delivery, omit the fragment. Browsers do not transmit URL
fragments to servers, so K from the browser-seal path is not observed by
qub.social or any storage gateway.
Toqqorsivimmi tag-it (out-of-band). qub upload service-ip storage transaction tag-it ikittuinnaat upload payload toqqarneqarsimasoq saniani ilannguttarpai. Content-Type=application/octet-stream normativimik piumasaqaataavoq. Reference service-ip tag-it optional-it pingasut ilannguttarpai pilersitsisoq saqqummiunneqarnissaat toqqarpat: Intent (compose intent allowlist-ikkut validaterneqartoq—announcement, thesis, prediction, letter, secret, commitment, proof, imaluunniit system-imit verdict), Author (pilersitsisup §9.3 public-key fingerprint-ia lowercase hex 64-character) aamma Parent-Tx-Id (reply chain-imi parent qub-ip storage transaction id-ia, base64url 43-character).
Author tag qub-imut atatillugu opt-in: reference pilersitsisup atortugaa tassanngaannaq atorpaa atugaq erseqqissumik tamanut atimineq matusinermi sapinginnermi pisut. Toggle-imi peqanngippat — default-imi — Author tag-imik allaaserineq pinngilaq aamma qub piorsaavimmi atinnik tunneqarpoq: naassaanngitsumut toqqorsivimmi suunngitsoq uploaditta pilersitsisup handle-iata, email-iata, qub allaata atassuteqassallutik. Toggle-imi peqarpat, Author fingerprint pilersitsisup toqqakkani @handle-mut sineriagineqarpoq §9.5 uppernarsaanermut atassuteqartillugu. Akissummut sineriaqartumut atassuteqarneq aamma Intent kinaassuserinineq pinngilaq. Private delivery-mi outer wrapper (§13) inner SealedQub artifact ilisarnartoq encrypt-erpaa, taamaalilluni stored wrapper-inik harvest-ineq public drand signature-nillu pissarsineq body K-qanngitsoq recover-erneqarsinnaanngilaq; storage tag-it public metadata-upput siunertaqartumik.
Reference atorfilersuuteqarfik siunissamilluunniit nassiussisanngilaq App-Name, App-Version, imaluunniit Type tag-it: imaammik atausimik-naliliisumik aalajangersinneq qub corpus tamarmiusoq utertinneqartussaq GraphQL-imi misissussamut, taamaattoq pusinneqartumi timi-kisiat illernaqqissaarnernut sungiusarnernut akersutaasoq.
Misissornermut malillugu PISARIAQARPOQ toqqorsivimmi tag atortumut §11 inummi-pingajuanut uppernarsaanernut tunngavissatut atorneqassanngitsoq; body hash / qub_id / atsiorneq tamaat naliusap CBOR-imut paasaqartoq imminuna, tag set-imut peqanngitsoq.
8. Qaffaanissamut Protokoli
Qaffaanerup tamarmiusup ingerlatsineranik. Aalajangiineq tamaat normative.
1. Viewer opens delivery URL. Extract arweave_tx_id from the path and retain
the optional URL fragment. Do not assume a missing fragment is an error:
public/bare delivery intentionally has no K.
2. Check denylist. If tx_id is denylisted → display block message. Stop.
3. Fetch the stored bytes (with multi-gateway fallback).
3a. Resolve the delivery shape structurally:
a. If the bytes parse as OuterWrapper, require a well-formed 32-byte K in
the URL fragment, require wrapper version 0x01, and unwrap per §13.
Any missing/malformed K or AEAD failure is a terminal error.
b. Otherwise require the bytes to parse as bare SealedQubCbor; no K is
required. If neither shape parses, report an integrity error.
4. Parse SealedQubCbor → SealedQub.
5. Validate: SealedQub.version is known (0x01), visibility is known, and the
delivery shape matches it (wrapped = 0x00 private; bare = 0x01 public).
Reject any mismatch or unknown value.
6. If current time < SealedQub.unlock_at → display countdown. Poll or wait.
6a. Round-binding check. Recompute expected_round from
SealedQub.unlock_at per §4.3. Reject unless SealedQub.drand_round ==
expected_round OR SealedQub.drand_round == expected_round - 1 (the
legacy pre-release mapping—see §4.3), AND the round baked into the tlock
ciphertext stanza (read via the age/tlock header, no signature required)
== SealedQub.drand_round exactly. The stanza round is the one that
actually gates decryption; without this check a malicious creator could
bind the ciphertext to an already-past round while displaying a future
countdown, so anyone reading the stored bytes could decrypt before
unlock_at. Implementations with no chain identity (test mocks) skip this
check.
7. Once current time ≥ SealedQub.unlock_at:
a. Fetch drand round signature for SealedQub.drand_round from drand network.
b. Compute B = tlock_decrypt(SealedQub.tlock_ciphertext, round_signature).
8. Parse B → QubEnvelope.
9. Validate QubEnvelope.version is known.
10. Verify: SHA3-256(QubEnvelope.body) == QubEnvelope.body_hash.
Fail → integrity error.
11. Verify: QubEnvelope.qub_id == SealedQub.qub_id.
Fail → integrity error.
12. Verify: QubEnvelope.unlock_at == SealedQub.unlock_at.
Fail → integrity error.
12a. Verify: QubEnvelope.outcome_at == SealedQub.outcome_at (both absent, or
both present and equal). Fail → integrity error.
12b. Content re-derivation. Recompute qub_id per §4.1 from the decrypted
fields — (QubEnvelope.version, content_type, created_at, unlock_at,
outcome_at, SealedQub.drand_round, QubEnvelope.body_hash,
title_hash(SealedQub.title)) — and verify it equals SealedQub.qub_id.
Fail → integrity error. The pairwise checks in steps 10-12a only prove
the two layers agree with EACH OTHER; a forger who rewrites a bound
field consistently on both surfaces (a pre-reveal title swap, or a
post-round body swap with a recomputed body_hash re-encrypted to the
same round under the same qub_id) passes them all. Only re-deriving
the identity from content closes this.
13. Verify: QubEnvelope.content_type is known and renderable.
Known values: 0x01 (text), 0x03 (pact), 0x04 (verdict).
Unknown → display error.
14. If QubEnvelope.sig_alg != 0x00 → verify author signature (see §9.4).
15. If cosigner_pubkey or cosigner_signature present → verify cosigner (see §9.7).
16. Render content using the appropriate renderer (see §10 for text and §6 for pact/verdict).
17. Construct RevealedQub for display.
9. Pilersitsisup Atsiorneqarnera
9.1 Naapertuusaaq
qub-it naassaanngitsumut toqqorsivimmi sumiiffeqarluinnarput. Pilersitsineq atsiorneqarnerat akornusiitisorneqarsinnaanngitsoq qaqugulluunniit ataqqinassanngittussat, taama pissutigalugu v1.0 atorpoq kingorna-kvantum ML-DSA-65 (FIPS 204) naliusap qaqugulluunniit naluneqarsinnaasup tunngavianik aalajangersaanissaminut qub-ip sumiiffia atussinnaapput.
9.2 Algoritmip Allataa
sig_alg |
Aaqqissuussaq | Isumassuissap Annertussusia | Atsiorneq Annertussusia | Killiffik |
|---|---|---|---|---|
0x00 |
Atsiorneqarsimanngitsoq | — | — | Atuuttoq |
0x01 |
ML-DSA-65 (FIPS 204) | 1,952 byte | 3,309 byte | Atuuttoq |
0x02 |
Ed25519 | 32 byte | 64 byte | Constant-i immikkoortitaq; protocol v1-imi tapersersorneqanngilaq |
Protocol-v1-imi isiginnaartut value {0x00, 0x01} avataaniittut tamaasa itigartittariaqarpaat, 0x02 immikkoortitaq ilanngullugu. Immikkoortitsineq atoqqiinermik nalaatsortumik pinaveersaartitsivoq; atulersitsinertut isumaqanngilaq. Atulersitsineq §15-imi allanngortitsinermik aqutsinermut nassuiaatigineqartumik pisariaqartitsivoq.
9.3 Atsiorneqarsimasumut Preimage-mut Suliarineq
Preimage-mut versioni marluk pisimapput. Atsiornerni tamani V2 PISARIAQARPOQ atorneqartoq, uppernarsaasullu PISARIAQARPOQ V2 kisiat akuertariaqarpaat. V1 preimage pisoqaq (allaqqasoq ataani oqaluttuarisaanermut) V2-mut nuunneqarnerani uppernarsaanermut kisiat taarsiisussatut akuerineqarsimavoq; taarsiissut taanna atorunnaarsinneqarpoq V1-kisiat-atsiornerlu maanna itigartinneqarpoq.
V2 (maannakkut — pilersitsisup atsiornera nutaaq tamaat pilersippaa, aamma pact staging / cosign ingerlanermi atsiornerit marluk):
sig_input = SHA3-256(
"QUB_AUTHOR_SIG_V2" || // domain separator (17 bytes)
version || // u8 (1 byte)
qub_id || // [u8; 32] (32 bytes)
body_hash || // [u8; 32] (32 bytes)
unlock_at || // i64 big-endian (8 bytes)
0x00 || // u8 (1 byte): MUST be 0x00 in v1.x
sender_label_hash || // [u8; 32]: SHA3-256(NFC(sender_label)),
// or 32 zero bytes when absent
reply_to_or_zero // [u8; 32]: parent qub_id, or 32 zero
// bytes when absent
)
// Total preimage: 155 bytes → 32-byte hash
signature = Sign(author_secret_key, sig_input)
sender_label_hash title_hash (§4.2.1) assigiimmik peqanngitsumut-sentinel ileqqoq malippaa: nuller-tamaasa 32 byte SHA3-256-mit iluartumik saqqummersinneqarsinnaanngimmat, taamaalimmat "peqanngitsoq" label-imut peqartumut qaqugulluunniit naapissanngilaq. Naasut tamarmik takissuseq-aalajangersimasut, taamaalimmat preimage takissusermut-siuartaqaratik paatsiveeruteqanngilaq.
V1 (pisoqaq — ATORUNNAARSINNEQARSIMASOQ; pilersinneqarunnaarpoq aamma uppernarsaanermi akuerineqarunnaarluni):
sig_input = SHA3-256(
"QUB_AUTHOR_SIG_V1" || // domain separator (17 bytes)
version || // u8 (1 byte)
qub_id || // [u8; 32] (32 bytes)
body_hash || // [u8; 32] (32 bytes)
unlock_at || // i64 big-endian (8 bytes)
0x00 // u8 (1 byte): MUST be 0x00 in v1.0
)
// Total preimage: 91 bytes → 32-byte hash
V1 preimage sender_label aamma reply_to ilanngutinngilai. V2-mut nuunneqarnerani uppernarsaanermut kisiat taarsiisussatut akuerineqarsimavoq; taarsiissut taanna maannamut atorunnaarsinneqarpoq — uppernarsaasut PISARIAQARPOQ V2 preimage kisiat akuertariaqarpaat. Allaaserineq maani oqaluttuarisaanermut aamma ataani tunngaviusoq immikkoorut nassuiaataanut attatineqarpoq. Atsiorneq V1-imut kisiat uppernartoq PISARIAQARPOQ uppernarsaanermut naammassinngitsutut isigineqartariaqarpoq.
Tunngaviusut immikkoorutit: "QUB_AUTHOR_SIG_V1" / "QUB_AUTHOR_SIG_V2" ataasiakkaarlutik ASCII byte 17-iupput ([0x51, 0x55, 0x42, 0x5F, 0x41, 0x55, 0x54, 0x48, 0x4F, 0x52, 0x5F, 0x53, 0x49, 0x47, 0x5F, 0x56, 0x31/0x32]). Ilaateqaqanngilaq. Immikkoorutip assigiinngitsup suliarineqarnerit marluk immikkoortippai, taamaalimmat atsiorneq preimage ataasertumut aappaanut naanngitsumut uppernartinneqarsinnaanngilaq.
org_id_present byte: unlock_at-p kingornani byte PISARIAQARPOQ 0x00. Reference-imi suliarinerup tassuninnga ORG_ID_PRESENT_INDIVIDUAL = 0x00 konstantitut saqqummiussivaa crates/qub-core/src/signing.rs-imi; isiginnaartut sig_input uppernarsariniarpaat byte assigiimmik nassiussissut.
Atsiorneqartup sumi tamani — suna naliusaaffigineqartoq sunalu naliusaaffigineqanngitsoq. V2 sig_input toqqaannartumik nassuerutigivai version, qub_id, body_hash, unlock_at, sender_label, aamma reply_to (aamma aalajangersarsimasoq tunngaviusoq immikkoorut aamma org_id_present byte). qub_id imaa pilersinneqarpoq version, content_type, created_at, unlock_at, outcome_at, drand_round, aamma body_hash §4.1 preimage atorlugu, taamaalimmat naasut taakku allangortinneqarpata qub_id-mut allatut saqqummiisitsipput atsiorneqarnermilu malugartoqarluni. Naliuvigineqartoq sumi tamani imaattuvoq:
| Naasoq | Atsiorneqarnermut uppernarsaaneqartoq | Qanoq |
|---|---|---|
version |
✓ | sig_input-mut input ataasiussoq |
qub_id |
✓ | Input ataasiussoq |
body_hash |
✓ | Input ataasiussoq |
unlock_at |
✓ | Input ataasiussoq |
sender_label |
✓ | Input ataasiussoq sender_label_hash atorlugu (V2 preimage — ilusaq akuerineqartoq kisiat) |
reply_to |
✓ | Input ataasiussoq reply_to_or_zero atorlugu (V2 preimage — ilusaq akuerineqartoq kisiat) |
content_type |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
created_at |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
outcome_at |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
drand_round |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu (V1.2) |
body |
✓ | Aqqut-iliartumik, body_hash = SHA3-256(body) atorlugu |
author_pubkey |
— (immaqimik) | Atsiornermik uppernarsaasoq isumassuissaq pilersitsisuvoq, naapertorlugu |
cosigner_pubkey / cosigner_signature |
— | Naapertorlugu atsiorneqarsimasut sig_input assigiimmiut (qiviarit §9.7) |
drand_chain_id, tlock_ciphertext, visibility |
— | Avammut SealedQub naasut, puuata iluani peqanngitsut — namminnerannik atortulinnut aalajangersimaartumi (anguinneq / piorsaavik assigiittariniarneq) atortuneqartut, atsiorneqarnermilli pilersitsisup atorneqaratik. (drand_round maanna aqqut-iliartumik qub_id preimage atorlugu atassutsivoq — qiviarit qulaani.) |
Sooq V2 preimage kisiat akuerineqartoq.
- V1 preimage atorunnaarsagaq ataani, toqqorsimasunut byte-inut allaqqisinnaasup
sender_label("Alice" → "Mallory") taarsersinnaavaa imaluunniitreply_toallanngortitsinnaallugu — aamma round-ip kingorna imminuna isertorluni — pilersitsisup atsiornera allangortinneqarnagu, naasut taakku marluk atsiorneqarsimasumi preimage-mi peqanngimmata. V2 marluk tamaasa naliuppai, taamaalimmat naasoq ataaseq allangortippat uppernarsaaneq "naammassinngitsutut" nikippaa. Uppernarsaasut maanna V2 kisiat akuerimmassuk, taarsiineq una atsiornernut tamanut matuneqarpoq: atsiorneq naasunik marlunnik nassuerutiginngitsoq (imaappoq V1-imut kisiat uppernartoq) nikilersinnagu tassanngaannaq itigartinneqarpoq. author_pubkeypuuata iluani kinaassutsimut tunngavissarsuaq ilumoortoq ataavarpoq — isiginnaartut PISARIAQARPOQ saqqummiussamut kinaassuseqauthor_pubkey-imit aalajangiullugu (§9.5 attestation layer atorlugu)sender_labelupperinnagu.
Suliarineqarnerit sender_label imaluunniit reply_to atugaq isiginnaartumut saqqummiunissaminnut PISARIAQARPOQ uppernarsaaneqartoq kinaassusiat (pubkey fingerprint, attestation) saqqummiunneqartussatut pingaarnerpaartut, label-imullu pinngitsoq.
9.4 Uppernarsaanermut Periusissaq
1. Read sig_alg from QubEnvelope.
2. If sig_alg == 0x00 → unsigned. No verification. Display "unsigned qub."
3. If sig_alg is unknown → reject. Display "unrecognised signature scheme."
4. Extract author_signature and author_pubkey. If either is absent → integrity error.
5. Reconstruct sig_input using fields from QubEnvelope (V2 formula, §9.3).
6. Verify(author_pubkey, sig_input, author_signature). The V2 preimage is the
only accepted form — the legacy V1 fallback is retired (§9.3), so a
signature that does not verify against V2 fails, full stop.
7. If verification succeeds → display "signed by [key fingerprint]."
8. If verification fails → display "signature verification failed."
Atsiorneqarnermut uppernarsaaneq akiliuminartumik (ML-DSA-65 immikkut). PITSAAVOQ ingerlanneqartoq misissuinerit tamaat akinerusut (hash, qub_id, unlock_at) iluatsisimanerinit kingorna.
9.5 Kinaassutsimut Uppernarsaanerit
Kinaassutsimut uppernarsaanerit — author_pubkey-mut allaaserineq inungnut paasineqarsinnaasoq imaattumut qub handle, email, social handle, imaluunniit passkey credential — tassaapput isiginnaartup-tungaani sapinginnermut nikilersaaneq atsiorneqarnermut uppernarsaanermut PISARIAQANNGILAQ. Isiginnaartut attestation atortuusugaq saqqummiussumut kinaassusiat aalajangiisinnaasaat, taamaalimmat PISARIAQARPOQ malittarisaq atorlugu:
handle > email > social > fingerprint
Fingerprint-imut tigussaap atorneqartoq tassaavoq mikilersaagaq hex SHA3-256(author_pubkey)-imit; atsiorneqarsimasoq qub-imut tamaviarluni atortarpoq. Isiginnaartut saqqummiussinermut naatsorsorsinnaavaat — reference isiginnaartoq saqqummiisarpoq qub: malillugu byte-it sisamat siulliit aamma kingulliit (qub:<8 hex>…<8 hex>).
Suliarinneq attestation §9.4-mi misissuinerit tamaat suliarisinnaavaat qub API-mut attaverpata, naassaanngitsumut toqqorsivik aamma drand-imit allamiit atassutiusumik, atorfilersuuteqarfimi nakkutilliuneqarsimanaminnik. Attestation aalajangiussigit tassaavoq immikkut sapinginnerpaamik suliareqquneqartoq atsiorneqarnermut uppernarsaaneq iluatsillugu kingusiinnerusukkut.
9.6 Annertussusiisinnermut Sunniineq
| Ed25519 | ML-DSA-65 | |
|---|---|---|
| Atsiorneq | 64 byte | 3,309 byte |
| Pubkey | 32 byte | 1,952 byte |
| Tamarmiusoq qub-imut | 96 byte | 5,261 byte |
| Toqqorsivimmi akiliutiisalisinnerat (~$5/MB) | ~$0.0005 | ~$0.026 |
qub allataq 500–2,000 byte-imik annertutigisoq, ML-DSA-65 ataasiakkaarluni pingajussaq annertussusiisinaqaaq toqqarvigaata. Aki sapilinnerusoq mikiluartoq.
9.7 Atsiorqatigiisup Uppernarsaaneqarnera (Pact Bilateral Isumaqatigiissutit)
Bilateral isumaqatigiissutinut (content_type = 0x03), tullissaasoq atsiorneqarnerup ilaa tamarmik akiliisup assigiimmik aalajangersimanertik uppernarsaavaa.
Puuata naasui:
cosigner_pubkey: atsiorqatigiisup (Party B) ML-DSA-65 pubkey.cosigner_signature: Pilersitsisutut assigiimmutsig_input-imut atsiorneq (§9.3).
Naliliineq marluk PISARIAQARPOQ ataatsimoorlutik peqarpat imaluunniit marlukunnik peqanngitsoq. Ataasiullaaq peqarpat, isiginnaartut PISARIAQARPOQ akornutaqarnermut kukkunersiut saqqummiussissavaat.
Uppernarsaanermut periusissaq:
1. If cosigner_pubkey absent and cosigner_signature absent → no cosigner. Done.
2. If exactly one is present → integrity error.
3. Verify cosigner_pubkey != author_pubkey (prevent self-cosigning).
Fail → display "cosigner pubkey must differ from author."
4. Reconstruct sig_input using the same formula as §9.3 (V2 only — the
legacy V1 fallback is retired; all pact clients produce V2 signatures).
5. Verify(cosigner_pubkey, sig_input, cosigner_signature).
6. Success → display "co-signed by [cosigner fingerprint]."
7. Failure → display "co-signature verification failed."
Pissusii:
- Atsiorqatigiisup atsiorpaa
sig_inputpilersitsisutut assigiimmik — tamarmikqub_id,body_hash, aammaunlock_atassigiimmut paasaqartumik aalajangersimaaqaaq (aamma, V2-mi,sender_label_hashaammareply_to_or_zeroassigiit). - Atsiorqatigiisoq puuata byte-i raw-it atornagit V2 preimage utertissinnaaqqullugu, staging atorfilersuuteqarfik stage-inermi aalajangiisitsivoq pact puuata
sender_label-iapact_terms.party_a.label-imut assigisoq aammareply_topeqanngitsoq. Marluk tamarmik reference-client-ip pact-iini tamani atuupput; puui unioqqutitsisut staging-imi itigartinneqarput. qub_idaalajangiussaa (§4.1) atsiorqatigiisup naasunik peqanngilaq. Atsiorqatigiisoq puuata iluani peqartoq saqqummersisaq qub_id allangortikkussanngilaq.- Isumaqatigiissut pilersitsisup-atsiortikkani kisiat (illuariikkami aalajangersimaartumi), atsiorqatigiisoq-kisiat (immikkuusoq), imaluunniit marluk (tamarmik bilateral uppernarsaaneq) atsiorneqarsinnaaqaaq.
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
- Qulit:
#####tikillugit (#####imaluunniit######peqanngillat) - Atornerneq: kissasoq (
**), tilluartooq (*), kuusisooq (~~) - Allataq: ileqquinik aalajangersimasut (
1.) aamma aalajangersimasaqanngitsut (-,*) - Erseqqissaakkat (
>) - Allakkat: inline span-it (```) aamma pusinneqartut (`````)
- Pissuserivigineqarnermut sineriaq (
---) - Allakkanut killiit (sineriap kingullia marlunnik byte imaluunniit illuariikkami uagut)
- Paragraffit
10.2 Inerteqquniarneqartut Atortut
| Atortoq | Suliarineqarnera |
|---|---|
Raw HTML (<div>, <script>, allallu) |
Tamaat peerneqartoq. HTML allamillu ingerlatassanngilaq. |
Assit () |
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:
- Markdown parse-erluku
pulldown-cmarkatorlugu (assigissaat). - AST-imut sangussigit nuna allowlist-imi peqanngitsumik ungalulluku (§10.1).
- Atassutimut nuna: URL saqqummiussit takutinneqartumi allatat, klik-erneqarsinnaasumut
<a>atortumut pinngitsoq. - AST sungiusarsimasoq taakkua typed intermediate representation-imut (assersuutigalugu,
MarkdownNodeenum sanasoq sianigissummut variantinik kisiat). Raw HTML tassani IR-mi atortuneqarsinnaanngilaq. - Typed IR-mit render-eriarluni view layer tikilluuk (assersuutigalugu, reactive view atortut, DOM nuna). HTML oqaaseqatigiinik ataqatigiissaareqqitsineq imaluunniit
innerHTMLpeqannginnera.
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
- Renderineqarsimasut qule annertunersaq:
####(H4).#####aamma anggorlugu kissasoq allataq render-erneqarput. - Paragraf-it amerlassuserisitassanngilaq (timaa annertussuserisaa §6-mi killiliinerit aaqqissuussamiut atorlugit).
- Allakkat pusinneqartut: syntax highlighting-eqanngilaq MVP-mi. Monospace preformatted allatat-tut render-erneqartoq.
11. Inummi-Pingajuanut Uppernarsaaneq
Inuk pingajuat byte-inik toqqorneqarsimasunik (private/wrapped qub-imut K ilanngullugu) tigumminnittoq qub suleqatiginagu cryptographic artifact-imik uppernarsaasinnaavoq. Piffissaq piusimaneranut nammineerluni timestamp-ilerneqarsimasoq uppernarsassagaanni per-qub permanent-storage inclusion uppernarsarneqartoq imaluunniit §16 transparency-log proof uppernarsarneqartoq pisariaqarpoq.
1. Obtain the stored bytes. For a private delivery, also obtain K from the
delivery-link fragment.
2. Resolve the delivery shape (§8 step 3a): unwrap OuterWrapper with K, or
accept bare SealedQubCbor. Require shape/visibility agreement.
3. Parse SealedQubCbor → SealedQub; validate protocol version, visibility,
content type, chain identity, and structural bounds.
4. Recompute expected_round from unlock_at (§4.3); require the stored round
(allowing the documented legacy minus-one case) and ciphertext-stanza round
to agree exactly as §8 step 6a specifies.
5. Obtain the drand signature for SealedQub.drand_round and verify its BLS
signature against the pinned chain public key.
6. tlock_decrypt(tlock_ciphertext, round_signature) → QubEnvelope CBOR bytes.
7. Parse → QubEnvelope.
8. Verify SHA3-256(body) == body_hash.
9. Verify envelope/sealed equality for qub_id, unlock_at, and outcome_at.
10. Recompute qub_id from the decrypted fields, sealed drand_round, and title;
require it to equal the carried qub_id (§4.1).
11. If sig_alg != 0x00, verify the V2 author signature (§9.4). If cosigner
fields are present, verify their pairing, key separation, and signature
(§9.7).
12. For an existence-time claim, independently verify either:
a. the permanent-storage transaction's data-to-id binding, owner, block
inclusion, and block timestamp; or
b. a §16 inclusion proof through its pinned anchor and anchor block time.
13. Report each verified claim separately; do not collapse an absent storage
or anchor proof into a successful timing verdict.
Uppernarsaaneq sumut uppernarsaat:
| Uppernarsaammut input | Suna aalajangerneqartoq |
|---|---|
| Bundle / sealed artifact eqqortoq + drand signature | Body recovered body_hash-imut naapertuuppoq; metadata qub_id-imut pituttorsimasoq allanngorsimanngilaq; ciphertext drand round nalunaarutigineqartumut pituttorsimavoq; round-ilu taanna qaangiussimavoq. Tamanna ciphertext qaqugu pilersinneqarsimanersoq uppernarsaatiginngilaa. |
| V2 author/cosigner signature eqqortoq | Secret key naleqquttoq tigummisup §9.3-mi signed surface authenticate-rsimavaa. |
| Per-qub storage transaction nammineerluni uppernarsarneqartoq | Ciphertext toqqorneqarsimasoq exakt block timestamp-ianut kingusinnerpaamik piusimavoq. |
| Transparency-log proof anchor-ilerneqarsimasoq eqqortoq | §16.11-mi leaf-kind-imut claim, anchor block-imit commitment time upper bound ilanngullugu. |
Uppernarsaaneq suna NALI uppernarsaatiginngilaa:
| Uppernarsaaneqanngilaq | Pissutaa |
|---|---|
| Pilersitsineq | sender_label saqqummersinermut label-iinnaavoq. sig_alg ≥ 0x01 peqanngippat kinaluunniit imarisat matussimasinnaavai. |
| Siunertaq | Artifact-ip byte-it cryptographic relationship-illu uppernarsarpai, pilersitsisup qanoq eqqarsarsimanera pinnagu. |
.qub kisimi atorlugu commitment siusinnerusoq |
Pilersitsisoq round pituttorsimasoq qaangiutereerpat bundle valid pilersissinnaavaa. Drand signature embedded-iusup round qaangiussimanera uppernarsarpaa, ciphertext-ip siusinnerusukkut piusimanera pinnagu. |
| Seal-button-ip piffissaa exakt | Storage imaluunniit anchor block timestamp upper bound nammineerluni uppernarsarneqarsinnaasoq, atuisup najukkami iliuusianit kingusinnerusinnaasoq. sealed_at / received_at assertion-it uppernarsaatitut atorneqanngillat. |
Transparency log implementererneqartoq (§16) qub-it akornanni verification-imut tulleriiaarneq allanngortinneqarsinnaanngitsumik takussutissaqartoq aamma commitment time upper bound tatigineqarsinnaasoq (anchor block time) ilannguppai, leaf kind (§16.11) tunngavigalugu killilerneqartoq. Authorship imaluunniit intent ilanngutinngilai; byte-blind upload path default-imi nammineq body_hash imaluunniit drand_round uppernarsaatiginngilai, taakku artifact check-init suli pissarsiarineqarlutik.
12. Versionerneqarnera Saqqummersitsinermullu Aqutsineq
Dokumentip release-i, inner wire protocol aamma outer wrapper version space-nik immikkoortunik peqarput. Taamaattumik dokumentiinnaq pillugu erseqqissaat conforming byte-inik allanngortitsinngilaq, wire migration siunissamiittoq editorial revision-itut saqqummersinneqarsinnaanani.
12.1 Dokumentip Saqqummersinnerata Versionia
Erseqqissaaneq una semantic document release (MAJOR.MINOR.PATCH) aamma Git tag allanngortinneqarsinnaanngitsoq protocol-v<release> atorpai.
- PATCH: Eqqortuunermut imaluunniit editorial correction, conforming byte-inik behavior required-imilluunniit allanngortitsinngitsoq.
- MINOR: Normative addition backward-compatible, registry entry nutaaq, imaluunniit sidecar format namminerisaminik versionilik nutaaq.
- MAJOR: Normative change incompatible, wire interpretation required nutaaq ilanngullugu.
Release status tassaavoq Draft (suli normative-iunngitsoq), Current (implementation target kisimi innersuussutigineqartoq), imaluunniit Superseded (historical verification-imut pigiinnarneqartoq). Route /protokoli version-eqanngitsoq release Current takutippaa; release tag-ip source exakt locale-illu tamarmik tassani saqqummersinneqartut pigiinnarpai. Status release number-iluunniit allanngortinneqassappat table una release history-lu change reviewed ataasiusumi nutarterneqassapput.
| Dokumentip release-ia | Atulersinneqarnerata ulloq | Killiffik | Wire protocol | Wrapper | Source |
|---|---|---|---|---|---|
| 1.0.0 | 2026-09-23 | Maannakkut atuuttoq | 0x01 |
0x01 |
protocol-v1.0.0 |
12.2 Protokolip Versionia
SealedQub aamma QubEnvelope tamarmik version field (u8) protocol major version nalunaarutigaat.
- Isiginnaartut major version ilisimaneqanngitsoq erseqqissumik error-imik itigartittariaqarpaat.
- Major version ilisimaneqartup iluani decoder-it CBOR map key ilisimaneqanngitsoq itigartittariaqarpaat (§3.1); schema evolution
versionnutaaq atorlugu pivoq, key decoder-ip nipangiutiinnarlugit qaangiinnarsinnaasai ilanngullugit pinnani. - Content type (
content_type) aamma signature scheme (sig_alg) version-gated-iupput: value nutaaq protocol version nutaamut imaluunniit registry update explicit-imut aatsaat ilanngunneqarsinnaavoq.
12.3 Protokolip Versioniata Oqaluttuassartaa
| Versioni | Naliliineq | Erseqqissaaneq |
|---|---|---|
| v1 | 0x01 |
Delivery private/wrapped aamma public/bare; text (0x01), pact (0x03) aamma verdict (0x04) body-t; ML-DSA-65 V2 author/cosigner signing; drand quicknet tlock; SHA3-256. |
12.4 Siunissamut Akuersaarsinnaaneq
V1 viewer-ip QubEnvelope-imi CBOR map key ilisimaneqanngitsoq (§3.2 canonical order-imiinngitsoq) takuguniuk decode error-imik itigartittariaqarpaa (§3.1). Forward compatibility version field atorlugu pivoq, key tolerance atorlugu pinnani: future addition—even metadata minor—version value nutaap ataani saqqummersinneqassaaq, v1 viewer-ip “protocol newer” error erseqqissumik itigartillugu content signature-mut pituttorsimasoq nipangiusumik peersinnagu.
V1 viewer-ip sig_alg = 0x01 takuguniuk ML-DSA-65 verification tapersersunngikkaluarlugu, qub content “signature present but not verifiable” notice-ilimmik takutittariaqarpaa, qub tamakkerlugu itigartinnagu. Reference implementation-i ullumikkut 0x00 aamma 0x01 avataaniittut itigartippai, v1 registry-mi algorithm valid alla peqanngimmat. Soft-fail behavior algorithm pingajuat §9.2-mut ilanngunneqareerpat pingaaruteqassaaq.
12.5 Outer Wrapper Versionia
OuterWrapper §13-miittoq nammineq version byte-eqarpoq, SealedQub.version aamma QubEnvelope.version-imit immikkoortoq. Version space-it marluk immikkut ineriartorput: symmetric replacement siunissamiittoq wrapper byte qaffassavaa inner protocol version allanngortinnagu, protocol addition siunissamiittoq inner version qaffassavaa wrapper byte allanngortinnagu.
OUTER_WRAPPER_VERSION_* |
Naliliineq | Algoritmi | Killiffik |
|---|---|---|---|
OUTER_WRAPPER_VERSION_1 |
0x01 |
AES-256-GCM, nonce 12-byte, authentication tag 16-byte, AAD qub_id-imut pituttorsimasoq |
Private delivery-mut atuuttoq |
| — | 0x02–0xFF |
Reserved | Siunissami |
Viewer-ip wrapper version ilisimaneqanngitsoq erseqqissumik error-imik itigartittariaqarpaa. Protocol specification-ip wrapper-version registry mikisoq pigiinnassavaa concrete replacement saqqummerpat; 0x02 algorithm specification peer-reviewed peqarpat aatsaat allocate-rneqassaaq.
13. Avammut Isertorneqarnermut Pusinneq
13.1 Naapertuusaaq
Protokolip iluai (QubEnvelope → tlock → SealedQub) qub matusereersimasoq suliarivaat piffimmik-matusersuagaq: timaa atuarneqarsinnaanngilaq unlock_at aamma drand-imi anguinnermi atsiorneqarnera saqqummeruttutarpat. Matusinerup kingorna, anguinnerup atsiorneqarnera tamanut nalunaarutigineqarpoq aamma SealedQub CBOR-imi aaqqissuussamiut suluat paasiuminaapput, taamaalimmat nakkutilliuneqarsimasoq naassaanngitsumut toqqorsivik indeks-iarsimasoq qub corpus tamarmiusoq bulk-mik isertinnaarsinnaaqaaq.
Private delivery-mut outer encryption wrapper channel taanna matuarpaa canonical SealedQubCbor aamma byte-it toqqorneqarsimasut akornanni symmetric AEAD layer immikkut inissillugu. Browser-seal path-imi 256-bit key K delivery URL-ip fragment-iani atortunilu kisimiippoq; browser-it URL fragment-inik server-inut nassiussineq ajorput, taamaattumillu qub.social, storage gateway-it CDN-illu K-mik takunnissinnaanngillat. Private qub-ip stored representation-ia taamaattumik ciphertext opaque-iuvoq, pilersitsisup URL-ia avitseqatigiissutiginngikkaanni plaintext utertinneqarsinnaanani. Public delivery layer taanna siunertaqarluartumik atunngilaa (§13.8).
Tamarmiusoq akeqartoq:
- Private delivery-mut enumeration-imut akornut.
OuterWrapperstructured CBOR-itut ilisarnarpoq—random byte-init literally immikkoortinneqarsinnaanngitsuunngilaq—kisianni ciphertext field-ia innerSealedQubshape ilisarnartoq toqqorpaa. Harvester-ip periusiata allaaserineqartup "bare qub-shaped upload-inik GraphQL query-ineq, public drand signature-nik bulk-decrypt-ineq" K-qanngitsoq plaintext-imik angusaqarsinnaanngilaq. - Default private browser flow-mi crypto-shredding privacy posture. qub.social default server-side data-niit artifact toqqorneqarsimasut matuersaajarsinnaanngilai. Recovery explicit-i, public delivery aamma trusted server-side sealing tamarmik trust boundary-mik saqqummiunneqartumik allaanerusumik peqarput.
- Marluusumik akornutaaq inissaarpoq. Default = nittartakkamut-aalajangerneqarsimasumik atorneqarnera (kapital una). Tigussatumut-isertorneqarsimasut iluartumik qub iluartumik (fase-2-mi atortussaq sernigineqarsimasoq, suli allaaserineqanngitsoq) tassanngaannaq aalassartussaapput marluniit tunngaviutut.
13.2 Pusinnerit Tulleriaarnerinik
plaintext body ← QubEnvelope.body (§2.2)
↓ canonical CBOR (§3)
envelope CBOR
↓ tlock encrypt to drand round (§7 step 10)
tlock_ciphertext (inside SealedQub) (§2.3)
↓ canonical CBOR (§3)
SealedQubCbor bytes ← inner wire artifact
├─ public (visibility=0x01) ───────────────▶ stored directly (§13.8)
└─ private (visibility=0x00)
↓ AES-256-GCM(K, nonce, AAD=qub_id) (§7 step 12, this section)
OuterWrapper CBOR bytes ← stored private payload
Matusinissaq aamma qaffaanissaq protokoli-iluani (§7, §8) allangortinneqarunnaarput pusinneqartumi killinganit; pusinneqartumi attaviginneqarpoq seal() allaffigineqarsimanerani aamma kuiakkani unlock()-imi.
13.3 OuterWrapper Paasissutissat Aaqqissuussaat
struct OuterWrapper {
version: u8, // 0x01, see §12.5
qub_id: [u8; 32], // copied from inner SealedQub; AEAD AAD
nonce: [u8; 12], // 96-bit AEAD nonce
ciphertext: Vec<u8>, // AES-256-GCM(K, nonce, SealedQubCbor, AAD=qub_id) || 16-byte tag
}
Naasut aalajangersaasut.
versionPISARIAQARPOQ0x01v1.0 wrapper byte-mut.qub_idPISARIAQARPOQ SealedQub-imiqub_idfield puuiarneqareernerani utertinneqartumut assigissasoq. Reference-imiwrap_sealed_qubaammaunwrap_sealed_qubtamarmik inner CBOR parse-ertarpaat, assiginnerlu toqqaannartumik enforce-erlugu; AAD binding-ip outerqub_idwrap-ereernerata kingorna allanngortinneqarnera authentication-imi immikkut unitsippaa.noncePISARIAQARPOQ 96 bit (12 byte), CSPRNG-imit pussunnermi tamarmik nutaaq pilersinneqartoq. Nonce-imik isumassuissaq assigiimmi atoqqilluni AEAD nonce-imik atoqqissimanermut akornutaqarnermik plaintext utertinnermut periarfissiuvoq; suliariniartut PISARIAQARPOQ (key,nonce) marluugarput atausiakkaartumik atussallugit.ciphertextAES-256-GCM-imi output: ciphertext byte 16-byte uppernarsaanermut tag-imut ataqatigiinneqarsimasut.ciphertext.len() == SealedQubCbor.len() + 16eqqortumik.
CBOR-imi allaaserineq. §3 naapertorlugu canonical CBOR, key-itik ileqqui malittarisaq assigaa (byte-itik allaaserineqartut takinersaat siulleq, taava lexicographic). Naasut sisamat:
| Key | Allaaserineqartut byte | Ileqqua |
|---|---|---|
nonce |
6 | 1 |
qub_id |
7 | 2 |
version |
8 | 3 |
ciphertext |
11 | 4 |
OuterWrapper CBOR byte siulleq taamaalimmat takissuseq-aalajangersimasoq map qulequtaa 4-isunut naasoqartumut (0xA4).
13.4 AAD-imut Atassusernera qub_id-mut
Pusinneqartoq qub_id aalajangersarpaa AEAD-imi additional authenticated data tut. Una tassaavoq aalajangersimaartoq akornutsisup pingasunut akornusersisaqarnermut:
| Akornusersaaneq | Akornusersaaneqarnernut |
|---|---|
Ciphertext nuussinniaqit qub_id naasunut allat pusinneqartumi |
AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq |
| URL fragment qub A-mut stored byte-it qub B-meersut akulissukkit | Key kukkusoq (aamma AAD namminersortumik pituttorsimasoq) → AEAD uppernarsarneq naammasinngilaq |
Allangortikkit qub_id naasoq pusinneqartumi upload-imi kingorna |
AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq |
qub_id pusinneqartumi plaintext-imi tigussinnaalersimagaa enumeration kappiisaalinerunik akornusersuinngivippoq — qub_id imminuna SHA3-256 hash §4.1 preimage atorlugu utertinneqarsinnaanngitsuni digest-imi, aamma nakkutilliuneqarsimasoq pusinneqartumi byte-mik kataginnermik pissarsivigineqarsimasoq sumi tamani upload-mi paasisaminik ilisariniqallisaqartumit.
13.5 Pussunissamut aamma Pusiata Qaffaanissamut Algoritmiit
wrap_sealed_qub(SealedQubCbor S, qub_id Q, key K, nonce N):
require K.len() == 32 and N.len() == 12 and Q.len() == 32
I := canonical_cbor_decode(S) as SealedQub
require I.qub_id == Q // reject mismatched caller AAD
C := AES_256_GCM_encrypt(key=K, nonce=N, msg=S, aad=Q)
// C includes the 16-byte authentication tag at the end
return canonical_cbor_encode(OuterWrapper{
version: 0x01,
qub_id: Q,
nonce: N,
ciphertext: C,
})
unwrap_sealed_qub(OuterWrapper bytes W, key K):
require K.len() == 32
O := canonical_cbor_decode(W) as OuterWrapper
require O.version == 0x01 // §12.5
P := AES_256_GCM_decrypt(
key=K, nonce=O.nonce, ciphertext=O.ciphertext, aad=O.qub_id
)
// any AEAD failure → DECRYPT_FAILED, indistinguishable to caller
S := canonical_cbor_decode(P) as SealedQub
require S.qub_id == O.qub_id // explicit inner/outer cross-check
return P // P is the validated SealedQubCbor
Naammasinniaqitanut katigineq. K kukkupput, nonce kukkupput, AAD assingunngitsoq, ciphertext malugaq tamarmik DECRYPT_FAILED kukkunersiummik assigiimmik saqqummiusisarput. Una tassaavoq AEAD-mut aalajangersimaartoq pissusi: naammasinneq sumut paasineqassappat allatigut tunngavissaqarpoq ungasinnerusumi akornusersisup misissornagulu pussunneqarsimasut malugaq nassiullugu pisillugulu nipangatsillugu. Reference-imi suliarineqarnerat PISARIAQARPOQ tamaat AEAD-mut naammassinngitsut atausiaannarluni kukkunersiummut piittussaapput.
13.6 Isumassuissamut Atortut aamma Aalakoorneqarnerat
Pusinissamut isumassuissaq K 256-bit uniformeqartumik sianigissummik tigussaq qub-imut tamaviarluni CSPRNG-imit pilersinneqartoq. Reference suliarineqarnerit pisarput:
- WASM pilersitsisup:
getrandom(WebCryptowasm_jsbackend-imi atorlugu). - Server-imi-tungaani seal API caller-i: nammineq CSPRNG-ia; caller-ip
Kwrapper_key_b64url-itut tunniuppaa akimartillugulu. Worker-iKwrapper-imut memory-mi atorpaa, kisianni TOQQORNEQASSANNGILAQ. Tamanna periarfissiivoq idempotent-imi misileqqinnermut akissut ilaanik peersagaq utertitsisinnaanissaanut, caller-ip akimartitani pisinnaatitaaffia atorlugu, server-imit-pilersinneqartumi ataasiakkaartumik isertugassamut tunngaviginnagu.
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
- Pilersitsisup atsiorneqarnera (§9) allangortinneqarsimanngilaq: atsiorneqarnera naatsorsoriarneqartoq
QubEnvelopeiluani aamma utertinneqarpoq pussunneq → tlock qaffaaneq → CBOR parse kingorna. - Recipient-public-key encryption (
recipient_pubkeyfield reserved) tassaavoq feature siunissamiittoq ullumikkut private link-capability-gated wrapper mode-mit immikkoortoq. - Server-side pact co-sign flow atuuttoq public/bare
SealedQubCborvisibility0x01-imik pilersitsisarpoq; browser-only K secrecy model naammassisinnaanngilaa final sealing server-mediated co-sign kingorna pisarmat. Private-pact producer siunissamiittoq wrapper taanna atorsinnaavaa, inner content type-imut byte-blind-iusoq.
13.8 qub tamanut (pusinneq peerneqarsimasoq)
Avataani pusinneq tassaavoq tunniunnermi killinganni sapinginnermut piumassusiisartoq. Pilersitsisoq qub matusersinnaavaa tamanut, taamaalimmat canonical SealedQubCbor storage pipeline-imut toqqaannartumik isertarpoq, OuterWrapper qulequtaqanngitsoq aamma isumassuissaq K peqanngitsoq:
SealedQubCbor bytes ──(public)──▶ stored as-is
SealedQubCbor bytes ──(private)─▶ AES-256-GCM(K, …) ▶ OuterWrapper ▶ stored
qub tamanut tassaavoq piffimmik-matuneqarsimasoq kisiannili nittartakkamik-matuneqarsimanngitsoq: drand-imi anguinnera saqqummeruttunnagu atuarneqarsinnaanngitsoq (tlock-ip killinga allanngortinneqarsimanngilaq), kisianni matuserneqareerpat storage transaction id-imik tigussaqartoq kinaluunniit isertorsinnaavaa — URL-imi fragmenti pisariaqanngilaq, K peqanngimmat. Una tassaavoq aalajangersimaarluni akeqartoq killinganut server-ip ingerlatariaqakkaanut: matuserneqarnermut nalunaarummut email-it, fragment-eqanngitsut oEmbed/auto-embed link-it, aamma matuserneqareernerup kingorna SEO pitsaanerusoq tamarmik nittartakkamik pisariaqartippaat server-ip sumiluunniit tigummiunngisaanik isumassuissamik atornagu sulisartumik (§13.6). qub private-iusoq suli explicit <qub-embed src="full_delivery_url"> form atorsinnaavaa publisher-ip fragment-imik nassataqartumik capability tamakkiisoq tunniuppagu.
Producer-ip eqqumaffigisariaqakkai:
Enumerationi-mik kappiisaalisarneq peqanngilaq. qub tamanut §13.1 enumerationi-mik-kappiisaalisarnermut pissusersiortut pilersitsiviminik peerpaa. Reference upload atorfilersuuteqarfik taakkununnga (taakkununnga kisimik)
Visibility: publicnaassaanngitsumut-toqqorsivimmik tag-imik naqissivoq, taamaalimmat aalajangersimaarluni nassaartuneqarsinnaapput; qub iluartumut taama tag-eqanngillat aamma byte-mit nalunaaqutsisinnaanngitsoq attatippaat.Plaintext-imi qulequtaq matusinermi piffimmi saqqummiineqartoq. §3.2
titlenaasoq tassaavoq plaintext-imiSealedQubCboriluani. Pusinnerup ataani isertorneqarpoq isiginnaartupKtunniunnera tikillugu; pusinneq peqanngippat naassaanngitsumut toqqorsivimmi tamanut-atuarneqarsinnaasoq uploadiniarnermi piffimmiit, matuserneqarnerup sioqqullugu. Pilersitsisup atortui naapertuuttut PISARIAQARPOQ matusinermi piffimmi una saqqummiussisut.Nassaarineqarnera structural-iuvoq cross-check-erneqarlunilu. Isiginnaartoq/embed conforming-i stored shape-it marluk parse atorlugu immikkoortippai: byte-it
OuterWrapper-itut parse-rneqarsinnaasut unwrap-with-Kpath tiguaat; byte-it bareSealedQubCbor-itut parse-rneqarsinnaasut toqqaannartumik akuerineqarput. Inner value recovered-iusoq shape-mut naapertuuttariaqarpoq (0x00wrapped/private,0x01bare/public).qub_idvisibility-mut pituttorsimanngilaq, canonicalSealedQubbyte-illi visibility nassartarpaat, taamaattumik public aamma private inner encoding byte-identical-iunngillat.
Iluartoq (pusinneqartoq) default-ttuassaaq; tamanut tassaavoq pilersitsisup qub-imut ataasiakkaartumik erseqqissumik toqqagaa.
14. Misilernermut Vektorit
14.1 qub_id Aalajangiineqarnera
Input:
version = 0x01
content_type = 0x01
created_at = 1735689600 (2025-01-01 00:00:00 UTC)
unlock_at = 1736294400 (2025-01-08 00:00:00 UTC)
outcome_at = absent
drand_round = 4695446 (= floor((1736294400 - 1595431050) / 30) + 1, §4.3 mapping, drand mainnet params §14.2)
body = "Hello, future." (UTF-8, 14 bytes)
title = absent
Intermediate:
body_hash = SHA3-256("Hello, future.")
= 76ab8b3f843c6ed4f2d0fd75b9f457b4
ad49dd4450f9c22723ae430e3af3211d
title_hash = [0u8; 32] (title absent — §4.2.1 sentinel)
Domain separator (10 bytes):
[0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00]
Preimage (108 bytes—current protocol v1):
domain_separator || // 10 bytes
0x01 || // version
0x01 || // content_type
0x0000000067748580 || // created_at as i64 big-endian (1735689600)
0x00000000677DC000 || // unlock_at as i64 big-endian (1736294400)
0x0000000000000000 || // outcome_at_or_zero (outcome_at absent)
0x000000000047A596 || // drand_round as u64 big-endian (4695446)
body_hash || // 32 bytes
title_hash // 32 bytes (all-zeros sentinel; title absent)
Expected output:
qub_id = SHA3-256(preimage)
= 4a84e3dfaec32954949c30073f8e6506
fd3204c1bb97f9162b81c7587afe412e
Implementation-it input-imut body_hash aamma qub_id exakt assingusut pilersittariaqarpaat. Test vector una unit test-imi siullertut allanneqartariaqarpoq. Value canonical-it qulaaniittut reference implementation-imit naatsorsorneqarput bit-for-bit naapertuuttussaallutillu. Historical pre-launch prototype layout-it (siulliit marluk live qub-inut atorneqanngitsut) outcome_at sioqqullugu 92 byte (3d9fc2390eab043d38a1669ed3b71be76f9eefe872b9569ab1aaa027b88392b0) aamma outcome_at_or_zero ilanngunneqareermat 100 byte (b0d032898ad629795150fdcb3f84e518f59ed05b7a2a82bc24ebdb87f52144ed) atorsimavaat. Layout atuuttoq 108-byte kingorna drand_round aamma QUB_ID_V2 domain separator ilannguppai. Vector 108-byte siulleq legacy ceil mapping (drand_round = 4695445) atorlugu 3a9fcb31b750d985c262fada6d4f777fd6a28be831d941d85c131f5a4bbaf8a4 pilersippaa—round input-imut qub_id eqqortuuvoq, assersuut qulaaniittoq §4.3 current-round mapping malillugu.
14.2 Matusernermut Anguinnermut Allaaserineq
Input:
unlock_at = 1735689600
chain_genesis_time = 1595431050
chain_period_seconds = 30
Calculation:
(1735689600 - 1595431050) / 30 = 4675285.0
floor(4675285.0) + 1 = 4675286
drand_round = 4675286
Round 4675286 1595431050 + (4675286 - 1) * 30 = 1735689600-imi saqqummersinneqassaaq—unlock_at-imut exakt, sioqqulluguunngitsoq. (Legacy pre-release ceil mapping-ip 4675285 toqqarpaa, 1735689570-imi saqqummersinneqartoq—sekundinik 30-nik siusinnerusukkut; uppernarsaasut legacy round taanna §4.3 naapertorlugu akuersaarput.)
14.3 Aaqqissuussamiut CBOR-imi Sineriarneqarluni Round-Trip
Suliarinneq PISARIAQARPOQ misissussavoq serialize(parse(serialize(qub))) == serialize(qub) input ajornanngitsut tamaviarluni. Una pissutsinik misilernermut, vektoriiluunniit ataasiusoq pinngitsoq.
14.4 PactTerms CBOR (content_type 0x03)
Input:
pact_version = 1
title = "Scooter deposit"
terms = [
{ key: "Item", value: "Honda Metropolitan scooter" },
{ key: "Price", value: "$100" },
{ key: "Deposit", value: "$10" }
]
party_a = { label: "Alice" }
party_b = { label: "Bob", contact: "bob@example.com" }
notes = absent
Canonical CBOR key order (PactTerms):
"notes"(6) < "terms"(6) < "title"(6) < "party_a"(8) < "party_b"(8) < "pact_version"(13)
Canonical CBOR key order (PactTerm):
"key"(4) < "value"(6)
Canonical CBOR key order (PartyIdentifier):
"label"(6) < "contact"(8)
Aaqqissuussamiut CBOR byte aamma SHA3-256 body_hash reference-imi suliarineranit naatsorsuiniarput. Suliarinneq PISARIAQARPOQ byte-mut assigiimik CBOR saqqummiussissasut input matumut.
Suliarinneq PISARIAQARPOQ aamma misissussavoq serialize(parse(serialize(pact))) == serialize(pact) input ajornanngitsut tamaviarluni PactTerms (pissutsinik misilerneq).
14.5 Avammut Pusinneqartumi Oqaatsit-akornanni Vektorit
Avammut pusinneqartoq (§13) immikkut canonical fixture-eqarpoq crates/qub-core/tests/vectors/wrapper_v1.json-imi. Pissutsit tamarmik (key, nonce, qub_id, sealed_cbor) tuple-itik paasiuminaajunnaartumik hex input-itut aalajangersarpaa aamma expected_wrapper_hex output aalajangersamik aalajangersaarpaa. Marluit reference suliarineqarnerit JSON-imi atausiarluni atortuneqarput:
- Rust:
crates/qub-core/tests/wrapper_vectors.rs(cargo test -p qub-core --test wrapper_vectors). - TypeScript:
workers/api/src/crypto/__tests__/wrapper.test.ts(npm test).
Fixture-ip low-level wrapper case pingasut aalajangersarpai. Taakku deterministic OuterWrapper encoding aamma AEAD interoperability §13.8 delivery-shape invariant-imit immikkoortillugit misilittarpaat; immikkut basic-text-public-ip historical name-ia inner visibility = 0x01-alu wrapped byte-inik public delivery conforming-inngortitsinngillat. Producer-ip public inner byte-it bare-iusut toqqortariaqarpai private (0x00) inner byte-iinnarlu wrapped-issallugu.
| Pissut | Tunngavik |
|---|---|
basic-text-public |
Historical low-level fixture name. SealedQub shape piviusorpalaartoq mikinerpaaq optional field-eqanngitsoq; wrapper byte-iinnaq misilittarpai §13.8 stored delivery conforming-iunani. |
with-recipient-pubkey |
SealedQub recipient_pubkey-imik aalajangersimasalik (reserved future path). Inner CBOR key set allaanerusoq misilittarpaa; fixture content-i immikkoortoq nammineerluni qub_id allaanerusoq pilersippaa (recipient_pubkey nammineq §4.1 preimage-imiinngilaq). |
longer-body |
~4 KiB timaa — multi-byte CBOR takissuseq qulequtaalu iluani puuata aamma avammut ciphertext atortunut. |
Suliarinneq PISARIAQARPOQ byte-mut assigiimik expected_wrapper_hex saqqummiussissasut input toqqorneqartumut. Fixture-i pilersinneqaqqissasoq pisariaqartumut QUB_REGEN_VECTORS=1 cargo test -p qub-core --test wrapper_vectors atorlugu aamma aalajangersarsimavoq erseqqissumik aaqqissuussamiunut allanngorsitsineq.
15. Crypto Profilemut Aqutsineq (Siunissami)
Kapital una nalunaarut v1-mut aamma normativeqalersuni siullermik aaqqissuussamiunut allamut qub-imi cryptografiamut akuusaartoq isertoqattaarsimasoq.
15.1 Maannakkut Killiffia
Protocol v1 primitive-imut algorithm ataasiinnaq pituttorpaa:
- Atsiorneqarneq: ML-DSA-65 (
sig_alg = 0x01; public key 1952-byte, signature 3309-byte) aamma unsigned (sig_alg = 0x00). Codebase-ip0x02Ed25519-imut reserve-rpaa, protocol v1-imili activate-rnagu; v1 verifier-ipsig_alg{0x00, 0x01}avataaniittoq itigartittariaqarpaa. - Piffimmik-matuserneq: drand quicknet kisiat — piorsaaviup hash-iat, pubkey, genesis-piffia aamma piffissaq tassaapput network-imut parameter-it aalajangersimasut reference
DrandTimelockProvider::quicknet()(crates/qub-core/src/tlock.rs) aammaconfig/drand-endpoints.json-imit nassartakkat. - Avammut pusinneqartoq: AES-256-GCM v1 kisiat (§13).
Verifier-it primitive active-imut key- aamma signature-length hardcode-rpaat. sig_alg wrapper-version byte-ilu selector explicit-iupput, v1-ili in-band negotiation-eqanngilaq value active-it qulaaniittut kisiisa akuersaarlugit.
15.2 Siunissaminni Suluk
Algoritmi aappassinngneq protokolimut iserpat, uppernarsaasoq taqqaffigineqarpoq CryptoProfile taagisamut (assersuutigalugu, ExqubV1) aalajangersimasunik naliliisanut atortussunut atortunit — sig_algs, drand piorsaaviit, wrapper versionit, content type-it. Profil aalajangerneqarpoq uppernarsarnermi piffimmi, in-band-mi pisarpoq oqaluttuussassanngilaq. Naliliineq tamaat profilemi atortuujungippat itigartinneqarput.
Una qulakkeerpaa ML-DSA-87-mik ilaatittumik imaluunniit Ed25519-mik atorlugu kingumut uppernarsaasut atortullu uppernarsaasut nikilersaaneqarsinnaanngitsoq: v1 uppernarsaasoq v1 uppernarsaasutut pissimaaqissaaq v2 profili saqqummiussinneqareerpat.
15.3 Akornisaaffigineqarluni Pissusii
§15-mik normativetut suluit isumagineqaqquk apuuttortumut una imaattumut:
sig_algbyte aappa (Ed25519 atortunngorlugu, ML-DSA-87, imaluunniit §9 registri-mi naliliineq nutaaq).- Drand piorsaavik aappa atorfimi.
- Avammut pusinneqarnerni versioni aappa.
- Transparency-log-imi tatigineqarnermut tunngaviup rotation-ia—
LogProfile.anchor_owneraddress imaluunniit receipt-key public key pinneqartoq (§16.6).LogProfile§15.2-mi profile surface-imut primitive-tut aqunneqartutut ilannguppoq: rotation tassaavoqLogProfileqaffaaneq atsiorneqarsimasoq verifier update-mi tunniunneqartoq (rotation pilersaarutigineqartut anisoq → isersoq cross-sign-ertarpaat; compromise-mit rotation-it taamaaliorsinnaanngillat, qaffaaneq una prev-anchor fork check-ilu akornusersuinerup nalaani ajoqusiineq killilersorlugu isumalluutigalugu). Transparency-log-imi version space-it (LOG_VERSION,ANCHOR_FORMAT) sibling-itut namminersortutut ineriartorput, §12.5-mi wrapper version protocol version-imit namminersorneranut exakt assigalugu.
Tassanngaannaq §15-mi sumiiffeqarsimavoq aalajangersuusermi siunissami PR-it siusinnerusumi naapertorlugu tikiunneqartussaatut tikkuagaq atorlugu pinngivissumi aappassinneqannginnermik atortussaq atortugaq sungiussatsillugu.
16. Ersarissuseq Log aamma Durabilitet Tier (Atortuulersinneqarpoq — misissuineq naammassineqarpoq)
Inissisimanermik nalunaarut. Immikkoortoq una tassaavoq atuutilersinneqarpoq (W5/UP-B1, Fase 1–8), tunisassiortoq aammalu trust-root-ip annertussusaa uani allassimasoqarluni. Trådformatit, hashing aamma uppernarsaasiinermi aqqutit live-iupput: kerne Merkle + kanonisk-CBOR-typer (
qub-core), TypeScript-imik ersarissumik + ANS-104-mik ataatsimoortitsisoq (workers/api/src/crypto/), ataatsimik allattoqLogDO+ koordinat-taste R2 node-mik pisiniarfik, taanna/uploadlog-append misileraaneq, ulluinnarni ankeri + bundler-dren crons, taannaGET /api/v1/qub/:tx_id/proof(ilanngussaq) aammaGET /api/v1/log/consistency(RFC 9162) uppernarsaatinik kingullermik, typed inklusionsprøve tigummineqartoq.qubbundli (§17.5), ANS-104-mik ankerimik uppernarsaasiisoq (tools/qub-verify), aamma marlunnik nammineq saqqummersitsisartunik-niaqorlunneq (§16.6). A iluatsittoq/uploadtassaavoq R2-mik atorsinnaasumik kisiannili log-imik qaqutigoortumik aatsaat qaquguLOG_DOatorneqarpoq aamma inline append iluatsippoq; aatsaat taamaalilluni akissuteqaataa carrylog_seq,receipt, aammaanchor_status. IfRECEIPT_SKpeqanngilaq imaluunniit atuunneqanngilaq, taanna kvitterisig_b64urlimaqarpoq aammalu non-repudiation-imik nioqquteqanngilaq. Ullumikkut/sealaamma pakt-imik saqqummersitsinermi aqqutit Arweave-mik suliassat ataasiakkaat pilersaarusiortarpaat kisiannili logblad-imik ilanngussaqanngillat. No code ullumikkut suliarisinnaanngilaa/uploadkommentarip siunnersuutaa kingusinnerusukkut isumaqatigiinniarnissaq append-imik kukkunerup kingorna. W5-imi avatangiisinut misissuineq naammassivoq: §16.15-imi allassimapput sanaartornermut aalajangernerit aamma aallartitsinermut killissarititat, kisianni killissarititat taakku tunisassiortup kattuffianik aatsaat oqaatigineqartumik annertusaanngillat. Trust/ingerlatsinermi atortut pingasut suli gated-iupput: (a) dedikeret ankerpulje ( ).ANCHOR_JWK;LogProfile.anchor_ownersuli tassaavoq[0xAB; 32]inissisimasoq); b) kvitterimik allaffissornikkut atortoq aammalu pin-imik public-key-mik naleqquttumik (RECEIPT_SKtassaavoq toqqarneqarsinnaasoq aammaLogProfile.receipt_pubkeyullumikkut imaqanngilaq); aamma (c) nammineq saqqummersitsisarfiit-qulequttat GitHub-imi allaffik + token (§16.6). Anker/profilpin-it neqeroorutigineqarnissaasa tungaanut, standalone-mik uppernarsaasiisoq uppernarsaatinik statusimik unneqqarissumik nalunaaruteqartarpoq, tamakkiisumik anker-imik, pin-imik uppernarsaammik piumasaqarnani. Design-i strikt additiv-iuvoq aammalu tassaavoq allanngortinneqanngilaqSealedQub/QubEnvelopeledningsformat.
16.1 Pissutaasoq aammalu atorsinnaassuseq Tier
Ullumikkut saqqummersitsisarnermi aqqutit tunniussineq Arweave-mik uppernarsaasiinermit avitseqatigiissutigaat: taakku ataasiakkaanik suliassaq aallaavigalugu allaffigisarpaat, R2-mi artefaktimik aammalu eqqortumik tunniussisarnermik inissisimaffimmik persistertarlutik, kingornalu asynkron-imik post-eqartarlutik. Transparency log-ip general-ip ilaanut nammineerluni ankerneqarsimasumik ordningslag-imik ilassuteqarpoq /upload piumasaqaatit kikkut LogDO append iluatsippoq:
| Tier | Ateq | Qularnaveeqqut | Qanga |
|---|---|---|---|
| T1 | R2-siullermik synkron ack | Durability floor — byte-t matuneqarsimasut aammalu eqqortumik saqqummersitsinermi inissisimaneq allanneqartarput atorsinnaasumik toqqorsivimmut, angusaqarluarneq uteqqinneqannginnerani. | Ullumikkut saqqummersitsisarnermi aqqutit akornanni atuutilersinneqarpoq. |
| T2 | Batched ersarissuseq-log ilanngunneqarneq | Append-only, tamper-evident neriorsuut + tamakkerlugu inniminniineq ilanngunneqareerpat aamma ankerneqareerpat. | Ullumikkut tunisassiortoq: iluatsippoq LogDO ilanngunneqarpoq fra /upload; akissuteqaat kvitterimik tuplemik tigummivoq. Tamanut tunngassuteqanngilaq. |
| T3 | Per-qub Arnaq piujuartitsineq | Arweave-mik ataasiakkaamik suliaqarneq qub-imut. | Ullumikkut saqqummersitanut akuerineqarsimasunut tamanut piareersarneqartarpoq aammalu asynkron-imik ikkussorneqartarluni; eqqortumik allaffigineqarsimasoq tunineqarnissaata tungaanut drenable outboximiiginnarpoq. |
Tier-it erseqqissumik uppernarsaatinik aammalu piujuaannartitsinermik piginnaasanik nassuiaateqarput, maannakkut aningaasarsiornikkut pilersaarut pinnagu. Kode-p maannamut atuuttup suli pilersaarusiorpaa Arweave-mik ataasiakkaanik suliaqarnissaq saqqummersitanut akuerineqarsimasunut tamanut; taanna T3-mik kisimi akiligassaqarluni upsell-itut saqqummiussinngilaq. API-key/kontomut pisassiissutit qaffasissusaat suli immikkut qinnuteqaatinut nakkutilliisuupput.
Piujuartitsineq unneqqarissuseq. T1-imik allanneq synkron-iuvoq, taamaattumik akissuteqaat iluatsittoq Arweave-gateway-mik utaqqisoqanngikkaluarluni applikation-niveau-mik atorsinnaassuseqartitsivoq. Nammineq namminersorluni piffissaq pilersitsineq ajorpaa. Nuussineq ataaseq uppernarsarneqarsimasoq blok-tid-ip qulaani killissamik nioqquteqarpoq. Akissuteqaateqarnissamut T2-mik kvitterimik tuplemik tamakkersimasumik, ankerip uppernarsarneqartup tulliup log-imik uppernarsaat ataani allaaserineqartoq tunniussinnaavaa. Tuple-q peqanngippat, pinnguaatit arlaannaalluunniit isumaqarsinnaanngilaq qub-i taanna transparency-log-imiilersimasoq. Anker aamma saqqummersitsinerup kinguarsarneqarnera protokol-niveau-mik kisitsisit SLA-mik peqanngillat.
16.2 LogLeaf Aaqqissuussaaneq (marluk imminut pisussaaffigineqarsimasut)
Log-imut allattorsimaffik tassaavoq a LogLeaf, §3.1-ip profiliata ataani assanit allanneqarsimasutut kanoniskiusumik CBOR-imik kodeqarsimasoq (definite-length, tag-inik peqanngilaq, float-inik peqanngilaq, integer-inik kortest-form-imik, NFC-mik allaaserisaq, peqannginnerani toqqarneqarsinnaasunik allagartat ilanngunneqartartut, tastatit kodeqarsimasut-byte-nik sivisussuseqarlutik ordneqarsimasut taava byte-nik sivisussuseqarlutik). §3.1-imi allassimasoq parse → re-encode → compare kanonimik guard atorneqarpoq hashing-erneq sioqqullugu kode-vej-imi (dekode-miinnaanngitsoq), taamaattumik implementering-it marluk bladbyte-t pillugit isumaqatigiinngissuteqarsinnaanngillat integer-bredde imaluunniit key-order-imik assigiinngissuteqarneq aqqutigalugu. Integerit tamarmik tassaapput u8 / u64 / i64; tamarmik 32-byte-nik byte-nik strengiupput (bstr[32]). Arweave-mik suliaqarnermi id-mik toqqorsimasoq tassaavoq 32-byte-nik SHA-256-imik digest-imik rå, soorlu bstr[32], qangaluunniit base64url-imik allaaserisaq (§3.3-mut naleqquttoq).
Pilutaq tassaavoq marluk toqqarneqarsimasut a kind byte, pissutigalugu upload-imut aqqut nalinginnaasoq byte-blind-iuvoq: POST /api/v1/upload ilisimasaqarluarluni akuerineqarsimasut marluk payload-formit opaque-tut isigalugit aammalu pissarsiaraa qub_id aamma unlock_at kisianni soorlu klient-imik uppernarsaatinik tatigineqanngitsunik. Namminersorlutik oqartussat aqqutaani, body_hash, drand_round, created_at, aamma drand_chain_version ilaatigut §13-imi avatangiisinut tunngasup iluani toqqorsimapput, taassumalu pingaarnertut Sulisup tigummigallartarpaa. Typesystemip aammattaaq tunisassiortumut uppernarsarneqarsimasumik ilusilersugaavoq, taannalu aallaaveqarpoq body_hash / drand_round nammineq. Ullumikkut /seal route taakku pingaarnertut peqarpoq kisianni sianerneq ajortoq LogDO, taamaattumik tunisassiorneq ullumikkut taamaallaat uppernarsarneqarpoq (0x02) ilannguppoq iluatsilluartumik general-upload-imik. Agguaassineq neriorsuutigineqarsimasut tamarmik unneqqarissumik inissisimatinniarpai, uppernarsarneqarsimasoq nioqqutissiortoq kabelilersimasoq isiginagu:
| Matuersaat | Illut. lin | Suussusaa | Peqataaneq | Isumaqarpoq |
|---|---|---|---|---|
seq |
4 | u64 |
piumasaqaataasoq | Nunarsuaq tamakkerlugu 0-mik tunngaveqartumik pilutanik indeksi; inissisimaffik ilanngunneqarnermut uppernarsaat pisussaaffigisaa. |
kind |
5 | u8 |
piumasaqaataasoq | 0x01 uppernarsaatissaqarsinnaasoq (nassuiarneqarsimasoq, ullumikkut anisinneqanngitsoq) imaluunniit 0x02 uppernarsarneqarpoq (klient-seal / byte-blind upload). |
ref |
4 | bstr[32] |
piumasaqaataasoq | Bladnajoqqutassiaq id. Uppernarsarneqarsimasoq → rå qub_id. Uppernarsarneqarpoq → taanna blindeqarsimasoq id SHA3-256(qub_id ‖ log_blind_secret) (§ 16.2.1). |
chash |
6 | bstr[32] |
piumasaqaataasoq | Imarisassaq adresse SHA3-256(stored_bytes) — imaqartoq ataaseq Sulisup unneqqarissumik naatsorsorsinnaavaa, aqqutini marlunni. |
unlock_at |
10 | i64 |
piumasaqaataasoq | Kopierneqarsimasoq (uppernarsarneqarsimasoq) imaluunniit uppernarsarneqarsimasoq (uppernarsarneqarsimasoq); uppernarsarneqarpoq > 0 taanna qimmit qimuttut isertinnagit. |
received_at |
12 | i64 |
piumasaqaataasoq | Sulisoq væg-ur R2-ack-imi. Uppernarsaatissaqanngitsoq (ingerlatsisup uppernarsarpaa; §16.6). Nammineq nassuiaanissamut saqqummiussineq, uppernarsaataanngilaq. Uppernarsarneqarpoq > 0. |
body_hash |
10 | bstr[32] |
kind=0x01 taamaallaat |
Omitted on 0x02 — Sulisoq §13 malillugu amigaatigaa. |
drand_round |
12 | u64 |
kind=0x01 taamaallaat |
Omitted on 0x02. |
A kind=0x02 leaf ilisimalluinnarlugu aamma suliarinngilaq body_hash aamma taannaanngitsoq drand_round: taanna uppernarsarpaa inniminni-adressimi opaque-mik ciphertekst-imik neriorsuineq aammalu ordning chash, piumasaqarluni qub_id aamma unlock_at — taassuma plaintekstia imaluunniit runde. Qub-imut uppernarsarneqarsimasumut plaintekst/runde leg-it §11-imi atuuttumiit aallaaveqarput .qub-bundlimik uppernarsaaneq, log-imiit pinnani (§16.11). drand_chain_version blad-imiinngilaq (taanna wrapper-ip iluaniippoq default-imik aqqusinermi); kæde granulariteti ankerimi inuuvoq (§16.7). Kode-disciplin: all-nul-imik itigartitsineq ref imaluunniit chash, aammalu positiviunngitsunik itigartitsineq unlock_at / received_at, spejl-imik outcome_at > 0 sentinel-imik nakkutilliisoq cbor.rs.
16.2.1 Namminersorlutik oqartussat-qub-imik atornerluineq
Log-i §13-imi avatangiisinut tunngasut pinaveersaartinniarlugit pinngortitamiittut allattorsimaffimmi oraklinngorsinnaanngilaq (§13.1). Privat (pakke) qub-imut tunngatillugu asserted blad-imik suliaqarpoq blindeqarsimasoq tunniussisoq SHA3-256(qub_id ‖ log_blind_secret), sumi log_blind_secret tassaavoq server-imik tigummineqartoq isertugaq, aammalu omits body_hash. Pingajussaa taamatut blad-imik immikkut ittumik ataqatigiissitsisinnaanngilaq qub_id; qub-ip piginnittua, taanna nioqqutissiornermut URL-imik piginnittuuvoq taamaattumillu qub_id, nammineq ilanngunneqarnertik uppernarsarniarlugu blinde-t recompute-ersinnaavaat. A public qub (naatsorsorneqarsinnaareersoq, tigummiartoq Visibility: public Arweave-taggi per §13.8) rå-mik suliaqarpoq qub_id. Tamanna tassaavoq sumiiffimmi ataatsimi standalone-mik uppernarsaasiisinnaaneq ilisimalluinnarlugu atortussanik privatimik invariantimut tunniussisartoq; namminersortunut qubs-inut immikkoortortaqarfik tassaavoq chash (§ 16.9).
log_blind_secret aqutsineq (aalajangiunneqarpoq — §16.15 Q4). Blind-ip blad-unlinkability illersorpaa, plaintext-imik isumannaallisaanermik illersuinngilaq (§13-imi wrapper-imi tamanna nammineerluni tiguneqarpoq). Ulloq a log_blind_secret kompromis, qanoq ittumik qub_id akeqqap pigilersimavaa imaluunniit sanaartorsinnaavaa (qub-it tamarmik bundle-mik/URL-imik pigisaqartut, aammalu low-entropy-mik imaluunniit public-imik qub_id) taanna blad-imik naatsorsuivoq ref iluani ataaseq hash aamma ataqatigiissitsivoq — tamanna tassaavoq ilisimaneqartumik innuttaasunik toqqaannartumik ataqatigiissitsineq, ilisimaneqanngitsumik sumiiffimmi brute-force-mik pinnani. Immikkoortitsineq log_blind_secret soorlu korrelation/Sybil-grade-mik isertortumik server-ip isertortumik allanik custody-tier-imi, aammalu siumut kisiat roterertoq (rotererneq siunissami qimmit qimuttut re-blind-ertarpai; taanna retroaktiv-imik unlink-ersinnaanngilaq anker-ersimasut).
16.3 Blad aamma node hashing
RFC 6962 §2.1 domænemik immikkoortinneqarsimasumik hashingimik SHA-256-imik taarserneqarluni SHA3-256-imik:
leaf_hash = SHA3-256(0x00 || canonical_cbor(LogLeaf))
node_hash(l,r) = SHA3-256(0x01 || l || r)
empty tree = SHA3-256("") // defined but never anchored
Domæne-p siulliup byte-i 0x02 (isertitsivik, §16.4) aamma 0x03 (STH hash, §16.6) taakkunannga immikkoortinneqarput aammalu immikkoortinneqarput. Taakku ataatsimik byte-upput taamaattumillu ASCII-mik domæne-mik immikkoortitsisartunik 10-byte-nik atuuttunik (QUB_ID_V2, Il.il.). Orpik tassaavoq RFC 6962 venstre-full eqqissisimanngitsoq tree (ataasiakkaat innermik anitsisartoq annerpaamik marlunnik strikt minnerusumik subtree bladtal-imik), taanna ilanngunneqarnermut aammalu ataqatigiinnermut uppernarsaatinik ataatsimik audit-path-algoritmimik avitseqatigiissitsisinnaavoq. Najoqqutassiaq spec-imi ersarissumik venstre/højre-mik aallaaveqartumik pseudokode-mik aamma pin-inik a-mik imaqarpoq marlunnik pisinnaassuseqanngitsoq (5-blad) misissuinermi vektor taamaattumik højrekant-imik promotion-case — taanna 4-blad-vektor-ip toqqoqqavoq — atorneqarpoq.
16.4 Hash-imik kædeqarneq (ingerlatsineq)
LogDO-p crash-konsistensimut kisimi innermik anitsisarnermik kæde-mik pilersitsisarpoq. Imaappoq saqqummersinneqarsimanngilaq aammalu verifier-facing-imik suliaqarsimanngilaq:
entry_chain[seq] = SHA3-256(0x02 || entry_chain[seq-1] || leaf_hash[seq])
entry_chain[-1] = SHA3-256("QUB_TLOG_GENESIS_V1")
Saqqummersinneqartoq append-only oqartussaassuseq tassaavoq kumulativ Merkle-p root + taassuma ankeri (§16.5–16.6), qanoq iliorluniluunniit råordre, tassani operatørip kiffartuussisarnera, qimagussortarpaa: kæde-p kiffartuussineq qanoq ittuunersoq pillugu recomputereqartarpoq, taamaattumillu ankerneqarsimasoq root-ip kisimiilluni kanonimik inissisimaffimmik pinngitsoortitsisarpoq.
16.5 Kumulativ Merkle-p orpik aamma batching
Peqarpoq ataaseq RFC 6962-imik orpik ineriartortuaannartoq over tamarmik blad in seq ordre — immikkoortinneqanngillat per-batch-imik puisit. (Carry-leaf-chained per-batch-imik sanaartorneq itigartinneqarpoq: taanna ilumut prefix-relation-inngilaq, taamaattumillu "konsekvens-imik uppernarsaatinik" eqqortuunngillat.) Kumulativ træ-p ilumoortumik RFC 9162-mik konsistens-imik uppernarsaatinik tunniussisarpoq aammalu ataaseq kingulleq anker-imik uppernarsaatissaqarsinnaavoq qub-mik ilanngunneqarneq qanoq ittumik utoqqaanerusumik.
The... LogDO Durabelt Objekt tassaavoq ataatsimik allattoq (blockConcurrencyWhile, ersersitsineq QuotaDO / EntitlementDO) — log-imut ataatsimoorussamut ilanngussaq tassaavoq atuarneq-allanngortitsineq-allanneq ataatsimoorussamik inissisimaffimmi aamma taamaattumik DO-mik ingerlaqqittariaqarpoq, KV-mik pinngitsoorani. Taanna cache-ertarpaa orpik højrekant-killeq (O(log n) hashes) taamaattumik batch-imik matusineq tassaavoq O(batch). A parti tassaavoq qimmit ataatsimut ankerneqartut; taassuma atuutilersinneqarsimasut tassaapput a tree_size siuarsaanissaq minnerunngitsumik LOG_BATCH_MAX_LEAVES (standard 4096), ukiut ankerkadensimut tikittut, imaluunniit ersarissumik allaffissornikkut/kron-imik nukimik qanilliartorneq. root_i tassaavoq Merkle Tree Hash-imik akulerussaq 0 .. tree_size_i.
16.6 Arweave Anker aqqutigalugu allagartaq
Arweave-mik ankerimik suliaqarneq tassaavoq allagartaq Tree Hoved aamma taarserpaa operator-ip allaffia nammineq træhoved-imut: ulluinnarni ankeri qub-tast-imik pisariaqartitsineq ajortoq pissutigalugu Arweave tx owner tassaavoq allaffik. Moat-tesis-i taamaappoq — substrati allanngortinneqarsinnaanngitsoq, qub-imik tigummigallarneqarsimanngitsoq, ankerneqarsimasumut root-imut atortussaavoq.
Logdesign-ip ataatsimik kissartumik angusaqarluartumik-append-imik piumasaqarpoq kvitterinermut atortoq (§16.10), pinngitsoorani LogProfile aammalu kryds-allaffigineqartoq anchor_owner. Ullumikkut atuutsinneqarnerata trust-root-imik neqerooruteqarneq taanna naammassinngilaa: RECEIPT_SK tassaavoq toqqarneqarsinnaasoq, absent/invalid key-imik pissarsivoq sig_b64url: "", aammalu ataatsimoortinneqarsimasut LogProfile.receipt_pubkey imaqarpoq. Taamatut kvitterineq ilanngunneqarsimasoq nassuiarsinnaavaa kisianni tassaavoq naamik kvitterineq allaffigineqarsinnaanngitsoq. Design-imik piumasaqaat nukittunerusoq aatsaat atuuppoq uppernarsaasiisup saqqummersitsinerata public key-imik naleqquttumik pin-ernerata kingorna aammalu anker-imik piginnittup cross-signereernerata kingorna. Saqqummersitsinermut akissuteqaat kvitterimik tuplerneq tamakkerlugu peqanngitsumik log-acceptance-mik piumasaqaateqanngilaq; ataaseq allaffissornikkut imaqanngitsoq append-position-imik piumasaqaateqarpoq kisianni allaffissornikkut uppernarsaasiinermik piumasaqaateqanngilaq.
The... SignedTreeHead tassaavoq CBOR-i kanonisk (tasterit kode-mik sivisussuseqarlutik): size:u64, root:bstr[32], batch:u64, prev:bstr[32] (siornatigut sth_hash; genese = 32 nul byte), log_id:bstr[32], first_seq:u64, anchored_at:i64. Taassuma hash tassaavoq sth_hash = SHA3-256(0x03 || canonical_cbor(SignedTreeHead)).
Pinneqartoq upperinninnermik root. log_id = SHA3-256("QUB_TLOG_V1" || anchor_owner_address). Konformimik uppernarsaasiisoq pisariaqartinneqartariaqarpoq anchor_tx.owner == LogProfile.anchor_owner, sumi anchor_owner (aamma kvitteri-nøgle public key) baked-iuvoq qub_core soorlu aamma LogProfile — quicknet-konstantit ilanngunneqareersut saniatigut DrandTimelockProvider::quicknet() — aammalu uppernarsaatitut binaarimik agguataarneqartarluni. Uppernarsaasiisoq aamma Arweave tx-imik uppernarsaasariaqarpoq data → tx_id-mik binding najukkami gateway-mik upperinninnermiit /raw/ akissut. Tamanna rogue-wallet-imik eqqissisimatitsinermik hole-mik matusivoq: "anker på Arweave" isumaqanngilaq, uppernarsaasiisoq which wallet-imik pinngitsoornissaata tungaanut.
Rotation tassaavoq §15-imi aqutsineq annertusaaneq, atuineq ajortoq (aalajangiunneqarpoq — §16.15 Q3). §15.2-mi profilip pinnguaataa ullumikkut sig_algs / drand-kæder / wrapper-versionit / imarisaannik sorliit kisimik allattorsimapput, §15.3-milu trigger-it taakku ilaat ataaseq allassimanngilaq — . LogProfile / anchor_owner tassaavoq naamik suli §15-imi pinngitsoorani. Taamaattumik rotation-imik aqutsineq sanaartorneqartariaqarpoq: §15.3 annertusarneqarpoq (allatut) ilanngunneqarnissaanik LogProfile trigger, aammalu rotation tassaavoq allagartaq LogProfile bump uppernarsaatitut nutarterinermi nassiunneqarpoq. A pilersaarutaasoq rotation-ip krydssignatur-imik anisitsisoqarpoq; a isumaqatigiinniarnermik tunngaveqartoq rotation cannot (utgangsnøgle-i upperineqanngilaq/atorneqarsinnaanngilaq eqqortumik taamani) aamma §15-imik aqutsisoqartumut bumpimut uteqqittarpoq, prev-anker-gaffel-check-imik (allatut) killilersuinermik ajoquserneq akornanni.
Eqimattat igalaasartaat (uppernarsaanerup parameteria). Pilutaq eqqortumik akiuussinnaavoq aatsaat qalipaat ankeri Arweave-iuppat.uppernarsarneqarpoq. Igalaaq tassaavoq received_at → anchor confirmation (kadens + Arweave-p kingullermik, protokollimik kingusinnerusukkut qulakkeerisoqanngilaq). Trust-root-imik neqerooruteqarneq sioqqullugu ullumikkut atuutsinneqarnera qub-ip ingerlatsinermik ataqatigiinneranik neqerooruteqarpoq plus qanoq allaffigineqanngitsunik append-metadata-nik peqartoqarpat; taanna pilersaarutaasumik uppernarsaammik qularnaveeqqusiinermik nioqquteqanngilaq. Akisussaassuseqarnissamut artefaktit pingasut sanaartorneq naammassineqarsimasoq aalajangersarpaat (takunnittumik modeli tassaavoq §16.15 Q2-p aalajangigaa):
- Sillimmasiissut kvitterimik (pilersuineq apeqqutaatillugu) — SCT-analogi uteqqinneqartarpoq upload-ip log-iata ilanngunneqarnera iluatsippat (§16.10). Aatsaat qaqugu non-repudiable-nngortarpoq
sig_b64urltassaavoq imaqanngitsoq aamma public key/anker-owner-imik ataqatigiinneq naleqquttoq uppernarsaasiinermi pinneqarpoq. Ullumikkut nioqqutissiornermi profilip pin-ia imaqanngitsoq aalajangiineq taanna tapersersorsinnaanngilaa. Aqutsineq taanna kvitterinermut tupimut ilanngunneqanngitsumut imaluunniit kvitterinermut allaffigineqanngitsumut atuutinngilaq. - Monitorimut periuseq saqqummersinneqartoq + siusinnerusukkut kæde-mik pisunneq — ankeri
prevkæde tassaavoq niaqoq→genese; a gaffel (marluk anker ataatsimutsizeassigiinngitsunikroot, imaluunniit aserorsimasoqprev) tassaavoq pissusilersornermik uppernarsaat saqqummersinneqarsinnaasoq. Eqimattamik paasiniaaneq tassaavoq ingerlatsinermi pisussaaffik oqaatigineqartoq, nipaatsumik naatsorsuutigineqanngilaq. - Marlunnik nammineq saqqummersitsisartunik niaqorlunneq — niaqorlunneq nutaaq ataaseq
{sth_hash, tree_size}tassaavoq immikkut ittumik qub-imik piginnittumut tamanut ammasumik, append-imik GitHub-imi allagartaq (nammineq saqqummersitsisarnermik erseqqissumik tamper-evident leg), sociale post-imik best-effort-imik uppernarsaatitut kisimiilluni. Qupperneq MUST-imik allaaserisaq kukkuneqarsimasoq (nipittoq kukkuneqarsimanngilaq). Ingerlatsisoqarpoq (Etape 8) soorlu...publishHeadanker cron-imi krog (workers/api/src/utils/heads-publish.ts): aPUTimarisaannut API-mut ashatassaavoq ilanngussaq-allaat (a422isumaqarpoq niaqoq saqqummersinneqareersoq, never overskrift); opt-in / atulersitsineq-gated onPUBLISH_HEAD_GITHUB_{TOKEN,OWNER,REPO}aamma inert, atortussiassaq neqeroorutigineqarnissaata tungaanut. A hard GitHub-imi kukkunerit quppernerit aqqutigalugithealth_alertkanali aamma bumpit atorsinnaasumik kukkunermik metrimik (m:tlog_publish_head_fail); Arweave-ankeri nammineq saqqummersitsinermi kukkuneqarpat rulleqarneq ajortoq. "Not fail silent" tassaavoq mittarfik taanna piujuartitsisoq — taanna ops-it dashboard-alert-ertariaqarpaat — naak pitsaanerpaamik emailikkut qupperneq nassiunneqarsinnaanngikkaluartoq. Marluk unneqqarissumik killilersuinerit "anchor-on-advance"-imiit malinneqarput (cron aatsaat saqqummersitsisarpoq annertussuseq siuariartorpat): GitHub-imi ajoquserneq piffissap ilaani a putoq published-heads-sekvensimi tassunga annertussusilimmut — killilersorneqarsimasoq, nipittuunngitsoq (it pages), aammalu niaqoq ataaseq superset-tree-mik suliaqartarmat, §16.9-mi ataqatigiinnermik uppernarsaat gap-imik aqqusaarpaa; pingaaruteqartumik, taanna konsistensprøve naatsorsorneqartarpoq aallaqqaammut oqartussaassuseqartoq Arweave-mik ankersimasoq, GitHub-ip pinnguaataanit pinngitsoq, taamaattumik GitHub-imi gap-ip uppernarsarsinnaaneq annikillisarpaa. Catch-up backfill, saqqummersinneqarsimasunik-niaqorlunnik immersuisoq, tassaavoq kinguarsarneqarsimasoq pitsanngorsaaneq.
Unneqqarissuseq killilersorneqarpoq (killilersuineq). Pissutigalugu qub-ip pilersaarutaasumik posting-imik pinnguaatit marluk aquppai, tamanna nammineq saqqummersinneqartoq, nammineerluni takuneqarsimanngitsoq. Arlaannaalluunniit nioqqutissaq, nittarsaassineq inatsisitigulluunniit pinngitsoorani oqaatigisinnaanngilaq log "namminersorluni takuneqarsimasoq". Kvitterineq/profil/hovedportit neqeroorutigineqareerpata, akuersissutigineqartoq tassaavoq equivocation-imik paasineqarsinnaavoq aammalu append-imik allaffigineqarsimasoq iluatsittoq kvitterimik uppernarsaatissaqartinneqarsinnaanngitsumik qimattarpaa. Taamani sioqqullugu piumasaqaat taanna atorneqarsinnaanngilaq. Ilumoortumik namminersortumik tredjepartsvidne siunissami §15-imi aqutsinermik bump-imut kinguarsarneqarpoq.
received_at tassaavoq ingerlatsisoq-assersorneqartoq aamma no claim tassunga tunngatinneqarsinnaanngilaq — taanna uppernarsaatitut imaluunniit isumaqatigiinnginnermik uppernarsaatitut nioqqutissamik / inatsisitigut / API-mik / uppernarsaatitut pinnguaatitut pinngitsoorani. Arweave-p ankerblokkip piffissaa T tassaavoq piffissaq upperineqarsinnaanngitsoq ataaseq ("logged by"-mi qulaani killissaq). Skærmimik sunaluunniit sanitetimik misissuineq received_at MUST naliginnaasumik T, ingerlatsisumit aqunneqartumut akerliunngilaq anchored_at STH-mik suliaqarneq; taamatut misissuineq unneqqarissumik ingerlatsisup nalunaaquttap kukkuneranut illersuisuuvoq, naamik ajortumik ingerlatsisumut akisussaassuseqarnissamik nakkutilliineq (§16.15 Q5).
16.7 Anker-imik suliaqarnerup formatia aamma kadense
The... AnchorBundle tassaavoq kanonimik-CBOR Arweave-mik suliassaqarfimmi, §16.8-mi bundler aqqutigalugu allanneqarsimasoq: ver:u8, sth:bstr (kanonimik SignedTreeHead bytit), prev_anchor:bstr (siusinnerusukkut anker tx id råbyte; genese-mi ilanngunneqanngilaq), chain_hash:tstr (drand-kæde atuuttoq — quicknet), aammalu batch-ip blad-CBOR-imik strøm in seq inniminnigaq taamaattumik ankeri nammineq piumassutsimik suliaqarpoq: monitor re-deriver root timimit nul qub-imik apeqqutaasumik. (Bladstrøm-i højvolumen-imi annertussuseqalerpat, siunissami kukkunersiuineq najoqqutassiamik blad-range-mik kisimi suliaqarsinnaavoq; maluginiarneqarpoq, v1-imi akuerineqanngilaq.)
Arweave-taggit siunertaqartumik naatsorsorneqarsinnaapput — log-i isumaqarpoq nassaarineqarnissaa, private qubs-it assigalugit: App-Name: qub-tlog, Anchor-Format: 1, Log-Id: <hex>, Batch: <n>, Tree-Size: <n>, Root: <hex>, Prev-Anchor: <tx>, Content-Type: application/cbor. Taaguutit tassaapput tips-it tatigineqanngitsut; CBOR-ip ataatsimiititaliaa kisimiilluni oqartussaasuuvoq.
Kadensi: ullormut atorneqartartoq, volumen-imik taarserneqartartoq (annertussutsimik atortoq auto-kortertarpaa effektiv kadens under belastning). Ullumikkut tunisassiortup akiligassaqarluni force-anker-krog-imik atuinngilaq. The... ankerpulje tassaavoq dedikeret aammalu lav-velocity, immikkoortinneqartoq upload-pulje-mit — taanna MUST-iussaaq its nammineq JWK (immikkuullarissumik pingaarnertut, upload-wallet-imi logiskimik rolle-unngitsoq) taamaattumik upload-wallet-imik isumaqatigiinneq ankerinik sanasinnaanngilaq — ullormut anker-transaktion-imik aningaasartuuteqarluni. Piginnittuunermi inissisimaneq ersarissumik allassimavoq: a narrow-scope hot key-imik qaqutigoortumik qaqutigoortumik aammalu aalajangersimasumik eqqissisimatitsisumik, "nilleq"-unngilaq — aningaasat ulluinnarni auto-signertartoq nilleqarsinnaanngilaq, aamma spec-i allatut isikkoqanngilaq.
16.8 ANS-104 Bundli
ANS-104-mik DataItem-imik kode-mik aamma deep-hash-imik allaffimmik ingerlatsisoq, 300-t missaannik linje-nik, Web Crypto kisiat, nul npm-imik apeqqutaasut (Turbo SDK-t marluk kukkupput npm ci --ignore-scripts nioqqutissiornermut port). DataItem byte-mik inissisimaneq:
signatureType (2, LE) || raw_signature || owner || target(flag+0|32) || anchor(flag+0|32) || num_tags(8, LE) || tags_len(8, LE) || avro_tags || data
Allaffissorneq tassaavoq Arweave deepHash — a rekursiviusoq SHA-384 digest (Arweave-p trådimik piumasaqaataa, crypto.subtle.digest("SHA-384")) qulaani ["dataitem", "1", sig_type, owner, target, anchor, encoded_tags, data] — taava RSA-PSS-imik atorlugu deep hash-imik aningaasanik JWK-mik aqqutigalugu crypto.subtle; id = base64url(SHA-256(signature)). SHA-384 tassaavoq Arweave-tråd-imik kisimi primitivitut karantenerneqarpoq, qub-imik tatiginninnermik primitivitut (§15-imi allassimavoq ungasinnerusoq; qub trust hashing tassaavoq SHA3-256 tamakkerlugu).
ANS-104-p kode-aqqutaa fallback/drain-maskiinamut kinguarsarneqarsimasumut kiffartuussivoq allallunilu AnchorBundle Paasissutissat. Saqqummersitsisarnermi aqqut nalinginnaasoq siullermik Arweave-mik eqqortumik allaffissornikkut suliassaq pilersitsisarpoq aammalu JSON-iminik atorluarsinnaasumik outbox-imiititsisarluni; direct posting tassaavoq latency-mik pitsanngorsaaneq, aammalu dren-ip aqqutaa bundler-imik fallback-imik atuinnginnermini suliassaq taanna misilittarpaa. Allaffissornikkut skema (aalajangiunneqarpoq — §16.15 Q8): v1-imik allaffissornikkut RSA-PSS-imik (allaffissornikkut type 1) Arweave-p aningaasaateqarfia JWK-mekanismeq pioreersoq atorluarlugu (nul nutaaq sivisuumik atuuffeqartoq pingaarnertut atorneqarnera, "one fewer secret" these-mik kiffartuussineq); Ed25519 §15 PQ-mik nuutsitsinermut aqqummut kinguarsarneqarpoq.
Deep hash-imik håndrulleqartoq tassaavoq W5-imi højrisiko-mik, lavste-naturlig-katte-kode, taamaattumik gating-i tassaavoq isumaqatigiinniutigineqarsinnaanngitsoq (§16.15 Q8):
- Oqaatsit akornanni fixture
tlog_v1.json(Rust + TS, §14.5-imi allassimasoqwrapper_v1.jsonpattern) tassaavoq deep-hash, DataItem bytes + id, bladhash, 5-blad root + auditvej, STH hash, ilanngunneqarnermut uppernarsaat, aammalu ataqatigiinnermik uppernarsaat — in aamma allagartaq aamma uppernarsaatitut suussutsit (verify-mik suussuseq pingaaruteqarpoq, tassami §16.6-imi lokal tx → tx_id-mik misissuineq hash-imik itisuumik standalone-mik uppernarsaasiinermut tamanut ikkussisarpoq, allattoq kisiat pinnagu). - Ataasiaannarluni interop-imik angalaneq najoqqutassiamik ANS-104-mik bundler aqqutigalugu, atuineq soorlu statisk testdata-t kisimik — npm-imik ingerlatsinermi apeqqutaasumik (Web-Crypto-allaat / scriptit-installertinneqanngitsutut inissisimaneq inissisimavoq).
- Deep-hash + RSA-PSS-ip aqqutaa round-trip-imik aqqusaartariaqarpoq assinga
crypto.subtleprimitivit produktion atortarpai, taamaattumik in-house-koderi byte-mik naleqqussaavoq. - Ingerlaavartumik post-bundle-mik akuersissummik nakkutilliisoq uppernarsarpaa ataaseq anker / fallback DataItem-ip Arweave-p akuerineqarnera ilumut angusaqarfigaa, alarmik + strømforsyning-imik — tassami hash-ip itisuup aamma Arweave-mik atuisinnaannginnermik fallback-imik queue-mik kiffartuussisarmat, taamaattumik nipimik regression-ip queue-q taanna netværk-imik tunuarsimaarfiusunik atortunik immersinnaavaa, eqqortumik exi-p unitsinneqarnerata nalaani.
16.9 Ilaatinneqarnermut aammalu ataqatigiissaarnermut uppernarsaatinik
Taakku marluk tassaapput RFC 9162, SHA3-256, CBOR-itut kanonimik atuisoq.
IlaatinneqarneqUppernarsaat — . GET /api/v1/qub/:tx_id/proof: ver:u8, leaf:bstr (eqqortumik blad CBOR — uppernarsaasiisoq naatsorsuivoq leaf_hash nammineq aamma hash-imik tunniunneqarsimasumik tatiginninngilaq), index:u64, size:u64, audit:[bstr[32]], root:bstr[32], anchor:{ txid:bstr[32], batch:u64, sth:bstr[32], log_id:bstr[32], block_height?:u64, anchored_at?:i64 }.
KonsekvensUppernarsaat — . GET /api/v1/log/consistency?first=<size_a>&second=<size_b>: ver:u8, first_size:u64, second_size:u64, first_root:bstr[32], second_root:bstr[32], nodes:[bstr[32]], first_anchor, second_anchor. Ataatsimik erseqqissumik pingaarnertut allattorsimaffik, testvektorimik pinneqarsimasoq.
Namminersorluni uppernarsaaneq (qub-server-eqanngilaq, §11-imi annertusarneqarpoq):
1. Parse .qub bundle → SealedQub; recompute qub_id (§4.1).
2. Read leaf.kind.
3a. kind=0x01 (attested):
assert leaf.ref == qub_id
assert leaf.body_hash == SHA3-256(body)
assert leaf.drand_round == unlock_round(unlock_at)
3b. kind=0x02 (asserted):
assert leaf.ref == SHA3-256(qub_id || blind) // holder supplies blind
OR treat ref as opaque and bind via leaf.chash == SHA3-256(stored_bytes)
4. Recompute leaf_hash = SHA3-256(0x00 || leaf); fold `audit` per RFC 6962
using index/size; require derived root == proof.root.
5. Fetch anchor.txid from any gateway; verify the tx data → tx_id binding
(do not trust a gateway /raw/ response); REQUIRE anchor_tx.owner ==
LogProfile.anchor_owner.
6. Parse AnchorBundle; require committed root == proof.root and size ==
proof.size; read the Arweave block time T.
7. Emit the claim scoped by leaf.kind (§16.11).
Uppernarsaatitut toqqorsivik koordinat-keyed-iussaaq (ajornartorsiutaavoq — §16.15 Q7, blokeringsfortreyt). Cold-leaf-imik uppernarsaatitut pilersitsineq eqqortuunermut neutraliuvoq taamaallaat R2-mi kukkunersiuinermut atortussaq tassaavoq a ataqqinnittumik Merkle-knude-mik pisiniarfik absolut trækoordinatimik atorlugu (level, index) — per- .batch node-delta-t. Koordinat-keyed-imik pisiniarfimmik, sumiluunniit (leaf i, size N) audit vej tassaavoq sæt O(log N) toqqaannartumik R2 GETs atorlugu batch-ip killeqarfii akimorlugit rekomputering-eqanngilaq; batch-keyed-imik pisiniarfimmik taamaanngilaq, tassalu pisiniarfimmik-layout-imik gap-imik resolution-ip matuma. Pilutat timii aammattaaq imaqarniliamik adresserneqarsinnaapput seq. W5-mik misissuinermi vektorip uppernarsartariaqarpaa a genesis-era-mi nillertumik blad-imik annertuumik kingusinnerusukkut root-imik R2 + Arweave-mik kisimi atorlugu LogDO-mik toqqorsivik atorlugu, taamaattumik §16.13-imi eqqissisimatitsinermut isumannaallisaanermut piumasaqaat uppernarsarneqanngilaq. The... O(log N) sekvensi R2 GETs ilaapput taamaallaat asynkron-imik uppernarsaatinik kingullermik — qaqugukkulluunniit seal-imik kissartumik vej-imi (§16.10) imaluunniit per-tikk-imik cron-imik.
16.10 R2-Siullermik Ack-imik Inniminniineq
Atortuulersinneqartoq POST /api/v1/upload sekvensi tassaavoq:
- Front-halvportit (auth, uppernarsaaneq, idempotens-imik shard-tast) — allanngortinneqanngilaq.
- Arweave-mik nuussineq eqqortoq ataasiakkaaq pilersiguk, taggileruk allallugulu. Tamanna aallaaveqarpoq
tx_idlokalt, naak transaktioninik pilersitsineq gateway-imiit pissarsiaq/anker metadata-nik pissarsisinnaagaluartoq. Piareersarnermi kukkuneqarneq suli tunniussisoqannginnerani qinnuteqaat kukkuneqarpoq. - Synkron-imik artefakti toqqarneqarsimasoq allaguk uunga
qub-cache/<tx_id>aammalu stabilimik pilersitsineq-ingerlatsineq/outbox-imik allattorsimaffiit persisterlugit. Tamakku tassaapput durability aamma retry floor; kukkunerit isumaqatigiissuteqarneq sioqqullugu utertitsineq 503. - Qanga
LOG_DOaaqqissuunneqarpoq, synkron-imik misileraaneqLogDO.append(leaf). Allattoq ataaseq suliassaqarpoqseq, isertitsivik annertusarpaa, aammalu killeqarfik nutarterlugu. Append RPC-p taamaallaat taamaaliortarpoq; batch close alarmimi aqqusinermiit ingerlavoq. Ullumikkut append transport/applikation-imik ajornartorsiuteqarpoq kukku-soft: akissuteqaat suli iluatsissinnaavoqlog_seq,receipt, imaluunniitanchor_status. Atortuulersitsinermut oqaaseqaateqaraluartoq, ullumikkut automatiskimik kingusinnerusukkut log-imik nakkutilliisoqanngilaq. - Tunniussineq utertiguk. Ilanngullugu
{ log_seq, anchor_status: "pending", receipt }aatsaat append-ip tuple-q tamakkerlugu iluatsittoq utertippagu.receipt.sig_b64urlkvitterimik allaffimmioq atorneqarsinnaanngippat imaqanngilaq; klientit taanna pingaarnertut allaffigineqarsimasoq imaluunniit uppernarsarneqarsinnaanngitsoq taasinnaanngilaat. Tuple-p peqannginnera isumaqarpoq piujuartumik saqqummersitsineq kisiat, transparency-log-imik akuersineq pinnagu. - Suliassaq kinguartinneqartoq ataaseq atoruk nuussineq eqqortoq allaffigineqarsimasoq allattorlugu. Angusaqarluarneq outbox-imik peersitsivoq; kukkuneq taanna killilersugaasumik drenage cron-imut qimattarpaa aammalu akuerineqarsimasoq allanngortissinnaanngilaa
tx_id. Aammattaaq piffissap ilaani metadata-t aamma pitsaanerpaamik sidecar-it allat kinguarsarneqartarput.
Latency-mik killeqarfik. Piumasaqaatip aqqutaani ilaapput front-halv oqartussaassuseq/kvote-mik suliaqarneq, transaktion-imik piareersarneq/allaffissaq, R2-mik allagartat piujuartitsisut, aamma (konfigurereqarpat) the LogDO pileritsappoq. < 300 ms sanaartornermi nalilersuinermi ingerlatsinermi anguniagassatut saqqummerpoq, protokollimik qulakkeerisuunngitsutut; ullumikkut transaktion-piareersarnermi trin gateway-mik metadata-mik piumasaqarsinnaavoq. Latency-alarmit aamma launch gates-it tassaapput ingerlatsinermi aqutsineq, uppernarsaatitut uppernarsaatitut pissarsiarineqarsinnaanngitsoq.
16.11 Trust Model — eqqortumik piumasaqaat, bladtype-mik annertussusilik
Uunga kind=0x01 (uppernarsarneqartoq): "Taanna imarisaq — timimik naleqqussaaneq body_hash, tunniunneqartoq qub_id — qub-ip append-only-mik log-ianut inissisimaffimmiittumut tunniussisimavoq seq aamma kingusinnerpaamik Arweave blok-ip nalaani pivoq T; taanna kryptografimik atuarneqarsinnaanngilaq drand rundep tungaanut R = unlock_round(unlock_at)." Tamanna tamakkerlugu {tlock round binding + Merkle inclusion + anchored root} marloriarluni.
Uunga kind=0x02 (uppernarsarneqarpoq, atorneqartoq): "Ciphertekst opaque imaqarniliamik-adresseqartoq chash, piumasaqarluni qub_id aamma unlock_at, inissisimaffimmi append-only-mik log-imut tunniussisimavoq seq aamma kingusinnerpaamik Arweave blok-ip nalaani pivoq T." Runde aamma timip illuatungaani §11-imi atuuttumi nioqqutigineqarput .qub-bundle uppernarsaaneq (qub_core::unlock), naamik log-imik; qanoq log-ip ilannguppaa bare per-qub-imik suliaqarnermi tassaavoq tamper-evident-imik tillinniarneq, uppernarsaatissaqanngitsoq qulaani-grænse-mik pisussaaffiliineq, aammalu eqimattanut akiuiniarneq.
Piumasaqaatit marluk ilaatinngilaat, per §11: atuakkiorneq peqanngitsumik sig_alg ≥ 0x01, siunertaq, aammalu allamik anker-granularitetimik piffissaq. Aammalu piumasaqaatit arlaannaalluunniit tunngatinneqarsinnaanngilaq received_at.
Piumasaqaatit qaffasissusaat (bindende lanseringsforslag — aaqqinneqarpoq §16.15 Q1). Assettereqarsimasumut (kind=0x02) blad, scoped krav qulaani tassaavoq qilaaq qanoq nioqqutissaq, nittarsaassineq, isumaqatigiissutit imaluunniit uppernarsaatitut pinnguaatit oqaatigisinnaanerat pillugu. Arlaannaalluunniit pinnguaatip oqaatigisinnaanngilaa imaluunniit isumaqarsinnaanngilaq log-ip byte-blind-imik upload-ip imarisaanik imaluunniit unlock-runde-mik uppernarsaateqartoq — log-ip uppernarsarpaa ordning + opaque ciphertekst-ip uppernarsaatissaqanngitsup qulaani-grænse-mik imminut pisussanngortitsinermik piffissaq. Imarisassaq aamma runde uppernarsaat §11-imi atuuttumiit kisimik aallaaveqarput .qub-bundle-mik uppernarsaaneq, taanna log-imik nammineerluni. Saqqummersitsineq append/receipt-imik iluatsittumik peqanngitsoq log-claim-imik arlaannaatigulluunniit peqanngilaq.
16.12 Versionerneq aamma W3-mik ataqatigiissaarineq
Peqarpoq Naamik SealedQub ledningsbump aamma taamaattumik protokol-version-imik bump-eqanngilaq (§12.2): log tassaavoq sidecar, taanna field-inik aamma byte-nik pioreersunik pisussaaffilersuivoq, taamaattumik §12.3-mi protokol-version-ip oqaluttuarisaaneranut ilanngunneqanngilaq. W3-p toqqarneqarsinnaavoq drand_chain_version atorneqanngilaq aammalu suli kisimi toqqagassaalluni SealedQub allaffissaq. Loggip taarsiullugu nammineq namminersorluni versionimik inissaqartitsivoq — . LOG_VERSION_1, ANCHOR_FORMAT_1, InclusionProof.ver — §12.5-imi wrapper-version-imik nammineersinnaaneq ersersitsivoq (wrapper-ip protokol-version-imit nammineersinnaasumik version byte-mik tigummivaa, aammalu log-versionit immikkoortitsineq taanna malippaat).
Uppernarsaatinik nassiussineq nalinginnaasutut tiguneqartarpoq, ride-along-imik toqqarneqarsinnaasumik. Uppernarsaat seal-time-imi pisinnaanngilaq (anker suli allanneqanngilaq), taamaattumik seal-time-mi .qub bundle uppernarsaatissaqanngitsumik inissisimavoq. W7-ip uppernarsaataa fetch-ertarpaa GET …/proof ataasiaannaq, imaluunniit tamakkiisumik offline-imi uppernarsaat tamanut ammasumik sanaartortarpaa AnchorBundle aqqutigalugu Arweave-mik apeqquteqaat ulloq Log-Id. The... .qub bundli (W7) reservet an nammineq toqqagassaq inclusion_proof ilaasortaq — absent på seal, populeret post-anker-re-export-imik koldarkivering-imut — malillugu "valgfrit, omitt by standard, additiv" W3-p malittarisassaatut drand_chain_version.
16.13 Tigummigallarneq
LogDO-p ammasumik illuatungaanut, R2-mik uppernarsaatinik atuinermut, anker-imik atortulersuutinut aammalu bundler-ip fallback-queue-anut atortulersuutit ilanngunneqarput docs/DATA-RETENTION.md. Periarfissaq: log-ip per-entry-mik kissartumik toqqorsivia (LogDO) tassaavoq post-anker-imik atorneqarsinnaasoq; taassuma kukkunersiuinermut atortussaa — koordinat-imik atortoq (level, index) Merkle-node pisiniarfik + taanna seq-adressede bladkropper (§16.9) + Arweave-ankerit — tassaavoq piujuartumik. DO-mit qimmit qimuttut pissarsiarineqarnerat uppernarsaat tunniunneqartoq atuunneq ajorpaa, tassami uppernarsaat taanna permanent R2-node-store-mut aamma Arweave-ankerimut akerliuvoq, DO-mut pinnani (aamma §16.9 wiped-DO test vector-ip tamanna uppernarsarpaa).
16.14 Misilitsinnermi vektorit
W5-ip oqaatsit akornanni fixture nassiussavaa tlog_v1.json (§16.8) aamma suliarineqarsimasut vektorit: a kind=0x01 aamma a kind=0x02 blad → leaf_hash; 5-blad-imik kumulatiiviusumik root; ataaseq ilanngunneqarnermut uppernarsaat; ataaseq ataqatigiinnermut uppernarsaat; ataaseq AnchorBundle; aamma ataaseq DataItem id. Taakku §14.5-imi avatangiisinut tunngasut vektorit saniatigut najugaqarput aammalu Rust-imit (qub-core) aamma TypeScript (Sulisoq) atuutsinneqarnerat.
16.15 Naliliinermi aalajangernerit (W5 — aalajangerneqarpoq)
W5-imik avatangiisinut misissuineq (adversarial design pass + piginnittumik allagartaq) naammassineqarpoq. Aalajangiinerit ataasiakkaat ataaniittut aalajangersarneqarput aammalu qulaani allaaserisami §16-imi ersersinneqarput; the bindende launch-imik killilersuinerit naggataani oqaatigineqartarput. Taakku ataani atuutilersitsineq ingerlasinnaavoq.
- Aqqut-standard (
kind=0x02) blad unneqqarissuseq — ALLANGINNEQARPOQ. Marlunnik pilutalik split soorlu aalajangersarneqarsimasoq nassiuk:kind=0x02aamma suliarisarpaabody_hashaamma taannaanngitsoqdrand_round. Naamik*_body_hashfelt byte-blind-imik aqqusinermi (taanna tassaassaaq integrator-inut atuarneqarsinnaanerpaamik eqqunngitsumik "verificereqarsimasoq" signali aammalu §11-imi bundlimit neqeroorutigineqareersoq). Do naamik piumasaqarpoq server-seal-imik qubs-inik log-imik uppernarsaatinik (taanna Sulisoq aqqutigalugu plaintext-imik pinngitsaalisaassaaq aammalu krypto-shredding-moat-imik aserugaqarsinnaavoq). Nammineq nassuiaasoq kortslutning sunaluunniit ilaavoq.qubbundli / uppernarsaatinik allagartaq uppernarsaatitut-rekomputeret felt-itut, bladfelt-iunngitsoq. Piginnittup uppernarsarsimasaa piumasaqaatit: §16.11. - Eqqissisimatitsineq / atornerluineq akisussaaffik — DESIGN ALLERNEQARPOQ, PISSARSIARINEQ NAAMMASSINNEQARPOQ. Niuernermi piumasaqaataavoq seal-receipt-imik atortoq pinneqartariaqartoq
LogProfileaammalu kryds-allaffigineqartoqanchor_owner, kiisalu monitorimik periuseq, prev-chain walk, aamma marlunnik nammineq saqqummersitsisartunik niaqorlunneq. Profili aamma atortussiassanik atortulersuutit suli inissisimapput/optional-iupput soorlu §16.6-imi erseqqissarneqartoq, taamaattumillu nukittunerusumik detectable + receipted-imik piumasaqaat atuuttussaanngilaq, taakku portit matuneqarnissaasa tungaanut. Taanna namminersorluni takunnittutut niuerneqartariaqanngilaq. Ilumoortumik tredjepartsvidne §15-imi aqutsinermik bump-imut kinguarsarneqarpoq. - Pinneqartoq anker-piginnittoq upperinninnermik root + rotation — AALLAQQARNEQARPOQ. Adoptereqarneq
LogProfilepin (§16,6); uppernarsaasiisoq misissuisarpoqanchor_tx.owner == anchor_owneraamma tx-data → tx_id-mik binding-imik najukkami uppernarsaasarpoq. Rotationsstyring tassaavoq §15 sanaartornissamut annertusaaneq (§15.3 trigger ilanngunneqarpoq), atuineq ajortoq; pilersaarusiorneqarsimasut tværsnittet, kompromis-driven rotationit §15-imut bumpimut uteqqipput gaffelcheck-imik killilersuinermik ajoqusernermik. - Privat-qub-imik bladblindning — ALLAASERSIORNEQARPOQ. Privat qubs-it pillugit blinding-ertarneq (
ref = SHA3-256(qub_id ‖ log_blind_secret)), aapasoqqub_idqubs-inut tamanut ammasunut (§16.2.1-imi), .chashsoorlu immikkoortortaqarfik.log_blind_secrettassaavoq korrelation/Sybil-grade-mik isertugaq, roter-forward-imik kisimi (§16.2.1). received_at— Aalajangiiffigineqarpoq. Pilutamiitiguk, imminut pisussanngortilluni kisianni ersarissumik uppernarsaatissaqanngitsoq; never surfaced uppernarsaatitut imaluunniit isumaqatigiinnginnermik uppernarsaatitut pinnguaatit arlaanniluunniit. Skærmimik sanilliullugu misissuineq sunaluunniit Arweave-p blok-ip piffissaanut naleqqiulluguT, operatørimit aqunneqartoq pinnaguanchored_at(§ 16.6).- Tiered provable-timing — DESIGN-RESOLUTIO, IKKE AKTUELLE ROUTING. Design-ip nalilersorneqartup anker-blok-imik piffissaq batched-tier-imut aammalu exact-hour-imik uppernarsaat T3-mut akiligassamut tunniuppaa, siullermut SLA-mik kisitsisit atorlugit. Ullumikkut aqqutit aningaasarsiornikkut immikkoortitsineq taanna ledningilersimanngilaat: saqqummersitsinermut akuerineqarsimasumut ataasiakkaamut pilersaarusiortarpaat, aammalu log-imik kattussuussineq suli piumasaqaateqarpoq soorlu §16.1/§16.10-mi allassimasoq. Nioqqutissap assiga atuutsinneqarnera nassuiartariaqarpaa, siunissami tier split una pinnagu.
- Sulisut pillugit kumulativ træ — ALLANGINNEQARPOQ. Ataatsimik kumulatiiviusumik RFC 9162-imik orpik + frontier-cache-imik ataatsimik allattorsimaffimmik LogDO (komfortabel hovedrum vs ~1k skrifter/sek DO plafond; Merkle-of-shard-roots-imik sharding-imik kinguarsaaneq qaninnerpaaffissaanut). Koordinat-imik atortoq
(level, index)R2 node-store + wiped-DO-mik nillertumik blad-testvektor atuutilersinneqarput (§16.9).< 300 mssuli sanaartornermut/ingerlatsinermut anguniagaavoq, protokollimi neriorsuut pinnani (§16.10). - ANS-104 allaffissornikkut skema + deep-hash — AALLAQQARNEQARPOQ. RSA-PSS (sig type 1, immikkut ittumik anker-pulje JWK-mik atuineq); Ed25519 §15 PQ-mut aqqut kinguarsarneqarpoq. SHA-384-imik assanit rulleqartoq deep hash-imik marlunnik suussutsimik cross-impl-imik atortumik gateqarpoq, statisk-allaat najoqqutassiamik-bundler-imik interop-mik misissuineq, avitseqatigiissutigineqartoq-
crypto.subtleround-trip, aammalu Arweave-mik akuersissummik misissuineq kingorna (§16.8).
Bindende launch-imik killissarititat (atuutsilersitsineq + nioqqutissaq/inatsisitigut nalilersuineq):
- Piumasaqaateqarneq (Q1/Q6). Arlaannaalluunniit pinnguaat oqarsinnaanngilaq log-ip uppernarsarpaa blad-ip uppernarsarneqarsimasup imarisaanik imaluunniit låse-runde-mik; akuersissutigineqartoq piumasaqaat iluatsilluartumik ankerneqarsimasoq
kind=0x02blad tassaavoq ordret, tamper-evident, uppernarsaatissaqanngitsumik qulaani-grænse engagementtid. Akissuteqaat kvitterimik tupleqanngitsoq log-imik piumasaqaateqanngilaq. Piffissaq atorlugu assilisaq kisitsisit atorlugit kingusinnerusukkut qularnaveeqquteqanngilaq. - Takunnittumik unneqqarissuseq (Q2). Markeds-eqimattaq soorlu paasineqarsinnaasoq + tiguneqartoq, namminersorluni takuneqarsimanngitsoq.
- Kvittering + ankernøgler (Q2/Q8). Siornatigut non-repudiation/anker-verifikation-ip piumasaqaataanik nassiussineq, neqerooruteqarneq aamma compile-pin-imik kvitterimik public key-imik, neqerooruteqartumik ankerimik piginnittumik cross-sign-erlugu, aammalu anker-ip aningaasaateqarfia nammineq JWK-tut upload-imik aningaasaateqarfimmiit immikkuullarissumik inissisimatinniarlugu.
- Deep-hash-port (Q8). Anker-imik imaluunniit T3 tx-imik nassiussisoqanngilaq, marlunnik suussutsimik atortup + interop-check-ip qaangiunnerata tungaanut; akuersissummik monitorimi quppernerit kukkuneqarneq pillugu.
- Lager-ip piumasaqaataa (Q7). Koordinat-keyed node store + wiped-DO cold-leaf vektor tassaapput piumasaqaatit "rekultation never invalidere en prøve"-mik qulakkeerinermut.
17. Uppernarsaanermut Bundle Nuunneqarsinnaasoq (.qub)
Killiffik. Immikkoortoq una implementerneqareerpoq (W7 / UP-C2):
qub_core::exportbundle-mik pilersitsisarpoq parse-rsinnaallunilu,tools/qub-verify-lu tassaavoq CLI tamanut ammasoq nammineerlunilu ingerlasoq offline-imi uppernarsaasartoq. §11 aamma §16.9.qubbundle-imut standalone verifier-ip unit-itut atorsinnaasaanut innersuussereerput; immikkoortup matuma byte-i walkthrough-ilu aalajangersarpai. Additive-iinnaq—§11 input pioreersut bundle-mut poortorpai on-chain wire format allanngortinnagu.
17.1 Siunertaq
§11 aalajangerpaa inuk pingajuat qub-ip cryptographic artifact-ia qub suleqatiginagu uppernarsarsinnaagaa. .qub bundle-ip verification taanna nuunneqarsinnaanngortillugulu offline-inngortippaa: sealed CBOR drand round signature-ilu unlock-ertitsisoq artifact namminersortoq ataasiinnarmut poortorpai, tigusisup content integrity, round binding atsiornerillu authorship-imut tunngasut network call ataasiinnarmilluunniit peqarnani uppernarsarsinnaaqqullugit (storage fetch-eqanngilaq, live drand request-eqanngilaq, qub API-eqanngilaq). Bundle kisimi ciphertext qaqugu pilersinneqarsimanersoq uppernarsaatiginngilaa; storage transaction nammineerluni uppernarsarneqartoq imaluunniit log proof anchor-ilerneqarsimasoq existence-time claim immikkut taanna pilersippaa (§11, §17.5).
17.2 Bundle Format
QubBundle tassaavoq §3.1 profile ataani canonical CBOR hand-written (definite length, tag-eqanngilaq, float-eqanngilaq, integer shortest-form, text NFC, optional field absent-iuppat peerneqartoq, key encoded-byte length ascending taava bytewise order). Key-it 15-character pingasut d < i < s-itut tulleriipput. .qub file raw tassaavoq byte-it taakku exakt; URL imaluunniit copy-paste transport-imut byte-it taakku base64url(no-pad)-imik encode-rneqarput.
| Key | Enc. len | Type | Presence | Meaning |
|---|---|---|---|---|
version |
8 | u8 |
required | Bundle format version (0x01). |
sealed_at |
10 | i64 |
optional | Seal time pilersitsisumit assert-erneqartoq (Unix seconds); nammineq nassuiaasoq, uppernarsaatitut atorneqanngitsoq. |
drand_round |
12 | u64 |
required | Round qub-imut pituttorsimasoq. Sealed qub embedded-iusumit projection. |
arweave_tx_id |
14 | tstr |
required | Transaction id sealed byte-it toqqorneqarfiat (provenance pointer). |
drand_chain_id |
15 | tstr |
required | drand chain (hex). Sealed qub embedded-iusumit projection. |
drand_signature |
16 | bstr |
required | drand_round-imut beacon signature—ciphertext unlock-ertitsisoq. |
inclusion_proof |
16 | bstr |
optional | §16 transparency-log Merkle inclusion proof (§17.5). |
sealed_qub_cbor |
16 | bstr |
required | Inner SealedQubCbor byte-it (§13 unwrap kingorna), tassa §11 verification input. |
drand_round aamma drand_chain_id tassaapput sealed_qub_cbor-imit convenience projection-it, tooling inner CBOR parse-rnagu atuarsinnaaqqullugu. Construction-imi derive-rneqarput decode-milu parsed sealed qub-imut nutaamik cross-check-rneqarlutik; top-level field payload-imut naapertuutinngitsoq itigartinneqassaaq. Encoder discipline wire format-ip sinneranut assinguvoq: drand_signature imaluunniit arweave_tx_id empty itigartillugu variable-length field tamaasa bound-erlugit.
17.3 Drand Signature Embedded-iusup Uppernarsagaa
Bundle drand signature nassarpaa verifier-ip aaniartariaqanngisaanik. Timelock decryption (drand chain qulaani tlock, §8) round pituttorsimasumut beacon signature eqqortoq kisiat atorlugu iluatsissinnaavoq—chain-ip round qaangiukkaangat aatsaat value taanna saqqummersittarpaa, chain public key-atalu ataani BLS signature valid-iulluni. Signature salloqittaataasoq imaluunniit kukkusoq BLS verification-imi imaluunniit IBE/AEAD decryption-imi ajutoorpoq. Bundle decryption-ia taamaattumik uppernarsarpaa: ciphertext round R-imut pituttorsimavoq, round R-ilu qaangiussimavoq. Verifier-ip chain pin-erpaa (DrandTimelockProvider::quicknet()) §11 round-binding check-ilu atorlugu, bundle round ciphertext-ip pituttorsimanngisaanik claim-eqarsinnaanani.
Tamanna release-condition proof-iuvoq, creation timestamp-iunani. Round R qaangiutereerpat kinaluunniit R-imut ciphertext nutaaq pilersissinnaavaa signature-ialu tamanut ammasoq ilanngullugu. Taamaattumik bundle kisimi ciphertext imaluunniit content R sioqqullugu, unlock_at sioqqullugu event-iluunniit sioqqullugu piusimaneranut uppernarsaatitut oqaatigineqassanngilaq.
17.4 Offline Uppernarsaanermut Walkthrough
qub-verify <file.qub> standard §11 procedure bundle-miit tamakkerlugu ingerlatissavaa, qub_core::unlock::unlock pinned DrandTimelockProvider-imik ingerlatillugu:
1. Parse the .qub bytes → QubBundle (canonical-CBOR guard; bound every field;
re-check drand_round / drand_chain_id against the embedded sealed qub).
2. BLS-verify bundle.drand_signature for the pinned chain and round, then
tlock_decrypt(sealed.tlock_ciphertext, bundle.drand_signature) → QubEnvelope.
3. Verify SHA3-256(body) == body_hash (§11 step 8).
4. Verify QubEnvelope.qub_id == SealedQub.qub_id (§11 step 9).
5. Verify QubEnvelope.unlock_at == SealedQub.unlock_at (§11 step 10).
6. Verify ciphertext round == unlock_round(unlock_at) and the chain binding.
7. If sig_alg != 0x00: verify author_signature (and any cosigner; §9.4).
8. Report integrity, round-elapsed/round-binding, authorship, and cosigner
verdicts separately, plus the recovered body. Do not report a commitment
timestamp unless step 9 succeeds.
9. Optional existence-time leg: verify an included §16 proof through its pinned
anchor, or independently verify the referenced storage transaction. Report
its block time as an upper bound on ciphertext existence.
CLI 0 (verified), 1 (verification failed—suli locked, body-hash mismatch, round/chain binding broken, imaluunniit signature verify-rneqanngitsoq), imaluunniit 2 (usage / malformed bundle) exit-erpoq. --json report automation-imut verdict-it taakku nassarpai. Bundle self-contained-iummat verifier crate (qub-core) aamma CLI (qub-verify) tassaapput software inuk pingajuat pisariaqartitai; tamarmik public-iupput protocol-illu verification path pioreersoq atoqqillugu—crypto immikkut nutaamik peqanngilaq.
17.5 Transparency Log-imut Attuumassutaa
inclusion_proof tassaavoq §16 Merkle inclusion proof-imut slot optional. Bundle-only verification (§17.4) integrity, round binding / round elapsed aamma authorship optional pillugit naammappoq, nammineerlunili timestamp-ilerneqarsimasumik existence claim-eqanngilaq. inclusion_proof imaqartoq fully anchor-verified §16.11-mi leaf-kind-specific commitment aamma upper-bound time ilannguppai bundle format version allanngortinnagu. Proof absent isumaqarpoq “proof ilanngunneqanngilaq” kisiat—“invalid” pinnagu “not anchored”-imilluunniit pisariaqanngitsumik isumaqarnani.
Reference implementation-imi slot maanna typed-iuvoq: qub_core::export::QubBundle::inclusion_proof_typed() Option<InclusionProof> utertippaa §16.9 structure tamakkiisoq (leaf, audit path, anchored root, AnchorRef) CBOR field opaque taanna aqqutigalugu—bundle-format version bump-eqanngilaq. Standalone qub-verify CLI-p --anchor leg-ia atorlugu ingerlatippaa, anchor wallet provisionerneqarnissaata tungaanut (§16, Status) proof placeholder-owner-imik imalik fully anchored-verified pinnagu inclusion-only-tut nalunaarutigalugu.