தொகுதி முன்மொழிவு
தொகுதிகள் (Blocks) தொகுதிச்சங்கிலியின் (blockchain) அடிப்படை அலகுகளாகும். தொகுதிகள் என்பவை கணுக்களுக்கு (nodes) இடையே அனுப்பப்பட்டு, ஒருமித்த கருத்து (consensus) எட்டப்பட்டு, ஒவ்வொரு கணுவின் தரவுத்தளத்திலும் சேர்க்கப்படும் தனித்தனி தகவல் அலகுகளாகும். அவை எவ்வாறு உருவாக்கப்படுகின்றன என்பதை இந்தப் பக்கம் விளக்குகிறது.
முன்நிபந்தனைகள்
தொகுதி முன்மொழிவு (Block proposal) என்பது உரிமைச் சான்று (PoS) நெறிமுறையின் ஒரு பகுதியாகும். இந்தப் பக்கத்தைப் புரிந்துகொள்ள உதவ, உரிமைச் சான்று (PoS) மற்றும் தொகுதி கட்டமைப்பு பற்றிப் படிக்குமாறு பரிந்துரைக்கிறோம்.
தொகுதிகளை உருவாக்குவது யார்?
சரிபார்ப்பான் (Validator) கணக்குகள் தொகுதிகளை முன்மொழிகின்றன. சரிபார்ப்பான் கணக்குகள், தங்களின் செயலாக்கக் கிளையண்ட் (execution client) மற்றும் கருத்தொருமிப்பு அடுக்கு (consensus layer) கிளையண்டுகளின் ஒரு பகுதியாக சரிபார்ப்பான் மென்பொருளை இயக்கும் மற்றும் வைப்பு ஒப்பந்தத்தில் (deposit contract) குறைந்தபட்சம் 32 ETH-ஐ வைப்புச் செய்துள்ள கணு இயக்குநர்களால் நிர்வகிக்கப்படுகின்றன. இருப்பினும், ஒவ்வொரு சரிபார்ப்பானும் எப்போதாவது மட்டுமே ஒரு தொகுதியை முன்மொழியும் பொறுப்பைக் கொண்டுள்ளனர். எத்திரியம் நேரத்தை நேரப்பகுதிகள் (slots) மற்றும் சகாப்தங்களாக (epochs) அளவிடுகிறது. ஒவ்வொரு நேரப்பகுதியும் பன்னிரண்டு வினாடிகள் ஆகும், மேலும் 32 நேரப்பகுதிகள் (6.4 நிமிடங்கள்) ஒரு சகாப்தத்தை உருவாக்குகின்றன. ஒவ்வொரு நேரப்பகுதியும் எத்திரியத்தில் ஒரு புதிய தொகுதியைச் சேர்ப்பதற்கான வாய்ப்பாகும்.
சீரற்ற தேர்வு
ஒவ்வொரு நேரப்பகுதியிலும் ஒரு தொகுதியை முன்மொழிய ஒரு சரிபார்ப்பான் போலி-சீரற்ற முறையில் (pseudo-randomly) தேர்ந்தெடுக்கப்படுகிறார். தொகுதிச்சங்கிலியில் உண்மையான சீரற்றதன்மை (randomness) என்று எதுவும் இல்லை, ஏனெனில் ஒவ்வொரு கணுவும் உண்மையான சீரற்ற எண்களை உருவாக்கினால், அவற்றால் ஒருமித்த கருத்துக்கு (consensus) வர முடியாது. மாறாக, சரிபார்ப்பான் தேர்வு செயல்முறையை கணிக்க முடியாததாக மாற்றுவதே இதன் நோக்கமாகும். எத்திரியத்தில் RANDAO எனப்படும் அல்காரிதத்தைப் பயன்படுத்தி சீரற்றதன்மை அடையப்படுகிறது, இது தொகுதி முன்மொழிபவரிடமிருந்து (block proposer) பெறப்படும் ஒரு ஹாஷை (hash) ஒவ்வொரு தொகுதியிலும் புதுப்பிக்கப்படும் ஒரு விதையுடன் (seed) கலக்கிறது. மொத்த சரிபார்ப்பான் தொகுப்பிலிருந்து ஒரு குறிப்பிட்ட சரிபார்ப்பானைத் தேர்ந்தெடுக்க இந்த மதிப்பு பயன்படுத்தப்படுகிறது. சில வகையான விதை கையாளுதல்களுக்கு எதிராகப் பாதுகாக்கும் ஒரு வழியாக, சரிபார்ப்பான் தேர்வு இரண்டு சகாப்தங்களுக்கு முன்பே சரிசெய்யப்படுகிறது.
சரிபார்ப்பான்கள் ஒவ்வொரு நேரப்பகுதியிலும் RANDAO-வில் சேர்த்தாலும், உலகளாவிய RANDAO மதிப்பு ஒரு சகாப்தத்திற்கு ஒரு முறை மட்டுமே புதுப்பிக்கப்படும். அடுத்த தொகுதி முன்மொழிபவரின் குறியீட்டைக் (index) கணக்கிட, ஒவ்வொரு நேரப்பகுதியிலும் ஒரு தனித்துவமான மதிப்பைக் கொடுக்க RANDAO மதிப்பு நேரப்பகுதி எண்ணுடன் கலக்கப்படுகிறது. ஒரு தனிப்பட்ட சரிபார்ப்பான் தேர்ந்தெடுக்கப்படுவதற்கான நிகழ்தகவு வெறுமனே 1/N அல்ல (இங்கு N = மொத்த செயலில் உள்ள சரிபார்ப்பான்கள்). மாறாக, இது ஒவ்வொரு சரிபார்ப்பானின் பயனுள்ள ETH இருப்பின் அடிப்படையில் மதிப்பிடப்படுகிறது. அதிகபட்ச பயனுள்ள இருப்பு 32 ETH ஆகும் (இதன் பொருள் balance < 32 ETH என்பது balance == 32 ETH-ஐ விடக் குறைந்த மதிப்பீட்டிற்கு வழிவகுக்கிறது, ஆனால் balance > 32 ETH என்பது balance == 32 ETH-ஐ விட அதிக மதிப்பீட்டிற்கு வழிவகுக்காது).
ஒவ்வொரு நேரப்பகுதியிலும் ஒரு தொகுதி முன்மொழிபவர் மட்டுமே தேர்ந்தெடுக்கப்படுகிறார். சாதாரண நிலைமைகளின் கீழ், ஒரு தொகுதி உருவாக்குபவர் தங்களுக்கு ஒதுக்கப்பட்ட நேரப்பகுதியில் ஒரு தொகுதியை உருவாக்கி வெளியிடுகிறார். ஒரே நேரப்பகுதிக்காக இரண்டு தொகுதிகளை உருவாக்குவது வெட்டுதலுக்கு (slash) உள்ளாகும் குற்றமாகும், இது பெரும்பாலும் "இரட்டைநிலைப்பாடு" (equivocation) என்று அழைக்கப்படுகிறது.
தொகுதி எவ்வாறு உருவாக்கப்படுகிறது?
தொகுதி முன்மொழிபவர், தங்களின் சொந்தமாக உள்நாட்டில் இயங்கும் கிளைத் தேர்வு நெறிமுறையின் (fork choice algorithm) பார்வையின்படி, சங்கிலியின் மிகச் சமீபத்திய தலைப்பகுதியின் மேல் கட்டமைக்கப்பட்ட கையொப்பமிடப்பட்ட (signed) பீக்கன் தொகுதியை (beacon block) ஒளிபரப்புவார் என்று எதிர்பார்க்கப்படுகிறது. கிளைத் தேர்வு நெறிமுறையானது முந்தைய நேரப்பகுதியிலிருந்து எஞ்சியிருக்கும் வரிசைப்படுத்தப்பட்ட சான்றளிப்புகளைப் (attestations) பயன்படுத்துகிறது, பின்னர் அதன் வரலாற்றில் அதிகபட்சமாக திரட்டப்பட்ட சான்றளிப்புகளின் எடையைக் கொண்ட தொகுதியைக் கண்டறிகிறது. அந்தத் தொகுதியே முன்மொழிபவரால் உருவாக்கப்பட்ட புதிய தொகுதியின் மூலத் தொகுதியாகும் (parent block).
தொகுதி முன்மொழிபவர் தனது சொந்த உள்ளூர் தரவுத்தளம் மற்றும் சங்கிலியின் பார்வையிலிருந்து தரவைச் சேகரிப்பதன் மூலம் ஒரு தொகுதியை உருவாக்குகிறார். தொகுதியின் உள்ளடக்கங்கள் கீழே உள்ள துணுக்கில் காட்டப்பட்டுள்ளன:
class BeaconBlockBody(Container):
randao_reveal: BLSSignature
eth1_data: Eth1Data
graffiti: Bytes32
proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS]
attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS]
attestations: List[Attestation, MAX_ATTESTATIONS]
deposits: List[Deposit, MAX_DEPOSITS]
voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS]
sync_aggregate: SyncAggregate
execution_payload: ExecutionPayload
randao_reveal புலம், தற்போதைய சகாப்த எண்ணில் கையொப்பமிடுவதன் மூலம் தொகுதி முன்மொழிபவர் உருவாக்கும் சரிபார்க்கக்கூடிய சீரற்ற மதிப்பைப் பெறுகிறது. eth1_data என்பது வைப்பு ஒப்பந்தம் குறித்த தொகுதி முன்மொழிபவரின் பார்வைக்கான ஒரு வாக்கெடுப்பாகும் (vote), இதில் வைப்பு மெர்க்கல் ட்ரையின் (Merkle trie) வேர் மற்றும் புதிய வைப்புகளைச் சரிபார்க்க உதவும் மொத்த வைப்புகளின் எண்ணிக்கை ஆகியவை அடங்கும். graffiti என்பது தொகுதியில் ஒரு செய்தியைச் (message) சேர்க்கப் பயன்படுத்தக்கூடிய ஒரு விருப்பப் புலமாகும். proposer_slashings மற்றும் attester_slashings என்பவை, சங்கிலி குறித்த முன்மொழிபவரின் பார்வையின்படி சில சரிபார்ப்பான்கள் வெட்டுதலுக்கு உள்ளாகும் குற்றங்களைச் செய்துள்ளனர் என்பதற்கான ஆதாரத்தைக் கொண்ட புலங்களாகும். deposits என்பது தொகுதி முன்மொழிபவருக்குத் தெரிந்த புதிய சரிபார்ப்பான் வைப்புகளின் பட்டியலாகும், மேலும் voluntary_exits என்பது கருத்தொருமிப்பு அடுக்கு (consensus layer) கிசுகிசுப் பிணையத்தில் (gossip network) தொகுதி முன்மொழிபவர் கேள்விப்பட்ட, வெளியேற (exit) விரும்பும் சரிபார்ப்பான்களின் பட்டியலாகும். sync_aggregate என்பது எந்தெந்த சரிபார்ப்பான்கள் முன்பு ஒத்திசைவுக் குழுவிற்கு (sync committee) (இலகுரக கிளையண்ட் (light client) தரவை வழங்கும் சரிபார்ப்பான்களின் துணைக்குழு) ஒதுக்கப்பட்டனர் மற்றும் தரவில் கையொப்பமிடுவதில் பங்கேற்றனர் என்பதைக் காட்டும் ஒரு வெக்டராகும்.
execution_payload ஆனது செயலாக்கக் கிளையண்ட் மற்றும் கருத்தொருமிப்பு அடுக்கு கிளையண்டுகளுக்கு இடையே பரிவர்த்தனைகள் பற்றிய தகவல்களை அனுப்ப உதவுகிறது. execution_payload என்பது ஒரு பீக்கன் தொகுதிக்குள் உள்ளமைக்கப்பட்ட செயலாக்கத் தரவின் தொகுதியாகும். execution_payload-க்குள் உள்ள புலங்கள் எத்திரியம் மஞ்சள் அறிக்கையில் (yellow paper) கோடிட்டுக் காட்டப்பட்டுள்ள தொகுதி கட்டமைப்பைப் பிரதிபலிக்கின்றன, ஆனால் இதில் ஆம்மர்கள் (ommers) இல்லை மற்றும் difficulty-க்கு பதிலாக prev_randao உள்ளது. செயலாக்கக் கிளையண்ட் அதன் சொந்த கிசுகிசுப் பிணையத்தில் கேள்விப்பட்ட பரிவர்த்தனைகளின் உள்ளூர் தொகுப்பிற்கான அணுகலைக் கொண்டுள்ளது. பிந்தைய நிலை (post-state) எனப்படும் புதுப்பிக்கப்பட்ட நிலை ட்ரையை (state trie) உருவாக்க இந்தப் பரிவர்த்தனைகள் உள்நாட்டில் செயல்படுத்தப்படுகின்றன. பரிவர்த்தனைகள் execution_payload-ல் transactions எனப்படும் பட்டியலாகச் சேர்க்கப்பட்டுள்ளன, மேலும் பிந்தைய நிலை state-root புலத்தில் வழங்கப்படுகிறது.
இந்தத் தரவுகள் அனைத்தும் ஒரு பீக்கன் தொகுதியில் சேகரிக்கப்பட்டு, கையொப்பமிடப்பட்டு, தொகுதி முன்மொழிபவரின் சகாக்களுக்கு (peers) ஒளிபரப்பப்படுகின்றன, அவர்கள் அதைத் தங்கள் சகாக்களுக்குப் பரப்புகிறார்கள்.
தொகுதிகளின் உடற்கூறியல் பற்றி மேலும் படிக்கவும்.
தொகுதிக்கு என்ன நடக்கிறது?
தொகுதி முன்மொழிபவரின் உள்ளூர் தரவுத்தளத்தில் தொகுதி சேர்க்கப்பட்டு, கருத்தொருமிப்பு அடுக்கு கிசுகிசுப் பிணையத்தின் மூலம் சகாக்களுக்கு ஒளிபரப்பப்படுகிறது. ஒரு சரிபார்ப்பான் தொகுதியைப் பெறும்போது, தொகுதி சரியான மூலத் தொகுதியைக் கொண்டுள்ளதா, சரியான நேரப்பகுதியுடன் பொருந்துகிறதா, முன்மொழிபவர் குறியீடு எதிர்பார்க்கப்பட்டதா, RANDAO வெளிப்பாடு செல்லுபடியாகுமா மற்றும் முன்மொழிபவர் வெட்டப்படவில்லையா (slashed) என்பதைச் சரிபார்ப்பது உட்பட, அதனுள்ளே உள்ள தரவை அது சரிபார்க்கிறது. execution_payload பிரிக்கப்படுகிறது, மேலும் முன்மொழியப்பட்ட நிலை மாற்றத்தைச் சரிபார்க்க சரிபார்ப்பானின் செயலாக்கக் கிளையண்ட் பட்டியலில் உள்ள பரிவர்த்தனைகளை மீண்டும் செயல்படுத்துகிறது. தொகுதி இந்தச் சரிபார்ப்புகள் அனைத்திலும் தேர்ச்சி பெறுகிறது என்று வைத்துக்கொண்டால், ஒவ்வொரு சரிபார்ப்பானும் தொகுதியைத் தனது சொந்த நியமனச் சங்கிலியில் (canonical chain) சேர்க்கிறது. பின்னர் அடுத்த நேரப்பகுதியில் செயல்முறை மீண்டும் தொடங்குகிறது.
தொகுதி வெகுமதிகள்
தொகுதி முன்மொழிபவர் தங்களின் பணிக்கான கட்டணத்தைப் பெறுகிறார். செயலில் உள்ள சரிபார்ப்பான்களின் எண்ணிக்கை மற்றும் அவற்றின் பயனுள்ள இருப்புகளின் செயல்பாடாகக் கணக்கிடப்படும் ஒரு base_reward உள்ளது. தொகுதியில் சேர்க்கப்பட்டுள்ள ஒவ்வொரு செல்லுபடியாகும் சான்றளிப்பிற்கும் தொகுதி முன்மொழிபவர் base_reward-ன் ஒரு பகுதியைப் பெறுகிறார்; அதிக சரிபார்ப்பான்கள் தொகுதிக்குச் சான்றளிக்கும்போது, தொகுதி முன்மொழிபவரின் வெகுமதி (reward) அதிகமாக இருக்கும். வெட்டப்பட வேண்டிய சரிபார்ப்பான்களைப் புகாரளிப்பதற்கும் ஒரு வெகுமதி உள்ளது, இது வெட்டப்பட்ட ஒவ்வொரு சரிபார்ப்பானுக்கும் 1/512 * effective balance-க்குச் சமமாக இருக்கும்.
வெகுமதிகள் மற்றும் அபராதங்கள் பற்றி மேலும்