Rand Protocol
文檔
指南

密碼學

各項密碼學原語及其應用位置、生產環境中採用的 STARK 與 FRI 參數,以及開發者可能需要自行重現的哈希構造。

使用本頁,可在與鏈互通時揀選合適的函式庫,對照節點實際強制執行的參數,並自行重新計算 id 或承諾。此處每一個數值,均為 chain 21(fullnode v0.8.0,標籤 c0878c3f,自 2026-10-12 起上線)上的程式碼所運行的數值;凡 chain 21 更改了某個數值之處,chain 20 的舊值會並列保留。

密碼學原語及其用途

原語參數用途
Dilithium21,312 字節公鑰,2,420 字節簽名;密鑰對由 32 字節種子派生驗證者投票及區塊提案;faucet 鑄幣;Unbond、Withdraw 及驗證者的 Registration;AdmitValidator 的投票(自 chain 20 起);多重簽名帳戶的簽署者及驗證者的 SetRandPrice 投票(chain 21);聚合者操作;RPL 代幣的 Key 鑄造授權(TokenMint、SetAuthority);橋的抗量子守護者聯署、其暫停密鑰,以及自 chain 20 起輪換時新密鑰的持有證明(見下文)。在 chain 21 上,私密多重簽名帳戶最多 16 個 Dilithium2 密鑰在證明內部對 rand-msauth-1 ‖ binding 簽名,鏈永遠看不到這些密鑰
ML-KEM-7681,184 字節封裝密鑰,1,088 字節密文將 note 信封的每筆交易密鑰封裝予接收者的地址;將調用輸入信封封裝予審計者;將證明任務封裝予已配對的證明者
ChaCha20-Poly130532 字節密鑰,前置隨機 12 字節 nonce,16 字節標籤信封的每一部分:note 本體、被封裝的交易密鑰、調用輸入記錄;已配對證明者的任務及回覆
BLAKE332 字節輸出,一律前置域字串地址、交易 id、交易綁定與調用綁定、程式 id、代幣資產 id、狀態根及其 Merkle 樹、p2p 身份、簽署訊息、橋資產 id、橋存款的盲化因子,以及橋手續費 note 的盲化因子
Poseidon2(Goldilocks 上)寬度 8,速率 4,容量 4,無填充的覆寫式海綿;訊息元素為 32 位元字;86 個輪常數自 chain-15 切換起為節點源碼中的字面常量表(poseidon2_constants.rs),其值與此前由種子抽取所得者相同證明內部的一切:密鑰、note 承諾、nullifier、承諾樹、程式摘要 hc、輸入承諾 H_IN 及 H_PUB、捆綁摘要、授權承諾
secp256k1 ECDSA + keccak256low-s 簽名,以太坊式 20 字節守護者地址,mu = keccak256(keccak256(body))橋守護者證明,使同一密鑰可用於 EVM 合約、Solana 程式及 Rand;在 Rand 上,每份證明另需下文的 Dilithium2 法定人數
bech32m(BIP-350)人類可讀部分 rpl,32 字節載荷,52 個資料字元 + 6 個校驗字元 = 62RPL 代幣資產 id 的文字形式 rpl1…
Plonky3 批量 STARKGoldilocks p = 2⁶⁴ − 2³² + 1,隱藏式 FRI,膨脹因子 8,折疊元數 8,80 次查詢,20 位工作量證明每個捆綁證明、授權證明及調用證明;捆綁證明及其授權證明以所屬交易的八個綁定字作為公開輸入段

白皮書的目標參數在若干方面有別於實現實際運行的參數(例如白皮書的 384 位元轉錄雜湊,相對 zkVM 的 Poseidon2 轉錄)。本文檔頁面描述的是程式碼。

橋上的抗量子聯署

橋的守護者證明採用 secp256k1 ECDSA,量子對手可偽造之。自 chain 14 起,每個 BridgeAttest(存款與守護者集輪換皆然)還必須附上同一批守護者就同一摘要所作的 Dilithium2 簽名法定人數:

M = "rand-bridge-pq-cosign-1" || rand_chain_id (u64 BE) || mu        // 63 bytes, deterministic signing

其中 mu = keccak256(keccak256(body)) 為 ECDSA 法定人數所簽署者。M 內的 Rand chain id 使 testnet 的聯署無法在另一條 Rand 鏈上通過驗證,即使守護者密鑰被重用亦然。在 chain 20 及 chain 21 上,M 仍然只綁定 chain id:這是 binding_domain 沒有移到創世雜湊之後的唯一一條簽署訊息,因為簽署它的守護者守護程序位於另一個程式庫。以同一 chain id 及同一守護者集複製出來的鏈,會接受其存款的聯署;守護者集索引不在 M 之內,故聯署在 ECDSA 集輪換後依然有效。該操作的 pq_signatures 欄位為 PqSignature { index: u8, signature } 的列表,檢查次序先廉後貴:quorum(n) ≤ len ≤ n(PqNoQuorum),索引嚴格遞增(PqIndexOrder),每個索引均小於 n(PqIndexOutOfRange),每個簽名恰為 2,420 字節(PqBadSignatureLength),最後每個簽名均須通過 pq_guardians[index] 驗證(PqBadSignature)。抗量子簽署者不必與 ECDSA 簽署者相同;兩個法定人數各自獨立計算。該欄位位於交易綁定之內,故不能在副本上被剝除或替換。

抗量子集為創世的 bridge.pq_guardians:chain 21 上為八把 1,312 字節的密鑰,與 chain 15 至 20 相同,與創世 ECDSA 集(守護者集 1)按索引對齊(chain 14 為六把,與集 0 對齊)。ECDSA 守護者集的輪換從不移動它。在 chain 14 上,它在鏈的整個生命週期內固定不變;自 chain 15 起,創世帶有橋的 rules_v2 群組,據此抗量子法定人數可以替換整個抗量子集(RotatePqGuardians)或暫停密鑰(RotatePauseKey),各自須按橋的 rotation_nonce 進行。Chain 20 的創世新增 bridge.rotation,chain 21 沿用:輪換必須為 V2 操作,並帶有每把新密鑰就同一訊息所作的 Dilithium2 簽名(持有證明),且於送達一日後生效,除非當前暫停密鑰將其取消(Bridge)。rand_getBridgeState 提供這些密鑰,而解碼後的 bridge_attest 會列出 pq_signers,即已簽署的索引。同一抗量子法定人數亦授權橋的治理訊息,每則均為固定的大端序佈局,載有 chain id 及一個 nonce。自 chain 20 起(創世 binding_domain: 1),各域的版本數字為 2,而 32 字節的創世雜湊位於域與 chain id 之間;chain 14 至 19 則使用 -1 形式:

訊息域(chain 14–19 / chain 20 及 21)簽署者
M_pauserand-bridge-pause-1 / -2創世的唯一暫停密鑰(Dilithium2),只能暫停,不能解除暫停
M_unpauserand-bridge-pq-unpause-1 / -2抗量子守護者法定人數
M_listrand-bridge-pq-list-1 / -2抗量子守護者法定人數(ListBacking)
M_registerrand-bridge-pq-register-1 / -2抗量子守護者法定人數(RegisterBridgedToken)
M_rotate_pqrand-bridge-pq-rotate-pq-1 / -2當前抗量子集的法定人數(RotatePqGuardians,rules_v2 鏈);自 chain 20 起每把新密鑰亦須簽署,作為其持有證明
M_rotate_pauserand-bridge-pq-rotate-pause-1 / -2當前抗量子集的法定人數(RotatePauseKey,rules_v2 鏈);自 chain 20 起新密鑰亦須簽署
M_cancelrand-bridge-cancel-rotation-1 / -2,尾隨一個 kind 字節當前暫停密鑰(CancelRotation,設有 bridge.rotation 的鏈:chain 20 及 21)

生產環境中的 STARK

zkVM 處於約束集 9(chain 21;chain 18 至 20 運行集 8):九個必備表(program、cpu、memory、alu、range、nibble、poseidon2、input、public),另加 keccak、sha256 及自集 9 起的 modq 表,這三個表僅在其客戶程式調用了對應系統調用時,證明才會攜帶;各表以匯流排連接,並作為一個批量 STARK 一併證明。modq 表即 MODQ 晶片:每次 MODQ 系統調用佔一個 1,024 行的區塊(對 256 係數多項式在 Dilithium 的 q = 8,380,417 之下進行 NTT、逆 NTT、點積或乘減運算),於證明標頭中以 modq_log_height 聲明,僅由多重簽名授權客戶程式攜帶,亦是 chain 21 上每把驗證密鑰及證明編碼均須變動的原因(cpu 表增加了該系統調用的欄位)。自約束集 7 起,每個已聲明的表至少有 2⁷ 行,且每個表的 LogUp 終值均經第十七條匯流排 BLIND 盲化。證明的公開介面為 35 個域元素(pv::NUM):入口 pc、層級、八個輸出字、程式摘要 hc(8 個字)、加鹽的私有輸入承諾 H_IN(8 個)、未加鹽的公開段摘要 H_PUB(8 個),以及自約束集 8 起的已聲明 gas 上限 GAS_LIMIT。

參數正式環境備註
FRI 查詢次數80約束集 3 及 4 改為 27 次查詢的調校,已於 2026-09-12 審計後撤回:其證明強度僅餘約 42 個位元
blowup8 (log_blowup = 3)每張表的最大約束次數均固定在 8 的上限之內
摺疊元數8
工作量證明位元數20
可靠性3·80 + 20 = 260 位元(猜想值,ethSTARK);在鄰近間隙(proximity gaps)假設下可證明約 86 位元
零知識統計性:LDE 與 FRI 批量多項式均經隨機化,因此同一次運行的兩個證明並不相同自約束集 7 起,每張已聲明的表至少有 2⁷ 行,多於證明所開啟的 82 個點,而且 LogUp 終端值已加上遮蔽
層級10、12、14、16、18、20證明會披露層級,但不會披露週期數;自 fullnode v0.5.6 起,高於層級 14 的調用證明會被拒絕(CallTierTooHigh),捆綁證明固定為層級 14,認證證明固定為層級 10
證明大小上限創世區塊的 max_proof_bytes:chain 21 為 6 MiB(6,291,456),用於多重簽名認證證明;chains 17 至 20 為 4 MiB(4,194,304);chains 13 至 16 為 8 MiB;沒有此參數的創世區塊(例如 chain 12)則為 2 MiB(MAX_PROOF_BYTES)2 MiB 高於已部署 guest 所能產生的所有不含哈希表的證明,而低於含 keccak 的證明;4 MiB 則兩者皆可容納
gas每個 cpu 行 1;每個 Poseidon2 absorb 行 3;每個 SHA256 行 64;每個 KECCAK 行 192累計於 cpu 表的 GAS 欄,並證明其不超過 GAS_LIMIT;verifier 會拒絕高於 gas_max(t, k, s) = (2ᵗ − 1) + 2ᵗ⁻² + 191·(2ᵏ/32) + 63·(2ˢ/64) 的上限,不含哈希的層級 10 標頭為 1,279,層級 14 標頭則為 20,479

約束集 6 的實測大小(Apple Silicon,release 構建):不含 keccak 的正式環境證明在層級 10 為 1,298,729 位元組,在層級 12 為 1,359,978 位元組;含 keccak 的層級 10 證明為 3,198,430 位元組,超出 2 MiB 的預設值,但低於 chains 13 至 15 的 8 MiB。已淘汰的 2-in-2-out 捆綁 guest 的層級 14 證明,在 chain 8 上實測為 1,321,773 位元組,在 chain 13 上為 1,418,406 至 1,420,423 位元組。Chain 14 的 4-in-4-out 隱藏資產捆綁 guest 維持在層級 14,且不使用任何哈希表,其證明在 chain 14 上實測為 1,422,116 及 1,423,170 位元組(2026-09-20);chain 15 固定使用同一 guest(hc_bundle 不變);當時捆綁證明聲明 public_log_height 為 4,即八個綁定字的高度,節點在建立 verifier key 之前會拒絕任何其他數值。2026-09-19 在 chain 13 上製作的含 keccak 的 ERC-20 approve 調用證明(層級 16)為 3,412,405 位元組;自 fullnode v0.5.6 起,每條鏈均會拒絕該調用,因其層級為 16。

約束集 7 的遮蔽欄與表行下限,使不含哈希的證明增加約 5%:據 fullnode 於 2026-09-28 的實測,fib 在層級 10 為 1,367,688 位元組,在層級 12 為 1,424,299 位元組,含 keccak 的層級 10 證明為 3,283,898 位元組,層級 14 的隱藏資產捆綁證明為 1,498,821(guest v1)及 1,497,156(guest v2)。自此捆綁證明聲明 public_log_height 為 7。約束集 8 增加不足 1%。2026-09-30 在 chain 18 上的實測(Apple Silicon):認證證明為 1,364,940 至 1,375,371 位元組(層級 10),捆綁證明為 1,494,151 至 1,504,260 位元組(層級 14,guest v3),調用證明則在層級 14 不含哈希表時為 1,498,589 位元組,含 SHA-256 表時為 1,911,152 位元組,在層級 12 含 Keccak 表時為 3,346,865 位元組。全部均在 chains 18 至 20 的 4 MiB 上限之內。

在 verifier key 已預熱的情況下,驗證約需 16 ms;首次建立某個 (tier, heights) 的 key 則約需 230 ms。test FRI 設定檔(16 次查詢)僅供測試套件使用,並不安全;chain 21 的創世區塊固定使用 production,一如 chain 20。Fullnode v0.6.8 並無更改任何約束:chain 20 固定使用與 chains 17 至 19 相同的 hc_bundle 及 hc_auth。Fullnode v0.8.0(chain 21)保留這兩個摘要值 —— hc_bundle 60af094a…6e3fce、hc_auth 1e4e347f…5639c1 —— 並新增第三個摘要值 hc_auth_multisig 9705f8e2f1bc8561848b29cb8efd57c37e3e39788fa58a5f03304d8019668247,即層級 18 的多重簽名認證 guest(在電路內檢查 16 個 Dilithium2 簽名中的至多 3 個;其固定的 verifier key msauth-vk-production.bin,23,754 位元組,SHA-256 68facb06…cd30,由每個 validator 於啟動時載入);在約束集 9 之下,雖然摘要值不變,每個 verifier key 均為全新。

可重現的哈希構造

附帶域的 BLAKE3:blake3(domain || data),域字串與資料之間不加分隔符。

綁定域。 Chain 20 的創世區塊設定了 binding_domain: 1(fullnode v0.6.8,審計 v6 BIND-1),chain 21 沿用此設定。在這樣的鏈上,每一個原本只綁定 chain id 的證明綁定與已簽署的操作訊息,現在也會綁定創世哈希:域的版本號加一,而 32 位元組的創世哈希置於原像之首,排在 chain id 之前。如此,為某一條鏈製作的證明或簽名,無法在任何其他鏈上通過驗證,即使該鏈沿用相同的 chain id 與密鑰(如重新切鏈時)亦然。綁定字是證明的公開輸入,因此沒有任何 guest 或 verifier key 更改。該表列出兩種形式;chains 14 至 19 逐位元組使用第一種。先前已綁定創世區塊且不變的有:投票與提案(自 consensus_domain: 1 起)、v2 Registration,以及 AdmitValidator 投票。不更動的有:bridge 的鑄造聯署簽名(見上文)。錢包須使用 v0.6.8 才能在 chain 20 上發送,須使用 v0.8.0 才能在 chain 21 上發送,並按 chain id 而非節點的聲稱來決定採用何種形式;rand_getLimits.binding_domain 會報告此值。

值構造
transparent addressblake3("rand-address" || dilithium2_public_key),base58
交易 idblake3("rand-txid-3" || bincode(view)),其中 view 為該交易,但捆包的證明字節以 blake3(proof) 取代,其授權證明以 blake3(auth_proof) 取代;auth_commit 原樣納入。至 chain 16 為止,域為 rand-txid-2,不含授權欄位
交易綁定chain 14 至 19:blake3("rand-tx-bind-1" || bincode(chain_id, bundle', action'));自 chain 20 起:blake3("rand-tx-bind-2" || bincode(genesis_hash, chain_id, bundle', action'))。結果為八個小端序 u32 字,其中 ' 表示將 bundle.proof、bundle.auth_proof 及 Aggregate 的 proof 以空向量取代;bincode 使用定長小端序整數。每個捆包證明與授權證明,均針對這些字生成並據此驗證
調用綁定blake3("rand-call-bind-1" || …);自 chain 20 起為 rand-call-bind-2,並將 genesis 哈希置於最前:構造與交易綁定相同,但 Call(或 Invoke)自身的 proof 亦予清空。在 hardening_v6 genesis 上(例如 chain 20 及 21),調用證明的公開段為程式於部署時確定的公開字,後接這八個字;Invoke 的則於其後再附上其狀態轉換作為上下文字
程式 idblake3("rand-program" || base_pc as 4 LE bytes || words as 4 LE bytes each)
p2p 身份由 blake3("rand-p2p-identity" || seed) 導出的 ed25519 密鑰
橋接資產 id(按每個支持資產)blake3("rand-bridge-asset" || token_chain as 2 BE bytes || token_address (32 bytes)) — rand_bridgeAssetId 負責計算,rand_getAssets 按每個支持資產行輸出;它在網絡傳輸中標識來源幣種,而非代幣本身
RPL 代幣資產 id,原生blake3("rand-rpl-asset" || bincode(name, symbol, decimals, authority, initial: Option<InitialMint>, salt)),salt 為創建者自選的 32 字節;以十六進制及 rpl1… 形式顯示
RPL 代幣資產 id,橋接blake3("rand-rpl-asset" || bincode(name, symbol, BRIDGE_DECIMALS, salt)) — 不基於 (chain, token) 配對,因為同一橋接代幣可跨越多個支持資產
橋接存款盲化r = blake3("rand-deposit-r-1" || mu),為 BridgeAttest 的准入所接受的唯一 r(否則返回 WrongDepositBlinding)
橋接手續費票據盲化(自 chain 20 起)存款的手續費票據:r = blake3("rand-bridge-fee-r-1" || mu);銷毀的手續費票據:r = blake3("rand-bridge-burn-fee-r-1" || txid);兩者均讀作八個小端序字。這些票據沒有信封:所有欄位均為公開,擁有者為 genesis 中的 bridge.fees.recipient
橋接接收者blake3("rand-shielded-recipient" || pk_bytes || kem_ek),針對完整的 shielded 地址
faucet Mint 消息blake3("rand-mint-2" || bincode(chain_id, cm, pk, time, r, envelope, amount));自 chain 20 起為 blake3("rand-mint-3" || bincode(genesis_hash, chain_id, cm, pk, time, r, envelope, amount))
TokenMint、SetAuthority 消息blake3("rand-rpl-mint-1" or "rand-rpl-authority-1", chain_id || asset_id || nonce || body);mint 的 body 包含 blake3(bincode(envelope))。自 chain 20 起為 rand-rpl-mint-2 及 rand-rpl-authority-2,並將 genesis 哈希置於最前
Registration 消息在具備 staking.registration_v2 或 binding_domain: 1 的 genesis 上(例如 chain 20 及 21;該處拒絕 v1 註冊):blake3("rand-register-2" || bincode(genesis_hash, chain_id, validator, payout));其他情況為 blake3("rand-register" || bincode(chain_id, payout))
AdmitValidator 投票(自 chain 20 起)blake3("rand-admit-validator-1" || genesis_hash || candidate_address),由每位投票的 validator 簽署
Unbond 消息blake3("rand-unbond" || bincode(chain_id, validator, amount, nonce));自 chain 20 起為 blake3("rand-unbond-2" || bincode(genesis_hash, chain_id, validator, amount, nonce))
Withdraw 消息blake3("rand-withdraw" || bincode(chain_id, validator, amount, nonce, time, r, envelope));自 chain 20 起為 rand-withdraw-2,並將 genesis 哈希置於最前
Merkle 節點(狀態樹)blake3("rand-merkle-node" || left || right)
代幣註冊表葉blake3("rand-token-leaf-1" || bincode(TokenInfo)),按索引順序,置於 tokens_root 之下
狀態根自 chain 20 起,為 blake3("rand-state-admitted-1" || inner || admitted_root),包裹 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),其中 program_state_root = blake3("rand-program-state-1" || cells_root || vaults_root)(RPL-2),兩個 faucet 計數器與兩個即時價格各為 8 個大端序字節,外層包裹則承諾已准入集合(staking.admission_by_vote)。chain 21 的 genesis 各節於其外再添加各自的包裹:多重簽名賬戶使用 rand-state-multisig-1,validator 投票決定的 RAND 價格使用 rand-state-price-1,與永續合約狀態並列;確切的分層見 fullnode 的 docs/multisig.md、docs/fees.md 及 docs/perps.md。chain 19 的為 blake3("rand-state-7" || …),涵蓋相同欄位直至 byte_price(genesis 的 staking 節會將該三者附於 tokens_root 之後並使用 rand-state-5,如 chain 15 至 17;genesis 的 gas.dynamic 節會附加兩個價格,並將域移至 rand-state-7);chain 14 為涵蓋前六項的 rand-state-4;在沒有 bridge、tokens 或 aggregation 節的 chain 上,為涵蓋前四項的 rand-state-2(Consensus)

帶域標籤的 Poseidon2:H(domain, msg) = sponge_hash([domain, msg...]),標籤為首個被吸收的字,每個字為一個 Goldilocks 元素,4 元素的摘要拆分為八個 u32 字(每個元素先低半部,後高半部)。域標籤如下:

標籤值構造
NK1查看密鑰 nk = H(1, sk)
PK2票據公開值 pk = H(2, nk)
NF3作廢符 H(3, nk || cm)
CM4票據承諾 H(4, pk(8) || from(8) || amount_lo || amount_hi || asset || time || r(8)) — 28 個字
OVK、KEM_SEED5、6出站查看密鑰與 ML-KEM 種子,經由計數器模式的寬哈希 [domain, nk, counter] 得出
NODE7樹節點 H(7, left || right);空葉全為零
HC8程式摘要;標籤、base_pc 與 len 位於首次置換的容量通道,隨後字以每塊四個的方式吸收
OUT9轉帳 guest 的輸出摘要
IN10H_IN:容量標頭 [10, n_in, 0],其後為 4 個字的鹽,再後為輸入
BUNDLE11已停用的 2 入 2 出捆包的摘要,涵蓋 47 個公開字;現時已無 chain 固定使用該 guest
隱藏捆包64隱藏資產捆包的摘要:在 chain 14 至 16 上涵蓋 81 個字,依次為錨點、四個作廢符、四個承諾、fee、burn_a、burn_r(各兩個字)、burn_asset、time,最後為污點字。在 chain 17 至 20(捆包 guest v3)上為 89 個字:授權承諾 c 的八個字緊接於污點字之前。私有資產 A 不在其中。該標籤僅限節點本地使用,與引入的標籤 1 至 15 保持距離
AUTH65授權承諾 c = H(65, nk || salt),16 個字,每個捆包使用全新的 256 位鹽;由捆包證明在其摘要內發布,並由授權證明作為其八個輸出字發布,同時由捆包以 auth_commit 攜帶(chain 17 至 20)。與 64 一樣僅限節點本地使用
PUB15H_PUB:標頭 [15, n_pub, 0],無鹽;對於程式,自 chain 20 起這些字於部署時固定(至多 32,768 個),每次調用的段為這些字後接調用綁定的八個字,且調用是針對該段的摘要進行檢查;對於捆包證明與授權證明,該段為交易的八個綁定字;沒有 max_program_public_words 的 genesis 只接受空段

hc、H_IN 與 H_PUB 並非普通的以消息為前綴的海綿:標頭置於容量之中,使 cpu 表中的摘要行每次置換恰好吸收四個字。請使用 vendored crate(randprotocol_zkvm::hash::{input_digest, public_digest}、isa::Program::digest)重現,而不要手動計算。

普通海綿不作填充,因此在首個塊內 [a] 與 [a, 0] 的哈希相同。上述每種構造均在各自標籤之下對定長消息作哈希。對於長度可變的數據,約束集 7 加入了長度綁定海綿(hash::sponge_hash_len,即 POSEIDON2_LEN syscall):它由狀態 [0, 0, 0, 0, n, 0, 0, 0] 開始,其中 n 為字數,並至少置換一次。它是對相同字的另一種哈希,鏈上沒有任何票據、作廢符、根或摘要使用它。

有兩點須牢記:hc 具綁定性但不具隱藏性(無鹽,因此可以確認被猜測的程式,同一程式的兩次部署亦可被關聯);而 H_IN 既具綁定性亦具隱藏性(每次證明使用全新的 128 位鹽),因此公開 H_IN 在鹽的持有者將其打開之前,不會洩露任何關於輸入的信息。

Key derivations

密鑰來源
Dilithium2 密鑰對(節點)由 32 字節種子確定性生成
libp2p ed25519(節點)blake3("rand-p2p-identity" || seed)
查看密鑰、pk、ovk、ML-KEM 密鑰對(錢包)由花費密鑰按上表以 Poseidon2 導出;ML-KEM 密鑰對為 MlKem768::from_seed(kem_seed)

papers page 上的論文載有安全性論證:後量子密碼學的選擇、FRI 可靠性核算及保留 80 次查詢的原因,以及軌跡長度的上界。

最後一次對照 fullnode 提交 c0878c3f(chain 21)核實的日期為 2026-10-12。 如代碼與本頁內容有出入,以代碼為準;請告知我們。