
مرحبا بالجميع! في هذه المقالة ، سأخبرك بكيفية إطلاق عقد جمع أموال ذكي لـ ICO الخاص بك على Ethereum في 5 دقائق وعدة أوامر في المحطة. من المحتمل أن يوفر لك هذا المقال عشرات الآلاف من الدولارات الأمريكية ، لأن أي مبرمج - وليس مبرمجًا أيضًا - سيكون قادرًا على إطلاق عقد ذكي مدقق وآمن (بدلاً من دفع 15000 - 75000 دولار للتطوير). باختصار ، يمكنك إرسال الأموال إلى هذا العقد الذكي وتلقي رموز ERC20 مقابله. يمكن القول أن هذه المقالة عبارة عن مجموعة من كل الخبرة التي اكتسبتها من خلال إطلاق ICO لمشروعي.
على الإنترنت ، هذه الخاصة بك مليئة بالفعل بمقالات حول العقود الذكية ، ولكن بمجرد أن تبدأ في كتابة واحدة ، تصادف حقيقة أن المعلومات تتكرر في كل مكان ، ولا توجد ببساطة دروس تعليمية حول كيفية خداع ERC20 ، أو أنها قديمة بالفعل. بالمناسبة ، لكي تظل هذه المقالة ذات صلة ، سأحاول الإشارة إلى الأماكن المحتملة التي قد تصبح فيها قديمة (وكيفية إصلاحها). دعنا نذهب!
الصلابة
هذا هو اسم اللغة الرئيسية التي طورها فريق الكفير لإطلاق العقود الذكية. إذا كنت مبرمجًا ، فما عليك سوى مراجعة
وثائق اللغة - فهي بسيطة للغاية. بالمناسبة ، لقد جعلوا الأمر بسيطًا بحيث كان من الصعب ارتكاب خطأ في كتابة عقد ذكي. لذا فإن
أي مبرمج ، على الأقل على مستوى المبتدئين ، سيكون قادرًا على معرفة ذلك.
ليس هناك أي معنى على الإطلاق في دفع مبالغ ضخمة من المال للمطورين الذين يعرفون الصلابة - سيكون الأمر أرخص من حيث الحجم لتدريب مطور حالي.
العقود الذكية
... وكل ما تريد معرفته عنهم. تخطي هذا القسم إذا لم تكن مبرمجًا. العقد الذكي هو جزء من الكود. من حيث المبدأ ، هذه فئة من الصلابة (OOP ، نعم) ، ولها نوعان من الوظائف: تغيير الحالة وعدم تغيير الحالة. حسنًا ، من أجل تشغيل الوظائف في عقد ذكي فقط عن طريق إرسال الكفير إليه ، تحتاج إلى تحديد هذه الوظيفة
payable
.
الدولة هي مستودع البيانات ، blockchain ، EPT. يمكن للعقود تغيير blockchain (الدولة ، التخزين) - ولكن لتغيير blockchain تحتاج إلى دفع الكفير لعمال المناجم. لن يتم تحليل كيفية مشاركة الكفير في إطار هذه المقالة. يسمى الدفع لعمال المناجم لتشغيل كود تغيير الدولة الغاز. إذا قام شخص من الخارج بإلقاء الكفير على عنوان عقد ذكي مع استدعاء وظيفة معلمة
payable
ولكن لم يتم وضع علامة
Constant
عليها ، أو
View
أو
Pure
، فسيتم خصم المبلغ المطلوب من الكفير للدفع إلى عمال المناجم من المبلغ المرسل. عادةً ، في الرموز المميزة لـ ERC20 ، هذه هي الوظائف التي تمنح إما مرسل الرمز المميز للكفير أو تنقل الرموز المميزة من حامل رمز مميز إلى آخر.
وإذا وضعت علامة على دالة في العقد تحتوي على الكلمات
Constant
أو
View
(فهي تعني نفس الشيء ، فهي تسمح لك فقط بقراءة الحالة) أو
Pure
(نفس الشيء ، حتى أنك لا تقرأ الحالة) ، فلن تحتاج حتى إلى إنفاق الكفير على تنفيذ هذه الوظيفة! سأقول أكثر من ذلك أن هذه الوظائف لا تحتاج إلى استدعائها من خلال المعاملات - بعد كل شيء ، يمكن لأي عميل زبادي أن ينفذها نظريًا في المنزل - ولا يحتاج أحد إلى معرفة ذلك بعد الآن (بعد كل شيء ، لم تتم كتابة أي شيء إلى blockchain).
وهناك شيئان مهمان في الصلابة: تعدد الوراثة ومعدلات الوظائف. أنت بحاجة أيضًا إلى معرفتهم.
أولًا - يمكن توريث العقود فقط في وقت واحد من عدة فئات مثل
TimedCrowdsale
و
CappedCrowdsale
و
MintedCrowdsale
و
Ownable
- في حين يتم إطلاق وظائف
Ownable
أيضًا واحدة تلو الأخرى - لكنني سأشرح ذلك لاحقًا كمثال.
والثاني هو القدرة على إنشاء وظائف سيتم إدراجها بعد ذلك في وظائف أخرى. إنه مثل التغليف البسيط ، فقط أكثر مرونة قليلاً - إنه حرفياً
قالب وظيفي. عندما تقوم بإنشاء معدِّل ، تكتب الحرف الخاص
_
حيث تقصد رمز الوظيفة باستخدام هذا المعدل. أي أن المعدلات ليست مجرد وظيفة مغلفة تُرجع قيمة ؛ هذا هو قالب دالة عندما يتم إدراج رمز من المعدّل حرفياً في وظيفة باستخدام هذا المعدل.
دعنا ننتقل إلى الممارسة.
بيئة الطبخ
إذا كنت لا تعرف ما هو الطرفية ، اقرأ
هذه المقالة هنا . إذا كنت تستخدم النوافذ ، فقم بتعيين محطة طرفية عبر WLS. إذا كنت معتادًا بالفعل على Terminal ، فلنستمر. أيضا ،
ضع نفسك Node.js على الفور - سيكون من الضروري للخطوات التالية. من الأفضل تثبيت LTS ، ولكن في الواقع ، لا فرق في أي من الإصدارات الحديثة للعقدة يجب تثبيتها.
أول شيء نقوم بتثبيته على الفور وبدء عملية مزامنة الكتلة هو
geth
. باختصار ، هذه أداة مساعدة مكتوبة في Go تسمح لنا بتشغيل عقدة الأثير على الكمبيوتر المحلي والاتصال بالشبكات الاختبارية والحقيقية. يمكنك التثبيت
عبر أدوات التثبيت ، ولكنني أوصي بشدة بالحصول عليه مباشرة في Terminal ، كما هو موضح
هنا . يمكنك التحقق مما إذا تم
geth
معايير
geth
الخاصة بك عن
geth
تشغيل الأمر في Terminal:
geth version
إذا قمت بصق نسخة geth - كل شيء في مخرمة ، فتابع البرنامج التعليمي. إن لم يكن - سيئًا ، صحيحًا ؛ يبدو أنك ستضطر إلى ممارسة الحب مع Terminal ونظام التشغيل الخاص بك - ولكن هذه ليست المرة الأولى التي تكتشف فيها ذلك. كيفية تثبيت geth ، قم بتشغيل الأمر في Terminal:
geth --testnet console
سيبدأ هذا عملية مزامنة العقدة الخاصة بك مع خادم الاختبار ، والتي يمكن عرض كتلها
هنا . يمكنك التحقق مما إذا كنت قد قمت بالمزامنة مع الشبكة في وحدة التحكم
geth
عن طريق
geth
:
eth.blockNumber
استغرقت عملية المزامنة من ساعة إلى 4 ساعات - متى كيف. بالإضافة إلى حظر المزامنة ، سيتعين عليك أيضًا انتظار مزامنة الحالة - غالبًا ما تكون أطول من مزامنة المزامنة. يمكنك أيضًا استخدام
geth
--light
مع علامة -
--light
- ثم تستمر المزامنة من بضع ثوان إلى دقيقة ولا يزال بإمكانك نشر العقود.
حسنًا ، لقد قمنا بتثبيت الأداة المساعدة الأولى - ضع الأداة التالية. نحن بحاجة إلى وضع
testrpc
، فقط محاكاة
testrpc
محلية جدًا -
testrpc
. نعم ، لدينا
3 بلوكشين :
testrpc
- محاكاة testrpc
المحلية ؛ سريع ، لكن مزيف ومخزن فقط على جهازكgeth --testnet
هو بالفعل بلوكشين حقيقي ، لكنك لن تخسر المال حيث يمكنك الحصول على الكفير واختبار جميع geth --testnet
مجانًا- geth - mainnet ، main ، blockchain الحقيقي ، الكفير الحقيقي ؛ كل شيء بطريقة الكبار ، والأخطاء هنا هي خسائر الكفير الحقيقي
وفقًا لذلك ، سنبدأ عقد الاختبار مع
testrpc
، ثم
testrpc
، ثم
geth --testnet
مباشرة في
geth
.
testrpc
عن طريق تشغيل الأمر التالي:
npm install -g ethereumjs-testrpc
حسنًا ، أو ترتفع فورًا مع الكمأة ، حيث أن
testrpc
الآن
تحت جناح الكمأة ويسمى
ganache-cli
. على الرغم من أن الشيطان يعرف ، كل شيء
testrpc
مع
testrpc
الفانيليا. وإذا نجحت ، فلا تلمسها كما علمت في أكاديمية المجرات. يمكنك أيضًا تشغيله للتحقق من التثبيت من خلال تسجيل
truffle
في وحدة التحكم ، ولكن تتم مزامنة blockchain بالفعل معنا - دعنا لا نزعجها.
حسنًا ، اكتشفت blockchains؟ هناك الآن العقد وحتى تتم مزامنة الاختبار؟ نضع أداة ملائمة للعمل مع العقود الذكية على الكفير -
truffle
، بالأمر التالي:
npm install -g truffle truffle version
Truffle هي أداة تسمح لك بالاحتفاظ بالعقود الذكية في ملفات مختلفة ، واستيراد ملفات أخرى ، وكذلك تجميع رمز العقد الذكي الخاص بك في رمز بايت كبير واحد (غير قابل للقراءة من قبل شخص) ، يجدك تلقائيًا الحصول على
geth
قيد التشغيل محليًا (اختبار وحقيقي ) أو
testrpc
،
testrpc
الذكي على هذه الشبكة. أيضًا ، تحقق من رمز العقد الذكي الخاص بك بحثًا عن الأخطاء والمعاملات المكتملة مؤخرًا
تساعد أيضًا في تصحيح الأخطاء . إعلان التسمية الرئيسية باختصار.
في هذه المرحلة ، يجب أن تكون قد قمت بتثبيت:
testrpc
،
testrpc
،
testrpc
- إذا كان أي من هذا مفقودًا أو لم يبصق الإصدار إلى وحدة التحكم عند الطلب ،
testrpc
بتصحيح هذا ؛ وإلا فلن تنجح.
أيضا ، قمت بإلقاء نص bash بسيط يقوم بتثبيت كل شيء لك. تسمى بهذا الشكل:
source <(curl -s https://raw.githubusercontent.com/backmeupplz/eth-installer/master/install.sh)
- لكنني لم أختبرها أبدًا بعد ، لذا لست متأكدًا من أدائها. ومع ذلك ، سأكون سعيدًا لسحب الطلبات.
عقد فيجاش
كل شيء تم اختراعه وكتابته من أجلك - هذا جيد. القليل من الرايات سيكون نفس الشيء - لكني سأحاول التقليل من ذلك لك.
سنستخدم عقود ERC20 الجاهزة من OpenZeppelin - هذا هو الآن معيار الصناعة ، لقد اجتازوا التدقيق ، وفي الواقع يستخدمون جميعًا
رموزهم . شكرا جزيلا لمساهمتك في المصدر المفتوح.
أدخل
cd
في مجلد آمن ثم اكتب:
mkdir contract && cd contract
سنعمل في هذا المجلد. أنشئ كعبًا هنا لعقدنا الذكي:
truffle init
تتعثر بوضوح. لدينا الآن مجلدان مهمان للغاية سنتسلق فيهما:
contracts
migrations
. الأول هو رمز عقودنا ، والثاني هو رمز الكمأة لمعرفة ما يجب فعله عند نشر العقود إلى blockchain.
بعد ذلك ، نحتاج إلى أخذ رمز العقد الذكي الحالي من npm ، وفي الواقع ، بدء المشروع نفسه:
npm init -y
حسنًا ، كود العقود الذكية من OpenZeppelin موجود في جيبنا في المجلد
node_modules/openzeppelin-solidity/contracts
. ننتقل الآن إلى مجلد
contracts
الرئيسية ، ونحذف جميع الملفات هناك ونضيف الملفات
MyToken.sol
و
MyCrowdsale.sol
- بطبيعة الحال ، ستقوم بتسمية
MyCrowdsale.sol
بشكل مختلف. الأول سيكون عقدًا لـ ERC20 Token الخاص بنا ، والثاني هو عقد ICO الخاص بنا ، والذي سيقبل الكفير ويوزع
MyToken
الأشخاص. قد تكون هذه المقالة قديمة ، ولكن يمكنك دائمًا الاطلاع على الكيفية التي تقترح OpenZeppelin إنشاء عقود
في المستودعات الخاصة بها . هكذا
MyToken.sol
:
pragma solidity ^0.4.23;
جميل - لديك عقد ذكي من رمزك الخاص (فقط قم بتغيير الأسماء في الثوابت)! يمكنك معرفة
MintableToken
الميراث الموجود من
MintableToken
- ولكن كل شيء بسيط قدر الإمكان هناك. هذا رمز مميز يمكن إصداره (من الإنجليزية "Mint" - إلى mint) ، ويحق للمالك فقط إصداره ، حيث أن
MintableToken
موروث أيضًا من
Ownable
. أيضًا ، ترث
MintableToken
أيضًا من فئات رموز ERC20 التي كتبها OpenZeppelin ، والتي يتم فيها تنفيذ واجهة 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
بفضل عمل OpenZeppelin - إنها رائعة.
والآن دعنا ننتقل إلى الجزء الرئيسي من ICO - نحن بحاجة إلى قبول الكفير وإعطاء
MyToken
! هذا ما
MyCrowdsale.sol
:
pragma solidity ^0.4.23;
هكذا ، ماذا معنا؟ ماذا يا أولاد عقود ذكية؟ يرث بيعنا العام للرموز المميزة ثلاثة من أكثر الخصائص شيوعًا: فهي تحتوي على غطاء صلب لا يمكن جمعه بعد الآن ؛ غطاء ناعم ، لا يجمع الاسترات التي يتم إرجاعها ؛ بداية الوقت ونهاية بيع الرمز المميز. في الواقع ، ما هو المطلوب أيضا من أجل السعادة؟
المبرمجون ، لاحظوا كيف يتم ترتيب
MyCrowdsale
فئات الوراثة المتعددة في صف واحد والحصول على الحجج من المُنشئ الرئيسي لـ
MyCrowdsale
. أيضا ، نتحقق من أن القرص الصلب أعلى من المفتاح الوظيفي - Ales Gut! أيضًا ، لا
MyCrowdsale
المعلمات
MyCrowdsale
في مُنشئ
MyCrowdsale
- سنقوم
MyCrowdsale
في مرحلة نشر العقد في الكمأة.
هذا كل شيء - لديك عقود جاهزة من رمز ERC20 الخاص بك وحتى عقد ICO الذكي ، والذي تم تكوينه وفقًا لرغبتك ويمنحك رموزك الخاصة بالكفير. كما أنه مدعوم من جميع محافظ ERC20 - خطأ! دعنا ننتقل إلى الاختبارات اليدوية والنشر.
الهجرات
كما قلت سابقًا ، سنختبر بشكل تسلسلي على ثلاث شبكات blockchain ، لكن عملية الاختبار باستخدام الأقلام ستكون دائمًا هي نفسها. لنبدأ بـ
testrpc
، ثم ننتقل إلى
geth --testnet
. المصابيح الأمامية سو ، لقد كتبنا للتو الرمز ، دعونا نحاول تجميعه. في مجلد المشروع ، اكتب:
truffle compile
إذا تم تجميع كل شيء دون مشاكل ، فسترى
build
، الذي سيحتوي على krakozyab للكمأة بحيث يمكنه تضمين الرمز الثانوي لعقودك الذكية في blockchain. قبل نشر العقود الذكية ، نحتاج إلى إخبار الكمأة بما يجب القيام به على الإطلاق. يُطلق على نشر الكمأة للعقود الذكية الهجرة - حسنًا ، دعنا نتمسك بهذا المصطلح. انتقل إلى
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 من الرموز المميزة حديثًا) ؛ المحفظة ، حيث سيأتي الكفير الذي تم الحصول عليه من البيع ؛ غطاء صلب وغطاء ناعم. يرجى ملاحظة أن
openingTime
يجب أن يكون دائمًا بعد وقت الكتلة الحالية في blockchain - وإلا لن يتم حظر عقدك الذكي بسبب التحقق من الحالة في
TimedCrowdsale
. لقد خطوت في هذا أشعل النار ، ولا يمكن خصم المعاملات الفاشلة على الإطلاق. قم بتغيير هذه الثوابت كما يحلو لك.
الخطوة التالية هي بالتحديد نشر العقود الذكية. لا يوجد شيء مثير للاهتمام هنا: لدينا كائن
deployer
ينشر قطع أثرية ذكية للعقد ويمرر الحجج هناك. لاحظ أن MyToken يتم
MyToken
أولاً ، وبعد ذلك فقط
MyCrowdsale
- ويتم تمرير عنوان الأول في الثانية كوسيطة.
ثم الشيء الأكثر إثارة للاهتمام هو ما لا يكتبون عنه سواء في التوثيق أو في الكتب. عندما تقوم بإنشاء
MyToken
من محفظة ، تصبح هذه المحفظة هي مالك
MyToken
في فئة
Ownable
- يحدث نفس الشيء مع
MyCrowdsale
. إذا قمت بالتعمق في
MintableToken
، يمكنك أن ترى أن
Owner
فقط هو من يمكنه سك النقود! ومن هو مالك
MyToken
؟ هذا صحيح: العنوان الذي أزعجه. ومن سيرسل طلبات سك النقود؟ تصحيح: عقد
MyCrowdsale
الذكي. دعني أذكرك بأن العنوان الذي أنشأ
MyToken
و
MyCrowdsale
مختلفان.
لذلك ، فإننا نضيف خطوة النشر الثالثة غير الأرثوذكسية ، حيث يستدعي العنوان الذي تحدى العقود (
web3.eth.accounts[0]
) وظيفة
transferOwnership
في عقد
MyToken
يمتلك
MyToken
ويمكنه عمل سك النقود المعدنية. ولا يزال
MyCrowdsale
تحت ملكية
web3.eth.accounts[0]
- لذلك يتم تجميع كل شيء.
ملاحظة حول web3.eth.accounts[0]
: عند نشر عقد ذكي ، تأكد من أن geth أو testrpc لديهم المحفظة الصحيحة في web3.eth.accounts[0]
- لا تفقد المفتاح الخاص له ، على الرغم من أن هذا لا يضر بك ، ولكن فجأة سيحتاج المالك للقيام بشيء في وقت لاحق ، ولكن المفتاح لم يعد هناك؟
في testrpc
، كقاعدة ، يتم إنشاء الحسابات على الفور عند بدء التشغيل ويتم فتحها على الفور ؛ ومع ذلك ، في اختبار و blockchain حقيقي للهواء ، يجدر إنشاء حساب من خلال personal.newAccount()
- ثم استكمل هذا العنوان عبر Faucet على اختبار blockchain أو الكفير الحقيقي في blockchain الحقيقي. لا تفقد كلمة المرور والمفاتيح الخاصة.
يمكنك أيضًا إضافة محفظة موجودة إلى حساباتك عن طريق الاتصال بـ web3.personal.importRawKey('pvt_key', 'password')
، ولكن لهذا تحتاج إلى استدعاء --rpcapi="db,eth,net,web3,personal,web3"
المعلمة الإضافية --rpcapi="db,eth,net,web3,personal,web3"
. أعتقد أنك ستكتشف ذلك.
الاختبار والنشر
نعم ، العقود جاهزة ، والترحيل مكتوب ، ويبقى فقط للنشر والتحقق. تتم إدارة كل من
geth
(اختبار وحقيقي) و
testrpc
بنفس الطريقة من خلال
truffle console
- لذلك
testrpc
طريقة التحقق لـ
testrpc
فقط بكيفية تمكين
geth
بعد ذلك. وهكذا ، أطلقنا اختبار بلوكشين الكفير المحلي:
testrpc
أم ... هذا كل شيء. يمكنك محاكاة بلوكشين الكفير محليًا.
ومن أجل geth --testnet --rpc
الأثير للاختبار ، بدلاً من هذا الأمر ، ستحصل على - geth --testnet --rpc
. ومن أجل الانتشار في blockchain الحقيقي للأثير ، يمكنك ببساطة geth --rpc
. هناك حاجة إلى علامة --rpc
بحيث يمكن توصيل الكمأة. خطوات النشر والاختبار التالية هي نفسها تقريبًا لجميع الأنواع الثلاثة من blockchain. الشيء الوحيد هو أنه بعد تشغيل الاختبار أو blockchain الحقيقي عبر geth
، سيبدأ في مزامنة الكتل - وهذا يمكن أن يستغرق ما يصل إلى 4-5 ساعات على اتصال إنترنت جيد. ملاحظة حول هذا كانت في بداية المقال. قبل نشر العقود الذكية ، أوصي بانتظار المزامنة الكاملة. أيضا ، يزن blockchain في منطقة 60-100 جيجا بايت ، لذلك قم بإعداد مساحة القرص لهذا.
أيضًا ، تأكد من إلغاء تأمين web3.eth.accounts[0]
. يمكنك عادةً تسجيل testrpc
في وحدة التحكم ، التي تفتح على الفور ، أو في نافذة طرفية منفصلة في وحدة التحكم ، والتي تفتح عبر geth console
eth.unlockAccount(eth.accounts[0], ", ", 24*3600)
: eth.unlockAccount(eth.accounts[0], ", ", 24*3600)
- سيؤدي هذا إلى فتح حسابك ، والذي يجب أن ينشئ عقدًا ذكيًا
الآن افتح نافذة طرفية جديدة (لا نغلق
testrpc
- يجب أن تعمل) واكتبها في مجلد المشروع:
truffle migrate --reset
سيجمع هذا الأمر السحري عقدًا ذكيًا (أي أنك لا تحتاج إلى كتابة
truffle compile
كل مرة) ونشره على خادم blockchain الصغير الموجود محليًا. تجدر الإشارة إلى أنه إذا قام
testrpc
بذلك على الفور ، فإن الاختبار و blockchains الحقيقي سيشمل المعاملة في الكتل التالية لفترة أطول. بعد ذلك ، يجب أن تبصق شيئًا كهذا في وحدة التحكم:
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
عناوين العقود الذكية
MyToken
و
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) {
بشكل عام ، يمكن أن يجعل هذا سعر الرمز المميز يعتمد على وقت الشراء - كلما زادت المسافة في الغابة ، زادت تكلفة الرموز المميزة. لا تخف من تجربة بعض ميزات العقود الذكية وإعادة كتابتها - إنها ممتعة!