Lesson 2

تنفيذ تسجيل الناخبين والإدلاء بالأصوات

في هذا الدرس، سنواصل تطوير نظام التصويت اللامركزي الخاص بنا من خلال تنفيذ وظائف تسجيل الناخبين والإدلاء بالأصوات. سنبدأ بتوسيع عقد الناخبين الخاص بنا ثم نتعمق في تفاصيل تعيينات ومصفوفات 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; 
    }
}

فهم الكود

دعونا نحلل الكود الجديد:

  1. هيكل الاقتراح: لقد أضفنا هيكلًا جديدًا، الاقتراح، يحتوي على اسم الاقتراح وعدد الأصوات التي حصل عليها.

  2. مصفوفة المقترحات: تحتوي مجموعة المقترحات على جميع المقترحات في نظام التصويت.

  3. إضافة وظيفة الاقتراح: تسمح لنا وظيفة addProposal بإضافة اقتراح جديد إلى مصفوفة المقترحات. يتم تمرير اسم الاقتراح كمعامل، ويتم تعيين عدد الأصوات مبدئيًا إلى صفر.

  4. وظيفة التصويت: تسمح وظيفة التصويت للناخب المسجل بالإدلاء بصوته. فهو يأخذ فهرس الاقتراح كمعيار ويزيد عدد الأصوات في الاقتراح بمقدار واحد. كما يتحقق مما إذا كان الناخب قد صوت بالفعل ويقوم بتحديث حالة الناخب.

التجميع والاختبار

الآن بعد أن أضفنا المزيد من الميزات إلى عقدنا، حان الوقت لتجميعها واختبارها. في Remix IDE، انقر فوق رمز برنامج التحويل البرمجي Solidity على الشريط الجانبي الأيسر ثم انقر فوق الزر «Compile».

لاختبار العقد الخاص بك، انتقل إلى علامة التبويب «نشر معاملات & التشغيل» (تلك الموجودة أسفل رمز برنامج التحويل البرمجي لـ Solidity) وانقر على زر «النشر». بمجرد نشر العقد، يمكنك التفاعل معه من خلال استدعاء وظائفه من علامة التبويب هذه. حاول تسجيل ناخب وإضافة اقتراح والإدلاء بصوته لمعرفة كيفية عمله.

في الدرس التالي، سننفذ الوظيفة لفرز الأصوات وإعلان نتيجة عملية التصويت. حتى ذلك الحين، لا تتردد في استكشاف العقد وتجربته. تقدم Solidity العديد من الميزات التي يمكن أن تجعل عقدك أكثر قوة وأمانًا. برمجة سعيدة!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 2

تنفيذ تسجيل الناخبين والإدلاء بالأصوات

في هذا الدرس، سنواصل تطوير نظام التصويت اللامركزي الخاص بنا من خلال تنفيذ وظائف تسجيل الناخبين والإدلاء بالأصوات. سنبدأ بتوسيع عقد الناخبين الخاص بنا ثم نتعمق في تفاصيل تعيينات ومصفوفات 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; 
    }
}

فهم الكود

دعونا نحلل الكود الجديد:

  1. هيكل الاقتراح: لقد أضفنا هيكلًا جديدًا، الاقتراح، يحتوي على اسم الاقتراح وعدد الأصوات التي حصل عليها.

  2. مصفوفة المقترحات: تحتوي مجموعة المقترحات على جميع المقترحات في نظام التصويت.

  3. إضافة وظيفة الاقتراح: تسمح لنا وظيفة addProposal بإضافة اقتراح جديد إلى مصفوفة المقترحات. يتم تمرير اسم الاقتراح كمعامل، ويتم تعيين عدد الأصوات مبدئيًا إلى صفر.

  4. وظيفة التصويت: تسمح وظيفة التصويت للناخب المسجل بالإدلاء بصوته. فهو يأخذ فهرس الاقتراح كمعيار ويزيد عدد الأصوات في الاقتراح بمقدار واحد. كما يتحقق مما إذا كان الناخب قد صوت بالفعل ويقوم بتحديث حالة الناخب.

التجميع والاختبار

الآن بعد أن أضفنا المزيد من الميزات إلى عقدنا، حان الوقت لتجميعها واختبارها. في Remix IDE، انقر فوق رمز برنامج التحويل البرمجي Solidity على الشريط الجانبي الأيسر ثم انقر فوق الزر «Compile».

لاختبار العقد الخاص بك، انتقل إلى علامة التبويب «نشر معاملات & التشغيل» (تلك الموجودة أسفل رمز برنامج التحويل البرمجي لـ Solidity) وانقر على زر «النشر». بمجرد نشر العقد، يمكنك التفاعل معه من خلال استدعاء وظائفه من علامة التبويب هذه. حاول تسجيل ناخب وإضافة اقتراح والإدلاء بصوته لمعرفة كيفية عمله.

في الدرس التالي، سننفذ الوظيفة لفرز الأصوات وإعلان نتيجة عملية التصويت. حتى ذلك الحين، لا تتردد في استكشاف العقد وتجربته. تقدم Solidity العديد من الميزات التي يمكن أن تجعل عقدك أكثر قوة وأمانًا. برمجة سعيدة!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.