เราจะเพิ่มระบบข้อเสนอและตัวเลือกสำหรับผู้ลงคะแนนเสียงที่ลงทะเบียนแล้วในการลงคะแนนเสียง สำหรับสิ่งนี้ เราจะต้องมีอาร์เรย์เพื่อจัดเก็บข้อเสนอและมีฟังก์ชันใหม่สำหรับการลงคะแนน
ในสัญญา 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;
}
}
มาแจกแจงรหัสใหม่:
โครงสร้างข้อเสนอ: เราได้เพิ่มโครงสร้างใหม่ Proposal
ซึ่งมีชื่อของข้อเสนอและจำนวนคะแนนที่ได้รับ
อาร์เรย์ข้อเสนอ: อาร์เรย์ proposals
จะเก็บข้อเสนอทั้งหมดไว้ในระบบการลงคะแนน
เพิ่มฟังก์ชันข้อเสนอ: ฟังก์ชั่น addProposal
ช่วยให้เราสามารถเพิ่มข้อเสนอใหม่ลงในอาร์เรย์ proposals
ได้ ชื่อข้อเสนอถูกส่งเป็นพารามิเตอร์ และเริ่มนับคะแนนเป็นศูนย์
ฟังก์ชั่นการลงคะแนนเสียง: ฟังก์ชั่น vote
ช่วยให้ผู้ลงคะแนนเสียงที่ลงทะเบียนสามารถลงคะแนนเสียงได้ ใช้ดัชนีของข้อเสนอเป็นพารามิเตอร์และเพิ่มจำนวนคะแนนของข้อเสนอหนึ่งรายการ นอกจากนี้ยังตรวจสอบว่าผู้ลงคะแนนเสียงได้ลงคะแนนแล้วและอัปเดตสถานะของผู้ลงคะแนนเสียง
ตอนนี้เราได้เพิ่มคุณสมบัติเพิ่มเติมให้กับสัญญาของเราแล้ว ก็ถึงเวลารวบรวมและทดสอบ ใน Remix IDE ให้คลิกที่ไอคอนคอมไพเลอร์ Solidity ที่แถบด้านข้างซ้าย จากนั้นคลิกที่ปุ่ม "คอมไพล์"
หากต้องการทดสอบสัญญาของคุณ ไปที่แท็บ “ปรับใช้และเรียกใช้ธุรกรรม” (แท็บด้านล่างไอคอนคอมไพเลอร์ Solidity) และคลิกที่ปุ่ม “ปรับใช้” เมื่อปรับใช้สัญญาแล้ว คุณสามารถโต้ตอบกับสัญญาได้โดยการเรียกใช้ฟังก์ชันจากแท็บนี้ ลองลงทะเบียนผู้มีสิทธิเลือกตั้ง เพิ่มข้อเสนอ และลงคะแนนเสียงเพื่อดูว่ามันทำงานอย่างไร
ในบทถัดไป เราจะใช้ฟังก์ชันในการนับคะแนนเสียงและประกาศผลกระบวนการลงคะแนน ในระหว่างนี้ คุณสามารถสำรวจและทดลองสัญญาได้ตามใจชอบ 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;
}
}
มาแจกแจงรหัสใหม่:
โครงสร้างข้อเสนอ: เราได้เพิ่มโครงสร้างใหม่ Proposal
ซึ่งมีชื่อของข้อเสนอและจำนวนคะแนนที่ได้รับ
อาร์เรย์ข้อเสนอ: อาร์เรย์ proposals
จะเก็บข้อเสนอทั้งหมดไว้ในระบบการลงคะแนน
เพิ่มฟังก์ชันข้อเสนอ: ฟังก์ชั่น addProposal
ช่วยให้เราสามารถเพิ่มข้อเสนอใหม่ลงในอาร์เรย์ proposals
ได้ ชื่อข้อเสนอถูกส่งเป็นพารามิเตอร์ และเริ่มนับคะแนนเป็นศูนย์
ฟังก์ชั่นการลงคะแนนเสียง: ฟังก์ชั่น vote
ช่วยให้ผู้ลงคะแนนเสียงที่ลงทะเบียนสามารถลงคะแนนเสียงได้ ใช้ดัชนีของข้อเสนอเป็นพารามิเตอร์และเพิ่มจำนวนคะแนนของข้อเสนอหนึ่งรายการ นอกจากนี้ยังตรวจสอบว่าผู้ลงคะแนนเสียงได้ลงคะแนนแล้วและอัปเดตสถานะของผู้ลงคะแนนเสียง
ตอนนี้เราได้เพิ่มคุณสมบัติเพิ่มเติมให้กับสัญญาของเราแล้ว ก็ถึงเวลารวบรวมและทดสอบ ใน Remix IDE ให้คลิกที่ไอคอนคอมไพเลอร์ Solidity ที่แถบด้านข้างซ้าย จากนั้นคลิกที่ปุ่ม "คอมไพล์"
หากต้องการทดสอบสัญญาของคุณ ไปที่แท็บ “ปรับใช้และเรียกใช้ธุรกรรม” (แท็บด้านล่างไอคอนคอมไพเลอร์ Solidity) และคลิกที่ปุ่ม “ปรับใช้” เมื่อปรับใช้สัญญาแล้ว คุณสามารถโต้ตอบกับสัญญาได้โดยการเรียกใช้ฟังก์ชันจากแท็บนี้ ลองลงทะเบียนผู้มีสิทธิเลือกตั้ง เพิ่มข้อเสนอ และลงคะแนนเสียงเพื่อดูว่ามันทำงานอย่างไร
ในบทถัดไป เราจะใช้ฟังก์ชันในการนับคะแนนเสียงและประกาศผลกระบวนการลงคะแนน ในระหว่างนี้ คุณสามารถสำรวจและทดลองสัญญาได้ตามใจชอบ Solidity นำเสนอคุณสมบัติอื่นๆ อีกมากมายที่สามารถทำให้สัญญาของคุณแข็งแกร่งและปลอดภัยยิ่งขึ้น ขอให้มีความสุขในการเขียนโค้ด!