第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 العديد من الميزات التي يمكن أن تجعل عقدك أكثر قوة وأمانًا. برمجة سعيدة!

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第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 العديد من الميزات التي يمكن أن تجعل عقدك أكثر قوة وأمانًا. برمجة سعيدة!

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。