qub-imut Protokollimik allatigineqartoq
qub tassaavoq protokoli kryptografiamut piffeqartumik isumaqatigiissutinut: oqaaseqatigiit siunissami ulluni matusernissaanut atugassiaq, ullorlu eqquni, suna oqaatigineqarsimanersoq qaqugulu sukkulluunniit uppernarsaatissiivoq.
Pingasut akuusaartoq atorlugit suliarineqarpoq. drand tassaavoq sianigissummik agguarsimasumik tappiusartoq — saqqummersitsineq ullua peqqissaarniartumi pissutsinit, naapertorlugu allamiup aalajangerneqartumit ajornanngitsumit, atortuunneqarpoq. Naassaanngitsumut tamanut toqqorsivik tassaavoq toqqorsivik tamanut paasissutissaqartitsiviusoq allanngortikkuminaatsoq — qub matusereeruni allanngortinneqartussaanngilaq peerneqartussaanngilluniluunniit. ML-DSA-65 tassaavoq atsiorneq kvantum-kingorna allakkanut — qub tamarmik isumassuissamut paarinut atassuteqartillugu, taakkuami isertuussap nammineq atortuminit qimagujuissanngilaq.
Akuusaartut taakku ataatsimoorlutik oqaatigeqqissaarpaat piffimmik-matuserneqarsimasoq, akornutaanngitsumik, attaveqartoqarluniluunniit — uppernarsaat naluneraneq silarsuup siusinnerusukkut ilanngullugu suliareqqinnissaminut sapinngassusianut akuersaarami atorneqarluartoq.
Allagaq sinnera tassaavoq normativeq atorluarneqarsinnaajumallugu paatsoorneqarsinnaanngitsutut illernarsineq.
qub Protokolimik Erseqqissaaneq
| Naasoq | Naliliineq |
|---|---|
| Versioni | 1.0 (protokoli-versioni 0x01, ilai pusinneqartut versionii 0x01) |
| Ulloq | 2026-05-01 |
| Killiffik | Drafti |
| Misissoreerneqartoq | 2026-05-01 |
Allagaq una tassaavoq normativeq protokoli-erseqqissaaneq qub piffimmik-isumaqatigiissutaasut atorfilersuussiviata. Erseqqissarpai paasissutissat aaqqissuunneqarnerat, atorneqarnerinik malittarisassat, aalajangiussinermut formulit, uppernarsaaneqarnermut pisariaqartut atorluarneqarsinnaasumik suliarineqarsinnaanissaannut.
Sumi atortuunngitsut: protokoli-toqqap inuiaqatigiissimaartoq oqaatsinik atugaqarunngilaq — qub-ip timaata tassaavoq oqaatsinut paasinarsisaanngitsoq / markdown / isumaqatigiissut bytii, qanorlu oqaatsit naapertorlugu saqqummiunneqarnissaat isiginnaartup akisussaaffigaa (qub.social web app, <qub-embed> iframe, MCP-imi atugaqartoq, allallu).
1. Allaaserineq aamma Ileqqut
| Allaaserineq | Isumassuissaq |
|---|---|
u8, u64, i64 |
Naasut nalingisut/naliliineqartut bitiit aalajangersagaqartillugit |
[u8; N] |
Byte-fylki taagineqartumik takinersaani N bytenik |
Vec<u8> |
Byte-fylki allanngorsinnaasumik takinersaaqartoq |
Option<T> |
Naliliineq T-mut, peqanngitsorluunniit |
String |
UTF-8 oqaaseqatigiit, NFC-mik aaqqissuussaq |
| ` | |
SHA3-256(x) |
NIST SHA3-256 hash byte-mit ataqatigiimik x (FIPS 202) |
ceil(x) |
Qulaani naasoq: naasut mikinerpaaq ≥ x |
| CBOR | Concise Binary Object Representation (RFC 8949) |
| big-endian | Bytemik pingaarnerpaaq siulleq |
Naasut tamarmik preimage-mut aalajangersaanermut atatillugit big-endian-mut nalunaaqutigineqarput tukinersaagisaqartumi bytemi (i64 → 8 byte, u8 → 1 byte) allatut nalunaaqutigisaanngippat.
Pissuserivinnerit tamarmik Unix sekundimik UTC-mi allaaserineqarput.
2. Paasissutissat Aaqqissuussaat
2.1 ComposeQub (Pilersitsisup Toqqarvigaata Killiffia)
CBOR-mut nalunaaqutigineqarsimanngitsoq. Naassaanngitsumut toqqorsivimmi toqqorneqarsimanngitsoq. Pilersitsisup atortugaata appimi.
ComposeQub {
draft_id: [u8; 16], // Sianigissummik, najuminni pilersinneqartumik
created_at: i64, // Unix sekundi UTC
unlock_at: Option<i64>, // Unix sekundi UTC; None pilersinneqartillugu
visibility: u8, // 0x01 = tamanut (MVP-mi naliliineq kisiat)
content_type: u8, // 0x01 = allatat (MVP-mi naliliineq kisiat)
plaintext: Vec<u8>, // UTF-8 qub-ip timaa
sender_label: Option<String>, // Saqqummiussinermut atinik takutitsineq; uppernarsaaneqartumik atorneqanngilaq
status: DraftStatus, // Composing | Sealed | Uploaded | Failed
}
2.2 QubEnvelope (Allakkat Erserititaq)
CBOR-imi aaqqissuussamiut atorlugit nalunaaqutigineqarpoq (§3). SealedQub-imi tunisarneqartut. Aaqqissuusserneq una tassaavoq saqqummersitap kingorna timaata akornutaqannginnera uppernarsarsinnaasaat.
QubEnvelope {
version: u8, // Protokolip versionia pingaarnerpaaq (0x01 v1-mut)
qub_id: [u8; 32], // Aalajangiussaq (qiviarit §4.1)
content_type: u8, // Imai sumut atatillugu (qiviarit §6)
created_at: i64, // Unix sekundi UTC
unlock_at: i64, // Unix sekundi UTC
outcome_at: Option<i64>, // V1.1 — qaqugu pissutsit eqqortumik aalajangiisut (verdict-uplift-plan §3.1)
sender_label: Option<String>, // Saqqummiussamut; uppernarsaaneqarnatik MVP-mi
reply_to: Option<[u8; 32]>,// Angajulliit qub_id-aat akissummut atatillugu; qub_id preimage-imi peqanngilaq; atsiorneqanngilaq (qiviarit §9.3)
body: Vec<u8>, // Imai nassiussassaq (UTF-8 allakkanut, CBOR isumaqatigiissummut)
body_hash: [u8; 32], // SHA3-256(body) (qiviarit §4.2)
sig_alg: u8, // Atsiorneqarnerup algoritmia (qiviarit §9.2)
author_signature: Option<Vec<u8>>, // Inissinneqartoq sig_alg != 0x00 imminuna
author_pubkey: Option<Vec<u8>>, // Inissinneqartoq sig_alg != 0x00 imminuna
cosigner_pubkey: Option<Vec<u8>>, // Inissinneqartoq atsiorqatigiinneq pact bilateral-mut
cosigner_signature: Option<Vec<u8>>, // Inissinneqartoq atsiorqatigiinneq pact bilateral-mut
}
Tunngavik (qub allataq atsiorneqartumik): version = 0x01, content_type = 0x01, sig_alg = 0x00, Option-iliarineqartut tamarmik peqanngitsut.
v1 aaqqissuussaasut allat: content_type = 0x03 (isumaqatigiissut timaa, qiviarit §6.1); sig_alg = 0x01 (ML-DSA-65) author_signature aamma author_pubkey peqartillugu (qiviarit §9.3); cosigner_pubkey aamma cosigner_signature ataatsimoorlutik peqartillugit atsiorqatigiinneq isumaqatigiissummut (qiviarit §9.7); reply_to angajulliit qub-ip qub_id-aanut inissinneqartoq akissutaasoq qub-it (qiviarit §9.3 atsiorneqarnerup atortulinnut tunngassuteqartut).
2.3 SealedQub (Allat-Tunisarneqarnermut Aaqqissuussaq)
CBOR-imi aaqqissuussamiut atorlugit nalunaaqutigineqarpoq (§3). Naassaanngitsumut toqqorsivimmut uploadineqartoq. Una tassaavoq chain-imi pisariusoq.
SealedQub {
version: u8, // Protokolip versionia pingaarnerpaaq (0x01 v1-mut)
qub_id: [u8; 32], // QubEnvelope.qub_id assigaa
visibility: u8, // 0x01 = tamanut; v1 isiginnaartut allat nalingisut itigartippaat
unlock_at: i64, // Unix sekundi UTC
outcome_at: Option<i64>, // V1.1 — verdict-watch CTA-mi saqqummiunneqartoq
// saqqummersitsineq sioqqullugu; QubEnvelope.outcome_at assingusoq;
// §4.1 preimage atorlugu qub_id-mut atassuteqartoq.
drand_chain_id: String, // drand piorsaaviup hash-ia (hex-imi oqaaseq)
drand_round: u64, // drand-imi anguinneq target
tlock_ciphertext: Vec<u8>, // tlock-ip allakkat isertut QubEnvelope CBOR byteinik
recipient_pubkey: Option<[u8; 32]>,// Sernigineqartoq; CBOR aaqqissuussamiummi akuersaagaq
// nalingiserneqassanani v1 reference isiginnaartumi
title: Option<String>, // Plaintext-imi qulequtaq isiginnaartumi saqqummiunneqarsinnaasoq
// nikingaalaarpalukkamik saqqummersitsineq sioqqullugu. qub_id-imut
// atassuteqartoq title_hash atorlugu (§4.1). 1..=100 NFC-imi naasoq
// sissimasut, nakuusernissamut allatat peqanngitsoq.
}
2.4 RevealedQub (Isiginnaartup Atortua Killiffia)
CBOR-mut nalunaaqutigineqarsimanngitsoq. Isiginnaartumi atortugaata appimi. Pilersinneqartoq isertuussap qaffaanneranik aamma uppernarsarneranik kingorna iluatsillugu.
RevealedQub {
qub_id: [u8; 32],
arweave_tx_id: String,
visibility: u8,
content_type: u8,
created_at: i64,
unlock_at: i64,
outcome_at: Option<i64>, // V1.1 — QubEnvelope.outcome_at / SealedQub.outcome_at-mit ingerlatissaq; saqqummersitsivimmi naliliinermut utaqqinerup blokkiata ingerlanninneranut atorpoq (verdict-uplift-plan §5.1)
drand_chain_id: String,
drand_round: u64,
sender_label: Option<String>,
title: Option<String>, // SealedQub.title-mit ingerlatissaq
reply_to: Option<[u8; 32]>,
body: Vec<u8>,
body_hash: [u8; 32],
body_hash_verified: bool,
author_signature: Option<Vec<u8>>,
author_pubkey: Option<Vec<u8>>,
signature_verified: Option<bool>,
cosigner_pubkey: Option<Vec<u8>>,
cosigner_signature: Option<Vec<u8>>,
cosigner_verified: Option<bool>,
}
3. CBOR-imi Aaqqissuussamiut Profiilia
SealedQub aamma QubEnvelope tamarmik nalunaaqutigineqarnerat profile una malillugu PISARIAQARPOQ. Suliarineqarnerit marluk paasissutissat ataatsimoortuni byteinik assigiimmik suliarinittariaqarput.
3.1 Allaaserinermut Malittarisassat
| Malittarisaq | Erseqqissaaneq |
|---|---|
| Najoqqutaq | RFC 8949 §4.2.1 (Core Deterministic Encoding Requirements) |
| Map key-itik ileqqui | Siullermik byte-itik takinerannik allaaserineqartut (mikinersaq sioqqullugu takinersaq), aamma lexicographic-imik (byte-mut byte takissuseqarluni assigiimmut) |
| Naasut allaaserinerat | Mikinersaq: 0–23 byte siullermi; 24–255 2 byte-mi; 256–65535 3 byte-mi; allatullu. |
| Takissusiup allaaserinera | Takinerit aalajangersimasut kisiat. Aalajangersimaartut peqanngitsut array-it, map-it, byte-it allataallu (additional info = 31 inerteqqutaapput). |
| Tag-it | CBOR-imi tag-it peqanngillat (major type 6 inerteqqutaavoq). |
| Floating-point | Float-it peqanngillat (major type 7 naliliineqartut 0xF9–0xFB inerteqqutaapput). |
| Oqaatsit | UTF-8-mik nalunaaqutigineqartut, NFC-mik aaqqissorneqarsimasut (Unicode Normalization Form C). |
| Byte-it oqaatsii | Byte-it iluartumik. CBOR-imi base64-mik allaaserinneq peqanngilaq. |
| Map key-itik assigiimmik | Itigartittariaqarput pulariarneqarnerat malillugu. Parser-it map key assigiimmik nipangiumik akuersaarsinnaanngillat. |
| Key-it paasineqanngitsut | Kukkunermik itigartittariaqarput. Parser-it map key-it type-ip aaqqissuussamiut key-itaasa ileqquini peqanngitsut akuersaarsinnaanngillat — aaqqissuussamiut byte string-it marluk assigiinngitsut naliliinermut assigiimmut decode-erneqassanngillat (encode(decode(x)) == x), aamma payload-ini atsiorneqarsimasuni key ilassutaasoq imaq isertortoq atsiornerit marluk uppernarsagaat tassaassagaluarpoq. Schema-p ineriartornera version aqqutigalugu pisarpoq, key-inik ilassutaasunik pinnani. |
| Naliliineqartut sapinngisaminik | Kisiat true (0xF5), false (0xF4), aamma null (0xF6) akuerineqarput. |
| Naasut sapinginnermut piumassusiisartut | Naasut sapinginnermut piumassusiisartut peqanngitsut CBOR map-mit peerneqartussaapput (null-imik nalunaaqutigineqassanngillat). Peqartut sapinginnermut piumassusiisartut key-it ileqqui malillugit ilanngunneqarput. |
3.2 Misissorneqarsimasut Aaqqissuussamiut Key-itik Ileqquinik
Key-it ileqqui makku normativeqarput. Suliarineqarnerit key-itik ileqquimi tassani allaaseritariaqarpaat. Debug assertion-it pitsaapput release-iliarineqarsimanngitsumi malittarisassat misissorlugit.
QubEnvelope (versioni 0x01, atsiorneqarsimanngitsoq, sapinginnermut peqartussat tamarmik peqanngitsut):
"body" (5 byte allaaserineqartut)
"qub_id" (7 byte allaaserineqartut)
"sig_alg" (8 byte allaaserineqartut)
"version" (8 byte allaaserineqartut)
"reply_to" (9 byte allaaserineqartut) ← peqartillugu kisiat (akissut sineriaqartut)
"body_hash" (10 byte allaaserineqartut)
"unlock_at" (10 byte allaaserineqartut)
"created_at" (11 byte allaaserineqartut)
"outcome_at" (11 byte allaaserineqartut) ← peqartillugu kisiat (V1.1 verdict atortussaq)
"content_type" (13 byte allaaserineqartut)
"sender_label" (13 byte allaaserineqartut) ← peqartillugu kisiat
"author_pubkey" (14 byte allaaserineqartut) ← peqartillugu kisiat
"cosigner_pubkey" (16 byte allaaserineqartut) ← peqartillugu kisiat (isumaqatigiissummi atsiorqatigiinneq)
"author_signature" (17 byte allaaserineqartut) ← peqartillugu kisiat
"cosigner_signature" (19 byte allaaserineqartut) ← peqartillugu kisiat (isumaqatigiissummi atsiorqatigiinneq)
QubEnvelope key-itik ileqqui aalajangerneqarnerannut: key-it tamarmik CBOR-imi oqaaseqatigiit. Allaaserineqarnera takinersaa = 1 byte qulequtaq + oqaaseqatigiit takinersaat (oqaaseqatigiit 24 byte-imit mikinerusumik). Siullermik allaaserineqarnerup takinersaata ataaniittut, taava lexicographic-imik takinersaat assigiimmut.
SealedQub (versioni 0x01, tamanut, tigusisaqanngitsoq):
"title" (6 byte allaaserineqartut) ← peqartillugu kisiat
"qub_id" (7 byte allaaserineqartut)
"version" (8 byte allaaserineqartut)
"unlock_at" (10 byte allaaserineqartut)
"outcome_at" (11 byte allaaserineqartut) ← peqartillugu kisiat (V1.1 verdict atortussaq)
"visibility" (11 byte allaaserineqartut)
"drand_round" (12 byte allaaserineqartut)
"drand_chain_id" (15 byte allaaserineqartut)
"recipient_pubkey" (17 byte allaaserineqartut) ← peqartillugu kisiat
"tlock_ciphertext" (17 byte allaaserineqartut)
PactTerms (isumaqatigiissummi timaa, content_type 0x03):
"notes" (6 byte allaaserineqartut) ← peqartillugu kisiat
"terms" (6 byte allaaserineqartut)
"title" (6 byte allaaserineqartut)
"party_a" (8 byte allaaserineqartut)
"party_b" (8 byte allaaserineqartut)
"pact_version" (13 byte allaaserineqartut)
PactTerm (sineriaq terms array-mi):
"key" (4 byte allaaserineqartut)
"value" (6 byte allaaserineqartut)
PartyIdentifier (party_a / party_b map):
"label" (6 byte allaaserineqartut)
"contact" (8 byte allaaserineqartut) ← peqartillugu kisiat
3.3 Byte-mut Allaaserinermut Najoqqutaq
| Suunersoq | CBOR-imi allaaserineq | Assersuut |
|---|---|---|
| SHA3-256 hash (32 byte) | 0x58 0x20 + 32 byte |
body_hash, qub_id |
| Pissuserivigineqarnerit (i64) | Major type 0 (pisut) imaluunniit 1 (pinnaajusoq), mikinersaq | Unix sekundi |
| Versioni (u8, naliliineq 1) | 0x01 (atausermik byte) |
|
| Imai sumut atatillugu (u8, naliliineq 1) | 0x01 (atausermik byte) |
|
| sig_alg (u8, naliliineq 0) | 0x00 (atausermik byte) |
|
| ML-DSA-65 atsiorneq (3,309 byte) | 0x59 0x0C 0xED + 3,309 byte |
author_signature, cosigner_signature |
| ML-DSA-65 pubkey (1,952 byte) | 0x59 0x07 0xA0 + 1,952 byte |
author_pubkey, cosigner_pubkey |
4. Normativeqarluni Aalajangiussinerit
4.1 qub_id
qub_id tassaavoq qub-imik kisermik aalajangiisoq aamma QubEnvelope-imik SealedQub-imut atassoq. Aalajangiivoq aalajangersimasumik puuata imaagisaanit.
qub_id = SHA3-256(
"QUB_ID_V2" || // tunngaviusoq immikkoorut: ASCII byte [0x51 0x55 0x42 0x5F 0x49 0x44 0x5F 0x56 0x32] (9 byte) + 0x00 ilaateqaalu (1 byte) = 10 byte
version || // u8 (1 byte)
content_type || // u8 (1 byte)
created_at || // i64 big-endian (8 byte)
unlock_at || // i64 big-endian (8 byte)
outcome_at_or_zero || // i64 big-endian (8 byte; 0 outcome_at peqanngippat)
drand_round || // u64 big-endian (8 byte)
body_hash || // [u8; 32] (32 byte)
title_hash // [u8; 32] (32 byte; peqanngippat-malugaq = [0u8; 32])
)
// Preimage tamarmiusoq: 108 byte → 32-byte saqqummiineq
Tunngaviusoq immikkoorut allaaserineqarnera: Oqaaseq "QUB_ID_V2" ASCII byte 9-aapput. Atausermik 0x00 ilaateqaalu naliusersorlugu 10-mik byte-isuunissamut. Suliarineqarnerit byte-it 10 makku PISARIAQARPOQ atortussaat: [0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00].
outcome_at allaaserineqarnera: V1.1 preimage 92 byte-mit 100 byte-mut takinerulersippaa outcome_at sapinginnermut peqartoq atassutsinermut ilaalersitassagaani. outcome_at peqanngippat byte nuller 8-tut allaaserineqartoq; protokolimi uppernarsaasut sumi tamani outcome_at <= 0 itigartittarpaat, taamaalimmat malugaq una naliliineq pissusilisorpat naapittatassanngilaq. Qiviarit §3.2 (wire format) aamma in-tree tasks/verdict-uplift-plan.md verdict atortussaq naasoq una akuersaasaa.
drand_round allaaserineqarnera: V1.2 preimage 100 byte-mit 108 byte-mut takinerulersippaa drand_round (drand-imi anguinneq target, §4.3) atassutsinermut ilaalersillugu, aamma tunngaviusoq immikkoorut QUB_ID_V2-mut qaffappaa. Tamanna piffimmik-matusernermut anguinneq qub-ip kinaassusianut atassutsivaa: gateway-it ciphertext anguinnermut allamut (assersuutigalugu qaangiukkamut) inisseqqissinnaanngilaa unlock_at takutinneqartumi isumaqartumut allamut. Matusinerup peernera (§8) saniatigut uppernarsarpaa tlock ciphertext suluani anguinneq pisup unlock_round(unlock_at)-imut naapittoq, taamaalimmat matusinerup ulloq takutinneqartoq uppernarsarluinnarpoq anguinneq matusinnermut piffimmut paasaqartoq.
Pissusii:
- QubEnvelope-imi qaffaaneq sumi tamani (timaa, pissuserivigissuserisaat, content type, version) qub_id assingunngitsoq saqqummersitsivoq.
- qub_id isertuussap sioqqullugu suliarineqarpoq. Tamarmik QubEnvelope aamma SealedQub qub_id assigiimmik nalingisut. Isiginnaartoq isertuussap qaffaaneranik kingorna assigiittarinnerinik uppernarsaavoq.
- qub_id
sender_label,author_signature, imaluunniitauthor_pubkey-imut tunngavissaqanngilaq. Tamanna isumaqarpoq imai matumi piffimmi matuneqarsimasut qub_id assigiimmik saqqummersittarput kinaluunniit atsiorpat naapertorlugu. - 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) title peqarpat
title_hash = [0u8; 32] title peqanngippat
title tassaavoq plaintext-imi qulequtaq isiginnaartumi saqqummersitsineq sioqqullugu takutinneqartoq sapinngisaminik (qiviarit §3.2). NFC-mut aaqqissuussineq hash-imut atatillugu ingerlapput digest-i aalajangersimasunngorlugu codepoint-mut takujumagaagaminik assigiimmik. Sumi tamani-nulleq malugaq sernigineqarpoq peqanngitsumut periarfissaq; isumassuissaq isumassuusiineq itigartinneqarpoq CBOR-imi aaqqissuussamiut killinganni kanonisikersimanngitsumik allaaserineqarnerinut "peqanngitsumut" (aaqqissuussamiut allaaserineqarnera naasoq tamaannarluinnaq peerneqartoq).
4.3 Matusernermut Anguinnermut Allaaserineq
drand_round = ceil((unlock_at - chain_genesis_time) / chain_period_seconds)
| Naliliisut | Tunngavik | Assersuut |
|---|---|---|
unlock_at |
Inuup toqqagaa Unix sekundi UTC | 1735689600 (2025-01-01 00:00:00 UTC) |
chain_genesis_time |
drand piorsaavik info (genesis_time) |
1595431050 |
chain_period_seconds |
drand piorsaavik info (period) |
30 |
ceil() suliaa toqqarpaa drand-imi anguinneq siulleq saqqummersitsivimmi ≥ unlock_at. Tamanna qulakkeerpaa qub matusernerup sioqqullugu isertorneqarsinnaanngitsoq toqqagaq.
Ungasinnerusumi: (unlock_at - chain_genesis_time) chain_period_seconds-mut tukkiinnarpoq agguarneqarsinnaagunarmat, tassanitappoq anguinnertaa eqqortussaq — qub matusersutaasoq nipingarmat anguinnerup saqqummersitsiviani piffimmi.
Uppernarsarneq: unlock_at PISARIAQARPOQ siunissami matuneqartumi siunertaa atorpaa. unlock_at created_at-mit ukiut 10-mit qaangiussisinnaanngilaq (tamanna agguarnersartoq killilernialerlugu drand-imut atatillugu; UI taava PITSAAVOQ mianersoqquluni unlock-it 2 ukiunit qaangiusserumaartut).
5. Wire Format Newtypes
Wire format newtype-it suliarinerinik mappersarneqartoq CBOR byte JSON-imut, raw plaintext, ilaqqilluunniit byte aaqqissuusserneqartut paatsoorneqartumut.
| Suunersoq | Imanik | Suliarineqarpoq | Tigummineqarpoq |
|---|---|---|---|
SealedQubCbor |
SealedQub-imi CBOR-imi aaqqissuussamiut | serialize_sealed_qub() |
Naassaanngitsumut toqqorsivimmut uploadineq, isiginnaartup aaqqissuussinera |
QubEnvelopeCbor |
QubEnvelope-imi CBOR-imi aaqqissuussamiut | serialize_qub_envelope() |
tlock isertinnermut input, tlock isertuussap qaffaaneranik output |
5.1 Pilersinnerinut Malittarisassat
// Production-imi suliarineqartoq — CBOR serialiseringeqartumi kisiat:
let sealed = SealedQubCbor::from_encoded(cbor_bytes);
// Periartumik From<Vec<u8>>-imik suliarineqarsimanngilaq.
// Byte tamatigut wire format suunersuanut isumakuluuteqarunnaanngilatit.
// Raw byte-it tigussussallugit:
let bytes: &[u8] = sealed.as_bytes();
let bytes: Vec<u8> = sealed.into_bytes();
5.2 Suliarineq nalilersuinerni
from_encoded() PITSAAVOQ misissulertarluni input CBOR-imi map qulequtaa aalajangersimasoq atorpat. Aaqqissuussamiut tamarmik uppernarsarneqarnerat parse-eriarluni pivoq, suliarineqarluni pinnani, marloriaammik suliarineqarnissaa pinaveersaarniarlugu.
6. Imaa Suunersoq Allatamiut
| Naliliineq | Suunersoq | Timaata Annerpaaffia | Malugarsiivigineqartoq |
|---|---|---|---|
0x00 |
Sernigineqartoq (akuerinneqanngitsoq) | — | ATORNEQASSANNGILAQ |
0x01 |
Allataq nalingisoq (UTF-8, killilersimasumik Markdown) | 50 KB akilerlugu / 10 KB akeqanngitsoq | Qiviarit §10 saqqummiunnermut malittarisassat. Akeqanngitsumut/akiliisumut agguarsineq upload-imut atorfeqarfia atorlugu qulakkeerneqarpoq; protokoli-mi killiliivik ataasiusoq 50 KB-iuvoq. |
0x02 |
Sernigineqartoq (siunissami) | — | Siunissami imai suunersoraat-mut tunniunneqartoq; v1-mi akuerinneqanngilaq. Isiginnaartut PISARIAQARPOQ itigartittussaat malittarisaq ataani naapertorlugu. |
0x03 |
Isumaqatigiissut (bilateral, CBOR-imi timaa) | 100 KB | Timaa CBOR-imi aaqqissuussamiut PactTerms (§6.1). Atsiorqatigiinneq §9.7 naapertorlugu. |
0x04 |
Naliliineq (pilersitsisup imminik kvalitatigineraa, CBOR-imi timaa) | 8 KB | Timaa CBOR-imi aaqqissuussamiut VerdictBody (§6.2). Atorfilersuuteqarfimmit verdict siunertaa kisiat saqqummiisarpoq. Angajulliusumi atassuteqarneq Arweave-mi Parent-Tx-Id tag-aniipoq, timaaniinnani. Qiviarit verdict-uplift-plan §3.4. |
Isiginnaartut imai paasinarsinnatik akuerinneqanngitsoq itigartittariaqarpaat erseqqissumik atugartumut takutitsinermik kukkunersiisutik. Isiginnaartut imai paasinarsinnagit allatatut saqqummiunissaminik misilersortussaanngillat.
6.1 Isumaqatigiissummi Timaa (content_type = 0x03)
Isumaqatigiissummi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera PactTerms naliliineqartumut:
PactTerms {
pact_version: u8, // 0x01 aaqqissuussamiunut/v1-mut
title: String, // ≤ 200 byte, NFC
terms: Vec<PactTerm>, // ≤ 20 sineriaq
party_a: PartyIdentifier, // pilersitsisoq
party_b: PartyIdentifier, // atsiorqatigiisoq
notes: Option<String>, // ≤ 5,000 byte, NFC; peqanngitsumut peqanngitsoq
}
PactTerm { key: String (≤ 100), value: String (≤ 2,000) } // NFC sineriaalu marluk
PartyIdentifier{ label: String (≤ 100), contact: Option<String (≤ 320)> }
CBOR-imi aaqqissuussamiut key-itik ileqquinut tamarmik map-it pingasunut §3.2-mi tunniunneqarput. Tamarmik nalunaaqutigineqartoq isumaqatigiissummi CBOR 100 KB-imit qaangiussisinnaanngilaq (§6 assertorlugu).
Schema kingumut paasisaq. terms-mi sineriaq siulleq structured/v1 isumaqatigiissummut PISARIAQARPOQ tassaassasoq { key: "pact_schema", value: "structured/v1" }. Sineriaq malugaq peqanngitsoq "ileqquminik" isumaqatigiissutaaput aamma aaqqissuussamiut uppernarsaaneqarnerannik schema-imut paasinninnermilluunniit saqqummersitsinerannik pissarsisitiineqanngitsut.
Aaqqissuusinnermi akuersaarnermut inissianngitsut. structured/v1 isumaqatigiissutit eqqortumik sisamanik akuersaartumut sineriaqartut imaattut key-isigut:
"initiator_standard_terms"
"initiator_capacity_terms"
"counterparty_standard_terms"
"counterparty_capacity_terms"
value tamarmik arfineq-pingasunit aaqqissuusinnermi tuluttut allataasut atuagaq atorlugu (role, kind) naliliisaq, tassani role ∈ { seller, buyer, provider, client } aamma kind ∈ { standard, capacity }. Oqaatsit imminuna protokoli-mi paasissutissat normative-ngorlugit — pingasut tamarmik ML-DSA-65 atsiorneqarnerat byte-it eqqorlugit body_hash-imut paasaqartumik. Localiserneqanngillat; atsiorneqartoq timaa oqaatsit naapertorlugu mikilersuiunngitsoq. Naliliineq sumi tamani allangortinneq schema-imik versioni nutaamik (structured/v2) atorpoq.
Arfineq-pingasut, ujarlernerat (acknowledgement_for(role, kind)), aamma tunngaviligissutaasaa najoqqutaqartoq pilersaarutigineqarpoq reference-mi suliarineqarnertik. Tamarmik suliarineqarnerit PISARIAQARPOQ byte-it eqqortumik akuersaarnermut naliliineqarnermut saqqummiussisinnasut; golden-fixture SHA3-256 body-hash-mut misilernerit role-i sisamat tamarmik atussusiusut aalajangersutsinnut tigussinerinik tigussagaqartillugit.
Isiginnaartumi saqqummiunneqartumi ileqquaa. Akuersaarneq oqaatsit imai imaattut "qulaaniittup allaaserineqartup tunngavigalugu" naatsorsuutiminerit, naatsoq-killip sineriai siulliuvoq akuersaartumi sioqqullugit saqqummiunneqartussat. Isiginnaartumut PISARIAQARPOQ terms array-i CBOR-imi ileqquaa atorlugu saqqummiussisut; allanngortinneq saqqummiunneqartut paasinarsiarneqarnera sequjuvoq.
Atsiorqatigiisup attaveqartussaa. Party B-mi contact mailimi tunngaviusumik tassaagaani, qub upload atorfilersuuteqarfia siunnersuussamik atsiorqatigiinnerlu nassippoq isertuussaminik ulluini tunngavilersuugaq aamma atsiorqatigiinneq imminuna piffimmilluunniit allaffigineqarnerat assingusoq misissoqqullugu (§9.7). Isumaqatigiissutit Party B contact peqanngitsut atsiorqatigiineqarsinnaapput, kisiannili out-of-band aqqutaa atorlugu — atorfilersuuteqarfik atsiorqatigiinnermut piumassuteqartumik itigartippoq, misiliusinnaasumik 15-minuti email-mut misissulinermut malugartussaq atorsinnaaneqartoq.
6.2 Naliliinermi Timaa (content_type = 0x04)
Naliliinermi timaa tassaavoq CBOR-imi aaqqissuussamiut allaaserineqarnera VerdictBody naliliineqartumut:
VerdictBody {
verdict_version: u8, // 0x01 aaqqissuussamiunut/v1-mut
outcome: u8, // 1=Eqqortoq · 2=Ilaa · 3=Kukkussoq · 4=Misilerneqarsinnaanngitsoq
reflection: Option<String>, // ≤ 2,000 byte NFC; "suna allanngorpa, suna ilikkarpiuk"
evidence_url: Option<String>, // ≤ 2,048 byte; HTTPS-mi kisiat; peqanngippat key peqanngilaq
}
CBOR-imi aaqqissuussamiut key-itik tulleriiaa:
"outcome" (8 byte allaaserineqartut)
"reflection" (11 byte allaaserineqartut) ← peqartillugu kisiat
"evidence_url" (13 byte allaaserineqartut) ← peqartillugu kisiat
"verdict_version" (16 byte allaaserineqartut)
Tamarmik nalunaaqutigineqartoq naliliinermi CBOR 8 KB-mit qaangiussisinnaanngilaq (qulaaniittumut registry-mut naapertorpoq).
Inernerup naliliisai. Wire byte siunertaqanngilaq; sisamat Eqqortoq / Ilaa / Kukkussoq / Misilerneqarsinnaanngitsoq siunertat naliliinermut atugassat tamaat inernerinik ataqatigiissaarput. Siunertanut ataasiakkaanut ilisarnaatit ("Naqissusiivunga" / "Naammassisimavara" / "Pilersaarutigineqartutut" / "Pisut nalunaarutigaat" Eqqortoq-mut, allallu) isiginnaartumi saqqummiunnermut tunngassuteqarpoq angajulliusoq qub-imi siunertaa tunngavigalugu aalajangerneqartoq — wire oqaatsinut aamma siunertanut atanngitsumik atassusaarpoq. 1..=4-mit avissaartumi naliliineqartut PISARIAQARPOQ decode-imi itigartittut.
Angajullimut atassuteqarneq. Naliliinermi qub angajulliusumut atassutaa timaaniippanngilaq. Angajulliusoq qub-imi Arweave transaktion-imi ID upload-imi Parent-Tx-Id toqqorsuutaata tag-aani saqqummiunneqarpoq (§7 toqqorsuutaata tag-aata sineriaa). Tamanna timaa imminik ineriartortillugu atsiorneqartumik nammineq nalilersuissummi oqaatsiusumik tigussinerinik tiguppaa; atorsimanermi malugartoq ("suna eqqorpa?") Arweave-mi tag-imi ujartornermut tunngaviusumik aalajangerneqarpoq.
Uppernarsaammi nittartagaq isumannaatsuunnera (normative). evidence_url peqartillugu, uppernarsaasut (matusiartortumi, wire-imi, Worker-ip sineriaani) PISARIAQARPOQ ingerlatsinerit imaattut:
- 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. Atugaq plaintext aamma metadata ComposeQub-imi suliarivoq.
2. Misissuilluni:
a. body peqarpoq.
b. body annertussusii ≤ content_type-mut aamma atugaq tier (qiviarit §6).
c. unlock_at siunissamiipoq.
d. unlock_at ≤ created_at + 10 ukiut.
e. content_type ilisarnaajoq, akuersaartoq.
3. Naatsorsuiniarit body_hash = SHA3-256(body).
4. Inissinniarluni created_at = sapinginnermi Unix sekundi UTC.
5. drand piorsaavik toqqaruk. Nakkutigilluku chain_genesis_time aamma chain_period_seconds, aamma
naatsorsuiniarit drand_round = ceil((unlock_at - chain_genesis_time) / chain_period_seconds).
(Maani, qub_id sioqqullugu, naatsorsorneqarpoq, drand_round qub_id preimage-imut
atassutsivimmat — §4.1, V1.2.)
6. Naatsorsuiniarit qub_id (qiviarit §4.1), drand_round 5-mit ilanngullugu.
7. Pilersiniarluni QubEnvelope sumi tamani naasoqartumi.
8. Nalunaarutigissallugu QubEnvelope canonical CBOR atorlugu → byte B.
Misissorlugu: nalunaaqutigineqartoq tunisarneqarnera profile naapertortikkit (§3).
9. Naatsorsuiniarit C = tlock_encrypt(B, drand_round, drand_chain_public_key).
10. Pilersiniarluni SealedQub tlock_ciphertext = C, qub_id, version,
unlock_at, drand_chain_id, drand_round assertortillugit.
12. Nalunaarutigissallugu SealedQub canonical CBOR atorlugu → SealedQubCbor.
12a. Pilersikkit K = 32 sianigissummik byte (CSPRNG) aamma N = 12 sianigissummik byte (CSPRNG).
Naatsorsuiniarit W = wrap_sealed_qub(SealedQubCbor, qub_id=qub_id, key=K, nonce=N)
§13 naapertorlugu. Byte-it naassaanngitsumut toqqorsivimmut uploadineqartut tassaavoq OuterWrapper CBOR W,
SealedQubCbor naliusaq imminuna ataaseq. K atortumini qimaatissaq URL-imi
killip imaa 16 imminuna.
13. Saqqummiussiniarlugu matusinermi saqqummiussineq. Atugaq aalajangerpoq.
14. Misissuiniartoq upload akuerineqarsinnaanera qub upload atorfilersuuteqarfia atorlugu (bot-mut misissornermut, atorfeqartumut, kingunersuutinut killiit).
15. Aalakoorluku W (OuterWrapper byte) qub upload atorfilersuuteqarfimut; atorfilersuuteqarfik
atsiorpaa aamma naassaanngitsumut toqqorsivimmut uploadineqarpoq. Atorfilersuuteqarfik byte-mut paasinanngitsoq iluani
SealedQubCbor-mut aamma K-mik tigusisoqannginneranik.
16. arweave_tx_id atorfilersuuteqarfimit tigutigissavat. Tunniunnermut nittartagaq pilersiniarluni
`<origin>/c/<arweave_tx_id>#<base64url(K)>` (imaluunniit `<origin>/s/<short_code>#<base64url(K)>`
short code-imik inissinneqartillugu). Browser-it URL fragment server-imut nassiunneqarsinnaanngilat,
K qub.social toqqorsivimmi gateway-imut tamannallu malugineqarsinnaanngitsoq.
Toqqorsivimmi tag-it (out-of-band). qub upload atorfilersuuteqarfia mikitsumik tigussaa toqqorsivimmi transaktionimik tag-it pusinneqarsimasumut nassiussassanut. Content-Type=application/octet-stream normativiusumik PISARIAQARPOQ atorneqartoq. Reference atorfilersuuteqarfik tigussaa pingasunik tag sapinginnermut piumassusiisartut pilersitsisoq saqqummiunneqassasoq toqqarpat: Intent (allowlist atorlugu misissorneqartoq compose intent — assersuutigalugu, quote, reply, commitment), Author (pilersitsisup §9.3 pubkey fingerprint 64-byte mikilersitamut hex), aamma Parent-Tx-Id (angajulliup qub-ip toqqorsivimmi transaktioniata ID akissummut sineriaqartut, 43-byte base64url).
Author tag qub-imut atatillugu opt-in: reference pilersitsisup atortugaa tassanngaannaq atorpaa atugaq erseqqissumik tamanut atimineq matusinermi sapinginnermi pisut. Toggle-imi peqanngippat — default-imi — Author tag-imik allaaserineq pinngilaq aamma qub piorsaavimmi atinnik tunneqarpoq: naassaanngitsumut toqqorsivimmi suunngitsoq uploaditta pilersitsisup handle-iata, email-iata, qub allaata atassuteqassallutik. Toggle-imi peqarpat, Author fingerprint pilersitsisup toqqakkani @handle-mut sineriagineqarpoq §9.5 uppernarsaanermut atassuteqartillugu. Akissummut sineriaqartumut atassuteqarneq aamma Intent kinaassuserinineq pinngilaq. Pusinneqartumi puua (§13) sernigaa timaata ciphertext sineriallaarneq — nakkutiliusumik qub-tut suluit upload taakkua paasinaarsinnaajumallugu bulk-mik isertinaarlugit drand-imi anguinnerat saqqummersikkaangat.
Reference atorfilersuuteqarfik siunissamilluunniit nassiussisanngilaq App-Name, App-Version, imaluunniit Type tag-it: imaammik atausimik-naliliisumik aalajangersinneq qub corpus tamarmiusoq utertinneqartussaq GraphQL-imi misissussamut, taamaattoq pusinneqartumi timi-kisiat illernaqqissaarnernut sungiusarnernut akersutaasoq.
Misissornermut malillugu PISARIAQARPOQ toqqorsivimmi tag atortumut §11 inummi-pingajuanut uppernarsaanernut tunngavissatut atorneqassanngitsoq; body hash / qub_id / atsiorneq tamaat naliusap CBOR-imut paasaqartoq imminuna, tag set-imut peqanngitsoq.
8. Qaffaanissamut Protokoli
Qaffaanerup tamarmiusup ingerlatsineranik. Aalajangiineq tamaat normative.
1. Isiginnaartoq tunniunneqarnermut nittartagaq ammaapaa. arweave_tx_id-mik aqqut-iliarit
AAMMA K = base64url_decode(fragment) URL fragmentimit. Fragmenti peqanngippat
aqqutilluunniit ajortillugu → saqqummiussissava "URL-i matua isertorneqarnermut
isumassuissaminik peqanngilaq" aamma unitsillugit; isiginnaartumut PISARIAQARPOQ
toqqorsivimmi gateway-imut attavigeqqaarani K-mik peqanngitsumi, kingumut pusinneqartumi
byte isertorneqarsinnaanngitsumi pissarsiarniarluni siunertaqanngilaq atortumullu
attaveqarnissamik tassanngaannaq saqqummersitsisarmat.
2. Inerteqquniarit denylist. tx_id denylistemiittoq → unitsileqqummik saqqummiussit. Unitsillugu.
3. Tigusisoq OuterWrapper byte naassaanngitsumut toqqorsivimmit (gateway tassanga-aliartiteriinnarluni).
3a. Pusisitsineq: byte-it parse-eriarlugit OuterWrapper-tut (§13), wrapper-mi
`version` byte `0x01` misissorlugu, naatsorsuiniarluni SealedQubCbor =
unwrap_sealed_qub(OuterWrapper, key=K). AEAD-imut uppernarsaaneqarluni naammasinneq
(K kukkupput, ciphertext malugaq, qub_id-as-AAD allaajaq, nonce allaajaq) →
saqqummiussit "URL-imi isertorneqarnermut isumassuissaq qub toqqorneqartumut
naammassinngilaq" aamma unitsillugu. AEAD-imut uppernarsaanerni naammasinnerit
isiginnaartumut paasiuminaapput §13.5 naapertorlugu.
4. Parse-eriarluni SealedQubCbor → SealedQub.
5. Misissulluni: SealedQub.version paasineqartoq (0x01). Version paasineqartumik ajortoq itigartillugu.
6. Pisarit pissuserivigineqarnera < SealedQub.unlock_at → countdown saqqummiussit. Misissuiniaqatigit utaqqillutit.
6a. Anguinnermut-atassutsinermut misissuineq (V1.2). Utertillugu naatsorsuiniarit expected_round =
ceil((SealedQub.unlock_at - chain_genesis_time) / chain_period_seconds).
Itigartillugu SealedQub.drand_round == expected_round AAMMA tlock ciphertext suluani
anguinneq (age/tlock header-imit atuarneqartoq, atsiorneq pisariaqanngitsoq) == expected_round
naammassinngippata. Suluani anguinneq tassaavoq matusinnermut ilumut piffimmut paasaqartoq;
una misissuineq ajorpat pilersitsisoq akornusersuisinnaasoq ciphertext anguinnermut qaangiukkamut
atassutsisinnaavaa countdown siunissami takutillugu, taamaalimmat kinaluunniit byte toqqorneqartut
atuartut unlock_at sioqqullugu isertorsinnaapput. Suliarinerit piorsaaviup kinaassusianik
peqanngitsut (test mock) una misissuineq itigartippaat.
7. Pissuserivigineqarnera ≥ SealedQub.unlock_at-mut:
a. Pisariaqartumik drand-imi anguinnerup atsiorneqarnera SealedQub.drand_round-imut drand-imut tigutiniariarluni.
b. Naatsorsuiniarluni B = tlock_decrypt(SealedQub.tlock_ciphertext, round_signature).
8. Parse-eriarluni B → QubEnvelope.
9. Misissulluni QubEnvelope.version paasineqartoq.
10. Uppernarsuluni: SHA3-256(QubEnvelope.body) == QubEnvelope.body_hash.
Naammassinngippat → akornutaqarnermut kukkunersiut.
11. Uppernarsuluni: QubEnvelope.qub_id == SealedQub.qub_id.
Naammassinngippat → akornutaqarnermut kukkunersiut.
12. Uppernarsuluni: QubEnvelope.unlock_at == SealedQub.unlock_at.
Naammassinngippat → akornutaqarnermut kukkunersiut.
13. Uppernarsuluni: QubEnvelope.content_type paasineqartoq aamma saqqummiunneqarsinnaasoq.
Naliliisaq paasineqartut: 0x01 (allataq), 0x03 (isumaqatigiissut). Paasineqanngitsoq → kukkunersiut saqqummiussit.
14. QubEnvelope.sig_alg != 0x00 → atsiorneqarnera atsiorneqartumut uppernarsiniaruk (qiviarit §9.4).
15. cosigner_pubkey imaluunniit cosigner_signature peqarpat → atsiorqatigiisoq uppernarsiniaruk (qiviarit §9.7).
16. Imai naapertorlugu saqqummiunniartumut atorlugu rendererneqarluni (qiviarit §10 allatamut, §6 isumaqatigiissummut).
17. RevealedQub pilersikkit saqqummiussiniarluni.
9. Pilersitsisup Atsiorneqarnera
9.1 Naapertuusaaq
qub-it naassaanngitsumut toqqorsivimmi sumiiffeqarluinnarput. Pilersitsineq atsiorneqarnerat akornusiitisorneqarsinnaanngitsoq qaqugulluunniit ataqqinassanngittussat, taama pissutigalugu v1.0 atorpoq kingorna-kvantum ML-DSA-65 (FIPS 204) naliusap qaqugulluunniit naluneqarsinnaasup tunngavianik aalajangersaanissaminut qub-ip sumiiffia atussinnaapput.
9.2 Algoritmip Allataa
sig_alg |
Aaqqissuussaq | Isumassuissap Annertussusia | Atsiorneq Annertussusia |
|---|---|---|---|
0x00 |
Atsiorneqarsimanngitsoq | — | — |
0x01 |
ML-DSA-65 (FIPS 204) | 1,952 byte | 3,309 byte |
Isiginnaartut PISARIAQARPOQ paasinarnatik sig_alg naliliineqartut itigartittariaqarpaat.
9.3 Atsiorneqarsimasumut Preimage-mut Suliarineq
Preimage-mut versioni marluk pisimapput. Atsiornerni tamani V2 PISARIAQARPOQ atorneqartoq, uppernarsaasullu PISARIAQARPOQ V2 kisiat akuertariaqarpaat. V1 preimage pisoqaq (allaqqasoq ataani oqaluttuarisaanermut) V2-mut nuunneqarnerani uppernarsaanermut kisiat taarsiisussatut akuerineqarsimavoq; taarsiissut taanna atorunnaarsinneqarpoq V1-kisiat-atsiornerlu maanna itigartinneqarpoq.
V2 (maannakkut — pilersitsisup atsiornera nutaaq tamaat pilersippaa, aamma pact staging / cosign ingerlanermi atsiornerit marluk):
sig_input = SHA3-256(
"QUB_AUTHOR_SIG_V2" || // tunngaviusoq immikkoorut (17 byte)
version || // u8 (1 byte)
qub_id || // [u8; 32] (32 byte)
body_hash || // [u8; 32] (32 byte)
unlock_at || // i64 big-endian (8 byte)
0x00 || // u8 (1 byte): PISARIAQARPOQ 0x00 v1.x-mut
sender_label_hash || // [u8; 32]: SHA3-256(NFC(sender_label)),
// imaluunniit peqanngippat nuller-tamaasa 32 byte
reply_to_or_zero // [u8; 32]: parent qub_id, imaluunniit nuller-
// tamaasa 32 byte peqanngippat
)
// Preimage tamarmiusoq: 155 byte → 32-byte hash
signature = Sign(author_secret_key, sig_input)
sender_label_hash title_hash (§4.2.1) assigiimmik peqanngitsumut-sentinel ileqqoq malippaa: nuller-tamaasa 32 byte SHA3-256-mit iluartumik saqqummersinneqarsinnaanngimmat, taamaalimmat "peqanngitsoq" label-imut peqartumut qaqugulluunniit naapissanngilaq. Naasut tamarmik takissuseq-aalajangersimasut, taamaalimmat preimage takissusermut-siuartaqaratik paatsiveeruteqanngilaq.
V1 (pisoqaq — ATORUNNAARSINNEQARSIMASOQ; pilersinneqarunnaarpoq aamma uppernarsaanermi akuerineqarunnaarluni):
sig_input = SHA3-256(
"QUB_AUTHOR_SIG_V1" || // tunngaviusoq immikkoorut (17 byte)
version || // u8 (1 byte)
qub_id || // [u8; 32] (32 byte)
body_hash || // [u8; 32] (32 byte)
unlock_at || // i64 big-endian (8 byte)
0x00 // u8 (1 byte): PISARIAQARPOQ 0x00 v1.0-mut
)
// Preimage tamarmiusoq: 91 byte → 32-byte hash
V1 preimage sender_label aamma reply_to ilanngutinngilai. V2-mut nuunneqarnerani uppernarsaanermut kisiat taarsiisussatut akuerineqarsimavoq; taarsiissut taanna maannamut atorunnaarsinneqarpoq — uppernarsaasut PISARIAQARPOQ V2 preimage kisiat akuertariaqarpaat. Allaaserineq maani oqaluttuarisaanermut aamma ataani tunngaviusoq immikkoorut nassuiaataanut attatineqarpoq. Atsiorneq V1-imut kisiat uppernartoq PISARIAQARPOQ uppernarsaanermut naammassinngitsutut isigineqartariaqarpoq.
Tunngaviusut immikkoorutit: "QUB_AUTHOR_SIG_V1" / "QUB_AUTHOR_SIG_V2" ataasiakkaarlutik ASCII byte 17-iupput ([0x51, 0x55, 0x42, 0x5F, 0x41, 0x55, 0x54, 0x48, 0x4F, 0x52, 0x5F, 0x53, 0x49, 0x47, 0x5F, 0x56, 0x31/0x32]). Ilaateqaqanngilaq. Immikkoorutip assigiinngitsup suliarineqarnerit marluk immikkoortippai, taamaalimmat atsiorneq preimage ataasertumut aappaanut naanngitsumut uppernartinneqarsinnaanngilaq.
org_id_present byte: unlock_at-p kingornani byte PISARIAQARPOQ 0x00. Reference-imi suliarinerup tassuninnga ORG_ID_PRESENT_INDIVIDUAL = 0x00 konstantitut saqqummiussivaa crates/qub-core/src/signing.rs-imi; isiginnaartut sig_input uppernarsariniarpaat byte assigiimmik nassiussissut.
Atsiorneqartup sumi tamani — suna naliusaaffigineqartoq sunalu naliusaaffigineqanngitsoq. V2 sig_input toqqaannartumik nassuerutigivai version, qub_id, body_hash, unlock_at, sender_label, aamma reply_to (aamma aalajangersarsimasoq tunngaviusoq immikkoorut aamma org_id_present byte). qub_id imaa pilersinneqarpoq version, content_type, created_at, unlock_at, outcome_at, drand_round, aamma body_hash §4.1 preimage atorlugu, taamaalimmat naasut taakku allangortinneqarpata qub_id-mut allatut saqqummiisitsipput atsiorneqarnermilu malugartoqarluni. Naliuvigineqartoq sumi tamani imaattuvoq:
| Naasoq | Atsiorneqarnermut uppernarsaaneqartoq | Qanoq |
|---|---|---|
version |
✓ | sig_input-mut input ataasiussoq |
qub_id |
✓ | Input ataasiussoq |
body_hash |
✓ | Input ataasiussoq |
unlock_at |
✓ | Input ataasiussoq |
sender_label |
✓ | Input ataasiussoq sender_label_hash atorlugu (V2 preimage — ilusaq akuerineqartoq kisiat) |
reply_to |
✓ | Input ataasiussoq reply_to_or_zero atorlugu (V2 preimage — ilusaq akuerineqartoq kisiat) |
content_type |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
created_at |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
outcome_at |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu |
drand_round |
✓ | Aqqut-iliartumik, qub_id preimage atorlugu (V1.2) |
body |
✓ | Aqqut-iliartumik, body_hash = SHA3-256(body) atorlugu |
author_pubkey |
— (immaqimik) | Atsiornermik uppernarsaasoq isumassuissaq pilersitsisuvoq, naapertorlugu |
cosigner_pubkey / cosigner_signature |
— | Naapertorlugu atsiorneqarsimasut sig_input assigiimmiut (qiviarit §9.7) |
drand_chain_id, tlock_ciphertext, visibility |
— | Avammut SealedQub naasut, puuata iluani peqanngitsut — namminnerannik atortulinnut aalajangersimaartumi (anguinneq / piorsaavik assigiittariniarneq) atortuneqartut, atsiorneqarnermilli pilersitsisup atorneqaratik. (drand_round maanna aqqut-iliartumik qub_id preimage atorlugu atassutsivoq — qiviarit qulaani.) |
Sooq V2 preimage kisiat akuerineqartoq.
- 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. QubEnvelope-imit sig_alg-mik atuariniaqit.
2. sig_alg == 0x00 → atsiorneqarsimanngitsoq. Uppernarsaqanngilaq. "qub atsiorneqarsimanngitsoq" saqqummiussit.
3. sig_alg paasineqanngippat → itigartittariaqarpoq. "atsiorneqarnermut aaqqissuussaq paasineqanngitsoq" saqqummiussit.
4. author_signature aamma author_pubkey nuussiniaqit. Naliliineq aappa peqanngippat → akornutaqarnermut kukkunersiut.
5. Uutivigit sig_input QubEnvelope-imi naasut atorlugit (V2 formula, §9.3).
6. Verify(author_pubkey, sig_input, author_signature). V2 preimage tassaavoq ilusaq
akuerineqartoq kisiat — V1 taarsiissut pisoqaq atorunnaarsinneqarpoq (§9.3),
taamaalimmat atsiorneq V2-mut uppernanngitsoq naammassinngilaq, taamaannarlu.
7. Uppernarsaaneq iluatsippat → "atsiorneqarsimasoq [isumassuissap fingerprint-iat]" saqqummiussit.
8. Uppernarsaaneq naammasinngippat → "atsiorneqarsimasup uppernarsaaneqarnera naammasinngilaq" saqqummiussit.
Atsiorneqarnermut uppernarsaaneq akiliuminartumik (ML-DSA-65 immikkut). PITSAAVOQ ingerlanneqartoq misissuinerit tamaat akinerusut (hash, qub_id, unlock_at) iluatsisimanerinit kingorna.
9.5 Kinaassutsimut Uppernarsaanerit
Kinaassutsimut uppernarsaanerit — author_pubkey-mut allaaserineq inungnut paasineqarsinnaasoq imaattumut qub handle, email, social handle, imaluunniit passkey credential — tassaapput isiginnaartup-tungaani sapinginnermut nikilersaaneq atsiorneqarnermut uppernarsaanermut PISARIAQANNGILAQ. Isiginnaartut attestation atortuusugaq saqqummiussumut kinaassusiat aalajangiisinnaasaat, taamaalimmat PISARIAQARPOQ malittarisaq atorlugu:
handle > email > social > fingerprint
Fingerprint-imut tigussaap atorneqartoq tassaavoq mikilersaagaq hex SHA3-256(author_pubkey)-imit; atsiorneqarsimasoq qub-imut tamaviarluni atortarpoq. Isiginnaartut saqqummiussinermut naatsorsorsinnaavaat — reference isiginnaartoq saqqummiisarpoq qub: malillugu byte-it sisamat siulliit aamma kingulliit (qub:<8 hex>…<8 hex>).
Suliarinneq attestation §9.4-mi misissuinerit tamaat suliarisinnaavaat qub API-mut attaverpata, naassaanngitsumut toqqorsivik aamma drand-imit allamiit atassutiusumik, atorfilersuuteqarfimi nakkutilliuneqarsimanaminnik. Attestation aalajangiussigit tassaavoq immikkut sapinginnerpaamik suliareqquneqartoq atsiorneqarnermut uppernarsaaneq iluatsillugu kingusiinnerusukkut.
9.6 Annertussusiisinnermut Sunniineq
| Ed25519 | ML-DSA-65 | |
|---|---|---|
| Atsiorneq | 64 byte | 3,309 byte |
| Pubkey | 32 byte | 1,952 byte |
| Tamarmiusoq qub-imut | 96 byte | 5,261 byte |
| Toqqorsivimmi akiliutiisalisinnerat (~$5/MB) | ~$0.0005 | ~$0.026 |
qub allataq 500–2,000 byte-imik annertutigisoq, ML-DSA-65 ataasiakkaarluni pingajussaq annertussusiisinaqaaq toqqarvigaata. Aki sapilinnerusoq mikiluartoq.
9.7 Atsiorqatigiisup Uppernarsaaneqarnera (Pact Bilateral Isumaqatigiissutit)
Bilateral isumaqatigiissutinut (content_type = 0x03), tullissaasoq atsiorneqarnerup ilaa tamarmik akiliisup assigiimmik aalajangersimanertik uppernarsaavaa.
Puuata naasui:
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. cosigner_pubkey peqanngippat aamma cosigner_signature peqanngippat → atsiorqatigiisoq peqanngilaq. Naammassivoq.
2. Ataasiullaaq peqarpat → akornutaqarnermut kukkunersiut.
3. Uppernarsuluni cosigner_pubkey != author_pubkey (namminneq atsiorqatigiinneq pinaveersaarniarluni).
Naammassinngippat → "atsiorqatigiisup pubkey-ata pilersitsisumiit assingunneqassanngilaq" saqqummiussit.
4. Uutivigit sig_input §9.3-mi formula assigaa atorlugu (V2 kisiat — V1 taarsiissut
pisoqaq atorunnaarsinneqarpoq; pact client-it tamarmik V2 atsiornernik pilersitsipput).
5. Verify(cosigner_pubkey, sig_input, cosigner_signature).
6. Iluatsippoq → "atsiorqatigiinneq [atsiorqatigiisup fingerprint-iat]" saqqummiussit.
7. Naammassinngippoq → "atsiorqatigiinnermut uppernarsaaneq naammasinngilaq" saqqummiussit.
Pissusii:
- 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 pingajussaaq sumiluunniit tamanut qub uppernarsarsinnaavaa qub-imut suleqatigeqqaarani. Uppernarsaanermut periusissaq:
1. arweave_tx_id pisarit (tunniunneqarnermut nittartagamit imaluunniit ilisarisimasaminit).
2. Tigusisoq SealedQubCbor toqqorsivimmi gateway sumi tamani.
3. Misissulluni toqqorsivimmi block inkluderi (block-mi qule, block-mi pissuserivik).
4. Parse-erluku SealedQubCbor → SealedQub.
5. Tigusisoq drand-imi anguinnerup atsiorneqarnera SealedQub.drand_round-imut.
6. tlock_decrypt(tlock_ciphertext, round_signature) → QubEnvelope CBOR byte.
7. Parse-erluku → QubEnvelope.
8. Misissulluni SHA3-256(body) == body_hash.
9. Misissulluni QubEnvelope.qub_id == SealedQub.qub_id.
10. Misissulluni QubEnvelope.unlock_at == SealedQub.unlock_at.
11. sig_alg != 0x00 atugaq: misissulluni author_signature (qiviarit §9.4).
12. Misissuinerit tamaat iluatsippoq → qub uppernarsaaneqarpoq.
Uppernarsaaneq sumut uppernartunngorneraat:
| Uppernarsaaneq | Suna aalajangerneqartoq |
|---|---|
| Aalajangersimasaq | Ciphertext piaareerpoq toqqorsivimmi block-mut pissuserivigineqartumi. |
| Akornusersitiineq | Plaintext-imi timaa hash-imi aalajangersarsimasumut naapertortinneqarpoq, taamaalimmat allangortinneqarsimanngitsoq. |
| Piffeqarluni | Imai paasiuminaattup drand-imi anguinneq, taakku toqqagaq matusinnernut piffimmut paasaqartoq (tlock aamma drand isumannaarnermut malugartumut). |
Uppernarsaaneq suna NALI uppernartunngorpaa:
| Uppernarsaaneqanngilaq | Pissutaa |
|---|---|
| Pilersitsineq | sender_label saqqummiussamut. sig_alg ≥ 0x01 peqanngippat, sumi tamani imai matuneqarsimassagaluartoq. |
| Siunertaq | qub uppernarsaavaa imai aamma piffeqartoq, pilersitsisoq qanoq aalajangersimanertik isumarisaanngitsoq. |
| Sapinginnermut-pisup sioqqullugu piffeqarneq | Toqqorsivimmi block-imut inkluderi atortumi upload-imut minutsit kingusinnerusinaqaaq. Aalajangersimasoq pissuserivigineqarpoq block piffia, atugaq "matusineq" inniinnera pinnagu. |
12. Versionerneqarnera
12.1 Protokolip Versionia
SealedQub aamma QubEnvelope tamarmik version naasoq (u8) protokolip pingaarnerpaamik versioniata tikkuussisut.
- Isiginnaartut PISARIAQARPOQ pingaarnerpaarmi version paasineqanngitsut itigartittariaqarpaat erseqqissumik kukkunersiullutik.
- Pingaarnerpaarmi version paasineqartup iluani, decoder-it PISARIAQARPOQ map key-it paasineqanngitsut itigartittariaqarpaat (§3.1) — schema-p ineriartornera
versionnutaamik saqqummiussinikkut pisarpoq, key-inik decoder-it pioreersut qaangiinnartagaannik ilanngussinikkut pinnani. (Aalajangersakkap matuma naqiterneqarnerini siusinnerusuni naasut sapinginnermut piumassusiisartut paasineqanngitsut akuersaarneqarsinnaasimapput; immikkoortoq taanna atorunnaarsinneqarpoq —encode(decode(x))ataasiakkaartuujunnaarsippaa (non-injective) aamma isumaqatigiissutit payload-iini imermut isertortumut-atsiorneqarsimasumut aqqummik ammaavoq.) - Imai sumut atatillugit (
content_type) aamma atsiorneqarnermut aaqqissuussat (sig_alg) versioni-matuneqarsimasut: naliliisat nutaat saqqummissaapput tassanngaannaq versionermut protokolimik nutaamik imaluunniit allatamik allatamut erseqqissumik atorneqarsinnaapput.
12.2 Versioneqarluni Oqaluttuassartaq
| Versioni | Naliliineq | Erseqqissaaneq |
|---|---|---|
| v1 | 0x01 |
Tamanut atortut allataq qub (content_type 0x01), isumaqatigiissut bilateral (0x03, structured/v1 schema, ML-DSA-65 pilersitsisup + atsiorqatigiisup), tlock, SHA3-256 |
12.3 Siunissami Akuersaarsinnaaneq
V1-mi isiginnaartoq QubEnvelope CBOR-imi map key-inik paasineqanngitsunik (key-it §3.2 aaqqissuussamiut ileqquini peqanngitsut) takukkamigit PISARIAQARPOQ decode-imi kukkunermik itigartittariaqarpaa (§3.1). Siunissami akuersaarsinnaaneq version naasoq aqqutigalugu pivoq, key-inik akuersaarnikkut pinnani: siunissami ilassutit — metadata mikisulluunniit — version-imi naliliineq nutaaq ataani saqqummiunneqartarput, taannalu V1-mi isiginnaartup erseqqissumik "protokoli nutaanerusoq" kukkunermik itigartittarpaa, imaq atsiornerit uppernarsagaat nipangiumik peerinnarnagu.
12.4 Avammut Pusinneqartumut Versionia
OuterWrapper §13-mi erseqqissarneqartoq nammineq version byte-eqarpoq, immikkut peqaqqaarpoq SealedQub.version aamma QubEnvelope.version allaapaat. Pinerlilernerinik marluk taakku immikkut ineriartorput: kingorna kvantum-isumassugut symmetric-imik allamut taarsisaq wrapper byte allangortippoq protokolip iluani versioniata atornaa, aamma siunissami protokoli-mi ilaaq (assersuutigalugu, puuata naasoq nutaaq) iluani versioniat allangortippaa wrapper byte attorlugu.
OUTER_WRAPPER_VERSION_* |
Naliliineq | Algoritmi | Killiffik |
|---|---|---|---|
OUTER_WRAPPER_VERSION_1 |
0x01 |
AES-256-GCM 12-byte nonce-mik, 16-byte uppernarsaanermut tag, AAD qub_id-mut atassuteqartoq |
v1 default |
| — | 0x02–0xFF |
Sernigineqartoq | Siunissami |
Isiginnaartut PISARIAQARPOQ paasineqanngitsumi wrapper versionit itigartittariaqarpaat erseqqissumik kukkunersiullutik. Protokoli erseqqissumik wrapper-imi versionermi sumiiffia mikitsumik tigussavaa allangorsivimmik aalajangersimasut saqqummeruttoq (assersuutigalugu, NIST-imi paasissutissaq AEAD allamut tulluartumi); 0x02-mut inissiineqarpoq aaqqissuussinerlu assingisuni algoritmi saqqummiussartoq.
13. Avammut Isertorneqarnermut Pusinneq
13.1 Naapertuusaaq
Protokolip iluai (QubEnvelope → tlock → SealedQub) qub matusereersimasoq suliarivaat piffimmik-matusersuagaq: timaa atuarneqarsinnaanngilaq unlock_at aamma drand-imi anguinnermi atsiorneqarnera saqqummeruttutarpat. Matusinerup kingorna, anguinnerup atsiorneqarnera tamanut nalunaarutigineqarpoq aamma SealedQub CBOR-imi aaqqissuussamiut suluat paasiuminaapput, taamaalimmat nakkutilliuneqarsimasoq naassaanngitsumut toqqorsivik indeks-iarsimasoq qub corpus tamarmiusoq bulk-mik isertinnaarsinnaaqaaq.
Avammut isertorneqarnermut pusinneq nutaaliami tassanga matuvoq atassusiarluni allatigutsianngorlugu symmetric AEAD-mik akornutaqalersarnermut canonical SealedQubCbor aamma byte naassaanngitsumut toqqorsivimmut uploadineqartut akornanniippoq. 256-bit isumassuissaq K najugaqarpoq kisiat tunniunneqarnermut URL-imi fragment-iata atorfia aamma inuk atortuini; browser-it URL fragment-it server-imut nassiussisanngillat, taamaalimmat qub.social, toqqorsivimmi gateway tamarmik, aamma CDN tamarmik siusinnerusukkummut sumi tamani malugartumik tappiineqartoq K-mut. qub-it tamarmik naassaanngitsumut toqqorsivimmi taava paasiuminaappoq ciphertext-tut imaata utertinneqarsinnaanngitsoq URL-i pilersitsisoq toqqarsimasaa angeqqaarani.
Tamarmiusoq akeqartoq:
- Enumerationi-mik kappiisaalisarneq default-imi. Pusinneqartut byte naassaanngitsumut toqqorsivimmi byte-mit nalunaaqutsisinnaanngilat assigiimmik nujui ciphertext-imut. Nakkutilliuneqarsimasoq aqqut-iliarneq "GraphQL-imit misissussagaq qub-tut suluit upload, bulk-imik isertortuq tamanut drand atsiorneqarsimasunik" plaintext-imut killinneqassananngitsoq.
- Crypto-shreddingi sungiussamut atorneqarnera. qub.social naammaalluinnarpoq corpus-imini isertorsinnaanngitsoq. Subpoenait ciphertext-imut tikipput, plaintext-imut pinngitsoq.
- 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 timaa ← QubEnvelope.body (§2.2)
↓ aaqqissuussamiut CBOR (§3)
puuata CBOR
↓ tlock isertortuq drand-imi anguinneq (§7 step 10)
tlock_ciphertext (SealedQub iluani) (§2.3)
↓ aaqqissuussamiut CBOR (§3)
SealedQubCbor byte ← iluani wire suliarineq
↓ AES-256-GCM(K, nonce, AAD=qub_id) (§7 step 12a, kapital una)
OuterWrapper CBOR byte ← naassaanngitsumut toqqorsivimmut uploadineqartoq (§7 step 15)
Matusinissaq aamma qaffaanissaq protokoli-iluani (§7, §8) allangortinneqarunnaarput pusinneqartumi killinganit; pusinneqartumi attaviginneqarpoq seal() allaffigineqarsimanerani aamma kuiakkani unlock()-imi.
13.3 OuterWrapper Paasissutissat Aaqqissuussaat
struct OuterWrapper {
version: u8, // 0x01, qiviarit §12.4
qub_id: [u8; 32], // SealedQub iluani-imit kopiarisaq; AEAD AAD
nonce: [u8; 12], // 96-bit AEAD nonce
ciphertext: Vec<u8>, // AES-256-GCM(K, nonce, SealedQubCbor, AAD=qub_id) || 16-byte tag
}
Naasut aalajangersaasut.
versionPISARIAQARPOQ0x01v1.0 wrapper byte-mut.qub_idPISARIAQARPOQ SealedQub-imiqub_idnaasoq pussunneqaruni utertinneqaruvasimasoq assertortinniarluni. Pussunneqarnerup ingerlatsineranik tassani toqqaasartuneqanngilaq (AEAD AAD-mut atatillugu byte-mut suliarineq akornusersortinnaarpaa), kisiannili matusinissami toqqap atattumik atassusertimik misissoorpoq: pilersitsisupSealedQubCborpusappagu qub_id iluani wrapper qub_id-mut assingunngippat, §8 step 11 naammasinngilaq.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 naassaanngitsumi-toqqorsivimmi byte qub B-mut akulissuk | AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq |
Allangortikkit qub_id naasoq pusinneqartumi upload-imi kingorna |
AAD assingunngitsoq → AEAD uppernarsaaneq naammasinngilaq |
qub_id pusinneqartumi plaintext-imi tigussinnaalersimagaa enumeration kappiisaalinerunik akornusersuinngivippoq — qub_id imminuna SHA3-256 hash §4.1 preimage atorlugu utertinneqarsinnaanngitsuni digest-imi, aamma nakkutilliuneqarsimasoq pusinneqartumi byte-mik kataginnermik pissarsivigineqarsimasoq sumi tamani upload-mi paasisaminik ilisariniqallisaqartumit.
13.5 Pussunissamut aamma Pusiata Qaffaanissamut Algoritmiit
wrap_sealed_qub(SealedQubCbor S, qub_id Q, key K, nonce N):
require K.len() == 32 and N.len() == 12 and Q.len() == 32
C := AES_256_GCM_encrypt(key=K, nonce=N, msg=S, aad=Q)
// C 16-byte uppernarsaanermut tag-imut kingusiinarluni ilanngullugu
return canonical_cbor_encode(OuterWrapper{
version: 0x01,
qub_id: Q,
nonce: N,
ciphertext: C,
})
unwrap_sealed_qub(OuterWrapper bytes W, key K):
require K.len() == 32
O := canonical_cbor_decode(W) as OuterWrapper
require O.version == 0x01 // §12.4
P := AES_256_GCM_decrypt(
key=K, nonce=O.nonce, ciphertext=O.ciphertext, aad=O.qub_id
)
// AEAD-imut naammassinngitsut tamaat → DECRYPT_FAILED, atorsisumut paasineqarsinnaanngitsoq
return P // P SealedQubCbor iluaniipput
Naammasinniaqitanut katigineq. K kukkupput, nonce kukkupput, AAD assingunngitsoq, ciphertext malugaq tamarmik DECRYPT_FAILED kukkunersiummik assigiimmik saqqummiusisarput. Una tassaavoq AEAD-mut aalajangersimaartoq pissusi: naammasinneq sumut paasineqassappat allatigut tunngavissaqarpoq ungasinnerusumi akornusersisup misissornagulu pussunneqarsimasut malugaq nassiullugu pisillugulu nipangatsillugu. Reference-imi suliarineqarnerat PISARIAQARPOQ tamaat AEAD-mut naammassinngitsut atausiaannarluni kukkunersiummut piittussaapput.
13.6 Isumassuissamut Atortut aamma Aalakoorneqarnerat
Pusinissamut isumassuissaq K 256-bit uniformeqartumik sianigissummik tigussaq qub-imut tamaviarluni CSPRNG-imit pilersinneqartoq. Reference suliarineqarnerit pisarput:
- 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. - Tigussatumut-isertorneqartoq iluartumi qub (fase-2-mi atortussaq sernigineqarsimasoq, suli allaaserineqanngitsoq) pusinneqartumi qulaani komposirneqartoq marlumeertumi illernarsineqartumut tunngaviutut; marluk taakku ataatsikkut atortuusinnaaqaaq.
- Isumaqatigiissutit (§6, content_type
0x03) qub allatat pussunneqarput; pusinneqartoq byte-mut paasineqanngitsoq imai sumut atatillugu.
13.8 qub tamanut (pusinneq peerneqarsimasoq)
Avataani pusinneq tassaavoq tunniunnermi killinganni sapinginnermut piumassusiisartoq. Pilersitsisoq qub matusersinnaavaa tamanut, taamaalimmat canonical SealedQubCbor naassaanngitsumut toqqorsivimmut allanneqassaaq tassanngaannaq, OuterWrapper qulequtaqanngitsoq aamma isumassuissaq K peqanngitsoq:
SealedQubCbor bytes ──(public)──▶ uploaded to permanent storage as-is
SealedQubCbor bytes ──(private)─▶ AES-256-GCM(K, …) ▶ OuterWrapper ▶ uploaded
qub tamanut tassaavoq piffimmik-matuneqarsimasoq kisiannili nittartakkamik-matuneqarsimanngitsoq: drand-imi anguinnera saqqummeruttunnagu atuarneqarsinnaanngitsoq (tlock-ip killinga allanngortinneqarsimanngilaq), kisianni matuserneqareerpat kina tamaat arweave_tx_id-mik tigussaqartoq isertorsinnaavaa — URL-imi fragmenti pisariaqanngilaq, K peqanngimmat. Una tassaavoq aalajangersimaarluni akeqartoq killinganut server-ip ingerlatariaqakkaanut: matuserneqarnermut nalunaarummut email-it, allamiunnit embed-it, aamma matuserneqareernerup kingorna SEO pitsaanerusoq tamarmik nittartakkamik pisariaqartippaat server-ip sumiluunniit tigummiunngisaanik isumassuissamik atornagu sulisartumik (§13.6).
Producer-ip eqqumaffigisariaqakkai:
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 tunngaviusoq. Isiginnaartoq/embed naapertuuttoq killit marluk parse-imikkut immikkoortippai: byte-it
OuterWrapper-tut parse-eriartutK-mik-pusiata-qaffaanissaata aqquta tiguaat; byte-itSealedQubCbor-itut imminuna parse-eriartut tassanngaannaq akuersaarneqarput. Wire-imi flag pisariaqanngilaq, aammaqub_idnittartakkamik atassusinngilaq — imai assigiimmikSealedQubkillinganni byte-mut assigiimmik, qub tamanut imaluunniit iluartumut matuserneqarsimagaluarpalluunniit.
Iluartoq (pusinneqartoq) default-ttuassaaq; tamanut tassaavoq pilersitsisup qub-imut ataasiakkaartumik erseqqissumik toqqagaa.
14. Misilernermut Vektorit
14.1 qub_id Aalajangiineqarnera
Input:
version = 0x01
content_type = 0x01
created_at = 1735689600 (2025-01-01 00:00:00 UTC)
unlock_at = 1736294400 (2025-01-08 00:00:00 UTC)
outcome_at = peqanngitsoq
drand_round = 4695445 (= (1736294400 - 1595431050) / 30, drand mainnet parameter-it §14.2)
body = "Hello, future." (UTF-8, 14 byte)
title = peqanngitsoq
Akornanniittoq:
body_hash = SHA3-256("Hello, future.")
= 76ab8b3f843c6ed4f2d0fd75b9f457b4
ad49dd4450f9c22723ae430e3af3211d
title_hash = [0u8; 32] (title peqanngitsoq — §4.2.1 sentinel)
Tunngaviusoq immikkoorut (10 byte):
[0x51, 0x55, 0x42, 0x5F, 0x49, 0x44, 0x5F, 0x56, 0x32, 0x00]
Preimage (108 byte — V1.2):
domain_separator || // 10 byte
0x01 || // version
0x01 || // content_type
0x0000000067748580 || // created_at i64 big-endian (1735689600)
0x00000000677DC000 || // unlock_at i64 big-endian (1736294400)
0x0000000000000000 || // outcome_at_or_zero (outcome_at peqanngitsoq)
0x000000000047A595 || // drand_round u64 big-endian (4695445)
body_hash || // 32 byte
title_hash // 32 byte (nuller-tamaasa sentinel; title peqanngitsoq)
Naatsorsuiniaqallartoq output:
qub_id = SHA3-256(preimage)
= 3a9fcb31b750d985c262fada6d4f777f
d6a28be831d941d85c131f5a4bbaf8a4
Suliarinneq PISARIAQARPOQ body_hash aamma qub_id naliliineqartut assigiimmik saqqummiussaat input-imut. Misilernermut vektori una PITSAAVOQ unit test allaaserinissaminut siulleq. Naliliineqartut canonical qulaani naatsorsuiniarsimasut reference suliarineranit aamma PISARIAQARPOQ bit-tut bit-imut nalunaaqutigineqassasut. Preimage-it itsarnisartut aaqqissuussaat (tassanngaannaq aallartittussaq — qub atortussaq atortugaq pisup taakku naliliinerusut tunngavigissanngilai): 92-byte V1.0 qub_id tassaavoq 3d9fc2390eab043d38a1669ed3b71be76f9eefe872b9569ab1aaa027b88392b0; 100-byte V1.1 qub_id (outcome_at_or_zero ilanngullugu) tassaavoq b0d032898ad629795150fdcb3f84e518f59ed05b7a2a82bc24ebdb87f52144ed. V1.2 drand_round ilanngippaa aamma tunngaviusoq immikkoorut QUB_ID_V2-mut qaffappaa.
14.2 Matusernermut Anguinnermut Allaaserineq
Input:
unlock_at = 1735689600
chain_genesis_time = 1595431050
chain_period_seconds = 30
Naatsorsorneq:
(1735689600 - 1595431050) / 30 = 4675285.0
ceil(4675285.0) = 4675285
drand_round = 4675285
14.3 Aaqqissuussamiut CBOR-imi Sineriarneqarluni Round-Trip
Suliarinneq PISARIAQARPOQ misissussavoq serialize(parse(serialize(qub))) == serialize(qub) input ajornanngitsut tamaviarluni. Una pissutsinik misilernermut, vektoriiluunniit ataasiusoq pinngitsoq.
14.4 PactTerms CBOR (content_type 0x03)
Input:
pact_version = 1
title = "Scooter deposit"
terms = [
{ key: "Item", value: "Honda Metropolitan scooter" },
{ key: "Price", value: "$100" },
{ key: "Deposit", value: "$10" }
]
party_a = { label: "Alice" }
party_b = { label: "Bob", contact: "bob@example.com" }
notes = peqanngitsoq
Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PactTerms):
"notes"(6) < "terms"(6) < "title"(6) < "party_a"(8) < "party_b"(8) < "pact_version"(13)
Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PactTerm):
"key"(4) < "value"(6)
Aaqqissuussamiut CBOR-imi key-itik ileqquinik (PartyIdentifier):
"label"(6) < "contact"(8)
Aaqqissuussamiut CBOR byte aamma SHA3-256 body_hash reference-imi suliarineranit naatsorsuiniarput. Suliarinneq PISARIAQARPOQ byte-mut assigiimik CBOR saqqummiussissasut input matumut.
Suliarinneq PISARIAQARPOQ aamma misissussavoq serialize(parse(serialize(pact))) == serialize(pact) input ajornanngitsut tamaviarluni PactTerms (pissutsinik misilerneq).
14.5 Avammut Pusinneqartumi Oqaatsit-akornanni Vektorit
Avammut pusinneqartoq (§13) immikkut canonical fixture-eqarpoq crates/qub-core/tests/vectors/wrapper_v1.json-imi. Pissutsit tamarmik (key, nonce, qub_id, sealed_cbor) tuple-itik paasiuminaajunnaartumik hex input-itut aalajangersarpaa aamma expected_wrapper_hex output aalajangersamik aalajangersaarpaa. Marluit reference suliarineqarnerit JSON-imi atausiarluni atortuneqarput:
- 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-i maannakkut pingasunik aalajangersarsimavaa:
| Pissut | Tunngavik |
|---|---|
basic-text-public |
Mikinersaq pissusilitsumi SealedQub suluk; sapinginnermi naasut peqanngitsoq. Aaqqissuussinerup canonical wrapper suluk v1.0-imi nalingiusumi qub-imut aalajangersaa. |
with-recipient-pubkey |
SealedQub recipient_pubkey aalajangersimasoq (Phase 2 aqqut). Iluani CBOR key set allamik, qub_id allamik. |
longer-body |
~4 KiB timaa — multi-byte CBOR takissuseq qulequtaalu iluani puuata aamma avammut ciphertext atortunut. |
Suliarinneq PISARIAQARPOQ byte-mut assigiimik expected_wrapper_hex saqqummiussissasut input toqqorneqartumut. Fixture-i pilersinneqaqqissasoq pisariaqartumut QUB_REGEN_VECTORS=1 cargo test -p qub-core --test wrapper_vectors atorlugu aamma aalajangersarsimavoq erseqqissumik aaqqissuussamiunut allanngorsitsineq.
15. Crypto Profilemut Aqutsineq (Siunissami)
Kapital una nalunaarut v1-mut aamma normativeqalersuni siullermik aaqqissuussamiunut allamut qub-imi cryptografiamut akuusaartoq isertoqattaarsimasoq.
15.1 Maannakkut Killiffia
Protokoli v1 eqqortumik atausiusumik algoritmimut atortumut atortussaq:
- Atsiorneqarneq: ML-DSA-65 (
sig_alg = 0x01; 1952-byte pubkey, 3309-byte atsiorneqarneq) aamma atsiorneqanngitsoq (sig_alg = 0x00). §9.2 registri naliliisanik allanik nassuiaanngilaq; v1 uppernarsaasoq PISARIAQARPOQsig_algtamaasa{0x00, 0x01}avataaniittut itigartittariaqarai. Siunissami Ed25519-mik allataareq naatsorsuutigineqarpoq (§15.3) kisianni v1-mi tunniunneqanngilaq. - 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).
Uppernarsaasut maannakkut isumassuissamik aamma atsiorneqarnermik takinersaak hardcode-iarput algoritmimut atortussamut. Aalakoorneqarluni-sungiussatsineq saqqummiussaq pinngilaq wire-imi format-iata.
15.2 Siunissaminni Suluk
Algoritmi aappassinngneq protokolimut iserpat, uppernarsaasoq taqqaffigineqarpoq CryptoProfile taagisamut (assersuutigalugu, ExqubV1) aalajangersimasunik naliliisanut atortussunut atortunit — sig_algs, drand piorsaaviit, wrapper versionit, content type-it. Profil aalajangerneqarpoq uppernarsarnermi piffimmi, in-band-mi pisarpoq oqaluttuussassanngilaq. Naliliineq tamaat profilemi atortuujungippat itigartinneqarput.
Una qulakkeerpaa ML-DSA-87-mik ilaatittumik imaluunniit Ed25519-mik atorlugu kingumut uppernarsaasut atortullu uppernarsaasut nikilersaaneqarsinnaanngitsoq: v1 uppernarsaasoq v1 uppernarsaasutut pissimaaqissaaq v2 profili saqqummiussinneqareerpat.
15.3 Akornisaaffigineqarluni Pissusii
§15-mik normativetut suluit isumagineqaqquk apuuttortumut una imaattumut:
sig_algbyte aappa (Ed25519 atortunngorlugu, ML-DSA-87, imaluunniit §9 registri-mi naliliineq nutaaq).- Drand piorsaavik aappa atorfimi.
- Avammut pusinneqarnerni versioni aappa.
Tassanngaannaq §15-mi sumiiffeqarsimavoq aalajangersuusermi siunissami PR-it siusinnerusumi naapertorlugu tikiunneqartussaatut tikkuagaq atorlugu pinngivissumi aappassinneqannginnermik atortussaq atortugaq sungiussatsillugu.
16. Transparency Log aamma Atuarsinnaanermut Killiit (Aaqqissuussineq — misissuineq naammassivoq)
Killiffik. Kapital una tassaavoq aaqqissuussinermut allataq. Wire format-it, hash-ineq, aamma tatigineqarnermut ilusaq ataani tassaapput normative suliarineranut, kisianni suli transparency-log code tunniunneqanngilaq. W5-imi avammut misissuineq naammassivoq: §16.15 aalajangersagaq aalajangersarsimasut aamma akornutaaqqissaarluni aallartitsinissamut killiliisut taakkunannga saqqummersut nalunaarutigai. Suliarineq killiliisat taakku ataanni ingerlasinnaavoq. §16 §15-tut assigiisumik siunissamut isiginnittarpoq — kapital nalivinnersaaramik suliarineq aaqqissuussamiut aalajangersimasunut apuussasoq tatigineqarnermut ilusaq code-imi misissuinerni nutaamik suliarineqarani. Tamatuma saniatigut additive-iuvoq — qub-it tamarmik nammineq Arweave-mut transaction-iartik attatippaat aamma
SealedQub/QubEnvelopewire format-imut allannguineq peqanngilaq.
16.1 Naapertuusaaq aamma Atuarsinnaanermut Killiit
Ullumikkut qub-ip atuarsinnaanera aamma piffimmik-akeqarnera tamarmik atausiusumik qub-imut-ataasiakkaartumik Arweave-mut transaction-imut (§11) tunngavilipput. Tamanna matusinissamut latency-mik Arweave-mut finality-mut atassutilerpaa, qub-imut-ataasiakkaartumut upload-i atortumut akimut killilersuutaammat (ARWEAVE_DAILY_CEILING), aamma qub-it akornanni allangortinneqarsimasut-malugartut tulleriaarnerinik tunisinnaanngilaq. Transparency-log marlunnik killinik atassiummut taassuma ataani aamma avataani ilanngutsivoq:
| Killiffik | Atia | Qulakkeerneq | Qaqugu |
|---|---|---|---|
| T1 | R2-siulleq synchron-imi ack | Atuarsinnaanermut natseq — byte matusersimasut atuarsinnaasumut toqqorsivimmut allanneqarput matusineq utertinngilaq (< 300 ms p95). |
qub tamaat, synchron-imik (§16.10). |
| T2 | Batch-iarsimasoq transparency-log inkluderi | Tamanut append-only, allangortinneqarsimasut-malugartumut akeqartoq + tulleriaarneq tamarmiusoq, Arweave-mut anchor-iartoq. | qub tamaat, kingusinnerusoq + batch-iarsimasoq (§16.5–16.7). |
| T3 | qub-imut-ataasiakkaartumut Arweave naassaanngitsumut | qub-imut ataasiakkaartumut Arweave-mut transaction. | Akilersumut nikingajaaneq, aamma Arweave-pinngitsuugallaarnermi fallback (§16.8). |
T2 qub-imut-ataasiakkaartumut Arweave toqqagaqartittippaa (T3) atuarsinnaanermut aqquteq ataasiinnaanngitsoq. ARWEAVE_DAILY_CEILING atortumut killiliisaatut peerneqarpoq aamma anchor-mut wallet-mut immikkut-aalajangersimasumut circuit breaker-itut nikitsinneqarpoq (§16.7); atortut matusinerinik takinerusumik itigartinneqartanngillat.
Atuarsinnaanermut ilumoorneq (aalajangersarsimasoq — §16.15 Q6). Atuarsinnaaneq kingumut ingerlanngilaq: T1 R2-mut allanneq synchron-iuvoq aamma ataasiarluni-allataasoq, taamaalimmat free-tier qub T3-mik pisinngitsoq matusineq utertinnermini tamarmik atuarsinnaanngorpoq. Allatamut nujui tassaavoq uppernarsarneqarsinnaasoq qaffasinnermut-killiliisaq piffia: free qub-imut tassanngaannaq anchor-imi block piffia ngorpoq qub-imut-ataasiakkaartumut transaction-imi block piffia pinnagu. Annertussusermi appasissumi — aallartitsinissamut siullermi aamma peqqissaarnerup-piffiani ilumoortoq — ullormut cadence tamarmiusoq tassaavoq nalingiusumi natseq, periarfissiaq ikittuinnaq pinnagu. Atortumut isiginnaarneq taamaattumik tassaavoq qaffasinnermut killiliisaq akimut numeric latency aalajangersagaq peqanngitsoq — "maanna matusersimasoq aamma atuarsinnaasoq; immikkut-aalajangersimasumi tamanut piffissaliineq transparency-log-imi anchor-imi tullianut ilanngunneqarpoq (nalingiusumi ullormut)" — aamma piffissamut-eqqortumut akeqartumut uppernarsaat tassaavoq T3 akilersumut pissuseq, killiit-naleqqiussaanermi saqqummiunneqartoq aamma terms-imi (§16.11, §16.15 Q6). Piffimmut killiliineq sumiluunniit tassaavoq iluani SLO-iuinnartoq, periarfissaq pinnagu marketing-imi SLA-itut.
16.2 LogLeaf Aaqqissuussineq (marluk akeqarsimasut suluit)
Log-imi nalunaarut tassaavoq LogLeaf-i, §3.1 profili ataani hand-written canonical CBOR-itut allataaq (takissuseq-aalajangersimasoq, tag-it peqanngitsoq, float-it peqanngitsoq, naasut takinersaat, NFC allataq, sapinginnermut naasut peqanngippata peerneqartut, key-itik allaaserineqartut byte-ata takissusianut qaffasitsumik taava bytewise ileqquinik). §3.1 parse → re-encode → naleqqut canonical-imut isumassuissaq encode-imi aqqut hash-iinnginnerani atorneqarpoq (decode-iinnarmi pinnagu), taamaalimmat marluit suliarineqarnerit leaf-imi byte-mut naasut-takissuseq imaluunniit key-ileqqui assigiinngippallugit assingunngittussaanngillat. Naasut tamaat u8 / u64 / i64; digest-it tamaat 32-byte byte string-it (bstr[32]). Toqqorsimasoq Arweave-mut transaction id tassaavoq raw 32-byte SHA-256 digest bstr[32]-itut nassartaq, suliuna base64url text string-itut (§3.3-mut assigaa).
Leaf-i marlunnik suluqarpoq kind byte-imik toqqarneqartut, default upload-imi aqqummi Worker byte-mit nalunaaqutsisinnaanngimmat: POST /api/v1/upload qub_id aamma unlock_at-iinnarmik tigusivoq atorsisup uppernarsanngitsumik nalunaarutigisaatut — body_hash, drand_round, created_at, aamma drand_chain_version tamarmik §13 avammut wrapper iluani matusersimasut, taassuma isumassuissaa Worker tigummiunngisaannik. Server-imi-matuserneq aqquinnaq (POST /api/v1/seal) body_hash / drand_round plaintext-imit nassarpaa. Leaf-suluk ataasiusoq body_hash + drand_round nassartoq taamaattumik atortuusup uppernarsanngisaanik naasunik akeqartussaaq qub-it ilumoortut amerlanerinut. Immikkoorut akeqartoq naasunik tamaasa ilumoortuutippaa:
| Key | Enc. takissuseq | Type | Peqarnera | Isumaa |
|---|---|---|---|---|
seq |
4 | u64 |
pisariaqartoq | Tamanut 0-tunngaviusoq leaf indeks; inklusion-imut uppernarsaat tikkuagaa. |
kind |
5 | u8 |
pisariaqartoq | 0x01 attested (server-imi-matuserneq) imaluunniit 0x02 asserted (atorsisup-matuserninga / byte-mit-nalunaaqutsisinnaanngitsoq upload). |
ref |
4 | bstr[32] |
pisariaqartoq | Leaf-imut tikkuagaq id. Attested → raw qub_id. Asserted → blinded id SHA3-256(qub_id ‖ log_blind_secret) (§16.2.1). |
chash |
6 | bstr[32] |
pisariaqartoq | Imai najugaa SHA3-256(stored_bytes) — imaata atassusernera Worker-ip aqqutini marlunni ilumoortumik naatsorsorsinnaasaa. |
unlock_at |
10 | i64 |
pisariaqartoq | Kopiarisaq (attested) imaluunniit nalunaarutigisaq (asserted); > 0 uppernarsaalluni leaf-imut isertinnani. |
received_at |
12 | i64 |
pisariaqartoq | Worker-imi nalunaaqutaq R2-ack-imi. Uppernartunngorsinnaanngitsoq (atortuusup nalunaarutigisaa; §16.6). Imminut-nassuiaanermut peqarpoq, suliuna uppernarsaat. > 0 uppernarsaalluni. |
body_hash |
10 | bstr[32] |
kind=0x01 kisiat |
0x02-mi peerneqartoq — Worker §13 ataani peqanngilaa. |
drand_round |
12 | u64 |
kind=0x01 kisiat |
0x02-mi peerneqartoq. |
kind=0x02 leaf-i piaarluni body_hash-imik drand_round-imilluunniit akeqanngilaq: imai najugaa chash-imi opaque-iusoq ciphertext-imut akeqarnera aamma tulleriaarnera, qub_id aamma unlock_at nalunaarutigisaa uppernarsarpaa — plaintext imaluunniit anguinnera pinnagu. Asserted-imi qub-imut plaintext/anguinnermut isua maannakkut §11 .qub-bundle uppernarsaanermit pisarpoq, log-imit pinnagu (§16.11). drand_chain_version leaf-imi peqanngilaq (default aqqummi wrapper iluaniippoq); chain-imi mikissusaa anchor-imiippoq (§16.7). Encoder-imut peqqissaarneq: nuller-tamaasa ref imaluunniit chash itigartiguk, aamma positive-iunngitsoq unlock_at / received_at itigartiguk, cbor.rs-imi outcome_at > 0 sentinel-isumassuissaq malillugu.
16.2.1 qub-imi-iluartumi blinding
Log-i enumeration-mut oracle §13 avammut wrapper inerteqqutiginiagaa (§13.1) ngortussaanngilaq. qub-imut iluartumut (wrapped) asserted leaf blinded id SHA3-256(qub_id ‖ log_blind_secret) akeqarpaa, log_blind_secret server-ip tigummiunngisaa, aamma body_hash peeruraa. Allatamut nujui taama leaf-imik qub_id ataasiakkaartumut atassusinnaanngilaa; qub-ip tigummiunginnga, tunniunneqarnermut URL-eqartoq taamaalimmat qub_id-eqartoq, blind utertittarsinnaavaa nammineq inklusion-ini uppernarsarniarlugu. qub tamanut (enumerable-iulereersimasoq, Visibility: public Arweave-mut tag-imik §13.8 naapertorlugu nassartoq) raw qub_id-imik akeqarpoq. Una tassaavoq sumi ataasiinnarmi standalone-imut uppernartunngorsinnaaneq piaarluni privacy-mut natseqalersuutaasumut ingerlassutigaa; qub-it iluartut standalone-imut atassusernerat tassaavoq chash (§16.9).
log_blind_secret paaqqissaarnera (aalajangersarsimasoq — §16.15 Q4). Blind-i leaf-imut atassusinnaanngitsumik sernigaa, plaintext-imut isertussinnermik pinnagu (§13 wrapper taanna immikkut tigummivaa). log_blind_secret ajortinneqarpat, qub_id sumiluunniit akornusersuisup tigummiungisaanik imaluunniit utertissinnaasaanik (bundle/URL-imik peqartup qub-ip tamaasa, aamma entropy-appasissumik imaluunniit tamanut qub_id-mik) leaf-imi ref hash-mi ataasiarluni utertippaa aamma atassuteqalerpaa — una tassaavoq ilisimasamik amerlanermut atassuteqaqqissaarneq, brute-force-imik ilisimanngisamut sumiiffimmut pinnagu. log_blind_secret atassusernermut/Sybil-mut-killiliisamut isumassuissatut classify-iuk server-imi isumassuissat sinnerinik assigiisumik paaqqissaarnermut killiliisaq, aamma siunissamut kisiat rotate-iaruk (rotation-ip siunissami leaf-it re-blind-iarpai; kingumut anchor-iarsimasut atassusernerat peersinnaanngilaa).
16.3 Leaf aamma Node Hash-ineq
RFC 6962 §2.1 domain-immikkoorlugu hash-ineq SHA-256 SHA3-256-imik taarserneqartumi:
leaf_hash = SHA3-256(0x00 || canonical_cbor(LogLeaf))
node_hash(l,r) = SHA3-256(0x01 || l || r)
empty tree = SHA3-256("") // aalajangersarsimasoq kisianni suliuna anchor-iartoq
Domain-imi siuliusut byte 0x02 (entry chain, §16.4) aamma 0x03 (STH hash, §16.6) sernigineqarsimapput aamma taakkua avataaniipput. Byte ataasiakkaapput taamaalimmat 10-byte ASCII domain-immikkoorut (QUB_ID_V2, il.il.) peqarsimasunut assingunneqarsinnaanngillat. Tree-i tassaavoq RFC 6962 left-full unbalanced tree-i (interior split-it tamarmik subtree-imi leaf naasunit ataaniittumi marlukkuutaarnermut angisuussami), taanna inklusion-imut aamma consistency-mut uppernarsaat audit-path-imut algoritmi ataasiusoq atortuutippai. Reference-imi allataq left/right derivation pseudocode erseqqissumik nassartaq aamma non-power-of-two (5-leaf) misilernermut vektori tikkuagaa, taamaalimmat right-edge promotion pissut — 4-leaf vektori toqqugaa — misiligineqarpoq.
16.4 Hash Chaining (iluani)
LogDO entry chain iluartumik attatippaa crash-consistency-mut kisiat. Suliuna saqqummiunneqartoq aamma suliuna uppernarsaasumut-saaffigineqartoq:
entry_chain[seq] = SHA3-256(0x02 || entry_chain[seq-1] || leaf_hash[seq])
entry_chain[-1] = SHA3-256("QUB_TLOG_GENESIS_V1")
Saqqummiunneqartoq append-only aaqqigaq tassaavoq cumulative Merkle root + anchor-iata (§16.5–16.6), suliuna atortuusup leaf-it qanoq tunisarnera raw-tut: chain-i qanoq tunisarneranut tamaasa utertippaa, taamaalimmat anchor-iarsimasumi root kisiat canonical-imut sumiiffimmik tikkuagaa.
16.5 Cumulative Merkle Tree aamma Batch-ineq
Tree RFC 6962 ataasiusoq naajuartoq leaf-it tamaasa seq ileqquinik qaqillugit peqarpoq — batch-mut-ataasiakkaartut tree-it immikkoortinneqarsimasut pinnagit. (Carry-leaf-chained batch-mut-ataasiakkaartumut aaqqissuusseq itigartinneqarpoq: prefix-imut atassuteq ilumoortoq pinngilaq, taamaalimmat "consistency-mut uppernarsaat" tunngavissaqanngillat.) Cumulative tree-i RFC 9162 consistency-mut uppernarsaat ilumoortut tunivai aamma anchor ataasiusoq nutaaq qub itsarnersaq sumiluunniit inklusion-imik uppernarsarsinnaavaa.
LogDO Durable Object tassaavoq allattartoq ataaseq (blockConcurrencyWhile, QuotaDO / EntitlementDO malillugu) — log-imut tamarmiusumut ilanngutsineq tassaavoq tamarmiusumi-killinganni read-modify-write taamaalimmat DO-mut PISARIAQARPOQ ingerlassasoq, KV-mut suliuna. Tree-ip right-edge frontier (O(log n) hash) cache-iarpaa taamaalimmat batch matusineq tassaavoq O(batch). Batch tassaavoq leaf-it ataatsikkut anchor-iarsimasut; aallartittussaa configurable-iupput, protokolimik-aalajangersimasoq pinnagit: tree_size qaffasinneq minnerpaamik LOG_BATCH_MAX_LEAVES (default 4096), imaluunniit ukiunngorneq anchor-imi cadence-imut tikiukkaa, imaluunniit forced flush akilersumut T3 matusineq tikikkaa. root_i tassaavoq cumulative Merkle Tree Hash leaf-it 0 .. tree_size_i qaqillugit.
16.6 Signed Tree Head Arweave Anchor atorlugu
Arweave anchor transaction tassaavoq Signed Tree Head aamma operatori-imi atsiorneqarneq tree head-imut imminut taarsersorpaa: ullormut anchor qub key-mik pisariaqanngilaq Arweave tx owner tassaammat atsiorneqarneq. Moat-imut isumaqarneq attavoq — substrate allangortinneqarsinnaanngitsoq, qub-imi-tigussaq isumassuissaq pinnagu, anchor-iarsimasumi root-imut killiliisaapput.
Aaqqissuussinermi warm qub-imi-atsiortumut key ataaseq peqarpoq, aamma pinneqarpoq: matusineq-tamaat receipt key (§16.10). Pubkey-aa LogProfile-imi akeqarpoq (uppernarsaasumut tunineqartoq) aamma anchor_owner-imit cross-signed-iuvoq, taamaalimmat uppernarsaasoq receipt-i root pinneqarsimasumut assigiisumut uppernarsaavaa anchor malillugu. Una tassaavoq §16.15 Q2-mut aalajangersagaq — receipt key pinneqanngitsoq, operatori-imit rotate-iarneqarsinnaasoq, repudiable-iussaaq (operatori key-i nammineq pissusilersinnaavaa), taanna receipt-imi accountability-naleqqaa operatori-imi-killinganni akornusersuisumut, taassuma uppernarsaaneq inerteqqutiginiagaa, peqannginnertippaa. Taamaattumik: qub suliuna pinneqanngitsumik log-imi-atsiortumut key tigummivaa; receipt key pinneqarpoq aamma anchor_owner-imit-cross-signed-iuvoq.
SignedTreeHead tassaavoq canonical CBOR (key-itik allaaserineqartut takissusianut): size:u64, root:bstr[32], batch:u64, prev:bstr[32] (siuliusoq sth_hash; genesis = 32 nuller byte), log_id:bstr[32], first_seq:u64, anchored_at:i64. Hash-iaa tassaavoq sth_hash = SHA3-256(0x03 || canonical_cbor(SignedTreeHead)).
Tatigineqarnermut pinneqarsimasoq root. log_id = SHA3-256("QUB_TLOG_V1" || anchor_owner_address). Uppernarsaasoq akuersaartoq PISARIAQARPOQ anchor_tx.owner == LogProfile.anchor_owner piumassuteqassasoq, anchor_owner (aamma receipt-key pubkey) qub_core-imut LogProfile-itut allanneqartoq — quicknet-imi naasut DrandTimelockProvider::quicknet()-imi peqareersut saniani — aamma uppernarsaasumut binary-mut tunineqartoq. Uppernarsaasoq aamma PISARIAQARPOQ Arweave tx data → tx_id atassusernera nammineq killinganni uppernarsassagaa gateway-imi /raw/ akinik tatiginagu. Una rogue-wallet-imut equivocation-imut periarfissaq matupaa: "Arweave-mut anchor-iarsimasoq" isumaqanngilaq uppernarsaasoq suna wallet pinninnagit.
Rotation tassaavoq §15-imi aqutsinermut ilanngussaq, atoqqinnermik pinnagu (aalajangersarsimasoq — §16.15 Q3). §15.2-imi profili-suluk maannakkut sig_alg-it / drand chain-it / wrapper version-it / content type-it kisiat allagai, aamma §15.3-imi aallartittussat tamaasa peqanngilaat — LogProfile / anchor_owner suli §15-imi suluani peqanngilaq. Rotation-mut aqutsineq taamaattumik PISARIAQARPOQ sananeqassasoq: §15.3 ilanngunneqarpoq (ataani) LogProfile aallartittussaq ilanngullugu, aamma rotation tassaavoq signed LogProfile qaffaaneq uppernarsaasumut update-imik tunineqartoq. Pilersaarutigineqartoq rotation anivimmut → iserumiarnermut cross-signature nassarpaa; ajortinneqarnermik-aallartisaq rotation pisinnaanngilaa (anivimmut key-i tatigineqanngitsoq/peqanngitsoq tamatuma piffiani) aamma §15-mut-aqutsineqarluni qaffaanermut nikitsippoq, prev-anchor fork-imut misissuineq (ataani) ajunaarnermik piffimmi killilersorlugu.
Equivocation-imut piffia (tatigineqarnermut naatsorsuutaasoq pingaarluinnartoq). Leaf-i equivocation-imut akornutaaqanngitsoq matusivvigaata anchor-ia Arweave-imut-uppernarsarneqareersimappat kisiat. Piffia tassaavoq received_at → anchor uppernarsaaneq (≤ cadence + Arweave finality). Iluani qulakkeerneq kisiat tassaapput receipt matusineq pinneqarsimasoq (§16.10) aamma qub-ip ingerlatsinermut ilumoornera. Accountability-mut artifact-it pingasut tamanna ilumoortuutippaa (witness-mut ilusaq tassaavoq §16.15 Q2-mut aalajangersagaq):
- Receipt matusineq pinneqarsimasoq atsiorneqarsimasoq — SCT-mut assingusaq upload-mut akimi utertinneqartoq (§16.10), pinneqarsimasoq
anchor_owner-imit-cross-signed receipt key-imik atsiorneqarsimasoq. Leaf anchor-ia sioqqullugu tammartoq ajortilersortumut receipt repudiable-iunngitsoq saqqummiussassamik attappaa, sumi-tamani-peerneq periarfissaa matuppaa. - Saqqummiunneqarsimasoq monitor-imut periuseq + prev-chain pisorneq — anchor
prevchain head→genesis pisorneqarpoq; fork (anchor marluksizeataasiusumirootallatamik, imaluunniitprevnapparsimasoq) tassaavoq ajortuliornermut saqqummiunneqarsinnaasoq uppernarsaat. Equivocation-imut nassaarineq tassaavoq ingerlatsinermut aalajangersagaq oqaatigineqarsimasoq, naatsorsuutaasoq nipangiusoq pinnagu. - Imminut-saqqummiunneqartumut head marluk — head nutaaq tamaat
{sth_hash, tree_size}qub-imi-pigineqartumut public, append-only GitHub repository-mut tunineqarpoq (imminut-saqqummiunnermut allangortinneqarsimasut-malugartumut killiliisaq), social-imut post-imik best-effort-tut isumannaakkuutigalugu kisiat. Tunniunneqarneq naammassinngippat PISARIAQARPOQ page-issasoq (nipangiusumik napparngitsoq).
Ilumoorneq killiliisaq (akornutaaqqissaarluni killiliisaq). qub posting-mut sumiiffinnik marlunnik aqummat, una tassaavoq imminut-saqqummiunneqartoq, allatigut-witness-iarsimanngitsoq. Atortumut, marketing-imut, imaluunniit legal-imut sumiiffik sumiluunniit log "allatigut-witness-iarsimasoq" oqaatigisinnaanngilaa; oqaatigineqarsinnaasoq tassaavoq equivocation nassaarineqarsinnaasoq aamma receipt repudiable-iunngitsumik qimagunneqartoq. Allatigut-ataani-witness ilumoortoq §15-imut aqutsinermut qaffaanermut siunissamut nikinneqarpoq.
received_at operatori-imit-nalunaarutigineqarpoq aamma akeqarneq sumiluunniit taassumunnga tunngavissaqassanngilaq — suliuna uppernarsaatut imaluunniit akerliliinermut isumannaakkuutaatut saqqummiunneqartoq atortumi / legal-imi / API-mi / uppernarsaammut-saqqummiussinermi sumiiffimmi tamarmi. Arweave anchor-imi block piffia T tassaavoq piffia-allaaserineqartoq tatigineqarsinnaasoq kisiat ("log-iarsimasoq" qaffasinnermut killiliisaq). Monitor-imi received_at-imut misissueqqissaarneq tamarmik PISARIAQARPOQ T-mut naleqqiussassasoq, operatori-imit-aqunneqartoq anchored_at STH suluk pinnagu; taama misissueqqissaarneq tassaavoq ilumoortumi operatori-imi nalunaaqutaata kukkunneranut isumannaammat kisiat, suliuna ajortinneqarnermik-aallartisamut operatori-imut accountability-mut killiliisaq (§16.15 Q5).
16.7 Anchor Transaction Format aamma Cadence
AnchorBundle tassaavoq canonical-CBOR Arweave transaction body, §16.8 bundler atorlugu allanneqartoq: ver:u8, sth:bstr (canonical SignedTreeHead byte), prev_anchor:bstr (siuliusoq anchor tx id raw byte; genesis-imi peerneqartoq), chain_hash:tstr (drand chain atorneqartoq — quicknet), aamma batch-imi leaf-CBOR stream seq ileqquinik taamaalimmat anchor imminut-naammassisimavoq: monitor-i root body-mit utertippaa qub-imut atassuteqaqqissaarani. (Leaf stream annertussusermi qulleruttuni angitilerpat, siunissami nutaarsiaq leaf-imut tikkuagaq killinganik kisiat akeqarsinnaavoq; nalunaarutigineqarpoq, v1-mi tigummiunneqarani.)
Arweave-mut tag-it piaarluni enumerable-iupput — log nassaarineqassasoq siunertaqarpoq, qub-it iluartut assigiisumik pinnagit: App-Name: qub-tlog, Anchor-Format: 1, Log-Id: <hex>, Batch: <n>, Tree-Size: <n>, Root: <hex>, Prev-Anchor: <tx>, Content-Type: application/cbor. Tag-it tassaapput uppernarsanngitsut tikkuagat; CBOR body tassaavoq aqutsisoq ataaseq.
Cadence: default-imi ullormut, annertussusermut malillugu misissoqqinneqartoq (size aallartittussaq cadence atortoq aalakuumut nikinnerusartippaa); akilersumut T3 matusineq anchor-imik tigussisarpaa taamaalimmat akilersartut ullormut utaqqisanngillat. Anchor wallet immikkut-aalajangersimasoq aamma low-velocity-iuvoq, upload wallet-imit immikkoortoq — PISARIAQARPOQ nammineq JWK-eqassasoq (key immikkut, upload wallet-imi role-itut pinnagu) taamaalimmat upload-wallet-imi ajortinneqarneq anchor-imik forge-isinnaanngitsoq — aamma akimut ullormut anchor-transaction-imut budget-eqarluni (ARWEAVE_DAILY_CEILING nikitsinneqartoq). Paaqqissaarnermut isiginnaarneq erseqqissumik oqaatigineqarpoq: narrow-scope hot key circuit breaker-imik teqqissaartumik aamma balance-imik appasissumik, "cold" pinnagu — wallet ullormut auto-sign-isartoq cold-iusinnaanngilaq, aamma allataq taama pinngeqaaq.
16.8 ANS-104 Bundler
Iluani ANS-104 DataItem encoder aamma deep-hash signer, ~300 line-iusoq, Web Crypto-innarmik, nul npm dependency-mik (Turbo SDK marluk tamarmik npm ci --ignore-scripts supply-chain-imut killiliisamik naammassisanngillat). DataItem byte ilusaa:
signatureType (2, LE) || raw_signature || owner || target(flag+0|32) || anchor(flag+0|32) || num_tags(8, LE) || tags_len(8, LE) || avro_tags || data
Atsiorneqarneq tassaavoq Arweave deepHash — recursive SHA-384 digest (Arweave-imi wire-mut piumasaa, crypto.subtle.digest("SHA-384")) ["dataitem", "1", sig_type, owner, target, anchor, encoded_tags, data] qaqillugit — taava RSA-PSS deep hash-imut wallet JWK crypto.subtle atorlugu; id = base64url(SHA-256(signature)). SHA-384 maaniittoq tassaavoq Arweave-wire-imut-kisiat primitive-itut quarantine-iarsimasoq, suliuna qub tatigineqarnermut primitive (§15 isuumut allappaa; qub tatigineqarnermut hash-ineq tassaavoq SHA3-256 tamaviarluni).
Code-imi aqqut ataaseq atortuussinik pingasunik tunivoq: akilersumut T3 qub-imut-ataasiakkaartumut naassaanngitsumut, Arweave-pinngitsuugallaarnermi fallback (DataItem queue-iaruk, R2-siulleq ack utertiguk sumiluunniit — una maannakkut ARWEAVE_UNAVAILABLE 503 dead-end matupaa), aamma AnchorBundle allanneq. Atsiorneqarnermut ilusaq (aalajangersarsimasoq — §16.15 Q8): v1 RSA-PSS (signature type 1) atorlugu atsiorpoq Arweave wallet JWK-imut periuseq peqareersoq atoqqillugu (nul nutaaq naassaanngitsumik key-imut paaqqissaarneq, "ataaseq ikinnerusoq isumassuissaq" isumaqarneq atortullugu); Ed25519 §15 PQ-migration-imut aqqummut nikinneqarpoq.
Hand-rolled deep hash tassaavoq W5-imi kappiisaalinerpaaq, coverage-imikut-natselerlualunni, taamaalimmat killisinerineqarnera akornisaaffigineqarsinnaanngilaq (§16.15 Q8):
- Oqaatsit-akornanni fixture
tlog_v1.json(Rust + TS, §14.5wrapper_v1.jsonileqqu) deep-hash, DataItem byte + id, leaf hash, 5-leaf root + audit path, STH hash, inklusion-imut uppernarsaat, aamma consistency-mut uppernarsaat tunivai — sign aamma verify aqquinni tamani (verify aqquta pingaaruteqarpoq §16.6-imi local tx → tx_id misissuineq deep hash standalone uppernarsaasut tamaasa iserterivaa, allattartumut kisiat pinnagu). - Reference ANS-104 bundler-imut atausiarluni interop round-trip, static misilernermut data-tut kisiat — suliuna npm runtime dependency (Web-Crypto-inarmik / install-script-pinngitsumik isiginnaarneq attasoq).
- Deep-hash + RSA-PSS aqqut PISARIAQARPOQ
crypto.subtleprimitive assigiisut production-imi atortut atorlugit round-trip-issasut, taamaalimmat iluani encoder byte-compatible-iuvoq. - Ingerlaaqalik post-bundle-imut akuersuinermut monitor anchor / fallback DataItem tamaat Arweave-mut akuersisaalersimanera uppernarsarpaa, alarm-imik + circuit breaker-imik — deep hash aamma Arweave-pinngitsuugallaarnermi fallback queue-mut sullimmat, taamaalimmat nipangiusumi kingumut ingerlanneq queue taanna network-imit-itigartinneqartunik akpangaajussaaq ajunaarnerup taanna sernigissagaata piffiani.
16.9 Inklusion-imut aamma Consistency-mut Uppernarsaat
Tamarmik tassaapput RFC 9162, SHA3-256, canonical CBOR-itut tunineqartut.
InclusionProof — GET /api/v1/qub/:tx_id/proof: ver:u8, leaf:bstr (leaf CBOR eqqortoq — uppernarsaasoq leaf_hash nammineq utertippaa aamma tunineqartumut hash-imut tatiginngilaq), index:u64, size:u64, audit:[bstr[32]], root:bstr[32], anchor:{ txid:bstr[32], batch:u64, sth:bstr[32], log_id:bstr[32], block_height?:u64, anchored_at?:i64 }.
ConsistencyProof — 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. Key-list ataaseq paatsiveeruteqanngitsoq, misilernermut vektorimik pinneqartoq.
Standalone-imut uppernarsaaneq (qub server peqanngitsoq, §11 iserterivaa):
1. Parse .qub bundle → SealedQub; recompute qub_id (§4.1).
2. Read leaf.kind.
3a. kind=0x01 (attested):
assert leaf.ref == qub_id
assert leaf.body_hash == SHA3-256(body)
assert leaf.drand_round == unlock_round(unlock_at)
3b. kind=0x02 (asserted):
assert leaf.ref == SHA3-256(qub_id || blind) // holder supplies blind
OR treat ref as opaque and bind via leaf.chash == SHA3-256(stored_bytes)
4. Recompute leaf_hash = SHA3-256(0x00 || leaf); fold `audit` per RFC 6962
using index/size; require derived root == proof.root.
5. Fetch anchor.txid from any gateway; verify the tx data → tx_id binding
(do not trust a gateway /raw/ response); REQUIRE anchor_tx.owner ==
LogProfile.anchor_owner.
6. Parse AnchorBundle; require committed root == proof.root and size ==
proof.size; read the Arweave block time T.
7. Emit the claim scoped by leaf.kind (§16.11).
Uppernarsaammut-tunisinermut toqqorsivik PISARIAQARPOQ coordinate-key-iartoq (aalajangersarsimasoq — §16.15 Q7, akornisaaffigineqarluni siuliusariaqartoq). Cold-leaf-imut uppernarsaammut-pilersitsineq correctness-imut-killinganni eqqortuuvoq R2 audit material tassaappat kisiat Merkle-node-imut toqqorsivik attasoq absolute tree coordinate (level, index)-imut key-iartoq — batch-imut-ataasiakkaartumut node delta pinnagit. Coordinate-key-iartumut toqqorsivimmik, (leaf i, size N) audit path tamaat tassaavoq O(log N) direct R2 GET-it batch killinganni utertinneqartoqarani; batch-key-iartumut toqqorsivimmik tamanna pinngilaq, taanna tassaavoq toqqorsivimmut-ilusaq paatsiveernera aalajangersagaq matupaa. Leaf body-it assigiisumik seq-imut content-addressable-iupput. W5 misilernermut vektori PISARIAQARPOQ genesis-piffimmut cold leaf root-imut kingusinnerusumut uppernarsassagaa R2 + Arweave kisiat atorlugit LogDO toqqorsivik salippallugu, taamaalimmat §16.13-imi reclamation-imut-isumannaarluni isumaqarneq tunngavissaqarpoq oqaatiginnarani. O(log N) sequential R2 GET-it kisiat asynchron-imut uppernarsaammut endpoint-imut atapput — suliuna matusineq hot path-imut (§16.10) imaluunniit per-tick-imut cron-imut.
16.10 R2-Siulleq Ack Tulleriaarnera
POST /api/v1/upload aqqut imatut ngorpoq:
Siorna-affimmut gate-it (auth, validation, idempotency shard key) — allannguuteqanngitsut.
Synchron-imik
await QUB_CACHE.put(qub-cache/<tx_id>, wrappedBytes)— atuarsinnaanermut natseq; aamma W1-imi precache race-i matupaa (siusinnermictx.waitUntilArweave submit-ip kingorna).Synchron-imik
await LogDO.append(leaf)— in-colo DO RPC ataaseq; allattartoq ataaseqseqtunivaa, entry chain qaffappaa, aamma frontier nutarterpaa. (RMW tamarmiusumi-killinganni → DO, KV-mut suliuna.)appendRPC tamanna kisiat suliarivaa —O(batch)Merkle batch-close suliaq off RPC tassaani ingerlavoq LogDO alarm-imi, imaluunniit append p95LOG_BATCH_MAX_LEAVES-imut-tikkuutaartumut matusineq tamaat qaffappoq.Maanna ack utertiguk — receipt matusineq (pinneqarsimasoq receipt key-imik atsiorneqarsimasoq, §16.6) aamma
{ tx_id, log_seq, anchor_status: "pending" }ilanngullugit. Sekunde-arpassuit Arweave fan-out critical path-imit peerneqarpoq.Ataaseq
ctx.waitUntilkingusinnerusumut suliamik queue-iarpaa: qub-imut-ataasiakkaartumut Arweave submit (maanna best-effort / akilersumut; naammassinngippat bundler fallback queue-mut ingerlavoq atortoq 503-issanagu) aamma provisional-meta allanneq peqareersoq. Batch close aamma anchor-ineq immikkut ingerlapput LogDO alarm-imit aamma ullormut anchor cron-imit.ctx.waitUntilloop-imi iluani peqanngilaq; idempotency shard key peqareersoq attatippaa.
Latency-mut budget (aalajangersarsimasoq — §16.15 Q7). < 300 ms p95-mut killiliisaq tassaavoq uttoqqaalluni aallartitsinissamut gate, naatsorsuutaasoq pinnagu. Critical path ilumoortoq tassaavoq siorna-affimmut KV-mut atuarneq + R2 PUT ataaseq + Durable Object marluk tulleriaarsimasut — QuotaDO seal-quota-mut debit peqareersoq aamma LogDO append nutaaq — taamaalimmat budget-i in-colo DO round-trip marluk naliliissavai, ataaseq pinnagu. LogDO latency-mut alarm QuotaDO-mi malillugu ingerlassaguk aamma p95 kingumut ingerlanneq aallartitsinissamut akornusersuisutut isigiuk.
16.11 Tatigineqarnermut Ilusaq — akeqarneq eqqortoq, leaf-imi kind-imut killiliisaq
kind=0x01 (attested)-mut: "Imai una — body body_hash-imut naapertortoq, qub_id-imik nalunaarsugaq — qub-imi append-only log-imut position seq-imi akeqarpoq aamma Arweave-mi block piffia T kingorna pinngitsoq peqarpoq; cryptografiamik atuarneqarsinnaanngilaq drand round R = unlock_round(unlock_at) tikillugu." Una tassaavoq {tlock round atassusernera + Merkle inklusion + anchor-iarsimasoq root} pingasut tamarmiusut.
kind=0x02 (asserted, default)-mut: "Opaque-iusoq ciphertext imaata-najugaa chash-imik, qub_id aamma unlock_at nalunaarutigisaa, append-only log-imut position seq-imi akeqarpoq aamma Arweave-mi block piffia T kingorna pinngitsoq peqarpoq." Anguinnermut aamma body-mut isut §11 .qub-bundle uppernarsaaneq peqareersumit (qub_core::unlock) tunineqarput, suliuna log-imit; log-ip qub-imut-ataasiakkaartumut transaction nuilaani ilanngutsivaa tassaavoq allangortinneqarsimasut-malugartumut tulleriaarneq, qaffasinnermut-killiliisaq piffia tatigineqarsinnaasoq, aamma equivocation-imut akornutaaqarneq.
Akeqarnerit marluk peerpaat, §11 malillugu: pilersitsisup atsiorneqarnera sig_alg ≥ 0x01 peqanngitsoq, siunertaq, aamma anchor-ataani-mikissusermut piffia. Atausiulluunniit akeqarnermik received_at-imut tunngavissaqartittittanngilaq.
Akeqarnermut killiliisaq (akornutaaqqissaarluni aallartitsinissamut killiliisaq — aalajangersarsimasoq §16.15 Q1). Free / default (kind=0x02) qub-imut, qulaani killiliisaq kind=0x02 akeqarneq tassaavoq killiliisaq atortumut, marketing-imut, terms-imut, imaluunniit uppernarsaammut-saqqummiussinermut sumiiffik sumiluunniit oqaatigisinnaasaa. Sumiiffik sumiluunniit oqaatigisinnaanngilaa imaluunniit isumaqaqqusinnaanngilaa log-i default qub-imi imai imaluunniit anguinnera uppernarsarmagu — log-i opaque-iusup ciphertext-imi tulleriaarnera + qaffasinnermut-killiliisaq piffia tatigineqarsinnaasoq uppernarsarpaa. Imaata aamma anguinnermut uppernarsaat §11 .qub-bundle uppernarsaaneq peqareersumit kisiat pisarput, taanna log-imit-immikkoortoq. Una tassaavoq copy-imut akornisaaffigineqarluni aallartitsinissamut akornusersuisoq, ileqqumut toqqaaneq pinnagu; tassaavoq aalajangersagaq byte-mit-nalunaaqutsisinnaanngitsoq default aqqut ilumoortuutittartoq.
16.12 Versionerneqarnera aamma W3-mut Suleqatigiinneq
SealedQub wire qaffaaneq peqanngilaq taamaalimmat protokolimut-versionermut qaffaaneq peqanngilaq (§12.1): log-i tassaavoq sidecar suluit byte peqareersunut akeqartoq, taamaalimmat §12.2 protokolimut-versionermut oqaluttuassartamut iseqanngilaq. W3-imi sapinginnermut drand_chain_version attorneqanngilaq aamma SealedQub sapinginnermut suluk ataaseq attatippaa. Log-i taarsiullugu nammineq immikkut version-imut sumiiffinik tunivoq — LOG_VERSION_1, ANCHOR_FORMAT_1, InclusionProof.ver — §12.4 wrapper-versionermut immikkoorneq malillugu (wrapper version byte-eqarpoq protokolimut version-imit immikkoortumik, aamma log version-it immikkoorneq assigiisoq malippaat).
Uppernarsaammut tunisineq tassaavoq default-imi pisartoq, sapinginnermut ride-along-imik. Uppernarsaat matusinermi piffimmi peqarsinnaanngilaq (anchor suli allanneqanngilaq), taamaalimmat matusinermi-piffimmi .qub bundle uppernarsaammik-peqanngitsuuvoq. W7-imi uppernarsaasoq GET …/proof atausiarluni tigusivoq, imaluunniit tamarmik-offline-imi uppernarsaat public AnchorBundle-imit utertippaa Arweave-imi Log-Id-imut misissussamik. .qub bundle (W7) sapinginnermut inclusion_proof ilaa sernigaa — matusinermi peerneqartoq, anchor-ip kingorna re-export-imik cold archival-imut akpangaartoq — W3-imi drand_chain_version-imut "sapinginnermut, default-imi peerneqartoq, additive" ileqqu assigiisoq malillugu.
16.13 Atuarsinnaanermut Toqqorsineq
LogDO open tail-imut, R2 uppernarsaammut-tunisinermut substrate-imut, anchor circuit-breaker-imut naatsorsuutit, aamma bundler fallback queue-mut atuarsinnaanermut piffit docs/DATA-RETENTION.md-imi aalajangersarsimapput. Tunngaviusoq: log-ip hot per-entry toqqorsivia (LogDO) anchor-ip kingorna reclaimable-iuvoq; audit material-ia — coordinate-key-iartoq (level, index) Merkle-node-imut toqqorsivik + seq-imut-naatsorsorsimasoq leaf body-it (§16.9) + Arweave anchor-it — naassaanngitsuupput. Cold leaf DO-mit reclaim-ineq tunineqartumut uppernarsaammik nalivipallaartittanngilaq, uppernarsaat naassaanngitsumut R2 node-imut toqqorsivimmut aamma Arweave anchor-imut aalajangersarmat, DO-mut pinnagu (aamma §16.9-imi salippallugu-DO misilernermut vektori uppernarsarpaa).
16.14 Misilernermut Vektorit
W5 oqaatsit-akornanni fixture tlog_v1.json (§16.8) tuniuppaa aamma vektorit suliarisat: kind=0x01 aamma kind=0x02 leaf → leaf_hash; 5-leaf cumulative root; inklusion-imut uppernarsaat ataaseq; consistency-mut uppernarsaat ataaseq; AnchorBundle ataaseq; aamma DataItem id ataaseq. Taakku §14.5 avammut-wrapper vektorit saniani peqarput aamma Rust (qub-core) aamma TypeScript (Worker) suliarineqarnerinit tamarmik atorneqarput.
16.15 Misissuinermut Aalajangiineqarsimasut (W5 — aalajangersarsimasut)
W5-imi avammut misissuineq (adversarial-imut aaqqissuussamut aqqut + pigisup atsiornera) naammassivoq. Aalajangiineqarsimasoq ataani tamaat aalajangersarsimavoq aamma qulaani §16-imi allataq saqqummersinneqarpoq; akornutaaqqissaarluni aallartitsinissamut killiliisut isuani saqqummerneqaqqipput. Suliarineq taakku ataanni ingerlasinnaavoq.
- Default-aqqut (
kind=0x02) leaf-imut ilumoorneq — AALAJANGERSARSIMASOQ. Leaf-kind marlunnik immikkoortinneq aalajangersarsimasoq malillugu ingerlaguk:kind=0x02body_hash-imikdrand_round-imilluunniit akeqanngilaq.*_body_hashsuluk byte-mit-nalunaaqutsisinnaanngitsumut aqqummi peqanngilaq (integrator-imut "verified" eqqunngitsoq takussagaq legible-nersaaussagaaq aamma §11 bundle-imit peqareersumik tunngavissamik tunivoq). Server-imi-matuserneq log-imi-attested qub-imut piumassaqarniarnak (tamanna plaintext Worker-imut force-issaaq aamma crypto-shredding moat aserortissallugu). Imminut-nassuiaanermut-naatsulluni-attannermik leaf-imi suluk pinnagu.qubbundle / proof envelope-imi uppernarsaasup-utertippaa suluk peqarpoq. Pigisup-akuersaarnera akeqarnermut killiliisaq: §16.11. - Equivocation / sumi-tamani-peerneq accountability — AALAJANGERSARSIMASOQ. Receipt-seal key
LogProfile-imi pinneqarpoq +anchor_owner-imit-cross-signed-iuvoq (siusinnermi "atsiortumut key peqanngitsoq" paatsiveerneq matupaa; §16.6). Aallartitsinissamut witness ilusaq: receipt pinneqarsimasoq + monitor periuseq + prev-chain pisorneq + imminut-saqqummiunneqartumut head marluk (qub-imi-pigineqartumut public GitHub repo, social best-effort), nassaarineqarsinnaasoq + receipt-eqartoq marketing-iartoq, suliuna allatigut-witness-iarsimasoq. Allatigut-pingajuanut-witness ilumoortoq §15-imut aqutsinermut qaffaanermut nikinneqarpoq. - Anchor-owner-imut tatigineqarnermut root pinneqarsimasoq + rotation — AALAJANGERSARSIMASOQ.
LogProfilepin (§16.6) tiguk; uppernarsaasoqanchor_tx.owner == anchor_ownermisissorpaa aamma tx data → tx_id atassusernera nammineq killinganni uppernarsarpaa. Rotation-imut aqutsineq tassaavoq §15-imut ilanngussaq sananeqartussaq (§15.3 aallartittussaq ilanngunneqartoq), atoqqinneq pinnagu; pilersaarutigineqartut rotation-it cross-sign-isarput, ajortinneqarnermik-aallartisat rotation-it §15 qaffaanermut nikitsipput fork-imut misissuineq ajunaarnermik killilersorlugu. - qub-imi-iluartumi leaf-imut blinding — AALAJANGERSARSIMASOQ. qub-imut iluartumut blinding attatiguk (
ref = SHA3-256(qub_id ‖ log_blind_secret)), qub tamanut rawqub_id(§16.2.1-imi peqareersoq),chashstandalone-imut atassutaatut.log_blind_secrettassaavoq atassusernermut/Sybil-mut-killiliisaq isumassuissaq, siunissamut-kisiat-rotate-iartussaq (§16.2.1). received_at— AALAJANGERSARSIMASOQ. Leaf-imi attatiguk, akeqartoq kisiat erseqqissumik uppernartunngorsinnaanngitsoq; suliuna uppernarsaatut imaluunniit akerliliinermut isumannaakkuutaatut saqqummiunneqartoq sumiiffimmi sumiluunniit. Monitor-imi misissueqqissaarneq tamaat Arweave-mi block piffiaT-mut naleqqiussaaq, operatori-imit-aqunneqartoqanchored_atpinnagu (§16.6).- Free-tier-imut piffia-uppernarsarsinnaasoq — AALAJANGERSARSIMASOQ (pigisup-akuersaarnera). Atuarsinnaaneq kingumut ingerlanngilaq; qaffasinnermut-killiliisaq piffia uppernarsarsinnaasoq kisiat anchor-imi block piffiamut nikinnerusarpoq. Free-tier copy numeric SLA peqanngilaq ("…transparency-log-imi anchor-imi tullianut ilanngunneqartoq, nalingiusumi ullormut"); piffissamut-eqqortumut uppernarsaat tassaavoq T3 akilersumut pissuseq, killiit-naleqqiussaanermi + terms-imi saqqummiunneqartoq (§16.1).
- Cumulative tree Workers-imi — AALAJANGERSARSIMASOQ. Cumulative RFC 9162 tree ataaseq + frontier-cache-iartoq allattartumut-ataasiusumut LogDO (~1k writes/sec DO killiliisamut headroom-imik teqqissaartumik; Merkle-of-shard-roots sharding qanittumut tikillugu nikinneqarpoq). Akornisaaffigineqarluni siuliusariaqartoq: coordinate-key-iartoq
(level, index)R2 node-imut toqqorsivik + salippallugu-DO cold-leaf misilernermut vektori (§16.9);< 300 mstassaavoq uttoqqaalluni aallartitsinissamut gate DO tulleriaarsimasut marluk qaqillugit (§16.10). - ANS-104 atsiorneqarnermut ilusaq + deep-hash — AALAJANGERSARSIMASOQ. RSA-PSS (sig type 1, anchor-wallet-imut immikkut-aalajangersimasumut JWK atoqqillugu); Ed25519 §15 PQ aqqummut nikinneqarpoq. Hand-rolled SHA-384 deep hash killisinerineqarpoq aqquinni-marlunni cross-impl fixture-imut, static-imut-kisiat reference-bundler-imut interop misissuinermut, shared-
crypto.subtleround-trip-imut, aamma post-bundle-imut Arweave-akuersuinermut monitor-imut (§16.8).
Akornutaaqqissaarluni aallartitsinissamut killiliisut (suliarinermut + atortumut/legal-imut misissuinermut iserterneqartussat):
- Akeqarnermut killiliisaq (Q1/Q6). Sumiiffik sumiluunniit oqaatigisinnaanngilaa log-i default qub-imi imai imaluunniit anguinnera uppernarsarmagu; oqaatigineqarsinnaasoq tassaavoq tulleriaarsimasoq, allangortinneqarsimasut-malugartumik, qaffasinnermut-killiliisaq piffia tatigineqarsinnaasoq. Free-tier piffissaliinermut copy numeric latency peqanngilaq; piffissamut-eqqortumut uppernarsaat T3 akilersumut kisiat.
- Witness-imut ilumoorneq (Q2). Equivocation nassaarineqarsinnaasoq + receipt-eqartoq marketing-iaruk, suliuna allatigut-witness-iarsimasoq.
- Receipt + anchor key-it (Q2/Q8). Receipt key pinneqarpoq + cross-signed-iuvoq; anchor wallet nammineq JWK upload wallet-imit immikkoortoq.
- Deep-hash-imut gate (Q8). Anchor imaluunniit T3 tx tunineqassanngilaq aqquinni-marlunni fixture + interop misissuineq naammaginnginnerini; akuersuinermut monitor ajunaarnermi page-issaaq.
- Toqqorsivimmut siuliusariaqartoq (Q7). Coordinate-key-iartoq node-imut toqqorsivik + salippallugu-DO cold-leaf vektori tassaapput "reclamation tunineqartumut uppernarsaammik nalivipallaartittanngilaq" qulakkeernermut siuliusariaqartut.