قم بإنشاء رمز ERC-20

هذا هو برنامج Solidity التعليمي الثاني الخاص بنا ، إذا فاتتك ، ألق نظرة على مقدمة حول Solidity حيث نرشدك عبر بعض أساسيات لغة البرمجة هذه لـ Ethereum blockchain.

نشرح قليلاً حول كيفية عمل Solidity ، وكيف يتم تنظيمها ، ونبدأ برمز بسيط لكتابة عقد ذكي “Hello World”.

في هذا البرنامج التعليمي ، نتعمق أكثر ونعلمك الكود لنشر رمز Ethereum ERC-20 الخاص بك. (هنا لدينا رمز Blockonomi ).

إيثيريوم & طفرة ICO

يرمز ICO إلى عرض العملة الأولي وهو نوع من التمويل باستخدام العملات المشفرة. في ICO ، تُباع كمية من العملات المشفرة في شكل “توكنز” (“عملات معدنية”) للمضاربين أو المستثمرين ، في مقابل عطاء قانوني أو عملات مشفرة أخرى مثل البيتكوين أو الإيثيريوم.

يتم الترويج للرموز المميزة المباعة كوحدات وظيفية مستقبلية للعملة إذا أو عندما يتم تحقيق هدف تمويل ICO وبدء المشروع.

تحدثنا بالفعل عن كيفية فتح العقود الذكية لعالم جديد تمامًا للمطورين للإبداع والابتكار. ومع ذلك ، احتاج هؤلاء المطورون إلى طريقة لتمويل مشاريعهم.

وكان الحل هو ICO.

في عام 2017 ، كانت ICO مزدهرة – ظهرت عدد لا يحصى من المشاريع كل يوم بوعود جامحة بما يريدون تحقيقه ، واستغلها المستثمرون.

منذ ذلك الحين ، هدأت الأمور مع نضوج المساحة واختفاء المستثمرين ، وفشل العديد من عمليات الطرح الأولي للعملات في الوفاء بما وعد به ، ولكن هذه قصة لمنشور آخر – نحن هنا لمناقشة الجانب الفني.

ما هو الرمز المميز?

الرموز هي في الأساس عقود ذكية تعيش على Ethereum Blockchain ، ويمكن أن يكون لها استخدامات وأغراض.

لا يقتصر الرمز المميز على دور معين. يمكن أن تؤدي الكثير من الأدوار في نظامها البيئي الأصلي. إليك قائمة ببعض الأدوار التي يمكن أن تقوم بها الرموز المميزة.

  • رسوم: يمكن أن يكون الرمز المميز بمثابة بوابة إلى Dapp. في الأساس ، من أجل الوصول إلى Dapp ، ستحتاج إلى الاحتفاظ بالرموز.
  • حقوق التصويت: قد تؤهل الرموز المميزة أصحابها للحصول على حقوق تصويت معينة. فكر في EOS ، حيث سيسمح لك الاحتفاظ برموز EOS بالتصويت لمنتجي الكتل. تهدف EOS Blockchain إلى أن تصبح نظام تشغيل لامركزيًا يمكنه دعم التطبيقات اللامركزية على نطاق صناعي.
  • تبادل القيمة: هذا هو أحد الأدوار الأكثر شيوعًا للرموز داخل النظام البيئي. يمكن أن تساعد الرموز في إنشاء نظام اقتصادي داخلي داخل التطبيق.
  • تحسين تجربة المستخدم: يمكن للرمز المميز أيضًا تمكين أصحابه من إثراء تجربة المستخدم داخل حدود بيئة معينة. على سبيل المثال. في Brave (متصفح ويب) ، سيحصل حاملو BAT (الرموز المميزة المستخدمة في Brave) على حقوق إثراء تجربة العملاء باستخدام الرموز المميزة الخاصة بهم لإضافة إعلانات أو خدمات أخرى قائمة على الاهتمام على نظام Brave الأساسي.
  • عملة: يمكن استخدامه كمخزن للقيمة يمكن استخدامه لإجراء المعاملات داخل وخارج النظام البيئي المحدد.

ما هو ERC-20?

ERC-20 هو معيار تقني يستخدم للعقود الذكية على Ethereum blockchain لتنفيذ الرموز المميزة. غالبية الرموز الصادرة على Ethereum blockchain متوافقة مع ERC-20.

ERC-20 هو معيار بروتوكول يحدد قواعد ومعايير معينة لإصدار الرموز على شبكة Ethereum. في “ERC-20” ، يرمز ERC إلى Ethereum Request For Comments و 20 يرمز إلى رقم معرف فريد لتمييز هذا المعيار عن الآخرين.

لتبسيط الأمر ، يعد ERC-20 دليلًا للقواعد واللوائح التي ستساعد في إنشاء مخطط للعقود الذكية المستندة إلى Ethereum لإنشاء الرموز المميزة الخاصة بهم.

الرمز المميز على Ethereum هو في الأساس مجرد عقد ذكي يتبع بعض القواعد العامة – أي أنه ينفذ مجموعة قياسية من الوظائف التي تشترك فيها جميع عقود الرمز المميز الأخرى ، مثل transferFrom (address _from، address _to، uint256 _tokenId) و BalanceOf (عنوان _ المالك).

لذا فإن الرمز المميز هو مجرد عقد يتتبع من يمتلك مقدار هذا الرمز المميز ، وبعض الوظائف حتى يتمكن هؤلاء المستخدمون من نقل الرموز المميزة الخاصة بهم إلى عناوين أخرى.

لماذا يعتبر معيار ERC-20 مهمًا جدًا?

نظرًا لأن جميع الرموز المميزة لـ ERC-20 تشترك في نفس مجموعة الوظائف بنفس الأسماء ، فيمكن التفاعل معها جميعًا بالطرق نفسها.

هذا يعني أنه إذا قمت بإنشاء تطبيق قادر على التفاعل مع رمز ERC-20 واحد ، فإنه قادر أيضًا على التفاعل مع أي رمز مميز ERC-20. بهذه الطريقة يمكن بسهولة إضافة المزيد من الرموز المميزة إلى تطبيقك في المستقبل دون الحاجة إلى ترميز مخصص. يمكنك ببساطة توصيل عنوان عقد الرمز المميز الجديد ، والازدهار ، يحتوي تطبيقك على رمز مميز آخر يمكنه استخدامه.

سيكون أحد الأمثلة على ذلك هو التبادل. عندما يضيف التبادل رمزًا مميزًا جديدًا من طراز ERC-20 ، فإنه يحتاج فقط إلى إضافة عقد ذكي آخر يتحدث إليه. يمكن للمستخدمين إخبار هذا العقد بإرسال الرموز المميزة إلى عنوان محفظة البورصة ، ويمكن للبورصة إخبار العقد بإرسال الرموز المميزة مرة أخرى إلى المستخدمين عندما يطلبون السحب.

يحتاج التبادل إلى تنفيذ منطق النقل هذا مرة واحدة فقط ، ثم عندما يريد إضافة رمز ERC-20 جديد ، فإن الأمر يتعلق ببساطة بإضافة عنوان العقد الجديد إلى قاعدة البيانات الخاصة به.

لنبدأ في إنشاء رمز مميز

سوف نستخدم Remix IDE لتطوير العقد الذكي لرمز ERC-20 الخاص بنا.

Remix هي أداة عبر الإنترنت تتيح لك كتابة عقد Solidity الذكي ، ثم نشره وتشغيله.

فقط اذهب إلى https://remix.ethereum.org من المستعرض الخاص بك ويمكننا بدء الترميز.

انقر فوق الزر Solidity ، ثم زر Plus في الزاوية اليسرى العليا.

سأطلق عليه اسم “BlockonomiToken” ، يمكنك اختيار أي اسم تريده لعملة رقمية خاصة بك.

جميل ، كل شيء جاهز الآن.

قواعد رمز ERC-20

تتبع الرموز المميزة ERC-20 قائمة من القواعد بحيث يمكن مشاركتها أو استبدالها برموز أخرى أو نقلها إلى محفظة تشفير.

يتكون معيار ERC20 من 3 قواعد اختيارية و 6 قواعد إلزامية.

لوضعها في المصطلحات العادية ، إذا قمت بتضمين وظائف معينة في العقد الذكي للرمز المميز ، فأنت متوافق مع ERC20. إذا لم تقم بتضمين الوظائف الإلزامية ، فأنت لست ERC20.

القواعد الإلزامية هي كما يلي:

  1. إجمالي العرض
  2. توازن من
  3. نقل
  4. تحويل من
  5. اعتماد
  6. مخصص

من ناحية أخرى ، القواعد الاختيارية هي:

  1. اسم الرمز
  2. رمز
  3. عشري (حتى 18)

من الشائع تحديد هذه القواعد في الواجهة. لا يوجد شيء يسمى الواجهة في Solidity ، إنه مجرد عقد ذكي آخر. لحسن الحظ ، يمكن للمرء أن يرث العقود الذكية في لغة برمجة Solidity.

الميراث في الصلابة

في Solidity ، الوراثة تشبه إلى حد كبير لغات برمجة الكائنات الموجهة الكلاسيكية. ستكتب أولاً عقدك الأساسي وتخبر أن عقدك الجديد سيرث من العقد الأساسي.

عقد IBank {

// رمز العقد الأساسي…

}

عقد البنك هو IBank {

// رمز العقد الموروث…

}

تحتاج أيضًا إلى معرفة أن Solidity تدعم الميراث المتعدد عن طريق نسخ الكود بما في ذلك تعدد الأشكال.

جميع استدعاءات الوظائف افتراضية ، مما يعني أنه يتم استدعاء الوظيفة الأكثر اشتقاقًا ، إلا إذا تم تقديم اسم العقد صراحة.

عندما يرث العقد من عدة عقود ، يتم إنشاء عقد واحد فقط على blockchain ، ويتم نسخ الرمز من جميع العقود الأساسية في العقد الذي تم إنشاؤه.

دعنا نعود إلى رمز ERC-20 الخاص بنا. لدينا قواعد إلزامية من أجل إنشاء رمز ERC-20.

سنعرّفها على أنها 6 وظائف ونكتبها في الواجهة. بعد ذلك ، سيرث عقد الرمز المميز لدينا واجهة الاستدعاء هذه.

سيحتاج الرمز الخاص بك أن يبدو مثل هذا.

واجهة العقد ERC20 {

وظيفة totalSupply ()

عامة

رأي

عوائد (uint) ؛

وظيفة BalanceOf (عنوان الرمز المميز)

عامة

رأي

المرتجعات (رصيد uint) ؛

بدل الوظيفة

(العنوان tokenOwner ، عنوان المنفق)

عامة

رأي

العوائد (غير المتبقية) ؛

نقل الوظيفة (العنوان إلى الرموز المميزة) للجمهور

العوائد (نجاح منطقي) ؛

الموافقة على الوظيفة (عنوان المنفق ، رموز uint) عامة

العوائد (نجاح منطقي) ؛

نقل الوظيفة من

(العنوان من ، العنوان إلى ، الرموز المميزة) عام

العوائد (نجاح منطقي) ؛

نقل الحدث (عنوان مفهرس من ، عنوان مفهرس إلى ، رموز uint) ؛

الموافقة على الحدث (عنوان tokenOwner المفهرس ، عنوان المنفق المفهرس ، رموز uint) ؛

}

عقد الرمز المميز

دعونا ننشئ عقدنا المميز. اكتب اتفافية {}

الآن سوف ننتقل إلى 3 قواعد اختيارية.

على الرغم من أنه ليس من الضروري تسمية الرموز الخاصة بك ، فلا يزال من المهم منحها هوية.

التالي لدينا رموز. نحن ببساطة لا نستطيع التقليل من أهميتها. يساعد الرمز الجذاب في تحسين العلامة التجارية.

أخيرًا ، لدينا قابلية القسمة التي ستساعدنا في تحديد أقل قيمة ممكنة للرمز المميز. تعني قابلية القسمة على 0 أن أقل قيمة للرمز هي 1. أما القابلية للقسمة 2 ، من ناحية أخرى ، فتعني أن أقل قيمة لها ستكون 0.01. الحد الأقصى المسموح به لعدد المنازل العشرية هو 18. 18 رقمًا عشريًا هي القيمة الافتراضية المقترحة بشدة ، تجنب تغييرها

دعونا نحددها ونبدأ في المُنشئ.

BlockonomiToken هو ERC20Interface {

سلسلة الاسم العام ؛

سلسلة الرمز العام ؛

uint8 الكسور العشرية العامة ؛

منشئ () عام {

الاسم = "BlockonomiToken"؛

الرمز = "BKM"؛

الكسور العشرية = 18 ؛

}

}

يحتاج رمزنا أيضًا إلى توريد أولي ، وبعض السجلات لجميع الأرصدة. يمكننا تخزين هذه المعلومات في مجموعة.

في المنشئ ، سنبدأ عقدنا برموز التوريد الأولية لمنشئ العقد (أي المرسل msg). أضف هذه الأسطر إلى الكود الخاص بنا وسنناقش الغرض من كل منهم.

BlockonomiToken هو ERC20Interface {

سلسلة الاسم العام ؛

سلسلة الرمز العام ؛

uint8 الكسور العشرية العامة ؛

uint256 public _totalSupply؛

تعيين (العنوان => uint) أرصدة ؛

تعيين (العنوان => تعيين (العنوان => uint)) مسموح به ؛

منشئ () عام {

الاسم = "BlockonomiToken"؛

الرمز = "BKM"؛

الكسور العشرية = 18 ؛

_totalSupply = 100000000000000000000000000 ؛

أرصدة [msg.sender] = _totalSupply ؛

إرسال التحويل (العنوان (0)، msg.sender، _totalSupply) ؛

}

}

أنواع بيانات الصلابة

كما ترى ، يحتوي _totalSupply على ملف uint256 نوع البيانات والأرقام العشرية uint8.

Solidity هي لغة مكتوبة بشكل ثابت ، مما يعني أن نوع كل متغير (حالة ومحلية) يحتاج إلى تحديد في وقت الترجمة. يوفر Solidity العديد من الأنواع الأولية التي يمكن دمجها لتشكيل أنواع معقدة.

دعونا نناقش عن الأعداد الصحيحة اكتب الآن.

يمكن أن تكون الأعداد الصحيحة int أو uint: أعداد صحيحة موقعة وغير موقعة بأحجام مختلفة. إذا كنت معتادًا على نظرية علوم الكمبيوتر أو كنت تعرف الفرق بين الأعداد الصحيحة الموقعة وغير الموقعة في لغة C ، فكل شيء هو نفسه تمامًا في Solidity.

إذا لم تكن كذلك ، فيمكننا قول ذلك بدون إشارة هو عدد صحيح لا يمكن أن يكون سالبًا! التوقيع من ناحية أخرى يمكن أن يكون سالبًا وإيجابيًا ، لكننا سنستخدم الوحدات فقط في عقدنا.

الكلمات الرئيسية من uint8 إلى uint256 بخطوات 8 (بدون إشارة من 8 حتى 256 بت) ومن int8 إلى int256. uint و int اسمان مستعاران لـ uint256 و int256 على التوالي.

تحدثنا أننا سنخزن الأرصدة في نوع من المصفوفة. حسنًا ، الحل الأفضل هو استخدام جداول التجزئة ، أو في تعيينات Solidity.

نحن في الأساس على الخريطة تبوك (هذا نوع البيانات أيضًا) إلى uint.

msg.sender (العنوان): مرسل الرسالة (المكالمة الحالية)

المرسل msg سيكون الشخص الذي يتصل حاليًا بالعقد.

لاحقًا ، ستتعامل على الأرجح مع العقود المرتبطة بالعقود. في هذه الحالة ، سيكون العقد الذي يُنشئ المكالمة هو المرسل msg.

التعيينات

يتم الإعلان عن أنواع التعيين كـ رسم الخرائط(_نوع المفتاح => _ValueType). هنا _KeyType يمكن أن يكون أي نوع تقريبًا باستثناء التعيين والمصفوفة ذات الحجم الديناميكي والعقد والتعداد والبنية. يمكن أن يكون _ValueType في الواقع أي نوع ، بما في ذلك التعيينات.

يمكن النظر إلى التعيينات على أنها جداول تجزئة يتم تهيئتها افتراضيًا بحيث يوجد كل مفتاح محتمل ويتم تعيينه إلى قيمة يكون تمثيل البايت لها عبارة عن أصفار: القيمة الافتراضية للنوع. ينتهي التشابه هنا ، على الرغم من ذلك: لا يتم تخزين البيانات الأساسية فعليًا في التعيين ، فقط تجزئة keccak256 تستخدم للبحث عن القيمة.

لهذا السبب ، لا تحتوي التعيينات على طول أو مفهوم لمفتاح أو قيمة يتم “تعيينها”.

يُسمح بالتعيينات فقط لمتغيرات الحالة (أو كنوع تخزين مرجعي في الوظائف الداخلية).

من الممكن وضع علامة على التعيينات عامة وجعل Solidity تنشئ أداة جمع. سيصبح _KeyType معلمة مطلوبة لـ getter وسيعيد _ValueType.

يمكن أن يكون _ValueType تعيينًا أيضًا. سيكون لدى getter معلمة واحدة لكل _KeyType ، بشكل متكرر.

الأحداث

blockchain هي قائمة الكتل التي هي في الأساس قوائم المعاملات. كل معاملة لها إيصال مرفق يحتوي على صفر أو أكثر من إدخالات السجل. تمثل إدخالات السجل نتيجة الأحداث التي تم إطلاقها من عقد ذكي.

في الكود المصدري لـ Solidity ، لتعريف حدث ما ، يمكنك تمييزه عن طريق تسبقه بامتداد حدث الكلمة الرئيسية (مماثلة في الاستخدام للكلمة الرئيسية للوظيفة). ص

ثم تقوم باستدعاء أو إطلاق الحدث في جسم أي وظيفة ترغب في إحداثها لتوليد الحدث. (أشك في وجود صيغة معيارية لها). يجوز لك إطلاق أحداث من أي وظيفة باستخدام ينبعث كلمة رئيسية.

واجهة ERC-20

دعنا ننفذ واجهة ERC-20 الآن. للقيام بذلك ، نحتاج إلى كتابة رمز لجميع وظائفنا الإلزامية الست.

1. إجمالي العرض

يحدد العدد الإجمالي لرموز ERC-20 التي تم إنشاؤها. الغرض من هذه الطريقة هو تحديد العدد الإجمالي للرموز المميزة التي تدور حول النظام البيئي.

وظيفة totalSupply ()

عامة

رأي

عوائد (uint)

{

return _totalSupply – الأرصدة [العنوان (0)]؛

}

2. التوازن 

تُرجع عدد الرموز المميزة التي يمتلكها عنوان معين ، في هذه الحالة ، مالك العقد في حسابه.

وظيفة BalanceOf (عنوان الرمز المميز)

عامة

رأي

العوائد (رصيد غير مستخدم)

{

أرصدة العودة [tokenOwner] ؛

}

3. البدل

من أجل تنفيذ الصفقة ، فإن أحد أهم البيانات التي يجب أن يعرفها العقد هو رصيد المستخدم. بعد كل شيء ، يجب أن يكون لدى المستخدم الحد الأدنى من الرموز المطلوبة لإجراء المعاملة.

لهذا السبب ، يتضمن عقد ERC-20 أيضًا وظيفة البدل (). إذا لم يكن لدى المستخدم الحد الأدنى المطلوب لعدد الرموز ، فإن الوظيفة تلغي المعاملة.

بدل الوظيفة

(العنوان tokenOwner ، عنوان المنفق)

عامة

رأي

العوائد (غير المتبقية)

{

العودة المسموح بها [tokenOwner] [المنفق] ؛

}

4. الموافقة

بمجرد التحقق من الرصيد ، يمكن لمالك العقد منح موافقته للمستخدم لجمع العدد المطلوب من الرموز من عنوان العقد.

تتحقق وظيفة الموافقة أيضًا من المعاملة مقابل إجمالي المعروض من الرموز للتأكد من عدم وجود أي شيء مفقود أو إضافي.

بمعنى آخر ، تتأكد من أن التزوير مستحيل.

الموافقة على الوظيفة (عنوان المنفق ، رموز uint) عامة

عائدات

(نجاح منطقي)

{

مسموح [msg.sender] [spender] = الرموز المميزة ؛

إرسال الموافقة (المرسل ، المنفق ، الرموز) ؛

عودة صحيحة؛}

مكتبة الرياضيات الآمنة

من أجل تنفيذ وظيفتين متبقيتين بشكل صحيح ، نحتاج إلى مكتبة الرياضيات الآمنة.

تغلف Safe Math Library العمليات الحسابية في Solidity مع فحوصات تجاوز السعة الإضافية.

العمليات الحسابية في Solidity التفاف على الفائض. يمكن أن ينتج عن ذلك أخطاء بسهولة ، لأن المبرمجين يفترضون عادةً أن تجاوز السعة يؤدي إلى حدوث خطأ ، وهو السلوك القياسي في لغات البرمجة عالية المستوى.

يستعيد Safe Math هذا الحدس عن طريق التراجع عن المعاملة عندما تتجاوز العملية.

يؤدي استخدام هذه المكتبة بدلاً من العمليات غير المحددة إلى القضاء على فئة كاملة من الأخطاء ، لذا يوصى باستخدامها دائمًا.

كل ما علينا القيام به الآن هو نسخ هذا الرمز فوق عقدنا ، ثم ورثه.

عقد SafeMath {

function safeAdd (uint a، uint b) المرتجعات النقية العامة (uint c) {

ج = أ + ب ؛

تتطلب (c >= أ) ؛

}

function safeSub (uint a، uint b) المرتجعات النقية العامة (uint c) {

تتطلب (ب <= أ) ؛ ج = أ – ب ؛ } function safeMul (uint a، uint b) عوائد نقية عامة (uint c) {c = a * b؛ تتطلب (أ == 0 || ج / أ == ب) ؛ } function safeDiv (uint a، uint b) عوائد نقية عامة (uint c) {تتطلب (b > 0)؛

ج = أ / ب ؛

}

}

لا تنس أن ترثها.

عقد BlockonomiToken هو ERC20Interface و SafeMath

5. التحويل

لذلك ، بعد أن تم الانتهاء من جميع عمليات الفحص وأصبح العقد يعرف أن المستخدم لديه المقدار المطلوب من الرموز المطلوبة لإنجاز المعاملة ، يمكن لمالك العقد إرسال الرموز المميزة لهم باستخدام وظيفة النقل ().

تتيح هذه الوظيفة لمالك العقد إرسال مبلغ معين من الرمز المميز إلى عنوان آخر تمامًا مثل معاملة العملة المشفرة التقليدية. ، وتسمح بنقل عدد معين من الرموز المميزة من إجمالي التوريد إلى حساب المستخدم.

نقل الوظيفة (العنوان إلى ، رموز uint)

عامة

العوائد (النجاح المنطقي)

{

balances [msg.sender] = safeSub (الأرصدة [msg.sender] ، الرموز) ؛

أرصدة [إلى] = safeAdd (أرصدة [إلى] ، رموز) ؛

إرسال التحويل (المرسل ، إلى ، الرموز المميزة) ؛

العودة صحيح

}

6. التحويل من

لقد قمنا بالفعل بتغطية وظيفة النقل ، فلماذا لدينا وظيفة أخرى?

حسنًا ، دعنا نأخذ مثالاً لنرى لماذا تعد TransferFrom إضافة رائعة لعقد ERC20.

علينا جميعًا دفع مبلغ من المال كل شهر كالساعة. يمكن أن يكون الإيجار والفواتير وما إلى ذلك. لا تحتاج حقًا إلى دفع كل هذه المبالغ بنفسك. يمكنك دائمًا إعداد نظام دفع تلقائي مع البنوك الخاصة بك لرعاية هذه المدفوعات.

هذا ما يتيح لك TransferFrom (). يساعدك على أتمتة تحويلات الدفع إلى حساب معين.

نقل الوظيفة من

(عنوان من ، عنوان إلى ، رموز uint)

عامة

العوائد (النجاح المنطقي)

{

أرصدة [من] = safeSub (أرصدة [من] ، رموز) ؛

مسموح [من] [msg.sender] = safeSub (مسموح به [من] [msg.sender] ، الرموز المميزة) ؛

أرصدة [إلى] = safeAdd (أرصدة [إلى] ، رموز) ؛

ينبعث التحويل (من ، إلى ، الرموز) ؛

العودة صحيح

}

الكود الكامل

هذا هو الكود الكامل لرمز Blockonomi الخاص بنا.

صلابة براغما ^ 0.5.0 ؛

// —————————————————————————-

// واجهة ERC Token Standard # 20

//

// —————————————————————————-

واجهة العقد ERC20 {

وظيفة totalSupply () عودة العرض العام (uint) ؛

وظيفة BalanceOf (عنوان tokenOwner) إرجاع العرض العام (رصيد uint) ؛

بدل الوظيفة (العنوان tokenOwner ، العنوان spender) إرجاع العرض العام (uint المتبقي) ؛

نقل الوظيفة (العنوان إلى الرموز المميزة) العوائد العامة (نجاح منطقي) ؛

الموافقة على الوظيفة (عنوان المنفق ، رموز uint) العوائد العامة (نجاح منطقي) ؛

وظيفة نقل من (عنوان من ، عنوان إلى ، رموز uint) العوائد العامة (نجاح منطقي) ؛

نقل الحدث (عنوان مفهرس من ، عنوان مفهرس إلى ، رموز uint) ؛

الموافقة على الحدث (عنوان tokenOwner المفهرس ، عنوان المنفق المفهرس ، رموز uint) ؛

}

// —————————————————————————-

// مكتبة الرياضيات الآمنة

// —————————————————————————-

عقد SafeMath {

function safeAdd (uint a، uint b) المرتجعات النقية العامة (uint c) {

ج = أ + ب ؛

تتطلب (c >= أ) ؛

}

function safeSub (uint a، uint b) المرتجعات النقية العامة (uint c) {

تتطلب (ب <= أ) ؛ ج = أ – ب ؛ } function safeMul (uint a، uint b) عوائد نقية عامة (uint c) {c = a * b؛ تتطلب (أ == 0 || ج / أ == ب) ؛ } function safeDiv (uint a، uint b) عوائد نقية عامة (uint c) {تتطلب (b > 0)؛

ج = أ / ب ؛

}

}

عقد BlockonomiToken هو ERC20Interface و SafeMath {

سلسلة الاسم العام ؛

سلسلة الرمز العام ؛

uint8 الكسور العشرية العامة ؛ // 18 عشرية هي القيمة الافتراضية المقترحة بشدة ، تجنب تغييرها

uint256 public _totalSupply؛

تعيين (العنوان => uint) أرصدة ؛

تعيين (العنوان => تعيين (العنوان => uint)) مسموح به ؛

/ **

* وظيفة منشئ

*

* يبتدئ العقد مع رموز التوريد الأولية لمنشئ العقد

* /

منشئ () عام {

الاسم = "BlockonomiToken"؛

الرمز = "BKM"؛

الكسور العشرية = 18 ؛

_totalSupply = 100000000000000000000000000 ؛

أرصدة [msg.sender] = _totalSupply ؛

إرسال التحويل (العنوان (0)، msg.sender، _totalSupply) ؛

}

function totalSupply () إرجاع العرض العام (uint) {

return _totalSupply – الأرصدة [العنوان (0)]؛

}

function BalanceOf (address tokenOwner) إرجاع العرض العام (uint Balance) {

أرصدة العودة [tokenOwner] ؛

}

وظيفة بدل (عنوان رمز مميز ، عنوان سبندر) إرجاع العرض العام (بقي uint) {

العودة المسموح بها [tokenOwner] [المنفق] ؛

}

وظيفة الموافقة (عنوان سبندر ، رموز uint) العوائد العامة (نجاح منطقي) {

مسموح [msg.sender] [spender] = الرموز المميزة ؛

إرسال الموافقة (المرسل ، المنفق ، الرموز) ؛

العودة صحيح

}

نقل الوظيفة (العنوان إلى ، رموز uint) العوائد العامة (النجاح المنطقي) {

balances [msg.sender] = safeSub (الأرصدة [msg.sender] ، الرموز) ؛

أرصدة [إلى] = safeAdd (أرصدة [إلى] ، رموز) ؛

إرسال التحويل (المرسل ، إلى ، الرموز المميزة) ؛

العودة صحيح

}

وظيفة نقل من (عنوان من ، عنوان إلى ، رموز uint) العوائد العامة (نجاح منطقي) {

أرصدة [من] = safeSub (أرصدة [من] ، رموز) ؛

مسموح [من] [msg.sender] = safeSub (مسموح به [من] [msg.sender] ، الرموز المميزة) ؛

أرصدة [إلى] = safeAdd (أرصدة [إلى] ، الرموز) ؛

ينبعث التحويل (من ، إلى ، الرموز) ؛

العودة صحيح

}

}

تهانينا! لقد نجحت في تطوير رمز ethereum الخاص بك.

الخطوة الأخيرة هي النشر على الشبكة الفعلية.

نشر الرمز الخاص بك

للقيام بذلك ، سنحتاج إلى محفظة Metamask.

Metamask هو امتداد يسمح لك بتشغيل Ethereum dApps مباشرة في متصفحك دون تشغيل عقدة Ethereum كاملة.

اذهب إلى https://metamask.io/ من متصفحك (Chrome أو Firefox أو Opera) وأضفه.

قم بإنشاء محفظة جديدة في MetaMask

عندما يتم تثبيت الامتداد ، انقر فوق الرمز في الزاوية اليمنى العليا من متصفحك لبدء إنشاء محفظة.

اقرأ الشروط واقبلها ثم أدخل كلمة مرور قوية وانقر على “إنشاء”.

سترى عبارة أولية مكونة من 12 كلمة. احفظ الكلمات الأولية كملف أو انسخها إلى مكان آمن وانقر على “لقد نسختها في مكان آمن”.

لقد نجحت الآن في إنشاء حساب في MetaMask بعنوان محفظة جديد!

ستلاحظ أن لديك حاليًا 0 ETH في محفظتك. لنشر العقد على شبكة Ethereum ، يحتاج المرء إلى قدر من Ether. لن ننشر عقدنا على الشبكة الرئيسية لأن هذا مجرد عرض توضيحي.

سننشر هذا العقد على شبكة الاختبار. هناك عدد قليل من شبكات Ethereum blockchain التجريبية – Ropsten و Rinkeby و Kovan …

دعنا نستخدم Ropsten في هذا المثال.

تحتاج أولاً إلى بعض الأثير ، أليس كذلك؟ على شبكة الاختبار ، نعمل مع إيثرات مجانية مزيفة. يحتاج المرء فقط للمطالبة ببعض هؤلاء من Faucet.

اذهب إلى: https://faucet.ropsten.be/ , الصق عنوان محفظتك وانقر على “أرسل لي اختبار الأثير”.

بعد بضع ثوانٍ ، سترى بعض ETH في محفظتك.

وضعها على الهواء مباشرة

حان الوقت الآن لجعل كل شيء على قيد الحياة!

انتقل إلى Remix IDE وقم بترجمة العقد. إذا لم تكن هناك أخطاء ، فنحن جاهزون للنشر.

بالنسبة للبيئة ، حدد Injected Web3. سيكتشف تلقائيًا محفظة metamask الخاصة بك.

اضغط على زر النشر.

سيطلب منك Metamask الآن سحب بعض الأموال من محفظتك لشراء هذه المعاملة.

أكد ذلك. ثم ارجع إلى Remix IDE ، وانتبه إلى theTerminal. نرى أن الصفقة كانت ناجحة.

نتيجة لذلك ، حصلنا على تجزئة المعاملات. انقر فوق uri من الجهاز الذي يشبه: ropsten.etherscan.io/

سوف ينتقل بنا إلى etherscan.io – هذا هو مستكشف Ethereum Blockchain وهنا يمكنك تتبع كل ما يجري على الشبكات الرئيسية والاختبارية ، لأن كل شيء متاح للجميع على blockchain بالطبع.

عندما نذهب إلى uri هذا ، سنرى تفاصيل حول معاملتنا. انقر على تجزئة العقد لاستكشاف المزيد.

كل شيء علني على blockchain ، حتى الكود الخاص بنا. مطورو Solidity ليس لديهم مجال للأخطاء!

اضغط على علامة تبويب العقد وسترى الرمز الثانوي المترجم

يمكنك الآن الانتقال إلى Token Tracer للاطلاع على تفاصيل رمز Blockonomi. يمكنك أن ترى 3 قواعد اختيارية حددناها سابقًا.

تحقق الآن من محفظتك. سترى أنه تمت إزالة إيثر الذي دفعناه مقابل نشر العقد الذكي على روبستن.

استنتاج

يختتم هذا البرنامج التعليمي الخاص بنا ، باتباع هذه الخطوات ونماذج التعليمات البرمجية الخاصة بنا ، يجب أن تكون قادرًا على نشر رمز Ethereum ERC-20.

استمتع!

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me