सॉलिडिटी कैसे सीखें: अल्टीमेट एथेरियम कोडिंग ट्यूटोरियल

यह गाइड सॉलिडिटी सीखने में आपको कदम-दर-कदम चलेगा। गहराई में एकांतता की खोज के लिए कृपया हमारे ब्लॉकचैन पाठ्यक्रमों की जाँच करें.

Ethereum Foundation परियोजना के शुरुआती दिनों से लेकर 2013 के अंत और 2014 की शुरुआत तक ब्लॉकचेन की दुनिया को हिला रहा है। Ethereum ने वास्तव में “बिटकॉइन 2.0” को किकस्टार्ट किया है और जिसे हम “ब्लॉकचैन” आंदोलन के रूप में समझते हैं, पहले बड़े के बाद बिटकॉइन “बबल” पिछले 1000 यूएसडी बाजारों पर सभी का ध्यान गया। Ethereum बिटकॉइन के समान एक क्रिप्टोक्यूरेंसी, ईथर के साथ एक ब्लॉकचेन परियोजना है, लेकिन Ethereum में नोड कार्यान्वयन में अंतर्निहित एक (लगभग) ट्यूरिंग-पूर्ण वर्चुअल मशीन भाषा और प्रसंस्करण क्षमता की अतिरिक्त विशेषता है।.

Ethereum Virtual Machine (EVM) Ethereum नोड्स को भुगतान के बदले डेटा को वास्तव में स्टोर करने और संसाधित करने की अनुमति देता है, वास्तविक दुनिया की घटनाओं का जवाब देता है और ऑन-चेन अनुप्रयोगों का समर्थन करने के लिए बहुत सारे नए अवसरों की अनुमति देता है जो डेवलपर्स और वास्तविक के लिए पहले कभी उपलब्ध नहीं थे- दुनिया उपयोगकर्ताओं। मुझे वास्तव में 2014 की शुरुआत में स्विट्जरलैंड में होने का सौभाग्य मिला, और एथेरम “होलोन” की यात्रा करने के लिए और एथेरम संस्थापकों में से कुछ के साथ ईथर की बिक्री से पहले बाहर घूमने के लिए, वापस जब वे “स्व-वित्त पोषित” थे.

मैंने मिहाई एलिसी से पूछा कि एक नैतिक स्मार्ट अनुबंध क्या है, और उन्होंने समझाया:

“स्मार्ट-कॉन्ट्रैक्ट दुनिया भर के लोगों के लिए एक-दूसरे के साथ व्यापार करने का एक तरीका है, भले ही वे एक ही भाषा न बोलते हों या एक ही मुद्रा का उपयोग न करते हों।”

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

सॉलिडिटी लैंग्वेज स्वयं एक उपकरण है जिसका उपयोग हम मशीन-स्तरीय कोड उत्पन्न करने के लिए करते हैं जो EVM पर निष्पादित हो सकता है, यह एक भाषा है संकलक जो हमारे उच्च-स्तरीय मानव-पठनीय कोड को ले जाता है और इसे सरल निर्देशों में तोड़ देता है जैसे “डेटा को एक रजिस्टर में डालें”, “दो रजिस्टर से डेटा जोड़ें”, “मेमोरी पॉइंट xxxxx पर निर्देश पर वापस जाएं”, जो आधार बनता है किसी भी माइक्रोप्रोसेसर निष्पादन कार्यक्रम.

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

सॉलिडिटी कैसे सीखें

जहां तक ​​प्रोग्रामिंग लैंग्वेजेज जाती हैं, सॉलिडिटी अपने आप में काफी सरल भाषा है.

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

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

यही कारण है कि एथेरियम स्मार्ट-कॉन्ट्रैक्ट्स (और किसी भी ब्लॉकचेन सिस्टम में सामान्य रूप से स्मार्ट-कॉन्ट्रैक्ट्स) को नियतात्मक होना चाहिए: ताकि नोड्स का नेटवर्क हमेशा चालू रहने के लिए नए ब्लॉक के बारे में सर्वसम्मति को मान्य और बनाए रख सके।.

ईवीएम स्मार्ट-कॉन्ट्रैक्ट्स में आपको मिली एक और सीमा “मेमोरी”, और “स्टोरेज” के बाहर डेटा एक्सेस करने में अक्षमता है, (हम नहीं चाहते कि स्मार्ट-कॉन्ट्रैक्ट को पढ़ने या हार्ड-ड्राइव को हटाने में सक्षम हो। नोड्स पर यह चलता है), और JQuery के साथ बाहर के संसाधनों की क्वेरी करने में असमर्थता। हमारे पास वास्तव में कई पुस्तकालय कार्यों तक पहुंच नहीं है जैसे कि JSON संरचनाओं को पार्स करने या फ्लोटिंग-पॉइंट अंकगणित करने के लिए, और यह वास्तव में उन उप-रूटीनों को करने या एथेरम ब्लॉकचेन में बहुत अधिक डेटा स्टोर करने के लिए लागत-निषेधात्मक है।.

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

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

स्मार्ट-कॉन्ट्रैक्ट्स का अपना पता होता है, जिसमें से वे ईथर प्राप्त कर सकते हैं। स्मार्ट कॉन्ट्रैक्ट फ़ंक्शन के “कॉलर” को एक सत्यापन योग्य तरीके से ट्रैक कर सकता है, इसलिए यह निर्धारित कर सकता है कि क्या उसके कार्यों में से एक विशेषाधिकार प्राप्त “मालिक” या “व्यवस्थापक” खाते द्वारा बुलाया जा रहा है, और प्रशासनिक कार्यों के अनुसार कार्य करता है। उनके पास एथेरियम ब्लॉकचेन से डेटा पढ़ने की क्षमता है, और पुराने ब्लॉकों में लेनदेन की जानकारी तक पहुंच है। लेकिन स्मार्ट-कॉन्ट्रैक्ट्स “अपनी छोटी नियतवादी दुनिया में” बंद हैं, केवल एथेरियम ब्लॉकचेन में संग्रहीत डेटा के बारे में पता करने में सक्षम हैं?

हर्गिज नहीं! वह है वहां “Oracles” अंदर आओ। हम एक दैवज्ञ को एक कॉल कर सकते हैं जो हमें एक भरोसेमंद तरीके से बाहरी दुनिया के बारे में कुछ बताएगा, और उस डेटा पर कार्य करें स्मार्ट अनुबंध के भीतर। यहाँ मुख्य बात यह है कि भले ही वास्तविक दुनिया की घटनाएँ निर्धारक न हों, फिर भी ओरेकल को हर नोड के अनुरोध पर जवाब देने के लिए भरोसा किया जा सकता है कि एक निर्धारक तरीके से क्या हुआ है, ताकि सभी नोड्स अभी भी सर्वसम्मति में आ सकें। तो यह है कि विश्वसनीय ओरेकल सिद्धांत में कैसे काम करता है: एक “ओरेकल” कुछ डेटा लेगा, एक वास्तविक दुनिया स्टॉक मूल्य के बारे में एक टिकर प्राइस फीड कहेंगे और उस डेटा को एक साधारण ओरेकल स्मार्ट-कॉन्ट्रैक्ट में “स्टोरेज” में रिकॉर्ड करेंगे, कुछ इस तरह

(स्पष्टीकरण भी देखें यहां):

फंक्शन स्टोर टिकरडाटा (बाइट्स 8 सिंबल, यूंट ओपन, यूंट हाई, यूंट लो, यूंट क्लोज)

केवल

प्रतिफल (बूल सफलता)

{{

# स्टोर टिकर डेटा ऑन-चेन

टिकरदत्ता [प्रतीक] [ब्लॉक.नंबर] = [खुला, ऊंचा, नीचा, पास]

# tickerData नक्शे का एक नक्शा है, स्ट्रिंग => उंट => सरणी [uint, uint, uint, uint]

सच लौटना;

}

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

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

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

सॉलिडिटी बेसिक्स ट्यूटोरियल

मूल कोड पृष्ठभूमि और सेटअप

तो चलिए एक बुनियादी इथेरियम स्मार्ट-कॉन्ट्रैक्ट के साथ शुरू करते हैं, जिसे सॉलिडिटी भाषा में लिखा गया है। सीखने का सबसे अच्छा तरीका है! हम ऊपर दिए गए कोड के छोटे स्निपेट से देख सकते हैं कि हमारे पास एक बहुत ही सरल फंक्शन डिक्लेरेशन सिंटैक्स और कुछ बेसिक है डेटा के प्रकार ‘uint’ (अहस्ताक्षरित पूर्णांक) और ‘स्ट्रिंग’ की तरह, और हम डॉक्स में देखते हैं कि हमारे पास ‘पता’ जैसे परिवर्तनशील प्रकार भी हैं, जिसमें ‘.balance’ और ‘.transfer’ विधियां शामिल हैं, जो एक Ethereum पर शेष राशि का अनुमान लगाते हैं। पता, और स्मार्ट-कॉन्ट्रैक्ट को वास्तव में ईथर को उस पते पर भेजने की अनुमति देता है, जिसमें इकाइयां अंकित होती हैं वी.

हमारे पास आपके मूल सरणियाँ, एनम, ऑपरेटर, हैश डेटा संरचनाएं जिन्हें ‘मैपिंग’ कहा जाता है, और कुछ विशेष पूर्व-परिभाषित हैं इकाइयों और वैश्विक संस्करण जिसमें ब्लॉकहाइट, लास्ट ब्लॉक टाइमस्टैम्प और कुछ आसान SHA-hash और एड्रेस / की-मेन हेरफेर फंक्शन जैसी चीजें शामिल हैं। बहु-आयामी सरणियों के साथ काम करते समय सॉलिडिटी के बारे में एक महत्वपूर्ण विचित्रता: अनुक्रमण अधिकांश भाषाओं से “उलट” क्रम में है केवल घोषणा के दौरान, डॉक्स में नोट किया गया है:

निश्चित आकार k और तत्व प्रकार T की एक सरणी T [k] के रूप में लिखी जाती है, T [] के रूप में गतिशील आकार की एक सरणी। एक उदाहरण के रूप में, uint के 5 गतिशील सरणियों की एक सरणी है uint [] [5] (ध्यान दें कि कुछ अन्य भाषाओं की तुलना में नोटेशन उल्टा हो जाता है)। तीसरे डायनेमिक ऐरे में दूसरे यूंट को एक्सेस करने के लिए, आप x [2] [1] का उपयोग करते हैं (इंडेक्स शून्य-आधारित हैं और घोषणा के विपरीत तरीके से एक्सेस कार्य करते हैं …)

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

यहाँ हमारे अंतिम एथेरियम सॉलिडिटी स्मार्ट-कॉन्ट्रैक्ट डिसेंट्रलाइज्ड ऐप ()app) की एक छवि है जो यूजर इंटरफेस उत्पाद की तरह दिखेगी, उपयोगकर्ताओं और नोटरीकृत छवियों के साथ:

सॉलिडिटी कैसे सीखें: अल्टीमेट एथेरियम कोडिंग गाइड

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

पहली चीज जो मैं करता हूं वह है सेट अप कवक “टेस्ट-बेड” जो मुझे अपने स्मार्ट कॉन्ट्रैक्ट को आसानी से जांचने की अनुमति देगा। स्मार्ट-कॉन्ट्रैक्ट को संकलित और तैनात करने में लंबे समय से हस्ताक्षरित लेनदेन उत्पन्न करना शामिल है, लेकिन ट्रफल मुझे सरल आदेशों का उपयोग करके अपने स्मार्ट-कॉन्ट्रैक्ट को संकलित / तैनात करने और परीक्षण करने की अनुमति देगा। ऐसे उपकरणों का एक समूह है जो ऐसा कर सकते हैं, लेकिन मुझे पसंद है यह सॉलिडिटी स्मार्ट-कॉन्ट्रैक्ट वीडियो ट्यूटोरियल है जो उपयोग करता है कवक उपकरण। मेरे पास एक है डेमो github परियोजना फ़ोल्डर मैं सिर्फ इस ट्यूटोरियल के लिए बनाया है कि हर किसी को पालन करने के लिए। मैं कुछ सरल सेटअप कमांड (एक डेबियन लिनक्स पर्यावरण के तहत) के साथ शुरू करूँगा:

tectract @ blockgeeks / एथेरम-डेमो-टूल्स> npm i -g ट्रफल

# यदि आप विश्व स्तर पर नोड मॉड्यूल स्थापित करने की अनुमति त्रुटि में चलाते हैं, तो यहां देखें

tectract @ blockgeeks / एथेरम-डेमो-टूल्स> mkdir Geekt # मैं अपने सामाजिक एप्लिकेशन को कॉल करने जा रहा हूं "Geekt"

tectract @ blockgeeks / एथेरम-डेमो-टूल्स> सीडी गीकट

tectract @ blockgeeks / एथेरम-डेमो-टूल्स / Geekt> Truffle init # यह कुछ फ़ोल्डर और सेटअप फ़ाइलों को Geekt / फ़ोल्डर में बनाता है

tectract @ blockgeeks / एथेरम-डेमो-टूल्स / Geekt > रास

अनुबंध माइग्रेशन truffle.js का परीक्षण करते हैं # हमने तीन फ़ोल्डर बनाए हैं, और एक नई फ़ाइल जिसे truffle.js कहा जाता है

tectract @ blockgeeks / एथेरम-डेमो-टूल्स / Geekt > ls अनुबंध /

ConvertLib.sol MetaCoin.sol Migrations.sol # हमारे पास ट्रूफ़ल द्वारा उत्पन्न कुछ बुनियादी टेम्पलेट अनुबंध हैं

tectract @ blockgeeks / एथेरम-डेमो-टूल्स / Geekt > ls माइग्रेशन /

1_initial_migration.js 2_deploy_contracts.js # ट्रफल के साथ संकलन / माइग्रेशन सेटिंग्स के लिए एक जोड़ी फाइलें

एक सरल सॉलिडिटी स्मार्ट-कॉन्ट्रैक्ट उदाहरण

ठीक है, मैं / Geekt / अनुबंध फ़ोल्डर में Geekt.sol नामक एक अनुबंध बनाने जा रहा हूं, जिसे ‘ट्रफल इनिट’ कहते समय उत्पन्न किया गया था। आप देख सकते हैं पूर्ण अनुबंध कोड यहाँ, और मैं यहां सबसे दिलचस्प बिट्स इंगित करूंगा। फ़ाइल के शीर्ष पर हम संकलक संस्करण और कुछ मूल अनुबंध परिभाषा वाक्यविन्यास और चर परिभाषाओं को निर्दिष्ट करने वाली एक पंक्ति है.

प्रैग्म सॉलिडिटी ^ 0.4.4;

अनुबंध Geekt {

पता GeektAdmin;

मैपिंग (बाइट्स 32 =)> notarizedImage) notarizedImages; // यह उनके SHA256notaryHash द्वारा notarizedImages को देखने की अनुमति देता है

बाइट्स 32 [] छवियांबटनरी हश; // यह SHA256notaryHash द्वारा सभी चित्रों के व्हाइटपेज़ की तरह है

मानचित्रण (पता =)> उपयोगकर्ता) उपयोगकर्ता; // यह उपयोगकर्ताओं को उनके Ethereum पते द्वारा देखने की अनुमति देता है

पता [] usersByAddress; // यह एथेरम पते द्वारा सभी उपयोगकर्ताओं के व्हाइटपेज़ की तरह है

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

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

मैंने बनाया notarizedImages हमें भंडारण में “छवि” ऑब्जेक्ट बनाने की अनुमति देने के लिए मैपिंग करें और उन्हें छवि डेटा के एक संबंधित SHA256 हैश द्वारा देखें, और उन नोटरीहैश इंडेक्स 32-बाइट लंबे हैं.

हमने भी ए ImagesByNotaryHash बाइट्स 32 सरणी जो सभी नोटरीहैश की एक सूची है, जैसे कि एक सफेद-पृष्ठ जो हमें उन सभी छवियों को पुनरावृत्त करने की अनुमति देता है जिन्हें नोटरीकृत किया गया है.

संरचना नोटरीइमेज {

स्ट्रिंग छवि;

uint टाइमस्टैम्प;

}

संरचना उपयोगकर्ता {

स्ट्रिंग संभाल;

बाइट्स 32 शहर;

बाइट्स 32 स्थिति;

बाइट्स 32 देश;

बाइट्स 32 [] मायमैसेज;

}

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

समारोह registerNewUser (स्ट्रिंग संभाल, बाइट्स 32 शहर, बाइट्स 32 राज्य, बाइट्स 32 देश) रिटर्न (सफल सफलता) {

इस पते को देखेंअभिनय = msg.sender;

// मौजूदा प्रविष्टियों को अधिलेखित न करें, और सुनिश्चित करें कि संभाल शून्य नहीं है

if (बाइट्स (उपयोगकर्ता [msg.sender] .handle)) .length == 0 && बाइट्स (संभाल) .length! = 0) {

उपयोगकर्ता [thisNewAddress] .handle = संभाल;

उपयोगकर्ता [thisNewAddress] .city = शहर;

उपयोगकर्ता [thisNewAddress] .state = राज्य;

उपयोगकर्ता [thisNewAddress] .country = देश;

usersByAddress.push (thisNewAddress); // इस उपयोगकर्ता के लिए उपयोगकर्ता के लिए एक प्रविष्टि जोड़ता है ‘whitepages’

सच लौटना;

} अन्य {

विवरण झूठा है; // या तो हैंडल अशक्त था, या इस हैंडल वाला उपयोगकर्ता पहले से मौजूद था

}

}

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

उपयोगकर्ता [thisNewAddress] .handle = संभाल;

यह हमारे उपयोगकर्ता मैपिंग में एक नया उपयोगकर्ता ऑब्जेक्ट बनाता है, और हैंडल सेट करता है। शहर, राज्य, देश के साथ भी। ध्यान दें कि हम नए उपयोगकर्ता के पते को अपने उपयोगकर्ताओं में धकेल देते हैं। वैश्विक उपयोगकर्ताओं को “सफेद-पृष्ठ” ऑब्जेक्ट दें, इससे पहले कि हम वहां वापस जाएँ।.

फ़ंक्शन addImageToUser (स्ट्रिंग इमेजुर, बाइट्स 32 SHA256notaryHash) रिटर्न (बूल सफलता) {

इस पते को देखेंअभिनय = msg.sender;

अगर (बाइट्स (उपयोगकर्ता [thisNewAddress] .handle)) .length! = 0) {// सुनिश्चित करें कि इस उपयोगकर्ता ने पहले एक खाता बनाया है

अगर (बाइट्स (इमेजुरल) .length! = 0) {//) {// काम करने के लिए बाइट्स 32 चेक नहीं मिल सकता है, तो ठीक है!

// उपयोगकर्ताओं को श से लड़ने से रोकता है->व्हाइटपेज़ में छवि लिस्टिंग, लेकिन फिर भी उन्हें किसी भी शा के लिए एक व्यक्तिगत रेफरी जोड़ने की अनुमति मिलती है

अगर (बाइट्स (notarizedImages [SHA256notaryHash] .imageURL) .length == 0) {

imagesByNotaryHash.push (SHA256notaryHash); // इस छवि के लिए हमारी छवि whitepages में प्रविष्टि जोड़ता है

}

notarizedImages [SHA256notaryHash] .imageURL = imageURL;

notarizedImages [SHA256notaryHash] .timeStamp = block.timestamp; // ध्यान दें कि एक छवि को अपडेट करना टाइमस्टैम्प को भी अपडेट करता है

उपयोगकर्ता [thisNewAddress] .myImages.push (SHA256notaryHash); // इस उपयोगकर्ता के लिए छवि हैश जोड़ें

सच लौटना;

} अन्य {

विवरण झूठा है; // या तो imageURL या SHA256notaryHash शून्य था, छवि संग्रहीत नहीं कर सका

}

सच लौटना;

} अन्य {

विवरण झूठा है; // उपयोगकर्ता के पास अभी तक कोई खाता नहीं है, छवि को संग्रहीत नहीं कर सका

}

}

हमारी addImageToUser उपयोगकर्ता समारोह के लिए बहुत समान है पंजीयनकर्ता समारोह। यह आपको विशेष के माध्यम से आपके भेजने वाले पते से दिखता है संदेश ऑब्जेक्ट और जाँच करता है कि उस पते के लिए एक पंजीकृत उपयोगकर्ता (हैंडल द्वारा) है इससे पहले कि वह आपके उपयोगकर्ता प्रविष्टि के लिए एक छवि जोड़ने की कोशिश करता है। हम उपयोगकर्ताओं को अपने नोटरी हश को केवल चित्रों के वैश्विक सफेद-पृष्ठों में जोड़ने की अनुमति देते हैं, यदि यह मौजूद नहीं है, तो उपयोगकर्ताओं को वैश्विक सफेद-पृष्ठों में प्रविष्टियों से लड़ने से रोकने के लिए, लेकिन हम उन्हें उनके भीतर किसी भी नोटरी प्रविष्टि को जोड़ने / अपडेट करने की अनुमति देते हैं अपनी खुद की छवियों के मिनी- whitepages। इसको कुछ नहीं!

फ़ंक्शन गेटअगर () निरंतर रिटर्न (पता []) {वापसी उपयोगकर्ताओं }

फ़ंक्शन getUser (पता userAddress) निरंतर रिटर्न (स्ट्रिंग, बाइट्स 32, बाइट्स 32, बाइट्स 32, बाइट्स 32 []) {

वापसी (उपयोगकर्ता [userAddress] .हैंडल, उपयोगकर्ता [userAddress] .city, उपयोगकर्ता [userddddress] .state, उपयोगकर्ता [userAddress] .country, उपयोगकर्ता [userAddress] .mymages)

}

फ़ंक्शन getAllImages () निरंतर रिटर्न (बाइट्स 32 []) {रिटर्न छवियांबायोटरीहाश; }

फ़ंक्शन getUserImages (पता userAddress) निरंतर रिटर्न (बाइट्स 32 []) {वापसी उपयोगकर्ता [userddddress] .myImages; }

फ़ंक्शन getImage (बाइट्स 32 SHA256notaryHash) निरंतर रिटर्न (स्ट्रिंग, यूंट) {

वापसी (notarizedImages [SHA256notaryHash] .imageURL, notarizedImages [SHA256notaryHash] .timeStamp);

}

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

संकलन & स्मार्ट-कॉन्ट्रैक्ट का परीक्षण

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

npm i -g ethereum-testrpc

testrpc -m “सैंपल डॉग आते हैं साल स्प्रे क्रॉल सीखें सामान्य रूप से चांदी की जेली का पता लगाएं”

यह एक निर्दिष्ट “बीज” वाक्यांश के साथ TestRPC शुरू होता है, और आपको आउटपुट के रूप में कुछ इस तरह देखना चाहिए:

EthereumJS TestRPC v3.0.5

उपलब्ध खाते

==================

(0) 0x0ac21f1a6fe22241ccd3af85477e5358ac5847472

(1) 0xb0a36610de0912f2ee794d7f326acc4b3d4bc7bc

(9) 0x4c1cc45ef231158947639c1eabec5c5cb187401c

निजी कुंजी

==================

(0) 91e639bd434790e1d4dc4dca95311375007617df501e8c9c250e6a001689f2c7

(1) afaeff0fc68439c4057b09ef1807aaf4e695294db57bd631ce0ddd2e8332eea7

(९) dcc51540372fa2cf808efd322c5e158ad5b0dbf330a809c79b540f553c6243d7

एचडी वॉलेट

==================

Mnemonic: नमूना कुत्ता वर्ष स्प्रे क्रॉल सीखो सामान्य रूप से चांदी जेली पायलट का पता लगाएं

बेस एचडी पथ: m / 44 ‘/ 60’ / 0 ‘/ 0 / {account_index}

लोकलहोस्ट पर सुनना: 8545

इस विंडो में आपको यहां कुछ गतिविधि दिखाई देगी, जैसे कि आप टेस्ट्रपीसी को चला रहे हैं, जैसा कि आप ट्रफल या वेब 3.जे के माध्यम से अपने स्मार्ट-कॉन्ट्रैक्ट के साथ तैनात करते हैं और बातचीत करते हैं। ठीक है, हम परीक्षण परिनियोजन के लिए तैयार हैं। आपको फ़ाइल को संशोधित करना होगा /migrations/2_deploy_contracts.js अपने स्मार्ट-अनुबंध के नाम को शामिल करने के लिए, ट्रफल के लिए इसे संकलित करने और तैनात करने के लिए जानना। हम यह आदेश देते हैं:

ट्रफल संकलन

यदि सबकुछ ठीक हो जाता है, तो आप एक संदेश देखेंगे जो यह कह रहा है कि यह “कलाकृतियों को सहेज रहा है”, और कोई त्रुटि संदेश नहीं है। मैं झूठ नहीं बोलने जा रहा हूं, यदि आपके अनुबंध में सिंटैक्स त्रुटियां या अन्य समस्याएं हैं, तो आप जो कंपाइलर त्रुटि संदेश देखेंगे वह संभवतः रहस्यमय और व्याख्या करने में कठिन होगा! यदि आपको “स्टैक आकार” के बारे में कोई त्रुटि मिलती है, तो इसका मतलब है कि आपके पास फ़ंक्शन कॉल में / बाहर पारित होने वाले बहुत सारे चर हैं, याद रखने के लिए एक अच्छा नियम 16 ​​चर इनपुट या आउटपुट अधिकतम है। यह भी याद रखें कि सॉलिडिटी स्मार्ट-कॉन्ट्रैक्ट कस्टम संरचना डेटा प्रकारों को वापस नहीं कर सकते हैं, इसलिए आपको इसके आसपास भी काम करना होगा, आमतौर पर मैं अपने आंतरिक मैपिंग में केवल अन्य एरर के सरणियों और सूचक / पते लौटाता हूं। अगर तुम्हें मिले क्रम “स्टैक” के बारे में त्रुटि संदेश, इसका मतलब हो सकता है कि आपके पास अपने कोड में एक खराब स्थिति हो.

ट्रफल प्रवास

यह कमांड (ऊपर) वास्तव में आपके टेस्टआरपीसी नोड पर आपके स्मार्ट-कॉन्ट्रैक्ट की परीक्षण तैनाती करता है। मैं यह आउटपुट रिटर्न देखता हूं:

रनिंग माइग्रेशन: 1_initial_migration.js

माइग्रेशन की तैनाती…

माइग्रेशन: 0xd06a1935230c5bae8c7ecf75fbf4f17a04564ed8

नेटवर्क में सफल प्रवासन की बचत…

कलाकृतियों को सहेजना…

रनिंग माइग्रेशन: 2_deploy_contracts.js

गीक की तैनाती…

Geekt: 0xe70ff0fa937a25d5dd4172318fa1593baba5a027

नेटवर्क में सफल प्रवासन की बचत…

कलाकृतियों को सहेजना..

हमारे स्मार्ट-कॉन्ट्रैक्ट (जिसका नाम “Geekt” है) को Ethereum blockchain पर एक पता दिया गया है जब यह सफलतापूर्वक लागू होता है, तो आप ऊपर देख सकते हैं, पता 0xe70ff0fa937a25d5dd4172318fa1593baba5a027. एक वास्तविक, लाइव एथेरम नेटवर्क पर, आप अपने अनुबंध को तैनात करने के लिए गैस का भुगतान करते हैं और पता कभी नहीं बदलता है। TestRPC पर, यदि आप TestRPC को बंद कर देते हैं, तो यह सब कुछ भूल जाएगा, और एक बार जब आप TestRPC को फिर से शुरू कर देंगे, तो आपको अपने अनुबंध को फिर से तैनात करना होगा और आपको अपने स्मार्ट-अनुबंध के लिए एक अलग पता मिलेगा। आपके स्मार्ट-कॉन्ट्रैक्ट का पता वह है जहां लोग संदेशों के साथ लेन-देन कर सकते हैं, इसके साथ बातचीत करने के लिए, स्टेट-चेंजिंग ट्रांजेक्शन करने के लिए या सिर्फ इथेरियम ब्लॉकचेन से डेटा पढ़ सकते हैं। स्मार्ट-कॉन्ट्रैक्ट भी बातचीत कर सकते हैं सीधे एक दूसरे के साथ “संदेश” का उपयोग करके इन पतों के माध्यम से। स्मार्ट कॉन्ट्रैक्ट्स जो इन एथेरम ब्लॉकचेन “संदेशों” के माध्यम से डेटा को स्टोर करने, बदलने या पढ़ने के लिए अन्य स्मार्ट-कॉन्ट्रैक्ट्स के साथ बातचीत करते हैं, जिन्हें “संदेश” के रूप में जाना जाता है विकेंद्रीकृत स्वायत्त संगठन, या DAO.

ठीक है, अब मज़ा हिस्सा आता है। हम वास्तव में कुछ प्रारंभिक परीक्षण करने और हमारे स्मार्ट-अनुबंध के साथ बातचीत करने के लिए तैयार हैं। हम Truffle “कंसोल” को शुरू करते हैं और हमारे TestRPC लोकलहोस्ट नोड के खिलाफ कुछ प्रश्न करते हैं, यह सुनिश्चित करने के लिए कि सब कुछ काम कर रहा है और हम उपयोगकर्ताओं और छवियों को जोड़ सकते हैं और उन्हें ठीक से प्राप्त कर सकते हैं.

ट्रफल कंसोल

> Geekt = Geekt.deployed ()

> Geekt.then (फ़ंक्शन (उदाहरण) {JSON.stringify (उदाहरण .abi);};

> Geekt.then (फ़ंक्शन (उदाहरण) {वापसी आवृत्ति ।registerNewUser ()"विवर्तनिक","डेन्वर","सीओ","अमेरीका");})

> Geekt.then (फंक्शन (उदाहरण)) {return inst.addImageToUser (my www.myimageURL.com ’, x 0x6c3e007e281f6948b37c511943438080ddaaaaaaaaa8a8a8a8a8a8a0a0a8279b0927)

> Geekt.then (फ़ंक्शन (उदाहरण) {रिटर्न इंस्टेट .getUser (‘0x0ac21f1a6fe22241ccd3af85477e5358ac5847c2’ ;;); > Geekt.then (फ़ंक्शन (उदाहरण) {रिटर्न इंस्टीट्यूशन। उपयोगकर्ता ();})

> Geekt.then (फ़ंक्शन (उदाहरण) {रिटर्न इंस्टेट .getImages ();};

> Geekt.then (फंक्शन (उदाहरण)) {return inst.getImage (‘0x6c3e007e281f69483737511a11a43c8026d2a16a8a8ff4e83379b66b0ab927’);});

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

{tx: ‘0x1b9f55971871921ccd23a9aa7620620c6c958a893af334087282826264d6c6d60b1’,

रसीद:

{लेन-देन हश: x 0x1b9f55971871921ccd23a9aa7620620c6c958a893af334087282826264d6c6d60b1 ’,

लेन-देनभार: 0,

ब्लॉकहैश: ‘0x2be4fab68daaf8db199e2a6adea101c0f1ed06f46aba21e8e4c06e752ca3325c’,

ब्लॉकनंबर: 5,

गैस यूज्ड: 145215,

संचयी गेसुवेद: 145215,

संविदाअध्यापक: अशक्त,

लॉग: []},

लॉग: []}

AddImageToUser () फ़ंक्शन समान रूप से सफलता देता है, और जब मैं अब अलग-अलग उपयोगकर्ता रिकॉर्ड प्राप्त कर सकता हूं या एथेरम ब्लॉकचैन से नोटरीकृत छवि रिकॉर्ड प्राप्त कर सकता हूं। मेरा getUser () फ़ंक्शन कॉल रिटर्न:

[‘टेक्ट्रेक्ट’,

‘0x44656e766572000000000000000000000000000000000000000000000000’,

‘0x434f00000000000000000000000000000000000000000000000000000000’,

‘0x555341000000000000000000000000000000000000000000000000000000’,

[‘0x6c3e007e281f69483737b5ca11e11e43c8026d2a16a8a45fed4e83379b66b0ab927’]]

और मैं उस छवि डेटा को 32-बाइट SHA256Notary हैश स्ट्रिंग के माध्यम से प्राप्त कर सकता हूं जो मैंने इसके साथ जोड़ा है, मेरा getImage () फ़ंक्शन रिटर्न:

[‘www.myimageURL.com’,

{[स्ट्रिंग: ‘1496256315’] s: 1, e: 9, c: [1496256315]}]

यह सब बहुत अच्छा लग रहा है। सब कुछ काम कर रहा है, TestRPC और ट्रफल में परीक्षण किया गया है, और हम वास्तव में हमारे forapp के लिए एक शांत चित्रमय उपयोगकर्ता इंटरफ़ेस बनाने के लिए तैयार हैं ताकि दुनिया हमारे उपयोगकर्ता पंजीकरण और एथेरियम ब्लॉकचेन पर छवि नोटरी के साथ बातचीत कर सके।.

बेसिक एथेरियम DesignApp डिज़ाइन

लोकलहोस्ट डिजाइन & परिक्षण

हम जाने के लिए तैयार हैं, हमारी सॉलिडिटी-भाषा स्मार्ट-कॉन्ट्रैक्ट को सफलतापूर्वक संकलित कर लिया गया है, और हमारे स्थानीय testRPC एथेरियम नोड में तैनात किया गया है। अब हम जल्दी से एक सरल thatApp का निर्माण कर सकते हैं जो उपयोगकर्ताओं को अपने वेब-ब्राउज़र के माध्यम से स्मार्ट-कॉन्ट्रैक्ट के साथ बातचीत करने की अनुमति दे सकता है, कुछ बुनियादी वेब प्रोग्रामिंग और विशेष का उपयोग कर Web3.js जावास्क्रिप्ट मॉड्यूल, विशेष रूप से इथेरियम नोड्स और वेब पर स्मार्ट-कॉन्ट्रैक्ट्स के साथ बातचीत करने के लिए बनाया गया है.

मैने बनाया है यह डेमो (ओपन-सोर्स गितुब रिपॉजिटरी) वेब 3.js का उपयोग करते हुए Ethereum sApps का निर्माण करते समय उपयोग करने के लिए लोगों के लिए एक संदर्भ के रूप में, यह डेमो एक आसान से उपयोग किए जाने वाले टूल के साथ बनाया गया था Create-React-App, यह फेसबुक-आंतरिक वेब-भाषा रिएक्ट का उपयोग करता है, लेकिन हमें किसी भी रिएक्ट कोड पर ध्यान केंद्रित नहीं करना चाहिए, बस वेब.जेएस जावास्क्रिप्ट कमांड की जरूरत है। मेरा कोड CommonJS में है, यह लगभग पुराने ES6 जावास्क्रिप्ट के समान है.

तो अपने वेब ऐप में, आप नोड-मॉड्यूल स्थापित करते हैं web3 “npm i -S web3” जैसी कमांड के माध्यम से और यदि आप एक का उपयोग कर रहे हैं तो यह आपके package.json फ़ाइल को बचाएगा। तो आप एक “.js फ़ाइल के अंदर या एक .js फ़ाइल के अंदर, इस तरह एक लाइन web3 मॉड्यूल लोड करने के लिए होगा:

‘web3’ से web3 आयात करें;

(या, ES6 जावास्क्रिप्ट में)

var Web3 = आवश्यकता (= web3 ’);

हमें Web3 को अपने नोड और हमारे स्मार्ट-कॉन्ट्रैक्ट के बारे में कुछ विवरणों के बारे में बताना होगा, ताकि यह कनेक्ट हो सके। आप इस तरह की लाइनें देखेंगे:

# यह पंक्ति हमारी स्थानीयहोस्ट नोड आईपी: पोर्ट सेटिंग्स को निर्दिष्ट करती है

var web3 = नया Web3 (नया Web3.providers.HttpProvider ()"http: // लोकलहोस्ट: 8545"));

# ऊपर से हमारा स्मार्ट-कॉन्ट्रैक्ट पता

var GeektAddress = ‘0xe70ff0fa937a25d5dd4172318fa1593baba5a027’;

# हमारे स्मार्ट-कॉन्ट्रैक्ट एबीआई, कच्चे जावास्क्रिप्ट ऑब्जेक्ट के रूप में, उद्धृत स्ट्रिंग नहीं!

var GeektABI = [{"स्थिर":सच,"आदानों": [],"नाम":"पाने के लिए","आउटपुट": [{"नाम":"", (…)

# यह हमारे web3 ऑब्जेक्ट में स्मार्ट-कॉन्ट्रैक्ट को लोड करता है

GeektContract = web3.eth.contract (GeektABI) .at (GeektAddress);

# यह नोड कनेक्शन के लिए सूचीबद्ध डिफ़ॉल्ट खाता पाता है (ऊपर TestRPC से खाता 0)

defaultAccount = web3.eth.accounts [0];

यहाँ कुछ पंक्तियाँ हैं जो वेब 3 के माध्यम से हमारे स्मार्ट-कॉन्ट्रैक्ट के साथ रीड-ओनली फ़ंक्शन्स को प्रदर्शित करती हैं:

# नीचे दिए गए फ़ंक्शन को सक्रिय किया जाता है जब पेज लोड होता है, को पाने के लिए "व्हाइट पेजस" सभी ज्ञात उपयोगकर्ता पते

GeektContract.getUsers (फ़ंक्शन (इरेट, उपयोगकर्ताओं के लिए)) {

# नीचे दिया गया फ़ंक्शन आवश्यकतानुसार एक छवि बनाता है, और उन्हें ब्राउज़र मेमोरी में संग्रहीत करता है…

GeektContract.getImage (imageHash, function (इरेट, छवि। परिणाम) {

यह सरल डेमो simpleApp सिर्फ सभी ज्ञात उपयोगकर्ता पते को लोड करता है और वास्तविक उपयोगकर्ता छवि विवरणों को पकड़ता है और छवि स्वयं को रिकॉर्ड करती है जैसा कि ऑन-द-फ्लाई की जरूरत है। यहाँ एक स्क्रीनशॉट है:

सॉलिडिटी कैसे सीखें: अल्टीमेट एथेरियम कोडिंग गाइड

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

GeektContract.registerNewUser.estimateGas (

आउटरटी.स्टैट.डेफॉल्टहैंडल,

आउटरटी.स्टैट.डेफॉल्टसिटी,

आउटर,

आउटरट.स्टैट.डेफॉल्टकाउंट्री,

{from: defaultAccount},

फ़ंक्शन (त्रुटि, परिणाम) {

var myGasNum = परिणाम;

GeektContract.registerNewUser.sendTransaction (

आउटरटी.स्टैट.डेफॉल्टहैंडल,

आउटरटी.स्टैट.डेफॉल्टसिटी,

आउटर,

आउटरट.स्टैट.डेफॉल्टकाउंट्री,

{from: defaultAccount, गैस: myGasNum},

फ़ंक्शन (त्रुटि, परिणाम) {

तो आप देख सकते हैं, जब हम एक राज्य-बदलते लेन-देन करते हैं, जिसे हमें वास्तव में इथेरियम गैस (वास्तविक या टेस्टनेट गैस) के साथ भुगतान करना पड़ता है, तो हम इसे कॉल करेंगे registerNewUser.estimateGas () हाथ से पहले कार्य करें, और तब गैस की अनुमानित मात्रा का उपयोग करें, जब हम वास्तविक का उपयोग करते हुए राज्य-बदलते फ़ंक्शन को कॉल करते हैं registerNewUser.sendTransaction () समारोह.

जब हमने TestRPC की शुरुआत की और यह हमारे लिए कुछ परीक्षण वॉलेट पते को समाप्त कर देता है, तो ये खाते उस खाते के समान हैं जो आपके पास होगा यदि आपने एक पूर्ण नोड चलाया और इसके विरुद्ध RPC आदेश प्राप्त किया, जैसे कि पूर्ण-नोड वॉलेट। टेस्टआरपीसी आपको शुरू होने पर कुछ मुफ्त टेस्टनेट सिक्के, 100 टेस्टनेट प्रति खाता देता है.

जब हम इन राज्य-परिवर्तन कार्यों को कहते हैं registerNewUser () या addImageToUser (), लोकलहोस्ट परीक्षण चरण में, हमारे TestRPC नोड के खिलाफ, TestRPC सिर्फ आपके लिए टेस्टनेट गैस का भुगतान करता है और लेनदेन के परिणाम को तुरंत वापस करता है। एक पूर्ण लोकलहोस्ट नोड पर, आपको लेन-देन करने से पहले उस खाते को “अनलॉक” करना होगा, जो मेननेट पर सफल होगा, और आपको अपने लेन-देन का अनुमान लगाने के लिए अगले ब्लॉक के लिए मेननेट पर इंतजार करना होगा ताकि हमारा गैस अनुमान काफी हो सके! लेकिन वहाँ हमेशा एक बेहतर तरीका है, मेरे homies &# X1f642;

अपने ingapp को मेननेट पर हुक करना

मैंने स्थिरांक मेननेट पर स्मार्ट-कॉन्ट्रैक्ट को स्थापित और तैनात किया है, और यह डेमो ऐप मेरे एक वेब-सर्वर पर, www.enledger.io/etherereum-demo-tools. यदि आप इस साइट पर जाते हैं और आपके पास स्थानीय होस्ट पर चलने वाली TestRPC या पूर्ण स्थिरांक नोड नहीं है: 8545, और आप इस साइट पर जाते हैं, तो संभवतः आपको कुछ इस तरह दिखाई देगा:

नेटवर्क से देखा कनेक्शन: !

डिफ़ॉल्ट खाता देखा: (कोई web3.eth नोड लिंक)

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

आप मेरे कोड में देख सकते हैं कि मैं मेटामैस्क प्लगइन से विशेष “इंजेक्टेड” वेब 3 ऑब्जेक्ट का पता लगाता हूं जो नोड को उनके एथेरम पूर्ण नोड से जोड़ता है। यहां प्रासंगिक कोड है जो आपके नियमित क्लाइंट (लोकलहोस्ट) या मेटामास्क वेब 3 कनेक्शन पर स्वचालित रूप से स्विच करता है:

फ़ंक्शन लोडवेब 3 () {

चलो web3 इंजेक्शन = window.web3;

अगर (टाइपऑफ़ वेब 3 इंजेक्ट! == ‘अपरिभाषित’) {

कंसोल.लॉग ("वेब 3 को देखा!");

web3 = new Web3 (web3Injected.currentProvider);

} अन्य {

कंसोल.लॉग ("वेब 3 इंजेक्ट नहीं देखा!");

web3 = नया Web3 (नया Web3.providers.HttpProvider ("http: // लोकलहोस्ट: 8545"));

}

}

नीचे दी गई छवि में, ऊपरी दाहिने कोने में मेटामस्क फॉक्स लोगो पर ध्यान दें, मैंने मेटामस्क प्लगइन स्थापित किया है और मेरे ब्राउज़र में एथेरम मेननेट से जुड़ा हुआ है! आप देख सकते हैं कि मैंने अपने “गीकट” गेस्टबुक डेमो स्मार्ट-कॉन्ट्रैक्ट में पहले से ही कुछ उपयोगकर्ताओं को गेस्टबुक में जोड़ा है। TheirApp इंटरफ़ेस आपको उपयोगकर्ताओं का चयन करने और उनकी छवियों को ब्राउज़ करने की अनुमति देता है, और यदि आप उस पते से कनेक्ट करते हैं जो आपने अभी तक किसी उपयोगकर्ता को पंजीकृत नहीं किया है तो आप साइन गेस्टबुक पेज देखेंगे।.

मैंने कुछ कोड जोड़े ताकि आप केवल उस छवि के URL में पेस्ट कर सकें जिसे आप अपने उपयोगकर्ता खाते में जोड़ना चाहते हैं, और यह आपके लिए SHA256 नोटरी हैश को छवि में जोड़ने के लिए लाएगा, और यह SHA256 की डायरी को भी जांचेगा वे पृष्ठ में लोड किए गए हैं, और आप उस URL और नोटरी हैश से मेल खाते हैं या नहीं, इसके आधार पर आपको थोड़ा हरा चेकमार्क या एक लाल ‘X’ देता है। मैं अपने रयान एम। उपयोगकर्ता खाते के अंतर्गत “ब्लॉकगिक्स” लोगो छवि जोड़ रहा हूँ, और मैंने इस उपयोगकर्ता के लिए छवि जोड़ने के लिए बटन पर क्लिक किया है.

मेटामास्क प्लगइन ने पाया है कि मुझे इस वेब 3 एथेरम लेनदेन के लिए वास्तविक एथेरियम गैस के साथ भुगतान करने की आवश्यकता है, और इसने मुझे संकेत देने के लिए एक छोटी सी खिड़की तैयार की है कि क्या मैं इस लेनदेन को स्वीकार करूंगा। मैंने इस मेटामास्क वॉलेट में थोड़ा वास्तविक ईथर भेजा है, और यह लेन-देन को साफ़ करने के लिए पर्याप्त है, इसलिए मैं ” क्लिक ” पर क्लिक करता हूँ.

सॉलिडिटी कैसे सीखें: अल्टीमेट एथेरियम कोडिंग गाइड

अंतिम विचार, गहन चिंतन

यह काम कर रहा है! यह डेमो आर्टिकल और कोड रिपॉजिटरी आपको एक बेहतरीन Ethereum सॉलिडिटी लैंग्वेज और developerApp डेवलपर बनने में आपकी बहुत मदद करेगी! आप मेटामस्क प्लगइन स्थापित कर सकते हैं, एथेरियम मेननेट से कनेक्ट कर सकते हैं, और यात्रा कर सकते हैं www.enledger.io/etherereum-demo-tools और आप मेरी गेस्टबुक / नोटरी डेमो ऐप और इन्हीं उपयोगकर्ताओं और छवियों को देखेंगे, और यदि आप चाहें तो आप गेस्टबुक पर हस्ताक्षर भी कर सकते हैं और छवियों को नोटरी भी कर सकते हैं। &# X1f642;

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

पता GeektAdmin;

फ़ंक्शन Geekt () देय {// यह CONSTRUCTOR है (अनुबंध के रूप में एक ही नाम) इसे ONCE कहा जाता है, जब अनुबंध पहले तैनात किया जाता है

GeektAdmin = msg.sender; // बस व्यवस्थापक सेट करें, ताकि वे खराब उपयोगकर्ताओं या छवियों को हटा सकें यदि आवश्यक हो, लेकिन कोई और नहीं कर सकता

}

संशोधक onlyAdmin () {

अगर (msg.sender! = GeektAdmin)

फेंकना;

// भूलना मत "_;"! यह वास्तविक फ़ंक्शन बॉडी द्वारा प्रतिस्थापित किया जाएगा जब संशोधक का उपयोग किया जाता है.

_;

}

फ़ंक्शन रिमूवर (एड्रेस बैडयूसर) onlyAdmin रिटर्न (बूल सफलता) {

उपयोगकर्ताओं को हटाएं [badUser];

सच लौटना;

}

फंक्शन रिमूव आईमैज (बाइट्स 32 बैडमेज) केवल एडमीन रिटर्न (बूल सक्सेस) {

notarizedImages [badImage] हटाएं;

सच लौटना;

}

हमारे पास एक विशेष कंस्ट्रक्टर फ़ंक्शन, Geekt () है, जो अनुबंध के समान नाम के साथ है, जिसे केवल एक बार कॉल किया जाता है, जब अनुबंध को पहले ब्लॉकचेन पर तैनात किया जाता है। यह फ़ंक्शन उस व्यवस्थापक उपयोगकर्ता को msg.sender के पते पर सेट करता है, जिसने स्मार्ट-कॉन्ट्रैक्ट परिनियोजित करने के लिए भुगतान किया था। हमारे पास एक विशेष onlyAdmin () संशोधक फ़ंक्शन है, जो तब हमारे रिमूवर () और removeImage () फ़ंक्शन पर लागू होता है, ताकि उन कार्यों को प्रतिबंधित किया जा सके ताकि वे तभी सक्रिय हो सकें जब msg.sender पता व्यवस्थापक उपयोगकर्ता पता हो.

यदि आवश्यक हो तो अब मेरे पास सभी बदमाशों को हटाने का एक तरीका है &# X1f642; मुझे मत करो!

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

एथेरियम और सॉलिडिटी के वास्तव में सबसे अच्छे हिस्से स्मार्ट-कॉन्ट्रैक्ट्स से आते हैं जो ओराक्लेस के साथ बातचीत करते हैं, और स्मार्ट-कॉन्ट्रैक्ट्स जो “संदेशों” (डीएओ) का उपयोग करके एक दूसरे के बीच बात करते हैं और कार्य करते हैं। वहाँ भी कुछ है बहुत गंभीर है सुरक्षा विचार जो आपको सीखना चाहिए, इससे पहले कि आप अपने स्मार्ट-कॉन्ट्रैक्ट के भीतर असली एथेरियम को स्टोर करने की कोशिश करें और इसे फंक्शन कॉल्स के आधार पर लोगों को भेज दें, लोगों का एक समूह एम डॉलर के बारे में खो गया है और यह एथेरम नेटवर्क को विभाजित कर रहा है एक विवादास्पद हार्ड-फोर्क में। यह कुछ ऐसा है जिसे आपको वास्तव में देखना चाहिए, और मुझे संभवतः इसे एक अन्य लेख में कवर करना चाहिए &# X1f642; यह लेख आपको जाने के लिए अच्छा होना चाहिए और जैसा कि मैंने कहा, “खतरनाक” होना चाहिए, और मैं आपको इसे सीखने के लिए प्रोत्साहित करता हूं, यहां तक ​​कि अगर आप कर सकते हैं तो इसे सीखने के लिए भुगतान करने के लिए कुछ अच्छी कंपनी भी प्राप्त करें, लेकिन इस रास्ते पर अभी भी बहुत कुछ है.

एक और, मैं जिस अंतिम बिंदु के बारे में बात करना चाहता हूं वह है एथेरियम की बहुत संरचना और स्मार्ट-कॉन्ट्रैक्ट्स का उपयोग करने की वास्तविक लागत, अभी। एथेरियम एक नेटवर्क है जो एक बड़े, एकल, सार्वजनिक ब्लॉकचेन पर चलता है, जहाँ हर कोई डेटा एक्सेस करने और उसमें स्टोर करने के लिए भुगतान कर सकता है। हालाँकि, वास्तव में करते हुए यह कुछ महंगा है। आप मेरी छवि में ऊपर देख सकते हैं, मुझे 0.004182 ईथर चार्ज किया जा रहा था, जो आज वास्तविक यूएस डॉलर में $ 0.96 के बराबर है, एक छवि URL, SHA256 नोटरी हैश, और टाइमस्टैम्प को स्टोर करने के लिए, 196 बाइट्स को शामिल किया गया है, एथेरियम मेननेट को। यह प्रति MB $ 5,159.03 की डेटा संग्रहण लागत पर काम करता है!

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

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

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

सीक्रेट क्रेजी बोनस सेक्शन

मुझे मेननेट, कैप्टन तक तैनात करें

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

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

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

यहाँ एक लिंक है गथूब पर इथेपेपलर रेपो, और आप केवल मेरे लाइव रनिंग का उपयोग कर सकते हैं Tectract’s EthDeployer और वहां से सीधे अपने अनुबंधों को तैनात करें, आपको बस मेटामस्क प्लगइन को इंस्टॉल करना होगा और पहले Ethereum Mainnet से कनेक्ट करना होगा, साथ ही आपको Mainnet स्मार्ट-कॉन्ट्रैक्ट परिनियोजन शुल्क का भुगतान करने के लिए अपने Metamask वॉलेट में थोड़ा ईथर की भी आवश्यकता होगी।!

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

मेरे पास शीर्ष-स्तरीय index.html पेज के माध्यम से मिनिमाइज्ड ब्राउज़र- solc.min.js जावास्क्रिप्ट लोड हो रहा है, जो html बनाता है window.BrowserSolc मेरे निचले स्तर की प्रतिक्रिया स्क्रिप्ट के लिए उपलब्ध वस्तु। यह एक और बहुत ही सरल बनाने के लिए प्रतिक्रिया-ऐप है जिसे आपकी स्वयं की मशीन पर मिनटों में स्थापित और तैनात किया जा सकता है, मैंने आपको वास्तव में उपयोगी रेडीमेड प्रदान किया है।.

setupCompiler () {

var बाहरीता = यह;

setTimeout (फ़ंक्शन () {

// कंसोल। डीबग (window.BrowserSolc);

window.BrowserSolc.getVersions (फ़ंक्शन (soljsonSources, soljsonReleases) {

var compilerVersion = soljsonReleases [_। कुंजियाँ (soljsonReleases) [0]];

कंसोल.लॉग ("ब्राउज़र-सोल संकलक संस्करण: " + संकलक);

window.BrowserSolc.loadVersion (कंपाइलर वर्जन, फ़ंक्शन (c) {

संकलक = सी;

आउटरटिस.सेटस्टैट ({स्टेटस मेसेजेज:"तैयार!"},समारोह(){

कंसोल.लॉग ("Solc संस्करण लोड किया गया: " + संकलक);

};

};

};

}, 1000);

}

SetupCompiler फ़ंक्शन विंडो के लिए एक सेकंड के लिए प्रतीक्षा करता है। पेज लोड होने के बाद BrowserSolc ऑब्जेक्ट उपलब्ध होना है, तो क्या यह आंतरिक .getVersions () और .loadVersion () फ़ंक्शन है, वास्तव में इसके लिए बहुत अधिक नहीं है, और हमारे पास एक कार्यात्मक Solc कंपाइलर है। एक पूरी तरह से क्लाइंट-साइड वातावरण में सीधे हमारे लिए उपलब्ध है, अच्छा है! पूर्णता के लिए, मैं कुछ प्रासंगिक लाइनें दिखाऊंगा जो वास्तव में एक जावास्क्रिप्ट फ़ंक्शन के भीतर से अनुबंध को संकलित करने और तैनात करने का काम करती हैं, जब “संकलन” & तैनात! ” बटन दबाया जाता है:

compileAndDeploy () {

var result = compiler.compile (यह .state.contractText, अनुकूलित करें);

var abi = JSON.parse (result.contracts [_। कुंजियाँ (result.contracts) [0]] इंटरफ़ेस);

var bytecode = "0x" + result.contracts [_। चाबियाँ (result.contracts) [0]]। bytecode;

var myContract = web3.eth.contract (abi);

web3.eth.estimateGas ({data: bytecode}, function (इरेट, गैसस्ट्रीम) {

myContract.new ({from: web3.eth.accounts [0], डेटा: bytecode, गैस: inflatedGasCost}, फ़ंक्शन (इरेट, newContract) {

thisTxHash: newContract.transactionHash,

thisAddress: newContract.address

हमारे पास पहले से हमारी सभी परिचित वस्तुएं हैं, हम कॉल करते हैं compiler.compile () अनुबंध पाठ पर, और एक संकलित अनुबंध “परिणाम” ऑब्जेक्ट प्राप्त करें, जिसमें से हम अबी और बाईटेकोड निकालते हैं, और इसे एक नए लेनदेन में भेज देते हैं। हम अपने पुराने परिचित .estimateGas () फ़ंक्शन को अच्छे माप के लिए यहां भी देखते हैं। जब अनुबंध सफलतापूर्वक लागू हो जाता है तो हम उपयोगकर्ता को वापस प्रदर्शित करने के लिए लेनदेन आईडी और नए अनुबंध पते को पकड़ लेते हैं। बाम, हो गया! इसे कार्रवाई में देखते हैं:

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

सॉलिडिटी कैसे सीखें: अल्टीमेट एथेरियम कोडिंग गाइड

यह अभी भी जीवित है। इससे मुझे बहुत ख़ुशी हुई! गुप्त पागल अतिरिक्त बोनस खुला! तो, मैंने गैस का 0.02268 भुगतान किया, जो कि इस अनुबंध को एथेरियम मेननेट पर तैनात करने के लिए लगभग $ 5.30 यूएसडी (1 जून, 2017) है। याद रखें कि यह एक सुपर-सिंपल डेमो ऐप माना जाता था, जिसका शाब्दिक रूप से सिर्फ दो संभावित डेटा स्ट्रक्चर्स होते हैं। कुछ हफ़्ते पहले यह केवल $ 2 की तरह था, यह जंगली है! लेकिन फिर भी सस्ती है, आपको वास्तव में अपने अनुबंध को मुख्य-श्रृंखला में तैनात करने की आवश्यकता नहीं है जो अक्सर, वास्तव में केवल एक बार करना चाहिए.

इस समय मेरे पास आपके लिए बस यही है, दोस्तों! आशा है कि आप इस ट्यूटोरियल को सुपर-उपयोगी पाएंगे, और आप अपने देव कारनामों में EthDeployer टूल का अच्छा उपयोग कर सकते हैं। मैं सवालों और टिप्पणियों को सुनने के लिए तत्पर हूं, धन्यवाद!

रेयान मोलके

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

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
map