تخطي إلى المحتوى الرئيسي

فهم العقد الذكي لرمز ERC-20

العقود الذكيه
tokens
Solidity
erc-20
المستوى المبتدئ
jdourlens
5 أبريل 2020
4 دقيقة قراءة

أحد أهم معايير العقود الذكية على إيثريوم يُعرف باسم ERC-20، والذي برز كمعيار فني يُستخدم لجميع العقود الذكية على بلوكتشين إيثريوم لتنفيذ الرموز القابلة للاستبدال.

يحدد ERC-20 قائمة مشتركة من القواعد التي يجب أن تلتزم بها جميع رموز إيثريوم القابلة للاستبدال. وبالتالي، فإن معيار الرمز هذا يمكّن المطورين من جميع الأنواع من التنبؤ بدقة بكيفية عمل الرموز الجديدة داخل نظام إيثريوم الأكبر. هذا يبسط ويسهل مهام المطورين، لأنهم يستطيعون المضي قدمًا في عملهم، مع العلم أن كل مشروع جديد لن يحتاج إلى إعادة عمل في كل مرة يتم فيها إصدار رمز جديد، طالما أن الرمز يتبع القواعد.

إليك الوظائف التي يجب أن ينفذها ERC-20، مقدمة كواجهة. إذا لم تكن متأكدًا من ماهية الواجهة: تحقق من مقالتنا حول البرمجة كائنية التوجه في سوليديتي (opens in a new tab).

إليك شرح سطر بسطر لوظيفة كل دالة. بعد هذا، سنقدم تنفيذًا بسيطًا لرمز ERC-20.

دوال الجلب (Getters)

function totalSupply() external view returns (uint256);

تُرجع كمية الرموز الموجودة. هذه الدالة هي دالة جلب (getter) ولا تعدل حالة العقد. ضع في اعتبارك أنه لا توجد أرقام عشرية (floats) في لغة سوليديتي. لذلك، تعتمد معظم الرموز 18 خانة عشرية وستُرجع إجمالي العرض والنتائج الأخرى على النحو التالي: 1000000000000000000 لرمز واحد. لا يحتوي كل رمز على 18 خانة عشرية، وهذا شيء يجب أن تنتبه إليه حقًا عند التعامل مع الرموز.

function balanceOf(address account) external view returns (uint256);

تُرجع كمية الرموز المملوكة لعنوان (account). هذه الدالة هي دالة جلب (getter) ولا تعدل حالة العقد.

function allowance(address owner, address spender) external view returns (uint256);

يسمح معيار ERC-20 للعنوان بإعطاء سماحية (allowance) لعنوان آخر ليتمكن من سحب الرموز منه. تُرجع دالة الجلب هذه العدد المتبقي من الرموز التي سيُسمح لـ spender بإنفاقها نيابةً عن owner. هذه الدالة هي دالة جلب ولا تعدل حالة العقد ويجب أن تُرجع 0 بشكل افتراضي.

الدوال

function transfer(address recipient, uint256 amount) external returns (bool);

تنقل amount من الرموز من عنوان مستدعي الدالة (msg.sender) إلى عنوان المستلم. تُصدر هذه الدالة حدث Transfer المُعرّف لاحقًا. تُرجع القيمة true إذا كان التحويل ممكنًا.

function approve(address spender, uint256 amount) external returns (bool);

تحدد مبلغ allowance (السماحية) الذي يُسمح لـ spender بتحويله من رصيد مستدعي الدالة (msg.sender). تُصدر هذه الدالة حدث الموافقة (Approval). تُرجع الدالة ما إذا كان قد تم تعيين السماحية بنجاح.

function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

تنقل amount من الرموز من sender إلى recipient باستخدام آلية السماحية. يتم بعد ذلك خصم المبلغ من سماحية المستدعي. تُصدر هذه الدالة حدث Transfer.

الأحداث

event Transfer(address indexed from, address indexed to, uint256 value);

يُصدر هذا الحدث عندما يتم إرسال كمية الرموز (value) من العنوان from إلى العنوان to.

في حالة سك رموز جديدة، يكون التحويل عادةً from (من) العنوان 0x00..0000، بينما في حالة حرق الرموز يكون التحويل to (إلى) 0x00..0000.

event Approval(address indexed owner, address indexed spender, uint256 value);

يُصدر هذا الحدث عندما تتم الموافقة على كمية الرموز (value) من قبل owner ليستخدمها spender.

تنفيذ أساسي لرموز ERC-20

إليك أبسط كود يمكنك أن تبني عليه رمز ERC-20 الخاص بك:

تنفيذ ممتاز آخر لمعيار الرمز ERC-20 هو تنفيذ ERC-20 من أوبن زبلين (opens in a new tab).

آخر تحديث للصفحة: 3 مارس 2026

هل كان هذا البرنامج التعليمي مفيداً؟