使用本页可以在测试链上运行水龙头,了解 Mint 交易在链上的形态,并确切看清质押(bond)或跨链销毁(bridge burn)如何把价值从池中取出。每一次进入和每一次退出都是公开的,中间的一切都是票据。
水龙头铸造
在链 21 上,与链 20 一样,Mint 是创世之后创建 RAND 的唯一方式,且只存在于创世文件中写有 "faucet": true 的链上。它是一笔由验证者签名、不含捆绑包的交易:
Action::Mint { cm: Word8, pk: Word8, time: u32, r: Word8, envelope: Envelope, amount: u64,
minter: PublicKey, signature: Signature }
验证者节点上的 rand_mint(address[, amount]) 会为给定的 rand1… 地址构造一张金额为 amount 的票据,用一次性发送方密钥封装其信封,用节点自己的 Dilithium2 密钥为这笔铸造签名,并通过常规内存池提交,因此这笔铸造会经过共识,由每个节点应用。每次调用的上限为 100000000000 个单位,即 100 RAND,默认值即为上限。自链 14 起,铸造携带票据的打开值(pk、time 和 r),且签名覆盖这些内容:准入时会重新计算 (pk, no sender, amount, asset 0, time, r) 的承诺,并以 the mint's commitment does not open to its published note and amount 拒绝与之不匹配的 cm,同时将 time 限定在捆绑包的时间窗口内。rand_mint 的参数不变。在链 14 至 19 上,被签名的消息是 blake3("rand-mint-2" ‖ bincode(chain_id, cm, pk, time, r, envelope, amount));在创世文件设置了 binding_domain: 1 的链 20 上,则是 rand-mint-3 加上创世哈希,再接相同的字段,因此为某一条链签名的铸造会被其他任何链拒绝,即便两条链共用同一个链 id 和同一组验证者密钥。观察者节点没有验证者密钥,会回复 faucet mints are signed by validators; ask a validator node;未启用该标志的链则回复 faucet is disabled on this chain。
链 21 的水龙头已开启,但受其创世文件 staking 部分的限制,取值与链 20 相同:
| 规则 | 链 21(与链 20 相同) | 拒绝信息 |
|---|---|---|
| 接收方 | 由 16 个钱包组成的允许列表(staking.faucet_recipients);铸造中公开的 pk 必须在其中 | the faucet may not mint to this recipient (not in staking.faucet_recipients),永久拒绝 |
| 预算 | 每个 1,000 区块的纪元 10,000 RAND(staking.faucet_budget_per_epoch),所有验证者合计 | the faucet budget of … for this epoch is exhausted (… minted);下一个纪元会准入 |
| 铸造者 | 26 个验证者中的 18 个(staking.faucet_minters,自链 16 起列出);铸造必须由其中之一签名 | minter … is not a faucet minter on this chain |
因此,在链 21 上 rand faucet 只对名单中的钱包有效,且须向密钥属于名单内铸造者的验证者节点提出请求;其他任何地址都必须由持有 RAND 的人来支付。
rand faucet # 100 RAND to this wallet's address, waits for the commit
rand faucet rand1… --amount 25 # to another address, less than the cap
→ {"method":"rand_mint","params":["rand1…", "100000000000"]}
← "9ab1c0…4f"
公开的内容有:新票据的承诺、它的信封、明文金额,以及铸造验证者的公钥(以其地址显示)和签名。打开值同时公开了票据的所有者密钥 pk,因此水龙头票据的所有者是公开的,正如提现(withdraw)的收款方是公开的;保持隐藏的,是这张票据日后在何时、何处被花费。从“铸造了 100 RAND”到“存在一张价值 100 RAND 的票据”这一跳关联,与任何地方的透明到屏蔽存入所具有的可见性相同。准入会检查:水龙头已启用、金额低于上限、本纪元预算尚有余量、创世文件设有允许列表时接收方在其中、承诺能打开为公开的票据、铸造者是验证者且(创世文件设有铸造者名单时)在名单上,以及签名验证通过;铸造不收取手续费。
rand_getTransaction 将其渲染为 { "kind": "mint", "cm": "…", "amount": "100000000000", "minter": "<validator base58>" },且 "bundle": null:金额是十进制字符串,与自链 14 起 RPC 提供的每个 u64 金额一样;浏览器在 kind=mint 下列出它们,这是少数带有公开 amount 的类型之一。
创世存入
价值进入的另一条途径是创世文件:传给 rand-node genesis 的每个 --alloc rand1<address>=<RAND> 都会成为一张存入票据 { cm, envelope, amount, opening },带有全新的承诺随机数,是树的最初几片叶子。链 21(fullnode v0.8.0,自 2026-10-12 上线)有十张创世票据:七张 RAND 票据,合计 3,938.879078887 RAND(genesis_deposited),即通过扫描链 20 在高度 822,056 至 822,229 的池而得到的运营方余额;以及三张 zUSD 票据,分别为 10、89.002999 和 0.999 zUSD,即从链 20 在高度 814,702 的状态带过来的 100.001999 zUSD 桥托管资产(Bridge),它们不是 RAND,也不计入 genesis_deposited。链 20 上由运营方并不持有的钱包所持有的 RAND,约 36,025 RAND(其中 35,040 是铸造给允许列表接收方的水龙头铸造),以及 2.606 RAND 未提取的验证者手续费,均未被带过来。另有一个创世条目根本不是票据:基金会国库,即由 3 位 Dilithium2 签名者中的 2 位控制的多签账户中的 100,000 RAND 新发行量,是多签登记表中的一笔公开余额(multisig_issued),只能通过 MultisigPay 创建的、由链计算的票据进入池中。历史:链 20 有九张,七张 RAND 票据共 5,184.243719258 RAND,以及两张 10 和 89 的 zUSD 票据,从链 19 带来;链 19 有八张,七张 RAND 票据共 5,294.644359629 RAND,另有一张 10 zUSD;链 18 有六张 RAND 票据,五张为 1,000 RAND,一张为 300 RAND;链 14 和 15 各有五张 1,000 RAND。金额是公开的,以便任何人都能加总得出初始供应量;自链 14 起,票据同样携带其打开值,因此创世票据的所有者按设计是公开的。重新切分同样的分配会得到不同的票据和不同的创世哈希,这是有意为之。
销毁
每笔交易都携带一个四槽的隐藏资产捆绑包,它有两个销毁字:burn_r 是离开池进入公开位置的 RAND,burn_a 是 burn_asset 所指代币的数量。捆绑包的 guest 程序在一个证明中同时平衡这两组,准入要求这三者全部为零,下列操作除外:
| 销毁 | 规则 | 价值去向 |
|---|---|---|
Bond 的捆绑包 | burn_r == amount | 登记表中验证者的公开 stake |
BridgeBurn 的捆绑包 | burn_asset == asset、burn_a == amount、burn_r == 0、asset != 0 | 在 Rand 上销毁;源链合约凭守护者签名的销毁消息释放指定币种的 amount。自链 20 起,链以 zUSD 票据的形式向国库收取 10 bps 的费用,释放的数额为 amount − fee |
TokenBurn 的捆绑包 | 与桥销毁的形式相同 | 销毁;RPL 代币的公开 total_supply 恰好减少同等数额 |
Invoke 的捆绑包(RPL-2,自链 20 起) | burn_r,以及 burn_asset 的 burn_a,按程序的状态转移所声明 | RAND 和代币存入程序的公开金库,或销毁程序自己的代币;金库只能以由链计算的票据的形式再次支付(Programs) |
CreateMultisig 或 MultisigDeposit 的捆绑包(链 21) | burn_r 是支付进来的 RAND | 转入多签账户的公开余额(multisig_rand_in);只能通过 MultisigPay 创建的、由链计算的票据回到池中(Transactions) |
PerpDeposit 的捆绑包(RPL-3,链 21) | 市场抵押资产的 burn_a,在链 21 上为 zUSD | 记入永续合约引擎中的交易账户;提现以由链计算的票据支付 |
(register_aggregator 的捆绑包同样通过 burn_r 销毁其创世质押;链 21 上聚合已关闭。)
销毁不是手续费。质押的销毁是 RAND 从池移动到登记表,计入供应审计的 burned(并在 register_total 中再次出现)。自链 14 起,桥销毁是一个捆绑包(此前是两个):槽 0–1 销毁被桥接的资产,槽 2–3 支付费用,因此它只通过该费用 BRIDGE_BURN_FEE(0.01 RAND)影响 RAND 供应。它必须指定一种支撑该资产的币,释放该币单位的整数倍,且不得超过该支撑所锁定的数额(Bridge)。在链 20 上,其创世文件的 bridge.fees 还会对每一笔桥接铸造和销毁以 zUSD 收取 10 bps:存入记入的是扣除费用后的总额,销毁释放 amount − fee,每笔费用都是发往国库的一张屏蔽 zUSD 票据。费用票据仍属已发行且有支撑,因此 zUSD 的 total_supply == Σ locked 依然成立;它不是 RAND 的移动,也不进入 RAND 供应审计。TokenBurn 支付 0.001 RAND 的捆绑包基础费用;被桥接的代币在此处会被拒绝,须通过 bridge-burn 离开。
自第 15 条链起,每条链上还有一项费用同时是销毁,第 21 条链也不例外:创世配置设置了 tokens.burn_registration_fee,因此 RegisterToken 或 RegisterBridgedToken 的 1 RAND registration_fee 会被销毁,而不是支付给提议者,提议者只保留交易包的基础费用。这笔费用计入 burned,并单独计入 registration_fees_burned(RPL tokens)。在第 21 条链上,每个交易包的费用下限也以同样方式被销毁:创世配置中的 fees 部分(burn_base、burn_floor)会销毁账本自身为该交易包设定的下限——0.001 RAND 的基础费用、部署的按字计费项、调用的 gas 与字节计费项、跨链销毁的 0.01 RAND——提议者保留 fee − floor;这部分销毁计入 burned 和 base_fees_burned(Fees)。
rand bond <validator> 1000 [--registration <hex>] # burns 1000 RAND out of this wallet's notes
rand bridge-burn <ASSET> <AMOUNT> <TO_CHAIN> <TOKEN> <TO> # burns AMOUNT of a bridged asset, released as TOKEN on TO_CHAIN
rand token burn <ASSET> <AMOUNT> # destroys AMOUNT of an RPL token this wallet holds
手续费是另一个出口
每个交易包的 fee 都从池中流入区块提议者的 rewards(一个公开的寄存器字段),只有当验证者将其作为票据提取时,才会重新回到池中(Staking)。Withdraw 会从提取的金额中向应用该交易的区块的提议者支付 0.001 RAND 的基础费用;这笔基础费用从未离开寄存器,因此不算一次跨越。
供应量如何变动
in: genesis_deposited, faucet_minted, withdraw_deposited, program_rand_out
out: fees_paid, burned
pool_value = in − out
total_supply = pool_value + Σ register (stake + pending + rewards) + program_rand_held
== genesis_deposited + genesis_staked + faucet_minted − slashed − registration_fees_burned
program_rand_held 和 program_rand_out 自第 20 条链(RPL-2)起提供:Invoke 通过 burn_r 销毁并存入程序金库的 RAND,在池一侧计入 burned,并由金库持有;金库以票据形式支付出去的部分则回到池中。rand_getSupply 同时返回这两项以及 invariant_holds。第 21 条链为永续合约引擎增加了同样的一对计数器(perps_rand_held、perps_rand_out,在其唯一的市场以 zUSD 作抵押期间均为 0),并增加了五个 multisig_* 计数器:multisig_issued(金库的 100,000 RAND)、multisig_rand_in 和 multisig_rand_out(创建与存入所销毁并流入的部分,以及付款以票据形式支付出的部分)、multisig_base_out(付款从账户中向提议者支付的 0.001 RAND 基础费用)以及 multisig_rand_held,即它们的净额(Supply)。
创世之后,只有水龙头铸造会增加链已发行的数量(第 21 条链的创世本身发行了 26,000 RAND 的质押、3,938.879078887 RAND 的票据以及金库的 100,000 RAND);而在第 21 条链上,被销毁的注册费和每一笔被销毁的费用下限都会使其减少:slashed 会统计被罚没的聚合者保证金,或者在创世的 staking.slashing 部分之下,统计被罚没的验证者质押,而第 21 条链两者都没有(聚合已关闭,且 slashing 为 null)。保证金、提取、金库存入、多签存入或付款以及永续合约存入,只是在池与公开寄存器之间转移价值,并不创造任何价值;小费从池转入提议者所在的行,而其下的费用下限则被销毁。Supply 中有各计数器及一个完整的算例。区块聚合补贴——每个已封存区块按减半计划发行的新 RAND,以存款票据的形式支付给聚合者——将是第一笔按计划发行的增发,目前在第 21 条链上并未启用。