Rand Protocol
Dokumentasi
Konsep inti

Suplai

Bagaimana RAND diterbitkan dan dimusnahkan, lintasan publik pada batas pool, penerbitan genesis chain 20, dan invarian audit suplai yang diperiksa oleh setiap node.

Gunakan halaman ini untuk membaca rand_getSupply dengan benar dan untuk menalar penerbitan: dari mana RAND berasal, ke mana RAND pergi, dan identitas yang membuat suplai sebuah chain terlindung tepat meskipun tidak seorang pun dapat menjumlahkan catatannya.

Dari mana RAND berasal dan ke mana perginya

Sebuah chain terlindung tidak dapat menjumlahkan uangnya sendiri: nilai sebuah catatan berada di dalam komitmennya. Yang bersifat publik adalah setiap lintasan pada batas kolam. Ada lima jenis, dan tujuh pada chain dengan vault program (RPL-2, chain 20):

arahlintasankapan
masukcatatan setoran genesis (alloc dalam berkas genesis, terbuka sejak chain 14)blok 0
masukpencetakan faucet (Mint, hingga 100 RAND, ditandatangani validator, membawa pembukaan catatan sejak chain 14)chain testnet dengan "faucet": true; pada chain 20 hanya untuk 16 wallet dalam daftar izin, ditandatangani oleh salah satu dari 18 pencetak yang tercantum di genesis, paling banyak 10,000 RAND per epoch 1,000 blok
masukWithdraw milik validator, yang membayarkan stake dan reward yang dilepaskan ke dalam sebuah catatankapan saja
keluarfee sebuah bundle, ke rewards milik proposer bloksetiap bundle
keluarburn_r sebuah bundle: Bond yang membakar stake menjadi stake publik milik validatorsetiap bond
keluarburn_r sebuah Invoke: RAND yang disetorkan ke vault publik milik programchain 20, sejak v0.6.8
masukpembayaran vault: RAND yang dibayarkan sebuah Invoke dari vault program sebagai catatan, dengan jumlah dan penerimanya bersifat publikchain 20, sejak v0.6.8

Pada chain yang genesisnya menetapkan tokens.burn_registration_fee, seperti genesis chain 20, registration_fee sebesar 1 RAND untuk pendaftaran token juga keluar dari kolam melalui burned, tetapi tidak masuk ke entri register mana pun: biaya itu dimusnahkan, dan proposer hanya menyimpan biaya dasar bundle.

Di samping kolam terdapat register validator, yang menyimpan jumlah secara terbuka karena bobot konsensus harus bersifat publik. Stake dalam register adalah RAND yang nyata: stake dapat di-unbond dan ditarik kembali ke dalam sebuah catatan. Pada chain 20, vault program merupakan saldo publik kedua di sampingnya: RAND yang disetorkan sebuah invoke tetap dapat dihitung di sana sampai sebuah pembayaran mengembalikannya ke kolam sebagai catatan.

Tidak ada reward blok dan tidak ada inflasi pada chain 20. Penerbitan terjadwal pertama chain ini adalah subsidi agregasi blok — sejumlah RAND baru yang menurun per blok yang disegel, dibayarkan kepada agregator yang buktinya mencakup blok tersebut — dan subsidi itu tidak aktif pada chain 20 (Proofs). Chain 20 adalah chain baru, aktif sejak 2026-10-01 pukul 06:17 UTC, dipotong dari chain 19 (fullnode v0.6.8, sebuah hard fork). Genesisnya menerbitkan 31,184.243719258 RAND: 26,000 di-stake pada 26 validator genesis dan 5,184.243719258 dalam tujuh catatan setoran, yaitu saldo tujuh wallet operator yang dibawa dari chain 19. Apa yang dipegang wallet lain pada chain 19, sekitar 519.9 RAND (pencetakan faucet untuk penerima dalam daftar izin, pembayaran kepada pengguna), tidak dibawa, karena sebuah catatan tidak dapat dibuat ulang tanpa alamat pemiliknya; demikian pula 0.499 RAND reward validator yang belum ditarik. Dua catatan genesis lagi, sembilan seluruhnya, membawa 99 zUSD milik bridge (10 dan 89), yang bukan RAND dan berada di luar audit ini. rand_getSupply pada chain 20 menunjukkan genesis_deposited 5,184,243,719,258 unit dan invariant_holds: true (tinggi 3,037, 2026-10-01). Chain 19, dipotong pada hari yang sama dari snapshot chain 18 pada tinggi 141,935, menerbitkan 31,294.644359629 RAND: 26,000 yang sama di-stake dan 5,294.644359629 dalam tujuh catatan, di samping satu catatan 10 zUSD. Setiap pencetakan faucet sejak itu menambah angka yang diterbitkan, dan setiap biaya pendaftaran yang dibakar mengurangkannya. Chain 15, dipotong pada 2026-09-26, menerbitkan 23,000 RAND pada genesis, 18,000 di-stake pada 18 validator dan 5,000 dalam lima catatan; kedelapan validator berikutnya melakukan bond dari catatan yang sudah ada, yang tidak menerbitkan apa pun.

Token berada di luar audit ini

Lintasan di atas adalah milik RAND. Token RPL, baik yang di-bridge maupun native, tidak pernah melintasi batas RAND: indeks aset 0 dicadangkan untuk RAND dan registri token tidak pernah memberikannya, sehingga BridgeAttest, TokenMint, atau pencetakan awal sebuah pendaftaran selalu menyetorkan catatan dari aset lain, dan burn_a pada BridgeBurn atau TokenBurn selalu memusnahkannya (RAND yang dibakar melalui burn_a ditolak). fees_paid dan burned dihitung hanya dari fee dan burn_r sebuah bundle, dan transfer token di dalam kolam tidak menggerakkan penghitung mana pun, karena asetnya bahkan tidak bersifat publik. Pada chain 20, sebuah Invoke juga dapat memasukkan token melalui burn_a: ke dalam vault program (deposit), yang membiarkan suplainya tidak berubah, atau dimusnahkan (burn), hanya untuk token milik program itu sendiri. Catatan biaya bridge (chain 20, 10 bps dari setiap setoran dan pembakaran zUSD, ke sebuah alamat treasury) adalah zUSD, bukan RAND: diterbitkan dan didukung, sehingga cadangan dan suplai sebuah setoran bergerak sebesar jumlah bruto, sedangkan penurunan pada sebuah pembakaran sebesar amount − fee. Suplai sebuah token adalah hitungan publik dari registri: rand_getTokenSupply mengembalikan total_supply dan, untuk token yang di-bridge, jumlah locked dari setiap cadangan, yang bila dijumlahkan sama dengan total tersebut (RPL tokens).

Identitas audit

Enam penghitung monotonik dalam unit (1 RAND = 10⁹), dua yang mencatat apa yang dimusnahkan, dan pada chain 20 dua untuk vault program:

penghitungmenjumlahkan
genesis_depositedcatatan setoran alloc dalam berkas genesis
genesis_stakedstake yang menjadi bibit register pada genesis
faucet_mintedsetiap Mint yang diterima
withdraw_depositedcatatan yang dibuat oleh Withdraw yang diterima (amount − 0.001 RAND masing-masing)
fees_paidsetiap fee bundle
burnedsetiap burn_r bundle (stake sebuah Bond, dan pada chain 20 setoran vault sebuah invoke), dan setiap biaya pendaftaran yang dibakar
slashedbond agregator yang di-slash (agregasi blok; 0 selama agregasi nonaktif)
registration_fees_burnedbiaya pendaftaran yang dibakar berdasarkan tokens.burn_registration_fee, juga termasuk dalam burned
program_rand_outcatatan RAND yang telah dibayarkan vault program (RPL-2; 0 tanpa bagian program_state)
program_rand_heldRAND yang masih dipegang vault: burn_r setiap invoke dikurangi program_rand_out. RAND itu sampai di sana melalui burned, sehingga ini adalah sisi vault dari penghitung tersebut
pool_value     = genesis_deposited + faucet_minted + withdraw_deposited + program_rand_out − fees_paid − burned
register_total = Σ over the register of (stake + pending + rewards)
total_supply   = pool_value + register_total + program_rand_held
issued         = genesis_deposited + genesis_staked + faucet_minted

invariant:       total_supply == issued − slashed − registration_fees_burned

pool_value adalah yang masuk dikurangi yang keluar — angka yang sama dengan jumlah catatan, yang tidak dapat dihitung siapa pun. Biaya dasar 0.001 RAND pada sebuah withdraw bukan sebuah lintasan: biaya itu berpindah dari satu baris register ke baris milik proposer, dan hanya catatannya yang melintas. invariant_holds bernilai false adalah bug konsensus atau database yang rusak, bukan keadaan yang sah. Kedua suku program bernilai nol pada chain tanpa vault program, sehingga identitasnya di sana sama dengan identitas chain 19. Bagian genesis vesting, yang belum pernah dimiliki chain mana pun, akan menambahkan register publik ketiga dengan cara yang sama (JSON-RPC).

Diikuti melalui satu bond dan satu withdraw sebesar 1,000 RAND pada chain yang menyetorkan 2,000 dan melakukan stake 4,000:

setelahburnedwithdraw_depositedfees_paidpool_valueregister_totaltotal_supply
genesis0002,0004,0006,000
bond sebesar 1,000 (fee 0.001)1,00000.001999.9995,000.0016,000
unbond-nya1,00000.001999.9995,000.0016,000
withdraw-nya sebesar 1,0001,000999.9990.0011,999.9984,000.0026,000

Membacanya

curl -s http://127.0.0.1:8545 -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"rand_getSupply","params":[]}'
{ "height": 1998,
  "genesis_deposited": "2000000000000", "genesis_staked": "4000000000000",
  "faucet_minted": "0", "withdraw_deposited": "999999000000",
  "fees_paid": "1000000", "burned": "1000000000000",
  "slashed": "0", "registration_fees_burned": "0",
  "pool_value": "1999998000000", "register_total": "4000002000000",
  "total_supply": "6000000000000", "invariant_holds": true }

Setiap jumlah adalah string desimal berisi unit, karena angka JSON bukan bilangan bulat yang tepat di atas 2⁵³. Objek lengkapnya membawa lebih banyak bidang daripada yang ditampilkan di sini, di antaranya pasangan per epoch faucet faucet_epoch dan faucet_minted_in_epoch, yang diperiksa chain 20 terhadap anggarannya, program_rand_out dan program_rand_held (sejak v0.6.8), serta empat penghitung vesting_* yang bernilai "0" pada chain 20, yang genesisnya tidak memiliki bagian vesting (JSON-RPC). Explorer menyajikan objek yang sama pada GET /supply dan angka-angka utamanya pada GET /stats.

Seberapa tepat

Untuk semua yang dilakukan chain sendiri, penghitungnya tepat: masing-masing bertambah pada jalur kode yang menerapkan aksi tersebut, dari bidang publik milik aksi itu sendiri.

Dua entri dahulu bertumpu pada sebuah klaim, dan chain 14 mengubah keduanya menjadi pemeriksaan (audit v3, POOL-1):

  • Mint faucet membawa pembukaan (opening) note. Selain cm dan amount, aksi ini menerbitkan pk, time, dan r. Proses admisi menghitung ulang komitmen dari (pk, no sender, amount, asset 0, time, r) dan menolak ketidakcocokan dengan pesan the mint's commitment does not open to its published note and amount, serta membatasi time pada jendela bundel. Minter menandatangani ketujuh bidang tersebut di bawah domain rand-mint-2. Sebelum ini, sebuah validator dapat menerbitkan satu jumlah dan menyegel note yang bernilai lain. Konsekuensinya, pk pemilik note faucet bersifat publik, sebagaimana pembayaran withdraw; parameter rand_mint tidak berubah.
  • Note alloc genesis juga membawa pembukaannya. Pada chain dengan bagian tokens, setiap baris berbentuk { cm, envelope, amount, opening: { pk, time, r } }, dan sebuah node menghitung ulang komitmen tersebut, pada asset 0 kecuali opening menyebutkan asset token yang terdaftar, serta menolak berkas genesis yang cm-nya tidak cocok. Hanya baris asset 0 yang dihitung dalam genesis_deposited. cm yang buram adalah satu-satunya cara bagi penyusun genesis untuk memasukkan note tanpa jaminan, dari aset apa pun, ke dalam pool tanpa ada pihak yang dapat memeriksanya. Pemilik dan jumlah note genesis karena itu bersifat publik secara desain begitu berkas diterbitkan; hanya kapan dan ke mana note itu kemudian dibelanjakan yang tetap privat. rand-node genesis selalu menulis opening tersebut.

Pada chain yang dibuat tanpa bagian tokens, aturan lama tetap berlaku: genesis_deposited adalah jumlah dari bidang amount yang dideklarasikan, dipercaya dari berkas genesis. Kedua jumlah genesis tercantum dalam hash genesis, sehingga setiap node menyepakatinya dalam kedua kasus.

Penghitung-penghitung ini sengaja bukan bagian dari status konsensus — state root tidak meng-hash-nya — dan rand-node verify --mode quick menghitung ulang masing-masing dengan memutar ulang chain, serta melaporkan ketidakcocokan jika snapshot yang tersimpan berbeda.

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.