使用本頁可與橋接整合:在來源鏈上建立存款、在 Rand 上提交見證、將橋接資產銷毀並轉回來源鏈,以及讀取橋接的公開狀態。鏈 21(現行 testnet,自 2026-10-12 10:31 UTC 起運行,全節點 v0.8.0)原樣沿用鏈 20 的 bridge 部分:八名守護者,守護者集合索引自 1 起;八名後量子守護者;一把暫停密鑰;Ethereum、BSC、Tron 與 Solana 的發出者(前三者為 2026-09-30 重新部署的端點);rules-v2 規則組,其全域鑄造上限為每滾動 24 小時 4,000 zUSD;入站重放下限;以及 v0.6.8(鏈 20)新增的兩組規則:每次鑄造與每次銷毀均收取 10 bps 的費用,以 zUSD 收取;以及輪換規則,使後量子集合或暫停密鑰的輪換須證明持有新密鑰,並等待一天。與鏈 14 不同,其創世檔列出 zUSD 及全部七項支持資產,並沿用自鏈 14 起歷次切換相繼承接下來的託管資產(自鏈 14 沿用)。rand_getAssets 與瀏覽器的 /bridge/assets 會給出各項支持資產當前的 locked。
流程
source chain (Ethereum / BSC / Tron / Solana) Rand
┌────────────────────────────────┐ ┌────────────────────────────────┐
│ lock tokens, emit │ guardians observe, │ BridgeAttest transaction │
│ (amount, token, to, fee) │ sign mu = keccak²(body) │ admission → one deposit note │
└────────────────────────────────┘ threshold n·2/3 + 1 │ computed by the chain │
▲ + Dilithium2 co-signers │ │
release after guardian guardian committee │ BridgeBurn transaction │
signatures on the burn ◄───── secp256k1 keys ◄───────── │ one bundle: slots 0–1 burn the │
message read the burn log │ asset, 2–3 pay the RAND fee; │
│ emits a sequenced burn message │
└────────────────────────────────┘
入站:價值鎖定於來源鏈,守護者見證,任何人將見證提交至 Rand,賬本隨即附加一張給收款方的存款票據——該票據的 asset 字為所橋接代幣的註冊表索引。出站:一筆 Rand 交易銷毀該資產的票據並發出一則消息;守護者見證該消息;來源鏈合約放行。Rand 從不驗證來源鏈的區塊頭或狀態證明:守護者委員會的簽名即為全部信任模型。
信任模型與鏈 ID
橋接本地的鏈 ID,與合約(bridge-codec)共用:
| 鏈 | id |
|---|---|
| Rand | 1 |
| Ethereum | 2 |
| BSC | 3 |
| Tron | 4 |
| Solana | 5 |
守護者是一個由 secp256k1 密鑰組成的委員會;守護者的身份是 keccak256(uncompressed_pubkey[1..]) 的最後 20 位元組,即 Ethereum 的地址推導方式,因此同一把密鑰可用於 EVM 合約、Solana 程式與 Rand。大小為 n 的集合,法定人數為 n·2/3 + 1。每個簽名必須為 low-s(s ≤ n/2),杜絕可塑性。守護者所簽的摘要為 mu = keccak256(keccak256(body_bytes))。守護者集合的輪換是來自治理發出者 (chain 1, keccak256("rand-bridge-governance")) 的一則見證,必須帶有 new_index == current + 1,並須由當前集合而非已被取代的集合簽署;退出的集合為在途轉賬保留 86,400 秒的寬限期。(此處指 ECDSA 集合。後量子集合與暫停密鑰以各自的操作輪換,自鏈 20 起須等待一天的延遲:下文。)若有 n·2/3 + 1 名守護者串謀,便可鑄造任意價值;橋接加固界定了其數額與速度的上限,但並不消除此風險。
交易綁定。 Rand 交易不帶簽名:銷毀由其捆包的 STARK 證明授權。自鏈 14 起,每個捆包證明均針對 Transaction::binding 生成並據以驗證——它是整筆交易(鏈 id、單一捆包及其四個信封、動作)的雜湊,僅將證明位元組清空。自鏈 17 起,捆包帶有兩個證明,即捆包證明與花費授權證明:綁定將兩者一併清空,保留捆包的 auth_commit,並且兩者均針對它驗證。待處理銷毀的副本若更改了 to、relayer_fee 或 (to_chain, token),或見證交易的副本若更改了其 time 或信封,則證明驗證失敗(TxError::InvalidBundleProof)。自鏈 20 起,綁定還帶有創世雜湊(創世 binding_domain: 1:rand-tx-bind-2,覆蓋創世雜湊、鏈 id、捆包與動作),因此為另一條使用相同鏈 id 的鏈生成的證明同樣無法通過驗證。錢包與中繼者必須運行為其所提交的鏈建置的二進位檔:鏈 21 為 v0.8.0(鏈 20 為 v0.6.8,鏈 18 與 19 為 v0.6.7);較舊的 rand 所產生的證明與簽名,鏈 21 不予接受——而在鏈 21 上,舊版錢包的證明甚至無法解碼,因為約束集 9 更改了所有驗證密鑰與證明編碼。
守護者與中繼者的守護進程不屬於全節點;全節點僅帶有共用的編解碼器與接收部分。
傳輸格式
所有整數均為大端序;傳輸版本為 1。
見證信封
| 偏移 | 長度 | 欄位 |
|---|---|---|
| 0 | 1 | version = 1 |
| 1 | 4 | guardian_set_index |
| 5 | 1 | n_sigs |
| 6 | 66·n_sigs | 簽名:index (1)、r (32)、s (32)、v (1) |
6 + 66·n_sigs | … | body |
主體標頭——51 位元組,其後為載荷
| 偏移 | 長度 | 欄位 |
|---|---|---|
| 0 | 4 | timestamp |
| 4 | 4 | nonce |
| 8 | 2 | emitter_chain |
| 10 | 32 | emitter_address |
| 42 | 8 | sequence |
| 50 | 1 | consistency_level |
| 51 | … | payload |
Transfer 載荷——id 1,133 位元組
| 偏移 | 長度 | 欄位 |
|---|---|---|
| 0 | 1 | id = 1 |
| 1 | 32 | amount(u256;Rand 使用低 128 位,且存款還須能放入票據的 u64) |
| 33 | 32 | token_address |
| 65 | 2 | token_chain |
| 67 | 32 | to——收款方雜湊,見下文 |
| 99 | 2 | to_chain |
| 101 | 32 | fee (u256):amount 中屬於中繼者的部分 |
GuardianSetUpgrade 載荷——id 2:id (1)、new_index (4)、n (1),其後為 n 個 20 位元組的密鑰。
Ethereum、BSC 與 Tron 的地址為 20 位元組,在 32 位元組的欄位中左側以 12 個零位元組填充;Solana 地址則填滿該欄位。Transfer 必須來自 emitter_chain 所登記的該鏈發出者,且 token_chain 必須等於發出鏈。見證至多 16 KiB。橋接加固的各項改動均未更動傳輸格式、編解碼器或已部署的來源鏈端點:後量子聯署與治理消息隨 Rand 交易而行,而不在見證之中。
32 位元組的收款方
屏蔽地址為 1,216 位元組,而傳輸格式只有 32 位元組的空間。to 欄位攜帶其雜湊:
to = blake3("rand-shielded-recipient" || pk_bytes || kem_ek) // ShieldedAddress::recipient_hash
存款人在來源鏈上指明該雜湊,守護者對其簽名,提交者將完整地址放入 BridgeAttest 動作,賬本重新計算雜湊並拒絕不符者——否則提交者便可選擇由誰收取他人的存款。來源鏈前端必須接受此形式;錢包會將其列印出來。鏈 11 曾短暫將該欄位直接設為接收方 id;該地址形式已隨鏈 12 還原(賬戶與地址)。
一種代幣,多重支持:zUSD
資產註冊表已不再屬於橋接。它已移入賬本層級的 RPL 代幣註冊表,由原生代幣與橋接代幣共用,鏈的狀態根以 tokens_root 對其作出承諾。橋接代幣是一個註冊表條目,其鑄造權限為 Bridge { backings },不再對應單一的 (chain, token) 配對。首個此類代幣 zUSD 由鎖定於四條鏈上的 USDT 與 USDC 支持——Ethereum、Binance Smart Chain 與 Solana 兩種幣皆有,Tron 僅有 USDT(Circle 已終止 Tron 上的 USDC):
chain token (32-byte wire form) coin decimals
2 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7 USDT 6
2 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 USDC 6
3 00000000000000000000000055d398326f99059ff775485246999027b3197955 USDT 18
3 0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d USDC 18
4 000000000000000000000000a614f803b6fd780986a42c78ec9c7f77e6ded13c USDT 6
5 ce010e60afedb22717bd63192f54145a3f965a33bb82d2c7029eb2ce1e208264 USDT 6
5 c6fa7af3bedbad3a3d65f36aabc97431b1bbe4c2d2f6e0e47ca60203452f5d61 USDC 6
在鏈 21 上,zUSD 的索引為 1,rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx,名稱為 “Shielded USD”,8 位小數,列於創世檔中(鏈 21 的創世檔僅列出此一種代幣),與鏈 15 至 20 相同,沿用其在鏈 14 上的名稱、符號與 salt,因此其資產 id(32e5ab28c782c663e14da2650a3feb12f16a12db85599f4f62dc169d26f37b1f)與 rpl1… id 原樣承襲(瀏覽器:GET /tokens/1)。在鏈 14 上,它於高度 256 由一筆 register_bridged_token 交易註冊。
Backing { chain: u16, token: [u8; 32], decimals: u8, locked: u64, minted_today: u64, mint_day: u32 }
一個 (chain, token) 配對在整個註冊表中至多支持一種代幣(TokenError::BackingTaken);一種代幣有 1 至 32 項支持資產;decimals 是來源幣自身的小數位數,0 至 18,絕非橋接代幣的 8。合併支持是明言的風險:這七種幣可按面值與 zUSD 相互兌換,因此其中任何一種脫鉤都會攤薄每一位 zUSD 持有人,且 Rand 一側並無對單一支持資產佔比的上限。
zUSD 是一籃子資產。 持有人承擔的是每一項已列入的支持資產的風險,而非其所存入那種幣的風險:一個 zUSD 是對資金池的債權,可由任何 locked 足夠的支持資產兌付。沒有任何機制為支持資產定價。鎖定 1 個單位的任何已列入代幣,即鑄造 1 個 zUSD;而銷毀可指定任何 locked 足以覆蓋的支持資產,因此一種已脫鉤的代幣可按面值存入,再將 zUSD 銷毀以換取仍然維持掛鈎的代幣,直至穩健的支持資產被抽空。損失受滾動鑄造窗口及實際鎖定的託管資產所限:在鏈 20 及 21 上,任何 24 小時內所有支持資產合計最多可鑄造 4,000 zUSD,每項支持資產最多 100,000(rules v2),而經由穩健支持資產流出的數額,不會超過該支持資產所持有的數額。窗口限制的是速率,而非總額:它爭取到暫停鑄造的時間,暫停後弱勢代幣的新存款即告停止,而銷毀仍然開放。沒有按支持資產設定的贖回限額,也沒有按支持資產設定的暫停。在鏈 14 上,於 rules v2 之前,來源端點自身的暫停者及按代幣設定的速率上限是僅有的限制。
不變式:total_supply == Σ backings.locked。 TokenRegistry::lock(BridgeAttest)在一次調用中,將已證明的數額加入該支持資產的 locked 及代幣的 total_supply;TokenRegistry::release(BridgeBurn)則從兩者中減去所釋放的數額。除此之外沒有任何操作會寫入這兩個欄位,且代幣葉節點把每項支持資產的 locked 承諾進 tokens_root,因此兩個節點若對其中一項有分歧,便會在狀態根上分叉。來源端點在鎖定時不收取費用,並在釋放時扣除全部已證明的數額,因此每項支持資產的 locked 等於該端點的託管量,惟在途訊息除外。自鏈 20 起的費用並不破壞這一點:費用是一張仍屬已發行且有支持的 zUSD note,因此存款鎖定的是總額,而銷毀僅釋放 amount − fee。在鏈 20 切換時,端點自身在釋放時收取的 10 bps USDT 費用已設為 0;費用現於 Rand 上收取。
在線路上,數額以 8 位小數為單位,不論來源代幣本身的小數位數為何:從 Ethereum 存入 1 USDT(6 位小數)會鎖定為 100_000_000 個單位。只有索引 0 的 RAND 採用本鏈的九位小數。
代幣必須在其首次存款之前列入。 現已不再有首次出現即登記的做法:若證明所指明的 (chain, token) 無人列入,則以 BridgeError::UnlistedToken(token … of chain … is not listed on this chain)拒絕。資金會繼續留在來源端點的託管之中,直至後量子守護者法定人數將該代幣列入(Listing after genesis)。
asset_id = blake3("rand-bridge-asset" || token_chain (2 bytes BE) || token_address (32 bytes))
rand_bridgeAssetId(token_chain, token_address) 仍可在任何鏈上計算此值,而且 Transfer 負載中的 (token_chain, token_address) 即解析為此值,但它已不再是登記表的鍵。note 與錢包所攜帶的是代幣的索引,一個緊湊的 u32:索引 0 為 RAND,且從不在登記表中。rand_getAssets 每項支持資產一行,同一代幣的所有行共用同一索引:
[{ "index": 1, "chain": 2, "token": "000000000000000000000000dac17f…", "asset_id": "…", "decimals": 6,
"locked": "0", "mint_cap_per_day": "10000000000000", "minted_today": "0", "mint_day": 20716 }]
locked、mint_cap_per_day 及 minted_today 是以 8 位小數為單位的十進制字串,一如自鏈 14 起 RPC 所提供的每個 u64 數額;index、chain、decimals 及 mint_day 仍為數字。代幣層級的方法——rand_getTokens、rand_getToken、rand_getTokenSupply——把橋接代幣作為一行返回,並附帶其所有支持資產(RPL tokens)。瀏覽器的 GET /bridge/tokens 是橋接所接受的代幣的靜態允許清單。
入站:BridgeAttest
Action::BridgeAttest { attestation: Vec<u8>, recipient: ShieldedAddress, r: Word8, time: u32,
asset: u32, envelope: Envelope, pq_signatures: Vec<PqSignature> }
PqSignature { index: u8, signature: Vec<u8> } // Dilithium2, 2,420 bytes
由一筆普通的 shielded 交易攜帶,其唯一的隱藏資產捆綁僅支付 0.001 RAND 的基本費用,別無其他:其中繼者是替一位尚未持有 RAND 的存款人支付。存款 note { pk: recipient.pk, from: 0, amount, asset: <index>, time, r } 由鏈根據守護者所簽署的數額計算,而非由提交者計算,因此中繼者無法虛增或改道鑄造;其承諾是交易不在線路上攜帶的唯一一片葉節點。自鏈 20 起,該 note 的 amount 為總額減去鑄造費用,鏈並會向國庫追加第二張 note,即費用(Fees on mint and burn)。
盲化因子是推導出來的,而非自行選取。 r 必須為
r = blake3("rand-deposit-r-1" || mu) // read as eight little-endian words; mu = keccak256(keccak256(body))
即守護者法定人數所簽署的摘要;否則為 BridgeError::WrongDepositBlinding,並在進行任何簽名工作之前拒絕。該欄位仍保留在線路上——錢包的公開欄位重建會從中讀取——它只是受到約束,且此規則同樣涵蓋輪換的證明。在此之前,任何看到中繼者待處理交易的人,均可用自行選取的盲化因子提交同一份證明:接收者仍會得到一張 note,但中繼者的交易在其付出證明成本之後即告失效。固定 r 之後,同一份證明在同一 time 的兩名提交者所指明的是同一張 note,資金池會在承諾上將兩者判為衝突。
time 與 asset 是存款人的兩項預測,其目的是讓信封可在交易存在之前先行封裝。time 受限於與捆綁相同的窗口(自鏈 20 起為 1,024 個區塊,取自創世的 proof_window_blocks;之前為 256),且刻意不作推導:沒有任何規則能給出一個所有提交者都同意的 time,因此搶先交易者仍可在窗口內選取另一個 time——即同一接收者、同一數額、同一資產的另一張 note,接收者的錢包以同樣方式找到它——而兩次提交則改為在證明摘要上發生碰撞。asset 必須等於登記表已給予 (chain, token) 的索引,否則為 TxError::AttestAssetMismatch。
Transfer 負載的 fee 會被攜帶但不支付給任何人:沒有可供支付的提交者身份,因此存款為總額,僅在創世設有鑄造費用的鏈上(鏈 20 及 21)減去鏈自身的鑄造費用。重放保護依靠摘要:每個已被使用的 mu 均進入橋的 spent 集合,而 mempool 會拒絕第二名中繼者競逐同一份證明。存款亦受該支持資產的鑄造上限所限,自鏈 20 起亦受全域上限所限,並在鑄造暫停時被拒絕(B1、rules v2)。兩項上限均以總額計算。在創世設有重放下限的鏈上(包括鏈 20 及 21),若轉帳的 sequence 低於其來源鏈的下限,則在檢查任何簽名之前以 BelowReplayFloor 拒絕(Carried over from chain 14)。
rand bridge-mint <attestation hex or @file> --pq <JSON or @file> [--to rand1…] [--fee <RAND>] [--no-wait]
rand bridge-rotate <rotation hex or @file> --pq <JSON or @file> [--fee <RAND>] [--no-wait]
--pq 為必需:守護者的 Dilithium2 聯署法定人數,格式為 [{"index":0,"signature":"<4840 hex>"},…]。在進行任何證明之前,錢包會解碼該證明,對照節點的 pq_guardians 及鏈 id 檢查法定人數,檢查接收者的哈希是否與所證明的一致,並讀取已列入的索引;然後推導 r,封裝接收者的信封(在設有費用的鏈上以淨額封裝),並以自身 RAND 的一個捆綁支付。bridge-rotate 提交守護者集合的輪換(負載 2),它不存入任何款項,並拒絕任何不是將 Rand 的集合推進一步的輪換。由於存款 note 的每個欄位在該筆交易中均為公開,接收者的錢包會遍歷已提交的 bridge_attest 交易,重建以其為收款人的存款 note,無須打開任何信封——惡意中繼者可以封裝垃圾資料,但無法隱藏該 note。
出站:BridgeBurn
Transaction {
chain_id,
bundle: <hidden-asset bundle: slots 0–1 spend the token, slots 2–3 pay the RAND fee;
burn_asset = asset, burn_a = amount, burn_r = 0, fee >= BRIDGE_BURN_FEE>,
action: BridgeBurn { asset, amount, relayer_fee, to_chain, token, to }
}
自鏈 14 的隱藏資產捆綁起,一次銷毀為一個捆綁(此前為兩個):槽 0–1 證明銷毀者擁有總和不少於 amount 的該資產 note,其中 burn_a 為離開資金池的價值;槽 2–3 以 RAND 支付費用。費用為 BRIDGE_BURN_FEE,即 0.01 RAND,足以涵蓋該捆綁的基本費用。relayer_fee 是 amount 的一部分(fee ≤ amount),由目標鏈上的釋放合約劃出,並非額外收費,因此 burn_a 恰好等於 amount。自鏈 20 起,鏈另會把 amount 的 10 bps 作為銷毀費用,以 zUSD note 的形式歸入國庫,而釋放額為 amount − fee;中繼者的部分必須包含在該釋放額之內(Fees on mint and burn)。
銷毀須指明其代幣。 (to_chain, token) 必須是被銷毀資產的某項支持資產(否則為 TokenError::NotABacking),並在捆綁的證明之前的動作步驟檢查兩項規則:
- 釋放單位。 來源小數位數
d < 8的支持資產,以10^(8−d)為單位釋放(6 位小數的代幣為 100;18 位小數的為 1)。釋放數額及relayer_fee均必須是其整數倍,否則為TokenError::NotReleasable(… is not a multiple of the release unit …):低於來源代幣最小單位的零頭會被困在託管之中。 - 該支持資產自身的託管。 釋放數額須
≤ locked(該支持資產的),否則為TokenError::InsufficientBacking(only … is locked in that backing, not the … asked for)。代幣的總供應量或許足以覆蓋該釋放;但必須足夠的是這一項支持資產的託管。
在沒有費用的鏈上,釋放數額為 amount;在鏈 20 及 21 上則為 amount − fee。
to 必須具有正確的形狀(在鏈 2、3 及 4 上為補零的 20 字節;絕不可全為零)。賬本在嚴格遞增的 burn_sequence 下記錄一筆 BridgeBurnRecord,並在發送者槽中放入交易哈希,守護者讀取銷毀日誌:
→ {"method":"rand_getBridgeBurn","params":[13]}
← { "sequence": 13, "amount": "99900000", "fee": "99900", "release_amount": "99800100",
"body_hex": "…", "digest": "a4bc1c7d…63f4", "tx": "ceb9e3c2…0be7", "height": 2899 }
body_hex 是外發訊息的原樣內容,守護者必須按此進行雜湊及簽署;其 Transfer 金額即 release_amount。上述紀錄是 chain 20 的首宗銷毀:在區塊高度 2,899 向 BSC USDT 銷毀 0.999 zUSD,其中 0.000999 撥入金庫,0.998001 已釋出。
rand bridge-burn <ASSET> <AMOUNT> <TO_CHAIN> <TOKEN> <TO> [--relayer-fee N] [--fee <RAND>] [--no-wait] [--yes]
rand bridge-message <SEQUENCE> # one outbound message, verbatim, for a guardian to sign
錢包會先檢查——根據對橋接狀態及代幣登記冊的一次讀取,並在任何證明之前——該鏈設有橋接、ASSET 在登記冊內、TO_CHAIN 上的 TOKEN 為其提供支持且鎖定量至少為 AMOUNT,以及 AMOUNT 與中繼者費用均為整數釋出單位。在設有費用的鏈上,錢包隨後會列出橋接費用及將會釋出的金額,並在證明前詢問確認(--yes 可略過此詢問)。一次銷毀隨後會證明一個捆綁包:在手提電腦上約需 100 秒,證明約 1.5 MB;並且與自 chain 17 起的每個捆綁包一樣,旁附一份支出授權證明(數秒,約 1.37 MB)。
鑄造與銷毀的費用
fullnode v0.6.8 新增,於 chain 20 設定,並由創世群組原樣沿用至 chain 21
"bridge": { …, "fees": { "mint_bps": 10, "burn_bps": 10, "recipient": "rand1…" } }
鏈會對每一次橋接鑄造及每一次橋接銷毀收取費用,以被橋接的代幣計,在 Rand 上以屏蔽 note 的形式付予金庫地址 recipient。每項費率至多為 100 bps(1 %);在 chain 20 及 chain 21 上兩者均為 10 bps,即 0.1 %。費用為 ⌊amount · bps / 10⁴⌋,並向下取整至支持資產的整數釋出單位(10^(8 − source decimals):6 位小數的 USDT 為 100 個單位,18 位小數的幣種為 1 個單位),因此費用與餘額均為整數單位,而取整後為零的費用不會產生 note(ledger/bridge_notes.rs、bridge_fee)。
存入(BridgeAttest),總額為 g | 銷毀(BridgeBurn),數額為 amount | |
|---|---|---|
| 費用 | ⌊g · mint_bps / 10⁴⌋,向下取整至釋出單位 | ⌊amount · burn_bps / 10⁴⌋,向下取整至釋出單位 |
| 用戶一方 | 一個 g − fee 的存入 note | 銷毀 amount(burn_a == amount,客戶端程式無找贖);外發內容證明 release_amount = amount − fee,端點準確釋出該數額 |
| 金庫的 note | fee,盲化因子 blake3("rand-bridge-fee-r-1" ‖ mu),取存入的 time 及資產 | fee,盲化因子 blake3("rand-bridge-burn-fee-r-1" ‖ txid),取捆綁包的 time |
locked 與 total_supply | 增加 g | 減少 release_amount |
| 核對對象 | 針對 g 的各支持資產鑄造上限及全局鑄造上限 | 針對 release_amount 的 InsufficientBacking 及 NotReleasable;中繼者所佔部分須在其內(FeeExceedsAmount) |
兩份 note 均已發行並有支持,因此 total_supply == Σ locked == custody 依然成立:費用 note 與任何其他 note 一樣是 zUSD,其價值會繼續鎖定在源鏈上,直至有人將其銷毀。BRIDGE_BURN_FEE,即一次銷毀在其 RAND 欄位中支付的 0.01 RAND,維持不變,且與上述費用互不相干。
Chain 20 的首次往返,讀取自節點:在區塊高度 1,664 自 BSC 存入 1 zUSD(4f6e6c54…1a64),存款人獲得 0.999 zUSD,金庫獲得 0.001;在區塊高度 2,899(序號 13)向 BSC USDT 銷毀 0.999 zUSD,留下 0.000999 zUSD,並釋出 0.998001。其後(2026-10-01 讀取),BSC USDT 的支持資產持有 22.001999 zUSD,該代幣的供應量 99.001999 zUSD 等於其各支持資產之和。
金庫如何找到其 note。 費用 note 沒有信封:它的每個字詞都是公開的(數額來自交易及創世費率,資產與 time 來自交易,盲化因子由推導而得,擁有者為創世的 recipient)。地址為 recipient 的錢包,在重建存入 note 的同一次公開遍歷中重建費用 note,每次同步時讀取 rand_getBridgeState.fees 及各支持資產的小數位數一次。對費用說謊的節點,只能令某個 note 無法被找到,而不能記入任何 note。存款人的錢包以同樣方式為自己的存款估值,即總額減去費用。v0.6.8 或更新版本的錢包會這樣做;在 chain 21 上該錢包為 v0.8.0,而較舊的錢包無論如何都無法向該鏈發送。
沒有該群組時,即 chain 14 至 19,並無費用:存入按總額記賬,銷毀則釋出 amount。直至 chain 20,唯一的橋接費用是源端點在釋出時於宿主鏈上對 USDT 自行抽取的 10 bps;該費用已在 chain 20 的切換時設為 0。該群組已提交至創世哈希,並以 rand-bridge-fees-1 摺入橋接根。Fullnode docs/bridge.md §25 載有其編碼。
橋接加固
各支持資產的 locked 及 InsufficientBacking 守護的是贖回,卻不限制鑄造:帶有有效守護者法定人數的證明,會鑄造其所述的數額。三層機制填補此缺口,第四層讓代幣無須切換鏈即可上架。這些均不更動源鏈端點、證明的線路格式或 bridge-codec。
B1:每項支持資產的鑄造上限,以及鑄造暫停
創世的 tokens.mint_cap_per_day 按每項支持資產適用:chain 21 設為 10000000000000,即每項支持資產每日 100,000 zUSD,與自 chain 14 起的每條鏈相同。沒有規則 v2(chain 14)時,一日為區塊時間戳的 timestamp_ms / 86_400_000;在規則 v2 下(chain 15 至 21),同一上限按區塊時間的滾動窗口 cap_window_secs 計量,而全登記冊的全局上限——chain 20 及 chain 21 上為每 86,400 秒 4,000 zUSD——才是更嚴格的界限(規則 v2)。超出上限的存入,會在守護者簽名運算之前以 TokenError::MintCapExceeded 被拒,待窗口再有餘額時即可接納。
創世的 bridge.pause_key 是一把 Dilithium2 密鑰,有別於每一位後量子守護者。兩項無捆綁包、無費用的操作:
PauseMints { nonce, signature }——僅由暫停密鑰簽署,只能暫停。UnpauseMints { nonce, pq_signatures }——需要後量子守護者法定人數,絕不使用暫停密鑰。
兩者均攜帶並遞增 pause_nonce,故均無法重放。暫停期間,每一筆轉賬 BridgeAttest 均以 BridgeError::MintsPaused 被拒;銷毀及守護者集輪換則保持開放,因此暫停絕不會令贖回受困。在規則 v2 下(chain 15 至 20),暫停期間亦拒絕上架。暫停密鑰應存放於有別於守護者密鑰的另一部機器上。
rand bridge-pause --sig <HEX or @file> [--no-wait] # no key file and no RAND needed
rand bridge-unpause --pq <JSON or @file> [--no-wait]
暫停所涵蓋的情況是:守護者守護進程被誘騙或遭入侵而共同簽署偽造的鑄造,而持有後量子法定人數的人並未如此。它並不防範該法定人數被盜:該法定人數可以解除暫停,在一個代幣上最多上架 32 項支持資產,每項各有其每日上限,並在規則 v2 下替換後量子集及暫停密鑰。
B2:有界的區塊時間戳
橋接鏈的區塊時間戳決定守護者集的到期及鑄造上限的日期,因此領導者不得能夠使其跳躍。在設有橋接的鏈上:
- 一項有效性規則,重放時亦會檢查:
timestamp_ms ≤ parent.timestamp_ms + 60_000,否則為BlockError::TimestampLeap。連同現有的回退規則(BlockError::TimestampRewind),區塊時間只會向前推進,每個區塊至多一分鐘。 - 一項投票規則,絕非重放規則:驗證者不會為時間戳比自身時鐘超前逾 15,000 毫秒的區塊投票。
因此,橋接鏈上的每個驗證者均需要 NTP:偏差超過 15 秒,即屬有問題的領導者,亦屬有問題的投票者。鏈在停頓後追趕期間,區塊時間可每個區塊推進至多 60 秒,因此鑄造上限的一日可能比真實的一日更快翻轉——每累積一整日的落後,至多多出一日的上限。
B3:每次鑄造均附 Dilithium2 聯署
每一筆 BridgeAttest,不論是存入還是輪換,除 ECDSA 法定人數外,還必須附有對以下內容的 Dilithium2 簽名法定人數
M = "rand-bridge-pq-cosign-1" || rand_chain_id (u64 BE) || mu // 63 bytes
mu 是 ECDSA 法定人數所簽署的摘要;鏈標識符使測試網的聯署無法在另一條 Rand 鏈上通過驗證。這些簽名附於操作的 pq_signatures 內,位於交易綁定之內,因此在副本上無法被剝除或調換。檢查次序為先廉後貴:quorum(n) ≤ len ≤ n(PqNoQuorum)、索引嚴格遞增(PqIndexOrder)、每個索引 < n(PqIndexOutOfRange)、每個簽名恰為 2,420 位元組(PqBadSignatureLength),最後是每個簽名均可在 pq_guardians[index] 下通過驗證(PqBadSignature)。兩個法定人數各自獨立計算。創世的 bridge.pq_guardians 與創世 ECDSA 集(chain 20 及 chain 21 上為集 1)按索引對齊。載荷 2 的輪換只更動 ECDSA 集;沒有規則 v2 時,後量子集在鏈的存續期間固定不變,而在規則 v2 下只有 RotatePqGuardians 可替換它(自 chain 20 起為其 V2 形式,附持有證明及一日延遲)。Chain 21 有八把,與 chain 15 至 20 的八把密鑰相同;一次鑄造需要其中六把(chain 14 有六把,需要五把)。
這項簽署仍然只綁定鏈 id,在鏈 20 和鏈 21 上亦然:與下文的治理訊息不同,它沒有被移到創世哈希之後,因為產生這項簽署的守護者常駐程式位於另一個儲存庫,並未更改。一條沿用相同 id 的鏈副本,如果同時複製了守護者集合,便會接受為原鏈所作的存款共同簽署;存款交易本身的費用組合自鏈 20 起已綁定創世,但其中的證明則沒有。
B4:創世後列出橋接代幣
普通地址永遠無法建立 Bridge 權限的代幣。有兩種操作,各自使用普通的 RAND 費用組合,並各自須經後量子法定人數簽署:
RegisterBridgedToken { name, symbol, salt, chain, token, decimals, nonce, pq_signatures }— 在下一個索引處新增一個橋接代幣,在 Rand 上為 8 位小數,受創世鑄造上限約束,並附帶其首個支持資產。費用:組合基本費用加上登記冊的registration_fee(鏈 20 和鏈 21 上為 1 RAND,合共 1.001 RAND;自鏈 20 起,登記費用會被銷毀,而非支付予提議者;在鏈 21 上,基本費用亦會被銷毀,受創世fees.burn_floor規限)。ListBacking { token_index, chain, token, decimals, nonce, pq_signatures }— 為已登記的橋接代幣新增一個支持資產,起始值為locked = 0。費用:組合基本費用。
兩者均攜帶並遞增 list_nonce(否則返回 BadListNonce { expected, got }),並執行相同的檢查:該鏈已有登記的發送端(BridgeError::NoEmitter)、(chain, token) 尚未支持任何代幣、支持資產少於 32 個、decimals ≤ 18。
rand token register-bridged --name … --symbol … --salt <hex32> --chain N --token <hex32> --decimals N --pq <JSON or @file>
rand token list-backing --asset <index> --chain N --token <hex32> --decimals N --pq <JSON or @file>
兩條排序規則。守護者先簽署登記,等待其提交,讀回所分配的索引,然後才簽署指明該索引的列出操作——登記原生代幣無需許可,因此提前簽署的列出操作可能會發現其索引已被佔用。此外,一種幣須在 Rand 上列出,然後才可在來源端點上以 setToken 啟用:次序倒轉的話,存款可能在 Rand 尚未有支持資產可供入賬之前已鎖定,其證明會被以 UnlistedToken 拒絕,直至 Rand 追上為止。
治理訊息
固定位元組,絕非 bincode;所有整數均為大端序:
M_pause = "rand-bridge-pause-1" || chain_id u64 || nonce u64
M_unpause = "rand-bridge-pq-unpause-1" || chain_id u64 || nonce u64
M_list = "rand-bridge-pq-list-1" || chain_id u64 || nonce u64 || token_index u32 || chain u16 || token [32] || decimals u8
M_register = "rand-bridge-pq-register-1" || chain_id u64 || nonce u64 || u8 len || name || u8 len || symbol || salt [32] || chain u16 || token [32] || decimals u8
M_rotate_pq = "rand-bridge-pq-rotate-pq-1" || chain_id u64 || rotation_nonce u64 || count u32 || key [1312] … // rules v2
M_rotate_pause = "rand-bridge-pq-rotate-pause-1" || chain_id u64 || rotation_nonce u64 || key [1312] // rules v2
M_pause/M_unpause 攜帶 pause_nonce,M_list/M_register 攜帶 list_nonce,M_rotate_pq/M_rotate_pause 攜帶 rotation_nonce。count 是密鑰數目,而非位元組長度;每把密鑰均為 Dilithium2 公鑰的原始 1,312 位元組,次序即新集合將採用的次序。
自鏈 20 起,每項訊息均綁定創世哈希(創世 binding_domain: 1):標籤的版本數字改為 2,32 位元組的創世哈希置於標籤與鏈 id 之間,其餘部分不變——M'_pause = "rand-bridge-pause-2" || genesis [32] || chain_id u64 || nonce u64,rand-bridge-pq-unpause-2、rand-bridge-pq-list-2、rand-bridge-pq-register-2、rand-bridge-pq-rotate-pq-2 及 rand-bridge-pq-rotate-pause-2 亦然(bridge/gov.rs)。為某一條鏈簽署的暫停密鑰或法定人數,因此不會為任何其他共用同一鏈 id 及密鑰的鏈簽署。以 …-1 形式簽署的檔案在鏈 20 和鏈 21 上會被拒絕(BadPauseSignature、PqBadSignature)。鏈 14 至 19 使用上文的 …-1 版面,逐位元組相同。
規則 v2:輪換、滾動上限、暫停期間不得列出
創世 bridge 部分內的一個可選群組。鏈 14 沒有此群組;自鏈 15 起每條鏈均有,鏈 20 和鏈 21 取值相同:
"bridge": { …, "rules_v2": { "global_mint_cap_per_window": 400000000000, "cap_window_secs": 86400 } }
- 後量子法定人數下的兩種輪換。
RotatePqGuardians { new_pq_guardians, nonce, pq_signatures }替換整個後量子集合;RotatePauseKey { new_pause_key, nonce, pq_signatures }替換暫停密鑰。兩者與PauseMints一樣無需費用組合、不收費用,均由現有後量子集合簽署,並攜帶及遞增rotation_nonce,因此一份已簽署的法定人數簽名只授權一次輪換。新集合的長度須與現有 ECDSA 集合相同,密鑰為 1,312 位元組,不得重複,亦不得為暫停密鑰。沒有寬限期:被取代的集合或密鑰其後不能再簽署任何內容。自鏈 20 起,這些 v1 操作會被拒絕,輪換須證明持有新密鑰,並等待一日(見下文)。 - 滾動窗口上限。 每個支持資產的
mint_cap_per_day改為按cap_window_secs的滾動窗口計算,而非按曆日計算;另設第二項全登記冊上限global_mint_cap_per_window,涵蓋所有代幣的所有支持資產(TokenError::GlobalMintCapExceeded)。在鏈 20 和鏈 21 上為 400,000,000,000 單位,即每 86,400 s 4,000 zUSD。按日曆規則,23:59:59 與 00:00:01 的上限在兩秒內合共為上限的兩倍;按窗口規則,第二次鑄造會被拒絕。 - 暫停期間不得列出。 當
mint_paused時,RegisterBridgedToken及ListBacking會被以MintsPaused拒絕。銷毀及兩種輪換仍然開放。
輪換:持有證明與一日延遲
規則 v2 留下三個缺口:沒有任何機制證明新密鑰確為某人所持有(打錯字,或無人持有的密鑰,會令後量子法定人數永久失效);輪換在其所在區塊即時生效;亦無法阻止惡意輪換。與 rules_v2 並列的第二個可選群組(須以其為前提)於 v0.6.8 新增(審計 v6,BRG-14),解決了這些問題。鏈 20 設定了它,鏈 21 沿用:
"bridge": { …, "rotation": { "delay_secs": 86400, "needs_possession": true } }
- 持有證明。 輪換須為
RotatePqGuardiansV2 { new_pq_guardians, possession, nonce, pq_signatures }或RotatePauseKeyV2 { new_pause_key, possession, nonce, pq_signatures }:possession[i]是新密鑰i本身對法定人數所簽署的同一訊息(M_rotate_pq或M_rotate_pause,自鏈 20 起為其…-2形式)作出的 Dilithium2 簽名,每把密鑰一個,按密鑰次序排列,每個 2,420 位元組。v1 操作會被以PossessionRequired拒絕。數目或長度有誤,會在驗證法定人數之前被拒絕;持有證明簽名有誤(BadPossession { index })則在其後被拒絕。 - 延遲。 獲接納的輪換會被記錄為待處理,
effective_at_secs = block time + delay_secs,並於時間戳達到該值的第一個區塊結束時生效。在鏈 20 和鏈 21 上為 86,400 s,即一日。在此之前,舊集合繼續共同簽署每一次鑄造,舊暫停密鑰繼續負責暫停。接納輪換會用掉一個rotation_nonce,啟用時再用掉一個,因此在舊集合下匯集的鑄造證明,會在集合更換時離開匯集池。每種輪換同一時間只可有一項待處理(RotationPending { effective_at_secs })。 - 取消。
CancelRotation { kind, nonce, signature }(無需費用組合、不收費用)會撤銷kind的待處理輪換(0 = 後量子集合,1 = 暫停密鑰)。它由現有暫停密鑰簽署,即與法定人數分開持有的那把密鑰,自鏈 20 起簽署內容為"rand-bridge-cancel-rotation-2" || genesis [32] || chain_id u64 || rotation_nonce u64 || kind u8,並用掉該 nonce。因此,被奪取的法定人數無法在一日之內輪換集合,而暫停密鑰持有人可在該日內阻止;即將接任的暫停密鑰不能取消自己的到任。
簽署工具為 rand-node bridge-gov(rotate-pq、rotate-pause、cancel-rotation,各有 message、sign 及 submit 步驟;submit 在發送前會重新驗證每一行持有證明)。rand_getBridgeState 提供 rotation_rules 及 pending_rotations;在沒有此群組的鏈(鏈 14 至 19)上,兩者均為 null。ECDSA 守護者集合輪換(payload 2)不受影響:它保留自己的規則及寬限期。鏈 20 及鏈 21 上均未進行過任何輪換。
自鏈 14 沿用
鏈 15 是從鏈 14 的橋接位置(相同的發送端及來源端點)切出的,而鏈 16、17 和 18 亦各自以同樣方式從其前一條鏈切出。鏈 19 從鏈 18 的位置切出,只有一項改動:其 Ethereum、BSC 及 Tron 發送端是 2026-09-30 重新部署的端點(鏈 2 和 3 為 0x7af6b17047c1db6cb54347fdea45cf9179075bfa,鏈 4 為 0x6410797df959987a5baf65b5fab97edeb34d5163)。鏈 18 從未信任它們,因此沒有任何來自它們的內容在該鏈上鑄造。鏈 20 是從鏈 19 在高度 7,258 的快照切出的,並先停止橋接,沿用鏈 19 的發送端、守護者、後量子密鑰及暫停密鑰不變;新增的是費用及輪換群組。鏈 21 於 2026-10-12 從鏈 20 在高度 814,702 的橋接狀態切出(橋接於 07:40–07:41 UTC 停止,快照於 07:41 取得),並保持其中每一項不變——發送端、守護者、後量子密鑰、暫停密鑰及兩個群組;中繼器及守護者已為鏈 21 以 v0.8.0 的 rand 重新啟動。Solana 的發送端及 Rand 端發送端自鏈 14 起沒有改變。鏈 21 的創世包含:
- 託管。 100.001999 zUSD,以三張創世 zUSD note(10、89.002999 及 0.999 zUSD)持有,對應鎖定於 Ethereum 的 22 USDT、BSC 上的 23.001999 USDT、Tron 上的 30 USDT 及 Solana 上的 25 USDT,而每項 USDC 支持資產均為 0:此即鏈 20 於快照時的
locked,與各端點的託管量一致。total_supply == Σ locked於區塊 0 與各端點的託管量相等。沿革:鏈 14 上遺下的 10 zUSD,於鏈 15 至 20 為一張創世 note;鏈 18 的創世將之記為 Tron 上鎖定 9 USDT 及 Solana 上 1 USDT,而鏈 19 則在鏈 18 上一次再平衡之後,記為 Solana 上 10 USDT。鏈 20 的創世以兩張 note(10 及 89,即鏈 19 的淨存入減去其銷毀額)承載 99 zUSD;其餘部分來自鏈 20 的兩筆 BSC 存入與一次銷毀,以及國庫就這些交易收取的 10 bps 費用。 - 守護者集合索引 1,即來源端點目前所處的索引;下一次 ECDSA 輪換必須帶有索引 2。八個後量子密鑰及暫停密鑰沿用鏈 15 的,並無變動。
burn_sequence14:鏈 14 的銷毀止於 6,鏈 15 至 18 的創世始於 7,鏈 18 進行了一次銷毀(7),鏈 19 始於 8。鏈 19 進行了五次銷毀,序號為 8 至 12,鏈 20 始於 13 並進行了一次銷毀(13),故鏈 21 始於 14,任何以序號為鍵的端點或後台程序都不會見到同一序號兩次。- 重放。 較早一條鏈的鑄造仍可通過 ECDSA 法定人數,但其後量子共同簽署綁定了該鏈的 id,因此在鏈 21 上會被拒絕。鏈 15 的創世並無入站重放下限(
min_inbound_sequence為null),故當時所依靠的是共同簽署,以及守護者絕不為新鏈 id 共同簽署舊的鎖定。自鏈 16 起,創世會設定一項下限:按來源鏈計,該鏈發送方的轉移證明所可帶有的最低sequence。鏈 21 的下限為{ "2": 3, "3": 5, "4": 3, "5": 7 }:即鏈 20 被快照時各端點的下一個出站序號,此前的每一次鎖定均已在鏈 19 或鏈 20 上鑄造。(鏈 20 的為{ "2": 3, "3": 3, "4": 3, "5": 7 };鏈 18 的為{ "2": 2, "3": 2, "4": 2, "5": 2 };鏈 19 的為{ "2": 1, "3": 1, "4": 1, "5": 4 },其中每個重新部署的端點上序號 0 為營運方自身的鎖定,絕不可鑄造。)低於下限的轉移會被以BelowReplayFloor拒絕,不論其帶有何種法定人數與共同簽署。守護者集合的輪換不受此限制。該下限於創世時固定,納入創世雜湊的承諾,並包入橋根。
鏈 14 上的啟動次序(沿革)
橋如何於 2026 年 9 月在鏈 14(較早的 testnet)上啟動:
- 以
bridge部分(包括pq_guardians及pause_key)及設定registration_fee與mint_cap_per_day的tokens部分切出該鏈,不列出任何代幣。已於 2026-09-20 完成。 - 啟用水龍頭,讓部署者錢包可取得 RAND。已完成。
- 部署者以法定人數對
M_register(list_nonce = 0)的簽署,註冊 zUSD 及其首個支持資產。已於區塊高度 256 完成。 - 守護者讀回索引,並簽署其餘六條
ListBacking訊息,逐條提交。已完成:list_nonce讀數為 7。 - 對於每項支持資產:先在 Rand 上列出,再於來源端點上執行
setToken。 - 於四個來源端點上進行守護者集合輪換(集合 0 → 集合 1,由現行集合以 6 取 5 簽署),然後在 Rand 上提交同一證明。Rand 在鏈 14 存續期間讀為集合 0;鏈 15 始於集合 1。
- 每條來源鏈以小額進行一次實時往返:橋入、鑄造 zUSD、轉賬、銷毀返還;並將每項支持資產的
locked(rand_getTokenSupply)與端點的託管量對賬。
公開狀態
rand_getBridgeState:
{
"enabled": true,
"emitter": "01…", "emitters": { "2": "02…" },
"guardian_set_index": 0, "guardians": ["aabb…"],
"pq_guardians": ["…"],
"mint_paused": false, "pause_nonce": 0, "list_nonce": 0, "pause_key": "…",
"registration_fee": "1000000000",
"burn_sequence": 1,
"rotation_nonce": 0,
"rules_v2": { "global_mint_cap_per_window": "400000000000", "cap_window_secs": 86400,
"global_minted_in_window": "…", "global_mint_headroom": "…" },
"min_inbound_sequence": null,
"rotation_rules": null, "pending_rotations": null,
"fees": null,
"assets": [ … ]
}
pq_guardians 為 Dilithium2 公鑰,每條 1,312 字節,以十六進位表示。現已沒有 next_index:被橋接的代幣須先以其註冊時所定的索引列出,方可存入,因此再無有待預測的索引。rotation_nonce 是下一個 M_rotate_pq/M_rotate_pause/M_cancel 所須帶有的值;在沒有該組別的鏈上(鏈 14),rules_v2 為 null;在沒有重放下限的鏈上(鏈 15 及更早),min_inbound_sequence 為 null;在鏈 21 上,它為 { "2": 3, "3": 5, "4": 3, "5": 7 }(鏈 20 的為 { "2": 3, "3": 3, "4": 3, "5": 7 })。在沒有這些組別的鏈上(鏈 14 至 19),rotation_rules、pending_rotations 及 fees 為 null。上例展示的是結構,而非鏈 21 的數值:鏈 21 始於 guardian_set_index 1 及 burn_sequence 14,並提供 "rotation_rules": { "delay_secs": 86400, "needs_possession": true }、"pending_rotations": [] 及 "fees": { "mint_bps": 10, "burn_bps": 10, "recipient": "rand1…" }。沒有 bridge 部分的鏈則回應 {"enabled": false}。
沒有餘額:被橋接的價值就是 note,錢包以 rand asset-balance [INDEX] 從自己的 note 讀取所持有的數額。橋根承諾了發送方、守護者集合、已花費的摘要、銷毀序號、後量子守護者集合,以及暫停密鑰、暫停旗標與治理 nonce(兩個,在規則 v2 下另加 rotation_nonce),創世設有重放下限時亦包括該下限,自鏈 20 起還包括輪換規則連同任何待處理的輪換,以及費用組別;它只在設有橋的鏈上才併入狀態根。代幣登記冊連同每項支持資產的 locked,則另以 tokens_root 承諾。瀏覽器的 GET /bridge 與 GET /bridge/assets 提供相同的狀態,後者另附以 8 位小數字串表示的每項支持資產存入及銷毀總額;GET /tokens 與 GET /tokens/:id 提供登記冊。
何者公開、何者隱藏
| 項目 | 誰可見 |
|---|---|
| 一筆存入的金額、資產索引及接收者地址 | 所有人,僅限該一筆交易 |
| 接收者其後花費的是哪一張 note | 無人 |
| 一次銷毀的金額、資產、幣種、目的地及中繼費用 | 所有人 — 守護者需要這些資料 |
| 橋費 note 的金額、資產及擁有者,即國庫(自鏈 20 起) | 所有人:它由公開欄位重建 |
| 哪些 note 為一次銷毀提供資金 | 無人 |
| 被橋接的餘額 | 僅持有人,或持有查看密鑰者 |
守護者集合、發送方、附每項支持資產 locked 的登記冊、銷毀記錄 | 所有人 |
已知缺口
出自全節點本身的清單:Rand 上不向中繼者支付費用;存入的信封不綁定任何內容,因此惡意中繼者可封入無意義的資料,這正是錢包改為從公開欄位重建存入 note 的原因;賬本層級的共用測試向量尚未在 note 池上重建;bridge-burn 仍須在支付證明費用之後,才得知目的地端點本身的政策;橋接鏈上允許區塊時間戳等於父區塊,因此串通的領導者可在寬限期內持有已被取代的守護者集合;記憶體內的銷毀記錄沒有上限;來源鏈狀態的輕客戶端或鏈上驗證並不存在,亦無計劃提供。