このページでは、トークンをゼロから、Rand 上で稼働し転送可能な資産にするまでを扱います。RPL は Rand のトークン標準で、chain 14 で新しく導入されました。ERC-20 をデプロイしたことや SPL の mint を作成したことがある方は、最初のセクションをじっくり読んでください。RPL トークンはそのどちらでもないからです。RPL tokens は、このページの背景にあるコンセプトのページです。
1. RPL トークンとは
RPL トークンとは、スマートコントラクトではなく、台帳のトークンレジストリに置かれた 1 件のエントリです。書くべきコードも、コンパイルも、監査もありません。トークンの作成は、レジストリに 1 行を追加する 1 つのトランザクションで完結します。それ以降、トークンの単位は通常のシールドされたノートとなり、RAND と同じプールに保持され、同じ方法で使われます。
| フィールド | ルール |
|---|---|
| asset id | 32 バイト。トークンの識別子です。rpl1… と表記します。bech32m、62 文字、チェックサム付き |
| index | 登録時にチェーンが割り当てる小さな番号(1、2、…。0 は RAND)。このチェーン上での id の略記です |
| name | UTF-8 で 1〜32 バイト。作成時に固定されます |
| symbol | 印字可能な ASCII 文字で 1〜12 文字。作成時に固定されます |
| decimals | 0〜9。作成時に固定されます |
| mint authority | 追加で発行できる主体。なし(None)、鍵(Key)、ブリッジ(Bridge)のいずれかです |
| total supply | 公開されており、mint または burn によってのみ変動します |
symbol は一意ではありません。 Ethereum や Solana と同様に、誰でも USDC という名前のトークンを作成できます。トークンの識別は asset id で行われます。トークンを受け取る前、あるいは掲載する前には、symbol ではなく必ず rpl1… の id を確認してください。テキスト形式にはチェックサムが付いているため、誤入力された id は拒否され、別の宛先に送られることはありません。
ERC-20 や SPL との違い
| ERC-20 / SPL | RPL | |
|---|---|---|
| トークンとは | コントラクト、またはプログラムが所有するアカウント | レジストリの 1 行。トークンごとのコードがないため、転送税、リベース、フックは存在しません |
| 残高 | アドレスごとに公開 | シールドされたノート。保有者の残高を読み取ることも、トークンの保有者を列挙することもできません |
| 転送 | 送信者、受信者、金額が公開 | 送信者が証明し、完全にシールドされます。オブザーバーには RAND の支払いと区別がつきません |
| 手数料 | チェーンのネイティブコイン | RAND。ERC-20 の保有者が ETH を必要とするのと同様に、トークンを動かすには少量の RAND が必要です |
| 受け取り | SPL では先にトークンアカウントが必要 | 事前の設定は不要です。どの rand1… アドレスでも、あらゆるトークンを受け取れます |
| 金額 | uint256 / u64 | u64。小数は最大 9 桁 |
| approve / transferFrom | あり | v1 ではなし |
| freeze、blacklist、pause | 多くの場合あり | なし |
| メタデータ | オフチェーン、または変更可能 | オンチェーンで不変 |
| プログラムによる保有 | 可能 | v1 では不可 |
公開されたままなのは境界部分です。トークンの登録、すべての mint とすべての burn が、それぞれの金額とともに公開されます。これにより、total supply は誰でも監査できます。保有者間の転送は、どのトークンが動いたかを含め、何も明かしません。
2. 始める前に
| 必要なもの | 方法 |
|---|---|
rand コマンドライン | Running a node でビルドできます。すべてのコマンドは Command line に一覧があります |
| ウォレット | rand keygen が spend key のファイルを書き出し、rand address がその rand1… アドレスを表示します(Accounts and addresses) |
| 接続先のノード | ウォレットは JSON-RPC でノードと通信します。既定は自分のノードの http://127.0.0.1:8545 です。ノードは RPC を localhost にバインドするため、通常は chain 20 を追従する自分のノードを使います。自分のノードがない場合は --rpc https://rpc.randprotocol.org を指定してください。公開エンドポイントは、rand faucet を除くこのページのすべてを扱えます(rand faucet は拒否されます)(JSON-RPC, the public endpoint) |
| 手数料用の RAND | ウォレットに数 RAND。faucet を 1 回呼び出すと得られる 100 RAND で、このページのすべてを賄えます。ただし chain 20 では、rand faucet が支払うのは genesis が許可リストに載せた 16 個のウォレット(staking.faucet_recipients)のみで、それ以外のアドレスは the faucet may not mint to this recipient で拒否されます。それ以外のウォレットには、RAND を保有する誰かから送ってもらう必要があります(Mint and burn) |
| 登録手数料 | チェーンの genesis パラメータで、1〜10,000 RAND の範囲です。chain 20 では 1 RAND なので、rand token create のコストは 1.001 RAND です。すべてのトランザクションが支払う基本料金の 0.001 RAND と、登録手数料の合計です。chain 20 は登録手数料をブロックのプロポーザーに支払わず、burn します。ここにある他のコマンドのコストは、基本料金の 0.001 RAND のみです |
| 約 6 GB の空きメモリ | すべてのトランザクションは、お使いのマシン上で証明されます。chain 20 では 2 回の証明が行われ、ウォレットはそれぞれについて 1 行を表示します。proving the spend authorisation on this machine (tier 10; seconds)…、続いて proving the bundle (tier 14; about a minute and a half on a laptop)… です。バンドルの証明には約 100 秒と、実行中に約 5.7 GB のメモリを要します。2 つの証明はワイヤ上でそれぞれ約 1.37 MB と約 1.5 MB で、合計約 2.85 MB です。これは、以下のチェーンを変更するすべてのステップ(作成、各 mint、各 send、各 burn)に当てはまります |
rand --key wallet.key.json keygen # writes the spend key; refuses to overwrite
rand --key wallet.key.json address # your rand1… address
rand --key wallet.key.json faucet # testnet only, allowlisted wallets only: asks a validator node to mint 100 RAND to this wallet
rand --key wallet.key.json balance # scans the tree, prints the spendable value and the unspent note count
--key の既定値は wallet.key.json で、RAND_KEY として一度設定しておけます。--rpc(または RAND_RPC)は通信先のノードを指定し、既定値は http://127.0.0.1:8545 です。以下のコマンドでは --key を明示しています。証明に取りかかる前に、ノードが chain 20 上にあることを確認してください。JSON-RPC メソッド rand_chainId は、chain 20 では 20 を返します。ウォレットは chain 20 のビルドである v0.6.8 でなければなりません。chain 20 は、すべての証明と、トークンの mint を含むすべての署名済みメッセージを、その genesis ハッシュに紐づけます。そのため v0.6.7 の rand は、chain 20 が拒否する証明と署名を生成します。
3. トークンを作成する
token create は、金額をトークンの最小単位で受け取ります。 --fixed-supply と --initial は、基本単位の整数です。--decimals 2 の場合、1000000 という金額は 10,000.00 トークンです。以降のすべてのコマンド(rand send --asset、rand token mint、rand token burn)は、v0.5.10 以降、RAND の金額が RAND 単位(1.5)であるのと同様に、トークンの表示単位を受け取ります。ウォレットはトークンのレジストリ行から decimals を読み取り、トークンが持つ桁数を超える小数桁は拒否されます。チェーン上では、金額は常に基本単位の整数です。
まず 1 つ決めてください。今後、追加で発行できるようにするかどうかです。 この答えは作成時にトークンへ固定され、後から広げることはできません。
| 固定供給 | mint 可能 | |
|---|---|---|
| mint authority | None | Key:あなたが保持する Dilithium2 の鍵 |
| 供給量 | 供給量の全体が、作成のトランザクションで一度だけ mint されます | ゼロ、または --initial から始まり、鍵の保有者が時間をかけて mint します |
| フラグ | --fixed-supply <N> --to <rand1…> | --authority-key-out <FILE>、必要に応じて --initial <N> --to <rand1…> |
| 向いている用途 | 上限のあるトークン、メンバーシップや投票の単位 | ポイントや報酬のトークンなど、供給量を増やしていく発行者 |
固定供給のトークン
rand --key wallet.key.json token create \
--name "Example Credits" \
--symbol EXC \
--decimals 2 \
--fixed-supply 1000000 \
--to rand1…
--to は、供給量を受け取る完全な rand1… アドレスで、たとえば rand address の出力です。--fixed-supply は基本単位で指定します。小数 2 桁で 1000000 は 10,000.00 EXC です。
このコマンドは、ノードからレジストリの次の index と登録手数料を読み取り、最初の mint のノートを組み立て、手数料バンドルを 1 つ証明し、登録を送信してブロックを待ちます。成功すると、送信を報告し、続いて index <N>, id <64 hex> (<rpl1…>) という形式の行を表示し、さらに committed at height <H> を表示します。rpl1… の id を控えてください。 これがトークンの識別子であり、以降のすべてのコマンドで必要になります。
既定の手数料は、基本料金にチェーンの登録手数料を加えたもので、chain 20 では 1.001 RAND です。そのため計算は不要です。--fee(RAND 単位)で引き上げられます。--no-wait は、トランザクションが送信されるとすぐに戻り、committed の行を省略します。--cuda は、接続された NVIDIA GPU で証明を行います。--features cuda 付きのビルドが必要で、CPU にはフォールバックしません。
あなたのトークンが証明されている間に別のトークンが登録されると、そのトークンが、あなたのトークン用に確保されていた index を取ります。 ノードは登録を拒否し、コマンドは実際の数値を添えて another token took index N first — re-run to register at N+1 と表示します。拒否された登録がブロックに入ることはありません。失われるのは証明にかけた約 100 秒の作業だけです。コマンドをもう一度実行すれば、次の index に対して証明されます。
供給量の全体は、--to のアドレスが所有する 1 つのシールドされたノートに入っています。登録とその金額は公開されます。受取人がその後そのノートをどう扱うかは公開されません。
mint 可能なトークン
rand --key wallet.key.json token create \
--name "Example Points" \
--symbol EXP \
--decimals 0 \
--authority-key-out exp-authority.key.json
この書き込みにより、新しい Dilithium2 鍵が exp-authority.key.json に生成され(モード 0600、既存のファイルは上書きしません)、その鍵をミント権限(mint authority)とし、供給量をゼロとしてトークンが登録されます。出力は固定供給トークンの場合と同じ 2 行です。--fixed-supply と --authority-key-out は、必ずどちらか一方だけを指定してください。
同じトランザクション内で最初の発行量をミントするには、--initial と --to を追加します。この 2 つは必ず一緒に指定する必要があります。
rand --key wallet.key.json token create \
--name "Example Points" \
--symbol EXP \
--decimals 0 \
--authority-key-out exp-authority.key.json \
--initial 5000 \
--to rand1…
登録の処理中は、鍵は exp-authority.key.json.pending に置かれます。チェーンが登録を受理すると exp-authority.key.json に昇格し、チェーンが拒否した場合は破棄されます。結果が不明なまま接続が失敗した場合、ファイルは .pending のまま残ります。削除する前に rand token list を確認してください。
**この鍵ファイルは、トークンを発行する権限そのものです。**オフラインで保管し、バックアップを取ってください。ウォレットのスペンディングキーとは別のもので、送受信には一切必要ありません。
最初のミントの受取人がなぜ id に含まれるのか
登録は、作成者の署名を伴いません。mempool で待機しているあなたの登録を見た人は誰でも、そのコピーを自分の手数料バンドルで支払って送信できます。アセット id が名前、シンボル、数量だけをカバーしているとすると、そのコピーは自分のアドレスを受取人に指定し、先にブロックへ入ることができます。そうなると、その人が id を所有し、固定供給トークンであれば供給量の全体を永久に保有することになります。
そこで id は、登録に含まれるすべての内容(初回ミントを含む、その数量、受取人、ランダムネス、時刻、暗号化されたエンベロープ)に対するハッシュとしています。受取人が異なるコピーは、異なるアセット id にハッシュされます。それは、あなたのシンボルを偶然共有しているだけの別のトークンであり、一意でないシンボルが約束していたのはそこまでです。あなたの id が登録できるのは、あなたの受取人でのみです。
--salt <hex32> は、id にも反映される 32 バイトのソルトを設定します。省略すると、ウォレットがランダムに選びます。トークンが存在する前に id を公開したい場合など、id を再現可能にする必要があるときに指定してください。
確認する
rand token info rpl1… # by id: rpl1… or 64 hex characters
rand token info 2 # or by the index `token create` printed
rand token list --limit 20 # one page of the registry; --from <index> pages on
token info は、トークンの行を JSON で出力します。含まれるのは index、id、id_text(rpl1… 形式)、name、symbol、decimals、authority、mint_nonce、total_supply、registered_at です。authority は、固定供給トークンでは {"kind":"none"}、ミント可能なトークンでは {"kind":"key","key":…,"address":…} になります。total_supply は、基本単位による 10 進数の文字列です。token list は、enabled、registration_fee、next_index、および tokens の各行を出力します。どちらもノードの一覧全体を読み取るため、ノードはあなたがどのトークンに関心を持っているかを知ることができません。
あるいは JSON-RPC を使います。パラメータには、インデックス、64 文字の 16 進 id、または rpl1… 形式のいずれかを指定できます。
curl -s http://127.0.0.1:8545 -H 'content-type: application/json' -d '{
"jsonrpc": "2.0", "id": 1,
"method": "rand_getToken",
"params": ["rpl1…"]
}'
結果は token info が出力するものと同じ行です。該当するトークンが存在しない場合は null になります。不正な id(チェックサムの誤り、大文字小文字の混在、長さの誤り)はエラー -32602 になります。rand_getTokens は [from_index, limit] を受け取り、登録されているすべてのトークンをページ送りで返します。rand_getTokenSupply は { total_supply, backings } のみを返します。いずれも鍵を必要としません。JSON-RPC を参照してください。
現時点でチェーン 20 に存在する行の一つが、インデックス 1 のブリッジ済みトークンである zUSD です。エクスプローラーは、自前のノードがなくてもノードのレジストリを提供します。
curl -s https://randscan.org/api/v1/tokens
チェーン 14 で、2026-09-20 に、これは "registration_fee": 1000000000、"next_index": 2、およびトークン 1 件を返しました。ここでは最初のバッキングまでに短縮しています。
{
"index": 1,
"id": "32e5ab28c782c663e14da2650a3feb12f16a12db85599f4f62dc169d26f37b1f",
"id_text": "rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx",
"name": "Shielded USD",
"symbol": "zUSD",
"decimals": 8,
"authority": {
"kind": "bridge",
"backings": [
{ "chain": 2, "token": "000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7",
"decimals": 6, "locked": "0", "minted_today": "0", "mint_day": 20716,
"mint_cap_per_day": "10000000000000" }
]
},
"mint_nonce": 0,
"total_supply": "0",
"registered_at": 256
}
チェーン 20 では、行の id、id_text、名前、シンボル、バッキングは同じですが、zUSD は高さ 256 で登録されたのではなくジェネシスに記載されており(registered_at は 0)、供給量は 99 zUSD から始まりました。内訳は、Ethereum USDT にロックされた 22、BSC USDT の 22、Tron USDT の 30、Solana USDT の 25 で、チェーン 19 から引き継がれたものです。(チェーン 19 は 10 zUSD、すべて Solana から、チェーン 18 は Tron の 9 と Solana の 1 から始まりました。)各バッキングの行には、ローリングウィンドウのフィールド minted_in_window、mint_window_secs、mint_headroom も含まれます。
エクスプローラーが返す registration_fee は JSON の数値ですが、ノード自身の RPC は、あらゆる金額と同様に、これを 10 進数の文字列として返します。チェーン 20 では、チェーン 15 以降のすべてのチェーンと同様に、ノードの rand_getTokens は max_tokens(4096)、burn_registration_fee、bound_note_value(どちらも true)も返します(RPL tokens)。
4. ミントと権限の引き渡し
ミントできるのは Key 権限を持つトークンだけであり、その鍵によってのみ行えます。
rand --key wallet.key.json token mint \
--asset rpl1… \
--to rand1… \
--amount 5000 \
--authority-key exp-authority.key.json
--amount はトークンの表示単位で指定します。この 0 桁トークンでは 5000 は 5,000 基本単位であり、6 桁トークンでの 1.5 は 1,500,000 になります。ノートやプルーフを構築する前に、ウォレットはトークンの行を読み取り、トークンが Key 権限でない場合、または --authority-key がレジストリの指定する鍵でない場合は拒否します。成功すると、送信を報告し、minted <amount> (<base units> units) of asset <index> to <address> を出力します。--fee(デフォルトは 0.001 RAND)、--no-wait、--cuda は、token create の場合と同じように動作します。
ミントは受取人向けのノートを 1 つ追加し、総供給量を増やします。数量と受取人の公開鍵はワイヤ上に現れます。ミントは、ブリッジ経由のデポジットと同じく、設計上、公開されるイベントです。受取人がそのノートを動かした時点から、他のすべてと同じくシールドされます。手数料を支払うウォレット(--key)と、ミントを承認する鍵(--authority-key)は別の鍵であり、別の人が保持することもできます。
各ミントには、チェーン id、アセット id、レジストリが保持するカウンターに対して署名が行われ、チェーン 20 ではさらにジェネシスハッシュにも署名が行われます(rand-rpl-mint-2)。そのため、ミントをこのチェーン上でリプレイすることも、チェーン id を共有する別のチェーンへコピーすることもできません。set-authority も同じ方法で束縛されています。
権限を新しい鍵に移す、または完全に放棄するには、次のようにします。
rand --key wallet.key.json token set-authority \
--asset rpl1… \
--authority-key exp-authority.key.json \
--new-key next-authority.key.json
rand --key wallet.key.json token set-authority \
--asset rpl1… \
--authority-key exp-authority.key.json \
--renounce
--new-key は鍵ファイルを受け取り、トークンをそのファイルの公開鍵に引き渡します。--new-key と --renounce は、必ずどちらか一方だけを指定してください。コマンドは asset <index>'s mint authority is now <public key hex>、または asset <index>'s mint authority is renounced for good を出力します。どちらも、基本手数料 0.001 RAND と 1 回分のプルーフ生成がかかります。--renounce は、トークンを現在の供給量のままの固定供給トークンにします。これは不可逆です。権限は、鍵から鍵へ、または鍵から誰もいない状態へ移ることしかできず、それ以外はありません。固定供給で作成されたトークンが、ミント可能になることは決してありません。
5. 使う
送信
rand --key wallet.key.json send rand1… 250 --asset rpl1…
これは、このトークンを表示単位で 250 送信します。0 桁なら 250 EXP、2 桁なら 250.00 EXC(25,000 基本単位)です。受取人と数量は、RAND の場合と同じく位置引数です。プルーフ生成を始める前に、ウォレットは to fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <symbol> (<base units> units) という 1 行を出力し、send? [y/N] と尋ねます。フィンガープリントを受取人のものと照合し、基本単位が意図したものと一致していることを確認してください。--yes はこの確認を省略します。スクリプトでは必ず指定する必要があり、指定しない場合、stdin がターミナルでなければ拒否されます。--asset はインデックス、rpl1… 形式の id、または 64 文字の 16 進 id を受け取り、省略すると RAND を送信します。--memo <text> は、最大 510 バイトのテキストを、支払いのエンベロープ内で受取人宛てに封印します。これを許可したのはチェーン 18 が最初です。メモが存在することを示すものは、チェーン上には何もありません。--fee は常に RAND 建てで、デフォルトは 0.001 です。--no-wait と --cuda も使えます。id は、ノードのレジストリ一覧全体からインデックスに解決され、数値のインデックスはノードにまったく届かないため、ノードはどのトークンが動かされようとしているかを知らされません。これは RAND を動かすものと同じ rand send であり、プルーフ生成も同じです。トランザクションが公開するのは、4 つのヌリファイア、4 つのコミットメント、RAND 建ての手数料、時刻、4 つの暗号化されたエンベロープ、バンドルプルーフ、そしてチェーン 17 以降は認可コミットメントとそのプルーフであり、どのアセットが動いたかに関係なく同じです。観測者は、トークンの送金と RAND の支払いを区別できず、どのトークンだったかも分からず、送信者・受取人・数量も見えません。
手数料は同じバンドルの中から RAND で支払われるため、送信側のウォレットは RAND を保有している必要があります。ウォレットは、プルーフ生成を始める前にそれを確認します。
残高を確認する
rand --key wallet.key.json asset-balance 2 # one token, by index
rand --key wallet.key.json asset-balance # a row for every token this wallet holds
引数はレジストリのインデックスです。1 つのトークンについて、ウォレットは基本単位で asset <index> balance: <N> units を出力します。rand notes は、ウォレットが開いたすべてのノートを、その asset インデックスとともに一覧表示します。ウォレットは、ビューイングキーでチェーンをスキャンして自分のノートを見つけます。チェーン上には、ウォレットが参照できる残高を保持するものはありません。
バーン
rand --key wallet.key.json token burn rpl1… 100
アセットと数量は位置引数です。アセットはインデックス、rpl1…、または 16 進で指定し、数量は send --asset が読み取るのと同じく、トークンの表示単位で指定します。--fee のデフォルトは 0.001 RAND です。--no-wait と --cuda も使えます。
バーンは単位を破棄し、総供給量を減らします。ミントと同様に、これは公開される境界です。数量とトークンは見えますが、保有者は見えません。zUSD のようなブリッジ済みトークンは、この方法ではバーンできません。token burn はプルーフ生成の前にこれを拒否し、そのトークンは rand bridge-burn を通じて退出し、背後にあるコインが解放されます。
6. エクスプローラーで検証する
randscan.org は、トークンの公開される側面を誰にでも示します。登録情報、発行(mint)とバーン(burn)、そして総供給量です。すべてのトークンが randscan.org/tokens に一覧表示され、個別のトークンのページは /tokens/<rpl1…>、/tokens/<64 hex>、または /tokens/<index> です。randscan.org/tokens/1 は zUSD です。同じデータは GET /api/v1/tokens と GET /api/v1/tokens/:id でも取得できます。後者は、トークンのデプロイトランザクションと、登録・発行・バーンからなる供給量の履歴を返します(Explorer API)。
転送の公開ページにはアセットも金額も当事者も表示されません。チェーンがそれらを保持していないためです。監査人、取引相手、取引所など、他者に支払いを証明するには、鍵を渡します。
| 鍵 | 保有者に見えるもの |
|---|---|
| トランザクションキー | 1 つのトランザクションの 1 つの出力が開示されます。トークン、金額、当事者です |
| 閲覧鍵(viewing key) | ウォレットが送信または受信したすべてのノートが、同じ詳細とともに、またそれぞれが使用済みかどうかとともに見えます |
rand --key wallet.key.json tx-key <TX_HASH> # the keys for one transaction
rand --key wallet.key.json viewing-key # the wallet's viewing key, 64 hex characters
tx-key は、そのトランザクションのうち、このウォレットが送信、受信、またはお釣りとして保持した出力ごとに 1 行を表示します。出力(bundle:0 から bundle:3。バンドルの 4 つのスロットです)、役割、金額(RAND の場合は RAND 単位、トークンの場合は N (asset I))、そしてその出力を封印したトランザクション単位の鍵です。sent の行の鍵を渡してください。ウォレットはチェーンから鍵を復元できるため、過去のどのトランザクションに対しても機能します。
トランザクションキーを randscan のそのトランザクションのページに貼り付けると、その出力が開示されます。エクスプローラはアセットインデックスをレジストリと照合し、トークンを名前で表示して、小数桁数を適用します。閲覧鍵は randscan.org/viewing に入力します。エクスプローラは鍵を保持せず、サーバー上では何も復号しません。JSON-RPC では、同じ開示が rand_checkTransaction(hash, key) で行えます。どちらの鍵でも、資金を使うことはできません。閲覧鍵は共有すると取り戻せないため、証明が必要なのが 1 件の支払いだけであれば、トランザクションキーを選んでください。
7. ブリッジされたトークン
zUSD(“Shielded USD”)も RPL トークンであり、Bridge 権限を持ちます。その単位は、ガーディアンが Ethereum、Binance Smart Chain、Tron、または Solana 上の USDT もしくは USDC の入金を証明した場合にのみ発行され、供給量は常にそこにロックされている額と等しくなります。chain 14 の高さ 256 のトランザクションでインデックス 1、7 種類のバッキングとして登録され、以降のすべてのチェーン(chain 20 を含む)のジェネシスにも、同じ id rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx で再び記載されています。chain 15 は、chain 14 の停止時点で未償還だった 10 zUSD を引き継ぎ、chain 16 から 19 は同じ 10 zUSD で開始し、chain 20 は chain 19 で未償還だった 99 zUSD で開始しました。chain 20 では、ブリッジは各入金と各償還から 10 bps を zUSD で徴収し、トレジャリーノートに入れます(Bridge)。zUSD はバスケットです。そのバッキングは額面で統合されているため、保有者は預け入れた 1 種類のコインだけでなく、掲載されているすべてのコインのリスクを負います(RPL tokens)。供給量は入金と償還のたびに変動します。現在の値は rand token info 1 またはエクスプローラの /tokens/1 で確認できます。
以前のテストネットである chain 14 での経緯です(エクスプローラで 2026-09-20 に確認)。この表は chain 14 の履歴です。chain 14 は廃止されているため、これらのトランザクションは chain 20 のエクスプローラにはありません。
| 内容 | トランザクション(chain 14) | 高さ |
|---|---|---|
登録(register_bridged_token) | 7fa28fe6277a82401dcc440ff32da13c5e5763f79826fb17cc508f4c15abdd13 | 256 |
ブリッジによる発行(bridge_attest) | f2f24d75bc0e7d84dff1f4e4518a9d4bef115392492a39befca1528a2404851d | 2,572 |
| shielded な zUSD の転送 | e6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed | 3,259 |
ブリッジによるバーン(bridge_burn) | f9f365ca170a5fb51ff9381d7b5cc39538c1a621e5f6e8c1bd74d8751c7bbc49 | 3,481 |
転送のページに表示されたのは、あらゆるトークン転送に共通する内容、つまり 4 つのナリファイア、4 つのコミットメント、手数料であり、zUSD が動いたことを示すものは何もありませんでした。
鍵が何を開示するかを示すため、fullnode の v0.5 リリースノートでは、この chain 14 の転送について 2 つの鍵が公開されました。この目的のために作成され、他には何も保有していないデモウォレットのものです。
| 鍵 | 値 | 開示される内容 |
|---|---|---|
| 転送のトランザクションキー | 7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4ef | その 1 つのトランザクションの出力 bundle:0。アセット 1 の金額 100000000、すなわち 1 zUSD |
| デモウォレットの閲覧鍵 | a93c673ffeff7204447161347828d8e549b7070460813ae1b7e664694e1dcd5d | そのウォレットが送信または受信したすべてのノート |
chain 14 では、このトランザクションキーによって転送のページでその出力が開示され、JSON-RPC では 1 回の呼び出しで行えました(2026-09-20 に確認)。この呼び出しは chain 20 でも、ご自身のトランザクションに対して同じ形で使えます。この chain 14 の値を chain 20 のノードに渡すと null が返ります(2026-10-01 に確認)。このトランザクションを保持したことがないためです。
curl -s https://rpc.randprotocol.org -H 'content-type: application/json' -d '{
"jsonrpc": "2.0", "id": 1, "method": "rand_checkTransaction",
"params": ["e6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed",
"7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4ef"] }'
実際に使用しているウォレットの閲覧鍵は、決して公開しないでください。そのウォレットの全履歴が、永久に見えてしまいます。
通常のアドレスでは、ブリッジされたトークンを作成できません。rand token create は Bridge 権限を拒否します。ブリッジされたトークンの登録や、既存のトークンにコインを追加する操作には、ブリッジのポスト量子ガーディアンセットによる署名済みのクォーラムが必要です。それなしに自らを zUSD と名乗るトークンは、シンボルを借りただけの別のトークンにすぎません。これも rpl1… の id を確認すべき理由の 1 つです。ブリッジされたトークンは、Rand 上では常に小数桁数が 8 です。
Bridge では、入金、償還、ガーディアンセットについて説明しています。