Gunakan halaman ini untuk memilih pustaka yang tepat apabila anda berinteroperasi dengan rantaian, untuk menyemak parameter terhadap apa yang dikuatkuasakan oleh nod, dan untuk mengira semula sendiri sesuatu id atau komitmen. Setiap nilai di sini ialah nilai yang dijalankan oleh kod pada chain 20 (fullnode v0.6.8).
Primitif dan tempat ia digunakan
| primitif | parameter | digunakan untuk |
|---|---|---|
| Dilithium2 | kunci awam 1,312 bait, tandatangan 2,420 bait; pasangan kunci diterbitkan daripada seed 32 bait | undian validator dan cadangan blok; pencetakan faucet; Unbond, Withdraw dan Registration seorang validator; undian sesuatu AdmitValidator (chain 20); tindakan aggregator; kuasa pencetakan Key bagi token RPL (TokenMint, SetAuthority); tandatangan bersama guardian pasca-kuantum bagi jambatan, kunci jedanya dan, pada chain 20, bukti pemilikan kunci baharu dalam sesuatu penggiliran (di bawah) |
| ML-KEM-768 | kunci enkapsulasi 1,184 bait, teks sifir 1,088 bait | mengelak (seal) kunci bagi setiap transaksi dalam sampul note kepada alamat penerima; mengelak sampul input panggilan kepada juruaudit; mengelak tugas pembuktian kepada prover yang dipasangkan |
| ChaCha20-Poly1305 | kunci 32 bait, nonce rawak 12 bait diletakkan di hadapan, teg 16 bait | setiap bahagian sampul: badan note, kunci transaksi yang dibungkus, transkrip input panggilan; tugas dan balasan prover yang dipasangkan |
| BLAKE3 | output 32 bait, sentiasa dengan rentetan domain sebagai awalan | alamat, id transaksi, pengikatan transaksi dan pengikatan panggilan, id program, id aset token, akar keadaan dan pokok Merkle-nya, identiti p2p, mesej penandatanganan, id aset jambatan, pembutaan (blinding) deposit jambatan dan pembutaan note yuran jambatan |
| Poseidon2 atas Goldilocks | lebar 8, kadar 4, kapasiti 4, span serapan tanpa pelapik dengan penulisan ganti; unsur mesej ialah perkataan 32-bit; 86 pemalar pusingan ialah jadual literal dalam sumber nod (poseidon2_constants.rs) sejak pemotongan chain-15, nilai yang sama seperti yang dihasilkan oleh cabutan berbenih sebelum itu | segala-galanya di dalam bukti: kunci, komitmen note, nullifier, pokok komitmen, digest program hc, komitmen input H_IN dan H_PUB, digest bundle, komitmen kebenaran |
| secp256k1 ECDSA + keccak256 | tandatangan low-s, alamat guardian 20 bait gaya Ethereum, mu = keccak256(keccak256(body)) | akuan guardian jambatan, supaya kunci yang sama berfungsi pada kontrak EVM, program Solana dan Rand; pada Rand setiap akuan juga memerlukan kuorum Dilithium2 di bawah |
| bech32m (BIP-350) | bahagian boleh baca manusia rpl, muatan 32 bait, 52 aksara data + 6 aksara semak = 62 | bentuk teks rpl1… bagi id aset token RPL |
| Plonky3 batch STARK | Goldilocks p = 2⁶⁴ − 2³² + 1, FRI penyembunyi, blowup 8, arity lipatan 8, 80 pertanyaan, 20 bit bukti kerja | setiap bukti bundle, bukti auth dan bukti panggilan; sesuatu bukti bundle dan bukti auth-nya membawa lapan perkataan pengikatan transaksinya sebagai segmen input awamnya |
Parameter sasaran kertas putih berbeza di beberapa tempat daripada apa yang dijalankan oleh pelaksanaan (contohnya hash transkrip 384-bit dalam kertas berbanding transkrip Poseidon2 milik zkVM). Halaman ini menerangkan kod tersebut.
Tandatangan bersama pasca-kuantum pada jambatan
Akuan guardian jambatan ialah secp256k1 ECDSA, yang boleh dipalsukan oleh musuh kuantum. Sejak chain 14, setiap BridgeAttest — deposit dan penggiliran set guardian sama sahaja — mesti juga membawa kuorum tandatangan Dilithium2 oleh guardian yang sama ke atas digest yang sama:
M = "rand-bridge-pq-cosign-1" || rand_chain_id (u64 BE) || mu // 63 bytes, deterministic signing
dengan mu = keccak256(keccak256(body)) ialah apa yang ditandatangani oleh kuorum ECDSA. Id chain Rand dalam M menghalang tandatangan bersama testnet daripada disahkan pada chain Rand yang lain walaupun kunci guardian digunakan semula. M hanya mengikat id chain, pada chain 20 juga: ia ialah satu-satunya mesej bertandatangan yang tidak dialihkan oleh binding_domain ke belakang hash genesis, kerana daemon guardian yang menandatanganinya berada dalam repositori lain. Salinan sesuatu chain di bawah id chain yang sama dengan set guardian yang sama akan menerima tandatangan bersama depositnya; indeks set guardian tidak berada dalam M, maka tandatangan bersama kekal sah merentasi penggiliran set ECDSA. Medan pq_signatures bagi tindakan itu ialah senarai PqSignature { index: u8, signature }, disemak yang murah dahulu sebelum yang mahal: quorum(n) ≤ len ≤ n (PqNoQuorum), indeks meningkat dengan ketat (PqIndexOrder), setiap indeks di bawah n (PqIndexOutOfRange), setiap tandatangan tepat 2,420 bait (PqBadSignatureLength), dan terakhir setiap tandatangan disahkan di bawah pq_guardians[index] (PqBadSignature). Penandatangan PQ tidak semestinya penandatangan ECDSA; setiap kuorum dikira secara berasingan. Medan itu berada di dalam pengikatan transaksi, maka ia tidak boleh dibuang atau ditukar pada salinan.
Set PQ ialah bridge.pq_guardians genesis — lapan kunci 1,312 bait pada chain 20, seperti pada chain 15 hingga 19, sejajar indeks dengan set ECDSA genesis, set guardian 1 (chain 14 mempunyai enam, sejajar dengan set 0). Penggiliran set guardian ECDSA tidak pernah mengubahnya. Pada chain 14 ia tetap sepanjang hayat chain; sejak chain 15 genesis membawa kumpulan rules_v2 jambatan, yang di bawahnya kuorum PQ boleh menggantikan seluruh set PQ (RotatePqGuardians) atau kunci jeda (RotatePauseKey), masing-masing di bawah rotation_nonce jambatan. Genesis chain 20 menambah bridge.rotation: sesuatu penggiliran mestilah tindakan V2, membawa tandatangan Dilithium2 setiap kunci baharu ke atas mesej yang sama (bukti pemilikan), dan ia berkuat kuasa sehari selepas didaratkan melainkan kunci jeda semasa membatalkannya (Bridge). rand_getBridgeState menyajikan kunci tersebut dan bridge_attest yang dinyahkod menyenaraikan pq_signers, iaitu indeks yang menandatangani. Kuorum PQ yang sama membenarkan mesej tadbir urus jambatan, setiap satu berformat big-endian tetap yang membawa id chain dan satu nonce. Pada chain 20 (genesis binding_domain: 1) digit versi setiap domain ialah 2 dan hash genesis 32 bait terletak antara domain dan id chain; chain 14 hingga 19 menggunakan bentuk -1:
| mesej | domain (chain 14–19 / chain 20) | ditandatangani oleh |
|---|---|---|
M_pause | rand-bridge-pause-1 / -2 | satu kunci jeda genesis (Dilithium2), yang boleh menjeda dan tidak pernah menyahjeda |
M_unpause | rand-bridge-pq-unpause-1 / -2 | kuorum guardian PQ |
M_list | rand-bridge-pq-list-1 / -2 | kuorum guardian PQ (ListBacking) |
M_register | rand-bridge-pq-register-1 / -2 | kuorum guardian PQ (RegisterBridgedToken) |
M_rotate_pq | rand-bridge-pq-rotate-pq-1 / -2 | kuorum set PQ semasa (RotatePqGuardians, chain rules_v2); pada chain 20 juga setiap kunci baharu, sebagai bukti pemilikannya |
M_rotate_pause | rand-bridge-pq-rotate-pause-1 / -2 | kuorum set PQ semasa (RotatePauseKey, chain rules_v2); pada chain 20 juga kunci baharu |
M_cancel | rand-bridge-cancel-rotation-1 / -2, dengan bait kind mengekor | kunci jeda semasa (CancelRotation, chain dengan bridge.rotation: chain 20) |
STARK dalam pengeluaran
zkVM berada pada set kekangan 8: sembilan jadual wajib (program, cpu, memory, alu, range, nibble, poseidon2, input, public) serta jadual keccak dan sha256 yang hanya dibawa oleh sesuatu bukti apabila guest-nya memanggil syscall yang sepadan, disambungkan oleh tujuh belas bas dan dibuktikan sebagai satu batch STARK. Sejak set kekangan 7 setiap jadual yang diisytiharkan mempunyai sekurang-kurangnya 2⁷ baris dan terminal LogUp setiap jadual dibutakan melalui bas ketujuh belas, BLIND. Antara muka awam sesuatu bukti ialah 35 unsur medan (pv::NUM): pc kemasukan, tier, lapan perkataan output, digest program hc (8 perkataan), komitmen input persendirian bergaram H_IN (8), digest segmen awam tanpa garam H_PUB (8) dan, sejak set kekangan 8, had gas yang diisytiharkan GAS_LIMIT.
| parameter | pengeluaran | nota |
|---|---|---|
| pertanyaan FRI | 80 | penalaan semula 27 pertanyaan bagi set kekangan 3 dan 4 telah dibatalkan selepas audit 2026-09-12: ia meninggalkan ~42 bit terbukti |
| blowup | 8 (log_blowup = 3) | darjah kekangan maksimum setiap jadual dikunci di bawah had 8 |
| arity lipatan | 8 | |
| bit bukti kerja | 20 | |
| kesolidan | 3·80 + 20 = 260 bit secara konjektur (ethSTARK); kira-kira 86 bit terbukti di bawah jurang kedekatan | |
| pengetahuan sifar | statistik: LDE dan polinomial batch FRI dirawakkan, maka dua bukti bagi satu larian berbeza | sejak set kekangan 7 setiap jadual yang diisytiharkan sekurang-kurangnya 2⁷ baris, lebih daripada 82 titik yang dibuka oleh sesuatu bukti, dan terminal LogUp dibutakan |
| tier | 10, 12, 14, 16, 18, 20 | sesuatu bukti mendedahkan tier, tidak pernah bilangan kitaran; sejak fullnode v0.5.6 bukti panggilan di atas tier 14 ditolak (CallTierTooHigh), bukti bundle dikunci pada tier 14 dan bukti auth pada tier 10 |
| had bukti | max_proof_bytes genesis: 4 MiB (4,194,304) pada chain 17 hingga 20; 8 MiB pada chain 13 hingga 16; 2 MiB (MAX_PROOF_BYTES) pada genesis tanpanya, seperti chain 12 | 2 MiB berada di atas setiap bukti tanpa jadual hash yang boleh dihasilkan oleh guest yang dikerahkan dan di bawah bukti yang membawa keccak; 4 MiB menerima kedua-duanya |
| gas | 1 bagi setiap baris cpu; 3 bagi setiap baris serapan Poseidon2; 64 bagi setiap baris SHA256; 192 bagi setiap baris KECCAK | terkumpul dalam lajur GAS jadual cpu dan dibuktikan paling banyak GAS_LIMIT; pengesah menolak had di atas gas_max(t, k, s) = (2ᵗ − 1) + 2ᵗ⁻² + 191·(2ᵏ/32) + 63·(2ˢ/64), iaitu 1,279 bagi pengepala tier-10 tanpa hash dan 20,479 bagi pengepala tier-14 |
Saiz yang diukur pada set kekangan 6 (Apple Silicon, binaan release): bukti pengeluaran bebas keccak ialah 1,298,729 bait pada tier 10 dan 1,359,978 pada tier 12; bukti tier 10 yang membawa keccak ialah 3,198,430, melebihi lalai 2 MiB dan di bawah 8 MiB bagi rantaian 13 hingga 15. Bukti tier 14 bagi guest bundle 2-in-2-out yang telah disingkirkan diukur 1,321,773 bait pada chain 8, dan 1,418,406 hingga 1,420,423 bait pada chain 13. Guest bundle aset tersembunyi 4-in-4-out bagi chain 14 kekal pada tier 14 tanpa kedua-dua jadual cincang, dan buktinya diukur 1,422,116 dan 1,423,170 bait pada chain 14 (2026-09-20); chain 15 menetapkan guest yang sama (hc_bundle tidak berubah). Bukti bundle di sana mengisytiharkan public_log_height 4, iaitu ketinggian lapan perkataan pengikat, dan nod menolak sebarang nilai lain sebelum membina kunci pengesah. Bukti panggilan ERC-20 approve yang membawa keccak, dibuat pada chain 13 pada 2026-09-19 (tier 16), ialah 3,412,405 bait; setiap rantaian sejak fullnode v0.5.6 menolak panggilan itu, pada tier 16.
Lajur penyamaran dan lantai jadual bagi set kekangan 7 menambah kira-kira 5% pada bukti tanpa cincang: seperti yang diukur oleh fullnode pada 2026-09-28, fib ialah 1,367,688 bait pada tier 10 dan 1,424,299 pada tier 12, bukti tier 10 yang membawa keccak 3,283,898, dan bukti bundle aset tersembunyi tier 14 1,498,821 (guest v1) dan 1,497,156 (guest v2). Bukti bundle mengisytiharkan public_log_height 7 sejak itu. Set kekangan 8 menambah kurang daripada 1%. Diukur pada chain 18 pada 2026-09-30 (Apple Silicon): bukti pengesahan sebanyak 1,364,940 hingga 1,375,371 bait (tier 10), bukti bundle sebanyak 1,494,151 hingga 1,504,260 bait (tier 14, guest v3), dan bukti panggilan sebanyak 1,498,589 bait pada tier 14 tanpa jadual cincang, 1,911,152 pada tier 14 dengan jadual SHA-256 dan 3,346,865 pada tier 12 dengan jadual Keccak. Kesemuanya muat dalam had 4 MiB bagi chain 18 hingga 20.
Pengesahan mengambil kira-kira 16 ms dengan kunci pengesah yang telah dipanaskan dan kira-kira 230 ms pada kali pertama kunci (tier, heights) dibina. Profil FRI test (16 pertanyaan) wujud untuk suite ujian dan tidak selamat; genesis chain 20 menetapkan production. Fullnode v0.6.8 tidak mengubah sebarang kekangan: chain 20 menetapkan hc_bundle dan hc_auth yang sama seperti chain 17 hingga 19.
Binaan cincang yang boleh anda hasilkan semula
BLAKE3 dengan domain: blake3(domain || data), rentetan domain tanpa pemisah.
Domain pengikat. Genesis chain 20 menetapkan binding_domain: 1 (fullnode v0.6.8, audit v6 BIND-1). Pada rantaian sedemikian, setiap pengikat bukti dan setiap mesej tindakan bertandatangan yang sebelum ini mengikat id rantaian sahaja kini turut mengikat cincang genesis: nombor versi domain naik satu dan cincang genesis 32 bait diletakkan dahulu dalam praimej, sebelum id rantaian. Bukti atau tandatangan yang dibuat untuk satu rantaian kemudian tidak disahkan pada rantaian lain, walaupun rantaian itu menggunakan semula id rantaian dan kunci yang sama, seperti yang berlaku apabila rantaian dipotong semula. Perkataan pengikat ialah input awam bagi bukti, maka tiada guest atau kunci pengesah yang berubah. Jadual memberikan kedua-dua bentuk; chain 14 hingga 19 menggunakan bentuk pertama, bait demi bait. Sudah terikat pada genesis sebelum ini, dan tidak berubah: undi dan cadangan (sejak consensus_domain: 1), Registration v2, dan undi AdmitValidator. Tidak dialihkan: tandatangan bersama mint bagi jambatan (di atas). Dompet memerlukan v0.6.8 untuk menghantar pada chain 20, dan menentukan bentuk berdasarkan id rantaian, bukan berdasarkan apa yang didakwa oleh nod; rand_getLimits.binding_domain melaporkannya.
| nilai | binaan |
|---|---|
| alamat telus | blake3("rand-address" || dilithium2_public_key), base58 |
| id transaksi | blake3("rand-txid-3" || bincode(view)), dengan view ialah transaksi yang bait bukti bundle-nya digantikan dengan blake3(proof) dan bukti pengesahannya dengan blake3(auth_proof); auth_commit masuk seadanya. Domainnya ialah rand-txid-2, tanpa medan pengesahan, hingga chain 16 |
| pengikat transaksi | blake3("rand-tx-bind-1" || bincode(chain_id, bundle', action')) pada chain 14 hingga 19; blake3("rand-tx-bind-2" || bincode(genesis_hash, chain_id, bundle', action')) pada chain 20. Lapan perkataan u32 little-endian, dengan ' menggantikan bundle.proof, bundle.auth_proof dan proof bagi Aggregate dengan vektor kosong; bincode dengan integer little-endian lebar tetap. Setiap bukti bundle dan bukti pengesahan dibuat ke atas dan disahkan terhadap perkataan ini |
| pengikat panggilan | blake3("rand-call-bind-1" || …), atau rand-call-bind-2 dengan cincang genesis dahulu pada chain 20: binaan pengikat transaksi dengan proof milik Call (atau Invoke) turut dikosongkan. Pada genesis hardening_v6, seperti chain 20, segmen awam bagi bukti panggilan ialah perkataan awam program yang ditetapkan semasa penempatan diikuti lapan perkataan ini, dan segmen bagi Invoke menambah peralihannya sebagai perkataan konteks selepasnya |
| id program | blake3("rand-program" || base_pc as 4 LE bytes || words as 4 LE bytes each) |
| identiti p2p | kunci ed25519 daripada blake3("rand-p2p-identity" || seed) |
| id aset jambatan (bagi setiap sokongan) | blake3("rand-bridge-asset" || token_chain as 2 BE bytes || token_address (32 bytes)) — rand_bridgeAssetId mengiranya dan rand_getAssets mencetaknya bagi setiap baris sokongan; ia mengenal pasti syiling sumber pada wayar, bukan token |
| id aset token RPL, natif | blake3("rand-rpl-asset" || bincode(name, symbol, decimals, authority, initial: Option<InitialMint>, salt)), salt ialah 32 bait pilihan pencipta; dipaparkan sebagai hex dan sebagai rpl1… |
| id aset token RPL, dijambatankan | blake3("rand-rpl-asset" || bincode(name, symbol, BRIDGE_DECIMALS, salt)) — bukan ke atas pasangan (chain, token), kerana satu token yang dijambatankan merentasi beberapa sokongan |
| penyamaran deposit jambatan | r = blake3("rand-deposit-r-1" || mu), satu-satunya r yang diterima oleh kemasukan bagi BridgeAttest (WrongDepositBlinding jika tidak) |
| penyamaran nota yuran jambatan (chain 20) | nota yuran deposit: r = blake3("rand-bridge-fee-r-1" || mu); nota bagi pembakaran: r = blake3("rand-bridge-burn-fee-r-1" || txid); kedua-duanya dibaca sebagai lapan perkataan little-endian. Nota ini tiada sampul: setiap medan adalah awam, pemiliknya ialah bridge.fees.recipient genesis |
| penerima jambatan | blake3("rand-shielded-recipient" || pk_bytes || kem_ek) ke atas alamat terlindung yang penuh |
mesej Mint faucet | blake3("rand-mint-2" || bincode(chain_id, cm, pk, time, r, envelope, amount)); pada chain 20 blake3("rand-mint-3" || bincode(genesis_hash, chain_id, cm, pk, time, r, envelope, amount)) |
mesej TokenMint, SetAuthority | blake3("rand-rpl-mint-1" or "rand-rpl-authority-1", chain_id || asset_id || nonce || body); body bagi mint termasuk blake3(bincode(envelope)). Pada chain 20 rand-rpl-mint-2 dan rand-rpl-authority-2, dengan cincang genesis dahulu |
mesej Registration | blake3("rand-register-2" || bincode(genesis_hash, chain_id, validator, payout)) pada genesis dengan staking.registration_v2 atau binding_domain: 1, seperti chain 20 (pendaftaran v1 ditolak di sana); blake3("rand-register" || bincode(chain_id, payout)) di tempat lain |
undi AdmitValidator (chain 20) | blake3("rand-admit-validator-1" || genesis_hash || candidate_address), ditandatangani oleh setiap validator yang mengundi |
mesej Unbond | blake3("rand-unbond" || bincode(chain_id, validator, amount, nonce)); pada chain 20 blake3("rand-unbond-2" || bincode(genesis_hash, chain_id, validator, amount, nonce)) |
mesej Withdraw | blake3("rand-withdraw" || bincode(chain_id, validator, amount, nonce, time, r, envelope)); pada chain 20 rand-withdraw-2, dengan cincang genesis dahulu |
| nod Merkle (pokok keadaan) | blake3("rand-merkle-node" || left || right) |
| daun daftar token | blake3("rand-token-leaf-1" || bincode(TokenInfo)), mengikut tertib indeks, di bawah tokens_root |
| akar keadaan | pada chain 20, blake3("rand-state-admitted-1" || inner || admitted_root) membungkus inner = blake3("rand-state-8" || tree_root || nullifier_root || validators_root || programs_root || bridge_root || tokens_root || faucet_epoch || faucet_minted_in_epoch || bond_queue_root || gas_price || byte_price || program_state_root), dengan program_state_root = blake3("rand-program-state-1" || cells_root || vaults_root) (RPL-2), dua pembilang faucet dan dua harga semasa masing-masing 8 bait big-endian, dan pembungkus itu mengikat set yang diterima masuk (staking.admission_by_vote). Akar chain 19 ialah blake3("rand-state-7" || …) ke atas medan yang sama hingga byte_price (bahagian genesis staking menambah tiga medan selepas tokens_root di bawah rand-state-5, seperti pada chain 15 hingga 17; bahagian genesis gas.dynamic menambah dua harga dan memindahkan domain ke rand-state-7); rand-state-4 ke atas enam yang pertama pada chain 14; rand-state-2 ke atas empat yang pertama pada rantaian tanpa bahagian bridge, tokens atau aggregation (Konsensus) |
Poseidon2 dengan teg domain: H(domain, msg) = sponge_hash([domain, msg...]), teg ialah perkataan pertama yang diserap, setiap perkataan ialah unsur Goldilocks, digest 4 unsur dipecahkan kepada lapan perkataan u32 (separuh rendah kemudian separuh tinggi bagi setiap unsur). Teg domain:
| tag | nilai | binaan |
|---|---|---|
NK | 1 | kunci tontonan nk = H(1, sk) |
PK | 2 | nilai awam nota pk = H(2, nk) |
NF | 3 | nullifier H(3, nk || cm) |
CM | 4 | komitmen nota H(4, pk(8) || from(8) || amount_lo || amount_hi || asset || time || r(8)) — 28 perkataan |
OVK, KEM_SEED | 5, 6 | kunci tontonan keluar dan benih ML-KEM, melalui cincang lebar mod pembilang [domain, nk, counter] |
NODE | 7 | nod pokok H(7, left || right); daun kosong ialah semuanya sifar |
HC | 8 | digest program; tag, base_pc dan len berada dalam lorong kapasiti bagi permutasi pertama, kemudian perkataan diserap empat bagi setiap blok |
OUT | 9 | digest output bagi guest pemindahan |
IN | 10 | H_IN: pengepala kapasiti [10, n_in, 0], kemudian salt 4 perkataan, kemudian input |
BUNDLE | 11 | digest bundle 2-masuk-2-keluar yang telah ditamatkan ke atas 47 perkataan awam; tiada chain yang lagi menetapkan guest itu |
| bundle tersembunyi | 64 | digest bundle aset tersembunyi ke atas 81 perkataan pada chain 14 hingga 16: anchor, empat nullifier, empat komitmen, fee, burn_a, burn_r (dua perkataan setiap satu), burn_asset, time, dan perkataan taint yang terakhir. Pada chain 17 hingga 20 (guest bundle v3) ia ialah 89 perkataan: lapan perkataan komitmen kebenaran c berada tepat sebelum perkataan taint. Aset persendirian A tidak termasuk di dalamnya. Tag ini bersifat setempat pada nod dan terletak jauh daripada tag vendored 1 hingga 15 |
AUTH | 65 | komitmen kebenaran c = H(65, nk || salt), 16 perkataan, dengan salt 256-bit yang baharu bagi setiap bundle; diterbitkan oleh bukti bundle dalam digestnya dan oleh bukti auth sebagai lapan perkataan outputnya, serta dibawa oleh bundle sebagai auth_commit (chain 17 hingga 20). Setempat pada nod, seperti 64 |
PUB | 15 | H_PUB: pengepala [15, n_pub, 0], tanpa salt; bagi program, pada chain 20 perkataan ditetapkan semasa deploy (paling banyak 32,768), segmen setiap panggilan ialah perkataan tersebut diikuti lapan perkataan pengikatan panggilan, dan panggilan disemak terhadap digest segmen itu; bagi bukti bundle dan bukti auth, segmen ialah lapan perkataan pengikatan transaksi; genesis tanpa max_program_public_words hanya menerima segmen kosong |
hc, H_IN dan H_PUB bukan sponge berawalan mesej yang biasa: pengepala dimasukkan ke dalam kapasiti supaya baris digest dalam jadual cpu menyerap tepat empat perkataan bagi setiap permutasi. Hasilkan semula dengan crate vendored (randprotocol_zkvm::hash::{input_digest, public_digest}, isa::Program::digest) dan bukannya secara manual.
Sponge biasa tidak melakukan padding, maka dalam blok pertama [a] dan [a, 0] menghasilkan cincangan yang sama. Setiap binaan di atas mencincang mesej berpanjang tetap di bawah tagnya sendiri. Bagi data yang panjangnya boleh berubah, set kekangan 7 menambah sponge terikat panjang (hash::sponge_hash_len, syscall POSEIDON2_LEN): ia bermula daripada keadaan [0, 0, 0, 0, n, 0, 0, 0], dengan n ialah bilangan perkataan, dan bermutasi sekurang-kurangnya sekali. Ia ialah cincangan yang berbeza bagi perkataan yang sama, dan tiada nota, nullifier, root atau digest pada chain yang menggunakannya.
Dua sifat yang perlu diingat: hc bersifat mengikat tetapi tidak menyembunyikan (tiada salt, maka program yang diteka boleh disahkan dan dua deployment bagi satu program boleh dipautkan), manakala H_IN bersifat menyembunyikan serta mengikat (salt 128-bit yang baharu bagi setiap bukti), maka penerbitan H_IN tidak mendedahkan apa-apa tentang input sehingga pemegang salt membukanya.
Terbitan kunci
| kunci | daripada |
|---|---|
| pasangan kunci Dilithium2 (nod) | deterministik daripada benih 32-bait |
| libp2p ed25519 (nod) | blake3("rand-p2p-identity" || seed) |
kunci tontonan, pk, ovk, pasangan kunci ML-KEM (wallet) | terbitan Poseidon2 bagi kunci perbelanjaan seperti dalam jadual di atas; pasangan ML-KEM ialah MlKem768::from_seed(kem_seed) |
Kertas kerja pada halaman kertas kerja memuatkan hujah keselamatan: pilihan pasca-kuantum, perakaunan kesolidan FRI dan sebab 80 pertanyaan dikekalkan, serta had panjang jejak.