سنضيف نظام اقتراح وخيارًا للناخبين المسجلين للتصويت. لهذا، سنحتاج إلى مصفوفة لتخزين المقترحات ووظيفة جديدة للتصويت.
في عقد الناخب
، أضف الأسطر التالية من التعليمات البرمجية:
صلابة
/معرف ترخيص SPDX: GPL-3.0
صلابة البراغما > = < 0.7.0 0.9.0؛
ناخب متعاقد {
الشخص البنيوي {
bool voted;
uint vote;
}
اقتراح هيكلي {
string name;
uint voteCount;
}
اقتراح [] مقترحات عامة؛
رسم خرائط (العنوان = > الشخص) للناخبين العامين؛
وظيفة تسجيل الناخبين () للجمهور {
voters[msg.sender].voted = false;
}
وظيفة addProposal (ذاكرة السلسلة _name) عامة {
proposals.push(Proposal(_name, 0));
}
التصويت على الوظيفة (اقتراح الوحدة) للجمهور {
require(_proposal < proposals.length, "Invalid proposal index."); // This is the added check
Person storage sender = voters[msg.sender];
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = _proposal;
proposals[_proposal].voteCount += 1;
}
}
دعونا نحلل الكود الجديد:
هيكل الاقتراح: لقد أضفنا هيكلًا جديدًا، الاقتراح
، يحتوي على اسم الاقتراح وعدد الأصوات التي حصل عليها.
مصفوفة المقترحات: تحتوي مجموعة المقترحات
على جميع المقترحات في نظام التصويت.
إضافة وظيفة الاقتراح: تسمح لنا وظيفة addProposal
بإضافة اقتراح جديد إلى مصفوفة المقترحات
. يتم تمرير اسم الاقتراح كمعامل، ويتم تعيين عدد الأصوات مبدئيًا إلى صفر.
وظيفة التصويت: تسمح وظيفة التصويت
للناخب المسجل بالإدلاء بصوته. فهو يأخذ فهرس الاقتراح كمعيار ويزيد عدد الأصوات في الاقتراح بمقدار واحد. كما يتحقق مما إذا كان الناخب قد صوت بالفعل ويقوم بتحديث حالة الناخب.
الآن بعد أن أضفنا المزيد من الميزات إلى عقدنا، حان الوقت لتجميعها واختبارها. في Remix IDE، انقر فوق رمز برنامج التحويل البرمجي Solidity على الشريط الجانبي الأيسر ثم انقر فوق الزر «Compile».
لاختبار العقد الخاص بك، انتقل إلى علامة التبويب «نشر معاملات & التشغيل» (تلك الموجودة أسفل رمز برنامج التحويل البرمجي لـ Solidity) وانقر على زر «النشر». بمجرد نشر العقد، يمكنك التفاعل معه من خلال استدعاء وظائفه من علامة التبويب هذه. حاول تسجيل ناخب وإضافة اقتراح والإدلاء بصوته لمعرفة كيفية عمله.
في الدرس التالي، سننفذ الوظيفة لفرز الأصوات وإعلان نتيجة عملية التصويت. حتى ذلك الحين، لا تتردد في استكشاف العقد وتجربته. تقدم Solidity العديد من الميزات التي يمكن أن تجعل عقدك أكثر قوة وأمانًا. برمجة سعيدة!
سنضيف نظام اقتراح وخيارًا للناخبين المسجلين للتصويت. لهذا، سنحتاج إلى مصفوفة لتخزين المقترحات ووظيفة جديدة للتصويت.
في عقد الناخب
، أضف الأسطر التالية من التعليمات البرمجية:
صلابة
/معرف ترخيص SPDX: GPL-3.0
صلابة البراغما > = < 0.7.0 0.9.0؛
ناخب متعاقد {
الشخص البنيوي {
bool voted;
uint vote;
}
اقتراح هيكلي {
string name;
uint voteCount;
}
اقتراح [] مقترحات عامة؛
رسم خرائط (العنوان = > الشخص) للناخبين العامين؛
وظيفة تسجيل الناخبين () للجمهور {
voters[msg.sender].voted = false;
}
وظيفة addProposal (ذاكرة السلسلة _name) عامة {
proposals.push(Proposal(_name, 0));
}
التصويت على الوظيفة (اقتراح الوحدة) للجمهور {
require(_proposal < proposals.length, "Invalid proposal index."); // This is the added check
Person storage sender = voters[msg.sender];
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = _proposal;
proposals[_proposal].voteCount += 1;
}
}
دعونا نحلل الكود الجديد:
هيكل الاقتراح: لقد أضفنا هيكلًا جديدًا، الاقتراح
، يحتوي على اسم الاقتراح وعدد الأصوات التي حصل عليها.
مصفوفة المقترحات: تحتوي مجموعة المقترحات
على جميع المقترحات في نظام التصويت.
إضافة وظيفة الاقتراح: تسمح لنا وظيفة addProposal
بإضافة اقتراح جديد إلى مصفوفة المقترحات
. يتم تمرير اسم الاقتراح كمعامل، ويتم تعيين عدد الأصوات مبدئيًا إلى صفر.
وظيفة التصويت: تسمح وظيفة التصويت
للناخب المسجل بالإدلاء بصوته. فهو يأخذ فهرس الاقتراح كمعيار ويزيد عدد الأصوات في الاقتراح بمقدار واحد. كما يتحقق مما إذا كان الناخب قد صوت بالفعل ويقوم بتحديث حالة الناخب.
الآن بعد أن أضفنا المزيد من الميزات إلى عقدنا، حان الوقت لتجميعها واختبارها. في Remix IDE، انقر فوق رمز برنامج التحويل البرمجي Solidity على الشريط الجانبي الأيسر ثم انقر فوق الزر «Compile».
لاختبار العقد الخاص بك، انتقل إلى علامة التبويب «نشر معاملات & التشغيل» (تلك الموجودة أسفل رمز برنامج التحويل البرمجي لـ Solidity) وانقر على زر «النشر». بمجرد نشر العقد، يمكنك التفاعل معه من خلال استدعاء وظائفه من علامة التبويب هذه. حاول تسجيل ناخب وإضافة اقتراح والإدلاء بصوته لمعرفة كيفية عمله.
في الدرس التالي، سننفذ الوظيفة لفرز الأصوات وإعلان نتيجة عملية التصويت. حتى ذلك الحين، لا تتردد في استكشاف العقد وتجربته. تقدم Solidity العديد من الميزات التي يمكن أن تجعل عقدك أكثر قوة وأمانًا. برمجة سعيدة!