موجات العقود الذكية. التجربة الأولى

الصورة

في أبريل 2018 ، قدم فريق Waves عقوده الذكية غير الكاملة.

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

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

فكرة


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

مكدس التكنولوجيا


Html و JavaScript ( مكتبة Node.js Waves) ، مصدر مفتوح على GitHub وعرض توضيحي للمشروع على Firebase Hosting

العملية


  1. يختار المستخدم مستودع GitHub ويحدد المبلغ الإجمالي للرواتب
  2. يقوم المستخدم بدفع 0.01 Waves (حوالي 0.02 دولار) لحفظ البيانات على blockchain وإنشاء عقد ذكي
  3. يتحقق المستخدم من صحة البيانات ثم يحول مبلغ المرتبات إلى عنوان العقد الذكي
  4. يتم تقاسم الرواتب بين المطورين

التنمية


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

تعمل مكتبة NodeJs (1.4.0) بشكل جيد بالفعل في المتصفحات (باستثناء إنشاء الاسم المستعار) ، ولكن للأسف ، فهي غير متوافقة مع وظائف Google أو React Native حتى الآن ( يعد مطورو Waves بإصلاح هذا قريبًا).

عقد ذكي


يتم إنشاء عقد ذكي لحساب واحد ويتحقق من كل إجراء باستخدام هذا الحساب (باستثناء التحويلات المالية الواردة):

let signature = base58'${currentWallet.keyPair.publicKey}'; match tx { case tx:TransferTransaction => { let employerAddress = addressFromPublicKey(tx.senderPk); let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); let salary = extract(getLong(employerAddress, dateKey)); if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false } case _ => false } 

تحليل العقد الذكي سطرًا تلو الآخر


 let signature = base58'${currentWallet.keyPair.publicKey}'; 

هنا نحفظ المفتاح العام للمحفظة (يجب أن تحتوي جافا سكريبت على متغير CurrentWallet الذي تم إنشاؤه باستخدام الأمر Waves.Seed.create ()) ، بحيث يمكن فقط لحساب العقد الذكي للمحفظة (مشروع المكافأة الذكية في حالتنا) تحويل الأموال.

 match tx { case tx:TransferTransaction => {some validations} case _ => false } 

هذا هو البناء الأساسي لأي عقد Waves الذكي ، ويخبرنا أن هذا العقد يحظر أي نشاط بخلاف تحويل الأموال (TransferTransaction). وبالتالي ، بعد إنشاء العقد ، من المستحيل تغيير البيانات على المطورين (DataTransaction) أو تغيير العقد الذكي نفسه (SetScript).

 let employerAddress = addressFromPublicKey(tx.senderPk); 

يستخدم عنوان الأسلوب الأساسي من PublicPublic للمكتبة المضمنة للحصول على عنوان منشئ الطلب من مفتاحه العام.

 let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); 

يحصل عنوان الطريقة الأساسية من FromRecipient على عنوان مستلم الأموال

 let salary = extract(getLong(employerAddress, dateKey)); 

تقدم لنا الطريقة getLong الأساسية البيانات المخزنة على blockchain على عنوان منشئ الطلب ، وهو مقدار راتب المطور. يمكن للعقد الوصول إلى البيانات المخزنة على blockchain Waves (ولا يمكن الوصول إلى البيانات الموجودة على أي موقع ويب أو خادم جهة خارجية).

 if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false 

هذا هو المكان للتحقق من المبلغ الصحيح والتوقيع. صحيح يعني أنه سيتم السماح بالمعاملة ، ويعني خطأ أن المعاملة سيتم رفضها. وبالتالي ، أثناء أي تحويل للأموال من هذا الحساب ، يتم التحقق من أنه سيتم إرسال الأموال فقط إلى محفظة المطور وفي المبلغ المخزن بالفعل في سلسلة الكتلة ، في شكل زوج مفاتيح سهل القراءة (العنوان كمفتاح ومبلغ كقيمة) ، مما يسمح ثق في البرنامج ، تحقق من جميع البيانات بنفسك لمدة 5-10 ثوانٍ قبل تحويل الرواتب.

عرض عبر الإنترنت للمشروع على اختبار blockchain ، متاح هنا
هنا يمكنك رؤية كود المشروع.

آمل أن تكون المقالة غنية بالمعلومات وأن تكون مفيدة لك لكتابة أول عقد ذكي لك.

Source: https://habr.com/ru/post/ar424111/


All Articles