Gunakan halaman ini untuk menjana kunci yang sesuai bagi sesuatu tugas, untuk menghurai atau mengesahkan alamat, dan untuk mengetahui apa yang didedahkan apabila anda menyerahkan sesuatu kunci kepada orang lain. Tiada akaun pada rantaian ini: baki ialah fakta tentang fail kunci, bukan tentang rantaian.
Dua kunci, dua jenis alamat
| kunci nod | kunci dompet | |
|---|---|---|
| ditulis oleh | rand-node keygen | rand keygen |
| rahsia | benih 32 bait | kunci perbelanjaan 256 bit |
| identiti awam | alamat 32 bait, base58, 32 hingga 44 aksara | alamat terlindung, rand1…, 1,665 atau 1,666 aksara |
| menandatangani | blok, undi, pencetakan faucet, Unbond, Withdraw, Registration, dan pada chain 20 undi AdmitValidator; sebagai pihak berkuasa pencetakan Key bagi sesuatu token, TokenMint dan SetAuthority. Pada chain 20, setiap mesej ini turut merangkumi cincang genesis (Transactions) | tiada: sesuatu pemindahan diberi kuasa oleh buktinya |
| muncul pada rantaian sebagai | pencadang blok, baris daftar validator, pencetak bagi pencetakan faucet, pihak berkuasa key bagi sesuatu token | tidak pernah dalam pemindahan, kerana ia dimeterai di dalam sampul. Ia diterbitkan apabila nilai memasuki kolam dengan jumlah awam: deposit jambatan, pencetakan token dan, pada chain 20, bayaran balik sesuatu invoke menamakan alamat penerima; alamat bayaran validator berada dalam daftar, genesis chain 20 menamakan perbendaharaan yuran jambatan, dan sejak chain 14 pencetakan faucet dan nota alloc genesis menerbitkan pk pemilik, iaitu 32 bait pertama alamat |
| fail | { "seed", "address", "public_key" }, mod 0600 | { "version": 2, "spend_key": "<64 hex>" }, mod 0600 |
Kedua-duanya tidak pernah bercampur. Validator dikenal pasti oleh jenis pertama, dan bentuk kunci Dilithium2 yang sama digunakan untuk pihak berkuasa pencetakan Key bagi sesuatu token (rand token create --authority-key-out menulis fail berbentuk fail rand-node keygen), kunci jeda jambatan dan enam kunci penjaga pasca-kuantumnya. Kunci pengesahan para penjaga ialah secp256k1, dengan alamat 20 bait gaya Ethereum (Bridge). Nilai dipegang di bawah jenis kedua.
Alamat telus
Kunci nod ialah benih 32 bait yang daripadanya pasangan kunci Dilithium2 diterbitkan secara deterministik: kunci awam 1,312 bait dan tandatangan 2,420 bait. Alamat ialah cincang BLAKE3 berpisah-domain bagi kunci awam, dipaparkan dalam base58:
address = blake3("rand-address" || public_key) // 32 bytes, shown as base58
Objek bertandatangan (undi, blok, pencetakan, tindakan pertaruhan) membawa kunci awam penuh, maka pemverifikasi menyemak blake3("rand-address" || public_key) == address dan bukannya mempercayai alamat semata-mata. Benih yang sama turut menghasilkan identiti libp2p nod, iaitu kunci ed25519 daripada blake3("rand-p2p-identity" || seed), yang merupakan id rakan sebaya selepas /p2p/ dalam multialamat bootstrap.
rand-node keygen --out node.key.json # prints the address
rand-node address --key node.key.json # address, public key (hex), libp2p peer id
Contoh: EdrEC2QRQrQF64iRXxF9927jNj6RidiHHByzx5xD6F1e ialah salah satu validator chain 20. Chain 15 hingga 20 menggunakan semula lapan belas kunci yang dipusingkan untuk chain 14, maka alamat dan id rakan sebaya mereka tidak berubah dan tiada alamat atau id rakan sebaya validator chain 13 yang masih digunakan; lapan lagi validator telah mengikat pertaruhan pada chain 15, dan kesemua 26 berada dalam fail genesis mulai chain 16.
Alamat terlindung
Sesebuah dompet ialah satu rahsia, kunci perbelanjaan 256 bit sk, dan segala yang lain ialah terbitan daripadanya. Terbitan itu menggunakan Poseidon2 dengan teg domain sebagai perkataan pertama yang diserap (H(domain, msg)), fungsi yang sama yang dikira oleh zkVM dalam litar:
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)
Alamat ialah 32 bait pk diikuti kunci pengkapsulan ML-KEM-768 sepanjang 1,184 bait, dalam base58 selepas awalan rand1: 1,665 atau 1,666 aksara (panjang base58 bergantung pada bait permulaan; kira-kira satu alamat daripada empat belas ialah yang lebih pendek), kira-kira 1.6 KB, dan tanpa checksum. Penghantar memerlukan kunci pengkapsulan untuk memeterai sampul nota, dan itulah sebabnya ia berada dalam alamat. Ia awam secara reka bentuk: sesiapa sahaja boleh membayarnya, dan memegangnya tidak mendedahkan apa-apa tentang apa yang dipegangnya.
rand keygen # wallet.key.json; refuses to overwrite an existing file
rand address # rand1… on stdout, its fingerprint XXXX-XXXX-XXXX-XXXX on stderr
Sejak v0.5.10 rand address mencetak alamat sahaja diikuti baris baharu pada stdout, maka $(rand address) berfungsi dalam skrip. Cap jari dihantar ke stderr.
Penghuraian, tepat seperti yang dilakukan oleh ShieldedAddress::parse: buang rand1, nyahkod base58, dan perlukan tepat 32 + 1,184 = 1,216 bait; 32 yang pertama ialah pk sebagai lapan perkataan u32 little-endian, selebihnya ialah kunci pengkapsulan. RPC menolak sebarang parameter yang lebih panjang daripada 2,000 aksara sebelum menghuraikannya.
Di sebelah fail kunci, dompet menyimpan <key>.key.json.notes.json, cache nota yang telah dibuka oleh kunci ini. Ia mengandungi teks biasa nota, maka ia ditulis dengan mod 0600 seperti kunci; setiap barisnya boleh dipulihkan dengan mengimbas semula dari daun 0.
Berkongsi alamat: cap jari dan pautan randpay:
Alamat terlalu panjang untuk dibaca dengan kuat atau dibandingkan dengan mata dan tidak mempunyai checksum, maka sejak v0.5.10 setiap dompet menunjukkan cap jari di sebelahnya. Cap jari hanya untuk paparan: tiada apa-apa pada rantaian atau pada wayar yang membawanya.
fingerprint = first 80 bits of blake3("rand-address-fingerprint-1" || pk_bytes || kem_ek)
= 16 Crockford base32 characters, shown as XXXX-XXXX-XXXX-XXXX
Cincang itu dikira ke atas 1,216 bait mentah yang dikodkan oleh alamat. Abjadnya ialah 0123456789ABCDEFGHJKMNPQRSTVWXYZ; penghuraian mengabaikan huruf besar atau kecil dan tanda sengkang, serta membaca O sebagai 0 dan I atau L sebagai 1.
Pautan randpay: membawa alamat dan, secara pilihan, jumlah yang perlu dibayar kepadanya:
randpay:<rand1…>[?amount=<decimal>][&asset=<index | 64 hex | rpl1…>][&memo=<percent-encoded UTF-8>]
amount dalam unit paparan aset (RAND perpuluhan pada sembilan tempat perpuluhan, token pada decimals baris daftarnya sendiri) dan tidak boleh sifar. memo paling banyak 510 bait UTF-8. Skema dipadankan tanpa mengambil kira huruf besar atau kecil; parameter yang tidak dikenali, parameter yang berulang, atau pengekodan peratus yang tidak sah akan ditolak.
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> menerima alamat rand1…, pautan randpay: atau nama kenalan yang disimpan, dicuba mengikut urutan itu. amount, asset dan memo pada pautan mengisi apa yang ditinggalkan oleh baris arahan, dan nilai yang diberikan dalam kedua-dua cara tetapi bercanggah akan ditolak. Sebelum membuat bukti, send mencetak to <contact, if any> · fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <asset> dan meminta pengesahan; skrip menggunakan --yes. Kenalan disimpan di sebelah kunci pada <key>.contacts.json, mod 0600. Memo dibawa di dalam sampul nota (Notes).
Tiada rand balance <address> dan tiada RPC baki: rantaian tidak dapat menjawabnya untuk sesiapa pun. Dompet mengira bakinya dengan mengimbas setiap sampul pada rantaian menggunakan kunci tontonannya (Notes).
Kunci yang boleh anda serahkan kepada orang lain
Pendedahan ialah sifat kunci, dan rantaian tidak dapat memaksa mana-mana daripadanya.
| kunci | membuka | granulariti |
|---|---|---|
kunci tontonan nk (64 hex) | setiap nota yang pernah diterima dompet dan, melalui ovk, setiap nota yang pernah dihantarnya, bersama nullifier bagi setiap perbelanjaan | semua atau tiada, berkuat kuasa ke belakang dan ke hadapan |
kunci transaksi TxKey (32 bait) | tepat satu sampul yang dimeteraikannya: nota itu dan, sejak chain 18, memonya | satu pembayaran |
kunci panggilan K_call | transkrip input persendirian satu panggilan sulit | satu panggilan |
Kunci tontonan tidak boleh membelanjakan. Sejak chain 17 (kebenaran berpisah), bukti bundle itu sendiri dibuat daripada nk, dan setiap bundle turut membawa bukti auth kedua yang kecil, yang hanya boleh dibuat oleh kunci perbelanjaan dan yang terikat pada satu transaksi itu (Notes). Itulah yang membolehkan pembukti yang diwakilkan diberi nk, dan dengan itu seluruh sejarah dompet, tanpa dapat membelanjakan; dompet sentiasa membuat bukti auth pada mesinnya sendiri. Alamat, kunci dan nota sedia ada tidak berubah akibat pemisahan itu. Dompet menerbitkan nk pada setiap larian dan tidak pernah menyimpannya; setiap TxKey dijana baharu bagi setiap sampul dan dibuang selepas pemeteraian. Sesebuah nod boleh diberi kunci tontonan dengan rand_importViewingKey (dalam memori, paling banyak 64 bagi setiap nod, hilang apabila dimulakan semula) supaya ia mengimbas bagi pihak pemegang — laluan peneroka — dan rand_checkTransaction(hash, key) menyemak satu pembayaran terhadap TxKey dalam satu panggilan tanpa keadaan. rand viewing-key mencetak nk, dan rand tx-key <hash> mencetak kunci bagi setiap output transaksi yang boleh dibuka oleh dompet ini.
Id token bukan alamat
Token RPL mempunyai jenis pengecam teks ketiga, dan ia menamakan token, bukan pemegang. Id aset 32 bait token ditunjukkan sebagai 64 aksara hex dan sebagai rpl1…: bech32m (BIP-350) dengan bahagian boleh baca manusia rpl ke atas 32 bait id, 52 aksara data ditambah checksum 6 aksara, 62 aksara. Penghuraian adalah ketat: checksum yang salah, bahagian boleh baca manusia yang lain, muatan yang bukan tepat 32 bait, atau huruf besar dan kecil bercampur akan ditolak, maka kesilapan taip tidak pernah menuju ke token yang berbeza. Nota tidak membawa id; perkataan asset-nya ialah indeks daftar padat token (RPL tokens).
Penerima jambatan
Format wayar jambatan mempunyai slot penerima 32 bait, dan alamat terlindung tidak muat di dalamnya. Pada masa ini slot itu membawa cincang alamat:
recipient_hash = blake3("rand-shielded-recipient" || pk_bytes || kem_ek)
Pendeposit pada rantaian sumber menamakan cincang itu, para penjaga menandatanganinya, dan transaksi BridgeAttest membawa alamat penuh supaya lejar dapat menyemaknya terhadap cincang itu (Bridge).
Alamat terlindung pendek: dicuba pada chain 11, dikembalikan
Chain 11 (tag fullnode v0.2, 2026-09-17) menggantikan alamat panjang dengan id penerima sepanjang 53 hingga 55 aksara, rand1 + base58(blake3(kunci tandatangan penerima) ‖ checksum), dan memindahkan kunci enkapsulasi ML-KEM ke dalam rekod penerima bertandatangan yang diperoleh pengirim daripada daftar penjelajah (explorer) atau diterima secara sebaris dalam permintaan pembayaran. Ia berjalan selama sehari dan dikembalikan pada hari yang sama (fullnode 17db41d); chain 12 kembali kepada alamat panjang, tepat seperti yang diterangkan di atas, dan setiap chain selepas itu, termasuk chain 20, mengekalkannya.
Sebab ia dikeluarkan. Id penerima ialah cincangan (hash), dan pengirim tidak dapat mengelak nota kepada sesuatu cincangan. Pembayaran pertama kepada dompet yang belum pernah mendaftar memerlukan penerima menyerahkan permintaan pembayaran atau fail rekod, dan pendaftaran itu sendiri dibayar melalui pindahan kendiri, yang tidak dapat dibuat oleh dompet baharu yang kosong. Kedua-dua saluran penghantaran itu juga memberitahu daftar siapa yang bakal dibayar. Reka bentuk yang mengekalkan alamat pendek, kebolehhantaran tanpa syarat dan privasi kriptografi ialah alamat hibrid: kunci X25519 sepanjang 32 bait secara sebaris (kira-kira 93 aksara), kunci pasca-kuantum melalui carian, dengan pembayaran pertama kepada dompet yang belum berdaftar bersifat sulit terhadap lawan klasik dan setiap pembayaran seterusnya sepenuhnya pasca-kuantum. Perkara itu dinyatakan seterusnya; sehingga ia dilancarkan, alamat panjang ialah alamat yang digunakan.
Spesifikasi chain 11 dan pelaksanaannya kekal dalam sejarah fullnode (docs/superpowers/specs/2026-09-17-short-shielded-address.md, tag v0.2) untuk bahagian yang digunakan semula oleh reka bentuk hibrid: kunci tandatangan penerima terbitan, rekod bertandatangan beserta pengesahnya, dan daftar sebagai keadaan chain.