इस लेख में, हम आपको बता रहे हैं कि यह कैसे काम करता है।
यह आलेख मेरे द्वारा मार्च के अंत में लीनक्लाउड पर साझा किए गए टेक्नोलॉजी के आधार पर तैयार किया गया है, और यह मान लिया गया है कि पाठकों के पास क्रिप्टोलॉजी का बुनियादी ज्ञान है और बिटकॉइन के कार्यान्वयन के बारे में प्रारंभिक जानकारी है।
ब्लॉकचेन को ब्लॉकचेन भी कहा जाता है, और इसे हैशट्री के रूप में देखा जा सकता है, और इसलिए इसमें हैशट्री के समान गुण हैंः

तस्वीर साभारः<http://happypeter.github.io/bitcoin_basics/book/017_merkle_tree.html
अर्थात्, एक पेड़ के ढांचे में, प्रत्येक टर्मिनल नोड में एक छिद्रण मूल्य होता है, जबकि गैर-टर्मिनल नोड के छिद्रण मूल्य इसके सभी प्रत्यक्ष उप-नोडों के छिद्रण मूल्य से आते हैं, इसलिए प्रत्येक नोड में सीधे या परोक्ष रूप से इसके सभी उप-नोडों की जानकारी होती है। इसलिए, जब भी किसी टर्मिनल नोड के छिद्रण मूल्य में परिवर्तन होता है, तो इसके सभी मूल नोडों के छिद्रण मूल्य में परिवर्तन होता है, और रूट नोड भी बदलना चाहिए।
मैं HashTree के बारे में एक एप्लिकेशन दे सकता हूंः "100% रिजर्व प्रूफ", जो "शून्य-ज्ञान प्रमाण" की श्रेणी में आता है। हम एक परिदृश्य पर विचार कर सकते हैं, जहां Bitcion के धारकों को लेनदेन करने के लिए बिटकॉइन को एक्सचेंज में जमा करना पड़ता है, और सैद्धांतिक रूप से एक्सचेंज इस पैसे का उपयोग कर सकता है (सभी उपयोगकर्ताओं के जमा खाते के शेष) जो कि उपयोगकर्ता नहीं देखना चाहते हैं, लेकिन एक्सचेंज खुद को स्पष्ट करना चाहता हैः एक्सचेंज पहले अपने पास मौजूद बिटकॉइन का एक पता प्रकाशित करता है, और हम पुष्टि करते हैं कि एक्सचेंज के पास वास्तव में इतनी बिटकॉइन हैं रिजर्व के रूप में, लेकिन यह कैसे साबित होता है कि यह राशि वास्तव में सभी उपयोगकर्ताओं के शेष राशि से अधिक है? दूसरे शब्दों में, प्रत्येक उपयोगकर्ता को अपने स्वयं के शेष राशि को इस राशि में शामिल करने के लिए कैसे स्वीकार किया जाए, जब तक कि प्रत्येक उपयोगकर्ता के शेष राशि को सार्वजनिक नहीं किया जाता है (जो उपयोगकर्ता की गोपनीयता को उजागर करता है)?

तस्वीर साभारः<http://blog.bifubao.com/2014/03/16/proof-of-reserves
हम एक हैश ट्री बना सकते हैं, जहां सभी नोड्स एक उपयोगकर्ता का प्रतिनिधित्व करते हैं, जिसमें उपयोगकर्ता का शेष होता है।Σ) और यूजर आइडेंटिफिकेशन (जैसे डाकघर का पता) का एक टुकड़ा (h), और माता-पिता के नोड्स में उनके बच्चों के नोड्स का कुल योग होता है (sum) और सभी उप-नोडों की जानकारी का सारण ((hash) । प्रत्येक उपयोगकर्ता के लिए, उसे केवल अपने स्वयं के अंत नोड और भाई नोड, उसके सभी पिता नोड और पिता नोड के भाई नोड दिखाने की आवश्यकता है, क्योंकि वह उपयोगकर्ता अपने शेष को पिता नोड में शामिल होने की पुष्टि कर सकता है, और अंत में जड़ नोड में शामिल होने के लिए, पिता नोड से क्रमिक रूप से पीछे हटने के तरीके से।
इस प्रकार, प्रत्येक उपयोगकर्ता को केवल अपनी जानकारी और कुछ एकत्रित जानकारी दिखाई देती है, और प्रत्येक उपयोगकर्ता अपने शेष को रूट नोड में शामिल किए जाने की पुष्टि कर सकता है, बिना किसी अन्य शेष राशि के बारे में बताए। ऊपर दिए गए चित्र में एक छोटी सी त्रुटि है, लेकिन यह स्पष्ट है कि इस तरह की जानकारी के साथ, प्रत्येक उपयोगकर्ता को अपने शेष को रूट नोड में शामिल किया गया है।hके लिएe4df9d12का नोड उपयोगकर्ता का प्रतिनिधित्व करने वाला अंतिम नोड नहीं होना चाहिए, बल्कि एक संचयी सूचना नोड होना चाहिए (यह नोड एक उपयोगकर्ता को 3333 शेष राशि के साथ, और एक 0 शेष राशि के साथ आभासी उपयोगकर्ता को शामिल कर सकता है) किसी उपयोगकर्ता की गोपनीयता जानकारी को लीक करने से बचने के लिए।
अब हम गिट पर एक नज़र डालते हैं, जो कि एक बहुत ही विशिष्ट ब्लॉकचेन एप्लिकेशन है:

तस्वीर साभारःhttp://gitbook.liuhui998.com/1_2.html (GPL v2)
गिट में, चाहे वह फाइल हो, ब्लोब हो, इंडेक्स हो, ट्री हो या कमिट हो, एक हैश होता है जो इसकी सामग्री द्वारा निर्धारित किया जाता है, यदि दो ऑब्जेक्ट्स में समान सामग्री है, तो एक ही हैश है। गिट में, पूरे रिपॉजिटरी का इतिहास एक ब्लॉकचेन है, प्रत्येक कमिट एक ब्लॉक के बराबर है, कमिट में पिछले कमिट का हैश और इस बार संबंधित ऑब्जेक्ट्स का हैश शामिल है, कमिट स्वयं हैश इसकी सामग्री और इन तत्वों से निर्धारित होता है।
गिट ने ब्लॉकचेन का उपयोग करके रिपॉजिटरी के लिए एक अद्वितीय इतिहास निर्धारित किया है यदि एक प्रतिबद्धता को संशोधित किया जाता है, तो उसके बाद के सभी प्रतिबद्धताओं के हैश बदल जाते हैं। बेशक, क्योंकि गिट केवल एक संस्करण नियंत्रण उपकरण है, यह आपको इतिहास को संशोधित करने से नहीं रोकता है।push --force), लेकिन यह बदलाव सभी सह-लेखकों द्वारा देखा जाएगा।
एक और क्लासिक ब्लॉकचेन एप्लिकेशन बिटकॉइन है, और यह बिटकॉइन है जिसने ब्लॉकचेन शब्द का प्रसार किया है (हालांकि यह अवधारणा हमेशा से मौजूद है):

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

तस्वीर साभारः<https://github.com/ethereum/wiki/wiki/White-Paper
- ब्लॉकचैन ब्लॉकचैन लॉजिस्टिक्स ब्लॉकचैन परिवर्तन लॉग
- Transaction <unk> लेन-देन <unk> एक बार की स्थिति में परिवर्तन
- ब्लॉकचैन वर्तमान स्थिति के लिए एक 'सहमति'
वास्तव में, हम बिटकॉइन के ब्लॉकचेन को एक "स्टेटस मशीन" के रूप में कल्पना कर सकते हैं, पूरा ब्लॉकचेन एक स्टेटस "बहीखाता" है, जिसमें प्रत्येक लेनदेन रिकॉर्ड संग्रहीत किया जाता है, इन लेनदेन रिकॉर्डों के आधार पर पूरे खाते की "स्टेटस" की गणना की जा सकती है, यानी बिटकॉइन नेटवर्क में प्रत्येक खाते में किसी भी समय कितना बैलेंस है। प्रत्येक लेनदेन राज्य में एक परिवर्तन है, और प्रत्येक ब्लॉक पूरे बिटकॉइन नेटवर्क के खनिकों की वर्तमान स्थिति के लिए एक "सहमति" है, क्योंकि बिटकॉइन हर 10 मिनट में एक नया ब्लॉक उत्पन्न करता है, जो हर 10 मिनट में सभी खातों के बैलेंस पर एक आम सहमति के बराबर है, जबकि इन दस मिनटों के बीच, बहीखाता की स्थिति वास्तव में एक "अराजकता" है।
Alt Coin
बिटकॉइन के आधार पर कई अन्य क्रिप्टोक्यूरेंसी भी उत्पन्न हुई हैं, जिन्हें अक्सर "अल्ट कॉइन" कहा जाता है, और आमतौर पर दो प्रकार के कार्यान्वयन होते हैंः
पहले, यह अपने स्वयं के नेटवर्क का उपयोग करता है, जो बिटकॉइन से अलग है, और इसका लाभ यह है कि सिक्का अपने स्वयं के प्रोटोकॉल और नियमों को डिजाइन करने के लिए बहुत लचीला है, लेकिन क्योंकि उपयोगकर्ताओं की संख्या बिटकॉइन के बराबर होना मुश्किल है, इसलिए यह दुर्भावनापूर्ण हमलों के खिलाफ बहुत कमजोर होगा।
दूसरा, बिटकॉइन के नेटवर्क को लागू करने के लिए "मेटा प्रोटोकॉल" का उपयोग करना है, जो बिटकॉइन के लेनदेन के ऊपर अनुकूलित जानकारी को लागू करने के लिए अपने स्वयं के तर्क को लागू करता है। इसका लाभ यह है कि बिटकॉइन के कंप्यूटिंग शक्ति का उपयोग करके हमलों से बचाव किया जा सकता है, लेकिन साथ ही बिटकॉइन नेटवर्क पर निर्भर होने के कारण, सभी खनिक नकली मुद्रा के नियमों का पालन नहीं करेंगे, इसलिए ब्लॉक ब्लॉकचेन में प्रवेश करने से रोक नहीं सकते हैं जो नियमों का पालन नहीं करते हैं, केवल क्लाइंट पर अनुपालन नहीं करने वाले लेनदेन को फ़िल्टर कर सकते हैं, और पहले से उल्लिखित बिटकॉइन द्वारा प्रदान की गई सरल पुष्टि सुविधा का उपयोग नहीं कर सकते हैं।
इन सिक्कों के लिए, बिटकॉइन एक ब्लॉकचेन प्रदान कर सकता है जिसमें बड़ी संख्या में खनिक शामिल हैं, जो बड़े पैमाने पर दुर्भावनापूर्ण हमलों से बचने में सक्षम हैं, और बिटकॉइन के लेनदेन पर कस्टम डेटा भी हो सकता है, जिससे सिक्कों के कार्यान्वयन के लिए कुछ जगह बची है।
Bitocin ने भी एक प्रस्ताव दिया है।Bitcoin Scriptलेकिन चूंकि यह बिटकॉइन का मुख्य कार्य नहीं है, इसलिए केवल अपेक्षाकृत सरल परिचालन किया जा सकता है, केवल ब्लॉकचेन पर डेटा को बहुत सीमित रूप से पढ़ा जा सकता है, और चक्रीय तंत्र की कमी के कारण, सामान्य, ट्यूरिन-पूर्ण तर्क लिखना मुश्किल है।
Ethereum

तस्वीर साभारःhttps://www.ethereum.org/assets (CC 3.0)
Ethereum एक ब्लॉकचेन-आधारित, विकेन्द्रीकृत एप्लिकेशन प्लेटफ़ॉर्म है जो बिटकॉइन के बुनियादी ढांचे और क्रिप्टोग्राफिक-आधारित ब्लॉकचेन तकनीक को एक सार्वभौमिक प्लेटफ़ॉर्म के रूप में बनाता है और बिटकॉइन नेटवर्क की कुछ लापता सुविधाओं को पूरा करता है ताकि डेवलपर्स अपने स्वयं के विकेन्द्रीकृत एप्लिकेशन को ब्लॉकचेन पर चला सकें।
एथेरियम के बारे में विस्तार से बताने से पहले, मैं आपको बताता हूं कि विकेन्द्रीकृत नेटवर्क के दो मुख्य आधार क्या हैं: क्रिप्टोग्राफी और गेमिंग। क्रिप्टोग्राफी, ज़ाहिर है, केवल सार्वजनिक कुंजी एन्क्रिप्शन, डिजिटल हस्ताक्षर, छिद्रण और सारांश एल्गोरिदम के माध्यम से गणितीय रूप से सुरक्षा सुनिश्चित करने के लिए है। गेमिंग का मतलब है कि विकेन्द्रीकृत नेटवर्क में, कोई भी व्यक्ति, जो जानबूझकर नेटवर्क पर हमला करना चाहता है, शामिल हो सकता है। विकेन्द्रीकृत नेटवर्क को डिजाइन करते समय, प्रत्येक प्रतिभागी के हितों के संबंध के बारे में सोचना आवश्यक है, यह सुनिश्चित करना कि नियमों का पालन करते समय लाभ अधिकतम हो और नियमों का उल्लंघन करते समय नुकसान या जोखिम उठाया जाए।
हालांकि, डिजिटल दुनिया में, डेटा का एक टुकड़ा जारी करने के लिए कोई लागत नहीं है, कोई "लाभ" और "नुकसान" नहीं है, इसलिए "लाभ" को परिभाषित करने के लिए भौतिक दुनिया के साथ किसी प्रकार का संबंध स्थापित करना होगा। उदाहरण के लिए, बिटोसिन नेटवर्क में, यदि हमलावर कृत्रिम रूप से ब्लॉकचैन की दिशा को बदलना चाहता है, तो सभी अन्य खनिकों की तुलना में अधिक कंप्यूटिंग शक्ति की आवश्यकता होती है, जबकि भौतिक दुनिया में, कंप्यूटिंग उपकरण की आवश्यकता होती है, जबकि कंप्यूटिंग उपकरण को भौतिक दुनिया से खरीदना पड़ता है।
इसलिए, विकेंद्रीकृत नेटवर्क में, सभी समस्याओं को "प्रौद्योगिकी" द्वारा हल नहीं किया जाता है, और जो कुछ प्रौद्योगिकी तक नहीं पहुंचता है, उसे लाभ के माध्यम से, आर्थिक प्रोत्साहन के माध्यम से हल करना होगा। "आर्थिक प्रोत्साहन" की आवश्यकता के कारण, एथेरियम में एक वॉलेट सिस्टम (आर्थिक इकाई "एथर" कहा जाता है) है, प्रत्येक उपयोगकर्ता के पास एक वॉलेट पता है जो इसकी एकमात्र पहचान है। इस बिंदु पर Bitcion के समान है।
"अनुबंध" एथेरियम द्वारा पेश की गई सबसे महत्वपूर्ण अवधारणा है। बिटकॉइन में, सभी पते एक उपयोगकर्ता के हैं। जब हम "उपयोगकर्ता" कहते हैं, तो हम वास्तव में सार्वजनिक कुंजी और निजी कुंजी की एक जोड़ी के बारे में बात कर रहे हैं। लेकिन एथेरियम में, एक कुंजी जोड़ी के स्वामित्व वाले पते के अलावा, "कोड" के स्वामित्व वाला एक और पता है, जो अनुबंध है। अनुबंध उपयोगकर्ता द्वारा जारी किया जाता है, जो मूल रूप से एक कोड है, जिसे जारी करने के बाद संशोधित नहीं किया जा सकता है।
- वास्तव में, गणना के परिणामों को ब्लॉकचैन में संग्रहीत करने की आवश्यकता नहीं है, क्योंकि किसी भी समय पुनः गणना की जा सकती है।
- अन्य अनुबंधों में फ़ंक्शन को बुलाया जा सकता है ((अन्य अनुबंधों का कोड और डेटा ब्लॉकचेन पर भी मौजूद है)) ।
- निष्पादन के दौरान नए लेनदेन बनाए जा सकते हैं (अपने स्वयं के बटुए के शेष राशि को नियंत्रित करने के लिए) जो अन्य अनुबंधों को निष्पादित करने के लिए जा सकते हैं।
एक उदाहरण के रूप में, Ethereum के आधिकारिक क्लाइंट में एक बहु-उपयोगकर्ता वॉलेट बनाने की सुविधा हैः

जैसा कि चित्र में दिखाया गया है, इस फ़ंक्शन के माध्यम से एक वॉलेट पता बनाया जा सकता है जो 2 अन्य लोगों के साथ साझा किया जाता है, और प्रत्येक व्यक्ति प्रति दिन 100 ईथर तक का उपयोग कर सकता है, यदि यह सीमा से अधिक है, तो एक और व्यक्ति की सहमति के साथ।
यह फ़ंक्शन वास्तव में एक अनुबंध बनाता है, और उपरोक्त तर्क अनुबंध में कोड द्वारा वर्णित है। जब आप इस साझा बटुए से भुगतान करना चाहते हैं, तो आपको इस साझा बटुए को एक संदेश भेजने की आवश्यकता होती है ((लेन-देन एक संदेश है, लेन-देन की राशि शून्य हो सकती है, केवल डेटा ले जा सकती है), और फिर साझा बटुए में कोड निष्पादित किया जाता है, यदि यह भुगतान अनुरोध उपरोक्त तर्क के अनुरूप है, तो वास्तविक भुगतान लेनदेन शुरू किया जाता है, अन्यथा यह अनुरोध खारिज कर दिया जाता है ((वास्तविक रूप से कोई भुगतान नहीं किया गया)) ।
एक अन्य उदाहरण "बचत अनुबंध" है, जो हमेशा के बारे में बात करता है बिटकॉइन एक डिजिटल मुद्रा के रूप में इसकी मुद्रा मूल्य (और कानूनी मुद्रा के विनिमय दर) अस्थिर है, अक्सर एक दिन में मुद्रा मूल्य में दो गुना वृद्धि या गिरावट होती है, लेकिन यदि आप अनुबंध का उपयोग करते हैं, तो यह समस्या कुछ हद तक हल हो सकती है।
हम एक व्यक्ति को "जोखिम से बचने वाला" कहेंगे जो मुद्रा के मूल्य को स्थिर रखना चाहता है, और एक अन्य व्यक्ति जो मुद्रा के मूल्य में उतार-चढ़ाव का जोखिम उठाने के लिए तैयार है और इससे लाभ उठाता है, उसे "जोखिम उठाने वाला" कहा जाएगा, इसलिए वे एक राशि (जैसे 1000 CNY) और एक समय विंडो (जैसे एक महीने) पर अनुबंध कर सकते हैं, और एक अनुबंध बना सकते हैं। निम्न तर्क को निष्पादित करेंः
- जोखिम लेने वाला 1000 CNY मूल्य के ईथर को अनुबंध के बटुए के पते पर भेजता है, और जोखिम लेने वाला 1000 CNY (या अधिक) मूल्य के ईथर को अनुबंध के लिए भेजता है (यदि कोई अनुबंध नहीं करता है, तो जोखिम लेने वाला अपना ईथर वापस ले सकता है) ।
- एक महीने के बाद, जोखिम लेने वाले को उस समय 1000 CNY मूल्य के ईथर को वापस लेने की अनुमति दी गई थी, और शेष ईथर को जोखिम लेने वाले द्वारा वापस ले लिया गया था, चाहे ईथर और CNY के बीच विनिमय दर क्या हो।
यदि ईथर का मूल्य बढ़ता है, तो जोखिम लेने वाले को लाभ होता है, और यदि ईथर का मूल्य गिरता है, तो जोखिम लेने वाले को नुकसान होता है, लेकिन जोखिम से बचने वाले को हमेशा कोई नुकसान नहीं होता है। बेशक, जोखिम से बचने वाले और जोखिम लेने वाले पहले से सहमत हो सकते हैं कि जोखिम से बचने वाले को "बीमा" का भुगतान करने की आवश्यकता होगी, और यह भी तय किया जा सकता है कि जोखिम लेने वाले को 1000 CNY से कई गुना अधिक सुरक्षा प्रदान करने की आवश्यकता होगी (जिसकी दोगुनी दर अधिक है, वह अधिक जोखिम ले सकता है) ।
उपरोक्त उदाहरण में एक और समस्या है जो अच्छी तरह से हल नहीं हुई है, यह है कि ईथर और क्रिप्टोक्यूरेंसी के बीच विनिमय दर कैसे निर्धारित की जाए, जैसा कि हमने पहले उल्लेख किया था, अनुबंध केवल ब्लॉकचेन पर डेटा तक पहुंच सकता है, जबकि क्रिप्टोक्यूरेंसी भौतिक दुनिया में मौजूद डेटा है, न कि क्रिप्टोक्यूरेंसी दुनिया में, हमें इस तरह के "गैर-क्रिप्टोक्यूरेंसी दुनिया से डेटा" को ब्लॉकचेन में लाने के लिए किसी तरह के तंत्र की आवश्यकता है।
हम एक और अनुबंध डिजाइन कर सकते हैं जो इस तरह के तर्क को निर्दिष्ट करता है, जो वास्तविक दुनिया से एथेरम और फिक्स्ड मुद्रा के बीच विनिमय दरों को हर समय विंडो (जैसे एक घंटे) में एकत्र करता हैः
- सभी लोग Contract को गारंटी राशि दे सकते हैं और एक विनिमय दर प्रदान कर सकते हैं।
- समय खिड़की के अंत में, Contract ने सभी द्वारा प्रदान की गई विनिमय दरों का औसत ((जमानत राशि के अनुसार भारित) गणना की और इसे प्रकाशित किया।
- और एकत्रित किए गए गारंटी को वितरित किया जाएगा (भारित गारंटी के अनुसार) उन लोगों के लिए जो औसत के 25% के सबसे करीब हैं।
किसी भी प्रतिभागी के लिए, एक वास्तविक विनिमय दर प्रस्तुत करने के लिए पुरस्कार प्राप्त करने की अधिक संभावना है, क्योंकि वह अन्य लोगों के प्रस्तावों को नहीं जानता है, जबकि एक बहुत ही असामान्य विनिमय दर प्रस्तुत करने के लिए वारंटी खोने की अधिक संभावना होगी।
बेशक इस नियम में कुछ खामियां हैं, उदाहरण के लिए यदि किसी व्यक्ति के पास बहुत अधिक गारंटी है, तो वह औसत मूल्य को वास्तविक विनिमय दर से अधिक या कम कीमत पर खींच सकता है और साथ ही साथ पुरस्कार प्राप्त कर सकता है, और अन्य लोगों को गारंटी खो देता है जो सटीक विनिमय दर प्रदान करते हैं। लेकिन वास्तव में वास्तविक दुनिया में भी यही है, यदि आपके पास बहुत अधिक पैसा है तो आप एक वस्तु की कीमत को बढ़ा सकते हैं या दबा सकते हैं, केवल वास्तविक दुनिया की तुलना में, इलेक्ट्रॉनिक मुद्रा की मात्रा बहुत छोटी है, और बहुत अधिक धन की आवश्यकता नहीं है। लेकिन वास्तव में इस तरह की दुर्भावनापूर्ण वृद्धि या दबाव भी बहुत जोखिम भरा है, क्योंकि आप यह सुनिश्चित नहीं कर सकते हैं कि आपके द्वारा भुगतान की गई गारंटी पर्याप्त है, और यदि यह विफल हो जाता है तो सभी गारंटी खो दी जाएगी।
एक और कमजोरी यह है कि "हर कोई अनुबंध के लिए जमा कर सकता है और एक विनिमय दर प्रदान कर सकता है" यह कदम लेनदेन के निर्माण के माध्यम से किया जाता है, और सभी लेनदेन ब्लॉकचेन पर लिखे जाते हैं, इसलिए आपके द्वारा प्रस्तुत विनिमय दर वास्तव में दूसरों के लिए दिखाई देती है, और आगे दुर्भावनापूर्ण हमलावरों के लिए अवसर पैदा करती है, और मैं एक उदाहरण के साथ "रैंडम नंबर" उत्पन्न करने के बारे में बात करूंगा।
हमने पहले कहा था कि अनुबंध ब्लॉकचेन पर डेटा पढ़ सकता है, लेकिन ब्लॉकचेन पर डेटा निश्चित है, अगर हम एक जुआ-जैसे अनुप्रयोग को लागू करना चाहते हैं, तो हम एक यादृच्छिक संख्या कहां से प्राप्त कर सकते हैं?
एक यादृच्छिक संख्या स्रोत के बारे में सोचने के लिए अगले ब्लॉक का हैश है, और ज्यादातर मामलों में, इस स्तर की यादृच्छिकता पर्याप्त है। लेकिन वास्तव में, खनिक इस यादृच्छिक संख्या को कुछ हद तक नियंत्रित कर सकते हैं, यह मानते हुए कि एक खनिक एक जुआ में भाग लेता है, और जुआ का लाभ एक ब्लॉक खोदने से अधिक होता है, तो यदि खनिक एक ब्लॉक खो देता है जो खुद को खो देगा, तो यह स्पष्ट है कि खनिक इस नए ब्लॉक को प्रकाशित नहीं करना चुनता है, यह एक एकल खनिक की गणना शक्ति के मामले में अधिक स्पष्ट है।
इसलिए हमें एक ऐसा तंत्र पेश करने की आवश्यकता है जो विनिमय दरों को एकत्रित करने के समान है, जो कि यादृच्छिक संख्याओं को एकत्रित करता है, और फिर प्रत्येक समय खिड़की के अंत में इन बीजों का उपयोग करके एक यादृच्छिक संख्या की गणना करता है और। लेकिन विनिमय दरों को एकत्रित करने की तरह, क्योंकि प्रतिभागी विनिमय दरों को प्रस्तुत करने के लिए लेनदेन का निर्माण करते हैं, इसलिए एक समय खिड़की के बीच, प्रत्येक व्यक्ति द्वारा प्रस्तुत यादृच्छिक संख्या अन्य लोगों के लिए दिखाई देती है, इसलिए एक व्यक्ति जो पहले से ही एक जुआ में भाग ले रहा है, वह ध्यान से एक यादृच्छिक संख्या के बीज को चुन सकता है ताकि अन्य लोगों द्वारा प्रस्तुत किए गए बीज के अतिरिक्त नए बीज के परिणामस्वरूप यादृच्छिक संख्या उसकी अपेक्षाओं के अनुरूप हो।
इसलिए यह आवश्यक है कि हम बीज संग्रह की खिड़की को दो भागों में विभाजित करें ताकि हम एक यादृच्छिक संख्या प्राप्त कर सकें जिसे कोई भी भविष्यवाणी और हस्तक्षेप नहीं कर सकता हैः
- चरण 1: सभी लोग अनुबंध के लिए एक गारंटी राशि का भुगतान कर सकते हैं और "एक यादृच्छिक चयनित बीज का सार मान" प्रदान कर सकते हैं।
- चरण 2: चरण 1 में भाग लेने वाला व्यक्ति अनुबंध को बीज प्रदान करता है जिसे बीज नहीं दिया गया है।
- चरण II समाप्त होता हैः अनुबंध सभी वैध बीज को अलग-अलग करता है, एक यादृच्छिक संख्या का एक सेट उत्पन्न करता है और इसे प्रकाशित करता है; चरण II में वापस लौटने के लिए, सही बीज प्रदान करने वाले व्यक्ति की गारंटी।
पहले चरण में आप केवल अन्य लोगों द्वारा प्रस्तुत किए गए बीज के सारण मानों को जानते हैं, वास्तविक बीज को नहीं जानते हैं, और इसलिए परिणामों में हस्तक्षेप करने के लिए एक बीज का निर्माण नहीं कर सकते हैं; जबकि दूसरे चरण में, सभी केवल पहले चरण में प्रस्तुत किए गए बीज की पुष्टि कर रहे हैं, नए को प्रस्तुत नहीं कर सकते हैं, और न ही दूसरों को प्रस्तुत करने से रोक सकते हैं।
हमने पहले उल्लेख किया है कि बिटकॉइन स्क्रिप्ट में कोई चक्र, पुनरावृत्ति, और कूदने की क्षमता नहीं है, शायद बिटकॉइन बिटकॉइन स्क्रिप्ट के निष्पादन समय को नियंत्रित करने के लिए है, क्योंकि ट्यूरिन के "स्टॉप थ्योरी" के अनुसार, ट्यूरिन-सम्पन्न प्रोग्रामिंग भाषाओं द्वारा लिखी गई प्रक्रियाएं हमेशा केवल स्थैतिक विश्लेषण के दृष्टिकोण से यह निर्धारित नहीं कर सकती हैं कि क्या यह सीमित चरणों के बाद समाप्त हो जाएगी, इस प्रकार एक दुर्भावनापूर्ण हमलावर खनिकों के सामान्य काम को बाधित करने के लिए एक लेनदेन का निर्माण कर सकता है जो एक मृत चक्र का कारण बनता है।
और Ethereum फिर से "आर्थिक प्रोत्साहन" के माध्यम से इस समस्या को दूर करता है, अनुबंध एक वर्चुअल मशीन पर संचालित होता है जिसे ईवीएम (एथेरियम वर्चुअल मशीन) कहा जाता है। ईवीएम एक स्वयं-भुगतान वाली वर्चुअल मशीन है, जो ईवीएम के मानक में संचालित होने के लिए आवश्यक मेमोरी और सीपीयू समय के आधार पर प्रत्येक ओपकोड द्वारा खपत गैस को परिभाषित करता है, जो कि ईथर द्वारा खरीदा गया एक कंप्यूटिंग संसाधन है। जैसा कि ऊपर उल्लेख किया गया है, जब एक लेनदेन का लक्ष्य अनुबंध होता है, तो अनुबंध कोड निष्पादित होता है, लेनदेन के प्रवर्तक को अनुबंध निष्पादन के दौरान खपत गैस के लिए भुगतान करने की आवश्यकता होती है, जबकि यह कहते हुए कि "एक अधिकतम गैस राशि का भुगतान करने के लिए तैयार है" यदि गैस आधे रास्ते में समाप्त हो जाती है, तो अनुबंध का निष्पादन बंद हो जाएगा।
फिर हम "सहमति अंतराल" के बारे में फिर से चर्चा करते हैं, पहले उल्लेख किया गया है कि बिटकॉइन में हर 10 मिनट में एक नया ब्लॉक होता है, यानी पूरे नेटवर्क में हर 10 मिनट में एक "सहमति" होती है, इसलिए आमतौर पर बिटकॉइन लेनदेन को दस मिनट तक इंतजार करना पड़ता है।
स्पष्ट रूप से कम आम सहमति का समय उपयोगकर्ताओं के लिए एक बेहतर अनुभव है, लेकिन बिटकॉइन ब्लॉक समय को क्यों नहीं कम करता है? यह इसलिए है क्योंकि तेजी से आम सहमति का अंतराल "केंद्रीकृत खदान" के कुछ लाभों को बढ़ाता है। तथाकथित "खदान" का अर्थ है कि बिटकॉइन खनिक एक साथ खनन करते हैं, खनिक बिना शर्त के खदान के निर्देशों का पालन करते हैं, और अंत में, एक समझौते के साथ, खदान के साथ आय का बंटवारा करते हैं। स्पष्ट रूप से, बिटकॉइन एक विकेंद्रीकृत प्रणाली के रूप में, इस तरह के केंद्रीकृत खदान के अतिरिक्त लाभ की उम्मीद नहीं करता है।
जब एक खनिक A एक नया ब्लॉक खोदता है, तो वह उस ब्लॉक को प्रसारित करता है, और अन्य लोग इस संदेश को प्राप्त करने के बाद तुरंत इस नए ब्लॉक के आधार पर काम करना शुरू कर देते हैं। जबकि अन्य लोगों के लिए, "ए ने एक नया ब्लॉक खोदा" और "ए के प्रसारित संदेश प्राप्त करने" के बीच के समय के बीच की गणना वास्तव में बर्बाद हो गई है, और केंद्रीकृत खनन पूल में अन्य खनिकों को यह समस्या नहीं होगी, क्योंकि वे नए ब्लॉक के बारे में अधिक जानकारी प्राप्त कर सकते हैं और तुरंत नए ब्लॉक के आधार पर काम शुरू कर सकते हैं।

इस प्रसारण के लिए कुछ सेकंड लग सकते हैं, जो 10 मिनट के लिए बहुत महत्वपूर्ण नहीं है, लेकिन यदि आप आम सहमति के अंतराल को कम करते हैं, तो केंद्रीकृत खदानों का लाभ स्पष्ट हो जाएगा। लेकिन Ethereum ने "अंकल ब्लॉक" की अवधारणा को पेश करके इस समस्या को हल किया, आम सहमति के अंतराल को 15 सेकंड तक कम कर दिया।
बिटकॉइन के ब्लॉकचेन में, एक ब्लॉक में केवल एक पिता ब्लॉक और एक बच्चा ब्लॉक हो सकता है। लेकिन एथेरियम में, एक नए ब्लॉक में एक पिता ब्लॉक और कई चाचा ब्लॉक हो सकते हैं। ऊपर दिए गए उदाहरण पर लौटते हुए, यदि कोई नया ब्लॉक A में खोदा जाता है, लेकिन अन्य लोगों को प्रसारण के समय तक नहीं मिला है, तो यदि कोई नया ब्लॉक खोदता है, लेकिन प्रसारण देर से होने के कारण इसे स्वीकार नहीं किया गया है, तो यह ब्लॉक अगले ब्लॉक का "चाचा" बनने की संभावना है। इस ब्लॉक का प्रतिनिधित्व करने वाले कार्य का प्रमाण अगले ब्लॉक का हिस्सा माना जाएगा (यानी, इस व्यक्ति ने अगले ब्लॉक को खोदने की कठिनाई कम कर दी है), और चाचा ब्लॉक केवल कार्य का प्रमाण प्रदान करता है, जिसमें शामिल लेनदेन अमान्य हैं। इस प्रकार, कम अंतराल वाले ग्राहकों के लिए कम अंतराल वाले प्रसारण को नुकसान पहुंचाया जाता है, विशेष रूप से, प्रत्यक्ष चाचा ने 50% कार्य का प्रमाण प्रदान किया है, दूसरी पीढ़ी के चाचा ने 25% कार्य का प्रमाण प्रदान किया है, जो इस तरह के पांच पीढ़ियों को सबसे अधिक स्वीकार करते हैं।

तस्वीर साभारः<https://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time
अनसुलझे मुद्दे
अब मैं आपको कुछ ऐसी समस्याओं के बारे में बताऊंगा जिन्हें एथेरियम ने अभी तक हल नहीं किया है।
सबसे पहले, एथेरियम अभी भी एक आम सहमति है, और बिटकॉइन के रूप में, POW के माध्यम से गारंटी है, केवल एक निश्चित मात्रा में काम पूरा करने वाले नोड्स को ब्लॉक उत्पन्न करने में भाग लेने की अनुमति है, कार्यप्रवाह प्रमाणन की समस्या यह है कि यह नेटवर्क की सुरक्षा की गारंटी देने के लिए बहुत अधिक कंप्यूटिंग शक्ति को बर्बाद कर देगा, हालांकि यह हमारे द्वारा पहले बताए गए "आर्थिक प्रोत्साहन" विचार पर आधारित है, लेकिन वास्तव में सुधार किया जा सकता है। एथेरियम का मानना है कि एक बेहतर तरीका है POS का उपयोग करना (स्वामित्व प्रमाण) कार्यप्रवाह प्रमाणन की जगह, जो इस नेटवर्क की दक्षता में काफी सुधार कर सकता है। अब व्यर्थ गणना करने की आवश्यकता नहीं है।
जब ईथर अपने आप में मूल्यवान है, तो इसे अपने आप में आर्थिक प्रोत्साहन के रूप में क्यों नहीं उपयोग किया जाता है? पीओएस का अर्थ है कि हमारे पास ईथर का उपयोग गारंटी के रूप में किया जाता है, जो कि ब्लॉक उत्पादन में भाग लेने के इच्छुक प्रत्येक नोड (पारंपरिक अर्थों में खनन) को सत्यापनकर्ता कहा जाता है) को सिस्टम के लिए भुगतान करना पड़ता है (यहां सिस्टम प्रोटोकॉल में एक प्रावधान को संदर्भित करता है, सभी नोडों का मानना है कि यह गारंटी "जमे हुए" है) एक गारंटी का भुगतान करें, और फिर हम अपने स्वयं के गारंटी का उपयोग करते हैं जो कि अगले ब्लॉक का ब्लॉक हो सकता है (एक महत्वपूर्ण शर्त यह है कि "संभावित" ब्लॉक को अनुबंध के अनुसार होना चाहिए), यदि यह ब्लॉक वास्तव में अगला ब्लॉक बन जाता है, तो सभी नोडों को पुरस्कार दिया जाएगा, अन्यथा गारंटी रद्द कर दी जाएगी) ।
यह पैटर्न वास्तव में POW के समान है, POW में, खनिक अपने स्वयं के कंप्यूटिंग शक्ति का उपयोग करते हैं और यदि एक श्रृंखला लंबी है, तो खनन जारी रखने के लिए उस पर स्विच करना आवश्यक है। क्योंकि अधिक से अधिक लोग शामिल होते हैं, सही श्रृंखला होने की संभावना अधिक होती है, और अंत में आप एक आम सहमति तक पहुंचते हैं। जबकि पीओएस में, आप अपने स्वयं के गारंटी राशि का उपयोग करते हैं, आप भी एक आम सहमति तक पहुंचने के लिए कई अन्य लोगों द्वारा दांव लगाए गए ब्लॉक का चयन करने की प्रवृत्ति रखते हैं (यदि यह कानूनी है) ।
पीओएस निश्चित रूप से पूरे नेटवर्क की क्षमता को बढ़ाएगा <unk> लोगों को अब अर्थहीन गणनाओं की एक बड़ी संख्या के माध्यम से आम सहमति तक पहुंचने की आवश्यकता नहीं है, प्रत्येक नोड की गणना अनुबंध में कोड निष्पादित करने और डेटा सत्यापन करने की गणना के करीब होगी <unk>
निश्चित रूप से, पीओएस को अभी तक नहीं अपनाया गया है क्योंकि अभी भी कुछ अनसुलझी समस्याएं हैं, जिनमें से एक पीओडब्ल्यू की तरह 51% हमले की समस्या है, पीओडब्ल्यू में 51% नेटवर्किंग कंप्यूटिंग की एक निश्चित भौतिक सीमा है क्योंकि कंप्यूटिंग को प्रदान करने के लिए कंप्यूटिंग की आवश्यकता होती है; इसके विपरीत, पीओएस में 51% नेटवर्किंग ईथर को इकट्ठा करना अपेक्षाकृत आसान है जब तक आपके पास पर्याप्त पैसा है। पीओएस स्वाभाविक रूप से पीओडब्ल्यू की तुलना में अधिक जटिल नहीं है, और उपरोक्त कार्यशीलता को लागू करने के लिए तर्क को संभालने की आवश्यकता है जैसे कि एक प्रभावी सत्यापनकर्ता सूची का रखरखाव, सत्यापन के लिए धन की रोकथाम, जुर्माना और वापसी, प्रस्तावित ब्लॉक और सट्टेबाजी ब्लॉक, सत्यापनकर्ता के बीच गठबंधन को रोकने के लिए, नेटवर्क विभाजन के बाद वसूली आदि।
एक और विषय है "विखंडन", Bitcoin या Ethereum दोनों के लिए, वर्तमान में सभी लेनदेन की पुष्टि एक ही ब्लॉकचेन पर की जाती है, जो एक वितरित नेटवर्क की कंप्यूटिंग क्षमता को बहुत सीमित करता है। प्रत्येक नोड को प्रत्येक लेनदेन को प्राप्त करने, संग्रहीत करने और सत्यापित करने की आवश्यकता होती है, और पूरे नेटवर्क की प्रसंस्करण क्षमता वास्तव में एक नोड की प्रसंस्करण क्षमता के बराबर होती है।
इसलिए एथेरियम भविष्य में एक "टुकड़ा" तंत्र को पेश करना चाहता है, जो पूरे नेटवर्क को कई हिस्सों में विभाजित करता है, और उनके बीच स्वतंत्र रूप से लेनदेन की पुष्टि करता है। लेकिन टुकड़ों के बीच, एक निर्देशक की संरचना के माध्यम से, अन्य टुकड़ों के डेटा को संदर्भित किया जाता है, अन्य टुकड़ों को एसिंक्रोनस कॉल के माध्यम से प्रभावित किया जाता है, इसलिए पूरे नेटवर्क को उपयोगकर्ता की दृष्टि से एक ही बना दिया जाता है, लेकिन पूरे नेटवर्क की प्रसंस्करण क्षमता बहुत मजबूत हो जाएगी। वर्तमान में, टुकड़े से संबंधित कार्यान्वयन अपेक्षाकृत प्रारंभिक विकास चरण में है, इसलिए मुझे सीमित जानकारी मिली है, इसलिए मैं बहुत अधिक परिचय नहीं दे सकता।
Contract
इस भाग में मैं आपको कुछ वास्तविक और काम करने वाले कॉन्ट्रैक्ट कोड दिखाऊंगा। कॉन्ट्रैक्ट को कई अलग-अलग भाषाओं में लिखा जा सकता है, और अंततः वे ईवीएम पर निष्पादित होने वाले ओपकोड में संकलित हो जाएंगे। आज हम जावास्क्रिप्ट के लिए सॉलिडिटी का उपयोग करेंगे, जो वर्तमान में सबसे अच्छी ईवीएम भाषाओं में से एक है।
javascript
contract Test {
uint storedData; // State variable
struct Voter { // Struct
uint weight;
bool voted;
address delegate;
uint vote;
}
event HighestBidIncreased(address bidder, uint amount); // Event
function func() { // Function
if (msg.sender.balance < 10 finney) {
msg.sender.send(10 finney);
}
sha256("...");
address nameServer = 0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2;
nameServer.delegatecall("isAvailable", "MyName");
nameServer.call("register", "MyName");
}
}
यहाँ कुछ मुख्य वाक्यविन्यास दिखाए गए हैं जो आप Solidity में स्टेटस वेरिएबल्स को घोषित कर सकते हैं।uint storedData;), इन चरों के मूल्य हमेशा के लिए ब्लॉकचेन पर संग्रहीत किए जाते हैं;structजटिल डेटा संरचना को घोषित करने के लिए; फ़ंक्शंस को भी परिभाषित किया जा सकता है, जो लेनदेन प्राप्त होने पर निष्पादित किए जाते हैं, लेनदेन के प्रवर्तक को चुनने के लिए कि कौन से फ़ंक्शंस निष्पादित किए जाते हैं, इसलिए एक अनुबंध कई फ़ंक्शंस प्रदान कर सकता है, जिसमें फ़ंक्शंस में तार्किक निर्णय, पुनरावृत्ति और परिवर्तन की मात्रा को संशोधित किया जा सकता है।
भाषा में कुछ सुविधाजनक कार्य हैं, जैसे कि सामान्य क्रिप्टोग्राफिक एल्गोरिदम।sha256) , यूनिट परिवर्तित करना10 finney)), सीधे अपने पर्स के पते पर लिखें0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2) आदि।msgयह एक अंतर्निहित वैश्विक चर है, जो इस लेनदेन से संबंधित जानकारी पढ़ सकता है, जैसे कि प्रवर्तक, राशि आदि। अनुबंध अन्य अनुबंधों के कोड को दो तरीकों से बुला सकता है,delegatecallयह किसी अन्य अनुबंध के कोड को वर्तमान संदर्भ में निष्पादित करने के बराबर है, जैसे कि एक पुस्तकालय फ़ंक्शन का परिचय; जबकिcallयह एक नया अनुबंध शुरू करने का तर्क है जो एक और अनुबंध को ट्रिगर करता है।
यह जटिल कार्य एक 'राज्य चर' के रूप में अमूर्त है। storedData एक राज्य चर है। वास्तव में, अनुबंध निष्पादन के दौरान राज्य चर में संशोधन ब्लॉकचैन में संग्रहीत नहीं किया जाता है, क्योंकि अनुबंध निष्पादन निश्चितता की गणना करता है। अनुबंध निष्पादन लेनदेन से ट्रिगर किया जाता है, और निष्पादन केवल ब्लॉकचैन पर मौजूद डेटा को पढ़ता है, इसलिए जब तक हम जानते हैं कि इस अनुबंध से संबंधित प्रत्येक लेनदेन का इतिहास क्या है, हम किसी भी समय पर एक अनुबंध के राज्य चर के मूल्य का अनुमान लगा सकते हैं।
अब मैं आपको एक वास्तविक व्यवहार्य कॉन्ट्रैक्ट टैंक दिखाता हूं जो Ethereum नेटवर्क पर आधारित अपने स्वयं के टोकन जारी करता हैः
javascript
contract Coin {
// The keyword "public" makes those variables
// readable from outside.
address public minter;
mapping (address => uint) public balances;
// Events allow light clients to react on
// changes efficiently.
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
function Coin() {
minter = msg.sender;
}
function mint(address receiver, uint amount) {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
}
कोड सेhttp://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html#subcurrency-example (MIT)
कॉन्ट्रैक्ट, जिसे कॉइन कहा जाता है, दो स्टेटस वेरिएबल्स को घोषित करता है।minterइस टोकन को संग्रहीत करने के लिए उपयोग किए जाने वाले रचनाकारों ने फंक्शन ((function Coin()) ने इस चर को अनुबंध बनाने के लिए पहले लेन-देन के लिए प्रवर्तक असाइनमेंट दिया; एक बटुए के पते को डिजिटल मानचित्रण तालिका में भी घोषित किया।balances, प्रत्येक टोकन धारक के पते के शेष राशि को दर्शाने के लिए प्रयोग किया जाता है.
mintयह फ़ंक्शन पहले यह निर्धारित करता है कि क्या लेनदेन का प्रवर्तक टोकन का निर्माता है, और यदि हां, तो फंक्शन पैरामीटर के अनुसार, एक निश्चित संख्या में टोकन को निर्दिष्ट पते पर जोड़ा जाता है।sendइस फ़ंक्शन को सभी द्वारा बुलाया जा सकता है, जो लेन-देन के प्रवर्तक के पते से एक निश्चित राशि को घटाता है (यदि पर्याप्त शेष राशि है) और लक्ष्य पते पर जोड़ता है, जो एक हस्तांतरण के बराबर है।
हमने एक नाम भी घोषित किया है।Sentकी घटना, घटना वास्तव में कोई वास्तविक भूमिका नहीं निभाएगी, केवल डीबगिंग के दौरान महत्वपूर्ण घटनाओं को प्रिंट करने में मदद मिलेगी, भविष्य में भी हल्के ग्राहक के कार्यान्वयन की सुविधा होगी (हल्के ग्राहक केवल घटनाओं को स्वीकार करते हैं और वास्तविक रूप से अनुबंध निष्पादित नहीं करते हैं) ।

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

इस अनुबंध के बारे में जानकारी के लिए अनुबंध का विस्तृत इंटरफ़ेस देखेंः

और आप देख सकते हैं कि आप क्या कर रहे हैं, और आप देख सकते हैं कि आप क्या कर रहे हैं।minterमैं अपने घर का पता बताता हूँ, और मैं अपने घर का पता बताता हूँ।balancesक्योंकि यह एक नक्शा तालिका है, तो आप एक पते में प्रवेश कर सकते हैं और अपने शेष राशि की जांच कर सकते हैं. दाईं ओर आप इस अनुबंध के लिए एक नया सौदा शुरू कर सकते हैं, वहाँ एक ड्रॉप-डाउन मेनू है कि आप चुन सकते हैंsendया mintफ़ंक्शन, आप Contract को पास करने के लिए पैरामीटर भर सकते हैं. चूंकि यहाँ हम लेन-देन भेजने के उद्देश्य से एक संदेश भेजने के लिए है, न कि Ether, तो हम लेन-देन की राशि सेट करने की जरूरत नहीं है.
अब मैं आपको एक बहुत ही रोचक कॉन्ट्रैक्ट के बारे में बताऊंगा जो एक पोंट्ज़ी घोटाले की तरह काम करता है, जिसमें आप कॉन्ट्रैक्ट को 1 Ether का भुगतान करते हैं ताकि आप इस गेम में शामिल हो सकें, और हर 3 लोगों के लिए 3 Ether का भुगतान किया जाता है, क्रमशः पहले से जुड़े हुए लोगों कोः
javascript
contract Pyramid {
struct Participant {
address etherAddress;
}
Participant[] public participants;
uint public payoutIdx = 0;
// events make it easier to interface with the contract
event NewParticipant(uint indexed idx);
// fallback function - simple transactions trigger this
function() {
enter();
}
function enter() {
if (msg.value < 1 ether) {
msg.sender.send(msg.value);
return;
}
if (msg.value > 1 ether) {
msg.sender.send(msg.value - 1 ether);
}
uint idx = participants.length;
participants.length += 1;
participants[idx].etherAddress = msg.sender;
NewParticipant(idx);
// for every three new participants we can
// pay out to an earlier participant
if (idx != 0 && idx % 3 == 0) {
// payout is triple, minus 10 % fee
uint amount = 3 ether;
participants[payoutIdx].etherAddress.send(amount);
payoutIdx += 1;
}
}
function getNumberOfParticipants() constant returns (uint n) {
return participants.length;
}
}
कोड को सरल बनाया गया<https://ethereumpyramid.com/contract.html
कोड सरल है, यह अनुबंध एक घोषणा करता हैparticipantsएक सरणी का उपयोग सभी प्रतिभागियों के बटुए के पते को क्रमबद्ध रूप से संग्रहीत करने के लिए किया जाता है, या एक को घोषित किया जाता हैpayoutIdx3 Ether की वापसी को रिकॉर्ड करने के लिए उपयोग किया जाता है कि कितने प्रतिभागियों को 3 Ether वापस मिल गया है।enterइस अनुबंध की मुख्य कार्यक्षमता को लागू करने के लिए, पहले कुछ पैरामीटर की जांच करें, सुनिश्चित करें कि प्रत्येक प्रतिभागी ने 1 ईथर का भुगतान किया है, और फिर नए प्रतिभागियों को डाल दें।participantsऔर अंत में, यदि वर्तमान प्रतिभागी का सीरियल नंबर 3 का गुणक है, तो वह 3 Ether को दूसरे प्रतिभागी को भेजता है।payoutIdxएक प्रतिभागी, और यह होगा।payoutIdxअगले प्रतिभागी को इंगित करें
संदर्भ लिंक
HashTree:
- बिटकॉइन के मूल सिद्धांतों के बारे में जानकारी
- 100% रिजर्व का प्रमाण http://blog.bifubao.com/2014/03/16/proof-of-reserves
- Git ऑब्जेक्ट मॉडल
Bitcoin:
- (Alt Coin) NameCoin https://namecoin.info/
- Bitcoin Script https://en.bitcoin.it/wiki/Script
- Simplified payment verification https://en.bitcoin.it/wiki/Scalability#Simplifiedpaymentverification
Halting Problem:
- गणना की सीमाएं (ii): आत्म-संदर्भ और अनिश्चितता
Ethereum:
- Ethereum https://www.ethereum.org/
- White Paper https://github.com/ethereum/wiki/wiki/White-Paper
- Toward a 12-second Block Time https://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time
Ethereum Network:
Next of Ethereum:
- दोस्ताना भूत कास्पर http://ethfans.org/posts/introducing-casper-friendly-ghost
- Serenity को समझना - भाग दोः कैस्पर
- (Scalability Paper) Notes on Scalable Blockchain Protocols https://github.com/vbuterin/scalability_paper
- Merkling in Ethereum https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/
Contract:
- ÐAPPS http://dapps.ethercasts.com/
- Solidity https://solidity.readthedocs.org
- Ethereum and Oracles https://blog.ethereum.org/2014/07/22/ethereum-and-oracles
- Ethereum Pyramid Contract https://ethereumpyramid.com/
- RANDAO: A DAO working as RNG of Ethereum https://github.com/randao/randao
Contract IDE:
- Mix https://github.com/ethereum/mix
- Web IDE https://chriseth.github.io/browser-solidity
- Virtual IDE http://etherscripter.com/



