أحد الأهداف الرئيسية التي تهدف المشاريع القائمة على blockchain إلى تحقيقها هو التحقق من البيانات. للحصول على أمثلة حية، يمكنك إلقاء نظرة على الهوية الرقمية وتخزين المستندات والتحقق منها عبر الإنترنت. في الواقع، أي من هذه الحالات تتطلب التحقق من بادئ الإجراء/المعاملة للتأكد من الشخص أو الكيان. على سبيل المثال، إذا كان الشخص لديه النموذج الرقمي لوثيقة الهوية، يصبح من الضروري ضمان الملكية. وبالتالي فهو مثال ممتاز لمشكلة التحقق من البيانات. دعونا نراجع أبسط أشكال الحل - التوقيع الرقمي، الذي يعد اختباره أحد النقاط الحاسمة أثناء تطوير العقد الذكي.
النهج بسيط:
1) يقوم النظام بإنشاء رسالة حسب القواعد المعروفة للجميع
2) يحصل المُوقع على الرسالة ويضيف مجموعة محددة من الرموز - التوقيع الرقمي، رمز تم إنشاؤه من الرسالة بواسطة مفتاح خاص
3) يتم الآن إرسال التوقيع الذي تم إنشاؤه إلى العقد، حيث يتم تحليله لاستعادة عنوان الموقع.
تقدم لك Solidity خوارزمية ECDSA لإنشاء التوقيع والمزيد من التحليل. لا نحتاج إلى التعمق في الخوارزمية نفسها (يمكنك العثور على المعلومات الضرورية في المصادر المناسبة). كل ما نحتاج إلى معرفته هو أن ECDSA هو مثال على التشفير غير المتماثل، حيث يقوم المستخدم الأول بإنشاء توقيع باستخدام مفتاحه الخاص، ويقوم المستخدم الثاني بتطبيق خوارزمية قياسية لاسترداد المفتاح العام للموقع. وبالتالي يمكن التحقق من مصدر التوقيع. بدلاً من ذلك، دعونا نركز على الجزء العملي – استخدام التوقيع واختباره.
بادئ ذي بدء، علينا أن نعترف بالمشكلة. على سبيل المثال، يحتاج العقد إلى تنفيذ بعض الإجراءات، على سبيل المثال، تخزين عنوان المتصل. على الرغم من أن العقد يجب أن يقوم بالتخزين فقط إذا تم التحقق من المتصل، إلا أننا نحتاج إلى التأكد من أنه لا يمكن لأي شخص استخدام عنوانه دون إذن. لاسترداد المتصل الحقيقي، نحتاج إلى إنشاء بعض الرسائل وتوقيعها وتفكيكها ضمن العقد.
يمكنك العثور على الحل القياسي في وثائق Solidity (فمثلا، في 0.8.4 - أحدث نسخة مستقرة في وقت المقال). تقدم لنا المستندات العقد، الذي يحتاج إلى الوظائف المضمنة التالية: إنشاء الرسائل وتقسيم التوقيع ورمز التجميع لاسترداد المُوقع. يوضح المثال جميع الطرق الضرورية وهو واضح جدًا، على الرغم من أنه يحتوي على عيبين: فهو يفتقر إلى العالمية، ولا يوجد مثال جيد لاختبار الحلول. ولهذا السبب أقدم نسختي من الكود و(الهدف الفعلي) - استراتيجية اختبار العقد.
بالتأكيد ، يمكنك استخدام مكتبة OpenZeppelin القياسية لعمليات ECDSA، لكنك ستواجه نفس المشكلات مرة أخرى - الافتقار إلى المرونة وأساليب الاختبار. لذلك، دعونا نتعمق في مثالي للمنطق القائم على التوقيع. يمكنك العثور على كامل مثال عملي في جيثب الخاص بي، ولكن هناك عدد قليل من الأماكن التي أريد عرضها بالكامل.
بادئ ذي بدء، سنقوم بإعداد الرسالة. كما ترون، يتم تشكيلها من عنوانين للمحفظة المعبأة والمجزأة:
الجزء الثاني المهم من التعليمات البرمجية هو تجزئة الرسالة مع رسالة Ethereum القياسية:
يوضح أن الرسالة تم إرسالها داخل شبكة إيثريوم ويبلغ طولها 32 بايت، وهو ليس رقمًا عشوائيًا. بعد العمليات السابقة، أصبح لدينا التجزئة، التي يبلغ طولها 32 بايت. من الضروري أن تكون وظيفة التجزئة الإضافية بهذا الشكل، وسنناقش السبب بعد ذلك بقليل.
أجزاء التعليمات البرمجية الأخرى قياسية جدًا. وظيفة تقسيم التوقيع هي كما يلي:
وإليك وظيفة استرداد الموقع:
بالنسبة للواجهة الخارجية، سنستخدم الوظيفة المخصصة، التي تتلقى التوقيع والوسائط الضرورية، وتتحقق مما إذا كان المستخدم مسجلًا بالفعل، وتشكل الرسالة، وتتحقق من التوقيع:
أولاً، سنقوم بتقليد الرسالة التي يجب التوقيع عليها. سوف نستخدم ethers.js المكتبة، وهي (مع web3) المكتبة الأكثر استخداما وملاءمة. نظرًا لأنها مكتبة مفتوحة المصدر، فلديك الحرية في استكشافها الكود والمستندات الخاصة به. كما توفر لنا هذه المكتبة الواجهة المثالية لبناء الرسالة التالية:
واحدة من سلبيات كلاهما web3 و الاسترات تكمن المشكلة في أن المكتبات لا تحتوي على جميع الوظائف الخاصة ببيئة Ganache المحلية نظرًا لأن كلتا المكتبتين تهدفان إلى العمل مع عقد Ethererum الكاملة. ومع ذلك، هناك نهج للاختبار المحلي باستخدام وظيفة حساب web3. على الرغم من أنك تحتاج إلى إنشاء حساب إضافي، والذي سينفذ وظيفة المغني ويوفر اتصالاً بموفر web3 الحالي:
والآن، لدينا الرسالة التي تم إنشاؤها وتوقيعها. لكن هذا ليس كل شيء؛ هناك بعض الأشياء المتبقية للحديث عنها. توفر كلتا المكتبتين (web3 وethers) الموجودتين أسفل الغطاء تجزئة إضافية للرسالة قبل إنشاء التوقيع. أيضًا، لا يتم تجزئة الرسالة فحسب، بل يتم دمجها مع رسالة Ethereum القياسية التي رأيناها سابقًا:
ولهذا السبب أضفنا الطريقة الإضافية إلى العقد. لذا، إذا كنت تريد استخدام رسائل مخصصة، أو تخطي التجزئة الإضافية، وما إلى ذلك، فأنت بحاجة إلى إنشاء إصدار مخصص من وظيفة التوقيع. لقد ناقشنا السبب أعلاه - تطبق كلتا المكتبتين القياسيتين الطريقة النموذجية لتوقيع الرسالة، والتي لا يمكن تغييرها إلا عن طريق تجاوز الوظيفة.
كخطوة أخيرة، لنجري الاختبار ونتحقق لمعرفة ما إذا كان يعمل بشكل صحيح:
لقد اختبرنا إنشاء التوقيع والرسالة التي تم إنشاؤها والموافقة على التوقيع والرفض. لذا فهي مجموعة كاملة جدًا من الاختبارات لوظيفة التحقق.
- حسابي
- اكشن
- إضافي
- خوارزمية
- الكل
- الحجج
- البند
- الأصالة
- قطعة
- الحالات
- الشيكات
- الكود
- عقد
- التشفير
- حالياًّ
- البيانات
- التطوير التجاري
- رقمي
- الهوية الرقمية
- وثائق
- البيئة
- ethereum
- شبكة الايثيروم
- الوجه
- الاسم الأول
- مرونة
- تركز
- النموذج المرفق
- مجانًا
- بالإضافة إلى
- وظيفة
- خير
- مزيج
- الثرم
- HTTPS
- ia
- هوية
- معلومات
- IP
- IT
- القفل
- آخر
- المكتبة
- محلي
- متوسط
- شبكة
- العقد
- عرض
- عروض
- online
- جاكيت
- المصدر المفتوح
- عمليات
- خاص
- المفتاح الخاص
- مشروع ناجح
- جمهور
- مفتاح العام
- مراجعة
- يجري
- طقم
- الاشارات
- So
- صلابة
- انقسم
- تخزين
- متجر
- الإستراتيجيات
- نظام
- تجربه بالعربي
- الاختبار
- اختبارات
- المصدر
- us
- التحقق
- محفظة
- ويكيبيديا
- في غضون
- للعمل
- أعمال