Rand Protocol
Dokumentasi
Panduan

Mint dan burn

Bagaimana RAND masuk ke dalam pool - melalui deposit genesis dan faucet testnet - dan bagaimana RAND keluar darinya - melalui biaya dan kata burn dari sebuah bundle - serta apa yang dipublikasikan oleh setiap pergerakan.

Gunakan halaman ini untuk menjalankan faucet pada rantai uji, untuk memahami apa itu transaksi Mint pada tingkat kabel (wire), dan untuk melihat secara persis bagaimana sebuah bond atau burn bridge mengeluarkan nilai dari pool. Setiap masuk dan setiap keluar bersifat publik; segala sesuatu di antaranya adalah note.

Mint faucet

Mint adalah satu-satunya cara RAND dibuat setelah genesis pada chain 20, dan hanya ada pada rantai yang genesis-nya menyatakan "faucet": true. Mint adalah transaksi tanpa bundle yang ditandatangani validator:

Action::Mint { cm: Word8, pk: Word8, time: u32, r: Word8, envelope: Envelope, amount: u64,
               minter: PublicKey, signature: Signature }

rand_mint(address[, amount]) pada sebuah node validator membangun sebuah note senilai amount untuk alamat rand1… yang diberikan, menyegel envelope-nya dengan kunci pengirim sekali pakai, menandatangani mint dengan kunci Dilithium2 milik node itu sendiri, dan mengirimkannya melalui mempool normal — sehingga mint melewati konsensus dan setiap node menerapkannya. Batasnya adalah 100000000000 unit, yakni 100 RAND, per panggilan, dan nilai bawaannya adalah batas tersebut. Sejak chain 14, mint membawa opening dari note — pk, time, dan r — dan tanda tangan mencakupnya: admission menghitung ulang komitmen dari (pk, no sender, amount, asset 0, time, r) dan menolak cm yang tidak cocok dengan the mint's commitment does not open to its published note and amount, serta membatasi time pada jendela bundle. Parameter rand_mint tidak berubah. Pesan yang ditandatangani adalah blake3("rand-mint-2" ‖ bincode(chain_id, cm, pk, time, r, envelope, amount)) pada chain 14 hingga 19; pada chain 20, yang genesis-nya menetapkan binding_domain: 1, pesannya adalah rand-mint-3 atas hash genesis diikuti field yang sama, sehingga mint yang ditandatangani untuk satu rantai ditolak pada rantai lain mana pun, bahkan yang memakai chain id dan kunci validator yang sama. Seorang pengamat tidak memiliki kunci validator dan dijawab dengan faucet mints are signed by validators; ask a validator node; rantai tanpa flag tersebut menjawab faucet is disabled on this chain.

Faucet chain 20 aktif tetapi dibatasi oleh bagian staking pada genesis-nya, dengan nilai yang sama seperti chain 19:

rulechain 20refusal
recipientsan allowlist of 16 wallets (staking.faucet_recipients); the mint’s published pk must be on itthe faucet may not mint to this recipient (not in staking.faucet_recipients), permanent
budget10,000 RAND per 1,000-block epoch (staking.faucet_budget_per_epoch), across every validatorthe faucet budget of … for this epoch is exhausted (… minted); the next epoch admits it
minters18 of the 26 validators (staking.faucet_minters, listed since chain 16); the mint must be signed by one of themminter … is not a faucet minter on this chain

Jadi rand faucet bekerja pada chain 20 hanya untuk wallet yang ada dalam daftar, yang diminta kepada sebuah node validator yang kuncinya adalah minter terdaftar; alamat lain mana pun harus dibayar oleh seseorang yang memegang 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"

Yang bersifat publik: komitmen note baru, envelope-nya, jumlah dalam bentuk terbuka, serta kunci publik validator yang melakukan mint (ditampilkan sebagai alamatnya) beserta tanda tangannya. Opening juga mempublikasikan kunci pemilik note pk, sehingga pemilik note faucet bersifat publik, sebagaimana pembayaran sebuah withdraw; yang tetap tersembunyi adalah kapan dan di mana note itu kemudian dibelanjakan. Tautan satu lompatan dari “100 RAND dicetak” ke “ada sebuah note senilai 100 RAND” memiliki visibilitas yang sama dengan setoran dari transparan ke shielded di mana pun. Admission memeriksa bahwa faucet aktif, jumlahnya di bawah batas, anggaran epoch masih memiliki ruang, penerimanya ada dalam allowlist bila genesis memilikinya, komitmen terbuka menjadi note yang dipublikasikan, minter adalah seorang validator dan ada dalam daftar minter bila genesis memilikinya, dan tanda tangan terverifikasi; sebuah mint tidak membayar biaya.

rand_getTransaction menampilkannya sebagai { "kind": "mint", "cm": "…", "amount": "100000000000", "minter": "<validator base58>" } dengan "bundle": null — jumlahnya adalah string desimal, seperti setiap jumlah u64 yang disajikan RPC sejak chain 14; explorer mencantumkannya di bawah kind=mint, salah satu dari sedikit jenis dengan amount publik.

Setoran genesis

Cara lain nilai masuk adalah berkas genesis: setiap --alloc rand1<address>=<RAND> pada rand-node genesis menjadi satu note setoran { cm, envelope, amount, opening } dengan keacakan komitmen yang baru, yaitu daun-daun pertama dari pohon. Chain 20 memiliki sembilan note genesis: tujuh note RAND, seluruhnya 5.184,243719258 RAND (genesis_deposited), saldo operator yang dibawa dari snapshot chain 19, dan dua note zUSD sebesar 10 dan 89 zUSD, yakni 99 zUSD kustodi bridge yang dibawa dari chain 19 (Bridge), yang bukan RAND dan tidak dihitung dalam genesis_deposited. RAND yang dipegang di chain 19 oleh wallet yang tidak dipegang operator, sekitar 520 RAND, serta fee validator yang belum ditarik tidak dibawa. Riwayat: chain 19 memiliki delapan, tujuh note RAND sebesar 5.294,644359629 RAND dan satu note 10 zUSD; chain 18 memiliki enam note RAND, lima sebesar 1.000 RAND dan satu sebesar 300 RAND; chain 14 dan 15 memiliki lima note sebesar 1.000 RAND. Jumlahnya bersifat publik sehingga semua orang dapat menjumlahkan suplai awal, dan sejak chain 14 note juga membawa opening-nya, sehingga pemilik note genesis bersifat publik secara sengaja. Memotong ulang alokasi yang sama menghasilkan note yang berbeda dan hash genesis yang berbeda, dengan sengaja.

Burn

Setiap transaksi membawa satu bundle aset tersembunyi berslot empat, dan bundle itu memiliki dua kata burn: burn_r adalah RAND yang keluar dari pool ke tempat publik, dan burn_a adalah sejumlah token yang disebut oleh burn_asset. Guest bundle menyeimbangkan kedua kelompok dalam satu bukti, dan admission mensyaratkan ketiganya nol kecuali pada aksi-aksi berikut:

burnrulewhere the value goes
a Bond’s bundleburn_r == amountthe validator’s public stake in the register
a BridgeBurn’s bundleburn_asset == asset, burn_a == amount, burn_r == 0, asset != 0destroyed on Rand; the source-chain contract releases amount of the named coin against the guardian-signed burn message. On chain 20 the chain keeps a 10 bps fee as a zUSD note to the treasury and the release is amount − fee
a TokenBurn’s bundlethe same shape as a bridge burn’sdestroyed; the RPL token’s public total_supply drops by exactly that
an Invoke’s bundle (RPL-2, chain 20)burn_r, and burn_a of burn_asset, as the program’s transition declaresRAND and tokens deposited into the program’s public vault, or the program’s own token destroyed; a vault pays out again only as chain-computed notes (Programs)

(Bundle sebuah register_aggregator juga membakar bond genesis-nya melalui burn_r; agregasi nonaktif pada chain 20.)

Burn bukanlah fee. Burn sebuah bond adalah RAND yang berpindah dari pool ke register dan dihitung dalam burned pada audit suplai (serta muncul kembali dalam register_total). Sebuah bridge burn adalah satu bundle sejak chain 14 (sebelumnya dua): slot 0–1 membakar aset yang dijembatani dan slot 2–3 membayar fee, sehingga ia menyentuh suplai RAND hanya melalui fee itu, BRIDGE_BURN_FEE, 0,01 RAND. Ia harus menyebut koin yang mendukung aset tersebut, melepaskan bilangan bulat unit koin itu, dan muat dalam apa yang telah dikunci oleh dukungan tersebut (Bridge). Pada chain 20, bridge.fees pada genesis-nya juga mengambil 10 bps dari setiap mint dan burn bridge dalam zUSD: sebuah setoran dikreditkan sebesar jumlah bruto dikurangi fee dan sebuah burn melepaskan amount − fee, masing-masing fee berupa note zUSD shielded untuk treasury. Note fee tetap diterbitkan dan didukung, sehingga total_supply == Σ locked zUSD tetap berlaku; ia bukan perpindahan RAND dan tidak masuk ke audit suplai RAND. Sebuah TokenBurn membayar base bundle sebesar 0,001 RAND; token yang dijembatani ditolak di sana dan keluar melalui bridge-burn.

Satu fee juga merupakan burn pada chain 20, seperti pada setiap rantai sejak 15: genesis-nya menetapkan tokens.burn_registration_fee, sehingga registration_fee sebesar 1 RAND dari sebuah RegisterToken atau RegisterBridgedToken dimusnahkan alih-alih dibayarkan kepada proposer, yang hanya mempertahankan base bundle. Ia dihitung dalam burned dan, secara terpisah, dalam 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

Fee adalah jalur keluar lainnya

fee setiap bundle keluar dari pool menuju rewards milik proposer blok, sebuah field register publik, dan kembali ke pool hanya ketika validator menariknya sebagai note (Staking). Sebuah Withdraw membayar base 0,001 RAND dari jumlah yang ditarik kepada proposer blok yang menerapkannya; base itu tidak pernah meninggalkan register, sehingga bukan sebuah persilangan.

Bagaimana suplai bergerak

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 dan program_rand_out baru pada chain 20 (RPL-2): RAND yang dibakar oleh sebuah Invoke ke vault program melalui burn_r dihitung dalam burned di sisi pool dan ditahan di vault, dan apa yang dibayarkan vault sebagai note kembali ke pool. rand_getSupply menyajikan keduanya, beserta invariant_holds.

Hanya mint faucet yang menambah jumlah yang telah diterbitkan oleh chain, dan pada chain 20 hanya biaya registrasi yang dibakar yang mengurangi jumlah tersebut: slashed akan menghitung bond aggregator yang di-slash atau, di bawah bagian genesis staking.slashing, stake validator yang di-slash, dan chain 20 tidak memiliki keduanya (agregasi dinonaktifkan dan slashing bernilai null). Bond, biaya, penarikan, dan setoran vault memindahkan nilai antara pool, register, dan vault, serta tidak menciptakan apa pun. Supply memuat penghitung beserta contoh perhitungannya. Subsidi agregasi blok — RAND baru per blok yang disegel menurut jadwal halving, dibayarkan kepada aggregator sebagai note setoran — akan menjadi penerbitan terjadwal pertama, dan subsidi ini tidak aktif pada chain 20.

Terakhir diverifikasi terhadap commit fullnode c0878c3f (chain 21) pada 2026-10-12. Jika kode dan halaman ini tidak sesuai, kodelah yang benar; beri tahu kami.