كيفية تجميع ونشر واختبار عقد ذكي على موقع TomoChain testnet

تتكون هذه المقالة من مثال Solidity رموز مصدر العقد الذكية والتعليمات الكاملة إلى:

  • Setup Truffle ، إطار التطوير الأكثر شعبية لـ Ethereum والذي يعمل أيضًا بشكل مثالي مع TomoChain.
  • إنشاء محفظة TomoChain.
  • احصل على مفتاح النسخ الاحتياطي للمحفظة
  • طلب الصندوق إلى محفظة TomoChain التي تم إنشاؤها.
  • استكشاف كتلة مستكشف
  • ترجمة ونشر العقد الذكي الذي تم إنشاؤه إلى TomoChain testnet.
  • ربط Metamask ل testnet TomoChain.
  • قم بإنشاء موقع ويب أمامي واجعله يتفاعل مع عقد TomoChain الذكي من خلال web3.js.

المعرفة المطلوبة

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

ما هو توموشين؟

TomoChain هو شوكة Ethereum التي تؤدي بشكل أفضل بكثير. تم تخفيض وقت الحظر من 15 إلى 2 ثانية فقط ، كما تم إغلاق رسوم المعاملة إلى الصفر.

ونظرًا لأنه شوكة Ethereum ، فإن أي مجموعة تطوير أو لغة برمجة تعمل لصالح Ethereum ستعمل أيضًا مع TomoChain!

تم تطوير TomoChain بواسطة مطور فيتنام blockchain الذي كان رائدًا سابقًا في مشروع NEM الشهير. من المتوقع أن تكون Mainnet مباشرة في Q4'18. على أي حال ، testnet يعمل الآن بالفعل وهو مفتوح بالفعل لأي مطور لاختبار dApp الخاصة به على ذلك دون أي تكلفة.

البدء: التثبيت

هناك تطبيقان نحتاج إلى تثبيتهما عبر npm. الأول هو Truffle ، إطار تطوير Ethereum. سوف نستخدمها لتجميع ونشر عقدنا الذكي على testnet. والثاني هو http-server ، سنستخدمه لإنشاء خادم http بسيط لاختبار موقعنا الأمامي.

$ npm install -g truffle http-server

ثم دعنا نستنسخ مستودع مثال tomochain-dapp على جهازك المحلي. جميع الرموز المطلوبة معبأة داخل المستودع.

git clone git@github.com: nuuneoi / tomochain-dapp-example.git

تثبيت حزمة npm المطلوبة.

$ cd tomochain-dapp-example
تثبيت $ npm

هذا كل شئ. toolchain مترجم الخاص بك جاهز الآن!

إنشاء محفظة TomoChain

لإنشاء محفظة TomoChain ، ما عليك سوى اتباع الخطوات السهلة التالية:

  1. استعرض للوصول إلى https://wallet.tomocoin.io/
  2. انقر على زر + إنشاء شبكة جديدة.

سيكون لديك الآن TomoWallet! سيتم عرض العنوان في الجزء العلوي الأيسر. اكتبها في مكان ما. سوف نستخدمها في العديد من الخطوات أدناه.

سهل ، هاه؟

احصل على مفتاح النسخ الاحتياطي للمحفظة

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

  1. استعرض للوصول إلى https://wallet.tomocoin.io/
  2. انقر فوق قائمة النقاط الثلاث في الموضع العلوي الأيمن وانقر فوق "إظهار مفتاح النسخ الاحتياطي". سترى الحوار برزت مثل هذا.

انسخ الكلمات في الصف الأخير واكتبها في مكان ما. (يجب أيضًا وضع هذه الكلمات في الكود المصدري لدينا في خطوة نشر العقد الذكية أدناه).

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

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

طلب الصندوق

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

  1. استعرض للوصول إلى https://faucet.tomochain.com/
  2. ضع عنوان محفظتك في مربع النص وتأكد من اجتياز اختبار اختبار captcha ، ثم انقر فوق زر طلب 1 TOMO.

انتظر مدة 5 إلى 10 ثوانٍ ثم ... tadaaaa. يجب أن يكون محفظتك الآن قد تم نقل 1 TOMO إليها. دعنا نذهب للتحقق من ذلك.

استكشاف كتلة مستكشف

للتحقق من أحدث رصيد للعنوان ، دعنا نفعل ذلك في Tomoscan على سبيل المثال ، مستكشف TomoChain!

  1. استعرض للوصول إلى https://explorer-testnet.tomochain.com/
  2. في مربع البحث في أعلى اليمين ، أدخل العنوان ثم اضغط على مفتاح الإدخال.
  3. يجب أن يظهر رصيد TOMO كـ 1 TOMO مثل هذا.

نصائح: لا تنظر إلى رصيد TOMO USD لأنه قد يكون محبطًا تمامًا في الوقت الحالي.

الآن تمتلك محفظتك رصيدًا كافيًا للقيام بالأشياء بأكملها في هذا البرنامج التعليمي ، لذا دعونا نمضي قدمًا!

ترجمة ونشر العقد الذكي الذي تم إنشاؤه إلى TomoChain testnet

تتم كتابة التعليمات البرمجية المصدر في مستودع git هذا في إطار Truffle وهو مفيد جدًا. يمكنك ترجمة وفعل الأشياء في سطر أوامر واحد فقط.

انظر إلى الكود المصدري

هذا هو مصدر شفرة صلابة المستخدمة في هذا البرنامج التعليمي. يمكنك العثور عليه في العقود / ملف SimpleContract.sol.

براغما صلابة ^ 0.4.18 ؛
عقد SimpleContract {
    حدث الرصيد المحدث (رصيد uint) ؛
    رصيد uint
    المنشئ () العام {
        // قم بتعيين الرصيد الأولي على 1000
        الرصيد = 1000 ؛
    }
    وظيفة setBalance (uint newBalance) عامة {
        // سقف الرصيد يكون بين 0 إلى 10000 (ضمنا)
        تتطلب (newBalance <= 10000) ؛
        // تعيين توازن جديد
        الرصيد = توازن جديد ؛
        // تنبعث منها حدث
        تنبعث منها الرصيد المحدث (الرصيد) ؛
    }
    دالة getBalance () عوائد المشاهدة العامة (uint) {
        رصيد العائد
    }
}

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

تجميع

لتجميع شفرة المصدر ، فقط اكتب هذا الأمر في دليل المستودع.

ترجمة الكمأة

يجب أن تظهر النتيجة التالية.

تجميع. / العقود / التصورات.
تجميع. / عقود / بسيطة.متابعة.
كتابة التحف ل. / بناء / العقود

الآن تم تجميع عقدك الذكي بالفعل. يتم تخزين التعليمات البرمجية المترجمة في دليل الإنشاء. يمكنك الذهاب للتحقق من ذلك إذا كنت تريد.

إعداد محفظة النشر

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

  1. افتح ملف truffle.js. هنا هو المحتوى في الداخل.
"استخدام صارم"
var HDWalletProvider = require ("truffle-hdwallet-provider")؛
var mnemonic = '
module.exports = {
  الشبكات:
    تطوير: {
      المضيف: "127.0.0.1" ،
      الميناء: 7545 ،
      الغاز: 4000000 ،
      عنوان الشبكة: "*"
    }،
    tomotestnet: {
      المزود: function () {
        إرجاع HDWalletProvider الجديد (ذاكري ، 'https://testnet.tomochain.com') ؛
      }،
      الغاز: 1000000 ،
      network_id: 89
    }
  }
}؛

2. انسخ مفتاح النسخ الاحتياطي الذي تم الحصول عليه في الخطوة السابقة والصقه كقيمة للمتغير ذاكري.

var mnemonic = '

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

نشر

الآن حان الوقت لنشر العقد الذكي على موقع TomoChain testnet! يمكنك نشر العقد الذكي المترجم باستخدام الأمر التالي.

$ الكمأة تهاجر - شبكة tomotestnet

ها هي النتيجة المتوقعة.

باستخدام شبكة "tomotestnet".

تشغيل الترحيل: 1_initial_migration.js
  نشر الهجرات ...
  ... 0x081825424ce179259d661e2cd508b6a3ec5d3c622275168bff3f0d8460348c3f
  الهجرات: 0x65730da7e39d3787723a8949bc7d41e7f0f013ba
حفظ الترحيل الناجح إلى الشبكة ...
  ... 0xd96186343a751f2365d6311d6c7c52d67a86eee04854c40806a628526b0a573a
حفظ القطع الأثرية ...
تشغيل الترحيل: 2_deploy_contracts.js
  نشر SimpleContract ...
  ... 0xe80a4bac1ebbfcdd5170d469aa3998f1ee292227b3c7fa677e108135a7feb705
  SimpleContract: 0xb9cb9aa779c0ae4d6fe8a2292fc61233c5cad4be
حفظ الترحيل الناجح إلى الشبكة ...
  ... 0x1397e27ad32783349568f65397e81f54dd3b1c36aa9405f06a804b271a23a88c
حفظ القطع الأثرية ...

لا تفاجأ إذا لم تكن هذه الشفرة السداسية هي نفس الكود الخاص بي لأنها ستكون مختلفة لكل شخص.

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

حسنًا ، على الرغم من أن هناك الكثير من الأشياء الغريبة التي تمت طباعتها في الوقت الحالي ، إلا أن العنوان الوحيد الذي نحتاج إلى استخدامه في الخطوة الإضافية هو 0xb9cb9aa779c0ae4d6fe8a2292fc61233c5cad4be وهو عنوان عقدنا لـ SimpleContract الذي أنشأناه. يرجى ملاحظة أن عنوان العقد الخاص بك سيكون مختلفًا عن عنوانك لذا يرجى تجاهل عنوان بريدي واستخدام عنوانك بدلاً من ذلك.

اذهب التحقق من معاملة النشر

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

لا يوجد عنصر إجراء في هذا الشأن. فقط أريدك أن تتأكد من أن نشر العقد قد تم بنجاح على TomoChain testnet.

قد تلاحظ بالفعل مدى سرعة خطوة النشر أعلاه. كان يستخدم حوالي 20 ثانية فقط للإنهاء أو 5 ثوان فقط لكل معاملة تم إنشاؤها للتأكيد. سريع جدا !

ربط Metamask ل testnet TomoChain.

سيتم استخدام Metamask كموفر لإنشاء معاملة والتفاعل مع العقد الذكي على testnet. (كما ذكرت سابقًا ، كل شيء يعمل مع Ethereum سيعمل أيضًا مع TomoChain).

ومع ذلك ، TomoChain غير معتمد أصلاً على Metamask. نحتاج إلى تحديد خادم rpc المخصص يدويًا لـ testnet TomoChain. فيما يلي خطوات القيام به:

  1. تثبيت Metamask لمتصفح Chrome

2. انقر على أيقونة Metamask في شريط العنوان. انقر فوق القائمة العلوية اليمنى واختر Custom RPC

3. اكتب https://testnet.tomochain.com في مربع النص RPC ثم انقر فوق حفظ

4. انقر فوق "استعادة من العبارة الأولية" ثم ضع ذاكري من الخطوة أعلاه إلى منطقة نص محفظة البذور. كما لا تنسَ تعيين كلمة المرور لحماية المحفظة من الأشخاص الذين يشاركونك الكمبيوتر معك.

5. يجب أن تكون الآن جيدة. يفترض أن تظهر المحفظة بشكل صحيح في كل من العنوان والتوازن.

يرجى ملاحظة أن وحدة المحفظة هنا هي TOMO ولكن بما أن Metamask لا تعرف TOMO ، فهي تظهر تمامًا مثل ETH كما ترون أعلاه.

تهانينا! Metamask جاهز الآن للتفاعل مع TomoChain testnet!

إنشاء موقع ويب الواجهة الأمامية التفاعل مع العقد الذكية

لقد جاء موقع الويب التجريبي البسيط المستخدم للتفاعل مع العقد الذكي الذي تم نشره جنبًا إلى جنب مع مستودع تخزين tomochain-dapp-example. يمكنك العثور عليه في دليل الويب. الملف الوحيد الذي تحتاج إلى العمل معه هو index.html. الويب جاهز تقريبًا للتشغيل ولكنه لا يزال بحاجة إلى بعض التعديلات. يرجى القيام بالخطوات التالية.

  1. ابحث عن قيمة abi json من build / contracts / SimpleContract.json ، وانسخها واستبدل قيمة abi في index.html بمصفوفة json هذه ، على سبيل المثال ،.
فار أبي = [
    {
      "المدخلات": [] ،
      "مستحق": خطأ ،
      "stateMutability": "غير قابل للدفع" ،
      "النوع": "المنشئ"
    }،
    {
      "مجهول": خطأ ،
      "المدخلات": [
        {
          "مفهرسة": خطأ ،
          "الاسم": "الرصيد" ،
          "النوع": "uint256"
        }
      ]،
      "name": "BalanceUpdated" ،
      "النوع": "الحدث"
    }،
    {
      "ثابت": خطأ ،
      "المدخلات": [
        {
          "الاسم": "newBalance" ،
          "النوع": "uint256"
        }
      ]،
      "الاسم": "setBalance" ،
      "المخرجات": [] ،
      "مستحق": خطأ ،
      "stateMutability": "غير قابل للدفع" ،
      "النوع": "الوظيفة"
    }،
    {
      "ثابت": صحيح ،
      "المدخلات": [] ،
      "الاسم": "getBalance" ،
      "المخرجات": [
        {
          "اسم": ""،
          "النوع": "uint256"
        }
      ]،
      "مستحق": خطأ ،
      "stateMutability": "view" ،
      "النوع": "الوظيفة"
    }
  ].

2. استبدل عنوان العقد بعنوان عقد SimpleContract الخاص بك ، على سبيل المثال ،

var contractAddress = '0xb9cb9aa779c0ae4d6fe8a2292fc61233c5cad4be'؛

3. شفرة المصدر جاهزة الآن. الآن حان الوقت لتدوير خادم http بالانتقال إلى Terminal واكتب الأمر التالي.

$ مؤتمر نزع السلاح على شبكة الإنترنت
خادم المتشعب $.

يتم الآن تشغيل الخادم على المنفذ 8080. يمكنك الآن تصفح الويب الذي تم إنشاؤه من خلال المتصفح على الموقع http: // localhost: 8080 وإجراء اختبار!

اختبار

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

يمكنك إدخال الرصيد الجديد الذي تحتاجه والنقر على زر "تعيين توازن جديد" لضبط القيمة الجديدة.

ونظرًا لأن هذه العملية تتطلب من Metamask إنشاء معاملة لك وتوقيعها ، فسيتم تشغيل Metamask تلقائيًا باستخدام المعلمة المحددة مسبقًا التي تدعو إلى setBalance () في العقد الذكي المنشور. لا تتردد في مراجعة تلك المعلمة Tx ، ثم انقر ببساطة فوق الزر "إرسال".

سيتم تحديث تقدم العملية في المنطقة أدناه. يمكنك أيضًا عرض معلومات المعاملة من صف TxHash إذا كنت ترغب في ذلك.

تجدر الإشارة إلى أن المعاملة أكدت الاتساق في 4 إلى 5 ثوانٍ فقط بعد إنشاء Tx الخاص بك بسرعة فائقة !! (2 ثانية من وقت الكتلة و 2-3 ثوانٍ من زمن انتقال الشبكة.)

تهانينا! تم نشر أول عقد ذكي لك على TomoChain testnet ويمكنك أيضًا التفاعل معه من خلال مزود web3.js البسيط على الواجهة الأمامية للويب!

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

مؤلف

البرنامج التعليمي الذي أنشأته Sittiphol Phanvilai (nuuneoi)