الشروع في العمل مع الصلابة |محاضرة 29: محدد الوظيفة

律动

لقد قمت مؤخرا بإعادة تعلم الصلابة ، ودمج التفاصيل ، وكتابة “Solidity Minimalist Primer” للمبتدئين لاستخدامها (يمكن لرجال البرمجة العثور على برنامج تعليمي آخر) ، يتم تحديثه 1-3 مرات في الأسبوع.

جميع التعليمات البرمجية والبرامج التعليمية مفتوحة المصدر في github: github.com / AmazingAng / WTFSolidity

محدد

عندما نسمي دالة عقد ذكي ، فإن أول 4 بايت من الرمز الثانوي المرسل هي المحدد. في هذا الحديث ، سنغطي ماهية المحدد وكيفية استخدامه.

msg.data

msg.data هو متغير عام في Solidity بقيمة بيانات المكالمة الكاملة (الرمز الثانوي الذي يستدعي الدالة).

في التعليمة البرمجية التالية ، يمكننا استخدام حدث السجل لإخراج بيانات المكالمة التي تستدعي وظيفة mint:

عندما يتم 0x2c44b726ADF1963cA47Af88B284C06f30380fC78 المعلمة ، تكون بيانات استدعاء الإخراج

يمكن تقسيم هذا الرمز الثانوي الفوضوي إلى جزأين:

في الواقع ، تخبر calldata العقد الذكي بالوظيفة التي أريد الاتصال بها وما هي المعلمات.

توقيعات الوظائف ومحدداتها

يتم تعريف المحدد على أنه أول 4 بايت من تجزئة توقيع الدالة ، فما هو توقيع الدالة؟

في الواقع ، في المحاضرة 21 ، قدمنا بإيجاز توقيع الوظيفة ، وهو “اسم الوظيفة (نوع المعلمة المفصولة بفواصل)”. على سبيل المثال ، توقيع الدالة للنعناع في الكود أعلاه هو “mint (address)”. في العقود الذكية ، يكون للوظائف المختلفة توقيعات وظيفية مختلفة ، حتى نتمكن من تحديد الوظيفة التي يجب استدعاؤها من خلال توقيع الوظيفة.

لاحظ أنه في توقيع الدالة ، يجب كتابة uint و int ك uint256 و int256.

دعنا نكتب دالة للتحقق من أن محدد وظيفة النعناع هو 0x6a627842. يمكنك تشغيل الوظيفة التالية ورؤية النتيجة.

استخدام المحدد

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

في السجل ، يمكننا أن نرى أن وظيفة mint يتم استدعاؤها بنجاح ويتم إخراج حدث Log.

ملخص

في هذا الحديث ، قدمنا ما هو محدد الوظيفة ، وكيفية ارتباطه ب msg.data ، وتوقيعات الوظائف ، وكيفية استخدامه لاستدعاء وظيفة موضوعية.

إخلاء المسؤولية: قد تكون المعلومات الواردة في هذه الصفحة من مصادر خارجية ولا تمثل آراء أو مواقف Gate. المحتوى المعروض في هذه الصفحة هو لأغراض مرجعية فقط ولا يشكّل أي نصيحة مالية أو استثمارية أو قانونية. لا تضمن Gate دقة أو اكتمال المعلومات، ولا تتحمّل أي مسؤولية عن أي خسائر ناتجة عن استخدام هذه المعلومات. تنطوي الاستثمارات في الأصول الافتراضية على مخاطر عالية وتخضع لتقلبات سعرية كبيرة. قد تخسر كامل رأس المال المستثمر. يرجى فهم المخاطر ذات الصلة فهمًا كاملًا واتخاذ قرارات مدروسة بناءً على وضعك المالي وقدرتك على تحمّل المخاطر. للتفاصيل، يرجى الرجوع إلى إخلاء المسؤولية.
تعليق
0/400
لا توجد تعليقات