له دې پاڼې څخه کار واخلئ ترڅو د هرې دندې لپاره سمه کیلي جوړه کړئ، یوه پته تجزیه یا اعتبار یې وارزوئ، او پوه شئ چې کله یو چا ته کیلي ورکوئ نو څه افشا کوئ. په دې زنځیر کې حسابونه نشته: بیلانس د یوه کیلي فایل په اړه یو واقعیت دی، هېڅکله د زنځیر په اړه نه.
دوه کیلي، د پتې دوه ډولونه
| د نوډ کیلي | د والټ کیلي | |
|---|---|---|
| جوړوونکی | rand-node keygen | rand keygen |
| راز | یو 32-بایټي تخم | یوه 256-بټي د لګښت کیلي |
| عامه هویت | یوه 32-بایټي پته، base58، له 32 تر 44 تورو | یوه خوندي پته، rand1…، 1,665 یا 1,666 توري |
| لاسلیک کوي | بلاکونه، رایې، د فاسیټ ضربونه، Unbond، Withdraw، یو Registration، او په 20 زنځیر کې د AdmitValidator رایه؛ د یوه ټوکن د Key ضرب واک په توګه، TokenMint او SetAuthority. په 20 زنځیر کې دا هر پیغام د پیدایښت هش هم پوښي (راکړې ورکړې) | هېڅ: انتقال د خپلو ثبوتونو له لارې اجازه ترلاسه کوي |
| په زنځیر کې داسې ښکاري | د بلاک وړاندیز کوونکی، د تصدیقوونکو د راجستر یو قطار، د فاسیټ د ضرب ضربوونکی، د یوه ټوکن key واک | هېڅکله په انتقال کې نه، چېرې چې په لفافو کې مهر شوې وي. هلته خپرېږي چېرې چې ارزښت له عامه مقدار سره حوض ته ننوځي: د پل زېرمه، د ټوکن ضرب او، په 20 زنځیر کې، د یوې راغوښتنې تادیه د ترلاسه کوونکي پته یادوي، د تصدیقوونکي د تادیې پته په راجستر کې ده، د 20 زنځیر پیدایښت د پل د فیس خزانه یادوي، او له 14 زنځیر راهیسې د فاسیټ ضرب او د پیدایښت alloc یادښت د مالک pk خپروي، چې د پتې لومړي 32 بایټه دي |
| فایل | { "seed", "address", "public_key" }، حالت 0600 | { "version": 2, "spend_key": "<64 hex>" }، حالت 0600 |
دا دواړه هېڅکله نه ګډېږي. تصدیقوونکي د لومړي ډول له مخې پېژندل کېږي، او د Dilithium2 همدا کیلي بڼه د یوه ټوکن د Key ضرب واک (rand token create --authority-key-out د rand-node keygen په بڼه یو فایل لیکي)، د پل د درولو کیلي او د هغه شپږ پوسټ-کوانټم ساتونکو کیلي هم پوره کوي. د ساتونکو د شاهدۍ کیلي secp256k1 دي، د Ethereum په څېر 20-بایټي پتو سره (پل). ارزښت د دویم ډول لاندې ساتل کېږي.
ښکاره پته
د نوډ کیلي یو 32-بایټي تخم دی چې له هغه څخه د Dilithium2 کیلي جوړه په ټاکلي ډول اخیستل کېږي: یوه 1,312-بایټي عامه کیلي او 2,420-بایټي لاسلیکونه. پته د عامه کیلي د ډومین له مخې جلا شوی BLAKE3 هش دی چې په base58 کې وړاندې کېږي:
address = blake3("rand-address" || public_key) // 32 bytes, shown as base58
لاسلیک شوي شیان (رایې، بلاکونه، ضربونه، د سټېکنګ کړنې) بشپړه عامه کیلي له ځانه سره لري، نو تاییدوونکی د یوې خالي پتې پر باور کولو پر ځای blake3("rand-address" || public_key) == address ازمويي. همدا تخم د نوډ libp2p هویت هم ورکوي، چې یوه ed25519 کیلي ده له blake3("rand-p2p-identity" || seed) څخه، او دا د بوټسټرپ په multiaddr کې له /p2p/ وروسته د همتا پېژندنه ده.
rand-node keygen --out node.key.json # prints the address
rand-node address --key node.key.json # address, public key (hex), libp2p peer id
بېلګه: EdrEC2QRQrQF64iRXxF9927jNj6RidiHHByzx5xD6F1e د 20 زنځیر له تصدیقوونکو څخه یو دی. له 15 تر 20 زنځیرونه هغه اتلس کیلي بیا کاروي چې د 14 زنځیر لپاره بدلې شوې وې، نو د دوی پتې او د همتا پېژندنې نه دي بدلې شوې او د 13 زنځیر د هېڅ تصدیقوونکي پته یا د همتا پېژندنه اوس په کار نه ده؛ په 15 زنځیر کې اته نور تصدیقوونکي ګډون ته ننوتل، او له 16 زنځیر راهیسې ټول 26 د پیدایښت په فایل کې دي.
خوندي پته
والټ یو راز دی، 256-بټي د لګښت کیلي sk، او نور هر څه له هغې اخیستل کېږي. اخیستنه Poseidon2 ده چې د ډومین نښه یې لومړۍ جذب شوې کلمه ده (H(domain, msg))، همغه فنکشن چې zkVM یې په سرکټ کې محاسبه کوي:
spend key sk 256 bits, in wallet.key.json
│
├─ viewing key nk = H(NK, sk) sees the whole history; cannot spend
│ ├─ pk = H(PK, nk) the field a note names its owner by
│ ├─ nullifier(cm) = H(NF, nk, cm) what a spend publishes
│ ├─ ovk opens envelopes this wallet sent
│ └─ ML-KEM-768 decapsulation key opens envelopes sent to this wallet
└─ address rand1 + base58(pk || kem_ek)
پته د pk 32 بایټه ده چې وروسته یې د ML-KEM-768 1,184-بایټي د کپسول کولو کیلي راځي، د rand1 له مختاړي وروسته په base58 کې: 1,665 یا 1,666 توري (د base58 اوږدوالی په لومړنیو بایټونو پورې اړه لري؛ له څوارلسو پتو څخه نږدې یوه لنډه ده)، نږدې 1.6 KB، او د کنټرول مجموعه نه لري. لېږونکي ته د یادښت د لفافې د مهرولو لپاره د کپسول کولو کیلي اړینه ده، له همدې امله په پته کې شامله ده. دا په قصدي ډول عامه ده: هر څوک کولی شي ورته تادیه وکړي، او د هغې درلودل د دې په اړه چې څه پکې دي هېڅ نه وايي.
rand keygen # wallet.key.json; refuses to overwrite an existing file
rand address # rand1… on stdout, its fingerprint XXXX-XXXX-XXXX-XXXX on stderr
له v0.5.10 راهیسې rand address په stdout کې یوازې پته او یوه نوې کرښه چاپوي، نو $(rand address) په سکرېپټ کې کار کوي. ګوتنښه stderr ته ځي.
تجزیه، په هماغه ډول چې ShieldedAddress::parse یې کوي: rand1 لرې کړئ، base58 کوډ خلاص کړئ، او دقیقاً 32 + 1,184 = 1,216 بایټه وغواړئ؛ لومړي 32 یې pk دي چې اته کوچني-پای u32 کلمې دي، او پاتې یې د کپسول کولو کیلي ده. RPC هر هغه پارامتر چې له 2,000 تورو اوږد وي له تجزیې مخکې ردوي.
والټ د کیلي فایل تر څنګ <key>.key.json.notes.json ساتي، د هغو یادښتونو زېرمه چې دې کیلي پرانیستي دي. دا د یادښتونو ساده متنونه لري، نو د کیلي په څېر په 0600 حالت لیکل کېږي؛ د هغې هر قطار له 0 پاڼې څخه د بیا سکین له لارې بیرته ترلاسه کېدای شي.
د پتې شریکول: ګوتنښه او randpay: لینکونه
پته دومره اوږده ده چې په لوړ غږ ولوستل شي یا په سترګو پرتله شي، او د کنټرول مجموعه نه لري، نو له v0.5.10 راهیسې هر والټ د هغې تر څنګ یوه ګوتنښه ښيي. ګوتنښه یوازې د ښودلو لپاره ده: په زنځیر یا شبکه کې هېڅ شی یې نه لېږدوي.
fingerprint = first 80 bits of blake3("rand-address-fingerprint-1" || pk_bytes || kem_ek)
= 16 Crockford base32 characters, shown as XXXX-XXXX-XXXX-XXXX
هش د هغو 1,216 خامو بایټونو پر سر دی چې پته یې کوډ کوي. الفبا 0123456789ABCDEFGHJKMNPQRSTVWXYZ ده؛ تجزیه د تورو لوی او کوچني والی او خط تیره له پامه غورځوي او O د 0 په توګه او I یا L د 1 په توګه لولي.
یو randpay: لینک پته او، په اختیاري ډول، دا چې څه ورته تادیه شي، له ځانه سره لري:
randpay:<rand1…>[?amount=<decimal>][&asset=<index | 64 hex | rpl1…>][&memo=<percent-encoded UTF-8>]
amount د شتمنۍ د ښودنې په واحدونو کې دی (لسیزه RAND په نهو لسیزو ځایونو کې، ټوکن د خپل راجستر د قطار په خپل decimals کې) او باید صفر نه وي. memo تر ډېره 510 بایټه UTF-8 دی. سکیم د تورو لوی او کوچني والي ته له پام پرته سمون ورکول کېږي؛ نامعلوم پارامتر، تکرار شوی پارامتر، یا ناسم سلنه-کوډ ردېږي.
rand address --uri --amount 1.5 --memo "invoice #42" --qr # a randpay: link, as a terminal QR
rand contacts add alice rand1q9f… # shows the fingerprint, asks add? [y/N]
rand send alice 1.5 --memo "coffee" # to a contact, with a memo
rand send <TO> یوه rand1… پته، یو randpay: لینک یا د یوه خوندي شوي اړیکهنیوونکي نوم مني، په همدې ترتیب ازمویل کېږي. د لینک amount، asset او memo هغه څه ډکوي چې قومانده کرښه یې پرېږدي، او هغه ارزښت چې په دواړو لارو ورکړل شي او سره توپیر ولري ردېږي. له ثابتولو مخکې، send چاپوي to <contact, if any> · fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <asset> او پوښتنه کوي؛ سکرېپټ --yes ورکوي. اړیکې د کیلي تر څنګ په <key>.contacts.json کې په 0600 حالت ساتل کېږي. یادونه د یادښت د لفافې دننه سفر کوي (یادښتونه).
هېڅ rand balance <address> او د بیلانس هېڅ RPC نشته: زنځیر دا پوښتنه د هېچا لپاره نشي ځوابولی. والټ خپل بیلانس د خپلې د لیدو کیلي سره په زنځیر کې د هرې لفافې په سکین کولو محاسبه کوي (یادښتونه).
هغه کیلي چې یو بل چا ته یې ورکولی شئ
افشا کول د کیلي ځانګړنه ده، او زنځیر هېڅ یوه برخه یې نشي اجباري کولی.
| کیلي | پرانیزي | کچه |
|---|---|---|
د لیدو کیلي nk (64 hex) | هر هغه یادښت چې والټ کله هم ترلاسه کړی او، د ovk له لارې، هر هغه یادښت چې کله یې لېږلی، د هر لګښت له باطلوونکي سره | ټول یا هېڅ، پخواني او راتلونکي دواړه |
د راکړې ورکړې کیلي TxKey (32 بایټه) | دقیقاً هماغه یوه لفافه چې مهر کړې یې ده: یادښت او، له 18 زنځیر راهیسې، د هغه یادونه | یوه تادیه |
د غوښتنې کیلي K_call | د یوې محرمې غوښتنې د خصوصي ننوتو لیکنه | یوه غوښتنه |
د لیدو کیلي نشي لګولی. له 17 زنځیر راهیسې (ویشل شوې اجازه) د بنډل ثبوت پخپله له nk څخه جوړېږي، او هر بنډل یو دویم، کوچنی د اجازې ثبوت هم لري چې یوازې د لګښت کیلي یې جوړولی شي او له هماغې یوې راکړې ورکړې سره تړلی دی (یادښتونه). همدا ده چې استازي ثابتوونکي ته اجازه ورکوي چې nk، او په دې توګه د والټ ټول تاریخ، ترلاسه کړي پرته له دې چې ولګولی شي؛ والټ تل د اجازې ثبوت په خپل ماشین جوړوي. پتې، کیلي او موجود یادښتونه د دې وېش له امله نه دي بدل شوي. والټ nk په هر ځل چلولو کې اخلي او هېڅکله یې نه ساتي؛ هر TxKey د هرې لفافې لپاره نوی ټاکل کېږي او له مهرولو وروسته غورځول کېږي. نوډ ته د rand_importViewingKey په مرسته د لیدو کیلي ورکول کېدای شي (په حافظه کې، په هر نوډ کې تر ډېره 64، له بیا پیلېدو سره ورکېږي) ترڅو د خاوند په استازیتوب سکین وکړي — د سپړونکي لاره — او rand_checkTransaction(hash, key) په یوه بې حالته غوښتنه کې یوه تادیه د TxKey پر وړاندې ازمويي. rand viewing-key nk چاپوي، او rand tx-key <hash> د هغې راکړې ورکړې د هر وتنې کیلي چاپوي چې دا والټ یې پرانیستی شي.
د ټوکن پېژندنې پتې نه دي
د RPL ټوکن د متني پېژندونکي درېیم ډول لري، او دا یو ټوکن نوموي، هېڅکله یو خاوند نه. د ټوکن 32-بایټي د شتمنۍ پېژندنه د 64 hex تورو په توګه او د rpl1… په توګه ښودل کېږي: bech32m (BIP-350) د انسان لپاره د لوستلو وړ برخې rpl سره د 32 پېژندنې بایټونو پر سر، 52 د معلوماتو توري او یوه 6-توري د کنټرول مجموعه، 62 توري. تجزیه سخته ده: ناسمه د کنټرول مجموعه، د انسان لپاره د لوستلو وړ بله برخه، هغه بار چې دقیقاً 32 بایټه نه وي، یا ګډ لوی او کوچني توري ردېږي، نو د لیکلو تېروتنه هېڅکله بل ټوکن ته نه رسېږي. یادښت پېژندنه نه لري؛ د هغه asset کلمه د ټوکن د راجستر کثیف شاخص دی (RPL ټوکنونه).
د پل ترلاسه کوونکی
د پل د شبکې بڼه یو 32-بایټي د ترلاسه کوونکي ځای لري، او خوندي پته پکې نه ځایېږي. نن ورځ دا ځای د پتې هش لېږدوي:
recipient_hash = blake3("rand-shielded-recipient" || pk_bytes || kem_ek)
د سرچینې زنځیر زېرمه کوونکی هش نوموي، ساتونکي یې لاسلیک کوي، او د BridgeAttest راکړه ورکړه بشپړه پته لېږدوي ترڅو دفتر یې د هغې پر وړاندې وازمويي (پل).
لنډه خوندي پته: په 11 زنځیر کې وازمویل شوه، بېرته واخیستل شوه
چېن 11 (د fullnode ټګ v0.2، 2026-09-17) اوږده پته د 53 تر 55 تورو په یوه د ترلاسه کوونکي پېژند بدله کړه، rand1 + base58(blake3(receiver signing key) ‖ checksum)، او د ML-KEM د کپسولولو کیلي یې یو لاسلیک شوي د ترلاسه کوونکي ریکارډ ته ولېږدوله چې لېږونکي به د اکسپلورر له راجستر څخه راوړ، یا به یې د تادیې د غوښتنې دننه ترلاسه کاوه. دا یوه ورځ چلېده او هماغه ورځ بېرته واخیستل شوه (fullnode 17db41d). چېن 12 بېرته اوږدې پتې ته وګرځېد، کټ مټ لکه پورته چې بیان شوې، او له هغه وروسته هر چېن، د چېن 20 په ګډون، همدا ساتي.
ولې لرې شوه. د ترلاسه کوونکي پېژند یو هش دی، او لېږونکی نشي کولی یو پټ یادښت یو هش ته مهر کړي. هغه والټ ته لومړۍ تادیه چې هېڅکله یې ثبت نه و کړی، دې ته اړتیا درلوده چې ترلاسه کوونکی د تادیې غوښتنه یا د ریکارډ فایل ورکړي. په خپله ثبت هم د ځان ته د لېږد له لارې ورکول کېده، چې یو نوی، تش والټ یې نشي کولی. دواړو د رسولو لارو راجستر ته دا هم ویل چې څوک ته به تادیه کېږي. هغه ډیزاین چې لنډه پته، بېقیده د لېږلو وړتیا او کریپټوګرافیک محرمیت ټول ساتي، ګډه پته ده: یوه 32-بایټه X25519 کیلي په خپله پته کې (شاوخوا 93 توري)، او له کوانټم وروسته کیلي د لټون له لارې. په دې ډیزاین کې هغه والټ ته لومړۍ تادیه چې ثبت شوی نه دی د کلاسیکو بریدګرو پر وړاندې محرمه پاتې کېږي، او هره وروستۍ تادیه په بشپړه توګه له کوانټم وروسته خوندي ده. دا ډیزاین وروسته مشخص شوی دی. تر هغه چې خپور شوی نه وي، پته همدا اوږده پته ده.
د چېن 11 مشخصات او د هغه پلي کول د fullnode په تاریخ کې پاتې دي (docs/superpowers/specs/2026-09-17-short-shielded-address.md، ټګ v0.2)، د هغو برخو لپاره چې ګډ ډیزاین یې بیا کاروي: د ترلاسه کوونکي مشتق شوې د لاسلیک کیلي، لاسلیک شوی ریکارډ او د هغه تاییدوونکی، او راجستر د چېن د حالت په توګه.