मुख्य सामग्री पर जाएं

इथेरियम श्वेतपत्र

पढ़ने से पहले

क्या आप इथेरियम को समझना चाहते हैं?

यह श्वेतपत्र इथेरियम के लॉन्च होने से पहले 2014 में प्रकाशित हुआ था। 10+ वर्षों के विकास, प्रमुख अपग्रेड और इकोसिस्टम के विकास के बाद, मूल श्वेतपत्र अब यह नहीं दर्शाता है कि आज इथेरियम क्या है

2014 के बाद से क्या बदला है?

    इथेरियम प्रूफ-ऑफ-वर्क (PoW) से प्रूफ-ऑफ़-स्टेक (PoS) पर चला गया (द मर्ज, 2022)
    लेयर 2 (L2) स्केलिंग समाधान अब लाखों लेनदेन को प्रोसेस करते हैं
    विकेंद्रीकृत वित्त (DeFi), NFTs, और DAOs प्रमुख उपयोग के मामलों के रूप में उभरे
    स्मार्ट अनुबंध मानक (ERC-20, ERC-721) उद्योग की नींव बन गए

हालाँकि यह कई साल पुराना है, फिर भी हम नीचे दिए गए मूल पेपर को बनाए रखते हैं क्योंकि यह एक उपयोगी संदर्भ और इथेरियम व इसके दृष्टिकोण के सटीक प्रतिनिधित्व के रूप में काम करता है।

एक अगली पीढ़ी का स्मार्ट अनुबंध और विकेंद्रीकृत एप्लिकेशन प्लेटफ़ॉर्म

2009 में सातोशी नाकामोतो द्वारा बिटकॉइन के विकास को अक्सर धन और मुद्रा के क्षेत्र में एक क्रांतिकारी कदम के रूप में सराहा गया है, जो एक ऐसी डिजिटल संपत्ति का पहला उदाहरण है जिसका एक ही समय में न तो कोई समर्थन या "आंतरिक मूल्य (opens in a new tab)" है और न ही कोई केंद्रीकृत जारीकर्ता या नियंत्रक है। हालाँकि, बिटकॉइन प्रयोग का एक अन्य, और यकीनन अधिक महत्वपूर्ण हिस्सा, वितरित सर्वसम्मति के एक उपकरण के रूप में इसकी अंतर्निहित ब्लॉकचेन तकनीक है, और अब ध्यान तेजी से बिटकॉइन के इस दूसरे पहलू की ओर स्थानांतरित होने लगा है। ब्लॉकचेन तकनीक के आमतौर पर बताए गए वैकल्पिक अनुप्रयोगों में शामिल हैं: कस्टम मुद्राओं और वित्तीय साधनों ("कलर्ड कॉइन्स (opens in a new tab)") का प्रतिनिधित्व करने के लिए ऑन-ब्लॉकचेन डिजिटल संपत्तियों का उपयोग, किसी अंतर्निहित भौतिक उपकरण का स्वामित्व ("स्मार्ट प्रॉपर्टी (opens in a new tab)"), डोमेन नाम जैसी अपूरणीय संपत्तियां ("Namecoin (opens in a new tab)"), और साथ ही ऐसे अधिक जटिल अनुप्रयोग जिनमें डिजिटल संपत्तियों को सीधे मनमाने नियमों को लागू करने वाले कोड के एक हिस्से ("स्मार्ट अनुबंध (opens in a new tab)") या यहां तक कि ब्लॉकचेन-आधारित "विकेंद्रीकृत स्वायत्त संगठनों (opens in a new tab)" (DAO) द्वारा नियंत्रित किया जाता है। इथेरियम का उद्देश्य एक अंतर्निहित पूर्ण विकसित ट्यूरिंग-कम्प्लीट प्रोग्रामिंग भाषा के साथ एक ब्लॉकचेन प्रदान करना है, जिसका उपयोग ऐसे "अनुबंध" बनाने के लिए किया जा सकता है जो मनमाने स्थिति संक्रमण कार्यों को एन्कोड कर सकें, जिससे उपयोगकर्ता केवल कोड की कुछ पंक्तियों में लॉजिक लिखकर ऊपर वर्णित किसी भी सिस्टम को, साथ ही कई अन्य सिस्टम जिनकी हमने अभी तक कल्पना भी नहीं की है, बना सकें।

बिटकॉइन और मौजूदा अवधारणाओं का परिचय

इतिहास

विकेंद्रीकृत डिजिटल मुद्रा की अवधारणा, साथ ही संपत्ति रजिस्ट्रियों जैसे वैकल्पिक एप्लिकेशन, दशकों से मौजूद हैं। 1980 और 1990 के दशक के अनाम ई-कैश प्रोटोकॉल, जो मुख्य रूप से Chaumian blinding नामक एक क्रिप्टोग्राफ़िक प्रिमिटिव पर निर्भर थे, ने उच्च स्तर की गोपनीयता वाली मुद्रा प्रदान की, लेकिन एक केंद्रीकृत मध्यस्थ पर निर्भरता के कारण प्रोटोकॉल काफी हद तक कर्षण प्राप्त करने में विफल रहे। 1998 में, वेई दाई का b-money (opens in a new tab) कम्प्यूटेशनल पहेलियों को हल करने के साथ-साथ विकेंद्रीकृत सर्वसम्मति के माध्यम से पैसा बनाने के विचार को पेश करने वाला पहला प्रस्ताव बन गया, लेकिन प्रस्ताव में इस बात का विवरण कम था कि विकेंद्रीकृत सर्वसम्मति को वास्तव में कैसे लागू किया जा सकता है। 2005 में, हैल फ़िनी ने "reusable proofs of work (opens in a new tab)" की एक अवधारणा पेश की, एक ऐसी प्रणाली जो क्रिप्टोकरेंसी के लिए एक अवधारणा बनाने के लिए एडम बैक की कम्प्यूटेशनल रूप से कठिन Hashcash पहेलियों के साथ b-money के विचारों का उपयोग करती है, लेकिन एक बार फिर बैकएंड के रूप में विश्वसनीय कंप्यूटिंग पर निर्भर होकर आदर्श से पीछे रह गई। 2009 में, सातोशी नाकामोतो द्वारा पहली बार व्यवहार में एक विकेंद्रीकृत मुद्रा लागू की गई थी, जिसमें सार्वजनिक कुंजी क्रिप्टोग्राफी के माध्यम से स्वामित्व के प्रबंधन के लिए स्थापित प्रिमिटिव्स को एक सर्वसम्मति एल्गोरिदम के साथ जोड़ा गया था, जो यह ट्रैक रखता है कि सिक्कों का मालिक कौन है, जिसे "प्रूफ-ऑफ-वर्क (PoW)" के रूप में जाना जाता है।

प्रूफ-ऑफ-वर्क (PoW) के पीछे का तंत्र इस क्षेत्र में एक बड़ी सफलता थी क्योंकि इसने एक साथ दो समस्याओं को हल किया। पहला, इसने एक सरल और मध्यम रूप से प्रभावी सर्वसम्मति एल्गोरिदम प्रदान किया, जिससे नेटवर्क में नोड्स को सामूहिक रूप से बिटकॉइन लेज़र की स्थिति में विहित अपडेट के एक सेट पर सहमत होने की अनुमति मिली। दूसरा, इसने सर्वसम्मति प्रक्रिया में मुफ्त प्रवेश की अनुमति देने के लिए एक तंत्र प्रदान किया, यह तय करने की राजनीतिक समस्या को हल किया कि सर्वसम्मति को कौन प्रभावित करता है, जबकि एक साथ सिबिल हमलों को रोकता है। यह भागीदारी के लिए एक औपचारिक बाधा को प्रतिस्थापित करके ऐसा करता है, जैसे कि किसी विशेष सूची में एक अद्वितीय इकाई के रूप में पंजीकृत होने की आवश्यकता, एक आर्थिक बाधा के साथ - सर्वसम्मति वोटिंग प्रक्रिया में एक एकल नोड का वजन सीधे उस कंप्यूटिंग शक्ति के आनुपातिक होता है जो नोड लाता है। तब से, प्रूफ-ऑफ़-स्टेक (PoS) नामक एक वैकल्पिक दृष्टिकोण प्रस्तावित किया गया है, जो एक नोड के वजन की गणना उसकी मुद्रा होल्डिंग्स के आनुपातिक रूप में करता है न कि कम्प्यूटेशनल संसाधनों के; दोनों दृष्टिकोणों के सापेक्ष गुणों की चर्चा इस पेपर के दायरे से बाहर है, लेकिन यह ध्यान दिया जाना चाहिए कि दोनों दृष्टिकोणों का उपयोग क्रिप्टोकरेंसी की रीढ़ के रूप में काम करने के लिए किया जा सकता है।

एक स्थिति संक्रमण प्रणाली के रूप में बिटकॉइन

Ethereum state transition

तकनीकी दृष्टिकोण से, बिटकॉइन जैसी क्रिप्टोकरेंसी के लेज़र को एक स्थिति संक्रमण प्रणाली के रूप में सोचा जा सकता है, जहां एक "स्थिति" होती है जिसमें सभी मौजूदा बिटकॉइन की स्वामित्व स्थिति होती है और एक "स्थिति संक्रमण फ़ंक्शन" होता है जो एक स्थिति और एक लेन-देन लेता है और एक नई स्थिति आउटपुट करता है जो परिणाम है। एक मानक बैंकिंग प्रणाली में, उदाहरण के लिए, स्थिति एक बैलेंस शीट है, एक लेन-देन A से B में $X ले जाने का अनुरोध है, और स्थिति संक्रमण फ़ंक्शन A के खाते में मूल्य को $X से कम कर देता है और B के खाते में मूल्य को $X से बढ़ा देता है। यदि A के खाते में पहले स्थान पर $X से कम है, तो स्थिति संक्रमण फ़ंक्शन एक त्रुटि देता है। इसलिए, कोई औपचारिक रूप से परिभाषित कर सकता है:

APPLY(S,TX) -> S' or ERROR

ऊपर परिभाषित बैंकिंग प्रणाली में:

APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }

लेकिन:

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR

बिटकॉइन में "स्थिति" उन सभी सिक्कों (तकनीकी रूप से, "unspent transaction outputs" या UTXO) का संग्रह है जिन्हें ढाला गया है और अभी तक खर्च नहीं किया गया है, प्रत्येक UTXO का एक मूल्यवर्ग और एक मालिक होता है (एक 20-बाइट पता द्वारा परिभाषित जो अनिवार्य रूप से एक क्रिप्टोग्राफ़िक सार्वजनिक कुंजी हैfn1)। एक लेन-देन में एक या अधिक इनपुट होते हैं, प्रत्येक इनपुट में एक मौजूदा UTXO का संदर्भ और मालिक के पता से जुड़ी निजी कुंजी द्वारा निर्मित एक क्रिप्टोग्राफ़िक हस्ताक्षर होता है, और एक या अधिक आउटपुट होते हैं, प्रत्येक आउटपुट में स्थिति में जोड़ा जाने वाला एक नया UTXO होता है।

स्थिति संक्रमण फ़ंक्शन APPLY(S,TX) -> S' को मोटे तौर पर निम्नानुसार परिभाषित किया जा सकता है:

  1. TX में प्रत्येक इनपुट के लिए:

    • यदि संदर्भित UTXO S में नहीं है, तो एक त्रुटि लौटाएं।
    • यदि प्रदान किया गया हस्ताक्षर UTXO के मालिक से मेल नहीं खाता है, तो एक त्रुटि लौटाएं।
  2. यदि सभी इनपुट UTXO के मूल्यवर्ग का योग सभी आउटपुट UTXO के मूल्यवर्ग के योग से कम है, तो एक त्रुटि लौटाएं।
  3. सभी इनपुट UTXO हटाए गए और सभी आउटपुट UTXO जोड़े गए के साथ S लौटाएं।

पहले चरण का पहला भाग लेन-देन भेजने वालों को उन सिक्कों को खर्च करने से रोकता है जो मौजूद नहीं हैं, पहले चरण का दूसरा भाग लेन-देन भेजने वालों को अन्य लोगों के सिक्कों को खर्च करने से रोकता है, और दूसरा चरण मूल्य के संरक्षण को लागू करता है। भुगतान के लिए इसका उपयोग करने के लिए, प्रोटोकॉल इस प्रकार है। मान लीजिए कि ऐलिस बॉब को 11.7 BTC भेजना चाहती है। सबसे पहले, ऐलिस उपलब्ध UTXO के एक सेट की तलाश करेगी जो उसके पास है और जिसका कुल योग कम से कम 11.7 BTC है। वास्तविक रूप से, ऐलिस को ठीक 11.7 BTC नहीं मिल पाएंगे; मान लें कि उसे सबसे छोटा 6+4+2=12 मिल सकता है। वह फिर उन तीन इनपुट और दो आउटपुट के साथ एक लेन-देन बनाती है। पहला आउटपुट 11.7 BTC होगा जिसका मालिक बॉब का पता होगा, और दूसरा आउटपुट शेष 0.3 BTC "चेंज" होगा, जिसकी मालिक स्वयं ऐलिस होगी।

खनन

Ethereum blocks

यदि हमारे पास एक भरोसेमंद केंद्रीकृत सेवा तक पहुंच होती, तो इस प्रणाली को लागू करना बहुत आसान होता; इसे स्थिति का ट्रैक रखने के लिए एक केंद्रीकृत सर्वर की हार्ड ड्राइव का उपयोग करके, बिल्कुल वर्णित अनुसार कोड किया जा सकता था। हालाँकि, बिटकॉइन के साथ हम एक विकेंद्रीकृत मुद्रा प्रणाली बनाने की कोशिश कर रहे हैं, इसलिए हमें यह सुनिश्चित करने के लिए स्थिति लेन-देन प्रणाली को एक सर्वसम्मति प्रणाली के साथ जोड़ना होगा कि हर कोई लेन-देन के क्रम पर सहमत हो। बिटकॉइन की विकेंद्रीकृत सर्वसम्मति प्रक्रिया के लिए नेटवर्क में नोड्स को "ब्लॉक" नामक लेन-देन के पैकेज बनाने का लगातार प्रयास करने की आवश्यकता होती है। नेटवर्क का उद्देश्य हर दस मिनट में लगभग एक ब्लॉक का उत्पादन करना है, जिसमें प्रत्येक ब्लॉक में एक टाइमस्टैम्प, एक नॉन्स, पिछले ब्लॉक का संदर्भ (यानी, हैश) और पिछले ब्लॉक के बाद से हुए सभी लेन-देन की सूची होती है। समय के साथ, यह एक स्थायी, लगातार बढ़ने वाली, "ब्लॉकचेन" बनाता है जो बिटकॉइन लेज़र की नवीनतम स्थिति का प्रतिनिधित्व करने के लिए लगातार अपडेट होती है।

यह जांचने के लिए एल्गोरिदम कि क्या कोई ब्लॉक मान्य है, इस प्रतिमान में व्यक्त किया गया है, इस प्रकार है:

  1. जांचें कि क्या ब्लॉक द्वारा संदर्भित पिछला ब्लॉक मौजूद है और मान्य है।
  2. जांचें कि ब्लॉक का टाइमस्टैम्प पिछले ब्लॉकfn2 से अधिक है और भविष्य में 2 घंटे से कम है
  3. जांचें कि ब्लॉक पर प्रूफ-ऑफ-वर्क (PoW) मान्य है।
  4. मान लें कि S[0] पिछले ब्लॉक के अंत में स्थिति है।
  5. मान लीजिए TX ब्लॉक की लेन-देन सूची है जिसमें n लेन-देन हैं। 0...n-1 में सभी i के लिए, S[i+1] = APPLY(S[i],TX[i]) सेट करें। यदि कोई एप्लिकेशन त्रुटि देता है, तो बाहर निकलें और गलत (false) लौटाएं।
  6. सही (true) लौटाएं, और इस ब्लॉक के अंत में स्थिति के रूप में S[n] को पंजीकृत करें।

अनिवार्य रूप से, ब्लॉक में प्रत्येक लेन-देन को लेन-देन निष्पादित होने से पहले की विहित स्थिति से किसी नई स्थिति में एक मान्य स्थिति संक्रमण प्रदान करना चाहिए। ध्यान दें कि स्थिति किसी भी तरह से ब्लॉक में एन्कोड नहीं की गई है; यह पूरी तरह से एक अमूर्तता है जिसे मान्य करने वाले नोड द्वारा याद रखा जाना चाहिए और केवल जेनेसिस स्थिति से शुरू करके और प्रत्येक ब्लॉक में प्रत्येक लेन-देन को क्रमिक रूप से लागू करके किसी भी ब्लॉक के लिए (सुरक्षित रूप से) गणना की जा सकती है। इसके अतिरिक्त, ध्यान दें कि जिस क्रम में खनिक ब्लॉक में लेन-देन शामिल करता है वह मायने रखता है; यदि किसी ब्लॉक में दो लेन-देन A और B इस प्रकार हैं कि B, A द्वारा बनाए गए UTXO को खर्च करता है, तो ब्लॉक मान्य होगा यदि A, B से पहले आता है लेकिन अन्यथा नहीं।

उपरोक्त सूची में मौजूद एक वैधता शर्त जो अन्य प्रणालियों में नहीं पाई जाती है, वह "प्रूफ-ऑफ-वर्क (PoW)" की आवश्यकता है। सटीक शर्त यह है कि प्रत्येक ब्लॉक का डबल-SHA256 हैश, जिसे 256-बिट संख्या के रूप में माना जाता है, एक गतिशील रूप से समायोजित लक्ष्य से कम होना चाहिए, जो इस लेखन के समय लगभग 2187 है। इसका उद्देश्य ब्लॉक निर्माण को कम्प्यूटेशनल रूप से "कठिन" बनाना है, जिससे सिबिल हमलावरों को अपने पक्ष में पूरी ब्लॉकचेन को फिर से बनाने से रोका जा सके। क्योंकि SHA256 को पूरी तरह से अप्रत्याशित छद्म-यादृच्छिक फ़ंक्शन होने के लिए डिज़ाइन किया गया है, एक मान्य ब्लॉक बनाने का एकमात्र तरीका केवल परीक्षण और त्रुटि है, बार-बार नॉन्स को बढ़ाना और यह देखना कि क्या नया हैश मेल खाता है।

~2187 के वर्तमान लक्ष्य पर, एक मान्य ब्लॉक मिलने से पहले नेटवर्क को औसतन ~269 प्रयास करने होंगे; सामान्य तौर पर, लक्ष्य को हर 2016 ब्लॉक में नेटवर्क द्वारा पुनर्गणना किया जाता है ताकि औसतन हर दस मिनट में नेटवर्क में किसी नोड द्वारा एक नया ब्लॉक तैयार किया जा सके। इस कम्प्यूटेशनल कार्य के लिए खनिकों को क्षतिपूर्ति करने के लिए, प्रत्येक ब्लॉक का खनिक एक लेन-देन शामिल करने का हकदार है जो खुद को कहीं से भी 25 BTC देता है। इसके अतिरिक्त, यदि किसी लेन-देन के इनपुट में उसके आउटपुट की तुलना में अधिक कुल मूल्यवर्ग है, तो अंतर भी खनिक को "लेन-देन शुल्क" के रूप में जाता है। संयोग से, यह एकमात्र तंत्र भी है जिसके द्वारा BTC जारी किए जाते हैं; जेनेसिस स्थिति में कोई सिक्के नहीं थे।

खनन के उद्देश्य को बेहतर ढंग से समझने के लिए, आइए जांच करें कि दुर्भावनापूर्ण हमलावर की स्थिति में क्या होता है। चूंकि बिटकॉइन की अंतर्निहित क्रिप्टोग्राफी को सुरक्षित माना जाता है, इसलिए हमलावर बिटकॉइन प्रणाली के उस एक हिस्से को लक्षित करेगा जो सीधे क्रिप्टोग्राफी द्वारा संरक्षित नहीं है: लेन-देन का क्रम। हमलावर की रणनीति सरल है:

  1. किसी उत्पाद (अधिमानतः एक त्वरित-वितरण डिजिटल सामान) के बदले में एक व्यापारी को 100 BTC भेजें
  2. उत्पाद की डिलीवरी की प्रतीक्षा करें
  3. उसी 100 BTC को खुद को भेजने वाला एक और लेन-देन तैयार करें
  4. नेटवर्क को यह समझाने की कोशिश करें कि उसका खुद का लेन-देन वह था जो पहले आया था।

एक बार चरण (1) हो जाने के बाद, कुछ मिनटों के बाद कोई खनिक लेन-देन को एक ब्लॉक में शामिल करेगा, मान लें कि ब्लॉक संख्या 270000। लगभग एक घंटे के बाद, उस ब्लॉक के बाद चेन में पांच और ब्लॉक जोड़े गए होंगे, जिनमें से प्रत्येक ब्लॉक अप्रत्यक्ष रूप से लेन-देन की ओर इशारा करता है और इस प्रकार इसकी "पुष्टि" करता है। इस बिंदु पर, व्यापारी भुगतान को अंतिम रूप दिया गया मानकर स्वीकार करेगा और उत्पाद वितरित करेगा; चूंकि हम मान रहे हैं कि यह एक डिजिटल सामान है, इसलिए डिलीवरी तत्काल है। अब, हमलावर 100 BTC खुद को भेजने वाला एक और लेन-देन बनाता है। यदि हमलावर इसे केवल व्यवहार में (in the wild) जारी करता है, तो लेन-देन संसाधित नहीं किया जाएगा; खनिक APPLY(S,TX) चलाने का प्रयास करेंगे और देखेंगे कि TX एक UTXO की खपत करता है जो अब स्थिति में नहीं है। इसलिए इसके बजाय, हमलावर ब्लॉकचेन का एक "फ़ोर्क" बनाता है, जो ब्लॉक 270000 के एक अन्य संस्करण का खनन करके शुरू होता है जो उसी ब्लॉक 269999 को मूल (parent) के रूप में इंगित करता है लेकिन पुराने के स्थान पर नए लेन-देन के साथ। क्योंकि ब्लॉक डेटा अलग है, इसके लिए प्रूफ-ऑफ-वर्क (PoW) को फिर से करने की आवश्यकता होती है। इसके अलावा, हमलावर के ब्लॉक 270000 के नए संस्करण में एक अलग हैश है, इसलिए मूल ब्लॉक 270001 से 270005 इसकी ओर "इशारा" नहीं करते हैं; इस प्रकार, मूल चेन और हमलावर की नई चेन पूरी तरह से अलग हैं। नियम यह है कि एक फ़ोर्क में सबसे लंबी ब्लॉकचेन को सत्य माना जाता है, और इसलिए वैध खनिक 270005 चेन पर काम करेंगे जबकि हमलावर अकेला 270000 चेन पर काम कर रहा है। हमलावर को अपनी ब्लॉकचेन को सबसे लंबा बनाने के लिए, उसे पकड़ने के लिए शेष नेटवर्क की तुलना में अधिक कम्प्यूटेशनल शक्ति की आवश्यकता होगी (इसलिए, "51% हमला")।

मर्कल ट्री

SPV in Bitcoin

बाएं: एक शाखा की वैधता का प्रमाण देने के लिए मर्कल ट्री में केवल कुछ ही नोड्स प्रस्तुत करना पर्याप्त है।

दाएं: मर्कल ट्री के किसी भी हिस्से को बदलने का कोई भी प्रयास अंततः चेन में कहीं न कहीं विसंगति पैदा करेगा।

बिटकॉइन की एक महत्वपूर्ण स्केलेबिलिटी विशेषता यह है कि ब्लॉक को बहु-स्तरीय डेटा संरचना में संग्रहीत किया जाता है। एक ब्लॉक का "हैश" वास्तव में केवल ब्लॉक हेडर का हैश होता है, जो लगभग 200-बाइट का डेटा होता है जिसमें टाइमस्टैम्प, नॉन्स, पिछले ब्लॉक का हैश और मर्कल ट्री नामक डेटा संरचना का रूट हैश होता है जो ब्लॉक में सभी लेन-देन को संग्रहीत करता है। एक मर्कल ट्री एक प्रकार का बाइनरी ट्री है, जो नोड्स के एक सेट से बना होता है जिसमें ट्री के निचले भाग में बड़ी संख्या में लीफ नोड्स होते हैं जिनमें अंतर्निहित डेटा होता है, मध्यवर्ती नोड्स का एक सेट जहां प्रत्येक नोड अपने दो बच्चों का हैश होता है, और अंत में एक एकल रूट नोड, जो अपने दो बच्चों के हैश से भी बनता है, जो ट्री के "शीर्ष" का प्रतिनिधित्व करता है। मर्कल ट्री का उद्देश्य ब्लॉक में डेटा को टुकड़ों में वितरित करने की अनुमति देना है: एक नोड एक स्रोत से केवल ब्लॉक का हेडर डाउनलोड कर सकता है, दूसरे स्रोत से उनके लिए प्रासंगिक ट्री का छोटा हिस्सा, और फिर भी आश्वस्त हो सकता है कि सभी डेटा सही है। यह काम करने का कारण यह है कि हैश ऊपर की ओर फैलते हैं: यदि कोई दुर्भावनापूर्ण उपयोगकर्ता मर्कल ट्री के निचले भाग में एक नकली लेन-देन को स्वैप करने का प्रयास करता है, तो यह परिवर्तन ऊपर के नोड में बदलाव का कारण बनेगा, और फिर उसके ऊपर के नोड में बदलाव होगा, अंततः ट्री के रूट को बदल देगा और इसलिए ब्लॉक के हैश को बदल देगा, जिससे प्रोटोकॉल इसे पूरी तरह से अलग ब्लॉक के रूप में पंजीकृत करेगा (लगभग निश्चित रूप से एक अमान्य प्रूफ-ऑफ-वर्क (PoW) के साथ)।

मर्कल ट्री प्रोटोकॉल यकीनन दीर्घकालिक स्थिरता के लिए आवश्यक है। बिटकॉइन नेटवर्क में एक "पूर्ण नोड", जो प्रत्येक ब्लॉक की संपूर्णता को संग्रहीत और संसाधित करता है, अप्रैल 2014 तक बिटकॉइन नेटवर्क में लगभग 15 GB डिस्क स्थान लेता है, और प्रति माह एक गीगाबाइट से अधिक बढ़ रहा है। वर्तमान में, यह कुछ डेस्कटॉप कंप्यूटरों के लिए व्यवहार्य है और फोन के लिए नहीं, और भविष्य में बाद में केवल व्यवसाय और शौक़ीन ही भाग ले पाएंगे। "सरलीकृत भुगतान सत्यापन" (SPV) के रूप में जाना जाने वाला एक प्रोटोकॉल नोड्स के एक अन्य वर्ग को मौजूद होने की अनुमति देता है, जिसे "लाइट नोड" कहा जाता है, जो ब्लॉक हेडर डाउनलोड करते हैं, ब्लॉक हेडर पर प्रूफ-ऑफ-वर्क (PoW) को सत्यापित करते हैं, और फिर केवल उन "शाखाओं" को डाउनलोड करते हैं जो उनके लिए प्रासंगिक लेन-देन से जुड़ी होती हैं। यह लाइट नोड्स को सुरक्षा की मजबूत गारंटी के साथ यह निर्धारित करने की अनुमति देता है कि किसी भी बिटकॉइन लेन-देन की स्थिति और उनका वर्तमान शेष क्या है, जबकि संपूर्ण ब्लॉकचेन का केवल एक बहुत छोटा हिस्सा डाउनलोड किया जाता है।

वैकल्पिक ब्लॉकचेन एप्लिकेशन

अंतर्निहित ब्लॉकचेन विचार को लेने और इसे अन्य अवधारणाओं पर लागू करने के विचार का भी एक लंबा इतिहास है। 2005 में, निक ज़ाबो "secure property titles with owner authority (opens in a new tab)" की अवधारणा के साथ आए, एक दस्तावेज़ जिसमें वर्णन किया गया है कि कैसे "प्रतिकृति डेटाबेस तकनीक में नई प्रगति" एक ब्लॉकचेन-आधारित प्रणाली की अनुमति देगी जो यह संग्रहीत करने के लिए एक रजिस्ट्री संग्रहीत करेगी कि किस भूमि का मालिक कौन है, जिसमें होमस्टेडिंग, प्रतिकूल कब्ज़ा और जॉर्जियाई भूमि कर जैसी अवधारणाओं सहित एक विस्तृत ढांचा तैयार किया जाएगा। हालाँकि, दुर्भाग्य से उस समय कोई प्रभावी प्रतिकृति डेटाबेस प्रणाली उपलब्ध नहीं थी, और इसलिए प्रोटोकॉल को कभी भी व्यवहार में लागू नहीं किया गया था। 2009 के बाद, हालांकि, एक बार बिटकॉइन की विकेंद्रीकृत सर्वसम्मति विकसित हो जाने के बाद कई वैकल्पिक एप्लिकेशन तेजी से उभरने लगे।

  • Namecoin - 2010 में बनाया गया, Namecoin (opens in a new tab) को एक विकेंद्रीकृत नाम पंजीकरण डेटाबेस के रूप में सबसे अच्छी तरह वर्णित किया गया है। Tor, बिटकॉइन और BitMessage जैसे विकेंद्रीकृत प्रोटोकॉल में, खातों की पहचान करने का कोई तरीका होना चाहिए ताकि अन्य लोग उनके साथ बातचीत कर सकें, लेकिन सभी मौजूदा समाधानों में उपलब्ध एकमात्र प्रकार का पहचानकर्ता 1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy जैसा एक छद्म-यादृच्छिक हैश है। आदर्श रूप से, कोई "george" जैसे नाम वाला खाता रखना चाहेगा। हालाँकि, समस्या यह है कि यदि एक व्यक्ति "george" नाम का खाता बना सकता है तो कोई अन्य व्यक्ति भी उसी प्रक्रिया का उपयोग करके अपने लिए "george" पंजीकृत कर सकता है और उनका प्रतिरूपण कर सकता है। एकमात्र समाधान फर्स्ट-टू-फाइल प्रतिमान है, जहां पहला पंजीकरणकर्ता सफल होता है और दूसरा विफल रहता है - एक समस्या जो बिटकॉइन सर्वसम्मति प्रोटोकॉल के लिए पूरी तरह से अनुकूल है। Namecoin ऐसे विचार का उपयोग करने वाली नाम पंजीकरण प्रणाली का सबसे पुराना और सबसे सफल कार्यान्वयन है।
  • रंगीन सिक्के (Colored coins) - colored coins (opens in a new tab) का उद्देश्य एक प्रोटोकॉल के रूप में काम करना है जो लोगों को अपनी स्वयं की डिजिटल मुद्राएं बनाने की अनुमति देता है - या, एक इकाई वाली मुद्रा के महत्वपूर्ण तुच्छ मामले में, बिटकॉइन ब्लॉकचेन पर डिजिटल टोकन। रंगीन सिक्के प्रोटोकॉल में, कोई एक विशिष्ट बिटकॉइन UTXO को सार्वजनिक रूप से एक रंग निर्दिष्ट करके एक नई मुद्रा "जारी" करता है, और प्रोटोकॉल पुनरावर्ती रूप से अन्य UTXO के रंग को उन इनपुट के रंग के समान परिभाषित करता है जो उन्हें बनाने वाले लेन-देन ने खर्च किए थे (मिश्रित-रंग इनपुट के मामले में कुछ विशेष नियम लागू होते हैं)। यह उपयोगकर्ताओं को केवल एक विशिष्ट रंग के UTXO वाले वॉलेट बनाए रखने और उन्हें नियमित बिटकॉइन की तरह भेजने की अनुमति देता है, जो किसी भी UTXO के रंग को निर्धारित करने के लिए ब्लॉकचेन के माध्यम से पीछे की ओर जाते हैं जो उन्हें प्राप्त होते हैं।
  • मेटाकॉइन्स (Metacoins) - मेटाकॉइन के पीछे का विचार एक ऐसा प्रोटोकॉल होना है जो बिटकॉइन के शीर्ष पर रहता है, मेटाकॉइन लेन-देन को संग्रहीत करने के लिए बिटकॉइन लेन-देन का उपयोग करता है लेकिन एक अलग स्थिति संक्रमण फ़ंक्शन, APPLY' होता है। क्योंकि मेटाकॉइन प्रोटोकॉल अमान्य मेटाकॉइन लेन-देन को बिटकॉइन ब्लॉकचेन में दिखाई देने से नहीं रोक सकता है, एक नियम जोड़ा गया है कि यदि APPLY'(S,TX) एक त्रुटि देता है, तो प्रोटोकॉल APPLY'(S,TX) = S पर डिफ़ॉल्ट हो जाता है। यह एक मनमाना क्रिप्टोकरेंसी प्रोटोकॉल बनाने के लिए एक आसान तंत्र प्रदान करता है, संभावित रूप से उन्नत सुविधाओं के साथ जिन्हें बिटकॉइन के अंदर लागू नहीं किया जा सकता है, लेकिन बहुत कम विकास लागत के साथ क्योंकि खनन और नेटवर्किंग की जटिलताओं को पहले से ही बिटकॉइन प्रोटोकॉल द्वारा नियंत्रित किया जाता है। मेटाकॉइन्स का उपयोग वित्तीय अनुबंधों, नाम पंजीकरण और विकेंद्रीकृत विनिमय के कुछ वर्गों को लागू करने के लिए किया गया है।

इस प्रकार, सामान्य तौर पर, सर्वसम्मति प्रोटोकॉल बनाने की दिशा में दो दृष्टिकोण हैं: एक स्वतंत्र नेटवर्क बनाना, और बिटकॉइन के शीर्ष पर एक प्रोटोकॉल बनाना। पूर्व दृष्टिकोण, जबकि Namecoin जैसे एप्लिकेशन के मामले में यथोचित रूप से सफल है, लागू करना मुश्किल है; प्रत्येक व्यक्तिगत कार्यान्वयन को एक स्वतंत्र ब्लॉकचेन को बूटस्ट्रैप करने के साथ-साथ सभी आवश्यक स्थिति संक्रमण और नेटवर्किंग कोड के निर्माण और परीक्षण की आवश्यकता होती है। इसके अतिरिक्त, हम भविष्यवाणी करते हैं कि विकेंद्रीकृत सर्वसम्मति तकनीक के लिए एप्लिकेशन का सेट एक पावर लॉ वितरण का पालन करेगा जहां अधिकांश एप्लिकेशन अपनी स्वयं की ब्लॉकचेन की गारंटी देने के लिए बहुत छोटे होंगे, और हम ध्यान देते हैं कि विकेंद्रीकृत एप्लिकेशन के बड़े वर्ग मौजूद हैं, विशेष रूप से विकेंद्रीकृत स्वायत्त संगठन, जिन्हें एक-दूसरे के साथ बातचीत करने की आवश्यकता है।

दूसरी ओर, बिटकॉइन-आधारित दृष्टिकोण में यह दोष है कि यह बिटकॉइन की सरलीकृत भुगतान सत्यापन सुविधाओं को प्राप्त नहीं करता है। SPV बिटकॉइन के लिए काम करता है क्योंकि यह वैधता के लिए प्रॉक्सी के रूप में ब्लॉकचेन गहराई का उपयोग कर सकता है; किसी बिंदु पर, एक बार जब किसी लेन-देन के पूर्वज काफी पीछे चले जाते हैं, तो यह कहना सुरक्षित है कि वे वैध रूप से स्थिति का हिस्सा थे। दूसरी ओर, ब्लॉकचेन-आधारित मेटा-प्रोटोकॉल, ब्लॉकचेन को उन लेन-देन को शामिल न करने के लिए बाध्य नहीं कर सकते हैं जो उनके स्वयं के प्रोटोकॉल के संदर्भ में मान्य नहीं हैं। इसलिए, एक पूरी तरह से सुरक्षित SPV मेटा-प्रोटोकॉल कार्यान्वयन को यह निर्धारित करने के लिए बिटकॉइन ब्लॉकचेन की शुरुआत तक पीछे की ओर स्कैन करने की आवश्यकता होगी कि कुछ लेन-देन मान्य हैं या नहीं। वर्तमान में, बिटकॉइन-आधारित मेटा-प्रोटोकॉल के सभी "लाइट" कार्यान्वयन डेटा प्रदान करने के लिए एक विश्वसनीय सर्वर पर निर्भर करते हैं, यकीनन एक अत्यधिक उप-इष्टतम परिणाम विशेष रूप से तब जब क्रिप्टोकरेंसी के प्राथमिक उद्देश्यों में से एक विश्वास की आवश्यकता को समाप्त करना है।

स्क्रिप्टिंग

बिना किसी एक्सटेंशन के भी, बिटकॉइन प्रोटोकॉल वास्तव में "स्मार्ट अनुबंध" की अवधारणा के एक कमजोर संस्करण की सुविधा प्रदान करता है। बिटकॉइन में UTXO का स्वामित्व न केवल एक सार्वजनिक कुंजी के पास हो सकता है, बल्कि एक सरल स्टैक-आधारित प्रोग्रामिंग भाषा में व्यक्त एक अधिक जटिल स्क्रिप्ट द्वारा भी हो सकता है। इस प्रतिमान में, उस UTXO को खर्च करने वाले लेन-देन को ऐसा डेटा प्रदान करना चाहिए जो स्क्रिप्ट को संतुष्ट करता हो। वास्तव में, बुनियादी सार्वजनिक कुंजी स्वामित्व तंत्र भी एक स्क्रिप्ट के माध्यम से लागू किया जाता है: स्क्रिप्ट इनपुट के रूप में एक दीर्घवृत्तीय वक्र हस्ताक्षर लेती है, इसे लेन-देन और उस पता के विरुद्ध सत्यापित करती है जो UTXO का मालिक है, और यदि सत्यापन सफल होता है तो 1 लौटाती है और अन्यथा 0 लौटाती है। विभिन्न अतिरिक्त उपयोग के मामलों के लिए अन्य, अधिक जटिल, स्क्रिप्ट मौजूद हैं। उदाहरण के लिए, कोई एक ऐसी स्क्रिप्ट बना सकता है जिसे मान्य करने के लिए दी गई तीन निजी कुंजियों में से दो के हस्ताक्षर की आवश्यकता होती है ("मल्टीसिग"), एक सेटअप जो कॉर्पोरेट खातों, सुरक्षित बचत खातों और कुछ मर्चेंट एस्क्रो स्थितियों के लिए उपयोगी है। स्क्रिप्ट का उपयोग कम्प्यूटेशनल समस्याओं के समाधान के लिए बाउंटी का भुगतान करने के लिए भी किया जा सकता है, और कोई एक ऐसी स्क्रिप्ट भी बना सकता है जो कुछ इस तरह कहती है "यह बिटकॉइन UTXO आपका है यदि आप एक SPV प्रमाण प्रदान कर सकते हैं कि आपने मुझे इस मूल्यवर्ग का एक Dogecoin लेन-देन भेजा है", अनिवार्य रूप से विकेंद्रीकृत क्रॉस-क्रिप्टोकरेंसी विनिमय की अनुमति देता है।

हालाँकि, बिटकॉइन में लागू की गई स्क्रिप्टिंग भाषा की कई महत्वपूर्ण सीमाएँ हैं:

  • ट्यूरिंग-पूर्णता का अभाव - कहने का तात्पर्य यह है कि, जबकि गणना का एक बड़ा उपसमुच्चय है जिसका बिटकॉइन स्क्रिप्टिंग भाषा समर्थन करती है, यह लगभग हर चीज का समर्थन नहीं करती है। मुख्य श्रेणी जो गायब है वह लूप है। यह लेन-देन सत्यापन के दौरान अनंत लूप से बचने के लिए किया जाता है; सैद्धांतिक रूप से यह स्क्रिप्ट प्रोग्रामर के लिए एक पार करने योग्य बाधा है, क्योंकि किसी भी लूप को केवल if स्टेटमेंट के साथ अंतर्निहित कोड को कई बार दोहराकर अनुकरण किया जा सकता है, लेकिन यह ऐसी स्क्रिप्ट की ओर ले जाता है जो बहुत अधिक स्थान-अकुशल (space-inefficient) होती हैं। उदाहरण के लिए, एक वैकल्पिक दीर्घवृत्तीय वक्र हस्ताक्षर एल्गोरिदम को लागू करने के लिए संभवतः 256 बार-बार गुणा राउंड की आवश्यकता होगी जो सभी व्यक्तिगत रूप से कोड में शामिल होंगे।
  • मूल्य-अंधापन (Value-blindness) - UTXO स्क्रिप्ट के लिए निकाली जा सकने वाली राशि पर सूक्ष्म नियंत्रण प्रदान करने का कोई तरीका नहीं है। उदाहरण के लिए, ऑरेकल अनुबंध का एक शक्तिशाली उपयोग मामला एक हेजिंग अनुबंध होगा, जहां A और B $1000 मूल्य का BTC डालते हैं और 30 दिनों के बाद स्क्रिप्ट A को $1000 मूल्य का BTC और बाकी B को भेजती है। इसके लिए USD में 1 BTC का मूल्य निर्धारित करने के लिए एक ऑरेकल की आवश्यकता होगी, लेकिन तब भी यह अब उपलब्ध पूरी तरह से केंद्रीकृत समाधानों की तुलना में विश्वास और बुनियादी ढांचे की आवश्यकता के मामले में एक बड़ा सुधार है। हालाँकि, क्योंकि UTXO सब-या-कुछ नहीं (all-or-nothing) हैं, इसे प्राप्त करने का एकमात्र तरीका अलग-अलग मूल्यवर्ग के कई UTXO (उदा., 30 तक प्रत्येक k के लिए 2k का एक UTXO) रखने और ऑरेकल को यह चुनने के लिए कि कौन सा UTXO A को भेजना है और कौन सा B को, बहुत ही अकुशल हैक के माध्यम से है।
  • स्थिति का अभाव - UTXO को या तो खर्च किया जा सकता है या बिना खर्च किया हुआ रखा जा सकता है; बहु-चरणीय अनुबंधों या स्क्रिप्ट के लिए कोई अवसर नहीं है जो इसके अलावा कोई अन्य आंतरिक स्थिति रखते हैं। इससे बहु-चरणीय विकल्प अनुबंध, विकेंद्रीकृत विनिमय ऑफ़र या दो-चरणीय क्रिप्टोग्राफ़िक प्रतिबद्धता प्रोटोकॉल (सुरक्षित कम्प्यूटेशनल बाउंटी के लिए आवश्यक) बनाना कठिन हो जाता है। इसका मतलब यह भी है कि UTXO का उपयोग केवल सरल, एकमुश्त अनुबंध बनाने के लिए किया जा सकता है और विकेंद्रीकृत संगठनों जैसे अधिक जटिल "स्टेटफुल" अनुबंधों के लिए नहीं, और मेटा-प्रोटोकॉल को लागू करना मुश्किल बनाता है। मूल्य-अंधापन के साथ संयुक्त बाइनरी स्थिति का मतलब यह भी है कि एक और महत्वपूर्ण एप्लिकेशन, निकासी सीमा, असंभव है।
  • ब्लॉकचेन-अंधापन (Blockchain-blindness) - UTXO ब्लॉकचेन डेटा जैसे नॉन्स, टाइमस्टैम्प और पिछले ब्लॉक हैश के प्रति अंधे हैं। यह स्क्रिप्टिंग भाषा को यादृच्छिकता के संभावित मूल्यवान स्रोत से वंचित करके जुए और कई अन्य श्रेणियों में एप्लिकेशन को गंभीर रूप से सीमित करता है।

इस प्रकार, हम क्रिप्टोकरेंसी के शीर्ष पर उन्नत एप्लिकेशन बनाने के तीन दृष्टिकोण देखते हैं: एक नई ब्लॉकचेन बनाना, बिटकॉइन के शीर्ष पर स्क्रिप्टिंग का उपयोग करना, और बिटकॉइन के शीर्ष पर एक मेटा-प्रोटोकॉल बनाना। एक नई ब्लॉकचेन बनाने से फीचर सेट बनाने में असीमित स्वतंत्रता मिलती है, लेकिन विकास के समय, बूटस्ट्रैपिंग प्रयास और सुरक्षा की कीमत पर। स्क्रिप्टिंग का उपयोग करना लागू करना और मानकीकृत करना आसान है, लेकिन इसकी क्षमताओं में बहुत सीमित है, और मेटा-प्रोटोकॉल, हालांकि आसान हैं, स्केलेबिलिटी में दोषों से ग्रस्त हैं। इथेरियम के साथ, हम एक वैकल्पिक ढांचा बनाने का इरादा रखते हैं जो विकास में आसानी के साथ-साथ और भी मजबूत लाइट क्लाइंट गुणों में और भी बड़ा लाभ प्रदान करता है, जबकि एक ही समय में एप्लिकेशन को एक आर्थिक वातावरण और ब्लॉकचेन सुरक्षा साझा करने की अनुमति देता है।

इथेरियम

इथेरियम का आशय विकेंद्रीकृत एप्लिकेशन (dapp) बनाने के लिए एक वैकल्पिक प्रोटोकॉल बनाना है, जो ट्रेडऑफ़ का एक अलग सेट प्रदान करता है जो हमें लगता है कि विकेंद्रीकृत एप्लिकेशन (dapp) के एक बड़े वर्ग के लिए बहुत उपयोगी होगा, विशेष रूप से उन स्थितियों पर जोर देते हुए जहां तेजी से विकास का समय, छोटे और शायद ही कभी उपयोग किए जाने वाले एप्लिकेशनों के लिए सुरक्षा, और विभिन्न एप्लिकेशनों की बहुत कुशलता से बातचीत करने की क्षमता महत्वपूर्ण है। इथेरियम अनिवार्य रूप से अंतिम अमूर्त मूलभूत परत का निर्माण करके ऐसा करता है: एक अंतर्निहित ट्यूरिंग-पूर्ण प्रोग्रामिंग भाषा के साथ एक ब्लॉकचेन, जो किसी को भी स्मार्ट अनुबंध और विकेंद्रीकृत एप्लिकेशन (dapp) लिखने की अनुमति देता है जहां वे स्वामित्व, लेन-देन प्रारूपों और स्थिति संक्रमण कार्यों के लिए अपने स्वयं के मनमाने नियम बना सकते हैं। Namecoin का एक बुनियादी संस्करण कोड की दो पंक्तियों में लिखा जा सकता है, और मुद्राओं और प्रतिष्ठा प्रणालियों जैसे अन्य प्रोटोकॉल बीस से कम में बनाए जा सकते हैं। स्मार्ट अनुबंध, क्रिप्टोग्राफ़िक "बॉक्स" जिनमें मूल्य होता है और केवल कुछ शर्तें पूरी होने पर ही इसे अनलॉक करते हैं, प्लेटफ़ॉर्म के शीर्ष पर भी बनाए जा सकते हैं, जो ट्यूरिंग-पूर्णता, मूल्य-जागरूकता, ब्लॉकचेन-जागरूकता और स्थिति की अतिरिक्त शक्तियों के कारण बिटकॉइन स्क्रिप्टिंग द्वारा पेश की गई शक्ति से कहीं अधिक शक्ति के साथ होते हैं।

इथेरियम खाते

इथेरियम में, स्थिति "खातों" नामक ऑब्जेक्ट्स से बनी होती है, जिसमें प्रत्येक खाते का 20-बाइट पता होता है और स्थिति संक्रमण खातों के बीच मूल्य और जानकारी का सीधा ट्रांसफर होता है। एक इथेरियम खाते में चार फ़ील्ड होते हैं:

  • नॉन्स, एक काउंटर जिसका उपयोग यह सुनिश्चित करने के लिए किया जाता है कि प्रत्येक लेन-देन को केवल एक बार संसाधित किया जा सके
  • खाते का वर्तमान ईथर बैलेंस
  • खाते का अनुबंध कोड, यदि मौजूद हो
  • खाते का स्टोरेज (डिफ़ॉल्ट रूप से खाली)

"ईथर" इथेरियम का मुख्य आंतरिक क्रिप्टो-ईंधन है, और इसका उपयोग लेन-देन शुल्क का भुगतान करने के लिए किया जाता है। सामान्य तौर पर, दो प्रकार के खाते होते हैं: बाहरी रूप से स्वामित्व वाले खाते, जो निजी कुंजी द्वारा नियंत्रित होते हैं, और कॉन्ट्रैक्ट खाते, जो उनके अनुबंध कोड द्वारा नियंत्रित होते हैं। बाहरी रूप से स्वामित्व वाले खाते में कोई कोड नहीं होता है, और कोई भी लेन-देन बनाकर और हस्ताक्षर करना करके बाहरी रूप से स्वामित्व वाले खाते से संदेश भेज सकता है; एक कॉन्ट्रैक्ट खाते में, हर बार जब कॉन्ट्रैक्ट खाते को कोई संदेश मिलता है तो उसका कोड सक्रिय हो जाता है, जिससे वह आंतरिक स्टोरेज को पढ़ और लिख सकता है और बदले में अन्य संदेश भेज सकता है या अनुबंध बना सकता है।

ध्यान दें कि इथेरियम में "अनुबंधों" को ऐसी चीज़ के रूप में नहीं देखा जाना चाहिए जिसे "पूरा" किया जाना चाहिए या "अनुपालन" किया जाना चाहिए; बल्कि, वे "स्वायत्त एजेंटों" की तरह अधिक हैं जो इथेरियम निष्पादन वातावरण के अंदर रहते हैं, संदेश या लेन-देन द्वारा "पोक" किए जाने पर हमेशा कोड का एक विशिष्ट टुकड़ा निष्पादित करते हैं, और लगातार चर का ट्रैक रखने के लिए अपने स्वयं के ईथर बैलेंस और अपने स्वयं के की/वैल्यू स्टोर पर सीधा नियंत्रण रखते हैं।

संदेश और लेन-देन

इथेरियम में "लेन-देन" शब्द का उपयोग हस्ताक्षरित डेटा पैकेज को संदर्भित करने के लिए किया जाता है जो बाहरी रूप से स्वामित्व वाले खाते से भेजे जाने वाले संदेश को संग्रहीत करता है। लेन-देन में शामिल हैं:

  • संदेश का प्राप्तकर्ता
  • प्रेषक की पहचान करने वाला एक हस्ताक्षर
  • प्रेषक से प्राप्तकर्ता को ट्रांसफर करने के लिए ईथर की मात्रा
  • एक वैकल्पिक डेटा फ़ील्ड
  • एक STARTGAS मान, जो लेन-देन निष्पादन को लेने की अनुमति वाले कम्प्यूटेशनल चरणों की अधिकतम संख्या का प्रतिनिधित्व करता है
  • एक GASPRICE मान, जो प्रेषक द्वारा प्रति कम्प्यूटेशनल चरण भुगतान किए जाने वाले शुल्क का प्रतिनिधित्व करता है

पहले तीन मानक फ़ील्ड हैं जो किसी भी क्रिप्टोकरेंसी में अपेक्षित हैं। डेटा फ़ील्ड का डिफ़ॉल्ट रूप से कोई कार्य नहीं होता है, लेकिन वर्चुअल मशीन में एक ऑपकोड होता है जिसका उपयोग करके कोई अनुबंध डेटा तक पहुंच सकता है; एक उदाहरण उपयोग के मामले के रूप में, यदि कोई अनुबंध ऑन-ब्लॉकचेन डोमेन पंजीकरण सेवा के रूप में कार्य कर रहा है, तो वह उसे पास किए जा रहे डेटा की व्याख्या दो "फ़ील्ड" के रूप में करना चाह सकता है, पहला फ़ील्ड पंजीकृत करने के लिए एक डोमेन है और दूसरा फ़ील्ड वह IP पता है जिस पर इसे पंजीकृत करना है। अनुबंध संदेश डेटा से इन मानों को पढ़ेगा और उन्हें उचित रूप से स्टोरेज में रखेगा।

STARTGAS और GASPRICE फ़ील्ड इथेरियम के एंटी-डिनायल ऑफ़ सर्विस मॉडल के लिए महत्वपूर्ण हैं। कोड में आकस्मिक या शत्रुतापूर्ण अनंत लूप या अन्य कम्प्यूटेशनल बर्बादी को रोकने के लिए, प्रत्येक लेन-देन को यह सीमा निर्धारित करने की अपेक्षा करना है कि वह कोड निष्पादन के कितने कम्प्यूटेशनल चरणों का उपयोग कर सकता है। गणना की मूल इकाई "गैस" है; आमतौर पर, एक कम्प्यूटेशनल चरण की लागत 1 गैस होती है, लेकिन कुछ ऑपरेशनों में अधिक मात्रा में गैस खर्च होती है क्योंकि वे कम्प्यूटेशनल रूप से अधिक महंगे होते हैं, या उस डेटा की मात्रा बढ़ाते हैं जिसे स्थिति के हिस्से के रूप में संग्रहीत किया जाना चाहिए। लेन-देन डेटा में प्रत्येक बाइट के लिए 5 गैस का शुल्क भी है। शुल्क प्रणाली का आशय यह है कि हमलावर को उनके द्वारा उपभोग किए जाने वाले प्रत्येक संसाधन के लिए आनुपातिक रूप से भुगतान करने की आवश्यकता हो, जिसमें गणना, बैंडविड्थ और स्टोरेज शामिल हैं; इसलिए, कोई भी लेन-देन जो नेटवर्क को इनमें से किसी भी संसाधन की अधिक मात्रा का उपभोग करने की ओर ले जाता है, उसमें वृद्धि के लगभग आनुपातिक गैस शुल्क होना चाहिए।

संदेश

अनुबंधों में अन्य अनुबंधों को "संदेश" भेजने की क्षमता होती है। संदेश आभासी ऑब्जेक्ट होते हैं जिन्हें कभी क्रमबद्ध नहीं किया जाता है और केवल इथेरियम निष्पादन वातावरण में मौजूद होते हैं। एक संदेश में शामिल हैं:

  • संदेश का प्रेषक (निहित)
  • संदेश का प्राप्तकर्ता
  • संदेश के साथ ट्रांसफर करने के लिए ईथर की मात्रा
  • एक वैकल्पिक डेटा फ़ील्ड
  • एक STARTGAS मान

अनिवार्य रूप से, एक संदेश एक लेन-देन की तरह है, सिवाय इसके कि यह एक अनुबंध द्वारा निर्मित होता है न कि किसी बाहरी अभिनेता द्वारा। एक संदेश तब उत्पन्न होता है जब वर्तमान में कोड निष्पादित कर रहा कोई अनुबंध CALL ऑपकोड निष्पादित करता है, जो एक संदेश उत्पन्न करता है और निष्पादित करता है। लेन-देन की तरह, एक संदेश प्राप्तकर्ता खाते को अपना कोड चलाने की ओर ले जाता है। इस प्रकार, अनुबंधों का अन्य अनुबंधों के साथ ठीक उसी तरह संबंध हो सकता है जैसे बाहरी अभिनेताओं का हो सकता है।

ध्यान दें कि किसी लेन-देन या अनुबंध द्वारा निर्दिष्ट गैस व्यय सीमा उस लेन-देन और सभी उप-निष्पादनों द्वारा खपत की गई कुल गैस पर लागू होती है। उदाहरण के लिए, यदि कोई बाहरी अभिनेता A, B को 1000 गैस के साथ एक लेन-देन भेजता है, और B, C को संदेश भेजने से पहले 600 गैस की खपत करता है, और C का आंतरिक निष्पादन वापस आने से पहले 300 गैस की खपत करता है, तो B गैस खत्म होने से पहले 100 और गैस खर्च कर सकता है।

इथेरियम स्थिति संक्रमण फ़ंक्शन

Ether state transition

इथेरियम स्थिति संक्रमण फ़ंक्शन, APPLY(S,TX) -> S' को निम्नानुसार परिभाषित किया जा सकता है:

  1. जांचें कि क्या लेन-देन अच्छी तरह से बना है (यानी, मानों की सही संख्या है), हस्ताक्षर मान्य है, और नॉन्स प्रेषक के खाते में नॉन्स से मेल खाता है। यदि नहीं, तो एक त्रुटि लौटाएं।
  2. लेन-देन शुल्क की गणना STARTGAS * GASPRICE के रूप में करें, और हस्ताक्षर से भेजने वाले पते का निर्धारण करें। प्रेषक के खाते के बैलेंस से शुल्क घटाएं और प्रेषक के नॉन्स को बढ़ाएं। यदि खर्च करने के लिए पर्याप्त बैलेंस नहीं है, तो एक त्रुटि लौटाएं।
  3. GAS = STARTGAS को प्रारंभ करें, और लेन-देन में बाइट्स के भुगतान के लिए प्रति बाइट गैस की एक निश्चित मात्रा निकालें।
  4. प्रेषक के खाते से प्राप्तकर्ता खाते में लेन-देन मूल्य ट्रांसफर करें। यदि प्राप्तकर्ता खाता अभी तक मौजूद नहीं है, तो इसे बनाएं। यदि प्राप्तकर्ता खाता एक अनुबंध है, तो अनुबंध के कोड को या तो पूरा होने तक या निष्पादन में गैस खत्म होने तक चलाएं।
  5. यदि मूल्य ट्रांसफर विफल हो गया क्योंकि प्रेषक के पास पर्याप्त पैसा नहीं था, या कोड निष्पादन में गैस खत्म हो गई, तो शुल्क के भुगतान को छोड़कर सभी स्थिति परिवर्तनों को रिवर्ट करें, और खनिक के खाते में शुल्क जोड़ें।
  6. अन्यथा, प्रेषक को सभी शेष गैस के लिए शुल्क वापस करें, और खनिक को खपत की गई गैस के लिए भुगतान किया गया शुल्क भेजें।

उदाहरण के लिए, मान लें कि अनुबंध का कोड है:

if !self.storage[calldataload(0)]:
  self.storage[calldataload(0)] = calldataload(32)

ध्यान दें कि वास्तव में अनुबंध कोड निम्न-स्तरीय EVM कोड में लिखा गया है; यह उदाहरण स्पष्टता के लिए हमारी उच्च-स्तरीय भाषाओं में से एक, Serpent में लिखा गया है, और इसे EVM कोड में संकलित किया जा सकता है। मान लीजिए कि अनुबंध का स्टोरेज खाली शुरू होता है, और 10 ईथर मूल्य, 2000 गैस, 0.001 ईथर गैस मूल्य, और 64 बाइट्स डेटा के साथ एक लेन-देन भेजा जाता है, जिसमें बाइट्स 0-31 संख्या 2 का प्रतिनिधित्व करते हैं और बाइट्स 32-63 स्ट्रिंग CHARLIEfn3 का प्रतिनिधित्व करते हैं। इस मामले में स्थिति संक्रमण फ़ंक्शन की प्रक्रिया इस प्रकार है:

  1. जांचें कि लेन-देन मान्य और अच्छी तरह से बना है।
  2. जांचें कि लेन-देन प्रेषक के पास कम से कम 2000 * 0.001 = 2 ईथर हैं। यदि ऐसा है, तो प्रेषक के खाते से 2 ईथर घटाएं।
  3. गैस = 2000 प्रारंभ करें; यह मानते हुए कि लेन-देन 170 बाइट लंबा है और बाइट-शुल्क 5 है, 850 घटाएं ताकि 1150 गैस बचे।
  4. प्रेषक के खाते से 10 और ईथर घटाएं, और इसे अनुबंध के खाते में जोड़ें।
  5. कोड चलाएं। इस मामले में, यह सरल है: यह जांचता है कि क्या सूचकांक 2 पर अनुबंध का स्टोरेज उपयोग किया गया है, यह देखता है कि ऐसा नहीं है, और इसलिए यह सूचकांक 2 पर स्टोरेज को CHARLIE मान पर सेट करता है। मान लीजिए कि इसमें 187 गैस लगती है, तो गैस की शेष मात्रा 1150 - 187 = 963 है
  6. प्रेषक के खाते में 963 * 0.001 = 0.963 ईथर वापस जोड़ें, और परिणामी स्थिति लौटाएं।

यदि लेन-देन के प्राप्तकर्ता छोर पर कोई अनुबंध नहीं था, तो कुल लेन-देन शुल्क केवल प्रदान किए गए GASPRICE को बाइट्स में लेन-देन की लंबाई से गुणा करने के बराबर होगा, और लेन-देन के साथ भेजा गया डेटा अप्रासंगिक होगा।

ध्यान दें कि संदेश रिवर्ट के संदर्भ में लेन-देन के समान ही काम करते हैं: यदि किसी संदेश निष्पादन में गैस खत्म हो जाती है, तो उस संदेश का निष्पादन, और उस निष्पादन द्वारा ट्रिगर किए गए अन्य सभी निष्पादन, रिवर्ट हो जाते हैं, लेकिन मूल निष्पादनों को रिवर्ट करने की आवश्यकता नहीं होती है। इसका मतलब है कि एक अनुबंध के लिए दूसरे अनुबंध को कॉल करना "सुरक्षित" है, जैसे कि यदि A, B को G गैस के साथ कॉल करता है तो A के निष्पादन में अधिकतम G गैस खोने की गारंटी है। अंत में, ध्यान दें कि एक ऑपकोड, CREATE है, जो एक अनुबंध बनाता है; इसके निष्पादन यांत्रिकी आम तौर पर CALL के समान होते हैं, इस अपवाद के साथ कि निष्पादन का आउटपुट एक नए बनाए गए अनुबंध का कोड निर्धारित करता है।

कोड निष्पादन

इथेरियम अनुबंधों में कोड एक निम्न-स्तरीय, स्टैक-आधारित बाइटकोड भाषा में लिखा जाता है, जिसे "इथेरियम वर्चुअल मशीन कोड" या "EVM कोड" कहा जाता है। कोड में बाइट्स की एक श्रृंखला होती है, जहां प्रत्येक बाइट एक ऑपरेशन का प्रतिनिधित्व करता है। सामान्य तौर पर, कोड निष्पादन एक अनंत लूप है जिसमें वर्तमान प्रोग्राम काउंटर (जो शून्य से शुरू होता है) पर बार-बार ऑपरेशन करना और फिर प्रोग्राम काउंटर को एक से बढ़ाना शामिल है, जब तक कि कोड के अंत तक नहीं पहुंच जाता या कोई त्रुटि या STOP या RETURN निर्देश का पता नहीं चल जाता। ऑपरेशनों की तीन प्रकार के स्थान तक पहुंच होती है जिसमें डेटा संग्रहीत किया जा सकता है:

  • स्टैक, एक लास्ट-इन-फर्स्ट-आउट कंटेनर जिसमें मानों को पुश और पॉप किया जा सकता है
  • मेमोरी, एक असीम रूप से विस्तार योग्य बाइट ऐरे
  • अनुबंध का दीर्घकालिक स्टोरेज, एक की/वैल्यू स्टोर। स्टैक और मेमोरी के विपरीत, जो गणना समाप्त होने के बाद रीसेट हो जाते हैं, स्टोरेज लंबी अवधि तक बना रहता है।

कोड आने वाले संदेश के मूल्य, प्रेषक और डेटा के साथ-साथ ब्लॉक हेडर डेटा तक भी पहुंच सकता है, और कोड आउटपुट के रूप में डेटा का बाइट ऐरे भी लौटा सकता है।

EVM कोड का औपचारिक निष्पादन मॉडल आश्चर्यजनक रूप से सरल है। जब इथेरियम वर्चुअल मशीन चल रही होती है, तो इसकी पूर्ण कम्प्यूटेशनल स्थिति को टपल (block_state, transaction, message, code, memory, stack, pc, gas) द्वारा परिभाषित किया जा सकता है, जहां block_state वैश्विक स्थिति है जिसमें सभी खाते शामिल हैं और इसमें बैलेंस और स्टोरेज शामिल हैं। निष्पादन के हर दौर की शुरुआत में, code का pcवां बाइट (या 0 यदि pc >= len(code)) लेकर वर्तमान निर्देश पाया जाता है, और प्रत्येक निर्देश की अपनी परिभाषा होती है कि यह टपल को कैसे प्रभावित करता है। उदाहरण के लिए, ADD स्टैक से दो आइटम पॉप करता है और उनके योग को पुश करता है, gas को 1 से कम करता है और pc को 1 से बढ़ाता है, और SSTORE स्टैक से शीर्ष दो आइटम पॉप करता है और दूसरे आइटम को पहले आइटम द्वारा निर्दिष्ट सूचकांक पर अनुबंध के स्टोरेज में सम्मिलित करता है। हालांकि जस्ट-इन-टाइम संकलन के माध्यम से इथेरियम वर्चुअल मशीन निष्पादन को अनुकूलित करने के कई तरीके हैं, इथेरियम का एक बुनियादी कार्यान्वयन कोड की कुछ सौ पंक्तियों में किया जा सकता है।

ब्लॉकचेन और खनन

Ethereum apply block diagram

इथेरियम ब्लॉकचेन कई मायनों में बिटकॉइन ब्लॉकचेन के समान है, हालांकि इसमें कुछ अंतर हैं। ब्लॉकचेन आर्किटेक्चर के संबंध में इथेरियम और बिटकॉइन के बीच मुख्य अंतर यह है कि, बिटकॉइन के विपरीत, इथेरियम ब्लॉक में लेन-देन सूची और सबसे हाल की स्थिति दोनों की एक प्रति होती है। इसके अलावा, दो अन्य मान, ब्लॉक संख्या और कठिनाई, भी ब्लॉक में संग्रहीत किए जाते हैं। इथेरियम में बुनियादी ब्लॉक सत्यापन एल्गोरिदम इस प्रकार है:

  1. जांचें कि क्या संदर्भित पिछला ब्लॉक मौजूद है और मान्य है।
  2. जांचें कि ब्लॉक का टाइमस्टैम्प संदर्भित पिछले ब्लॉक से अधिक है और भविष्य में 15 मिनट से कम है
  3. जांचें कि ब्लॉक संख्या, कठिनाई, लेन-देन रूट, अंकल रूट और गैस सीमा (विभिन्न निम्न-स्तरीय इथेरियम-विशिष्ट अवधारणाएं) मान्य हैं।
  4. जांचें कि ब्लॉक पर प्रूफ-ऑफ-वर्क (PoW) मान्य है।
  5. मान लें कि S[0] पिछले ब्लॉक के अंत में स्थिति है।
  6. मान लें कि TX ब्लॉक की लेन-देन सूची है, जिसमें n लेन-देन हैं। 0...n-1 में सभी i के लिए, S[i+1] = APPLY(S[i],TX[i]) सेट करें। यदि कोई एप्लिकेशन त्रुटि लौटाता है, या यदि इस बिंदु तक ब्लॉक में खपत की गई कुल गैस GASLIMIT से अधिक है, तो एक त्रुटि लौटाएं।
  7. मान लें कि S_FINAL, S[n] है, लेकिन खनिक को भुगतान किया गया ब्लॉक इनाम जोड़कर।
  8. जांचें कि क्या स्थिति S_FINAL का मर्कल ट्री रूट ब्लॉक हेडर में प्रदान किए गए अंतिम स्थिति रूट के बराबर है। यदि ऐसा है, तो ब्लॉक मान्य है; अन्यथा, यह मान्य नहीं है।

यह दृष्टिकोण पहली नज़र में अत्यधिक अक्षम लग सकता है, क्योंकि इसे प्रत्येक ब्लॉक के साथ पूरी स्थिति को संग्रहीत करने की आवश्यकता होती है, लेकिन वास्तव में दक्षता बिटकॉइन के बराबर होनी चाहिए। कारण यह है कि स्थिति ट्री संरचना में संग्रहीत होती है, और प्रत्येक ब्लॉक के बाद ट्री के केवल एक छोटे से हिस्से को बदलने की आवश्यकता होती है। इस प्रकार, सामान्य तौर पर, दो आसन्न ब्लॉकों के बीच ट्री का विशाल बहुमत समान होना चाहिए, और इसलिए डेटा को एक बार संग्रहीत किया जा सकता है और पॉइंटर्स (यानी, सबट्री के हैश) का उपयोग करके दो बार संदर्भित किया जा सकता है। इसे पूरा करने के लिए "पेट्रीसिया ट्री" के रूप में जाने जाने वाले एक विशेष प्रकार के ट्री का उपयोग किया जाता है, जिसमें मर्कल ट्री अवधारणा में एक संशोधन शामिल है जो नोड्स को कुशलतापूर्वक सम्मिलित करने और हटाने की अनुमति देता है, न कि केवल बदलने की। इसके अतिरिक्त, क्योंकि सभी स्थिति जानकारी अंतिम ब्लॉक का हिस्सा है, इसलिए पूरे ब्लॉकचेन इतिहास को संग्रहीत करने की कोई आवश्यकता नहीं है - एक रणनीति जिसे, यदि बिटकॉइन पर लागू किया जा सकता है, तो अंतरिक्ष में 5-20 गुना बचत प्रदान करने के लिए गणना की जा सकती है।

भौतिक हार्डवेयर के संदर्भ में, आमतौर पर पूछा जाने वाला प्रश्न यह है कि अनुबंध कोड "कहां" निष्पादित किया जाता है। इसका एक सरल उत्तर है: अनुबंध कोड निष्पादित करने की प्रक्रिया स्थिति संक्रमण फ़ंक्शन की परिभाषा का हिस्सा है, जो ब्लॉक सत्यापन एल्गोरिदम का हिस्सा है, इसलिए यदि किसी लेन-देन को ब्लॉक B में जोड़ा जाता है, तो उस लेन-देन द्वारा उत्पन्न कोड निष्पादन सभी नोड द्वारा निष्पादित किया जाएगा, अभी और भविष्य में, जो ब्लॉक B को डाउनलोड और मान्य करते हैं।

एप्लिकेशन

सामान्य तौर पर, इथेरियम (Ethereum) के ऊपर तीन प्रकार के एप्लिकेशन होते हैं। पहली श्रेणी वित्तीय एप्लिकेशन की है, जो उपयोगकर्ताओं को अपने पैसे का उपयोग करके प्रबंधन करने और अनुबंधों (contracts) में प्रवेश करने के अधिक शक्तिशाली तरीके प्रदान करती है। इसमें उप-मुद्राएं (sub-currencies), वित्तीय डेरिवेटिव, हेजिंग अनुबंध, बचत वॉलेट, वसीयत और अंततः पूर्ण पैमाने के रोजगार अनुबंधों के कुछ वर्ग भी शामिल हैं। दूसरी श्रेणी अर्ध-वित्तीय एप्लिकेशन की है, जहां पैसा शामिल होता है लेकिन जो किया जा रहा है उसका एक भारी गैर-मौद्रिक पक्ष भी होता है; इसका एक आदर्श उदाहरण कम्प्यूटेशनल समस्याओं के समाधान के लिए स्व-लागू (self-enforcing) बाउंटी है। अंत में, ऑनलाइन वोटिंग और विकेंद्रीकृत शासन (decentralized governance) जैसे एप्लिकेशन हैं जो बिल्कुल भी वित्तीय नहीं हैं।

टोकन सिस्टम

ऑन-ब्लॉकचेन (on-blockchain) टोकन सिस्टम के कई एप्लिकेशन हैं, जिनमें USD या सोने जैसी संपत्तियों का प्रतिनिधित्व करने वाली उप-मुद्राओं से लेकर कंपनी के स्टॉक, स्मार्ट संपत्ति का प्रतिनिधित्व करने वाले व्यक्तिगत टोकन, सुरक्षित जाली न बनाए जा सकने वाले कूपन, और यहां तक कि पारंपरिक मूल्य से बिल्कुल भी संबंध न रखने वाले टोकन सिस्टम शामिल हैं, जिनका उपयोग प्रोत्साहन के लिए पॉइंट सिस्टम के रूप में किया जाता है। इथेरियम में टोकन सिस्टम को लागू करना आश्चर्यजनक रूप से आसान है। समझने वाली मुख्य बात यह है कि एक मुद्रा, या टोकन सिस्टम, मूल रूप से एक डेटाबेस है जिसमें एक ऑपरेशन होता है: A से X इकाइयाँ घटाएं और B को X इकाइयाँ दें, इस शर्त के साथ कि (i) लेन-देन से पहले A के पास कम से कम X इकाइयाँ थीं और (2) लेन-देन को A द्वारा अनुमोदित किया गया है। टोकन सिस्टम को लागू करने के लिए बस इस लॉजिक को एक अनुबंध में लागू करने की आवश्यकता होती है।

Serpent में टोकन सिस्टम को लागू करने के लिए मूल कोड इस प्रकार दिखता है:

def send(to, value):
  if self.storage[msg.sender] >= value:
    self.storage[msg.sender] = self.storage[msg.sender] - value
    self.storage[to] = self.storage[to] + value

यह अनिवार्य रूप से इस दस्तावेज़ में ऊपर वर्णित "बैंकिंग सिस्टम" स्थिति संक्रमण फ़ंक्शन (state transition function) का शाब्दिक कार्यान्वयन है। सबसे पहले मुद्रा इकाइयों को वितरित करने के प्रारंभिक चरण और कुछ अन्य एज केस (edge cases) प्रदान करने के लिए कोड की कुछ अतिरिक्त पंक्तियाँ जोड़ने की आवश्यकता है, और आदर्श रूप से एक फ़ंक्शन जोड़ा जाएगा ताकि अन्य अनुबंध किसी पते के बैलेंस के लिए क्वेरी कर सकें। लेकिन बस इतना ही है। सैद्धांतिक रूप से, उप-मुद्राओं के रूप में कार्य करने वाले इथेरियम-आधारित टोकन सिस्टम में संभावित रूप से एक और महत्वपूर्ण विशेषता शामिल हो सकती है जो ऑनचेन बिटकॉइन-आधारित मेटा-मुद्राओं में नहीं है: सीधे उस मुद्रा में लेन-देन शुल्क का भुगतान करने की क्षमता। इसे इस तरह से लागू किया जाएगा कि अनुबंध एक ईथर बैलेंस बनाए रखेगा जिसके साथ वह प्रेषक को शुल्क का भुगतान करने के लिए उपयोग किए गए ईथर को वापस कर देगा, और यह शुल्क में ली जाने वाली आंतरिक मुद्रा इकाइयों को एकत्र करके और उन्हें लगातार चलने वाली नीलामी में फिर से बेचकर इस बैलेंस को फिर से भर देगा। इस प्रकार उपयोगकर्ताओं को ईथर के साथ अपने खातों को "सक्रिय" करने की आवश्यकता होगी, लेकिन एक बार ईथर वहां होने के बाद यह पुन: प्रयोज्य होगा क्योंकि अनुबंध हर बार इसे वापस कर देगा।

वित्तीय डेरिवेटिव और स्थिर-मूल्य मुद्राएं

वित्तीय डेरिवेटिव "स्मार्ट अनुबंध" का सबसे आम एप्लिकेशन है, और कोड में लागू करने के लिए सबसे सरल में से एक है। वित्तीय अनुबंधों को लागू करने में मुख्य चुनौती यह है कि उनमें से अधिकांश को बाहरी मूल्य टिकर के संदर्भ की आवश्यकता होती है; उदाहरण के लिए, एक बहुत ही वांछनीय एप्लिकेशन एक स्मार्ट अनुबंध है जो अमेरिकी डॉलर के संबंध में ईथर (या किसी अन्य क्रिप्टोकरेंसी) की अस्थिरता के खिलाफ बचाव (hedge) करता है, लेकिन ऐसा करने के लिए अनुबंध को यह जानना आवश्यक है कि ETH/USD का मूल्य क्या है। ऐसा करने का सबसे सरल तरीका एक विशिष्ट पार्टी (उदा., NASDAQ) द्वारा बनाए गए "डेटा फ़ीड" अनुबंध के माध्यम से है, जिसे इस तरह से डिज़ाइन किया गया है कि उस पार्टी के पास आवश्यकतानुसार अनुबंध को अपडेट करने की क्षमता हो, और एक ऐसा इंटरफ़ेस प्रदान करना जो अन्य अनुबंधों को उस अनुबंध को एक संदेश भेजने और एक प्रतिक्रिया वापस प्राप्त करने की अनुमति देता है जो मूल्य प्रदान करता है।

उस महत्वपूर्ण घटक को देखते हुए, हेजिंग अनुबंध इस प्रकार दिखेगा:

  1. पार्टी A द्वारा 1000 ईथर इनपुट करने की प्रतीक्षा करें।
  2. पार्टी B द्वारा 1000 ईथर इनपुट करने की प्रतीक्षा करें।
  3. डेटा फ़ीड अनुबंध को क्वेरी करके गणना किए गए 1000 ईथर के USD मूल्य को स्टोरेज में रिकॉर्ड करें, मान लें कि यह $x है।
  4. 30 दिनों के बाद, A या B को अनुबंध को "पुनः सक्रिय" करने की अनुमति दें ताकि A को $x मूल्य का ईथर (नया मूल्य प्राप्त करने के लिए डेटा फ़ीड अनुबंध को फिर से क्वेरी करके गणना की गई) और बाकी B को भेजा जा सके।

ऐसे अनुबंध में क्रिप्टो-कॉमर्स में महत्वपूर्ण क्षमता होगी। क्रिप्टोकरेंसी के बारे में बताई गई मुख्य समस्याओं में से एक यह तथ्य है कि यह अस्थिर है; हालांकि कई उपयोगकर्ता और व्यापारी क्रिप्टोग्राफ़िक संपत्तियों से निपटने की सुरक्षा और सुविधा चाह सकते हैं, लेकिन वे एक ही दिन में अपने फंड के मूल्य का 23% खोने की संभावना का सामना नहीं करना चाहेंगे। अब तक, सबसे अधिक प्रस्तावित समाधान जारीकर्ता-समर्थित (issuer-backed) संपत्तियां रहा है; विचार यह है कि एक जारीकर्ता एक उप-मुद्रा बनाता है जिसमें उन्हें इकाइयों को जारी करने और रद्द करने का अधिकार होता है, और किसी को भी मुद्रा की एक इकाई प्रदान करता है जो उन्हें (ऑफ़लाइन) एक निर्दिष्ट अंतर्निहित संपत्ति (उदा., सोना, USD) की एक इकाई प्रदान करता है। जारीकर्ता तब किसी को भी अंतर्निहित संपत्ति की एक इकाई प्रदान करने का वादा करता है जो क्रिप्टो-संपत्ति की एक इकाई वापस भेजता है। यह तंत्र किसी भी गैर-क्रिप्टोग्राफ़िक संपत्ति को क्रिप्टोग्राफ़िक संपत्ति में "उन्नत" करने की अनुमति देता है, बशर्ते कि जारीकर्ता पर भरोसा किया जा सके।

व्यवहार में, हालांकि, जारीकर्ता हमेशा भरोसेमंद नहीं होते हैं, और कुछ मामलों में बैंकिंग बुनियादी ढांचा ऐसी सेवाओं के अस्तित्व के लिए बहुत कमजोर, या बहुत प्रतिकूल होता है। वित्तीय डेरिवेटिव एक विकल्प प्रदान करते हैं। यहां, किसी संपत्ति का समर्थन करने के लिए फंड प्रदान करने वाले एकल जारीकर्ता के बजाय, सट्टेबाजों का एक विकेंद्रीकृत बाजार, जो यह शर्त लगाता है कि क्रिप्टोग्राफ़िक संदर्भ संपत्ति (उदा., ETH) की कीमत बढ़ जाएगी, वह भूमिका निभाता है। जारीकर्ताओं के विपरीत, सट्टेबाजों के पास सौदे के अपने पक्ष में डिफ़ॉल्ट करने का कोई विकल्प नहीं होता है क्योंकि हेजिंग अनुबंध उनके फंड को एस्क्रो (escrow) में रखता है। ध्यान दें कि यह दृष्टिकोण पूरी तरह से विकेंद्रीकृत नहीं है, क्योंकि मूल्य टिकर प्रदान करने के लिए अभी भी एक विश्वसनीय स्रोत की आवश्यकता है, हालांकि यकीनन अभी भी यह बुनियादी ढांचे की आवश्यकताओं को कम करने (एक जारीकर्ता होने के विपरीत, मूल्य फ़ीड जारी करने के लिए किसी लाइसेंस की आवश्यकता नहीं होती है और इसे संभावित रूप से मुक्त भाषण के रूप में वर्गीकृत किया जा सकता है) और धोखाधड़ी की संभावना को कम करने के मामले में एक बड़ा सुधार है।

पहचान और प्रतिष्ठा सिस्टम

सबसे शुरुआती वैकल्पिक क्रिप्टोकरेंसी, Namecoin (opens in a new tab) ने एक नाम पंजीकरण प्रणाली प्रदान करने के लिए बिटकॉइन-जैसे ब्लॉकचेन का उपयोग करने का प्रयास किया, जहां उपयोगकर्ता अन्य डेटा के साथ एक सार्वजनिक डेटाबेस में अपना नाम पंजीकृत कर सकते हैं। प्रमुख उद्धृत उपयोग का मामला DNS (opens in a new tab) सिस्टम के लिए है, जो "bitcoin.org" (या, Namecoin के मामले में, "bitcoin.bit") जैसे डोमेन नामों को IP पते पर मैप करता है। अन्य उपयोग के मामलों में ईमेल प्रमाणीकरण और संभावित रूप से अधिक उन्नत प्रतिष्ठा सिस्टम शामिल हैं। इथेरियम पर Namecoin-जैसी नाम पंजीकरण प्रणाली प्रदान करने के लिए मूल अनुबंध यहां दिया गया है:

def register(name, value):
  if !self.storage[name]:
    self.storage[name] = value

अनुबंध बहुत सरल है; यह इथेरियम नेटवर्क के अंदर एक डेटाबेस है जिसमें जोड़ा जा सकता है, लेकिन इसे संशोधित या हटाया नहीं जा सकता है। कोई भी व्यक्ति कुछ मूल्य के साथ एक नाम पंजीकृत कर सकता है, और वह पंजीकरण फिर हमेशा के लिए बना रहता है। एक अधिक परिष्कृत नाम पंजीकरण अनुबंध में एक "फ़ंक्शन क्लॉज़" भी होगा जो अन्य अनुबंधों को इसे क्वेरी करने की अनुमति देगा, साथ ही किसी नाम के "मालिक" (यानी, पहले पंजीकरणकर्ता) के लिए डेटा बदलने या स्वामित्व स्थानांतरित करने का एक तंत्र भी होगा। कोई भी इसके ऊपर प्रतिष्ठा और वेब-ऑफ़-ट्रस्ट कार्यक्षमता जोड़ सकता है।

विकेंद्रीकृत फ़ाइल स्टोरेज

पिछले कुछ वर्षों में, कई लोकप्रिय ऑनलाइन फ़ाइल स्टोरेज स्टार्टअप उभरे हैं, जिनमें सबसे प्रमुख ड्रॉपबॉक्स (Dropbox) है, जो उपयोगकर्ताओं को अपनी हार्ड ड्राइव का बैकअप अपलोड करने की अनुमति देता है और सेवा को बैकअप स्टोर करने और मासिक शुल्क के बदले उपयोगकर्ता को इसे एक्सेस करने की अनुमति देता है। हालांकि, इस बिंदु पर फ़ाइल स्टोरेज बाज़ार कभी-कभी अपेक्षाकृत अक्षम होता है; विभिन्न मौजूदा समाधानों पर एक सरसरी नज़र डालने से पता चलता है कि, विशेष रूप से "अनकैनी वैली" 20-200 GB स्तर पर जिस पर न तो मुफ्त कोटा और न ही एंटरप्राइज़-स्तरीय छूट लागू होती है, मुख्यधारा के फ़ाइल स्टोरेज लागतों के लिए मासिक मूल्य ऐसे हैं कि आप एक ही महीने में पूरी हार्ड ड्राइव की लागत से अधिक भुगतान कर रहे हैं। इथेरियम अनुबंध एक विकेंद्रीकृत फ़ाइल स्टोरेज पारिस्थितिकी तंत्र के विकास की अनुमति दे सकते हैं, जहां व्यक्तिगत उपयोगकर्ता अपनी हार्ड ड्राइव को किराए पर देकर थोड़ी मात्रा में पैसा कमा सकते हैं और अप्रयुक्त स्थान का उपयोग फ़ाइल स्टोरेज की लागत को और कम करने के लिए किया जा सकता है।

ऐसे उपकरण का मुख्य आधार वह होगा जिसे हमने "विकेंद्रीकृत ड्रॉपबॉक्स अनुबंध" कहा है। यह अनुबंध इस प्रकार काम करता है। सबसे पहले, कोई वांछित डेटा को ब्लॉकों में विभाजित करता है, गोपनीयता के लिए प्रत्येक ब्लॉक को एन्क्रिप्ट करता है, और इससे एक मर्कल ट्री बनाता है। फिर कोई इस नियम के साथ एक अनुबंध बनाता है कि, हर N ब्लॉक पर, अनुबंध मर्कल ट्री में एक यादृच्छिक सूचकांक (अनुबंध कोड से सुलभ पिछले ब्लॉक हैश का उपयोग करके, यादृच्छिकता के स्रोत के रूप में) चुनेगा, और ट्री में उस विशेष सूचकांक पर ब्लॉक के स्वामित्व के सरलीकृत भुगतान सत्यापन-जैसे प्रमाण के साथ लेन-देन की आपूर्ति करने वाली पहली इकाई को X ईथर देगा। जब कोई उपयोगकर्ता अपनी फ़ाइल को फिर से डाउनलोड करना चाहता है, तो वे फ़ाइल को पुनर्प्राप्त करने के लिए एक माइक्रोपेमेंट चैनल प्रोटोकॉल (उदा., प्रति 32 किलोबाइट 1 ज़ाबो का भुगतान करें) का उपयोग कर सकते हैं; भुगतानकर्ता के लिए सबसे अधिक शुल्क-कुशल दृष्टिकोण यह है कि वह अंत तक लेन-देन प्रकाशित न करे, इसके बजाय हर 32 किलोबाइट के बाद उसी नॉन्स के साथ लेन-देन को थोड़ा अधिक आकर्षक लेन-देन से बदल दे।

प्रोटोकॉल की एक महत्वपूर्ण विशेषता यह है कि, हालांकि ऐसा लग सकता है कि कोई फ़ाइल को न भूलने का निर्णय लेने के लिए कई यादृच्छिक नोड्स पर भरोसा कर रहा है, कोई भी गुप्त साझाकरण (secret sharing) के माध्यम से फ़ाइल को कई टुकड़ों में विभाजित करके, और यह देखने के लिए अनुबंधों को देखकर कि प्रत्येक टुकड़ा अभी भी किसी नोड के कब्जे में है, उस जोखिम को लगभग शून्य तक कम कर सकता है। यदि कोई अनुबंध अभी भी पैसे का भुगतान कर रहा है, तो यह एक क्रिप्टोग्राफ़िक प्रमाण प्रदान करता है कि कोई अभी भी फ़ाइल को स्टोर कर रहा है।

विकेंद्रीकृत स्वायत्त संगठन

"विकेंद्रीकृत स्वायत्त संगठन" (decentralized autonomous organization) की सामान्य अवधारणा एक आभासी इकाई की है जिसमें सदस्यों या शेयरधारकों का एक निश्चित समूह होता है, जिनके पास शायद 67% बहुमत के साथ, इकाई के फंड को खर्च करने और इसके कोड को संशोधित करने का अधिकार होता है। सदस्य सामूहिक रूप से यह तय करेंगे कि संगठन को अपने फंड का आवंटन कैसे करना चाहिए। DAO के फंड आवंटित करने के तरीके बाउंटी, वेतन से लेकर काम को पुरस्कृत करने के लिए आंतरिक मुद्रा जैसे और भी अधिक विदेशी तंत्रों तक हो सकते हैं। यह अनिवार्य रूप से एक पारंपरिक कंपनी या गैर-लाभकारी संस्था के कानूनी जाल को दोहराता है लेकिन प्रवर्तन के लिए केवल क्रिप्टोग्राफ़िक ब्लॉकचेन तकनीक का उपयोग करता है। अब तक DAO के इर्द-गिर्द अधिकांश चर्चा लाभांश प्राप्त करने वाले शेयरधारकों और व्यापार योग्य शेयरों के साथ "विकेंद्रीकृत स्वायत्त निगम" (DAC) के "पूंजीवादी" मॉडल के इर्द-गिर्द रही है; एक विकल्प, जिसे शायद "विकेंद्रीकृत स्वायत्त समुदाय" के रूप में वर्णित किया गया है, में सभी सदस्यों का निर्णय लेने में समान हिस्सा होगा और किसी सदस्य को जोड़ने या हटाने के लिए मौजूदा सदस्यों के 67% को सहमत होने की आवश्यकता होगी। यह आवश्यकता कि एक व्यक्ति के पास केवल एक सदस्यता हो सकती है, तब समूह द्वारा सामूहिक रूप से लागू की जानी चाहिए।

DAO को कोड करने के तरीके की एक सामान्य रूपरेखा इस प्रकार है। सबसे सरल डिज़ाइन केवल स्व-संशोधित कोड का एक टुकड़ा है जो बदल जाता है यदि दो तिहाई सदस्य किसी बदलाव पर सहमत होते हैं। हालांकि कोड सैद्धांतिक रूप से अपरिवर्तनीय है, कोई भी आसानी से इससे बच सकता है और अलग-अलग अनुबंधों में कोड के टुकड़े रखकर, और किस अनुबंध को कॉल करना है उसका पता परिवर्तनीय स्टोरेज में संग्रहीत करके वास्तविक परिवर्तनशीलता प्राप्त कर सकता है। ऐसे DAO अनुबंध के एक सरल कार्यान्वयन में, लेन-देन में प्रदान किए गए डेटा द्वारा प्रतिष्ठित तीन लेन-देन प्रकार होंगे:

  • स्टोरेज सूचकांक K पर पते को V मान में बदलने के लिए सूचकांक i के साथ एक प्रस्ताव दर्ज करने के लिए [0,i,K,V]
  • प्रस्ताव i के पक्ष में वोट दर्ज करने के लिए [1,i]
  • यदि पर्याप्त वोट दिए गए हैं तो प्रस्ताव i को अंतिम रूप देने के लिए [2,i]

अनुबंध में तब इनमें से प्रत्येक के लिए खंड होंगे। यह सभी खुले स्टोरेज परिवर्तनों का रिकॉर्ड बनाए रखेगा, साथ ही उन लोगों की सूची भी बनाए रखेगा जिन्होंने उनके लिए वोट किया था। इसमें सभी सदस्यों की सूची भी होगी। जब किसी स्टोरेज परिवर्तन के लिए दो तिहाई सदस्य वोट करते हैं, तो एक अंतिम लेन-देन परिवर्तन को निष्पादित कर सकता है। एक अधिक परिष्कृत ढांचे में लेन-देन भेजने, सदस्यों को जोड़ने और सदस्यों को हटाने जैसी सुविधाओं के लिए अंतर्निहित वोटिंग क्षमता भी होगी, और यहां तक कि लिक्विड डेमोक्रेसी (opens in a new tab)-शैली के वोट प्रत्यायोजन का प्रावधान भी हो सकता है (यानी, कोई भी किसी को अपने लिए वोट करने के लिए सौंप सकता है, और असाइनमेंट सकर्मक है इसलिए यदि A, B को सौंपता है और B, C को सौंपता है तो C, A का वोट निर्धारित करता है)। यह डिज़ाइन DAO को एक विकेंद्रीकृत समुदाय के रूप में व्यवस्थित रूप से बढ़ने की अनुमति देगा, जिससे लोग अंततः यह फ़िल्टर करने का कार्य विशेषज्ञों को प्रत्यायोजित कर सकेंगे कि कौन सदस्य है, हालांकि "वर्तमान प्रणाली" के विपरीत विशेषज्ञ समय के साथ आसानी से अस्तित्व में आ और जा सकते हैं क्योंकि व्यक्तिगत समुदाय के सदस्य अपने संरेखण बदलते हैं।

एक वैकल्पिक मॉडल एक विकेंद्रीकृत निगम के लिए है, जहां किसी भी खाते में शून्य या अधिक शेयर हो सकते हैं, और निर्णय लेने के लिए दो तिहाई शेयरों की आवश्यकता होती है। एक पूर्ण ढांचे में संपत्ति प्रबंधन कार्यक्षमता, शेयर खरीदने या बेचने की पेशकश करने की क्षमता, और ऑफ़र स्वीकार करने की क्षमता (अधिमानतः अनुबंध के अंदर एक ऑर्डर-मिलान तंत्र के साथ) शामिल होगी। "निदेशक मंडल" की अवधारणा को सामान्य करते हुए, प्रत्यायोजन लिक्विड डेमोक्रेसी-शैली में भी मौजूद होगा।

आगे के एप्लिकेशन

1. बचत वॉलेट। मान लीजिए कि ऐलिस अपने फंड को सुरक्षित रखना चाहती है, लेकिन उसे चिंता है कि वह अपनी निजी कुंजी खो देगी या कोई उसे हैक कर लेगा। वह एक बैंक, बॉब के साथ एक अनुबंध में ईथर डालती है, जो इस प्रकार है:

  • केवल ऐलिस प्रति दिन अधिकतम 1% फंड निकाल सकती है।
  • केवल बॉब प्रति दिन अधिकतम 1% फंड निकाल सकता है, लेकिन ऐलिस के पास अपनी कुंजी के साथ एक लेन-देन करने की क्षमता है जो इस क्षमता को बंद कर देती है।
  • ऐलिस और बॉब मिलकर कुछ भी निकाल सकते हैं।

आम तौर पर, ऐलिस के लिए प्रति दिन 1% पर्याप्त है, और यदि ऐलिस अधिक निकालना चाहती है तो वह मदद के लिए बॉब से संपर्क कर सकती है। यदि ऐलिस की कुंजी हैक हो जाती है, तो वह फंड को एक नए अनुबंध में ले जाने के लिए बॉब के पास जाती है। यदि वह अपनी कुंजी खो देती है, तो बॉब अंततः फंड निकाल लेगा। यदि बॉब दुर्भावनापूर्ण निकलता है, तो वह उसकी निकालने की क्षमता को बंद कर सकती है।

2. फसल बीमा। कोई भी आसानी से वित्तीय डेरिवेटिव अनुबंध बना सकता है लेकिन किसी भी मूल्य सूचकांक के बजाय मौसम के डेटा फ़ीड का उपयोग कर सकता है। यदि आयोवा में एक किसान एक डेरिवेटिव खरीदता है जो आयोवा में वर्षा के आधार पर विपरीत रूप से भुगतान करता है, तो यदि सूखा पड़ता है, तो किसान को स्वचालित रूप से पैसा मिलेगा और यदि पर्याप्त बारिश होती है तो किसान खुश होगा क्योंकि उनकी फसलें अच्छी होंगी। इसे आम तौर पर प्राकृतिक आपदा बीमा तक विस्तारित किया जा सकता है।

3. एक विकेंद्रीकृत डेटा फ़ीड। अंतर के लिए वित्तीय अनुबंधों के लिए, वास्तव में "SchellingCoin (opens in a new tab)" नामक प्रोटोकॉल के माध्यम से डेटा फ़ीड को विकेंद्रीकृत करना संभव हो सकता है। SchellingCoin मूल रूप से इस प्रकार काम करता है: N पार्टियां सभी सिस्टम में किसी दिए गए डेटा (उदा., ETH/USD मूल्य) का मूल्य डालती हैं, मूल्यों को क्रमबद्ध किया जाता है, और 25वें और 75वें प्रतिशतक के बीच के सभी लोगों को पुरस्कार के रूप में एक टोकन मिलता है। हर किसी के पास वह उत्तर प्रदान करने का प्रोत्साहन होता है जो हर कोई प्रदान करेगा, और एकमात्र मूल्य जिस पर बड़ी संख्या में खिलाड़ी वास्तविक रूप से सहमत हो सकते हैं वह स्पष्ट डिफ़ॉल्ट है: सत्य। यह एक विकेंद्रीकृत प्रोटोकॉल बनाता है जो सैद्धांतिक रूप से ETH/USD मूल्य, बर्लिन में तापमान या यहां तक कि किसी विशेष कठिन गणना के परिणाम सहित किसी भी संख्या में मूल्य प्रदान कर सकता है।

4. स्मार्ट मल्टीसिग एस्क्रो। बिटकॉइन मल्टीसिग लेन-देन अनुबंधों की अनुमति देता है जहां, उदाहरण के लिए, दी गई पांच कुंजियों में से तीन फंड खर्च कर सकती हैं। इथेरियम अधिक ग्रैन्युलैरिटी की अनुमति देता है; उदाहरण के लिए, पांच में से चार सब कुछ खर्च कर सकते हैं, पांच में से तीन प्रति दिन 10% तक खर्च कर सकते हैं, और पांच में से दो प्रति दिन 0.5% तक खर्च कर सकते हैं। इसके अतिरिक्त, इथेरियम मल्टीसिग अतुल्यकालिक (asynchronous) है - दो पार्टियां अलग-अलग समय पर ब्लॉकचेन पर अपने हस्ताक्षर दर्ज कर सकती हैं और अंतिम हस्ताक्षर स्वचालित रूप से लेन-देन भेज देगा।

5. क्लाउड कंप्यूटिंग। EVM तकनीक का उपयोग एक सत्यापन योग्य कंप्यूटिंग वातावरण बनाने के लिए भी किया जा सकता है, जिससे उपयोगकर्ता दूसरों को गणना करने के लिए कह सकते हैं और फिर वैकल्पिक रूप से प्रमाण मांग सकते हैं कि कुछ यादृच्छिक रूप से चयनित चौकियों पर गणना सही ढंग से की गई थी। यह एक क्लाउड कंप्यूटिंग बाज़ार के निर्माण की अनुमति देता है जहाँ कोई भी उपयोगकर्ता अपने डेस्कटॉप, लैपटॉप या विशेष सर्वर के साथ भाग ले सकता है, और सुरक्षा जमा के साथ स्पॉट-चेकिंग का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि सिस्टम भरोसेमंद है (यानी, नोड्स लाभप्रद रूप से धोखा नहीं दे सकते हैं)। हालांकि ऐसा सिस्टम सभी कार्यों के लिए उपयुक्त नहीं हो सकता है; ऐसे कार्य जिनके लिए उच्च स्तर के अंतर-प्रक्रिया संचार (inter-process communication) की आवश्यकता होती है, उदाहरण के लिए, नोड्स के एक बड़े क्लाउड पर आसानी से नहीं किए जा सकते हैं। अन्य कार्य, हालांकि, समानांतर (parallelize) करने के लिए बहुत आसान हैं; SETI@home, folding@home और जेनेटिक एल्गोरिदम जैसी परियोजनाओं को ऐसे प्लेटफॉर्म के ऊपर आसानी से लागू किया जा सकता है।

6. पीयर-टू-पीयर जुआ। फ्रैंक स्टैजानो और रिचर्ड क्लेटन के Cyberdice (opens in a new tab) जैसे किसी भी संख्या में पीयर-टू-पीयर जुआ प्रोटोकॉल को इथेरियम ब्लॉकचेन पर लागू किया जा सकता है। सबसे सरल जुआ प्रोटोकॉल वास्तव में अगले ब्लॉक हैश पर अंतर के लिए एक अनुबंध है, और वहां से अधिक उन्नत प्रोटोकॉल बनाए जा सकते हैं, जिससे लगभग शून्य शुल्क वाली जुआ सेवाएं बन सकती हैं जिनमें धोखा देने की कोई क्षमता नहीं है।

7. भविष्यवाणी बाज़ार। एक ऑरेकल या SchellingCoin प्रदान किए जाने पर, भविष्यवाणी बाज़ारों को लागू करना भी आसान है, और SchellingCoin के साथ भविष्यवाणी बाज़ार विकेंद्रीकृत संगठनों के लिए एक शासन प्रोटोकॉल के रूप में फुटार्की (futarchy) (opens in a new tab) का पहला मुख्यधारा एप्लिकेशन साबित हो सकते हैं।

8. ऑनचेन विकेंद्रीकृत बाज़ार, आधार के रूप में पहचान और प्रतिष्ठा प्रणाली का उपयोग करते हुए।

विविध और चिंताएँ

संशोधित GHOST कार्यान्वयन

"Greedy Heaviest Observed Subtree" (GHOST) प्रोटोकॉल एक नवाचार है जिसे पहली बार योनातन सोम्पोलिंस्की और अवीव ज़ोहर द्वारा दिसंबर 2013 (opens in a new tab) में पेश किया गया था। GHOST के पीछे की प्रेरणा यह है कि तेज़ पुष्टिकरण समय वाले ब्लॉकचेन वर्तमान में उच्च स्टेल दर (stale rate) के कारण कम सुरक्षा से ग्रस्त हैं - क्योंकि ब्लॉक को नेटवर्क के माध्यम से प्रसारित होने में एक निश्चित समय लगता है, यदि खनिक A एक ब्लॉक का खनन करता है और फिर खनिक B, खनिक A के ब्लॉक के B तक प्रसारित होने से पहले एक और ब्लॉक का खनन कर लेता है, तो खनिक B का ब्लॉक बर्बाद हो जाएगा और नेटवर्क सुरक्षा में योगदान नहीं देगा। इसके अलावा, एक केंद्रीकरण का मुद्दा भी है: यदि खनिक A 30% हैशपावर वाला एक खनन पूल है और B के पास 10% हैशपावर है, तो A को 70% समय एक स्टेल ब्लॉक उत्पन्न करने का जोखिम होगा (चूंकि अन्य 30% समय A ने अंतिम ब्लॉक का उत्पादन किया था और इसलिए उसे खनन डेटा तुरंत मिल जाएगा) जबकि B को 90% समय एक स्टेल ब्लॉक उत्पन्न करने का जोखिम होगा। इस प्रकार, यदि ब्लॉक अंतराल इतना छोटा है कि स्टेल दर अधिक हो, तो A केवल अपने आकार के आधार पर काफी अधिक कुशल होगा। इन दोनों प्रभावों के संयोजन से, जो ब्लॉकचेन तेज़ी से ब्लॉक उत्पन्न करते हैं, उनमें इस बात की बहुत अधिक संभावना होती है कि एक खनन पूल के पास नेटवर्क हैशपावर का इतना बड़ा प्रतिशत हो जाए कि खनन प्रक्रिया पर उसका वास्तविक नियंत्रण हो जाए।

जैसा कि सोम्पोलिंस्की और ज़ोहर द्वारा वर्णित है, GHOST नेटवर्क सुरक्षा हानि के पहले मुद्दे को यह गणना करने में स्टेल ब्लॉक को शामिल करके हल करता है कि कौन सी चेन "सबसे लंबी" है; कहने का तात्पर्य यह है कि, न केवल एक ब्लॉक के मूल (parent) और आगे के पूर्वजों को, बल्कि ब्लॉक के पूर्वज के स्टेल वंशजों (इथेरियम की शब्दावली में, "अंकल") को भी इस गणना में जोड़ा जाता है कि किस ब्लॉक के पीछे सबसे बड़ा कुल प्रूफ-ऑफ-वर्क (PoW) है। केंद्रीकरण पूर्वाग्रह के दूसरे मुद्दे को हल करने के लिए, हम सोम्पोलिंस्की और ज़ोहर द्वारा वर्णित प्रोटोकॉल से आगे जाते हैं, और स्टेल को ब्लॉक इनाम भी प्रदान करते हैं: एक स्टेल ब्लॉक को उसके मूल इनाम का 87.5% प्राप्त होता है, और वह भतीजा जो स्टेल ब्लॉक को शामिल करता है, शेष 12.5% प्राप्त करता है। हालाँकि, लेन-देन शुल्क अंकल को नहीं दिए जाते हैं।

इथेरियम GHOST का एक सरलीकृत संस्करण लागू करता है जो केवल सात स्तरों तक नीचे जाता है। विशेष रूप से, इसे निम्नानुसार परिभाषित किया गया है:

  • एक ब्लॉक को एक मूल निर्दिष्ट करना चाहिए, और इसे 0 या अधिक अंकल निर्दिष्ट करने चाहिए
  • ब्लॉक B में शामिल एक अंकल में निम्नलिखित गुण होने चाहिए:
    • यह B के k-वीं पीढ़ी के पूर्वज का प्रत्यक्ष बच्चा होना चाहिए, जहाँ 2 <= k <= 7
    • यह B का पूर्वज नहीं हो सकता
    • एक अंकल एक वैध ब्लॉक हेडर होना चाहिए, लेकिन इसका पहले से सत्यापित या यहाँ तक कि वैध ब्लॉक होना आवश्यक नहीं है
    • एक अंकल को पिछले ब्लॉक में शामिल सभी अंकल और उसी ब्लॉक में शामिल अन्य सभी अंकल से अलग होना चाहिए (गैर-दोहरा-समावेशन)
  • ब्लॉक B में प्रत्येक अंकल U के लिए, B के खनिक को उसके कॉइनबेस इनाम में अतिरिक्त 3.125% जोड़ा जाता है और U के खनिक को मानक कॉइनबेस इनाम का 93.75% मिलता है।

GHOST के इस सीमित संस्करण का उपयोग, जिसमें अंकल को केवल 7 पीढ़ियों तक शामिल किया जा सकता है, दो कारणों से किया गया था। पहला, असीमित GHOST इस गणना में बहुत अधिक जटिलताओं को शामिल करेगा कि किसी दिए गए ब्लॉक के लिए कौन से अंकल वैध हैं। दूसरा, इथेरियम में उपयोग किए जाने वाले मुआवजे के साथ असीमित GHOST एक खनिक के लिए मुख्य चेन पर खनन करने के प्रोत्साहन को हटा देता है, न कि किसी सार्वजनिक हमलावर की चेन पर।

शुल्क

चूँकि ब्लॉकचेन में प्रकाशित प्रत्येक लेन-देन नेटवर्क पर इसे डाउनलोड करने और सत्यापित करने की आवश्यकता की लागत लगाता है, इसलिए दुरुपयोग को रोकने के लिए कुछ नियामक तंत्र की आवश्यकता होती है, जिसमें आमतौर पर लेन-देन शुल्क शामिल होता है। बिटकॉइन में उपयोग किया जाने वाला डिफ़ॉल्ट दृष्टिकोण, विशुद्ध रूप से स्वैच्छिक शुल्क रखना है, जो खनिकों पर द्वारपाल के रूप में कार्य करने और गतिशील न्यूनतम निर्धारित करने के लिए निर्भर करता है। इस दृष्टिकोण को बिटकॉइन समुदाय में विशेष रूप से बहुत अनुकूल रूप से प्राप्त किया गया है क्योंकि यह "बाजार-आधारित" है, जो खनिकों और लेन-देन भेजने वालों के बीच आपूर्ति और मांग को कीमत निर्धारित करने की अनुमति देता है। हालाँकि, तर्क की इस पंक्ति के साथ समस्या यह है कि लेन-देन प्रसंस्करण एक बाजार नहीं है; यद्यपि लेन-देन प्रसंस्करण को एक ऐसी सेवा के रूप में समझना सहज रूप से आकर्षक है जो खनिक प्रेषक को दे रहा है, वास्तव में खनिक द्वारा शामिल किए गए प्रत्येक लेन-देन को नेटवर्क में प्रत्येक नोड द्वारा संसाधित करने की आवश्यकता होगी, इसलिए लेन-देन प्रसंस्करण की लागत का विशाल बहुमत तीसरे पक्ष द्वारा वहन किया जाता है न कि उस खनिक द्वारा जो इसे शामिल करने या न करने का निर्णय ले रहा है। इसलिए, ट्रेजेडी-ऑफ़-द-कॉमन्स समस्याओं के उत्पन्न होने की बहुत संभावना है।

हालाँकि, जैसा कि पता चलता है कि बाजार-आधारित तंत्र में यह खामी, जब एक विशेष गलत सरलीकरण धारणा दी जाती है, तो जादुई रूप से खुद को रद्द कर देती है। तर्क इस प्रकार है। मान लीजिए कि:

  1. एक लेन-देन k संचालन की ओर ले जाता है, जो इसे शामिल करने वाले किसी भी खनिक को kR इनाम प्रदान करता है जहाँ R प्रेषक द्वारा निर्धारित किया जाता है और k और R खनिक को पहले से (लगभग) दिखाई देते हैं।
  2. किसी भी नोड के लिए एक ऑपरेशन की प्रसंस्करण लागत C होती है (अर्थात, सभी नोड्स की दक्षता समान होती है)
  3. N खनन नोड हैं, जिनमें से प्रत्येक में बिल्कुल समान प्रसंस्करण शक्ति है (अर्थात, कुल का 1/N)
  4. कोई गैर-खनन पूर्ण नोड मौजूद नहीं है।

एक खनिक किसी लेन-देन को संसाधित करने के लिए तैयार होगा यदि अपेक्षित इनाम लागत से अधिक है। इस प्रकार, अपेक्षित इनाम kR/N है क्योंकि खनिक के पास अगले ब्लॉक को संसाधित करने का 1/N मौका है, और खनिक के लिए प्रसंस्करण लागत केवल kC है। इसलिए, खनिक उन लेन-देन को शामिल करेंगे जहाँ kR/N > kC, या R > NC। ध्यान दें कि R प्रेषक द्वारा प्रदान किया गया प्रति-संचालन शुल्क है, और इस प्रकार यह उस लाभ की निचली सीमा है जो प्रेषक लेन-देन से प्राप्त करता है, और NC एक संचालन को संसाधित करने के लिए पूरे नेटवर्क की एक साथ लागत है। इसलिए, खनिकों के पास केवल उन लेन-देन को शामिल करने का प्रोत्साहन है जिनके लिए कुल उपयोगितावादी लाभ लागत से अधिक है।

हालाँकि, वास्तविकता में उन मान्यताओं से कई महत्वपूर्ण विचलन हैं:

  1. खनिक अन्य सत्यापनकर्ता नोड्स की तुलना में लेन-देन को संसाधित करने के लिए अधिक लागत का भुगतान करता है, क्योंकि अतिरिक्त सत्यापन समय ब्लॉक प्रसार में देरी करता है और इस प्रकार ब्लॉक के स्टेल होने की संभावना बढ़ जाती है।
  2. गैर-खनन पूर्ण नोड मौजूद हैं।
  3. व्यवहार में खनन शक्ति वितरण मौलिक रूप से असमान हो सकता है।
  4. सट्टेबाज, राजनीतिक दुश्मन और पागल लोग जिनका उपयोगिता कार्य नेटवर्क को नुकसान पहुंचाना शामिल है, मौजूद हैं, और वे चतुराई से ऐसे अनुबंध स्थापित कर सकते हैं जहां उनकी लागत अन्य सत्यापनकर्ता नोड्स द्वारा भुगतान की गई लागत से बहुत कम है।

(1) खनिक के लिए कम लेन-देन शामिल करने की प्रवृत्ति प्रदान करता है, और (2) NC को बढ़ाता है; इसलिए, ये दोनों प्रभाव कम से कम आंशिक रूप से एक-दूसरे को रद्द कर देते हैं।कैसे? (opens in a new tab) (3) और (4) प्रमुख मुद्दे हैं; उन्हें हल करने के लिए हम बस एक फ्लोटिंग कैप स्थापित करते हैं: किसी भी ब्लॉक में दीर्घकालिक घातीय चलती औसत के BLK_LIMIT_FACTOR गुना से अधिक संचालन नहीं हो सकते हैं। विशेष रूप से:

blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) +
floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR)

BLK_LIMIT_FACTOR और EMA_FACTOR स्थिरांक हैं जिन्हें फिलहाल 65536 और 1.5 पर सेट किया जाएगा, लेकिन आगे के विश्लेषण के बाद इनके बदले जाने की संभावना है।

बिटकॉइन में बड़े ब्लॉक आकार को हतोत्साहित करने वाला एक और कारक है: जो ब्लॉक बड़े होते हैं उन्हें प्रसारित होने में अधिक समय लगेगा, और इस प्रकार उनके स्टेल होने की अधिक संभावना होती है। इथेरियम में, अत्यधिक गैस की खपत करने वाले ब्लॉकों को प्रसारित होने में भी अधिक समय लग सकता है क्योंकि वे भौतिक रूप से बड़े होते हैं और क्योंकि उन्हें मान्य करने के लिए लेन-देन स्थिति संक्रमणों को संसाधित करने में अधिक समय लगता है। यह देरी हतोत्साहन बिटकॉइन में एक महत्वपूर्ण विचार है, लेकिन GHOST प्रोटोकॉल के कारण इथेरियम में कम है; इसलिए, विनियमित ब्लॉक सीमाओं पर निर्भर रहना एक अधिक स्थिर आधार रेखा प्रदान करता है।

संगणना और ट्यूरिंग-पूर्णता

एक महत्वपूर्ण बात यह है कि इथेरियम वर्चुअल मशीन ट्यूरिंग-पूर्ण है; इसका मतलब है कि EVM कोड किसी भी संगणना को एन्कोड कर सकता है जिसे संभवतः किया जा सकता है, जिसमें अनंत लूप शामिल हैं। EVM कोड दो तरह से लूपिंग की अनुमति देता है। पहला, एक JUMP निर्देश है जो प्रोग्राम को कोड में पिछले स्थान पर वापस जाने की अनुमति देता है, और सशर्त जंपिंग करने के लिए एक JUMPI निर्देश है, जो while x < 27: x = x * 2 जैसे कथनों की अनुमति देता है। दूसरा, अनुबंध अन्य अनुबंधों को कॉल कर सकते हैं, जो संभावित रूप से पुनरावृत्ति के माध्यम से लूपिंग की अनुमति देते हैं। यह स्वाभाविक रूप से एक समस्या की ओर ले जाता है: क्या दुर्भावनापूर्ण उपयोगकर्ता अनिवार्य रूप से खनिकों और पूर्ण नोड्स को अनंत लूप में प्रवेश करने के लिए मजबूर करके बंद कर सकते हैं? यह मुद्दा कंप्यूटर विज्ञान में हॉल्टिंग समस्या के रूप में जानी जाने वाली समस्या के कारण उत्पन्न होता है: सामान्य मामले में, यह बताने का कोई तरीका नहीं है कि कोई दिया गया प्रोग्राम कभी रुकेगा या नहीं।

जैसा कि स्थिति संक्रमण अनुभाग में वर्णित है, हमारा समाधान एक लेन-देन को संगणनात्मक चरणों की अधिकतम संख्या निर्धारित करने की अपेक्षा करके काम करता है जिसे लेने की अनुमति है, और यदि निष्पादन में अधिक समय लगता है तो संगणना को रिवर्ट कर दिया जाता है लेकिन शुल्क का भुगतान अभी भी किया जाता है। संदेश भी उसी तरह काम करते हैं। हमारे समाधान के पीछे की प्रेरणा दिखाने के लिए, निम्नलिखित उदाहरणों पर विचार करें:

  • एक हमलावर एक अनुबंध बनाता है जो एक अनंत लूप चलाता है, और फिर उस लूप को सक्रिय करने वाला एक लेन-देन खनिक को भेजता है। खनिक लेन-देन को संसाधित करेगा, अनंत लूप चलाएगा, और गैस खत्म होने की प्रतीक्षा करेगा। भले ही निष्पादन में गैस खत्म हो जाती है और बीच में ही रुक जाता है, लेन-देन अभी भी वैध है और खनिक अभी भी प्रत्येक संगणनात्मक चरण के लिए हमलावर से शुल्क का दावा करता है।
  • एक हमलावर खनिक को इतने लंबे समय तक गणना करते रहने के लिए मजबूर करने के आशय से एक बहुत लंबा अनंत लूप बनाता है कि जब तक गणना समाप्त होती है तब तक कुछ और ब्लॉक आ चुके होंगे और खनिक के लिए शुल्क का दावा करने के लिए लेन-देन को शामिल करना संभव नहीं होगा। हालाँकि, हमलावर को STARTGAS के लिए एक मान प्रस्तुत करने की आवश्यकता होगी जो निष्पादन द्वारा लिए जा सकने वाले संगणनात्मक चरणों की संख्या को सीमित करता है, इसलिए खनिक को समय से पहले पता चल जाएगा कि गणना में अत्यधिक बड़ी संख्या में चरण लगेंगे।
  • एक हमलावर send(A,contract.storage[A]); contract.storage[A] = 0 जैसे किसी रूप के कोड के साथ एक अनुबंध देखता है, और केवल पहले चरण को चलाने के लिए पर्याप्त गैस के साथ एक लेन-देन भेजता है लेकिन दूसरे को नहीं (अर्थात, निकासी करना लेकिन शेष राशि को कम नहीं होने देना)। अनुबंध लेखक को ऐसे हमलों से बचाव के बारे में चिंता करने की आवश्यकता नहीं है, क्योंकि यदि निष्पादन बीच में ही रुक जाता है तो परिवर्तन रिवर्ट हो जाते हैं।
  • एक वित्तीय अनुबंध जोखिम को कम करने के लिए नौ मालिकाना डेटा फ़ीड का माध्यिका लेकर काम करता है। एक हमलावर डेटा फ़ीड में से एक पर अधिकार कर लेता है, जिसे DAO पर अनुभाग में वर्णित चर-पता-कॉल तंत्र के माध्यम से परिवर्तनीय होने के लिए डिज़ाइन किया गया है, और इसे एक अनंत लूप चलाने के लिए परिवर्तित करता है, जिससे वित्तीय अनुबंध से धन का दावा करने के किसी भी प्रयास को गैस खत्म होने के लिए मजबूर करने का प्रयास किया जाता है। हालाँकि, वित्तीय अनुबंध इस समस्या को रोकने के लिए संदेश पर गैस सीमा निर्धारित कर सकता है।

ट्यूरिंग-पूर्णता का विकल्प ट्यूरिंग-अपूर्णता है, जहाँ JUMP और JUMPI मौजूद नहीं हैं और किसी भी समय कॉल स्टैक में प्रत्येक अनुबंध की केवल एक प्रति मौजूद होने की अनुमति है। इस प्रणाली के साथ, वर्णित शुल्क प्रणाली और हमारे समाधान की प्रभावशीलता के आसपास की अनिश्चितताएँ आवश्यक नहीं हो सकती हैं, क्योंकि एक अनुबंध को निष्पादित करने की लागत इसके आकार से ऊपर बंधी होगी। इसके अतिरिक्त, ट्यूरिंग-अपूर्णता इतनी बड़ी सीमा भी नहीं है; हमने आंतरिक रूप से जितने भी अनुबंध उदाहरणों की कल्पना की है, उनमें से अब तक केवल एक में लूप की आवश्यकता थी, और उस लूप को भी एक-पंक्ति के कोड के 26 दोहराव बनाकर हटाया जा सकता था। ट्यूरिंग-पूर्णता के गंभीर निहितार्थों और सीमित लाभ को देखते हुए, क्यों न केवल एक ट्यूरिंग-अपूर्ण भाषा हो? वास्तव में, हालाँकि, ट्यूरिंग-अपूर्णता समस्या का एक साफ समाधान होने से बहुत दूर है। यह देखने के लिए कि क्यों, निम्नलिखित अनुबंधों पर विचार करें:

C0: call(C1); call(C1);
C1: call(C2); call(C2);
C2: call(C3); call(C3);
...
C49: call(C50); call(C50);
C50: (run one step of a program and record the change in storage)

अब, A को एक लेन-देन भेजें। इस प्रकार, 51 लेन-देन में, हमारे पास एक अनुबंध है जो 250 संगणनात्मक कदम उठाता है। खनिक प्रत्येक अनुबंध के साथ एक मान बनाए रखकर समय से पहले ऐसे लॉजिक बमों का पता लगाने का प्रयास कर सकते हैं जो यह निर्दिष्ट करता है कि यह अधिकतम कितने संगणनात्मक कदम उठा सकता है, और अन्य अनुबंधों को पुनरावर्ती रूप से कॉल करने वाले अनुबंधों के लिए इसकी गणना कर सकते हैं, लेकिन इसके लिए खनिकों को उन अनुबंधों को मना करने की आवश्यकता होगी जो अन्य अनुबंध बनाते हैं (चूंकि ऊपर दिए गए सभी 26 अनुबंधों के निर्माण और निष्पादन को आसानी से एक ही अनुबंध में रोल किया जा सकता है)। एक और समस्याग्रस्त बिंदु यह है कि संदेश का पता क्षेत्र एक चर है, इसलिए सामान्य तौर पर यह बताना भी संभव नहीं हो सकता है कि कोई दिया गया अनुबंध समय से पहले किन अन्य अनुबंधों को कॉल करेगा। इसलिए, कुल मिलाकर, हमारे पास एक आश्चर्यजनक निष्कर्ष है: ट्यूरिंग-पूर्णता को प्रबंधित करना आश्चर्यजनक रूप से आसान है, और ट्यूरिंग-अपूर्णता की कमी को प्रबंधित करना समान रूप से आश्चर्यजनक रूप से कठिन है जब तक कि बिल्कुल समान नियंत्रण मौजूद न हों - लेकिन उस स्थिति में प्रोटोकॉल को ट्यूरिंग-पूर्ण क्यों न होने दिया जाए?

मुद्रा और निर्गमन

इथेरियम नेटवर्क में अपनी अंतर्निहित मुद्रा, ईथर शामिल है, जो विभिन्न प्रकार की डिजिटल संपत्ति के बीच कुशल विनिमय की अनुमति देने के लिए एक प्राथमिक तरलता परत प्रदान करने और, इससे भी महत्वपूर्ण बात, लेन-देन शुल्क का भुगतान करने के लिए एक तंत्र प्रदान करने के दोहरे उद्देश्य को पूरा करती है। सुविधा के लिए और भविष्य के तर्क से बचने के लिए (बिटकॉइन में वर्तमान mBTC/uBTC/satoshi बहस देखें), मूल्यवर्ग को पूर्व-लेबल किया जाएगा:

  • 1: Wei
  • 1012: ज़ाबो
  • 1015: फ़िनी
  • 1018: ईथर

इसे "डॉलर" और "सेंट" या "BTC" और "सतोशी" की अवधारणा के विस्तारित संस्करण के रूप में लिया जाना चाहिए। निकट भविष्य में, हम उम्मीद करते हैं कि "ईथर" का उपयोग सामान्य लेन-देन के लिए, "फ़िनी" का उपयोग माइक्रोट्रांजेक्शन के लिए और "ज़ाबो" और "Wei" का उपयोग शुल्क और प्रोटोकॉल कार्यान्वयन के आसपास तकनीकी चर्चाओं के लिए किया जाएगा; शेष मूल्यवर्ग बाद में उपयोगी हो सकते हैं और इस बिंदु पर क्लाइंट्स में शामिल नहीं किए जाने चाहिए।

निर्गमन मॉडल निम्नानुसार होगा:

  • ईथर को 1000-2000 ईथर प्रति BTC की कीमत पर मुद्रा बिक्री में जारी किया जाएगा, यह एक ऐसा तंत्र है जिसका उद्देश्य इथेरियम संगठन को निधि देना और विकास के लिए भुगतान करना है जिसका उपयोग मास्टरकॉइन और NXT जैसे अन्य प्लेटफार्मों द्वारा सफलतापूर्वक किया गया है। पहले के खरीदारों को बड़ी छूट का लाभ मिलेगा। बिक्री से प्राप्त BTC का उपयोग पूरी तरह से डेवलपर्स को वेतन और बाउंटी का भुगतान करने और इथेरियम और क्रिप्टोकरेंसी पारिस्थितिकी तंत्र में विभिन्न लाभकारी और गैर-लाभकारी परियोजनाओं में निवेश करने के लिए किया जाएगा।
  • बेची गई कुल राशि का 0.099x (60102216 ETH) संगठन को शुरुआती योगदानकर्ताओं को मुआवजा देने और जेनेसिस ब्लॉक से पहले ETH-मूल्यवर्ग के खर्चों का भुगतान करने के लिए आवंटित किया जाएगा।
  • बेची गई कुल राशि का 0.099x दीर्घकालिक रिजर्व के रूप में बनाए रखा जाएगा।
  • बेची गई कुल राशि का 0.26x उस बिंदु के बाद हमेशा के लिए प्रति वर्ष खनिकों को आवंटित किया जाएगा।
समूहलॉन्च के समय1 वर्ष बाद5 वर्ष बाद
मुद्रा इकाइयाँ1.198X1.458X2.498X
खरीदार83.5%68.6%40.0%
बिक्री-पूर्व खर्च किया गया रिजर्व8.26%6.79%3.96%
बिक्री-पश्चात उपयोग किया गया रिजर्व8.26%6.79%3.96%
खनिक0%17.8%52.0%

दीर्घकालिक आपूर्ति वृद्धि दर (प्रतिशत)

Ethereum inflation

रैखिक मुद्रा निर्गमन के बावजूद, समय के साथ बिटकॉइन की तरह ही आपूर्ति वृद्धि दर शून्य की ओर प्रवृत्त होती है।

उपरोक्त मॉडल में दो मुख्य विकल्प हैं (1) एक बंदोबस्ती पूल का अस्तित्व और आकार, और (2) बिटकॉइन की तरह एक सीमित आपूर्ति के विपरीत, स्थायी रूप से बढ़ती रैखिक आपूर्ति का अस्तित्व। बंदोबस्ती पूल का औचित्य इस प्रकार है। यदि बंदोबस्ती पूल मौजूद नहीं होता, और समान मुद्रास्फीति दर प्रदान करने के लिए रैखिक निर्गमन 0.217x तक कम हो जाता, तो ईथर की कुल मात्रा 16.5% कम होती और इसलिए प्रत्येक इकाई 19.8% अधिक मूल्यवान होती। इसलिए, संतुलन में बिक्री में 19.8% अधिक ईथर खरीदा जाएगा, इसलिए प्रत्येक इकाई एक बार फिर पहले की तरह ही मूल्यवान होगी। तब संगठन के पास 1.198x जितना BTC भी होगा, जिसे दो स्लाइस में विभाजित माना जा सकता है: मूल BTC, और अतिरिक्त 0.198x। इसलिए, यह स्थिति बंदोबस्ती के बिल्कुल समतुल्य है, लेकिन एक महत्वपूर्ण अंतर के साथ: संगठन विशुद्ध रूप से BTC रखता है, और इसलिए ईथर इकाई के मूल्य का समर्थन करने के लिए प्रोत्साहित नहीं होता है।

स्थायी रैखिक आपूर्ति वृद्धि मॉडल उस जोखिम को कम करता है जिसे कुछ लोग बिटकॉइन में अत्यधिक धन एकाग्रता के रूप में देखते हैं, और वर्तमान और भविष्य के युगों में रहने वाले व्यक्तियों को मुद्रा इकाइयाँ प्राप्त करने का उचित अवसर देता है, जबकि एक ही समय में ईथर प्राप्त करने और रखने के लिए एक मजबूत प्रोत्साहन बनाए रखता है क्योंकि प्रतिशत के रूप में "आपूर्ति वृद्धि दर" अभी भी समय के साथ शून्य की ओर प्रवृत्त होती है। हम यह भी सिद्धांत देते हैं कि क्योंकि लापरवाही, मृत्यु आदि के कारण समय के साथ सिक्के हमेशा खो जाते हैं, और सिक्के के नुकसान को प्रति वर्ष कुल आपूर्ति के प्रतिशत के रूप में मॉडल किया जा सकता है, कि संचलन में कुल मुद्रा आपूर्ति वास्तव में अंततः वार्षिक निर्गमन को हानि दर से विभाजित करने के बराबर मूल्य पर स्थिर हो जाएगी (उदाहरण के लिए, 1% की हानि दर पर, एक बार आपूर्ति 26X तक पहुँचने के बाद 0.26X का खनन किया जाएगा और हर साल 0.26X खो जाएगा, जिससे एक संतुलन बन जाएगा)।

ध्यान दें कि भविष्य में, यह संभावना है कि इथेरियम सुरक्षा के लिए प्रूफ-ऑफ़-स्टेक (PoS) मॉडल पर स्विच करेगा, जिससे निर्गमन की आवश्यकता प्रति वर्ष शून्य और 0.05X के बीच कम हो जाएगी। इस घटना में कि इथेरियम संगठन धन खो देता है या किसी अन्य कारण से गायब हो जाता है, हम एक "सामाजिक अनुबंध" खुला छोड़ देते हैं: किसी को भी इथेरियम का भविष्य का उम्मीदवार संस्करण बनाने का अधिकार है, केवल शर्त यह है कि ईथर की मात्रा अधिकतम 60102216 * (1.198 + 0.26 * n) के बराबर होनी चाहिए जहाँ n जेनेसिस ब्लॉक के बाद के वर्षों की संख्या है। निर्माता विकास के लिए भुगतान करने के लिए PoS-संचालित आपूर्ति विस्तार और अधिकतम स्वीकार्य आपूर्ति विस्तार के बीच के अंतर के कुछ या सभी हिस्से को क्राउड-सेल करने या अन्यथा असाइन करने के लिए स्वतंत्र हैं। उम्मीदवार अपग्रेड जो सामाजिक अनुबंध का अनुपालन नहीं करते हैं, उन्हें उचित रूप से अनुपालन संस्करणों में फ़ोर्क किया जा सकता है।

खनन केंद्रीकरण

बिटकॉइन खनन एल्गोरिदम खनिकों द्वारा ब्लॉक हेडर के थोड़े संशोधित संस्करणों पर लाखों बार बार-बार SHA256 की गणना करके काम करता है, जब तक कि अंततः एक नोड एक ऐसे संस्करण के साथ नहीं आता जिसका हैश लक्ष्य (वर्तमान में लगभग 2192) से कम है। हालाँकि, यह खनन एल्गोरिदम केंद्रीकरण के दो रूपों के प्रति संवेदनशील है। पहला, खनन पारिस्थितिकी तंत्र पर ASIC (एप्लिकेशन-विशिष्ट एकीकृत सर्किट) का प्रभुत्व हो गया है, कंप्यूटर चिप्स जिन्हें बिटकॉइन खनन के विशिष्ट कार्य के लिए डिज़ाइन किया गया है, और इसलिए वे इसमें हजारों गुना अधिक कुशल हैं। इसका मतलब है कि बिटकॉइन खनन अब एक अत्यधिक विकेंद्रीकृत और समतावादी खोज नहीं है, जिसमें प्रभावी ढंग से भाग लेने के लिए लाखों डॉलर की पूंजी की आवश्यकता होती है। दूसरा, अधिकांश बिटकॉइन खनिक वास्तव में स्थानीय रूप से ब्लॉक सत्यापन नहीं करते हैं; इसके बजाय, वे ब्लॉक हेडर प्रदान करने के लिए एक केंद्रीकृत खनन पूल पर निर्भर करते हैं। यह समस्या यकीनन बदतर है: इस लेखन के समय, शीर्ष तीन खनन पूल अप्रत्यक्ष रूप से बिटकॉइन नेटवर्क में प्रसंस्करण शक्ति के लगभग 50% को नियंत्रित करते हैं, हालांकि यह इस तथ्य से कम हो जाता है कि यदि कोई पूल या गठबंधन 51% हमला करने का प्रयास करता है तो खनिक अन्य खनन पूलों में स्विच कर सकते हैं।

इथेरियम में वर्तमान आशय एक ऐसे खनन एल्गोरिदम का उपयोग करना है जहाँ खनिकों को स्थिति से यादृच्छिक डेटा लाने, ब्लॉकचेन में पिछले N ब्लॉकों से कुछ यादृच्छिक रूप से चयनित लेन-देन की गणना करने और परिणाम का हैश वापस करने की आवश्यकता होती है। इसके दो महत्वपूर्ण लाभ हैं। पहला, इथेरियम अनुबंधों में किसी भी प्रकार की संगणना शामिल हो सकती है, इसलिए एक इथेरियम ASIC अनिवार्य रूप से सामान्य संगणना के लिए एक ASIC होगा - अर्थात, एक बेहतर CPU। दूसरा, खनन के लिए संपूर्ण ब्लॉकचेन तक पहुंच की आवश्यकता होती है, जिससे खनिकों को संपूर्ण ब्लॉकचेन को संग्रहीत करने और कम से कम प्रत्येक लेन-देन को सत्यापित करने में सक्षम होने के लिए मजबूर होना पड़ता है। यह केंद्रीकृत खनन पूलों की आवश्यकता को दूर करता है; यद्यपि खनन पूल अभी भी इनाम वितरण की यादृच्छिकता को कम करने की वैध भूमिका निभा सकते हैं, यह कार्य बिना किसी केंद्रीय नियंत्रण वाले पीयर-टू-पीयर पूलों द्वारा समान रूप से अच्छी तरह से किया जा सकता है।

यह मॉडल अप्रयुक्त है, और खनन एल्गोरिदम के रूप में अनुबंध निष्पादन का उपयोग करते समय कुछ चतुर अनुकूलन से बचने में रास्ते में कठिनाइयाँ हो सकती हैं। हालाँकि, इस एल्गोरिदम की एक विशेष रूप से दिलचस्प विशेषता यह है कि यह किसी को भी "कुएं में जहर डालने" की अनुमति देता है, ब्लॉकचेन में बड़ी संख्या में ऐसे अनुबंध पेश करके जो विशेष रूप से कुछ ASIC को विफल करने के लिए डिज़ाइन किए गए हैं। ASIC निर्माताओं के लिए एक-दूसरे पर हमला करने के लिए ऐसी चाल का उपयोग करने के लिए आर्थिक प्रोत्साहन मौजूद हैं। इस प्रकार, जो समाधान हम विकसित कर रहे हैं वह अंततः विशुद्ध रूप से तकनीकी समाधान के बजाय एक अनुकूली आर्थिक मानवीय समाधान है।

स्केलेबिलिटी

इथेरियम के बारे में एक आम चिंता स्केलेबिलिटी का मुद्दा है। बिटकॉइन की तरह, इथेरियम इस खामी से ग्रस्त है कि प्रत्येक लेन-देन को नेटवर्क में प्रत्येक नोड द्वारा संसाधित करने की आवश्यकता होती है। बिटकॉइन के साथ, वर्तमान ब्लॉकचेन का आकार लगभग 15 GB है, जो प्रति घंटे लगभग 1 MB बढ़ रहा है। यदि बिटकॉइन नेटवर्क वीज़ा के 2000 लेन-देन प्रति सेकंड को संसाधित करता है, तो यह प्रति तीन सेकंड में 1 MB (1 GB प्रति घंटे, 8 TB प्रति वर्ष) बढ़ेगा। इथेरियम को इसी तरह के विकास पैटर्न का सामना करने की संभावना है, जो इस तथ्य से और भी बदतर हो गया है कि बिटकॉइन के मामले में केवल एक मुद्रा के बजाय इथेरियम ब्लॉकचेन के शीर्ष पर कई एप्लिकेशन होंगे, लेकिन इस तथ्य से सुधार हुआ है कि इथेरियम पूर्ण नोड्स को संपूर्ण ब्लॉकचेन इतिहास के बजाय केवल स्थिति को संग्रहीत करने की आवश्यकता है।

इतने बड़े ब्लॉकचेन आकार के साथ समस्या केंद्रीकरण जोखिम है। यदि ब्लॉकचेन का आकार बढ़कर, मान लीजिए, 100 TB हो जाता है, तो संभावित परिदृश्य यह होगा कि केवल बहुत कम संख्या में बड़े व्यवसाय ही पूर्ण नोड चलाएंगे, जिसमें सभी नियमित उपयोगकर्ता लाइट SPV नोड्स का उपयोग करेंगे। ऐसी स्थिति में, यह संभावित चिंता उत्पन्न होती है कि पूर्ण नोड एक साथ मिल सकते हैं और सभी किसी लाभदायक तरीके से धोखा देने के लिए सहमत हो सकते हैं (उदाहरण के लिए, ब्लॉक इनाम बदलें, खुद को BTC दें)। लाइट नोड्स के पास इसे तुरंत पहचानने का कोई तरीका नहीं होगा। बेशक, कम से कम एक ईमानदार पूर्ण नोड के मौजूद होने की संभावना होगी, और कुछ घंटों के बाद धोखाधड़ी के बारे में जानकारी रेडिट जैसे चैनलों के माध्यम से बाहर आ जाएगी, लेकिन उस समय तक बहुत देर हो चुकी होगी: दिए गए ब्लॉकों को ब्लैकलिस्ट करने के प्रयास को व्यवस्थित करना आम उपयोगकर्ताओं पर निर्भर करेगा, जो एक सफल 51% हमला करने के समान पैमाने पर एक बड़े पैमाने पर और संभवतः अव्यवहार्य समन्वय समस्या है। बिटकॉइन के मामले में, यह वर्तमान में एक समस्या है, लेकिन पीटर टॉड द्वारा सुझाया गया (opens in a new tab) एक ब्लॉकचेन संशोधन मौजूद है जो इस समस्या को कम करेगा।

निकट भविष्य में, इथेरियम इस समस्या से निपटने के लिए दो अतिरिक्त रणनीतियों का उपयोग करेगा। पहला, ब्लॉकचेन-आधारित खनन एल्गोरिदम के कारण, कम से कम प्रत्येक खनिक को एक पूर्ण नोड होने के लिए मजबूर किया जाएगा, जिससे पूर्ण नोड्स की संख्या पर एक निचली सीमा बन जाएगी। दूसरा और अधिक महत्वपूर्ण बात, हालाँकि, हम प्रत्येक लेन-देन को संसाधित करने के बाद ब्लॉकचेन में एक मध्यवर्ती स्थिति ट्री रूट शामिल करेंगे। भले ही ब्लॉक सत्यापन केंद्रीकृत हो, जब तक एक ईमानदार सत्यापनकर्ता नोड मौजूद है, केंद्रीकरण की समस्या को सत्यापन प्रोटोकॉल के माध्यम से टाला जा सकता है। यदि कोई खनिक एक अमान्य ब्लॉक प्रकाशित करता है, तो वह ब्लॉक या तो खराब स्वरूपित होना चाहिए, या स्थिति S[n] गलत है। चूँकि S[0] को सही माना जाता है, इसलिए कोई पहली स्थिति S[i] होनी चाहिए जो गलत हो जहाँ S[i-1] सही हो। सत्यापनकर्ता नोड सूचकांक i प्रदान करेगा, साथ ही एक "अमान्यता का प्रमाण" जिसमें पेट्रीसिया ट्री नोड्स का उपसमुच्चय शामिल होगा जिसे APPLY(S[i-1],TX[i]) -> S[i] को संसाधित करने की आवश्यकता है। नोड संगणना के उस हिस्से को चलाने के लिए उन नोड्स का उपयोग करने में सक्षम होंगे, और देखेंगे कि उत्पन्न S[i] प्रदान किए गए S[i] से मेल नहीं खाता है।

एक और, अधिक परिष्कृत, हमले में दुर्भावनापूर्ण खनिकों द्वारा अधूरे ब्लॉक प्रकाशित करना शामिल होगा, इसलिए यह निर्धारित करने के लिए पूरी जानकारी भी मौजूद नहीं है कि ब्लॉक वैध हैं या नहीं। इसका समाधान एक चुनौती-प्रतिक्रिया प्रोटोकॉल है: सत्यापन नोड लक्ष्य लेन-देन सूचकांकों के रूप में "चुनौतियां" जारी करते हैं, और एक नोड प्राप्त करने पर एक लाइट नोड ब्लॉक को तब तक अविश्वसनीय मानता है जब तक कि कोई अन्य नोड, चाहे वह खनिक हो या कोई अन्य सत्यापनकर्ता, वैधता के प्रमाण के रूप में पेट्रीसिया नोड्स का एक उपसमुच्चय प्रदान नहीं करता है।

निष्कर्ष

इथेरियम प्रोटोकॉल की मूल रूप से एक क्रिप्टोकरेंसी के उन्नत संस्करण के रूप में कल्पना की गई थी, जो एक अत्यधिक सामान्यीकृत प्रोग्रामिंग भाषा के माध्यम से ऑन-ब्लॉकचेन एस्क्रो, निकासी सीमाएँ, वित्तीय अनुबंध, जुआ बाज़ार और इसी तरह की अन्य उन्नत सुविधाएँ प्रदान करता है। इथेरियम प्रोटोकॉल सीधे तौर पर किसी भी एप्लिकेशन का "समर्थन" नहीं करेगा, लेकिन एक ट्यूरिंग-पूर्ण (Turing-complete) प्रोग्रामिंग भाषा के होने का मतलब है कि सैद्धांतिक रूप से किसी भी प्रकार के लेन-देन या एप्लिकेशन के लिए मनमाने अनुबंध बनाए जा सकते हैं। हालाँकि, इथेरियम के बारे में जो बात अधिक दिलचस्प है, वह यह है कि इथेरियम प्रोटोकॉल केवल मुद्रा से कहीं आगे जाता है। विकेंद्रीकृत फ़ाइल स्टोरेज, विकेंद्रीकृत कंप्यूटेशन और विकेंद्रीकृत भविष्यवाणी बाज़ारों के साथ-साथ दर्जनों अन्य ऐसी अवधारणाओं से जुड़े प्रोटोकॉल में कंप्यूटेशनल उद्योग की दक्षता को काफी हद तक बढ़ाने की क्षमता है। साथ ही, ये पहली बार एक आर्थिक परत जोड़कर अन्य पीयर-टू-पीयर प्रोटोकॉल को भारी बढ़ावा दे सकते हैं। अंत में, एप्लिकेशनों की एक बड़ी श्रृंखला ऐसी भी है जिनका पैसे से कोई लेना-देना नहीं है।

इथेरियम प्रोटोकॉल द्वारा लागू की गई एक मनमाने स्थिति संक्रमण फ़ंक्शन (arbitrary state transition function) की अवधारणा अद्वितीय क्षमता वाले एक प्लेटफ़ॉर्म का आधार प्रदान करती है; डेटा स्टोरेज, जुआ या वित्त में एप्लिकेशनों की एक विशिष्ट श्रृंखला के लिए अभिप्रेत एक क्लोज्ड-एंडेड, एकल-उद्देश्यीय प्रोटोकॉल होने के बजाय, इथेरियम डिज़ाइन से ही ओपन-एंडेड है। हमारा मानना है कि यह आने वाले वर्षों में बहुत बड़ी संख्या में वित्तीय और गैर-वित्तीय दोनों प्रोटोकॉल के लिए एक मूलभूत परत के रूप में काम करने के लिए अत्यंत उपयुक्त है।

नोट्स और आगे का पठन

नोट्स

  1. एक समझदार पाठक यह देख सकता है कि वास्तव में एक बिटकॉइन पता दीर्घवृत्तीय वक्र सार्वजनिक कुंजी का हैश है, न कि स्वयं सार्वजनिक कुंजी। हालाँकि, सार्वजनिक कुंजी हैश को स्वयं एक सार्वजनिक कुंजी के रूप में संदर्भित करना वास्तव में पूरी तरह से वैध क्रिप्टोग्राफ़िक शब्दावली है। ऐसा इसलिए है क्योंकि बिटकॉइन की क्रिप्टोग्राफी को एक कस्टम डिजिटल हस्ताक्षर एल्गोरिदम माना जा सकता है, जहाँ सार्वजनिक कुंजी में ECC सार्वजनिक कुंजी का हैश शामिल होता है, हस्ताक्षर में ECC हस्ताक्षर के साथ जुड़ी हुई ECC सार्वजनिक कुंजी शामिल होती है, और सत्यापन एल्गोरिदम में सार्वजनिक कुंजी के रूप में प्रदान किए गए ECC सार्वजनिक कुंजी हैश के विरुद्ध हस्ताक्षर में ECC सार्वजनिक कुंजी की जाँच करना और फिर ECC सार्वजनिक कुंजी के विरुद्ध ECC हस्ताक्षर को सत्यापित करना शामिल है।
  2. तकनीकी रूप से, पिछले 11 ब्लॉकों की माध्यिका (median)।
  3. आंतरिक रूप से, 2 और "CHARLIE" दोनों संख्याएँ हैं, जिनमें से बाद वाला बिग-एंडियन बेस 256 प्रतिनिधित्व में है। संख्याएँ कम से कम 0 और अधिकतम 2256-1 हो सकती हैं।

आगे का पठन

  1. आंतरिक मूल्य (opens in a new tab)
  2. स्मार्ट संपत्ति (opens in a new tab)
  3. स्मार्ट अनुबंध (opens in a new tab)
  4. B-money (opens in a new tab)
  5. पुन: प्रयोज्य प्रूफ-ऑफ-वर्क (opens in a new tab)
  6. मालिक के अधिकार के साथ सुरक्षित संपत्ति शीर्षक (opens in a new tab)
  7. बिटकॉइन श्वेतपत्र (opens in a new tab)
  8. Namecoin (opens in a new tab)
  9. ज़ूको का त्रिकोण (opens in a new tab)
  10. कलर्ड कॉइन्स श्वेतपत्र (opens in a new tab)
  11. मास्टरकॉइन श्वेतपत्र (opens in a new tab)
  12. विकेंद्रीकृत स्वायत्त निगम, बिटकॉइन मैगज़ीन (opens in a new tab)
  13. सरलीकृत भुगतान सत्यापन (opens in a new tab)
  14. मर्कल ट्री (opens in a new tab)
  15. पेट्रीसिया ट्री (opens in a new tab)
  16. GHOST (opens in a new tab)
  17. StorJ और ऑटोनॉमस एजेंट्स, जेफ गार्ज़िक (opens in a new tab)
  18. ट्यूरिंग फेस्टिवल में स्मार्ट संपत्ति पर माइक हर्न (opens in a new tab)
  19. इथेरियम RLP
  20. इथेरियम मर्कल पेट्रीसिया ट्री
  21. मर्कल सम ट्री पर पीटर टॉड (opens in a new tab)

श्वेतपत्र के इतिहास के लिए, यह विकी (opens in a new tab) देखें।

इथेरियम, कई समुदाय-संचालित, ओपन-सोर्स सॉफ़्टवेयर प्रोजेक्ट्स की तरह, अपनी प्रारंभिक शुरुआत के बाद से विकसित हुआ है। इथेरियम के नवीनतम विकासों और प्रोटोकॉल में बदलाव कैसे किए जाते हैं, इसके बारे में जानने के लिए, हम इस गाइड की अनुशंसा करते हैं।