الشروع في العمل بصلابة|محاضرة 21: استدعاء العقود الأخرى

律动

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

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

استدعاء العقد المنشور

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

العقد المستهدف

لنبدأ بكتابة عقد بسيط ، OtherContract ، لتسميته.

يحتوي هذا العقد على متغير حالة x وسجل أحداث يتم تشغيله عند تلقي ETH وثلاث وظائف:

getBalance(): إرجاع رصيد ETH للعقد.

setX (): وظيفة خارجية مستحقة الدفع ، والتي يمكنها تعيين قيمة x وإرسال ETH إلى العقد.

getX (): يقرأ قيمة x.

استدعاء عقد العقد الآخر

يمكننا إنشاء مرجع للعقد باستخدام عنوان العقد ورمز العقد (أو الواجهة): _Name(_Address) ، حيث _Name هو اسم العقد و _Address هو عنوان العقد. ثم قم باستدعاء وظيفتها بالإشارة إلى العقد: _Name(_Address).f() ، حيث f () هي الوظيفة التي سيتم استدعاؤها.

فيما يلي 4 أمثلة على استدعاء العقود:

1. تمرير في عنوان العقد

يمكننا تمرير عنوان العقد الهدف إلى الوظيفة ، وإنشاء مرجع إلى العقد الهدف ، ثم استدعاء الوظيفة الهدف. على سبيل المثال ، نكتب دالة callSetX في العقد الجديد ، ونمرر عنوان عقد OtherContract المنشور _Address ومعلمة setX x:

2. تمرير في متغيرات العقد

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

3. إنشاء متغير عقد

يمكننا إنشاء متغير عقد ثم استخدامه لاستدعاء دالة الهدف. في المثال التالي، نقوم بتخزين مرجع إلى عقد OtherContract للمتغير oc:

4. اتصل بالعقد وأرسل ETH

إذا كانت وظيفة العقد المستهدف مستحقة الدفع ، فيمكننا تحويل الأموال إلى العقد عن طريق الاتصال به: _Name(_Address).f {value: _Value}() ، حيث _Name هو اسم العقد ، _Address هو عنوان العقد ، f هو اسم وظيفة الهدف ، و _Value هو مبلغ ETH المراد نقله (في wei).

وظيفة setX لعقد OtherContract مستحقة الدفع ، وفي المثال التالي ، نقوم بتحويل الأموال من وإلى العقد المستهدف عن طريق استدعاء setX.

بعد النقل ، يمكننا ملاحظة تغيير رصيد ETH للعقد المستهدف من خلال حدث السجل ووظيفة getBalance().

ملخص

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

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