ब्लॉकचेन और एथेरियम का परिचय

लेखक:शून्य, बनाया गयाः 2016-05-05 17:31:57, अद्यतन किया गयाः 2016-05-05 17:32:31

मूलःhttps://jysperm.me/2016/05/blockchain-slides/

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

ब्लॉकचैन को एक प्रकार का हैशट्री माना जा सकता है, और इसलिए यह हैशट्री के कुछ समान गुणों के साथ आता हैः

blockchain-hash-tree

तस्वीरेंhttp://happypeter.github.io/bitcoin_basics/book/017_merkle_tree.html

एक पेड़ की संरचना में, प्रत्येक टर्मिनल नोड के पास एक क्रमांक होता है, जबकि गैर-टर्मिनल नोड के क्रमांक उसके सभी प्रत्यक्ष उप-नोडों के क्रमांक से आते हैं, इसलिए प्रत्येक नोड में सीधे या अप्रत्यक्ष रूप से उसके सभी उप-नोडों की जानकारी होती है। इसलिए, जब भी किसी भी टर्मिनल नोड का क्रमांक बदलता है, तो उसके सभी मूल नोडों के क्रमांक बदलते हैं।

मैं हैशट्री के बारे में एक एप्लिकेशन बता सकता हूंः "100% रिजर्व प्रूफ", यह "ज़ीरो-ज्ञान प्रूफ" की तरह एक समस्या है। हम एक ऐसी स्थिति पर विचार कर सकते हैं जहां बिटकॉइन के धारक को लेनदेन करने के लिए एक्सचेंज को बिटकॉइन भेजने की आवश्यकता होती है, और सिद्धांत रूप में एक्सचेंज इस पैसे को (सभी उपयोगकर्ताओं के जमा किए गए खाते का शेष) स्थानांतरित कर सकता है, जो उपयोगकर्ता नहीं देखना चाहते हैं, और एक्सचेंज खुद को साफ़ करना चाहता हैः एक्सचेंज पहले एक बिटकॉइन पता प्रकाशित करता है जो उसके पास है, और सभी को पुष्टि करता है कि लेनदेन में वास्तव में इतने बिटकॉइन हैं।

blockchain-proof-of-reserves

तस्वीरेंhttp://blog.bifubao.com/2014/03/16/proof-of-reserves

हम एक HashTree का निर्माण कर सकते हैं, जिसमें सभी अंत नोड्स एक उपयोगकर्ता का प्रतिनिधित्व करते हैं, जिसमें उपयोगकर्ता संतुलन होता है।Σ) और उपयोगकर्ता आईडी (जैसे ई-मेल पते) के टुकड़े)h), जबकि पिता नोड में उसके बच्चे नोड के शेष राशि शामिल हैं।sum) और सभी उप-नोड सूचनाओं का एक खंड)))hash) ; प्रत्येक उपयोगकर्ता के लिए, बस उसे अपने स्वयं के अंत नोड और भाई नोड, अपने सभी पिता नोड और पिता नोड के भाई नोड दिखाएं, क्योंकि यह उपयोगकर्ता अपने शेष को पिता नोड में शामिल होने की पुष्टि करने के लिए चरणबद्ध तरीके से पिता नोड को पीछे खींच सकता है, और अंत में मूल नोड में शामिल हो सकता है।

इस प्रकार, प्रत्येक उपयोगकर्ता को केवल अपनी जानकारी और कुछ संकलित जानकारी दिखाई जाती है, और प्रत्येक उपयोगकर्ता यह पुष्टि कर सकता है कि उसका शेष राशि रूट नोड में शामिल है, जब तक कि अन्य उपयोग संतुलन को ज्ञात न हो। ऊपर दिए गए चित्र में एक छोटी सी त्रुटि है।hके लिएe4df9d12उपयोगकर्ता का प्रतिनिधित्व करने वाला कोई भी नोड उपयोगकर्ता का प्रतिनिधित्व करने वाला कोई भी नोड नहीं होना चाहिए, बल्कि एक संकलित सूचना नोड होना चाहिए (यह नोड एक उपयोगकर्ता को 3333 शेष और एक काल्पनिक उपयोगकर्ता को 0 शेष के साथ शामिल कर सकता है) ताकि किसी उपयोगकर्ता की निजी जानकारी को लीक न किया जा सके।

अब हम Git पर एक नज़र डालते हैं, जो वास्तव में एक बहुत ही विशिष्ट ब्लॉकचेन अनुप्रयोग है:

blockchain-git-objects-example

तस्वीरेंhttp://gitbook.liuhui998.com/1_2.html(जीपीएल v2)

गिट में, चाहे कोई भी फ़ाइल (ब्लॉब), सूचकांक (ट्री) या प्रतिबद्धता (कमिट) हो, एक हैश है जो इसकी सामग्री से निर्धारित होता है, यदि दो वस्तुओं में समान सामग्री है, तो एक ही हैश है। गिट में, पूरे भंडार का इतिहास एक ब्लॉकचैन है, प्रत्येक प्रतिबद्धता एक ब्लॉक के बराबर है, प्रतिबद्धता में पिछले प्रतिबद्धता का हैश शामिल है और संबंधित ऑब्जेक्ट का हैश, प्रतिबद्धता का स्वयं का हैश इसकी सामग्री और इन मूल सूचनाओं से निर्धारित होता है।

Git Blockchain का उपयोग करके एक अद्वितीय इतिहास को एक भंडार के रूप में निर्धारित करने के लिए करता है। ओह, यदि एक Commit को संशोधित किया जाता है, तो उसके बाद के सभी Commits के Hash बदल जाते हैं। बेशक, क्योंकि Git केवल एक संस्करण नियंत्रण उपकरण है, यह आपको इतिहास को संशोधित करने से नहीं रोकता है))) आप फिर से rebase कर सकते हैं।push --forceइस लेख के लेखक के रूप में, मैं इस लेख के सभी लेखकों के साथ सहमत हूं।

ब्लॉकचेन का एक और क्लासिक अनुप्रयोग बिटकॉइन है, और यह बिटकॉइन है जिसने ब्लॉकचेन शब्द को फैलाया है (और यह अवधारणा हमेशा से मौजूद है):

blockchain-bitcoin-block-data

तस्वीरेंhttps://commons.wikimedia.org/wiki/File:Bitcoin_Block_Data.png(CC-BY-SA-3.0)

बिटकॉइन में, प्रत्येक ब्लॉक में एक Transaction (लेनदेन) और पिछले ब्लॉक का Hash होता है, जबकि संपूर्ण ब्लॉकचैन एक एकल विकेन्द्रीकृत खाता-बही का गठन करता है। चूंकि एक नया ब्लॉक हर दस मिनट में उत्पन्न होता है, और ब्लॉक एक बार उत्पन्न होने पर हमेशा के लिए ब्लॉकचैन पर रहता है, इसलिए ब्लॉकचैन लेनदेन के होने के क्रम को तय करता है, लेनदेन के होने के पूर्ववर्ती क्रम को बनाए रखता है, और यह निर्धारित करता है कि क्या किसी खाते में लेनदेन शुरू करने के लिए पर्याप्त शेष राशि है या नहीं।

बिटकॉइन

इस शेयर का पहला भाग Bitcoin के बारे में एक सरल समीक्षा है।

बिटकॉइन में ब्लॉक का निर्माण "कार्य का प्रमाण" के माध्यम से किया जाता है, जिसका अर्थ है कि "खनन" में भाग लेने वाले सभी "खनारियों" को एक ब्लॉक जारी करने का अधिकार प्राप्त करने के लिए एक कम्प्यूटेशनल शक्ति से संबंधित, यादृच्छिक प्रकृति के बैच गणना की जाती है, जब तक कि एक यादृच्छिक संख्या निर्धारित शर्तों को पूरा नहीं करती है।

सेटअप के अनुसार, प्रत्येक खनिक हमेशा "सबसे लंबी श्रृंखला" पर भरोसा करता है, और ज्ञात, नियमों को पूरा करने वाली सबसे लंबी श्रृंखला के आधार पर अगले ब्लॉक की गणना करता है, अन्यथा आपकी गणना शक्ति बेकार हो जाएगी।

बिटकॉइन को हर 10 मिनट में एक नया ब्लॉक उत्पन्न करने के लिए डिज़ाइन किया गया है, जो कि पिछले कुछ ब्लॉक के अंतराल को देखकर अगले ब्लॉक के निर्माण की कठिनाई को समायोजित करने के लिए एक साथ किया जाता है। जब पिछले कुछ ब्लॉकों की पीढ़ी की गति अपेक्षित से अधिक होती है, तो यह माना जाता है कि अगले ब्लॉक के निर्माण में अधिक कठिनाई होनी चाहिए।

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

blockchain-bitcoin-state-machine

तस्वीरेंhttps://github.com/ethereum/wiki/wiki/White-Paper

  • ब्लॉकचैन लॉग, खाता बही, लॉग, स्थिति परिवर्तन लॉग
  • Transaction ट्रांजेक्शन ट्रांजेक्शन ट्रांजेक्शन एक बार स्थिति परिवर्तन
  • ब्लॉकचेन वर्तमान स्थिति के लिए एक "समझौता" है

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

अल्ट सिक्का

बिटकॉइन के आधार पर कई अन्य क्रिप्टोक्यूरेंसी भी उत्पन्न हुई हैं, जिन्हें आमतौर पर "अल्ट कॉइन" कहा जाता है, और आमतौर पर इन मुद्राओं के दो कार्यान्वयन होते हैंः

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

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

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

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

एथेरियम

blockchain-ethereum

तस्वीरेंhttps://www.ethereum.org/assets(CC 3.0)

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

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

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

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

"कॉन्ट्रैक्ट" Ethereum द्वारा पेश की गई सबसे महत्वपूर्ण अवधारणा है। Bitcoin में, सभी पते एक उपयोगकर्ता के हैं। जब हम "उपयोगकर्ता" कहते हैं, तो हम वास्तव में एक जोड़ी सार्वजनिक कुंजी और निजी कुंजी के बारे में बात कर रहे हैं। लेकिन Ethereum में, एक कुंजी के अलावा एक पता है जो "कोड" द्वारा स्वामित्व में है, यानी अनुबंध। अनुबंध उपयोगकर्ता द्वारा जारी किया जाता है, जो कि कोड का एक टुकड़ा है, जिसे जारी करने के बाद संशोधित नहीं किया जा सकता है।

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

Ethereum के आधिकारिक क्लाइंट में एक बहु-पर्सन वॉलेट बनाने की सुविधा है।

blockchain-ethereum-multi-sig-wallet

उदाहरण के लिए, इस सुविधा के माध्यम से एक वॉलेट पता बनाया जा सकता है जो दो अन्य लोगों के साथ साझा किया जाता है, प्रत्येक व्यक्ति प्रति दिन अधिकतम 100 ईथर का उपयोग करता है, यदि इस सीमा को पार किया जाता है, तो दूसरे व्यक्ति की सहमति के साथ।

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

एक और उदाहरण है "हेजिंग कॉन्ट्रैक्ट", जहां यह हमेशा कहा जाता है कि बिटकॉइन एक डिजिटल मुद्रा है जिसका मूल्य (और कानूनी मुद्राओं के लिए विनिमय दर) अस्थिर है, अक्सर एक दिन के बीच मुद्रा के मूल्य में वृद्धि या गिरावट की स्थिति होती है, लेकिन एक हद तक इस समस्या को हल किया जा सकता है यदि कॉन्ट्रैक्ट के साथ एक हेजिंग कॉन्ट्रैक्ट को लागू किया जाए।

हम उस व्यक्ति को "जोखिम से बचने वाला" कहेंगे जो मुद्रा के मूल्य को स्थिर रखना चाहता है, और दूसरे व्यक्ति को "जोखिम लेने वाला" कहेंगे जो मुद्रा के मूल्य में उतार-चढ़ाव का जोखिम उठाने के लिए तैयार है और इससे लाभान्वित होता है, ताकि वे एक राशि (जैसे 1000 CNY) और एक समय खिड़की (जैसे एक महीने) पर समझौता कर सकें और एक अनुबंध बना सकें जो निम्न तर्क को लागू करता हैः

  • जोखिम-बचत करने वाले व्यक्ति 1000 CNY के Ether को Contract के वॉलेट के पते पर भेजते हैं, और जोखिम-बचत करने वाले व्यक्ति 1000 CNY (या अधिक) के Ether को Contract में भेजते हैं।
  • एक महीने के बाद, जोखिम लेने वाला कॉन्ट्रैक्ट से 1000 CNY के एथर को वापस ले सकता है, और शेष एथर को जोखिम लेने वाले द्वारा वापस लिया जाता है, चाहे एथर और CNY के बीच कोई भी विनिमय दर क्यों न हो।

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

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

हम एक और कॉन्ट्रैक्ट डिज़ाइन कर सकते हैं जो इस तरह के लॉजिक को निर्दिष्ट करता है, जो वास्तविक दुनिया से ईथर और वैध मुद्रा के बीच विनिमय दरों को प्राप्त करता है, प्रत्येक समय खिड़की में (जैसे एक घंटे में):

  • कोई भी व्यक्ति कॉन्ट्रैक्ट में जमा राशि जमा कर सकता है और एक विनिमय दर प्रदान कर सकता है।
  • समय की खिड़की के अंत में, अनुबंध सभी द्वारा प्रदान किए गए विनिमय दरों का औसत गणना करता है (बचत राशि के अनुसार भारित) और प्रकाशित करता है।
  • और जमा की गई राशि को उन लोगों को वितरित किया जाएगा जो औसत के 25% के करीब हैं (बचत के भार के अनुसार) ।

किसी भी प्रतिभागी के लिए, एक वास्तविक विनिमय प्रस्तुत करने का एक बड़ा मौका है, क्योंकि वह अन्य लोगों के प्रस्तावों को नहीं जानता है, जबकि एक असामान्य विनिमय प्रस्तुत करने का एक बड़ा मौका है कि वह गारंटी खो देगा।

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

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

जैसा कि हम पहले उल्लेख कर चुके हैं कि Contract Blockchain पर डेटा पढ़ सकता है, लेकिन Blockchain पर डेटा निश्चित है, अगर हम एक जुआ खेलने के समान अनुप्रयोग को लागू करना चाहते हैं, तो हमें एक यादृच्छिक संख्या कहां से मिलेगी?

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

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

इसलिए यह आवश्यक है कि हम बीज एकत्र करने की खिड़की को दो भागों में विभाजित करें ताकि एक यादृच्छिक संख्या प्राप्त हो, जिसे कोई भी भविष्यवाणी और हस्तक्षेप नहीं कर सकता हैः

  • चरण 1: सभी लोग कॉन्ट्रैक्ट में जमा कर सकते हैं और 'एक बेतरतीब ढंग से चुने गए बीज का बैच मूल्य' प्रदान कर सकते हैं।
  • चरण II: चरण I में भाग लेने वाले व्यक्ति अनुबंध को अनस्केलेटेड बीज प्रदान करते हैं।
  • चरण 2 समाप्तः अनुबंध सभी वैध बीज को बैच करता है, एक यादृच्छिक संख्या उत्पन्न करता है और प्रकाशित करता है; चरण 2 में वापसी सही बीज प्रदान करने वाले व्यक्ति की गारंटी देता है।

पहले चरण में, आप केवल दूसरे लोगों द्वारा प्रस्तुत किए गए बीज के बैच मानों को जानते हैं, लेकिन वास्तविक बीज को नहीं जानते हैं, इसलिए परिणामों में हस्तक्षेप करने के लिए एक बीज को अच्छी तरह से बनाने में असमर्थ हैं; जबकि दूसरे चरण में, सभी लोग केवल पहले चरण में प्रस्तुत किए गए बीज की पुष्टि करते हैं, न ही नए को प्रस्तुत कर सकते हैं, और न ही दूसरे लोगों को बीज प्रस्तुत करने से रोक सकते हैं।

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

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

और फिर हम "समझौता अंतराल" के बारे में बात करते हैं, जो पहले उल्लेख किया गया है Bitcoin हर 10 मिनट में एक नया ब्लॉक होता है, यानी पूरे नेटवर्क में हर 10 मिनट में एक "समझौता" होता है, इसलिए आमतौर पर बिटकॉइन लेनदेन की पुष्टि करने के लिए दस से अधिक मिनट लगते हैं।

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

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

blockchain-ethereum-without-uncles

इस प्रसारण का समय दस सेकंड से अधिक हो सकता है, जो 10 मिनट के लिए बहुत महत्वपूर्ण नहीं है, लेकिन यदि आप आम सहमति के अंतराल को कम करते हैं, तो केंद्रीकृत खनन पूल के फायदे तेजी से स्पष्ट हो जाएंगे। लेकिन एथेरियम ने "अंकल ब्लॉक" अवधारणा को पेश करके इस समस्या को हल किया है, आम सहमति के अंतराल को 15 सेकंड तक कम कर दिया है, जो कि भुगतान की पुष्टि की गति में बिटकॉइन की तुलना में एक बड़ा बढ़ावा है।

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

blockchain-ethereum-uncles

तस्वीरेंhttps://blog.ethereum.org/2014/07/11/toward-a-12-second-block-time

अनसुलझे मुद्दे

इस भाग में, मैं आपको कुछ समस्याओं के बारे में बताऊंगा जो Ethereum ने अभी तक हल नहीं किए हैं।

सबसे पहले, एथेरियम वर्तमान में एक आम सहमति है कि बिटकॉइन की तरह ही POW (कार्यभार प्रमाण) द्वारा गारंटी दी जाती है, केवल एक विशिष्ट कार्यभार पूरा करने वाले नोड्स ही ब्लॉक के निर्माण में भाग ले सकते हैं। कार्यभार प्रमाण की समस्या यह है कि नेटवर्क की सुरक्षा सुनिश्चित करने के लिए बहुत अधिक कंप्यूटिंग शक्ति बर्बाद होती है, हालांकि यह हमारे द्वारा पहले बताए गए "आर्थिक प्रोत्साहन" विचार पर भी आधारित है, लेकिन वास्तव में सुधार किया जा सकता है। Ehtereum का मानना है कि बेहतर तरीका है कि POS (स्वामित्व प्रमाण) के साथ कार्यभार प्रमाण के बजाय, जिससे नेटवर्क की दक्षता में बहुत सुधार हो सकता है।

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

यह पैटर्न वास्तव में POW के समान है, POW में, खनिक अपने स्वयं के कंप्यूटर का उपयोग करके "शर्त" करते हैं, और यदि एक बार एक श्रृंखला लंबी हो जाती है, तो इस श्रृंखला पर स्विच करना आवश्यक है और खनन जारी रखें। क्योंकि अधिक लोग भाग लेते हैं, अधिक संभावना है कि सही श्रृंखला बन जाएगी, और अंत में एक आम सहमति बन जाती है। जबकि POS में, हर कोई अपनी गारंटी राशि का उपयोग करता है, और हर कोई उसी तरह से एक आम सहमति बन जाता है।

POS निश्चित रूप से पूरे नेटवर्क के माध्यम से थ्रूपुट को बढ़ाएगा। अब सभी को बड़ी संख्या में अर्थहीन गणनाओं के माध्यम से आम सहमति बनाने की आवश्यकता नहीं होगी, प्रत्येक नोड पर लेनदेन की मात्रा अनुबंध में कोड निष्पादित करने और डेटा सत्यापन करने के लिए गणना के करीब आ जाएगी।

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

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

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

अनुबंध

इस भाग में मैं आपको दिखाऊंगा कुछ वास्तविक, काम करने वाले अनुबंध कोड. अनुबंध कई अलग-अलग पैटर्न भाषाओं द्वारा लिखे जा सकते हैं, जो अंततः EVM पर चलाने वाले opcode में संकलित किए जाते हैं, और आज हम Solidity जैसे जावास्क्रिप्ट भाषा का उदाहरण चुनते हैं, जो वर्तमान में सबसे अच्छी तरह से बनाए रखी गई EVM भाषाओं में से एक है।

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यह एक अंतर्निहित वैश्विक चर है, जिससे इस लेनदेन से संबंधित जानकारी पढ़ी जा सकती है, जैसे कि प्रवर्तक, राशि आदि। Contract को दो तरीकों से दूसरे Contract के कोड पर कॉल किया जा सकता है।delegatecallयह किसी अन्य अनुबंध के कोड को वर्तमान संदर्भ में निष्पादित करने के लिए एक समान है, जैसे कि एक लाइब्रेरी फ़ंक्शन को पेश करना;callयह एक नया अनुबंध शुरू करने का तर्क है जो एक और अनुबंध को ट्रिगर करता है।

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

अब मैं एक वास्तविक रूप से उपलब्ध कॉन्ट्रैक्ट कैन को Ethereum नेटवर्क के आधार पर अपना स्वयं का टोकन जारी करने के लिए दिखाता हूंः

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(एमआईटी)

यह कॉन्ट्रैक्ट, जिसे Coin कहा जाता है, दो स्टेट वैरिएबल घोषित करता है।minterइस टोकन को स्टोर करने के लिए उपयोग किए जाने वाले रचनाकारों ने एक निर्माण फ़ंक्शन (((function Coin()) ने इस चर को उस लेनदेन के प्रवर्तक का मान दिया जो पहले अनुबंध बनाने के लिए उपयोग किया गया था; और एक पर्स पते को संख्याओं के लिए मानचित्रण की घोषणा कीbalances, जिसका उपयोग टोकन के प्रत्येक धारक के पते के शेष को इंगित करने के लिए किया जाता है ।

mintइस फ़ंक्शन में पहले यह निर्धारित किया जाता है कि क्या लेनदेन का आरंभकर्ता टोकन का निर्माता है, और यदि ऐसा है, तो फ़ंक्शन पैरामीटर के अनुसार, एक निश्चित संख्या में टोकन को निर्दिष्ट पते पर जोड़ा जाता है।sendइस फ़ंक्शन को सभी द्वारा बुलाया जा सकता है, और यह लेन-देन के आरंभकर्ता के पते से एक निश्चित राशि घटाता है (यदि पर्याप्त शेष राशि है) और लक्ष्य पते पर जोड़ता है, जो एक स्थानांतरण के बराबर है।

हमने एक घोषणा भी की है जिसका नाम हैSentघटनाओं, घटनाओं में वास्तव में कोई व्यावहारिक भूमिका नहीं है, केवल डीबगिंग के समय महत्वपूर्ण घटनाओं को प्रिंट करने में सुविधाजनक है, जो भविष्य में हल्के क्लाइंट के कार्यान्वयन में भी सुविधाजनक होगा ((हल्के क्लाइंट केवल घटनाओं को स्वीकार करते हैं और वास्तव में अनुबंध निष्पादित नहीं करते हैं) ।) ।

blockchain-ethereum-mix

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

एक बार जब यह पूरा हो जाता है, तो हम Ethereum वॉलेट के साथ इस अनुबंध को वेब पर प्रकाशित कर सकते हैंः

blockchain-ethereum-create-contract

इसके प्रकाशन के बाद, आप इस अनुबंध पर नज़र रख सकते हैं और अनुबंध के विवरण इंटरफ़ेस पर जाएंः

blockchain-ethereum-wallet-contract

बाईं ओर, आप दो स्थिति चर के मान देख सकते हैं।minterमैं अपने घर का पता बताता हूं, और मैं अपने घर का पता बताता हूं।balancesक्योंकि यह एक मैपिंग तालिका है, तो आप एक पता दर्ज कर सकते हैं और इसके शेष राशि की जांच कर सकते हैं. दाईं ओर आप इस अनुबंध के लिए एक नया सौदा शुरू कर सकते हैं, एक ड्रॉप-डाउन मेनू है जिसे आप चुन सकते हैंsendयाmintफ़ंक्शन, आप Contract को पास करने के लिए पैरामीटर भर सकते हैं. क्योंकि यहां हम लेनदेन भेजने का उद्देश्य एक संदेश भेजने के लिए है, और ईथर नहीं, इसलिए हमें लेनदेन की राशि सेट करने की आवश्यकता नहीं है.

अब मैं आपको एक बहुत ही रोचक Contract के बारे में बताऊंगा, जो एक "पोंटेश घोटाले" का परिणाम देता है, जिसमें आप इस Contract के लिए 1 Ether का भुगतान करके इस गेम में शामिल हो सकते हैं, और फिर हर तीन लोगों के लिए, जो पहले शामिल होते हैं, उन्हें क्रमशः 3 Ether का भुगतान किया जाता हैः

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एक सरणी का उपयोग सभी प्रतिभागियों के वॉलेट पते को क्रम में संग्रहीत करने के लिए किया जाता है, या एक घोषित किया जाता हैpayoutIdxयह रिकॉर्ड करने के लिए उपयोग किया जाता है कि पहले कितने प्रतिभागियों को 3 ईथर वापस मिल चुके हैं।enterइस अनुबंध को लागू करने का मुख्य कार्य पहले कुछ पैरामीटर की जांच करना है, यह सुनिश्चित करना है कि प्रत्येक प्रतिभागी को 1 ईथर का भुगतान किया गया है, और फिर नए प्रतिभागियों को जमा करना है।participantsअंत में, यदि वर्तमान प्रतिभागी का पूर्णांक 3 का गुणक है, तो 3 ईथर को 3 में भेजें।payoutIdxएक प्रतिभागी है, और वह होगाpayoutIdxयह अगले प्रतिभागी की ओर इशारा करता है।

संदर्भ लिंक

हैशट्रीः

बिटकॉइनः

रोक समस्याः

एथेरियमः

एथेरियम नेटवर्कः

एथेरियम के बादः

अनुबंध:

अनुबंध IDE:


अधिक

छोटे सपनेमैं पूरी तरह से समझ गया हूं, मैं केवल समझ सकता हूं, बहुत कम समझता हूं।

सियानशुआनयह पता चला कि मालिक BTC और ETH पर काम करने के लिए गया था।

मोमोक्ससमझ नहीं आ रहा है