
सभी को नमस्कार! इस लेख में मैं आपको बताऊंगा कि कैसे आपके ICO के लिए 5 मिनट में स्मार्ट मनी-कलेक्शन कॉन्ट्रैक्ट लॉन्च करना है और टर्मिनल में कई कमांड्स हैं। यह निबंध संभावित रूप से आपको हजारों अमेरिकी डॉलर बचाएगा, क्योंकि किसी भी प्रोग्रामर - और एक प्रोग्रामर भी नहीं - एक ऑडिट और सुरक्षित स्मार्ट कॉन्ट्रैक्ट लॉन्च करने में सक्षम होगा (बजाय $ 15,000 का भुगतान करने के लिए - विकास के लिए $ 75,000)। संक्षेप में, आप इस स्मार्ट अनुबंध को पैसा भेज सकते हैं और इसके लिए ERC20 टोकन प्राप्त कर सकते हैं। यह कहा जा सकता है कि यह लेख उन सभी अनुभवों का संग्रह है जो मैंने अपनी परियोजना के लिए ICO लॉन्च करके प्राप्त किया था।
इंटरनेट पर, ये आपके पहले से ही स्मार्ट कॉन्ट्रैक्ट के बारे में लेखों से भरे हुए हैं, लेकिन जैसे ही आप एक लिखना शुरू करते हैं, आप इस तथ्य पर आते हैं कि जानकारी को हर जगह दोहराया जाता है, और आपके ERC20 को बेवकूफ बनाने के तरीके के बारे में कोई ट्यूटोरियल नहीं हैं, या वे पहले से ही पुराने हैं। वैसे, इस लेख को प्रासंगिक बने रहने के लिए, मैं उन संभावित स्थानों को इंगित करने का प्रयास करूँगा जहाँ यह अप्रचलित हो सकता है (और इसे कैसे ठीक किया जाए)। चलो चलते हैं!
दृढ़ता
यह मुख्य भाषा का नाम है जिसे केफिर टीम ने स्मार्ट कॉन्ट्रैक्ट लॉन्च करने के लिए विकसित किया था। यदि आप एक प्रोग्रामर हैं, तो बस
भाषा के
प्रलेखन पर जाएं - यह अशोभनीय सरल है। वैसे, उन्होंने इसे सरल बना दिया ताकि स्मार्ट अनुबंध लिखने में गलती करना अधिक कठिन हो। तो
बिल्कुल किसी भी प्रोग्रामर, कम से कम जूनियर स्तर पर, यह पता लगाने में सक्षम होगा। डेवलपर्स के पास भारी मात्रा में पैसे देने का
कोई मतलब
नहीं है, जो एकांतता को जानता है - यह मौजूदा डेवलपर को प्रशिक्षित करने के लिए सस्ता परिमाण का एक आदेश होगा।
स्मार्ट कॉन्ट्रैक्ट
... और आपको उनके बारे में जानने की जरूरत है। यदि आप प्रोग्रामर नहीं हैं तो इस सेक्शन को छोड़ दें। एक स्मार्ट अनुबंध कोड का एक टुकड़ा है। सिद्धांत रूप में, यह सॉलिडिटी (OOP, Yes) में एक वर्ग है, जिसके दो प्रकार के कार्य हैं: राज्य-परिवर्तन और गैर-राज्य-परिवर्तन। ठीक है, बस इसे केफिर भेजकर एक स्मार्ट अनुबंध में कार्यों को चलाने के लिए, आपको इस फ़ंक्शन को
payable
करने
payable
चिह्नित करना होगा।
राज्य एक डेटा वेयरहाउस, ब्लॉकचैन, ईपीटी है। अनुबंध ब्लॉकचेन (राज्य, भंडारण) को बदल सकते हैं - लेकिन ब्लॉकचैन को बदलने के लिए आपको खनिकों को केफिर का भुगतान करने की आवश्यकता है। वे कैसे साझा करेंगे केफिर इस लेख के ढांचे में विश्लेषण नहीं किया जाएगा। राज्य-बदलते कोड चलाने के लिए खनिकों को भुगतान को गैस कहा जाता है। यदि कोई बाहर के केफिर को
payable
फ़ंक्शन के लिए एक स्मार्ट कॉन्ट्रैक्ट के पते पर फेंकता है,
payable
नहीं है, लेकिन
Constant
या
View
रूप में चिह्नित नहीं है, तो खनिक को भुगतान के लिए आवश्यक राशि को भेजे गए राशि से काट लिया जाएगा। आम तौर पर, ईआरसी 20 टोकन में, ये ऐसे कार्य हैं जो या तो केफिर के लिए टोकन प्रेषक देते हैं या टोकन को एक टोकन धारक से दूसरे में स्थानांतरित करते हैं।
और यदि आप
Constant
या
View
साथ अनुबंध में एक फ़ंक्शन को चिह्नित करते हैं (उनका मतलब एक ही बात है, तो वे आपको केवल राज्य को पढ़ने की अनुमति देते हैं) या
Pure
(एक ही चीज़, आप राज्य को भी नहीं पढ़ते हैं), तो आपको इस फ़ंक्शन के निष्पादन पर केफिर खर्च करने की आवश्यकता नहीं है! मैं यह भी अधिक कहता हूं कि इन कार्यों को लेनदेन द्वारा कॉल करने की आवश्यकता नहीं है - आखिरकार, कोई भी दही ग्राहक सैद्धांतिक रूप से इसे घर पर निष्पादित कर सकता है - और किसी को भी इस बारे में जानने की आवश्यकता नहीं है (आखिरकार, ब्लॉकचेन को कुछ भी नहीं लिखा गया है)।
और ठोसता में दो महत्वपूर्ण बातें हैं: कई विरासत और फ़ंक्शन संशोधक। आपको उनके बारे में भी जानना होगा।
पहले - बस अनुबंधों को कई वर्गों से एक साथ विरासत में लिया जा सकता है जैसे कि
TimedCrowdsale
,
CappedCrowdsale
,
MintedCrowdsale
,
Ownable
- जबकि
Ownable
के कार्यों को एक के बाद एक लॉन्च किया जाता है - लेकिन मैं इसे बाद में एक उदाहरण के रूप में
Ownable
।
दूसरा कार्य बनाने की क्षमता है जिसे बाद में अन्य कार्यों में डाला जाएगा। यह सरल एनकैप्सुलेशन की तरह है, बस थोड़ा अधिक लचीला है - यह सचमुच
एक फ़ंक्शन
टेम्पलेट है । जब आप एक संशोधक बनाते हैं, तो आप विशेष अक्षर
_
लिखते हैं जहाँ आप इस संशोधक का उपयोग करके फ़ंक्शन के कोड का अर्थ करते हैं। यही है, संशोधक केवल एनकैप्सुलेटेड कार्यक्षमता नहीं हैं जो एक मान लौटाता है; यह एक फ़ंक्शन टेम्प्लेट है जब एक संशोधक से कोड इस संशोधक का उपयोग करके सचमुच एक फ़ंक्शन में डाला जाता है।
अभ्यास के लिए आगे बढ़ते हैं।
खाना पकाने का वातावरण
यदि आपको नहीं पता है कि टर्मिनल क्या है, तो
इस लेख को यहां पढ़ें। यदि आप खिड़कियों पर हैं, तो अपने आप को डब्ल्यूएलएस के माध्यम से एक टर्मिनल सेट करें। यदि आप पहले से ही टर्मिनल से परिचित हैं, तो चलिए जारी रखते हैं। इसके अलावा, तुरंत
खुद को Node.js
डालें - यह अगले चरणों के लिए आवश्यक होगा। एलटीएस को स्थापित करना बेहतर है, लेकिन, वास्तव में, इससे कोई फर्क नहीं पड़ता कि कौन से नोड के आधुनिक संस्करणों को स्थापित करना है।
पहली चीज जिसे हम तुरंत स्थापित करते हैं और ब्लॉक सिंक्रोनाइज़ेशन प्रक्रिया शुरू करते हैं
geth
। संक्षेप में, यह गो में लिखी एक उपयोगिता है जो हमें स्थानीय कंप्यूटर पर ईथर नोड चलाने और परीक्षण और वास्तविक नेटवर्क से जुड़ने की अनुमति देगा। आप
इंस्टॉलरों के माध्यम से स्थापित कर सकते हैं, लेकिन मैं अत्यधिक अनुशंसा करता हूं कि आप टर्मिनल में तुरंत प्राप्त करें, जैसा कि
यहां वर्णित
है । टर्मिनल में कमांड चलाकर आप जांच कर सकते हैं कि आपके
geth
मानक
geth
हैं या
geth
:
geth version
यदि आपको गेट संस्करण मिलता है - सब कुछ ओपनवर्क में है, तो ट्यूटोरियल जारी रखें। यदि नहीं - बुरा, सही; ऐसा लगता है कि आपको टर्मिनल और आपके ऑपरेटिंग सिस्टम के साथ संभोग करना होगा - लेकिन यह आपके लिए यह पता लगाने का पहली बार नहीं है। कैसे geth स्थापित करने के लिए, टर्मिनल में कमांड चलाएँ:
geth --testnet console
यह आपके नोड को परीक्षण सर्वर के साथ सिंक्रनाइज़ करने की प्रक्रिया शुरू करेगा, जिसके ब्लॉक
यहां देखे जा सकते
हैं । यदि आप
geth
कंसोल कंसोल में नेटवर्क के साथ सिंक्रोनाइज़ कर सकते हैं:
eth.blockNumber
सिंक्रनाइज़ेशन प्रक्रिया मुझे 1 से 4 घंटे तक ले गई - जब कैसे। इसके अलावा, ब्लॉक सिंक्रनाइज़ेशन के अलावा, आपको राज्य सिंक्रनाइज़ेशन के लिए भी इंतजार करना होगा - यह अक्सर ब्लॉक सिंक्रोनाइज़ेशन से अधिक लंबा होता है। आप
geth
उपयोग
geth
फ्लैग के साथ भी कर सकते हैं - फिर सिंक्रोनाइज़ेशन कुछ सेकंड से लेकर एक मिनट तक रहता है और आप अभी भी कॉन्ट्रैक्ट को तैनात कर सकते हैं।
ठीक है, हमने पहली उपयोगिता स्थापित की - अगले एक को रखा। हमें
geth
का एक एनालॉग लगाने की जरूरत है, केवल एक बहुत ही स्थानीय
testrpc
सिमुलेशन -
testrpc
। हां, हमारे पास
3 ब्लॉकचेन हैं :
testrpc
- स्थानीय testrpc
सिमुलेशन; तेजी से, लेकिन नकली और केवल आपकी मशीन पर संग्रहीतgeth --testnet
पहले से ही एक वास्तविक geth --testnet
है, लेकिन आप पैसे नहीं खो सकते हैं जहाँ आप मुफ्त में केफिर प्राप्त कर सकते हैं और सभी geth --testnet
परीक्षण कर सकते हैंgeth
- मेननेट, मुख्य, वास्तविक ब्लॉकचेन, वास्तविक केफिर; सभी एक वयस्क तरीके से, यहां त्रुटियां वास्तविक केफिर के नुकसान हैं
तदनुसार, हम
testrpc
साथ परीक्षण अनुबंध शुरू करेंगे, फिर इसे
geth --testnet
में स्थापित करें, और फिर इसे
geth
में सीधे डाउनलोड करें।
हमने निम्न कमांड चलाकर
testrpc
:
npm install -g ethereumjs-testrpc
खैर, या यह एक ट्रफल के साथ तुरंत उगता है, क्योंकि अब
testrpc
ट्रफल विंग के नीचे है और इसे
testrpc
कहा जाता है। हालांकि शैतान जानता है, वेनिला
testrpc
साथ सबकुछ
testrpc
। और अगर यह काम करता है, तो इसे स्पर्श न करें, जैसा कि मुझे अंतरजाल अकादमी में सिखाया गया था। आप कंसोल में
truffle
को पंजीकृत करके इंस्टॉलेशन को सत्यापित करने के लिए भी इसे चला सकते हैं, लेकिन परीक्षण ब्लॉकचेन पहले से ही हमारे साथ सिंक्रनाइज़ है - चलो इसे परेशान न करें।
खैर, ब्लॉकचेन का पता लगा? अब नोड्स हैं और परीक्षण भी सिंक्रनाइज़ है? हम निम्नलिखित आदेश के साथ केफिर -
truffle
पर स्मार्ट अनुबंधों के साथ काम करने के लिए एक सुविधाजनक उपयोगिता रखते हैं:
npm install -g truffle truffle version
Truffle एक ऐसा उपकरण है जो आपको अलग-अलग फ़ाइलों में स्मार्ट कॉन्ट्रैक्ट्स रखने, अन्य फ़ाइलों को आयात करने, और एक बड़े
geth
(किसी व्यक्ति द्वारा अपठनीय) में अपने स्मार्ट कॉन्ट्रैक्ट कोड को संकलित करने की अनुमति देता है, यह स्वचालित रूप से आपके स्थानीय रूप से चलने वाले
geth
(परीक्षण और वास्तविक) को
geth
) या
testrpc
, इस नेटवर्क पर अपना स्मार्ट कॉन्ट्रैक्ट तैनात करें। इसके अलावा, त्रुटियों के लिए आपके स्मार्ट अनुबंध कोड की जांच करता है और हाल ही में पूर्ण किए गए लेनदेन
भी डीबग करने में मदद करते हैं । मास्टहेड, संक्षेप में।
इस स्तर पर आपको स्थापित होना चाहिए:
testrpc
,
geth
,
truffle
- यदि
geth
कोई भी गायब है या संस्करण अनुरोध पर कंसोल से बाहर नहीं थूकता है, तो इसे ठीक करें; अन्यथा आप सफल नहीं होंगे।
इसके अलावा, मैंने एक साधारण बैश स्क्रिप्ट फेंकी जो आपके लिए सब कुछ स्थापित करेगी। इस तरह कहा जाता है:
source <(curl -s https://raw.githubusercontent.com/backmeupplz/eth-installer/master/install.sh)
- लेकिन मैंने अभी तक इसका परीक्षण नहीं किया है, इसलिए मुझे इसके प्रदर्शन पर यकीन नहीं है। हालाँकि, मुझे अनुरोधों को खींचने में खुशी होगी।
अंजीर का अनुबंध
सब कुछ पहले से ही आपके लिए आविष्कार और लिखा जा चुका है - यह अच्छा है। थोड़ा बुंटिंग सभी समान होगा - लेकिन मैं इसे आपके लिए कम से कम करने की कोशिश करूंगा। हम
OpenZeppelin से तैयार किए गए ERC20 अनुबंध का उपयोग करेंगे - यह अब उद्योग मानक है, उन्होंने ऑडिट पास कर लिया है, और वास्तव में वे सभी अपने कोड का उपयोग करते हैं। ओपन सोर्स में आपके योगदान के लिए बहुत-बहुत धन्यवाद।
cd
को कुछ सुरक्षित फ़ोल्डर में बनाएँ और फिर लिखें:
mkdir contract && cd contract
इस फ़ोल्डर में हम काम करेंगे। हमारे स्मार्ट अनुबंध के लिए यहां एक स्टब बनाएं:
truffle init
हकलाना, स्पष्ट रूप से। अब हमारे पास दो बहुत महत्वपूर्ण फ़ोल्डर हैं जिनमें हम चढ़ेंगे:
contracts
और
migrations
। पहला है हमारे कॉन्ट्रैक्ट्स के लिए कोड, दूसरा ट्रफल के लिए कोड है, यह जानने के लिए कि ब्लॉक करने वाले को कॉन्ट्रैक्ट्स करते समय क्या करना है।
अगला, हमें npm से वर्तमान स्मार्ट कॉन्ट्रैक्ट कोड लेने की आवश्यकता है और वास्तव में, प्रोजेक्ट को स्वयं शुरू करें:
npm init -y
वैसे, OpenZeppelin से स्मार्ट कॉन्ट्रैक्ट्स का कोड हमारी जेब में फ़ोल्डर
node_modules/openzeppelin-solidity/contracts
। अब हम मुख्य
contracts
फ़ोल्डर में जाते हैं, वहां सभी फ़ाइलों को हटा दें और फ़ाइलों को जोड़
MyToken.sol
और
MyCrowdsale.sol
- स्वाभाविक रूप से, आप अपने अनुबंधों को अलग नाम देंगे। पहला हमारे ERC20 टोकन के लिए एक अनुबंध होगा, और दूसरा हमारे ICO का अनुबंध होगा, जो केफिर को स्वीकार करेगा और लोगों
MyToken
वितरित
MyToken
। यह लेख पुराना हो सकता है, लेकिन आप हमेशा यह देख सकते हैं कि OpenZeppelin आपको
अपने भंडार में अनुबंध बनाने का सुझाव कैसे देता
है । इस तरह
MyToken.sol
दिखेगा:
pragma solidity ^0.4.23;
नाइस - आपके पास अपने स्वयं के टोकन का एक स्मार्ट अनुबंध है (बस स्थिरांक में नाम बदलें)! आप देख सकते हैं कि
MintableToken
से किस
MintableToken
विरासत है - लेकिन वहां सब कुछ यथासंभव सरल है। यह एक टोकन है, जो जारी किया जा सकता है (अंग्रेजी "मिंट" से - टकसाल तक), और केवल मालिक को इसे जारी करने का अधिकार है, क्योंकि
MintableToken
को भी खुद से विरासत में मिला है। इसके अलावा,
MintableToken
भी OpenZeppelin द्वारा लिखे गए ERC20 टोकन की कक्षाओं से विरासत में मिला है, जिसमें ERC20 इंटरफ़ेस लागू किया गया है:
contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); }
हाँ, यहाँ आपके पास पूरा ERC20 इंटरफ़ेस है। क्या यह मुश्किल है? मुझे ऐसा नहीं लगता। यह आपको यह देखने का अवसर देता है कि कितने टोकन जारी किए गए थे, नेटवर्क पर प्रकाश केफिर ग्राहकों के लिए स्थानांतरण घटना को थूककर, पते की शेष राशि की जांच करें और टोकन को दूसरे पते पर स्थानांतरित करें। और यह सब आप अपने
MyToken.sol
में
MyToken.sol
के काम के लिए मुफ्त में प्राप्त करते हैं - वे महान हैं।
और अब चलो हमारे ICO के मुख्य भाग पर चलते हैं - हमें केफिर को स्वीकार करने और
MyToken
को बाहर करने की
MyToken
! यह आपका
MyCrowdsale.sol
दिखेगा:
pragma solidity ^0.4.23;
सो-सो, तो हमारे साथ क्या है? क्या, लड़कों, स्मार्ट अनुबंध? टोकन की हमारी सार्वजनिक बिक्री सबसे लोकप्रिय गुणों में से तीन विरासत में मिली: इसमें एक हार्ड-कैप है, जिसे अब एकत्र नहीं किया जा सकता है; नरम टोपी, इकट्ठा नहीं जो एस्टर वापस आ रहे हैं; टोकन बिक्री का समय और अंत। असल में, खुशी के लिए और क्या चाहिए?
प्रोग्रामर, ध्यान दें कि कैसे कई वंशानुक्रम वर्गों के निर्माता एक पंक्ति में व्यवस्थित होते हैं और
MyCrowdsale
के मुख्य निर्माता से तर्क प्राप्त करते हैं। इसके अलावा, हम जांचते हैं कि हार्डकी सॉफ्टी से अधिक है - एलेस गट! इसके अलावा,
MyCrowdsale
कंस्ट्रक्टर में
MyCrowdsale
मापदंडों से
MyCrowdsale
न हों - हम उन्हें ट्रफल में अनुबंध परिनियोजन के चरण में पास करेंगे।
यह सब - आपके पास अपने खुद के ERC20 टोकन और यहां तक कि एक ICO स्मार्ट अनुबंध का तैयार अनुबंध है, जो आपकी इच्छा के अनुसार कॉन्फ़िगर किया गया है और केफिर के लिए अपने टोकन देता है। इसके अलावा, यह सभी ईआरसी 20 पर्स द्वारा समर्थित है - एक गड़गड़ाहट! चलो मैन्युअल परीक्षण और तैनाती के लिए आगे बढ़ते हैं।
प्रवास
जैसा कि मैंने पहले कहा था, हम तीन ब्लॉकचेन नेटवर्क पर क्रमिक रूप से परीक्षण करेंगे, लेकिन पेन के साथ परीक्षण की प्रक्रिया हमेशा समान रहेगी। चलो
testrpc
शुरू करते हैं, फिर
geth --testnet
पर
geth --testnet
और
geth --testnet
पर चलते
geth
। सू हेडलाइट्स, हमने अभी कोड लिखा है, आइए इसे संकलित करने का प्रयास करें। प्रोजेक्ट फ़ोल्डर में, लिखें:
truffle compile
यदि सब कुछ समस्याओं के बिना संकलित किया जाता है, तो आप
build
देखेंगे, जिसमें ट्रफल के लिए क्राकोज़ीब होगा ताकि यह ब्लॉकचेन में आपके स्मार्ट कॉन्ट्रैक्ट्स के बाईटेकोड को एम्बेड कर सके। स्मार्ट अनुबंधों को तैनात करने से पहले, हमें ट्रफल को यह बताने की आवश्यकता है कि क्या करना है। स्मार्ट कॉन्ट्रैक्ट्स की ट्रफल तैनाती को माइग्रेशन कहा जाता है - ठीक है, चलो इस शब्दावली से चिपके रहते हैं।
migrations/1_initial_migration.js
और इसे निम्न तरीके से बदलें:
const token = artifacts.require("../contracts/MyToken.sol"); const crowdsale = artifacts.require("../contracts/MyCrowdsale.sol"); module.exports = function(deployer, network, accounts) { const openingTime = 1514764800;
यह वही फ़ाइल है जिसका उपयोग ट्रफल द्वारा अनुबंधों को तैनात करने के लिए किया जाएगा। तो हम यहाँ क्या कर रहे हैं? सबसे पहले, हमने
MyToken
और
MyCrowdsale
संकलित करने का अनुरोध किया। इसके बाद, हम अपने ICO के सभी तर्कों के साथ स्थिरांक निर्धारित करते हैं - प्रारंभ और अंत समय निर्धारित करते हैं; केफिर के 1 वेन के लिए कितने टोकन लोग प्राप्त करेंगे (0.000000000000000001 eth = 1 wei; सेटिंग
decimals
यह दर्शाता है कि आपके नए बने टोकन में से 1 प्राप्त करने के लिए कितने ऑर्डर करने की आवश्यकता है); बटुआ, जहां बिक्री से प्राप्त केफिर आएगा; हार्ड कैप और सॉफ्ट कैप। कृपया ध्यान दें कि
TimedCrowdsale
में वर्तमान ब्लॉक के समय के बाद होना चाहिए - अन्यथा आपका स्मार्ट अनुबंध
TimedCrowdsale
में स्थिति की जांच करने के कारण अवरुद्ध नहीं होगा। मैंने इस रैक पर कदम रखा, और असफल लेनदेन पर बहस नहीं की जा सकती। अपनी इच्छानुसार इन स्थिरांक को बदलें।
अगला कदम ठीक स्मार्ट अनुबंधों की तैनाती है। यहां कुछ भी दिलचस्प नहीं है: हमारे पास एक
deployer
ऑब्जेक्ट है जो स्मार्ट कॉन्ट्रैक्ट कलाकृतियों को तैनात करता है और वहां तर्क देता है। ध्यान दें कि MyToken पहले
MyToken
, और उसके बाद ही
MyCrowdsale
- और पहले का पता तर्क के रूप में दूसरे में पारित किया गया है।
तब सबसे दिलचस्प बात यह है कि वे या तो दस्तावेज में या किताबों में नहीं लिखते हैं। जब आप किसी वॉलेट से
MyToken
बनाते हैं, तो यह वॉलेट
MyToken
में
MyToken
का मालिक बन जाता है - यही बात
MyCrowdsale
साथ भी
MyCrowdsale
। यदि आप
MintableToken
में गहरी खुदाई करते हैं, तो आप देख सकते हैं कि केवल
Owner
ही सिक्के टकसाल कर सकते हैं! और
MyToken
का मालिक कौन है? यह सही है: पता जो उसे परेशान करता है। और सिक्कों के खनन के लिए अनुरोध कौन भेजेगा? सही:
MyCrowdsale
स्मार्ट अनुबंध। आपको याद दिला दूं कि
MyToken
और
MyCrowdsale
पते दो अलग-अलग पते हैं।
इसलिए, हम गैर-रूढ़िवादी तीसरे परिनियोजन चरण को जोड़ रहे हैं, जहां पते ने अनुबंध (
web3.eth.accounts[0]
) को
MyToken
किया है जो
MyToken
अनुबंध पर
transferOwnership
फ़ंक्शन को कॉल करता है
MyToken
MyCrowdsale
का मालिक
MyToken
और सिक्कों का टकसाल कर सके। और
MyCrowdsale
अभी भी
web3.eth.accounts[0]
के स्वामित्व में है - इसलिए सब कुछ बंडल है।
web3.eth.accounts[0]
बारे में ध्यान दें: स्मार्ट अनुबंध को लागू करते समय, सुनिश्चित करें कि web3.eth.accounts[0]
में web3.eth.accounts[0]
या testrpc का सही बटुआ है - इसके लिए निजी कुंजी न खोएं, हालांकि यह आपको नुकसान नहीं पहुँचाता है, लेकिन अचानक मालिक को बाद में कुछ करने की आवश्यकता होगी, लेकिन कुंजी अब नहीं है?
testrpc
, एक नियम के रूप में, स्टार्टअप पर तुरंत खाते बनाए जाते हैं और उन्हें तुरंत अनलॉक कर दिया जाता है; हालाँकि, एक परीक्षण और वास्तविक एयर ब्लॉकचैन पर, यह personal.newAccount()
माध्यम से एक खाता बनाने के लायक है - फिर परीक्षण ब्लॉकचैन या असली ब्लॉकचेन पर असली केफिर के माध्यम से इस पते को फिर से भरें। अपना पासवर्ड और निजी कुंजी न खोएं।
इसके अलावा, आप web3.personal.importRawKey('pvt_key', 'password')
कॉल करके अपने खातों में एक मौजूदा बटुआ जोड़ सकते हैं, लेकिन इसके लिए आपको अतिरिक्त पैरामीटर --rpcapi="db,eth,net,web3,personal,web3"
साथ geth
को कॉल करना होगा। --rpcapi="db,eth,net,web3,personal,web3"
। मुझे लगता है कि आप इसका पता लगा लेंगे।
परीक्षण और तैनाती
हां, अनुबंध तैयार हैं, माइग्रेशन लिखे गए हैं, यह केवल तैनात करने और जांच करने के लिए बना हुआ है। दोनों
geth
(परीक्षण और वास्तविक) और
testrpc
truffle console
माध्यम से एक ही तरीके से प्रबंधित किया जाता
truffle console
- इसलिए मैं
testrpc
लिए सत्यापन विधि का वर्णन
testrpc
और आपको बताऊंगा कि
geth
को कैसे सक्षम किया
geth
। और इसलिए, हम परीक्षण स्थानीय केफिर ब्लॉकचैन लॉन्च करते हैं:
testrpc
बेनाम: उम ... यह सब है। आप स्थानीय रूप से केफिर ब्लॉकचेन का अनुकरण करते हैं।
और इस कमांड के बजाय टेस्ट ईथर geth --testnet --rpc
तैनात करने के लिए, आपको geth --testnet --rpc
। और ईथर के वास्तविक geth --rpc
पर तैनात करने के लिए, आप बस geth --rpc
। --rpc
फ्लैग --rpc
जरूरत है ताकि ट्रफल कनेक्ट हो सके। तीनों प्रकार के ब्लॉकचेन के लिए निम्न परिनियोजन और परीक्षण चरण कमोबेश समान हैं। केवल एक चीज यह है कि जब आप परीक्षण या वास्तविक geth
को geth
माध्यम से geth
, तो यह ब्लॉकों को सिंक्रनाइज़ करना शुरू कर देगा - और एक अच्छे इंटरनेट कनेक्शन पर 4-5 घंटे तक का समय लग सकता है। इस बारे में एक टिप्पणी लेख की शुरुआत में थी। स्मार्ट अनुबंधों को तैनात करने से पहले, मैं पूर्ण सिंक्रनाइज़ेशन की प्रतीक्षा करने की सलाह देता हूं। इसके अलावा, ब्लॉकचैन का वजन 60-100 गीगाबाइट के क्षेत्र में है, इसलिए इसके लिए डिस्क स्थान तैयार करें।
इसके अलावा-यह भी सुनिश्चित करें कि web3.eth.accounts[0]
अनलॉक किया गया है। आप आमतौर पर कंसोल में testrpc
को पंजीकृत कर सकते हैं, जो तुरंत खुलता है, या कंसोल में एक अलग टर्मिनल विंडो में, जो geth console
माध्यम से geth console
: eth.unlockAccount(eth.accounts[0], ", ", 24*3600)
- यह आपके खाते को अनलॉक करेगा, जिसे एक स्मार्ट अनुबंध बनाना चाहिए
अब एक नई टर्मिनल विंडो खोलें (
testrpc
क्लोज़
testrpc
बंद नहीं करते हैं - यह काम करना चाहिए) और इसे प्रोजेक्ट फ़ोल्डर में लिखें:
truffle migrate --reset
यह मैजिक कमांड एक स्मार्ट कॉन्ट्रैक्ट संकलित करेगा (यानी, आपको हर बार
truffle compile
लिखने की आवश्यकता नहीं है) और इसे ब्लॉकचेन माइक्रो सर्वर पर तैनात करना चाहिए जो स्थानीय रूप से खुला पाया जाता है। यह ध्यान देने योग्य है कि अगर
testrpc
तुरंत ऐसा करता है, तो परीक्षण और असली
testrpc
अगले ब्लॉक में लेनदेन को अधिक लंबे समय तक शामिल करेंगे। उसके बाद आपको कंसोल में कुछ इस तरह से थूकना चाहिए:
Using network 'development'. Running migration: 1_initial_migration.js Running step... Replacing MyToken... ... 0x86a7090b0a279f8befc95b38fa8bee6918df30928dda0a3c48416454e2082b65 MyToken: 0x2dc35f255e56f06bd2935f5a49a0033548d85477 Replacing MyCrowdsale... ... 0xf0aab5d550f363478ac426dc2aff570302a576282c6c2c4e91205a7a3dea5d72 MyCrowdsale: 0xaac611907f12d5ebe89648d6459c1c81eca78151 ... 0x459303aa0b79be2dc2c8041dd48493f2d0e109fac19588f50c0ac664f34c7e30 Saving artifacts...
मुझे लगता है कि आपको पहले ही एहसास हो गया है कि कंसोल ने आपको स्मार्ट कॉन्ट्रैक्ट्स
MyToken
और
MyCrowdsale
के पते
MyCrowdsale
। वह सब है! स्मार्ट कॉन्ट्रैक्ट ब्लॉकचेन में एम्बेडेड है जिसका माइक्रो-सर्वर आपके पास खुला है। यह केवल यह सत्यापित करने के लिए बनी हुई है कि टोकन वास्तव में उन उपयोगकर्ताओं को वितरित किए जाते हैं जो
MyCrowdsale
स्मार्ट अनुबंध में केफिर भेजते हैं। हम ट्रफल कंसोल में प्रवेश करने के लिए टर्मिनल में निम्नलिखित लिखते हैं:
truffle console
हम अब ट्रफल में निम्नलिखित लिखते हैं (केवल कोई टिप्पणी नहीं):
के मामले में, testrpc
आप तुरंत हमारे वॉलेट का संतुलन फिर से जांच सकते हैं, लेकिन परीक्षण और वास्तविक ब्लॉकचेन के मामले में, आपको तब तक इंतजार करना होगा जब तक कि हमारे लेनदेन को ब्लॉक में शामिल नहीं किया जाता है - आमतौर पर जब ऐसा होता है, तो ट्रफल आपको लेनदेन नंबर देता है। क्या आपने इंतजार किया है? फिर से हमारे संतुलन की जाँच करें MyToken
:
वह सब है!
पहले अपने अनुबंध का परीक्षण करें testrpc
, फिर ऑन geth --testnet
, फिर पर तैनात करें geth
। तो आपने अपना ICO लॉन्च किया! और आपको ऑडिट और लॉन्च के लिए दसियों किलोबॉट खर्च करने होंगे। OpenZeppelin के लोगों ने हमें जो प्रदान किया है, उसके साथ खिलवाड़ करना वास्तव में बहुत कठिन है। और जब आप इसका उपयोग करते हैं truffle
- यह है कि कैसे एकजुटता विकास आम तौर पर एक परी कथा में बदल जाता है। खैर, ऐसे मामलों को छोड़कर जब स्मार्ट कॉन्ट्रैक्ट पर निष्पादन के दौरान लेन-देन उल्टा हो जाता है - उनके नरक की शुरुआत करें। लेकिन स्मार्ट कॉन्ट्रैक्ट का डिबगिंग वास्तव में एक अलग लेख के योग्य है।निष्कर्ष
इस लेख के अंत तक पढ़ने के लिए बहुत-बहुत धन्यवाद! यदि मैं आपको समय या धन बचाने में कामयाब रहा, या यदि आपने इस लेख से कुछ नया सीखा है, तो मुझे बहुत खुशी होगी। अगर आप अपने दोस्तों या परिचितों के साथ इस लेख को साझा करते हैं तो मैं बहुत आभारी रहूंगा जो ICO का संचालन करना चाहते हैं - उन्हें अंडर-प्रोग्रामर के लिए $ 75,000 बचाएं, जो परजीवी जैसे क्रिप्टो बाजार से पैसा चूसते हैं, कोड की समान 25 पंक्तियों को कॉपी-पेस्ट करते हैं ।स्मार्ट कॉन्ट्रैक्ट विकसित करने में शुभकामनाएँ! अभी भी प्रश्न हैं? मैं आपको टिप्पणियों में पूछता हूं - मुझे हर चीज का जवाब देने और समस्याओं के साथ मदद करने की कोशिश करने में खुशी होगी।बोनस
लेकिन क्या होगा यदि आप तर्क को बदलना चाहते हैं जिसके द्वारा टोकन की खरीद मूल्य पर विचार किया जाता है? बेशक, आप इसे सही तरीके से बदल सकते हैं rate
या OpenZeppelin से अनुबंधों में से एक वर्ग का उपयोग कर सकते हैं , लेकिन क्या होगा यदि आप कुछ और भी अधिक विकृत चाहते हैं? एक स्मार्ट अनुबंध में, आप फ़ंक्शन getTokenAmount
को इस प्रकार से ओवरराइड कर सकते हैं : function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { if (block.timestamp < 1533081600) {
सामान्य तौर पर, यह टोकन की कीमत खरीद के समय पर निर्भर कर सकता है - जंगल में दूर, अधिक महंगी टोकन। स्मार्ट कॉन्ट्रैक्ट की कुछ विशेषताओं को प्रयोग करने और फिर से लिखने से डरो मत - यह मजेदार है!