ब्लॉक प्रस्ताव
ब्लॉक ब्लॉकचेन की मूलभूत इकाइयाँ हैं। ब्लॉक जानकारी की असतत (discrete) इकाइयाँ हैं जो नोड्स के बीच पारित की जाती हैं, जिन पर सहमति होती है और प्रत्येक नोड के डेटाबेस में जोड़ी जाती हैं। यह पृष्ठ बताता है कि उनका उत्पादन कैसे किया जाता है।
पूर्वापेक्षाएँ
ब्लॉक प्रस्ताव प्रूफ-ऑफ़-स्टेक (PoS) प्रोटोकॉल का हिस्सा है। इस पृष्ठ को समझने में मदद के लिए, हम अनुशंसा करते हैं कि आप प्रूफ-ऑफ़-स्टेक (PoS) और ब्लॉक आर्किटेक्चर के बारे में पढ़ें।
ब्लॉक का उत्पादन कौन करता है?
सत्यापक खाते ब्लॉक प्रस्तावित करते हैं। सत्यापक खातों का प्रबंधन नोड ऑपरेटरों द्वारा किया जाता है जो अपने निष्पादन क्लाइंट और सर्वसम्मति क्लाइंट के हिस्से के रूप में सत्यापक सॉफ़्टवेयर चलाते हैं और जमा अनुबंध में कम से कम 32 ETH जमा कर चुके हैं। हालाँकि, प्रत्येक सत्यापक केवल कभी-कभी ही ब्लॉक प्रस्तावित करने के लिए जिम्मेदार होता है। इथेरियम समय को स्लॉटों और एपॉक में मापता है। प्रत्येक स्लॉट बारह सेकंड का होता है, और 32 स्लॉट (6.4 मिनट) मिलकर एक एपॉक बनाते हैं। प्रत्येक स्लॉट इथेरियम पर एक नया ब्लॉक जोड़ने का अवसर है।
यादृच्छिक चयन
प्रत्येक स्लॉट में ब्लॉक प्रस्तावित करने के लिए एक एकल सत्यापक को छद्म-यादृच्छिक (pseudo-randomly) रूप से चुना जाता है। ब्लॉकचेन में सच्ची यादृच्छिकता जैसी कोई चीज़ नहीं होती है क्योंकि यदि प्रत्येक नोड वास्तव में यादृच्छिक संख्याएँ उत्पन्न करता है, तो वे सर्वसम्मति पर नहीं आ सकते। इसके बजाय, इसका उद्देश्य सत्यापक चयन प्रक्रिया को अप्रत्याशित बनाना है। इथेरियम पर यादृच्छिकता RANDAO नामक एक एल्गोरिथ्म का उपयोग करके प्राप्त की जाती है जो ब्लॉक प्रस्तावक के एक हैश को एक सीड (seed) के साथ मिलाता है जो हर ब्लॉक में अपडेट होता है। इस मान का उपयोग कुल सत्यापक सेट से एक विशिष्ट सत्यापक का चयन करने के लिए किया जाता है। कुछ प्रकार के सीड हेरफेर से बचाने के तरीके के रूप में सत्यापक चयन दो एपॉक पहले ही तय कर लिया जाता है।
हालाँकि सत्यापक प्रत्येक स्लॉट में RANDAO में जोड़ते हैं, वैश्विक RANDAO मान प्रति एपॉक केवल एक बार अपडेट किया जाता है। अगले ब्लॉक प्रस्तावक के सूचकांक की गणना करने के लिए, प्रत्येक स्लॉट में एक अद्वितीय मान देने के लिए RANDAO मान को स्लॉट संख्या के साथ मिलाया जाता है। किसी व्यक्तिगत सत्यापक के चुने जाने की संभावना केवल 1/N नहीं है (जहाँ N = कुल सक्रिय सत्यापक)। इसके बजाय, इसे प्रत्येक सत्यापक के प्रभावी ETH बैलेंस द्वारा भारित (weighted) किया जाता है। अधिकतम प्रभावी बैलेंस 32 ETH है (इसका मतलब है कि balance < 32 ETH का भार balance == 32 ETH से कम होता है, लेकिन balance > 32 ETH का भार balance == 32 ETH से अधिक नहीं होता है)।
प्रत्येक स्लॉट में केवल एक ब्लॉक प्रस्तावक का चयन किया जाता है। सामान्य परिस्थितियों में, एक एकल ब्लॉक निर्माता अपने समर्पित स्लॉट में एक एकल ब्लॉक बनाता और जारी करता है। एक ही स्लॉट के लिए दो ब्लॉक बनाना एक कटौती योग्य (slashable) अपराध है, जिसे अक्सर "द्वि-प्रमाणन" के रूप में जाना जाता है।
ब्लॉक कैसे बनाया जाता है?
ब्लॉक प्रस्तावक से एक हस्ताक्षरित बीकन ब्लॉक प्रसारित करने की अपेक्षा की जाती है जो उनके स्वयं के स्थानीय रूप से चलने वाले फोर्क चयन एल्गोरिथ्म के दृष्टिकोण के अनुसार चेन के सबसे हालिया हेड (head) के ऊपर बनता है। फोर्क चयन एल्गोरिथ्म पिछले स्लॉट से बचे हुए किसी भी कतारबद्ध अनुप्रमाणन को लागू करता है, फिर अपने इतिहास में अनुप्रमाणन के सबसे बड़े संचित भार वाले ब्लॉक को ढूंढता है। वह ब्लॉक प्रस्तावक द्वारा बनाए गए नए ब्लॉक का पैरेंट (parent) होता है।
ब्लॉक प्रस्तावक अपने स्वयं के स्थानीय डेटाबेस और चेन के दृष्टिकोण से डेटा एकत्र करके एक ब्लॉक बनाता है। ब्लॉक की सामग्री नीचे दिए गए स्निपेट में दिखाई गई है:
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 जमा अनुबंध के ब्लॉक प्रस्तावक के दृष्टिकोण के लिए एक वोट है, जिसमें जमा मर्कल ट्राई (Merkle trie) का रूट और जमा की कुल संख्या शामिल है जो नई जमाओं को सत्यापित करने में सक्षम बनाती है। graffiti एक वैकल्पिक फ़ील्ड है जिसका उपयोग ब्लॉक में एक संदेश जोड़ने के लिए किया जा सकता है। proposer_slashings और attester_slashings ऐसे फ़ील्ड हैं जिनमें इस बात का प्रमाण होता है कि चेन के प्रस्तावक के दृष्टिकोण के अनुसार कुछ सत्यापकों ने कटौती योग्य अपराध किए हैं। deposits नए सत्यापक जमाओं की एक सूची है जिसके बारे में ब्लॉक प्रस्तावक को जानकारी है, और voluntary_exits उन सत्यापकों की एक सूची है जो निकास करना चाहते हैं जिनके बारे में ब्लॉक प्रस्तावक ने सर्वसम्मति परत गॉसिप नेटवर्क पर सुना है। sync_aggregate एक वेक्टर है जो यह दर्शाता है कि किन सत्यापकों को पहले सिंक समिति (सत्यापकों का एक उपसमूह जो लाइट क्लाइंट डेटा प्रदान करता है) को सौंपा गया था और डेटा पर हस्ताक्षर करने में भाग लिया था।
execution_payload निष्पादन क्लाइंट और सर्वसम्मति क्लाइंट के बीच लेनदेन के बारे में जानकारी पारित करने में सक्षम बनाता है। execution_payload निष्पादन डेटा का एक ब्लॉक है जो एक बीकन ब्लॉक के अंदर नेस्ट (nested) हो जाता है। execution_payload के अंदर के फ़ील्ड इथेरियम येलो पेपर में उल्लिखित ब्लॉक संरचना को दर्शाते हैं, सिवाय इसके कि इसमें कोई ओमर (ommers) नहीं हैं और difficulty के स्थान पर prev_randao मौजूद है। निष्पादन क्लाइंट के पास लेनदेन के एक स्थानीय पूल तक पहुंच होती है जिसके बारे में उसने अपने स्वयं के गॉसिप नेटवर्क पर सुना है। इन लेनदेन को स्थानीय रूप से निष्पादित किया जाता है ताकि एक अद्यतन स्टेट ट्राई उत्पन्न हो सके जिसे पोस्ट-स्टेट (post-state) के रूप में जाना जाता है। लेनदेन को execution_payload में transactions नामक सूची के रूप में शामिल किया जाता है और पोस्ट-स्टेट state-root फ़ील्ड में प्रदान की जाती है।
यह सारा डेटा एक बीकन ब्लॉक में एकत्र किया जाता है, हस्ताक्षरित किया जाता है, और ब्लॉक प्रस्तावक के साथियों (peers) को प्रसारित किया जाता है, जो इसे अपने साथियों आदि तक प्रचारित करते हैं।
ब्लॉक की शारीरिक रचना (anatomy) के बारे में और पढ़ें।
ब्लॉक का क्या होता है?
ब्लॉक को ब्लॉक प्रस्तावक के स्थानीय डेटाबेस में जोड़ा जाता है और सर्वसम्मति परत गॉसिप नेटवर्क पर साथियों को प्रसारित किया जाता है। जब कोई सत्यापक ब्लॉक प्राप्त करता है, तो वह इसके अंदर के डेटा को सत्यापित करता है, जिसमें यह जाँचना शामिल है कि ब्लॉक का सही पैरेंट है, सही स्लॉट से मेल खाता है, कि प्रस्तावक सूचकांक अपेक्षित है, कि RANDAO प्रकटीकरण (reveal) मान्य है और प्रस्तावक की कटौती नहीं की गई है। execution_payload को अनबंडल किया जाता है, और सत्यापक का निष्पादन क्लाइंट प्रस्तावित स्थिति परिवर्तन की जांच करने के लिए सूची में लेनदेन को फिर से निष्पादित करता है। यह मानते हुए कि ब्लॉक इन सभी जांचों को पास कर लेता है, प्रत्येक सत्यापक ब्लॉक को अपनी स्वयं की विहित (canonical) चेन में जोड़ता है। फिर यह प्रक्रिया अगले स्लॉट में फिर से शुरू होती है।
ब्लॉक पुरस्कार
ब्लॉक प्रस्तावक को उनके काम के लिए भुगतान प्राप्त होता है। एक base_reward है जिसकी गणना सक्रिय सत्यापकों की संख्या और उनके प्रभावी बैलेंस के एक फ़ंक्शन के रूप में की जाती है। फिर ब्लॉक प्रस्तावक को ब्लॉक में शामिल प्रत्येक वैध अनुप्रमाणन के लिए base_reward का एक अंश प्राप्त होता है; जितने अधिक सत्यापक ब्लॉक का अनुप्रमाणन करते हैं, ब्लॉक प्रस्तावक का पुरस्कार उतना ही अधिक होता है। उन सत्यापकों की रिपोर्ट करने के लिए भी एक पुरस्कार है जिनकी कटौती की जानी चाहिए, जो प्रत्येक कटौती किए गए सत्यापक के लिए 1/512 * effective balance के बराबर है।
पुरस्कारों और दंडों के बारे में अधिक जानकारी