Rand Protocol
ドキュメント
ガイド

ミントとバーン

RAND がプールに入る経路(ジェネシスでのデポジットと testnet のファウセット)と、プールから出る経路(手数料とバンドルのバーンワード)、そしてそれぞれの移動で何が公開されるかを説明します。

このページは、テストチェーンに対してフォーセットを動かすとき、Mint トランザクションがワイヤ上でどのような形をしているかを知るとき、そしてボンドやブリッジのバーンがプールから価値をどのように取り出すかを正確に確認するときに使います。入口も出口もすべて公開されており、その間にあるのはノートだけです。

フォーセットのミント

Mint は、チェーン 20 でジェネシス以降に 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 鍵でミントに署名して、通常のメンプールを通じて送信します。そのため、ミントはコンセンサスを経由し、すべてのノードが適用します。上限は 1 回の呼び出しにつき 100000000000 ユニット、すなわち 100 RAND で、既定値も上限と同じです。チェーン 14 以降、ミントにはノートのオープニング(pk、time、r)が含まれ、署名はそれを対象とします。アドミッションでは (pk, no sender, amount, asset 0, time, r) のコミットメントを再計算し、一致しない cm を the mint's commitment does not open to its published note and amount で拒否します。また 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 と応答します。

チェーン 20 のフォーセットは有効ですが、ジェネシスの staking セクションによって制限されています。値はチェーン 19 と同じです。

ルールチェーン 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

したがって、チェーン 20 で 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 相当のノートが存在する」への 1 ホップの結びつきは、透明からシールドへのデポジットがどこでも持つ可視性と同じです。アドミッションでは次の点を確認します。フォーセットが有効であること、金額が上限未満であること、エポックの予算に余裕があること、ジェネシスに許可リストがある場合は受取人がそこに含まれること、コミットメントが公開されたノートにオープンできること、ミンターがバリデータであること(ジェネシスにミンターリストがある場合はそのリストに含まれること)、そして署名が検証できること。ミントに手数料はかかりません。

rand_getTransaction はミントを { "kind": "mint", "cm": "…", "amount": "100000000000", "minter": "<validator base58>" } と "bundle": null で返します。金額は、チェーン 14 以降に RPC が返すすべての u64 の金額と同様に、10 進数の文字列です。エクスプローラーでは kind=mint の下に一覧表示され、amount が公開されている数少ない種別の 1 つです。

ジェネシスのデポジット

価値が入るもう 1 つの経路はジェネシスファイルです。rand-node genesis に渡した各 --alloc rand1<address>=<RAND> は、新しいコミットメントランダムネスを持つ 1 つのデポジットノート { cm, envelope, amount, opening } になり、ツリーの最初のリーフとなります。チェーン 20 のジェネシスノートは 9 個です。RAND のノートが 7 個で、合計 5,184.243719258 RAND(genesis_deposited)です。これはチェーン 19 のスナップショットから引き継いだオペレーターの残高です。残りの 2 個は 10 zUSD と 89 zUSD の zUSD ノートで、チェーン 19 から引き継いだ 99 zUSD のブリッジカストディです(Bridge)。これらは RAND ではなく、genesis_deposited にも含まれません。チェーン 19 でオペレーターが保有していないウォレットが持っていた約 520 RAND と、引き出されていないバリデータ手数料は引き継がれませんでした。履歴は次のとおりです。チェーン 19 は 8 個で、5,294.644359629 RAND の RAND ノート 7 個と 10 zUSD の 1 個でした。チェーン 18 は RAND ノート 6 個で、1,000 RAND が 5 個と 300 RAND が 1 個でした。チェーン 14 と 15 は 1,000 RAND が 5 個でした。金額は、誰もが初期供給量を合算できるように公開されています。またチェーン 14 以降はノートがオープニングも持つため、ジェネシスノートの所有者は設計上公開されています。同じ割り当てで作り直すと、ノートもジェネシスハッシュも異なるものになります。これは意図的です。

バーン

すべてのトランザクションは、4 スロットの隠しアセットバンドルを 1 つ持ち、そこには 2 つのバーンワードがあります。burn_r は公開された場所へプールから出ていく RAND で、burn_a は burn_asset が指すトークンの量です。バンドルのゲストは両方のグループを 1 つの証明の中で均衡させ、アドミッションでは、次のアクションを除いて 3 つすべてがゼロであることを要求します。

バーンルール価値の行き先
Bond のバンドルburn_r == amountレジスタ内のバリデータの公開 stake
BridgeBurn のバンドルburn_asset == asset、burn_a == amount、burn_r == 0、asset != 0Rand 上で破棄されます。ソースチェーンのコントラクトが、ガーディアンの署名したバーンメッセージと引き換えに、指定されたコインの amount を解放します。チェーン 20 では、チェーンが 10 bps の手数料をトレジャリー宛ての zUSD ノートとして保持し、解放額は amount − fee になります
TokenBurn のバンドルブリッジバーンと同じ形破棄されます。RPL トークンの公開 total_supply は、ちょうどその分だけ減ります
Invoke のバンドル(RPL-2、チェーン 20)burn_r、および burn_asset の burn_a。プログラムのトランジションが宣言するとおりですRAND とトークンはプログラムの公開ボールトにデポジットされるか、プログラム自身のトークンが破棄されます。ボールトが再び支払うのは、チェーンが計算したノートとしてだけです(Programs)

(register_aggregator のバンドルも、burn_r を通じてそのジェネシスボンドをバーンします。チェーン 20 ではアグリゲーションはオフです。)

バーンは手数料ではありません。ボンドのバーンは、プールからレジスタへ移る RAND であり、供給量監査の burned に計上されます(そして register_total に再び現れます)。ブリッジバーンはチェーン 14 以降 1 つのバンドルです(以前は 2 つでした)。スロット 0〜1 がブリッジされたアセットをバーンし、スロット 2〜3 が手数料を支払うため、RAND の供給量に触れるのはその手数料 BRIDGE_BURN_FEE(0.01 RAND)だけです。ブリッジバーンは、そのアセットを裏付けるコインを指定し、そのコインの整数単位の量を解放し、その裏付けがロックしている範囲に収まらなければなりません(Bridge)。チェーン 20 では、ジェネシスの bridge.fees により、ブリッジされるすべてのミントとバーンからも zUSD で 10 bps を徴収します。デポジットは総額から手数料を引いた額を計上し、バーンは amount − fee を解放し、それぞれの手数料はトレジャリー宛てのシールドされた zUSD ノートになります。手数料のノートは発行済みかつ裏付けられたままなので、zUSD の total_supply == Σ locked は引き続き成り立ちます。これは RAND の移動ではなく、RAND の供給量監査には入りません。TokenBurn はバンドルベースの 0.001 RAND を支払います。ブリッジされたトークンはここでは拒否され、bridge-burn を通じて出ていきます。

チェーン 20 では、15 以降のすべてのチェーンと同様に、もう 1 つの手数料もバーンです。ジェネシスが tokens.burn_registration_fee を設定しているため、RegisterToken または RegisterBridgedToken の 1 RAND の registration_fee は、プロポーザーに支払われる代わりに破棄され、プロポーザーが得るのはバンドルベースだけです。これは burned に計上され、別途 registration_fees_burned にも計上されます(RPL tokens)。

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

手数料はもう 1 つの出口

すべてのバンドルの 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 とともに返します。

faucet mint のみがチェーンの発行量を増やします。chain 20 で発行量を減らすのは、burn された登録手数料のみです。slashed は、slash された aggregator のボンド、または genesis の staking.slashing セクションがある場合は slash された validator のステークを計上しますが、chain 20 にはそのどちらもありません(aggregation は無効で、slashing は null です)。ボンド、手数料、withdraw、vault への預け入れは、プール、レジスタ、vault の間で価値を移動させるだけで、何も生み出しません。カウンターと具体的な計算例は、Supply にあります。ブロック aggregation の補助金、つまり halving スケジュールに従って seal されたブロックごとに新しい RAND を発行し、deposit note として aggregator に支払うものは、最初の予定された発行になりますが、chain 20 では有効ではありません。

fullnode のコミット c0878c3f(チェーン 21)に対して 2026-10-12 に最終確認しました。 コードとこのページが食い違う場合は、コードが正です。お知らせください。