第2课

การดำเนินการลงทะเบียนผู้มีสิทธิเลือกตั้งและการลงคะแนนเสียง

ในบทนี้ เราจะพัฒนาระบบการลงคะแนนแบบกระจายอำนาจของเราต่อไปโดยการนำฟังก์ชันสำหรับการลงทะเบียนผู้มีสิทธิเลือกตั้งและการลงคะแนนเสียงไปใช้ เราจะเริ่มต้นด้วยการขยายสัญญา Voter ของเรา จากนั้นเจาะลึกรายละเอียดของการแมปและอาร์เรย์ของ Solidity

การขยายสัญญาผู้มีสิทธิเลือกตั้ง

เราจะเพิ่มระบบข้อเสนอและตัวเลือกสำหรับผู้ลงคะแนนเสียงที่ลงทะเบียนแล้วในการลงคะแนนเสียง สำหรับสิ่งนี้ เราจะต้องมีอาร์เรย์เพื่อจัดเก็บข้อเสนอและมีฟังก์ชันใหม่สำหรับการลงคะแนน

ในสัญญา Voter ให้เพิ่มบรรทัดโค้ดต่อไปนี้:

ความแข็งแกร่ง 
 // SPDX-License-Identifier: GPL-3.0 
 ความแข็งแกร่งของ pragma >=0.7.0 <0.9.0; ผู้มีสิทธิเลือกตั้งสัญญา 

 ราย { 
 โครงสร้างบุคคล {
        bool voted;  
        uint vote;   
    }

    โครงสร้างข้อเสนอ {
        string name;   
        uint voteCount; 
    }

    ข้อเสนอ[] ข้อเสนอสาธารณะ; 
 การทำแผนที่ (ที่อยู่ => บุคคล) ผู้มีสิทธิเลือกตั้งสาธารณะ; 

 ฟังก์ชั่น registerVoter() public {
        voters[msg.sender].voted = false;
    }

    ฟังก์ชั่น addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

    ฟังก์ชั่น vote(uint _proposal) public { 
     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. โครงสร้างข้อเสนอ: เราได้เพิ่มโครงสร้างใหม่ Proposal ซึ่งมีชื่อของข้อเสนอและจำนวนคะแนนที่ได้รับ

  2. อาร์เรย์ข้อเสนอ: อาร์เรย์ proposals จะเก็บข้อเสนอทั้งหมดไว้ในระบบการลงคะแนน

  3. เพิ่มฟังก์ชันข้อเสนอ: ฟังก์ชั่น addProposal ช่วยให้เราสามารถเพิ่มข้อเสนอใหม่ลงในอาร์เรย์ proposals ได้ ชื่อข้อเสนอถูกส่งเป็นพารามิเตอร์ และเริ่มนับคะแนนเป็นศูนย์

  4. ฟังก์ชั่นการลงคะแนนเสียง: ฟังก์ชั่น vote ช่วยให้ผู้ลงคะแนนเสียงที่ลงทะเบียนสามารถลงคะแนนเสียงได้ ใช้ดัชนีของข้อเสนอเป็นพารามิเตอร์และเพิ่มจำนวนคะแนนของข้อเสนอหนึ่งรายการ นอกจากนี้ยังตรวจสอบว่าผู้ลงคะแนนเสียงได้ลงคะแนนแล้วและอัปเดตสถานะของผู้ลงคะแนนเสียง

การรวบรวมและการทดสอบ

ตอนนี้เราได้เพิ่มคุณสมบัติเพิ่มเติมให้กับสัญญาของเราแล้ว ก็ถึงเวลารวบรวมและทดสอบ ใน Remix IDE ให้คลิกที่ไอคอนคอมไพเลอร์ Solidity ที่แถบด้านข้างซ้าย จากนั้นคลิกที่ปุ่ม "คอมไพล์"

หากต้องการทดสอบสัญญาของคุณ ไปที่แท็บ “ปรับใช้และเรียกใช้ธุรกรรม” (แท็บด้านล่างไอคอนคอมไพเลอร์ Solidity) และคลิกที่ปุ่ม “ปรับใช้” เมื่อปรับใช้สัญญาแล้ว คุณสามารถโต้ตอบกับสัญญาได้โดยการเรียกใช้ฟังก์ชันจากแท็บนี้ ลองลงทะเบียนผู้มีสิทธิเลือกตั้ง เพิ่มข้อเสนอ และลงคะแนนเสียงเพื่อดูว่ามันทำงานอย่างไร

ในบทถัดไป เราจะใช้ฟังก์ชันในการนับคะแนนเสียงและประกาศผลกระบวนการลงคะแนน ในระหว่างนี้ คุณสามารถสำรวจและทดลองสัญญาได้ตามใจชอบ Solidity นำเสนอคุณสมบัติอื่นๆ อีกมากมายที่สามารถทำให้สัญญาของคุณแข็งแกร่งและปลอดภัยยิ่งขึ้น ขอให้มีความสุขในการเขียนโค้ด!

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

การดำเนินการลงทะเบียนผู้มีสิทธิเลือกตั้งและการลงคะแนนเสียง

ในบทนี้ เราจะพัฒนาระบบการลงคะแนนแบบกระจายอำนาจของเราต่อไปโดยการนำฟังก์ชันสำหรับการลงทะเบียนผู้มีสิทธิเลือกตั้งและการลงคะแนนเสียงไปใช้ เราจะเริ่มต้นด้วยการขยายสัญญา Voter ของเรา จากนั้นเจาะลึกรายละเอียดของการแมปและอาร์เรย์ของ Solidity

การขยายสัญญาผู้มีสิทธิเลือกตั้ง

เราจะเพิ่มระบบข้อเสนอและตัวเลือกสำหรับผู้ลงคะแนนเสียงที่ลงทะเบียนแล้วในการลงคะแนนเสียง สำหรับสิ่งนี้ เราจะต้องมีอาร์เรย์เพื่อจัดเก็บข้อเสนอและมีฟังก์ชันใหม่สำหรับการลงคะแนน

ในสัญญา Voter ให้เพิ่มบรรทัดโค้ดต่อไปนี้:

ความแข็งแกร่ง 
 // SPDX-License-Identifier: GPL-3.0 
 ความแข็งแกร่งของ pragma >=0.7.0 <0.9.0; ผู้มีสิทธิเลือกตั้งสัญญา 

 ราย { 
 โครงสร้างบุคคล {
        bool voted;  
        uint vote;   
    }

    โครงสร้างข้อเสนอ {
        string name;   
        uint voteCount; 
    }

    ข้อเสนอ[] ข้อเสนอสาธารณะ; 
 การทำแผนที่ (ที่อยู่ => บุคคล) ผู้มีสิทธิเลือกตั้งสาธารณะ; 

 ฟังก์ชั่น registerVoter() public {
        voters[msg.sender].voted = false;
    }

    ฟังก์ชั่น addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

    ฟังก์ชั่น vote(uint _proposal) public { 
     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. โครงสร้างข้อเสนอ: เราได้เพิ่มโครงสร้างใหม่ Proposal ซึ่งมีชื่อของข้อเสนอและจำนวนคะแนนที่ได้รับ

  2. อาร์เรย์ข้อเสนอ: อาร์เรย์ proposals จะเก็บข้อเสนอทั้งหมดไว้ในระบบการลงคะแนน

  3. เพิ่มฟังก์ชันข้อเสนอ: ฟังก์ชั่น addProposal ช่วยให้เราสามารถเพิ่มข้อเสนอใหม่ลงในอาร์เรย์ proposals ได้ ชื่อข้อเสนอถูกส่งเป็นพารามิเตอร์ และเริ่มนับคะแนนเป็นศูนย์

  4. ฟังก์ชั่นการลงคะแนนเสียง: ฟังก์ชั่น vote ช่วยให้ผู้ลงคะแนนเสียงที่ลงทะเบียนสามารถลงคะแนนเสียงได้ ใช้ดัชนีของข้อเสนอเป็นพารามิเตอร์และเพิ่มจำนวนคะแนนของข้อเสนอหนึ่งรายการ นอกจากนี้ยังตรวจสอบว่าผู้ลงคะแนนเสียงได้ลงคะแนนแล้วและอัปเดตสถานะของผู้ลงคะแนนเสียง

การรวบรวมและการทดสอบ

ตอนนี้เราได้เพิ่มคุณสมบัติเพิ่มเติมให้กับสัญญาของเราแล้ว ก็ถึงเวลารวบรวมและทดสอบ ใน Remix IDE ให้คลิกที่ไอคอนคอมไพเลอร์ Solidity ที่แถบด้านข้างซ้าย จากนั้นคลิกที่ปุ่ม "คอมไพล์"

หากต้องการทดสอบสัญญาของคุณ ไปที่แท็บ “ปรับใช้และเรียกใช้ธุรกรรม” (แท็บด้านล่างไอคอนคอมไพเลอร์ Solidity) และคลิกที่ปุ่ม “ปรับใช้” เมื่อปรับใช้สัญญาแล้ว คุณสามารถโต้ตอบกับสัญญาได้โดยการเรียกใช้ฟังก์ชันจากแท็บนี้ ลองลงทะเบียนผู้มีสิทธิเลือกตั้ง เพิ่มข้อเสนอ และลงคะแนนเสียงเพื่อดูว่ามันทำงานอย่างไร

ในบทถัดไป เราจะใช้ฟังก์ชันในการนับคะแนนเสียงและประกาศผลกระบวนการลงคะแนน ในระหว่างนี้ คุณสามารถสำรวจและทดลองสัญญาได้ตามใจชอบ Solidity นำเสนอคุณสมบัติอื่นๆ อีกมากมายที่สามารถทำให้สัญญาของคุณแข็งแกร่งและปลอดภัยยิ่งขึ้น ขอให้มีความสุขในการเขียนโค้ด!

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