இயங்கிக்கொண்டிருக்கும் ஒரு சங்கிலியில் சரிபார்ப்பாளர் தொகுப்பில் இணையவும், அதிலிருந்து விலகவும், பதிவேட்டை மீண்டும் படிக்கவும் இந்தப் பக்கத்தைப் பயன்படுத்துங்கள். ஒருமித்த கருத்து எடை பொதுவில் இருக்க வேண்டும்; எனவே இந்தச் சங்கிலியில் தொகைகளை வெளிப்படையாக வைத்திருக்கும் ஒரே அட்டவணை சரிபார்ப்பாளர் பதிவேடு மட்டுமே. இருப்பினும் ஸ்டேக் ஒரு மறைக்கப்பட்ட நோட்டிலிருந்தே வருகிறது, மீண்டும் ஒரு மறைக்கப்பட்ட நோட்டுக்கே திரும்புகிறது.
பதிவேடு
எப்போதாவது பிணைப்பு செய்த ஒவ்வொரு சரிபார்ப்பாளருக்கும் ஒரு வரிசை, அதன் base58 முகவரியைத் திறவுகோலாகக் கொண்டு:
ValidatorEntry {
public_key, // Dilithium2: signs blocks, and this validator's staking actions
stake: u64, // bonded: the weight an epoch's set gives it
pending: Vec<(u64, u64)>, // unbonding, as (release_epoch, amount), oldest first
rewards: u64, // fees earned as a block proposer, unpaid
payout: ShieldedAddress, // rand1… — where a withdraw pays
nonce: u64, // replay protection for its signed actions
activation_epoch: u64, // under a `staking` section: the first epoch this row may be in a set
}
ஒவ்வொரு புலமும் பொதுவானது; பதிவேடு ஒவ்வொரு பிளாக்கின் நிலை வேரிலும் ஹாஷ் செய்யப்படுகிறது. ஒரு வரிசை ஒருபோதும் நீக்கப்படுவதில்லை: முழு ஸ்டேக்கையும் பிணைப்பு நீக்கிய சரிபார்ப்பாளருக்கும் stake = 0 என்ற வரிசை தொடர்ந்து இருக்கும்.
| மாறிலி | மதிப்பு | பொருள் |
|---|---|---|
MIN_STAKE | 1,000 RAND | ஒரு வரிசை ஒரு எபோக்கின் தொகுப்பில் இடம்பெறவே தேவையான ஸ்டேக் |
MAX_VALIDATORS | 100 | ஒரு எபோக் கொண்டிருக்கக்கூடிய மிகப்பெரிய தொகுப்பு |
UNBONDING_EPOCHS | 2 | பிணைப்பு நீக்கப்பட்ட தொகை திரும்பப் பெறப்படுவதற்கு முன் காத்திருக்கும் எபோக்குகள் |
epoch_blocks | chain 20-இல் 1,000 | ஒரு எபோக்கிற்கான பிளாக்குகள்; ஒரு ஜெனிசிஸ் அளவுரு |
எபோக்குகள்
epoch(h) = h / epoch_blocks. எபோக் e ≥ 1-க்கான தொகுப்பு, எபோக் e − 1-இன் கடைசி பிளாக்கின் நிலையிலுள்ள பதிவேட்டிலிருந்து பெறப்படுகிறது: stake ≥ MIN_STAKE கொண்ட ஒவ்வொரு வரிசையும், (stake descending, address ascending) வரிசைப்படி முதல் MAX_VALIDATORS, முகவரிப்படி வரிசைப்படுத்தப்பட்டு. ஒரு view-இன் தலைவர், ஒரு பிளாக்கின் வாக்காளர்கள், ஒரு சான்றிதழின் சரிபார்ப்பு ஆகிய அனைத்தும் அந்தப் பிளாக் சேர்ந்த எபோக்கின் தொகுப்பையே பயன்படுத்துகின்றன. இதன் இரண்டு விளைவுகள்:
- ஒரு பிணைப்பு பிந்தைய எல்லை வரை எடையாவதில்லை. அது உடனே பதிவேட்டில் இடம்பெறுகிறது, ஆனால் தொகுப்பு ஒரு எல்லையில் மட்டுமே மாறுகிறது —
stakingபிரிவு இல்லாத சங்கிலியில் அடுத்த எல்லையில், chain 20-இல் அதற்கும் பின்னர் (கீழே). - ஒரு பிணைப்பு நீக்கம் அடுத்த எல்லையிலேயே எடையைக் குறைக்கிறது, ஆனால் அந்தத் தொகை திரும்பப் பெறத்தக்கதாக இரண்டு எபோக்குகள் காத்திருக்கிறது. ஒரு சரிபார்ப்பாளர் திரும்பப் பெறுவதற்கு வெகு முன்பே முன்மொழிவதை நிறுத்திவிடுகிறது.
ஒரு வருவிப்பு வெறுமையாக இருந்தால், முந்தைய தொகுப்பு தொடர்ந்து கொண்டுசெல்லப்படுகிறது. --validator உடன் தொடங்கப்பட்ட, ஆனால் தற்போதைய எந்தத் தொகுப்பிலும் திறவுகோல் இல்லாத ஒரு நோட், ஓர் எபோக் அதை ஏற்கும் வரை கவனித்து மட்டுமே இருக்கும்; எனவே ஜெனிசிஸுக்குப் பின் பிணைப்பு செய்து இணையும் சரிபார்ப்பாளருக்கு மறுதொடக்கம் தேவையில்லை. rand_status ஆனது is_validator (திறவுகோல் இங்கே உள்ளது) மற்றும் active_validator (அது தற்போதைய தொகுப்பில் உள்ளது) ஆகியவற்றைத் தனித்தனியாக அறிவிக்கிறது.
staking பிரிவு
ஒரு ஜெனிசிஸ் staking பிரிவைக் கொண்டிருக்கலாம் (fullnode v0.5.4, audit v4 STAKE-2). அது இல்லாவிட்டால், chain 14-இல் போல, மேலே உள்ள விதிகளே முழு விவரமாகும். chain 15 முதல் ஒவ்வொரு சங்கிலியும் அதைக் கொண்டுள்ளது. chain 20-இல் இயக்கப்பட்டவை:
"staking": {
"faucet_budget_per_epoch": "10000000000000", "bond_activation_epochs": 2,
"max_weight_bps": 3333, "max_stake_entry_bps_per_epoch": 2500,
"admission_by_vote": true, "registration_v2": true,
"faucet_recipients": ["rand1…", "…16 wallets…"],
"faucet_minters": ["<validator address>", "…18 validators…"]
}
| புலம் | chain 20 | விதி |
|---|---|---|
bond_activation_epochs | 2 | எபோக் e-இல் பயன்படுத்தப்பட்ட பிணைப்பு எபோக் e + 1 + 2-க்கு வரிசையில் வைக்கப்படுகிறது; பதிவுக்கும் கூடுதல் நிரப்பலுக்கும் ஒரே விதி. அதன் தொகை உடனே stake-இல் சேர்கிறது, ஆனால் அதுவரை எடையாவதில்லை; வரிசையிலுள்ள ஸ்டேக்கைப் பிணைப்பு நீக்க முடியாது |
max_stake_entry_bps_per_epoch | 2,500 (25 %) | ஓர் எல்லையில் எடையாகக்கூடிய அதிகபட்ச ஸ்டேக் — பதிவுகளும் கூடுதல் நிரப்பல்களும் சேர்த்து — அங்கே ஏற்கெனவே செயலிலுள்ள எடையின் விகிதமாக: ⌊active · bps / 10,000⌋. அதைத் தாண்டிய உரிய வரிசைகள் பிணைப்பு வரிசைப்படி அடுத்த எல்லைக்குக் காத்திருக்கின்றன. chain 20-இன் 26,000 RAND செயலில் உள்ள ஸ்டேக்கில் இது ஓர் எல்லைக்கு 6,500 RAND. k எல்லைகளுக்குப் பின் ஒரு புதிய நுழைவாளரின் பங்கு எந்த அளவிலும் அதிகபட்சம் 1 − 1.25^−k; இரண்டுக்குப் பின் ஏறத்தாழ மூன்றில் ஒன்று |
admission_by_vote | true | ஒரு புதிய திறவுகோலைப் பதிவுசெய்யும் பிணைப்பு, வாக்களிப்பு எடையில் மூன்றில் இரண்டுக்கும் மேல் வைத்திருக்கும் சரிபார்ப்பாளர்கள் அந்தத் திறவுகோலை வாக்களித்து ஏற்கும் வரை மறுக்கப்படுகிறது (NotAdmitted) (கீழே); கூடுதல் நிரப்பலுக்கு வாக்கு தேவையில்லை |
max_weight_bps | 3,333 | எந்தச் சரிபார்ப்பாளரின் எடையும் அதன் தொகுப்பின் மொத்தத்தில் 33.33 %-ஐத் தாண்டாது; மிகுதி தொகுப்பில் வரம்பிடப்படுகிறது, பதிவேட்டின் stake மாறாது |
registration_v2 | true | ஒரு பதிவு, ஜெனிசிஸ் ஹாஷ், சங்கிலி அடையாளம், சரிபார்ப்பாளர் முகவரி, வழங்கல் முகவரி ஆகியவற்றின் மீது rand-register-2 கையொப்பமிடுகிறது; v1 பதிவு மறுக்கப்படுகிறது |
faucet_budget_per_epoch | 10,000 RAND | ஃபாசெட் ஓர் எபோக்கில் அதிகபட்சம் இவ்வளவே உருவாக்குகிறது (அதைத் தாண்டினால் FaucetBudgetExhausted; எண்ணி அடுத்த எபோக்கில் மீண்டும் தொடங்குகிறது) |
faucet_recipients | 16 வாலெட்டுகள் | ஒரு ஃபாசெட் Mint இந்த வாலெட்டுகளுக்கு மட்டுமே செலுத்துகிறது (FaucetRecipientNotAllowed); ஒரு ஃபாசெட் பாலத்துடன் அருகருகே இருக்க இந்தப் பட்டியலே வழிசெய்கிறது |
faucet_minters | 18 சரிபார்ப்பாளர்கள் | ஒரு ஃபாசெட் Mint இந்தச் சரிபார்ப்பாளர் திறவுகோல்களால் மட்டுமே கையொப்பமிடப்படலாம் (MinterNotAllowed); வேறொரு திறவுகோல் எவ்வளவு காலம் பிணைக்கப்பட்டிருந்தாலும், ஏற்பின்போதும் ஒரு பிளாக் பயன்படுத்தப்படும்போதும் இது சரிபார்க்கப்படுகிறது. chain 20-இல் இவை 26 ஜெனிசிஸ் சரிபார்ப்பாளர்களில் 18. chain 16 முதல் ஒவ்வொரு ஜெனிசிஸிலும் இந்தப் பட்டியல் உள்ளது |
slashing | இல்லை | slashing பிரிவு இல்லை; எனவே எந்தச் சரிபார்ப்பாளரும் அபராதக் குறைப்புக்கோ சிறைப்படுத்தலுக்கோ உள்ளாவதில்லை (பொதுவில் உள்ளவை) |
இந்தப் பிரிவின் கீழ், ஃபாசெட் எண்ணியும் பிணைப்பு வரிசையும் rand-state-5 என்ற டொமைனின் கீழ் நிலை வேருடன் இணைக்கப்படுகின்றன; சரிபார்ப்பாளர் இலை rand-validator-leaf-4 ஆகும். chain 20-இல் இயங்குநிலை எரிவாயு விலைகளும் RPL-2 நிரல் நிலையும் உள்ளன; அவை இவற்றுக்குப் பின் இணைக்கப்பட்டு, அதன் டொமைனை rand-state-8-க்கு மாற்றுகின்றன. வாக்கு மூலம் ஏற்பு அந்த வேரை மேலும் ஒருமுறை H("rand-state-admitted-1", root ‖ admitted_root) எனச் சுற்றுகிறது. chain 15-இல் faucet_minters பட்டியல் இல்லை: அங்கே, ஒரு ஜெனிசிஸ் சரிபார்ப்பாளர் கையொப்பமிட்டால் மட்டுமே ஒவ்வொரு நோடும் ஒரு ஃபாசெட் Mint-ஐக் குளத்தில் சேர்த்து முன்னனுப்பியது (MinterNotAllowed, நோட் கொள்கையாக); ஜெனிசிஸுக்குப் பின் பிணைக்கப்பட்ட சரிபார்ப்பாளர் குளத்தின் வழியாக வரவுசெலவை வற்றச்செய்ய முடியாதபடி இது இருந்தது. பட்டியலுடன், அதே மறுப்பு ஒரு செல்லுபடி விதியாகிறது.
வரலாறு: chain 15 முதல் 19 வரை admission_by_vote இல்லை; எனவே 1,000 RAND வைத்திருக்கும் எந்தத் திறவுகோலும் பதிவுசெய்ய முடிந்தது. அவை நுழைவு வரவுசெலவை ஓர் எல்லைக்கு 10,000 RAND என்ற நிலையான max_stake_entry_per_epoch ஆக அமைத்தன. நிலையான எண்ணிக்கை ஒரே ஒரு ஜெனிசிஸுக்கு ஏற்ப அளவிடப்படுகிறது; விகிதமோ, ஸ்டேக் எவ்வளவாயினும் ஒரு புதிய நுழைவாளரை அதே பங்கில் கட்டுப்படுத்துகிறது. இரண்டு புலங்களையும் ஒருசேர அமைக்க முடியாது.
வாக்கு மூலம் ஏற்பு
fullnode v0.6.8-இல் புதியது (audit v6, STAKE-2), chain 20-இல் இயக்கப்பட்டுள்ளது. தலா 1,000 RAND கொண்ட 26 திறவுகோல்களுடன், தொகுப்பில் தடுக்கக்கூடிய மூன்றில் ஒரு பங்கு என்பது ஏறத்தாழ 13,000 RAND வாங்கப்பட்ட ஸ்டேக் மட்டுமே; எதுவும் அபராதக் குறைப்புக்கு உள்ளாவதில்லை. இந்த விதியின் கீழ், எந்தப் புதிய திறவுகோல்கள் பதிவுசெய்யவே முடியும் என்பதைத் தொகுப்பே தீர்மானிக்கிறது.
- வாக்கு என்பது ஒரு செயல்,
AdmitValidator { candidate, signatures }, தொகுப்பின்றியும் கட்டணமின்றியும். ஒவ்வொரு கையொப்பமும்blake3("rand-admit-validator-1" ‖ genesis hash ‖ candidate address)மீதான ஒரு சரிபார்ப்பாளரின் Dilithium2 கையொப்பம், வாக்காளர்களின் முகவரிகளின் ஏறுவரிசையில். வாக்காளர்கள் வாக்களிப்புத் தொகுப்பின் எடையில் மூன்றில் இரண்டுக்குக் கண்டிப்பாக மேல் வைத்திருக்க வேண்டும் — ஒரு கோரம் சான்றிதழின் அதே கணக்கு: chain 20-இல், 26 சரிபார்ப்பாளர்களில் 18. ஒரு வாக்கு ஒரே ஒரு ஜெனிசிஸுடன் பிணைக்கப்பட்டுள்ளது, அதற்கு நான்ஸ் தேவையில்லை: ஓர் ஏற்பு, அது அனுமதிக்கும் பதிவால் நுகரப்படுகிறது. - வாக்களிப்புத் தொகுப்பு என்பது தற்போதைய எபோக்கிற்கான பதிவேட்டின் சொந்த வருவிப்பே. வரிசையிலுள்ள பிணைப்பு அதில் எடையாவதில்லை; ஒரு பிணைப்பு நீக்கம் உடனே அதிலிருந்து விலக்குகிறது. ஒரு வேட்பாளர் தன்னைத்தானே வாக்களித்து ஏற்க முடியாது.
- ஏற்கப்பட்ட தொகுப்பு ஒருமித்த கருத்து நிலையாகும்; பதிவுசெய்யக் காத்திருக்கும் அதிகபட்சம் 256 திறவுகோல்கள் (அதைத் தாண்டினால்
AdmissionSetFull).rand_getAdmittedஅதை வழங்குகிறது; ஒரு சங்கிலிக்கு வாக்கு தேவையா என்பதைrand_getLimits.admission_by_voteகூறுகிறது.
# each voting validator, offline
rand-node admit sign --candidate <registration hex or public key> --key node.key.json --genesis-hash <hash>
# whoever collects the lines
rand-node admit submit --candidate <…> --signature <line> --signature <line> … --rpc http://127.0.0.1:8545
பின்னர் பிணைப்பு கீழே உள்ளபடி தொடர்கிறது. admit sign-க்குத் தேவையான ஹாஷை rand_getGenesisHash தருகிறது.
நான்கு கட்டளைகள்
எந்தச் செயல் எந்த இருமநிரலுக்கு உரியது என்பது, அதில் எந்தத் திறவுகோல் கையொப்பமிடுகிறது என்பதிலிருந்து பின்தொடர்கிறது: ஒரு பிணைப்பு நோட்டுகளைச் செலவிடுகிறது, எனவே அது ஒரு வாலெட் கட்டளை; பிணைப்பு நீக்கமும் திரும்பப் பெறுதலும் சரிபார்ப்பாளரின் Dilithium2 திறவுகோலால் கையொப்பமிடப்படுகின்றன, அதை நோட் மட்டுமே வைத்திருக்கிறது.
| செயல் | கட்டளை | எதன் மீது பயணிக்கிறது | செலுத்துவது |
|---|---|---|---|
| பதிவு | rand-node register | எதுவுமில்லை — ஒரு தரவுத் துண்டை அச்சிடுகிறது | எதுவுமில்லை |
Bond | rand bond | burn_r ஸ்டேக்காக உள்ள ஒரு தொகுப்பு | வாலெட்டின் நோட்டுகளிலிருந்து 0.001 RAND |
Unbond | rand-node unbond | எதுவுமில்லை (bundle: null) | எதுவுமில்லை |
Withdraw | rand-node withdraw | எதுவுமில்லை (bundle: null) | திரும்பப் பெறப்படும் தொகையிலிருந்து 0.001 RAND |
பதிவு
rand-node register --key node.key.json --payout "$(rand --key payout.key.json address)" --v2 [--rpc http://127.0.0.1:8545]
சரிபார்ப்பாளரின் முகவரியையும் ஒரு ஹெக்ஸ் Registration-ஐயும் அச்சிடுகிறது: அதன் பொதுத் திறவுகோல், வழங்கல் முகவரி, ஒரு கையொப்பம். chain 20 கோரும் --v2 உடன், கையொப்பம் rand-register-2-இன் கீழ் சங்கிலியின் ஜெனிசிஸ் ஹாஷ், சங்கிலி அடையாளம், சரிபார்ப்பாளரின் முகவரி, வழங்கல் முகவரி ஆகியவற்றின் மீது இடப்படுகிறது; அது இல்லாவிட்டால் v1 வடிவம், blake3("rand-register" ‖ bincode(chain_id, payout)), அதை chain 20 மறுக்கிறது (chain 20 போன்ற binding_domain: 1 சங்கிலியில் பதிவுச் செய்தி எப்படியும் v2 வடிவமே). சங்கிலி அடையாளத்துக்காகவும், --v2 உடன் ஜெனிசிஸ் ஹாஷுக்காகவும் RPC படிக்கப்படுகிறது; எனவே ஒரு சங்கிலிக்காகக் கையொப்பமிடப்பட்ட பதிவு மற்றொன்றில் மறுக்கப்படுகிறது. வழங்கல் முகவரி ஒரு வாலெட் முகவரி, நோட் திறவுகோல் அல்ல; பின்னர் செய்யப்படும் கூடுதல் நிரப்பலால் மாற்ற முடியாத ஒரே புலம் அதுவே. ஸ்டேக்கை வைத்திருப்பவரிடம் அந்த ஹெக்ஸைக் கொடுங்கள்.
பிணைப்பு
rand bond <validator base58> <amount in RAND> [--registration <hex>] [--fee <RAND>] [--no-wait] [--cuda]
ஒரு சாதாரண shielded பரிவர்த்தனை: chain 14 முதல் ஒவ்வொரு பரிவர்த்தனையும் கொண்டுசெல்லும் 4-உள்ளீடு 4-வெளியீடு மறைக்கப்பட்ட-சொத்து bundle-ஐ wallet நிரூபிக்கிறது, அதில் stake செய்யப்படும் தொகை அதன் RAND எரிப்பான burn_r-இல் இருக்கும்; burn_r == amount ஆக இருக்கும்போது மட்டுமே பேரேடு ஒரு பிணைப்பை ஏற்கிறது. chain 17 முதல் ஒவ்வொரு bundle-உம் கொண்டுசெல்வதுபோல், chain 20-இல் bundle இரண்டு நிரூபணங்களைக் கொண்டுசெல்கிறது: tier-14 bundle நிரூபணம், மற்றும் செலவு விசையின் மீதான tier-10 அங்கீகார நிரூபணம். இயல்பாக இரண்டும் உள்ளூரிலேயே நிரூபிக்கப்படுகின்றன; Apple Silicon மடிக்கணினியில் சுமார் இரண்டு நிமிடங்கள் ஆகும் (நிரூபண நினைவகம்). wallet-இன் --prover தேர்வைப் பயன்படுத்தினால், bundle நிரூபணத்தை இணைக்கப்பட்ட ஒரு நிரூபிப்பாளர் உருவாக்குகிறார்; அங்கீகார நிரூபணம் wallet-இன் கணினியிலேயே இருக்கும். validator பதிவேட்டில் இன்னும் இல்லாதபோது மட்டுமே --registration தேவை; ஏற்கனவே இருக்கும்போது அது மறுக்கப்படும்; wallet முதலில் பதிவேட்டைக் கேட்டறிகிறது. chain 20-இல், தொகுப்பு முன்கூட்டியே அந்த விசையை வாக்களித்து ஏற்காவிட்டால், பதிவு செய்யும் பிணைப்பு NotAdmitted என மறுக்கப்படும் (வாக்கெடுப்பு மூலம் சேர்க்கை); கூடுதல் நிரப்புதலுக்கு வாக்கு தேவையில்லை. பதிவு செய்யும் பிணைப்பு குறைந்தது 1,000 RAND ஆக இருக்க வேண்டும்; கூடுதல் நிரப்புதல் பூஜ்ஜியத்தைவிட அதிகமான எந்தத் தொகையாகவும் இருக்கலாம். இந்த validator-இன் stake இவ்வளவு அதிகரித்தது என்பதே chain அறிவது; எந்தக் குறிப்புகள் செலுத்தின, அவை யாருடையவை என்பது ஒரு பரிமாற்றத்தில் உள்ளதுபோலவே மறைக்கப்பட்டுள்ளது — தொகையைத் தவிர வேறு எதையும் வெளிப்படுத்தாமல் யார் வேண்டுமானாலும் ஒரு validator மீது stake செய்யலாம்.
submitted bond 8c3f…e1
0 RAND out, 1000 RAND burned, 0.999 RAND change, fee 0.001 RAND, anchored at height 412
2nRdFC…: stake 1000 RAND, counting as consensus weight from epoch 69
wallet அச்சிடும் epoch அடுத்த எல்லை ஆகும். அது செயல்படுத்தல் தாமதத்தைக் கணக்கில் கொள்வதில்லை: chain 20-இல் epoch 68-இல் உறுதிசெய்யப்பட்ட பிணைப்பு, மிக முன்னதாக epoch 71 முதல் எடையாகிறது; ஒவ்வொரு எல்லைக்கும் செயலில் உள்ள எடையின் கால் பங்கான நுழைவு வரம்பு தீர்ந்துவிட்டால் இன்னும் தாமதமாகும்.
பிணைப்பு நீக்கம்
rand-node unbond <amount in RAND> --key node.key.json [--rpc …] [--no-wait]
amount-ஐ stake-இலிருந்து pending-க்கு release_epoch = epoch + 2 உடன் நகர்த்தி, nonce-ஐ ஒன்று அதிகரிக்கிறது. கட்டணமில்லாதது, bundle இல்லாதது; chain 14 முதல் 19 வரை blake3("rand-unbond" ‖ bincode(chain_id, validator, amount, nonce)) மீதும், chain 20-இல் (genesis binding_domain: 1) blake3("rand-unbond-2" ‖ bincode(genesis_hash, chain_id, validator, amount, nonce)) மீதும் கையொப்பமிடப்படுகிறது; ஒரு block நேரத்தில் உறுதியாகிறது. rand-node v0.6.8 தான் தொடர்புகொள்ளும் chain-க்கு ஏற்ற வடிவத்தைத் தேர்ந்தெடுக்கிறது. stake-ஐவிட அதிகமாகவோ பூஜ்ஜியமாகவோ பிணைப்பு நீக்கம் செய்வது மறுக்கப்படும்; ஒரே epoch-இல் செய்யப்படும் பல பிணைப்பு நீக்கங்கள் ஒரே pending வரிசையாக இணைகின்றன.
திரும்பப் பெறுதல்
rand-node withdraw <amount in RAND> --key node.key.json [--rpc …] [--no-wait]
விடுவிக்கப்பட்ட மதிப்பை — rewards மற்றும் release_epoch வந்துவிட்ட pending வரிசைகள், பழையவை முதலில் — பதிவேட்டின் payout முகவரியில் ஒரு வைப்புக் குறிப்பாகச் செலுத்துகிறது. இது validator கையொப்பமிட்டது (chain 20-இல் rand-withdraw-2 கீழ், பிணைப்பு நீக்கம்போலவே முதலில் genesis hash மீது), bundle இல்லாதது, ஆனால் கட்டணமில்லாதது அல்ல: 0.001 RAND அடிப்படைக் கட்டணம் அதைப் பயன்படுத்தும் block-இன் முன்மொழிபவருக்குத் தொகையிலிருந்தே செல்கிறது; எனவே 1,000 RAND திரும்பப் பெறுதல் 999.999 மதிப்புள்ள குறிப்பை உருவாக்குகிறது, அடிப்படைக் கட்டணத்தை ஈடுசெய்ய முடியாத தொகை மறுக்கப்படும். chain குறிப்பைத் தானே கணக்கிடுகிறது:
cm = H_CM(payout.pk, from = 0, amount − 0.001 RAND, asset 0, time, r)
time என்பது கட்டளை இயங்கியபோது இருந்த தலை உயரம் (அச்சிடப்படுகிறது, கையொப்பத்தால் பிணைக்கப்படுகிறது); bundle சாளரத்துக்குள் எங்கும் ஏற்கப்படுகிறது (chain 20-இல் 1,024 blocks, அதன் genesis proof_window_blocks-ஐ அமைக்கிறது; முந்தைய chains-இல் 256); chain ஒருபோதும் இணைப்பிலிருந்து ஒரு commitment-ஐ எடுக்காதபடி r வெளியிடப்படுகிறது. அதன்பின் payout wallet எதுவும் தெரிவிக்கப்படாமலேயே ஸ்கேன் செய்து குறிப்பைக் கண்டறிகிறது:
rand --key payout.key.json balance # balance: 999.999 RAND
சேர்தலும் விலகலும்
# on the joining validator's machine
rand-node register --key node.key.json --payout "$(rand --key payout.key.json address)" --v2
rand-node run --datadir ./data --key node.key.json --validator --bootstrap /ip4/…/p2p/…
# it syncs and observes; rand_status says is_validator true, active_validator false
# on chain 20: validators holding more than two thirds of the weight vote the key in
rand-node admit sign --candidate <hex from above> --key <their node.key.json> --genesis-hash <hash>
rand-node admit submit --candidate <hex from above> --signature <line> … --rpc http://127.0.0.1:8545
# on the machine holding the stake
rand bond <validator base58> 1000 --registration <hex>
rand validators # the new row, active false until it activates
# from its activation epoch on (on chain 20, three boundaries after the bond at the earliest)
rand-node status # active_validator: true
rand-node unbond 1000 --key node.key.json # out of the set at the next boundary
# wait two epochs
rand-node withdraw 1000 --key node.key.json # a note worth 999.999 RAND at the payout address
பிணைப்பு நீக்கும் முன் quorum கணக்கைச் சரிபார்க்கவும்: n உறுப்பினர் கொண்ட தொகுப்புக்கு அதன் stake-இன் 2/3-க்கும் அதிகமானது இணையத்தில் இருக்க வேண்டும். chain 20-இல் 26 validators அனைத்தும் சரியாக MIN_STAKE-இல் உள்ளன; எனவே எந்தப் பிணைப்பு நீக்கமும் அந்த node-ஐ அடுத்த epoch-இன் தொகுப்பிலிருந்து வெளியேற்றும், மேலும் 26-இல் 18 இயங்கிக்கொண்டே இருக்க வேண்டும். இயங்கினாலும் வாக்களிக்காத validator-உம் quorum-க்கு எதிராகக் கணக்கிடப்படுகிறது: chain 14 முதல், தன் கடிகாரத்தைவிட 15 s-க்கும் மேல் முன்னால் உள்ள block-க்கு validator வாக்களிப்பதில்லை; எனவே கடிகாரம் மெதுவாக ஓடும் validator பிழை எதுவுமின்றி வாக்களிப்பதை நிறுத்திவிடும். அதில் NTP-ஐ இயக்கவும் (validator-ஐ இயக்குதல்).
genesis பதிவேட்டை நேரடியாக நிரப்புகிறது — ஒவ்வொரு --validator <key or hex pubkey>,<stake>,<payout>-க்கும் ஒரு பதிவு — மேலும் குறைந்தபட்சத்துக்குக் கீழான stake-ஐ மறுக்கிறது. chain 20-இன் genesis தலா 1,000 RAND கொண்ட 26 வரிசைகளை நிரப்புகிறது; விசைகள் chain 19-இன் அதே விசைகள்.
v0.5.11 முதல் build genesis vesting-ஐயும் கொண்டுள்ளது: காலப்பூட்டு ஒதுக்கீடுகளின் பொதுப் பதிவேடு; அதிலுள்ள திரும்பப்பெற முடியாத பதிவு, பூட்டப்பட்ட RAND-ஐ ஒரு validator-இன் stake-ஆகப் பிணைக்கவும் (rand-node vesting bond) திரும்பப் பெறவும் (rand-node vesting unbond) முடியும். இதற்கு genesis-இல் ஒரு vesting பிரிவு தேவை. chain 20 உட்பட எந்த chain-இலும் அது இல்லை; அது இல்லாமல் அந்தச் செயல்கள் சேர்க்கையின்போதே மறுக்கப்படும். (v0.6.8 திரும்பப்பெறக்கூடிய vesting பதிவை, ஒரு நிலையான கருவூலத்துக்கு, கையொப்பமிடுபவர்களின் ஒரு வரம்பளவால் மட்டுமே ரத்துசெய்ய அனுமதிக்கிறது; இதுவும் vesting பிரிவின் கீழ் மட்டுமே.)
எது பொதுவானது
| பொது | மறைக்கப்பட்டது | |
|---|---|---|
| பதிவேடு | ஒவ்வொரு வரிசையும்: முகவரி, stake, பிணைப்பு நீக்க வரிசை, செலுத்தப்படாத வெகுமதிகள், payout முகவரி, nonce | எதுவுமில்லை |
Bond | validator, தொகை, பதிவு இணைக்கப்பட்டதா, bundle-இன் burn_r | எந்தக் குறிப்புகள் செலுத்தின, அவற்றின் உரிமையாளர் யார், மீதி |
AdmitValidator (chain 20) | வேட்பாளர், ஒவ்வொரு வாக்காளரும் அதன் கையொப்பத்துடன் | வேறு எதுவும் இல்லை |
Unbond | validator, தொகை, nonce | வேறு எதுவும் இல்லை |
Withdraw | validator, தொகை, nonce, குறிப்பின் time மற்றும் r | குறிப்பைத் திறக்கக்கூடியவர் யார், அதன் பிந்தைய ஒவ்வொரு செலவும் |
வெகுமதிகள் என்பவை validator முன்மொழிந்த blocks-இன் கட்டணங்கள். block வெகுமதிகளும் இல்லை, பணவீக்கமும் இல்லை; chain 20-இல் validators-க்கு slashing-உம் இல்லை, jailing-உம் இல்லை: தவறாக நடந்துகொள்ளும் validator தன் stake-இல் எதையும் இழப்பதில்லை; தீர்வு இயக்குநர்களின் பொறுப்பு. Fullnode v0.6.8 தலைவர் இரட்டை நிலைப்பாட்டுக்கான (leader equivocation) slashing விதியைக் கொண்டுள்ளது (audit v6, STAKE-1: ஒரே view-க்கு ஒரே விசையால் கையொப்பமிடப்பட்ட இரண்டு block headers stake-இன் equivocation_bps-ஐ அழித்து விசையை jail செய்கின்றன), ஆனால் genesis staking.slashing பிரிவின் கீழ் மட்டுமே; chain 20-இல் அது இல்லை (rand_getLimits.slashing என்பது null); stake ஒன்றுக்கு மேற்பட்ட இயக்குநர்களிடம் இருக்கும்போது மட்டுமே fullnode அதைப் பரிந்துரைக்கிறது. (block-திரட்டல் குறியீடு, ஒரே nonce-இல் இரண்டு வெவ்வேறு திரட்டல்களில் கையொப்பமிடும் திரட்டிகளுக்கான SlashAggregator செயலையும் கொண்டுள்ளது; திரட்டல் பிரிவு இல்லாத chain 20-இல் அது செயலில் இல்லை.)
மீண்டும் படித்தல்
rand validators # the whole register
rand status # is_validator / active_validator for the node asked
→ {"method":"rand_getValidators","params":[]}
← [{ "address": "2nRdFC…", "stake": "1000000000000",
"pending": [{ "release_epoch": 71, "amount": "1000000000000" }],
"rewards": "4000000", "payout": "rand1…", "nonce": 3, "active": true, "jailed_until": null }]
→ {"method":"rand_getAdmitted","params":[]}
← { "admission_by_vote": true, "admitted": [], "max": 256 }
→ {"method":"rand_getEpoch","params":[]}
← { "epoch": 69, "epoch_blocks": 1000, "next_set": ["2nRdFC…", "ByDkxs…"] }
தொகைகள் அலகுகளின் தசம சரங்கள். நடப்பு epoch-ஐ இயக்கும் தொகுப்பில் அந்த வரிசை உள்ளதா என்பதை active கூறுகிறது; slashing பிரிவின் கீழ் தவிர jailed_until என்பது null; வாக்களித்து ஏற்கப்பட்டு இன்னும் பதிவு செய்யாத விசைகளை admitted பட்டியலிடுகிறது; next_set என்பது எல்லைக்கு முன் ஒவ்வொரு பிணைப்பும் பிணைப்பு நீக்கமும் மாற்றும் ஒரு கணிப்பு. explorer-இன் GET /validators share_percent, blocks_proposed மற்றும் கடைசியாக முன்மொழிந்த உயரத்தைச் சேர்க்கிறது.