Rand Protocol
Dokumentasi
Konsep teras

Bekalan

Bagaimana RAND diterbitkan dan dimusnahkan, lintasan awam merentasi sempadan pool, penerbitan genesis chain 20, dan invarian audit bekalan yang disemak oleh setiap nod.

Gunakan halaman ini untuk membaca rand_getSupply dengan betul dan untuk menaakul tentang pengeluaran: dari mana RAND datang, ke mana ia pergi, dan identiti yang menjadikan bekalan sesebuah rantaian terlindung tepat walaupun tiada sesiapa dapat menjumlahkan nota-notanya.

Dari mana RAND datang dan ke mana ia pergi

Rantaian terlindung tidak dapat menjumlahkan wangnya sendiri: nilai sesebuah nota terkandung di dalam komitmennya. Yang terbuka kepada umum ialah setiap lintasan merentasi sempadan kolam. Terdapat lima jenis, dan tujuh pada rantaian yang mempunyai peti simpanan program (RPL-2, chain 20):

arahlintasanbila
masuksatu nota deposit genesis (alloc dalam fail genesis, dibuka sejak chain 14)blok 0
masuksatu pencetakan faucet (Mint, sehingga 100 RAND, ditandatangani validator, membawa pembukaan nota sejak chain 14)rantaian testnet dengan "faucet": true; pada chain 20 hanya kepada 16 dompet dalam senarai dibenarkan, ditandatangani oleh salah satu daripada 18 pencetak yang disenaraikan dalam genesis, paling banyak 10,000 RAND bagi setiap epok 1,000 blok
masukWithdraw seorang validator, yang membayar kepentingan dan ganjaran yang dilepaskan ke dalam sebuah notabila-bila masa
keluarfee sesuatu bundle, ke dalam rewards pencadang bloksetiap bundle
keluarburn_r sesuatu bundle: Bond yang membakar kepentingan ke dalam stake awam seorang validatorsetiap bond
keluarburn_r sesuatu Invoke: RAND yang didepositkan ke dalam peti simpanan awam sesebuah programchain 20, sejak v0.6.8
masukbayaran keluar peti simpanan: RAND yang dibayar keluar oleh sesuatu Invoke daripada peti simpanan sesebuah program sebagai nota, jumlah dan penerimanya terbuka kepada umumchain 20, sejak v0.6.8

Pada rantaian yang genesisnya menetapkan tokens.burn_registration_fee, seperti chain 20, registration_fee sebanyak 1 RAND bagi pendaftaran token juga meninggalkan kolam melalui burned, tetapi tidak memasuki sebarang entri daftar: ia dimusnahkan, dan pencadang hanya menyimpan asas bundle.

Di sebelah kolam terdapat daftar validator, yang menyimpan jumlah secara terbuka kerana pemberat konsensus mesti awam. Kepentingan dalam daftar ialah RAND sebenar: ia boleh dinyahikat dan dikeluarkan semula ke dalam sebuah nota. Pada chain 20, peti simpanan program ialah baki awam kedua di sebelahnya: RAND yang didepositkan oleh sesuatu invoke kekal boleh dikira di sana sehingga satu bayaran keluar mengembalikannya ke kolam sebagai nota.

Tiada ganjaran blok dan tiada inflasi pada chain 20. Pengeluaran berjadual pertama rantaian ini ialah subsidi pengagregatan blok — sejumlah RAND baharu yang menyusut bagi setiap blok yang dimeterai, dibayar kepada pengagregat yang buktinya meliputi blok itu — dan ia tidak aktif pada chain 20 (Proofs). Chain 20 ialah rantaian baharu, beroperasi pada 2026-10-01 pukul 06:17 UTC, dipotong daripada chain 19 (fullnode v0.6.8, satu hard fork). Genesisnya mengeluarkan 31,184.243719258 RAND: 26,000 dipertaruhkan merentasi 26 validator genesis dan 5,184.243719258 dalam tujuh nota deposit, iaitu baki tujuh dompet operator yang dibawa dari chain 19. Apa yang dipegang oleh dompet lain pada chain 19, kira-kira 519.9 RAND (pencetakan faucet kepada penerima dalam senarai dibenarkan, bayaran kepada pengguna), tidak dibawa, kerana sesebuah nota tidak dapat dicipta semula tanpa alamat pemiliknya; begitu juga 0.499 RAND ganjaran validator yang belum dikeluarkan. Dua lagi nota genesis, sembilan kesemuanya, membawa 99 zUSD milik jambatan (10 dan 89), yang bukan RAND dan berada di luar audit ini. rand_getSupply pada chain 20 membaca genesis_deposited 5,184,243,719,258 unit dan invariant_holds: true (ketinggian 3,037, 2026-10-01). Chain 19, dipotong pada hari yang sama daripada syot kilat chain 18 pada ketinggian 141,935, mengeluarkan 31,294.644359629 RAND: 26,000 yang sama dipertaruhkan dan 5,294.644359629 dalam tujuh nota, di samping satu nota 10 zUSD. Setiap pencetakan faucet sejak itu menambah kepada angka yang dikeluarkan, dan setiap yuran pendaftaran yang dibakar mengurangkannya. Chain 15, dipotong pada 2026-09-26, mengeluarkan 23,000 RAND semasa genesis, 18,000 dipertaruhkan merentasi 18 validator dan 5,000 dalam lima nota; lapan validator berikutnya membuat bond daripada nota sedia ada, yang tidak mengeluarkan apa-apa.

Token berada di luar audit ini

Lintasan di atas adalah milik RAND. Sesuatu token RPL, yang dijambatankan atau natif, tidak pernah merentasi sempadan RAND: indeks aset 0 dikhaskan untuk RAND dan daftar token tidak pernah memberikannya, maka BridgeAttest, TokenMint atau pencetakan awal sesuatu pendaftaran sentiasa mendepositkan nota bagi aset lain, dan burn_a bagi BridgeBurn atau TokenBurn sentiasa memusnahkannya (RAND yang dibakar melalui burn_a ditolak). fees_paid dan burned dikira daripada fee dan burn_r sesuatu bundle sahaja, dan pemindahan token di dalam kolam tidak menggerakkan sebarang pembilang, kerana asetnya tidak terbuka kepada umum. Pada chain 20, sesuatu Invoke juga boleh mengambil token masuk melalui burn_a: ke dalam peti simpanan program (deposit), yang membiarkan bekalannya tidak berubah, atau dimusnahkan (burn), bagi token milik program itu sendiri sahaja. Nota yuran jambatan (chain 20, 10 bps daripada setiap deposit dan pembakaran zUSD, ke alamat perbendaharaan) ialah zUSD, bukan RAND: dikeluarkan dan disokong, maka sokongan dan bekalan sesuatu deposit bergerak sebanyak jumlah kasar manakala sokongan dan bekalan sesuatu pembakaran berkurang sebanyak amount − fee. Bekalan sesuatu token ialah kiraan awam daftar: rand_getTokenSupply mengembalikan total_supply dan, bagi token yang dijambatankan, jumlah locked setiap sokongan, yang apabila dicampurkan menyamai bekalan itu (RPL tokens).

Identiti audit

Enam pembilang monotonik dalam unit (1 RAND = 10⁹), dua yang merekodkan apa yang dimusnahkan, dan pada chain 20 dua untuk peti simpanan program:

pembilangmenjumlahkan
genesis_depositednota deposit alloc dalam fail genesis
genesis_stakedkepentingan yang digunakan genesis untuk menyemai daftar
faucet_mintedsetiap Mint yang diterima
withdraw_depositednota yang dicipta oleh Withdraw yang diterima (amount − 0.001 RAND setiap satu)
fees_paidsetiap yuran bundle
burnedsetiap burn_r bundle (kepentingan sesuatu Bond, dan pada chain 20 deposit peti simpanan sesuatu invoke), dan setiap yuran pendaftaran yang dibakar
slashedbond pengagregat yang dipotong (pengagregatan blok; 0 selagi ia dimatikan)
registration_fees_burnedyuran pendaftaran yang dibakar di bawah tokens.burn_registration_fee, turut terkandung dalam burned
program_rand_outnota RAND yang telah dibayar keluar oleh peti simpanan program (RPL-2; 0 tanpa seksyen program_state)
program_rand_heldRAND yang masih dipegang peti simpanan: burn_r setiap invoke ditolak program_rand_out. Ia sampai ke sana melalui burned, maka ia ialah bahagian peti simpanan bagi pembilang itu
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 ialah apa yang masuk ditolak apa yang keluar — nombor yang sama dengan jumlah nota, yang tidak dapat dikira oleh sesiapa. Asas 0.001 RAND bagi sesuatu withdraw bukan satu lintasan: ia berpindah daripada satu baris daftar kepada baris pencadang, dan hanya nota yang merentasi sempadan. invariant_holds bernilai false ialah pepijat konsensus atau pangkalan data yang rosak, tidak pernah keadaan yang sah. Dua sebutan program bernilai sifar pada rantaian tanpa peti simpanan program, maka identiti di sana ialah identiti chain 19. Seksyen vesting dalam genesis, yang tidak pernah ada pada mana-mana rantaian, akan menambah daftar awam ketiga dengan cara yang sama (JSON-RPC).

Diikuti melalui satu bond dan satu withdraw sebanyak 1,000 RAND pada rantaian yang mendepositkan 2,000 dan mempertaruhkan 4,000:

selepasburnedwithdraw_depositedfees_paidpool_valueregister_totaltotal_supply
genesis0002,0004,0006,000
bond sebanyak 1,000 (yuran 0.001)1,00000.001999.9995,000.0016,000
unbond-nya1,00000.001999.9995,000.0016,000
withdraw-nya sebanyak 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 ialah rentetan perpuluhan dalam unit, kerana nombor JSON bukan integer yang tepat melebihi 2⁵³. Objek penuh membawa lebih banyak medan daripada yang ditunjukkan di sini, antaranya pasangan faucet bagi setiap epok faucet_epoch dan faucet_minted_in_epoch, yang disemak oleh chain 20 terhadap belanjawannya, program_rand_out dan program_rand_held (sejak v0.6.8), serta empat pembilang vesting_* yang bernilai "0" pada chain 20, yang genesisnya tidak mempunyai seksyen vesting (JSON-RPC). Penjelajah menyajikan objek yang sama pada GET /supply dan angka utama pada GET /stats.

Setepat mana ia

Bagi segala yang dilakukan oleh rantaian itu sendiri, pembilang adalah tepat: setiap satu ditokok dalam laluan kod yang menerapkan tindakan itu, daripada medan awam tindakan itu sendiri.

Dua entri dahulunya bergantung pada satu dakwaan, dan chain 14 menjadikan kedua-duanya semakan (audit v3, POOL-1):

  • Mint faucet membawa pembukaan nota tersebut. Selain cm dan amount, tindakan itu menerbitkan pk, time dan r. Kemasukan mengira semula komitmen bagi (pk, no sender, amount, asset 0, time, r) dan menolak ketidakpadanan dengan the mint's commitment does not open to its published note and amount, serta mengekang time dalam tetingkap bundle. Pemint menandatangani ketujuh-tujuh medan di bawah domain rand-mint-2. Sebelum ini, seorang validator boleh menerbitkan satu amaun dan memeterai nota yang bernilai amaun lain. Kosnya ialah pemilik nota faucet, pk, menjadi awam, sebagaimana bayaran keluar sesuatu withdraw; parameter rand_mint tidak berubah.
  • Nota alloc genesis turut membawa pembukaannya. Pada rantaian yang mempunyai bahagian tokens, setiap baris ialah { cm, envelope, amount, opening: { pk, time, r } }, dan nod mengira semula komitmen itu, pada asset 0 melainkan pembukaan itu menamakan asset token yang disenaraikan, serta menolak fail genesis yang cm-nya tidak sepadan. Hanya baris asset-0 yang dikira dalam genesis_deposited. cm legap merupakan satu-satunya cara seorang pengarang genesis dapat memasukkan nota tanpa sandaran, daripada sebarang aset, ke dalam kolam tanpa sesiapa dapat menyemaknya. Pemilik dan amaun nota genesis oleh itu awam secara reka bentuk sebaik sahaja fail itu diterbitkan; hanya bila dan ke dalam apa nota itu dibelanjakan kemudian yang kekal persendirian. rand-node genesis sentiasa menulis pembukaan tersebut.

Pada rantaian yang dipotong tanpa bahagian tokens, peraturan lama masih terpakai: genesis_deposited ialah jumlah medan amount yang diisytiharkan, dipercayai daripada fail genesis. Kedua-dua amaun genesis berada dalam hash genesis, maka setiap nod bersetuju mengenainya dalam kedua-dua keadaan.

Pembilang itu sengaja bukan keadaan konsensus — punca keadaan (state root) tidak meng-hash-nya — dan rand-node verify --mode quick mengira semula setiap satu dengan memainkan semula rantaian, serta melaporkan ketidakpadanan jika snapshot yang disimpan tidak selaras.

Disahkan kali terakhir terhadap commit fullnode c0878c3f (rantai 21) pada 2026-10-12. Jika kod dan halaman ini tidak selari, kodlah yang betul; sila maklumkan kepada kami.