في الدرس الأخير، قمنا بنشر عقد LearnCoin الخاص بنا على Goerli Testnet. في هذا الدرس، سنستكشف بالتفصيل وظائف عقد LearnCoin ونوضح ما يفعله كل جزء.
هذا هو العقد الكامل لـ LearnCoin الخاص بنا
الثعبان
//معرف ترخيص SPDX: لا يوجد
صلابة البراغما ^ 0.8.9؛
استيراد " @openzeppelin /العقود/التوكين/ERC20/erc20.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/extensions/ERC20Burnable.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/الإضافات/ERC20Snapshot.sol؛ "
استيراد " @openzeppelin /العقود/الوصول/الوصول إلى الكونترول.sol؛ "
استيراد " @openzeppelin /العقود/الأمن/Pausable.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/الامتدادات/مشروع ERC20permit.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/extensions/ERC20votes.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/الإضافات/ERC20flashmint.sol؛ "
عقد ليرنكوين هو ERC20، ERC20 قابل للحرق، لقطة ERC20، التحكم في الوصول، قابل للإيقاف المؤقت، تصريح ERC20، تصويت ERC20، ERC20 Flashmint {
بايت 32 بايت ثابت عام SNAPSHOT_ROLE = keccak256 (SNAPSHOT_ROLE)؛ " "
بايت 32 بايت (PAUSER_ROLE) الثابت العام = keccak256 (PAUSER_ROLE)؛ " "
المُنشئ () ERC20 ("تعلم العملة"، " LC") ERC20Permit (تعلم العملة) " " {
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(SNAPSHOT_ROLE, msg.sender);
_grantRole(PAUSER_ROLE, msg.sender);
_mint(msg.sender, 21000000 * 10 ** decimals());
}
لقطة الوظيفة () الدور العام فقط (SNAPSHOT_ROLE) {
_snapshot();
}
إيقاف الوظيفة مؤقتًا () الدور العام فقط (PAUSER_ROLE) {
_pause();
}
وظيفة إلغاء الإيقاف المؤقت () الدور العام فقط (PAUSER_ROLE) {
_unpause();
}
الوظيفة _ قبل نقل الرمز (العنوان من، العنوان إلى، مبلغ uint256)
داخلي
عندما لا يتم الإيقاف المؤقت
التجاوز (لقطة ERC20، ERC20)
{
super._beforeTokenTransfer(from, to, amount);
}
//الوظائف التالية هي تجاوزات تتطلبها Solidity.
وظيفة _ afterTokenTransfer (العنوان من، العنوان إلى، مبلغ uint256)
داخلي
التجاوز (أصوات ERC20، ERC20)
{
super._afterTokenTransfer(from, to, amount);
}
الدالة _mint (عنوان إلى، مبلغ uint256)
داخلي
التجاوز (أصوات ERC20، ERC20)
{
super._mint(to, amount);
}
وظيفة _burn (حساب العنوان، مبلغ uint256)
داخلي
التجاوز (أصوات ERC20، ERC20)
{
super._burn(account, amount);
}
}
العقد الذي قمت بنشره هو عقد رمز ERC20 يسمى LearnCoin.
وهو يتضمن العديد من الميزات من مكتبة عقود OpenZeppelin، مثل الرموز القابلة للنسخ واللقطات والتحكم في الوصول والرموز القابلة للإيقاف المؤقت ووظائف التصاريح والتصويت والنعناع السريع.
تقوم بيانات الاستيراد في بداية العقد بسحب التعليمات البرمجية من مكتبة عقود OpenZeppelin:
ERC20.sol
هو العقد الأساسي لرموز ERC20.ERC20Burnable.sol
القدرة لحاملي الرموز على تدمير الرموز الخاصة بهم.ERC20Snapshot.sol
إنشاء لقطات من أرصدة الرموز المميزة.AccessControl.sol
عبارة عن وحدة تعاقدية لإدارة الوصول إلى وظائف معينة.Pausable.sol
القدرة على إيقاف عمليات نقل الرموز وإلغاء إيقافها مؤقتًا.ERC20permit.sol حامليه من إنفاق الرموز المميزة للمستخدم عبر التصاريح
.ERC20votes.sol
إمكانيات التصويت إلى الرمز المميز.ERC20Flashmint.sol بالسك
السريع للرموز.يرث عقد LearnCoin
من عقود OpenZeppelin المستوردة. هذا يعني أنه سيحتوي على جميع الأساليب والخصائص من تلك العقود.
SNAPSHOT_ROLE
و PAUSER_ROLE
هي قيم ثابتة (تم إنشاؤها باستخدام دالة التجزئة keccak256
) التي تمثل أدوارًا محددة للتحكم في الوصول داخل العقد.
عندما يتم نشر عقد LearnCoin
، يتم استدعاء وظيفة المُنشئ. يقوم بتعيين اسم الرمز ورمزه، ويمنح حساب النشر (msg.sender) أدوار المسؤول واللقطة والإيقاف المؤقت، ويقوم بتوريد أولي من الرموز إلى حساب النشر.
اللقطة
والإيقاف المؤقت
وإلغاء الإيقاف المؤقت
هي وظائف تسمح للحسابات ذات الأدوار المقابلة بتنفيذ إجراءات معينة. تتيح اللقطة
إنشاء لقطة وإيقافها
مؤقتًا وإلغاء إيقافها مؤقتًا للسماح بإيقاف
عمليات نقل الرموز وإعادة تشغيلها.
وظائف _beforeTokenTransfer
و_AfterTokenTransfer
و_mint
و _burn
هي وظائف داخلية يتم تجاوزها من العقود الأصلية. يقومون بتطبيق المنطق المخصص لعقد LearnCoin.
_beforeTokenTransfer
: يتم استدعاء هذه الوظيفة قبل أي نقل للرموز. إنه يضمن عدم إيقاف عمليات نقل الرموز مؤقتًا._AfterTokenTransfer
: يتم استدعاء هذه الوظيفة بعد أي نقل للرموز. إنها وظيفة فارغة هنا، ولكن يمكن استخدامها للمنطق المخصص الذي يجب أن يحدث مباشرة بعد عمليات النقل._mint
: تقوم هذه الوظيفة بإنشاء رموز جديدة وتعيينها لحساب معين._burn
: تدمر هذه الوظيفة الرموز المميزة من حساب معين.كانت هذه نظرة عامة سريعة على عقد LearnCoin
الخاص بك. بعد نشر العقد، أصبحت الآن جاهزًا للتفاعل معه، وهو ما سنتناوله في الدرس التالي.
في الدرس الأخير، قمنا بنشر عقد LearnCoin الخاص بنا على Goerli Testnet. في هذا الدرس، سنستكشف بالتفصيل وظائف عقد LearnCoin ونوضح ما يفعله كل جزء.
هذا هو العقد الكامل لـ LearnCoin الخاص بنا
الثعبان
//معرف ترخيص SPDX: لا يوجد
صلابة البراغما ^ 0.8.9؛
استيراد " @openzeppelin /العقود/التوكين/ERC20/erc20.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/extensions/ERC20Burnable.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/الإضافات/ERC20Snapshot.sol؛ "
استيراد " @openzeppelin /العقود/الوصول/الوصول إلى الكونترول.sol؛ "
استيراد " @openzeppelin /العقود/الأمن/Pausable.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/الامتدادات/مشروع ERC20permit.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/extensions/ERC20votes.sol؛ "
استيراد " @openzeppelin /العقود/التوكين/ERC20/الإضافات/ERC20flashmint.sol؛ "
عقد ليرنكوين هو ERC20، ERC20 قابل للحرق، لقطة ERC20، التحكم في الوصول، قابل للإيقاف المؤقت، تصريح ERC20، تصويت ERC20، ERC20 Flashmint {
بايت 32 بايت ثابت عام SNAPSHOT_ROLE = keccak256 (SNAPSHOT_ROLE)؛ " "
بايت 32 بايت (PAUSER_ROLE) الثابت العام = keccak256 (PAUSER_ROLE)؛ " "
المُنشئ () ERC20 ("تعلم العملة"، " LC") ERC20Permit (تعلم العملة) " " {
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(SNAPSHOT_ROLE, msg.sender);
_grantRole(PAUSER_ROLE, msg.sender);
_mint(msg.sender, 21000000 * 10 ** decimals());
}
لقطة الوظيفة () الدور العام فقط (SNAPSHOT_ROLE) {
_snapshot();
}
إيقاف الوظيفة مؤقتًا () الدور العام فقط (PAUSER_ROLE) {
_pause();
}
وظيفة إلغاء الإيقاف المؤقت () الدور العام فقط (PAUSER_ROLE) {
_unpause();
}
الوظيفة _ قبل نقل الرمز (العنوان من، العنوان إلى، مبلغ uint256)
داخلي
عندما لا يتم الإيقاف المؤقت
التجاوز (لقطة ERC20، ERC20)
{
super._beforeTokenTransfer(from, to, amount);
}
//الوظائف التالية هي تجاوزات تتطلبها Solidity.
وظيفة _ afterTokenTransfer (العنوان من، العنوان إلى، مبلغ uint256)
داخلي
التجاوز (أصوات ERC20، ERC20)
{
super._afterTokenTransfer(from, to, amount);
}
الدالة _mint (عنوان إلى، مبلغ uint256)
داخلي
التجاوز (أصوات ERC20، ERC20)
{
super._mint(to, amount);
}
وظيفة _burn (حساب العنوان، مبلغ uint256)
داخلي
التجاوز (أصوات ERC20، ERC20)
{
super._burn(account, amount);
}
}
العقد الذي قمت بنشره هو عقد رمز ERC20 يسمى LearnCoin.
وهو يتضمن العديد من الميزات من مكتبة عقود OpenZeppelin، مثل الرموز القابلة للنسخ واللقطات والتحكم في الوصول والرموز القابلة للإيقاف المؤقت ووظائف التصاريح والتصويت والنعناع السريع.
تقوم بيانات الاستيراد في بداية العقد بسحب التعليمات البرمجية من مكتبة عقود OpenZeppelin:
ERC20.sol
هو العقد الأساسي لرموز ERC20.ERC20Burnable.sol
القدرة لحاملي الرموز على تدمير الرموز الخاصة بهم.ERC20Snapshot.sol
إنشاء لقطات من أرصدة الرموز المميزة.AccessControl.sol
عبارة عن وحدة تعاقدية لإدارة الوصول إلى وظائف معينة.Pausable.sol
القدرة على إيقاف عمليات نقل الرموز وإلغاء إيقافها مؤقتًا.ERC20permit.sol حامليه من إنفاق الرموز المميزة للمستخدم عبر التصاريح
.ERC20votes.sol
إمكانيات التصويت إلى الرمز المميز.ERC20Flashmint.sol بالسك
السريع للرموز.يرث عقد LearnCoin
من عقود OpenZeppelin المستوردة. هذا يعني أنه سيحتوي على جميع الأساليب والخصائص من تلك العقود.
SNAPSHOT_ROLE
و PAUSER_ROLE
هي قيم ثابتة (تم إنشاؤها باستخدام دالة التجزئة keccak256
) التي تمثل أدوارًا محددة للتحكم في الوصول داخل العقد.
عندما يتم نشر عقد LearnCoin
، يتم استدعاء وظيفة المُنشئ. يقوم بتعيين اسم الرمز ورمزه، ويمنح حساب النشر (msg.sender) أدوار المسؤول واللقطة والإيقاف المؤقت، ويقوم بتوريد أولي من الرموز إلى حساب النشر.
اللقطة
والإيقاف المؤقت
وإلغاء الإيقاف المؤقت
هي وظائف تسمح للحسابات ذات الأدوار المقابلة بتنفيذ إجراءات معينة. تتيح اللقطة
إنشاء لقطة وإيقافها
مؤقتًا وإلغاء إيقافها مؤقتًا للسماح بإيقاف
عمليات نقل الرموز وإعادة تشغيلها.
وظائف _beforeTokenTransfer
و_AfterTokenTransfer
و_mint
و _burn
هي وظائف داخلية يتم تجاوزها من العقود الأصلية. يقومون بتطبيق المنطق المخصص لعقد LearnCoin.
_beforeTokenTransfer
: يتم استدعاء هذه الوظيفة قبل أي نقل للرموز. إنه يضمن عدم إيقاف عمليات نقل الرموز مؤقتًا._AfterTokenTransfer
: يتم استدعاء هذه الوظيفة بعد أي نقل للرموز. إنها وظيفة فارغة هنا، ولكن يمكن استخدامها للمنطق المخصص الذي يجب أن يحدث مباشرة بعد عمليات النقل._mint
: تقوم هذه الوظيفة بإنشاء رموز جديدة وتعيينها لحساب معين._burn
: تدمر هذه الوظيفة الرموز المميزة من حساب معين.كانت هذه نظرة عامة سريعة على عقد LearnCoin
الخاص بك. بعد نشر العقد، أصبحت الآن جاهزًا للتفاعل معه، وهو ما سنتناوله في الدرس التالي.