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):
| arah | lintasan | bila |
|---|---|---|
| masuk | satu nota deposit genesis (alloc dalam fail genesis, dibuka sejak chain 14) | blok 0 |
| masuk | satu 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 |
| masuk | Withdraw seorang validator, yang membayar kepentingan dan ganjaran yang dilepaskan ke dalam sebuah nota | bila-bila masa |
| keluar | fee sesuatu bundle, ke dalam rewards pencadang blok | setiap bundle |
| keluar | burn_r sesuatu bundle: Bond yang membakar kepentingan ke dalam stake awam seorang validator | setiap bond |
| keluar | burn_r sesuatu Invoke: RAND yang didepositkan ke dalam peti simpanan awam sesebuah program | chain 20, sejak v0.6.8 |
| masuk | bayaran keluar peti simpanan: RAND yang dibayar keluar oleh sesuatu Invoke daripada peti simpanan sesebuah program sebagai nota, jumlah dan penerimanya terbuka kepada umum | chain 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:
| pembilang | menjumlahkan |
|---|---|
genesis_deposited | nota deposit alloc dalam fail genesis |
genesis_staked | kepentingan yang digunakan genesis untuk menyemai daftar |
faucet_minted | setiap Mint yang diterima |
withdraw_deposited | nota yang dicipta oleh Withdraw yang diterima (amount − 0.001 RAND setiap satu) |
fees_paid | setiap yuran bundle |
burned | setiap burn_r bundle (kepentingan sesuatu Bond, dan pada chain 20 deposit peti simpanan sesuatu invoke), dan setiap yuran pendaftaran yang dibakar |
slashed | bond pengagregat yang dipotong (pengagregatan blok; 0 selagi ia dimatikan) |
registration_fees_burned | yuran pendaftaran yang dibakar di bawah tokens.burn_registration_fee, turut terkandung dalam burned |
program_rand_out | nota RAND yang telah dibayar keluar oleh peti simpanan program (RPL-2; 0 tanpa seksyen program_state) |
program_rand_held | RAND 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:
| selepas | burned | withdraw_deposited | fees_paid | pool_value | register_total | total_supply |
|---|---|---|---|---|---|---|
| genesis | 0 | 0 | 0 | 2,000 | 4,000 | 6,000 |
| bond sebanyak 1,000 (yuran 0.001) | 1,000 | 0 | 0.001 | 999.999 | 5,000.001 | 6,000 |
| unbond-nya | 1,000 | 0 | 0.001 | 999.999 | 5,000.001 | 6,000 |
| withdraw-nya sebanyak 1,000 | 1,000 | 999.999 | 0.001 | 1,999.998 | 4,000.002 | 6,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):
Mintfaucet membawa pembukaan nota tersebut. Selaincmdanamount, tindakan itu menerbitkanpk,timedanr. Kemasukan mengira semula komitmen bagi(pk, no sender, amount, asset 0, time, r)dan menolak ketidakpadanan denganthe mint's commitment does not open to its published note and amount, serta mengekangtimedalam tetingkap bundle. Pemint menandatangani ketujuh-tujuh medan di bawah domainrand-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; parameterrand_minttidak berubah.- Nota
allocgenesis turut membawa pembukaannya. Pada rantaian yang mempunyai bahagiantokens, setiap baris ialah{ cm, envelope, amount, opening: { pk, time, r } }, dan nod mengira semula komitmen itu, pada asset 0 melainkan pembukaan itu menamakanassettoken yang disenaraikan, serta menolak fail genesis yangcm-nya tidak sepadan. Hanya baris asset-0 yang dikira dalamgenesis_deposited.cmlegap 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 genesissentiasa 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.