دا پاڼه وکاروئ ترڅو د یوې ازمایښتي چین پر وړاندې faucet وچلوئ، پوه شئ چې یوه Mint راکړه ورکړه په شبکه کې څه ده، او په دقیق ډول ووینئ چې یو bond یا د پل سوځول څنګه ارزښت له pool څخه باسي. هر ننوتل او هر وتل عامه دي؛ د دوی ترمنځ هر څه یو نوټ دی.
د faucet مینټ
Mint یوازینۍ لاره ده چې په چین 20 کې له genesis وروسته RAND پرې جوړیږي، او یوازې په هغو چینونو کې شته چې genesis یې "faucet": true وايي. دا یوه د تاییدوونکي لخوا لاسلیک شوې، بېبنډله راکړه ورکړه ده:
Action::Mint { cm: Word8, pk: Word8, time: u32, r: Word8, envelope: Envelope, amount: u64,
minter: PublicKey, signature: Signature }
په یوه تاییدوونکي نوډ کې rand_mint(address[, amount]) ورکړل شوي rand1… پتې ته د amount په اندازه یو نوټ جوړوي، لفافه یې د یوې یوځلي لیږونکي کیلي لاندې مهر کوي، مینټ د نوډ په خپله Dilithium2 کیلي لاسلیک کوي، او د عادي mempool له لارې یې سپاري — نو مینټ له اجماع څخه تیریږي او هر نوډ یې پلي کوي. سقف په هر غوښتنه کې 100000000000 واحدونه، یعنې 100 RAND دی، او ډیفالټ همدا سقف دی. له چین 14 راهیسې مینټ د نوټ پرانیستنه — pk، time او r — له ځانه سره لري او لاسلیک یې هم پوښي: د منلو پړاو د (pk, no sender, amount, asset 0, time, r) ژمنه بیا محاسبه کوي او هغه cm چې سره سمون ونلري د the mint's commitment does not open to its published note and amount په ځواب ردوي، او time د بنډل په کړکۍ کې ساتي. د rand_mint پارامترونه بدل شوي نه دي. لاسلیک شوی پیغام په چینونو 14 تر 19 کې blake3("rand-mint-2" ‖ bincode(chain_id, cm, pk, time, r, envelope, amount)) دی؛ په چین 20 کې، چې genesis یې binding_domain: 1 ټاکي، دا د genesis هش باندې rand-mint-3 دی چې ورپسې همدا ساحې راځي، نو هغه مینټ چې د یوه چین لپاره لاسلیک شوی وي په بل هر چین کې ردیږي، حتی په هغه چین کې چې ورته chain id او د تاییدوونکو کیلي ولري. یو څارونکی د تاییدوونکي کیلي نه لري او ځواب ورکوي faucet mints are signed by validators; ask a validator node؛ هغه چین چې دا بیرغ ونلري ځواب ورکوي faucet is disabled on this chain.
د چین 20 faucet فعال دی خو د genesis د staking برخې په واسطه محدود دی، د چین 19 په ورته ارزښتونو:
| قاعده | چین 20 | ردول |
|---|---|---|
| ترلاسه کوونکي | د 16 والټونو د اجازې لیست (staking.faucet_recipients)؛ د مینټ خپره شوې pk باید پکې وي | the faucet may not mint to this recipient (not in staking.faucet_recipients)، دایمي |
| بودیجه | په هره 1,000-بلاکه دوره کې 10,000 RAND (staking.faucet_budget_per_epoch)، د ټولو تاییدوونکو ترمنځ | the faucet budget of … for this epoch is exhausted (… minted)؛ راتلونکې دوره یې مني |
| مینټ کوونکي | له 26 تاییدوونکو څخه 18 (staking.faucet_minters، له چین 16 راهیسې لیست شوي)؛ مینټ باید د دوی له یوه لخوا لاسلیک شي | minter … is not a faucet minter on this chain |
نو rand faucet په چین 20 کې یوازې د هغه والټ لپاره کار کوي چې په لیست کې وي، او غوښتنه باید له داسې تاییدوونکي نوډ څخه وشي چې کیلي یې لیست شوی مینټ کوونکی وي؛ بلې هرې پتې ته باید هغه څوک پیسې ورکړي چې 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"
څه چې عامه دي: د نوي نوټ ژمنه، لفافه یې، په ښکاره ډول اندازه، او د مینټ کوونکي تاییدوونکي عامه کیلي (د هغه د پتې په بڼه ښودل کیږي) او لاسلیک. پرانیستنه د نوټ د خاوند کیلي pk هم خپروي، نو د faucet نوټ خاوند عامه دی، لکه څنګه چې د یوې ایستنې تادیه عامه ده؛ هغه څه چې پټ پاتې کیږي دا دي چې دا نوټ وروسته کله او چیرته لګول کیږي. له “100 RAND مینټ شول” څخه تر “د 100 RAND په ارزښت یو نوټ شته” پورې یو ګامه اړیکه هماغه ښکارهوالی دی چې له شفاف څخه پټ شوي ته هره زیرمه یې په هر ځای کې لري. د منلو پړاو دا ګوري چې faucet فعال دی، اندازه له سقف څخه ټیټه ده، د دورې بودیجه ځای لري، ترلاسه کوونکی د اجازې په لیست کې دی هلته چې genesis یې لري، ژمنه خپاره شوي نوټ ته پرانیستل کیږي، مینټ کوونکی تاییدوونکی دی او د مینټ کوونکو په لیست کې دی هلته چې genesis یې لري، او لاسلیک تایید کیږي؛ مینټ هیڅ فیس نه ورکوي.
rand_getTransaction یو مینټ داسې ښیي { "kind": "mint", "cm": "…", "amount": "100000000000", "minter": "<validator base58>" } له "bundle": null سره — اندازه یو لسیز تار دی، لکه هره u64 اندازه چې RPC یې له چین 14 راهیسې وړاندې کوي؛ سپړونکی یې د kind=mint لاندې لیست کوي، چې د هغو لږو ډولونو څخه دی چې عامه amount لري.
د genesis زیرمې
بله لاره چې ارزښت پرې ننوځي د genesis فایل دی: rand-node genesis ته هر --alloc rand1<address>=<RAND> د تازه ژمنې تصادفیت سره په یوه زیرمه نوټ { cm, envelope, amount, opening } بدلیږي، چې د ونې لومړۍ پاڼې دي. چین 20 نهه genesis نوټونه لري: اووه RAND نوټونه، ټول 5,184.243719258 RAND (genesis_deposited)، د چلوونکي بیلانسونه چې د چین 19 له یوه انځور څخه راوړل شوي، او د 10 او 89 zUSD دوه zUSD نوټونه، یعنې د پل د ساتنې 99 zUSD چې له چین 19 څخه راوړل شوي (پل)، چې RAND نه دي او په genesis_deposited کې نه شمیرل کیږي. هغه RAND چې په چین 19 کې د داسې والټونو سره و چې چلوونکی یې نه لري، شاوخوا 520 RAND، او د تاییدوونکو نه ایستل شوې فیسونه نه دي راوړل شوي. تاریخچه: چین 19 اته درلودل، اووه RAND نوټونه د 5,294.644359629 RAND او یو د 10 zUSD؛ چین 18 شپږ RAND نوټونه درلودل، پنځه د 1,000 RAND او یو د 300 RAND؛ چینونو 14 او 15 پنځه د 1,000 RAND درلودل. اندازه عامه ده ترڅو هرڅوک لومړنی عرضه جمع کړای شي، او له چین 14 راهیسې نوټ خپله پرانیستنه هم لري، نو د genesis نوټ خاوند په قصدي ډول عامه دی. د ورته تخصیصونو بیا جوړول توپیر لرونکي نوټونه او توپیر لرونکی genesis هش ورکوي، په قصد سره.
سوځول
هره راکړه ورکړه یو څلورځایه پټشتمنۍ بنډل لري، او دوه د سوځولو کلمې لري: burn_r هغه RAND دی چې له pool څخه یوه عامه ځای ته وځي، او burn_a د هغې توکنې اندازه ده چې burn_asset یې نوموي. د بنډل guest دواړه ډلې په یوه ثبوت کې توازن کوي، او د منلو پړاو غوښتنه کوي چې ټول درې صفر وي پرته له دې کړنو:
| سوځول | قاعده | ارزښت چیرته ځي |
|---|---|---|
د Bond بنډل | burn_r == amount | په ثبت کې د تاییدوونکي عامه stake |
د BridgeBurn بنډل | burn_asset == asset، burn_a == amount، burn_r == 0، asset != 0 | په Rand کې له منځه وړل کیږي؛ د سرچینې چین قرارداد د ساتونکو لخوا لاسلیک شوي سوځولو پیغام پر وړاندې د نومول شوې سکې amount خوشې کوي. په چین 20 کې چین د 10 bps فیس د خزانې لپاره د zUSD نوټ په توګه ساتي او خوشې کول amount − fee دي |
د TokenBurn بنډل | د پل سوځولو په څیر ورته بڼه | له منځه وړل کیږي؛ د RPL توکنې عامه total_supply په دقیق ډول همدومره ښکته کیږي |
د Invoke بنډل (RPL-2، چین 20) | burn_r، او د burn_asset څخه burn_a، لکه څنګه چې د پروګرام لیږد اعلانوي | RAND او توکنې د پروګرام په عامه خزانه کې زیرمه کیږي، یا د پروګرام خپله توکنه له منځه وړل کیږي؛ خزانه بیا یوازې د چین لخوا محاسبه شوي نوټونو په توګه تادیه کوي (پروګرامونه) |
(د register_aggregator بنډل هم خپل genesis bond د burn_r له لارې سوځوي؛ راټولول په چین 20 کې بند دي.)
سوځول فیسونه نه دي. د bond سوځول هغه RAND دی چې له pool څخه ثبت ته ځي او د عرضې پلټنې په burned کې شمیرل کیږي (او په register_total کې بیا ښکاره کیږي). د پل سوځول له چین 14 راهیسې یو بنډل دی (مخکې دوه وو): ځایونه 0–1 د پل شوې شتمنۍ سوځوي او ځایونه 2–3 فیس ورکوي، نو یوازې د همدې فیس، BRIDGE_BURN_FEE، 0.01 RAND، له لارې د RAND عرضې ته لاس وروړي. دا باید داسې سکه ونوموي چې د شتمنۍ ملاتړ کوي، د هغې سکې بشپړ شمیر واحدونه خوشې کړي، او د هغه څه سره برابر وي چې دغه ملاتړ قفل کړي دي (پل). په چین 20 کې د هغه genesis bridge.fees هم په zUSD کې د هر پل شوي مینټ او سوځولو 10 bps اخلي: یوه زیرمه ناخالص له فیس پرته کریډیټ کوي او یو سوځول amount − fee خوشې کوي، هر فیس د خزانې لپاره یو پټ شوی zUSD نوټ دی. د فیس نوټ صادر او ملاتړ شوی پاتې کیږي، نو د zUSD total_supply == Σ locked لاهم صدق کوي؛ دا د RAND حرکت نه دی او د RAND عرضې پلټنې ته نه ننوځي. یو TokenBurn د 0.001 RAND د بنډل بنسټ ورکوي؛ پل شوې توکنه هلته ردیږي او د bridge-burn له لارې وځي.
په چین 20 کې یو فیس هم سوځول دی، لکه له 15 راهیسې په هر چین کې: د هغه genesis tokens.burn_registration_fee ټاکي، نو د RegisterToken یا RegisterBridgedToken د 1 RAND registration_fee د وړاندیز کوونکي ته د ورکولو پرځای له منځه وړل کیږي، او وړاندیز کوونکی یوازې د بنډل بنسټ ساتي. دا په burned کې او، په جلا توګه، په registration_fees_burned کې شمیرل کیږي (RPL توکنې).
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 له pool څخه د بلاک د وړاندیز کوونکي rewards ته ځي، چې د ثبت یوه عامه ساحه ده، او pool ته یوازې هغه وخت راګرځي چې تاییدوونکی یې د نوټ په توګه وباسي (سټیکینګ). یو Withdraw د 0.001 RAND بنسټ له ایستل شوې اندازې څخه د هغه بلاک وړاندیز کوونکي ته ورکوي چې دا پلي کوي؛ دا بنسټ هیڅکله له ثبت څخه نه وځي، نو تیریدنه نه ده.
عرضه څنګه حرکت کوي
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 او program_rand_out په چین 20 (RPL-2) کې نوي دي: هغه RAND چې یو Invoke یې د burn_r له لارې د پروګرام په خزانه کې سوځوي د pool په اړخ کې په burned کې شمیرل کیږي او په خزانه کې ساتل کیږي، او هغه څه چې یوه خزانه د نوټونو په توګه تادیه کوي بیرته pool ته راګرځي. rand_getSupply دواړه وړاندې کوي، له invariant_holds سره.
یوازې د فاسېټ مینټ هغه څه ته زیاتوالی ورکوي چې زنځیر صادر کړي دي، او په زنځیر 20 کې یوازې سوځول شوې د ثبت فیس له هغه څخه کموي: slashed به د یوه راټولوونکي ضبط شوی ضمانت، یا د جنیسس د staking.slashing برخې لاندې د یوه تاییدوونکي ضبط شوې ونډه حسابوله، خو زنځیر 20 هېڅ یو هم نه لري (راټولونه بنده ده او slashing null دی). ضمانت، فیس، ایستنه او په خزانه کې زیرمه ارزښت د پول، ثبتپاڼې او خزانو ترمنځ لېږدوي، او هېڅ شی نه پیدا کوي. عرضه شمېرونکي او یو حل شوی مثال لري. د بلاک راټولونې سبسایډي — د هر مهر شوي بلاک لپاره نوی RAND د نیمایي کېدو د مهالوېش له مخې، چې راټولوونکي ته د زیرمې نوټ په توګه ورکول کېږي — به لومړنی مهالوېش شوی صدور وي، او په زنځیر 20 کې فعاله نه ده.