Chúng tôi sẽ thêm một hệ thống đề xuất và một tùy chọn để cử tri đã đăng ký bỏ phiếu. Để làm được điều này, chúng ta sẽ cần một mảng để lưu trữ các đề xuất và một chức năng mới để bỏ phiếu.
Trong hợp đồng Voter
, thêm các dòng mã sau:
Độ rắn
// SPDX-Mã định danh giấy phép: GPL-3.0
độ rắn pragma >=0.7.0 <0.9.0;
hợp đồng Cử tri {
cấu trúc Người {
bool voted;
uint vote;
}
cấu trúc Đề xuất {
string name;
uint voteCount;
}
Đề xuất[] đề xuất công khai;
bản đồ(địa chỉ => Người) cử tri công cộng;
hàm registerVoter() public {
voters[msg.sender].voted = false;
}
hàm addProposal(string bộ nhớ _name) public {
proposals.push(Proposal(_name, 0));
}
hàm 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;
}
}
Hãy chia nhỏ mã mới:
Cấu trúc đề xuất: Chúng tôi đã thêm một cấu trúc mới, Proposal
, chứa tên của đề xuất và số phiếu bầu mà nó đã nhận được.
Mảng đề xuất: Mảng proposals
chứa tất cả các đề xuất trong hệ thống bỏ phiếu.
Thêm hàm đề xuất: Hàm addProposal
cho phép chúng ta thêm một đề xuất mới vào mảng proposals
. Tên đề xuất được chuyển dưới dạng tham số và số phiếu bầu ban đầu được đặt thành 0.
Chức năng bỏ phiếu: Chức năng vote
cho phép cử tri đã đăng ký bỏ phiếu. Nó lấy chỉ mục của một đề xuất làm tham số và tăng số phiếu bầu của đề xuất lên một. Nó cũng kiểm tra xem cử tri đã bỏ phiếu chưa và cập nhật trạng thái của cử tri.
Bây giờ chúng ta đã thêm nhiều tính năng hơn vào hợp đồng của mình, đã đến lúc biên dịch và thử nghiệm nó. Trong Remix IDE, nhấp vào biểu tượng trình biên dịch Solidity trên thanh bên trái rồi nhấp vào nút “Biên dịch”.
Để kiểm tra hợp đồng của bạn, hãy chuyển đến tab “Triển khai & Chạy giao dịch” (tab bên dưới biểu tượng trình biên dịch Solidity) và nhấp vào nút “Triển khai”. Sau khi hợp đồng được triển khai, bạn có thể tương tác với nó bằng cách gọi các chức năng của nó từ tab này. Hãy thử đăng ký cử tri, thêm đề xuất và bỏ phiếu để xem nó hoạt động như thế nào.
Trong bài học tiếp theo chúng ta sẽ triển khai chức năng kiểm phiếu và thông báo kết quả của quá trình bình chọn. Cho đến lúc đó, hãy thoải mái khám phá và thử nghiệm hợp đồng. Solidity cung cấp nhiều tính năng hơn có thể giúp hợp đồng của bạn mạnh mẽ và an toàn hơn. Chúc mừng mã hóa!
Chúng tôi sẽ thêm một hệ thống đề xuất và một tùy chọn để cử tri đã đăng ký bỏ phiếu. Để làm được điều này, chúng ta sẽ cần một mảng để lưu trữ các đề xuất và một chức năng mới để bỏ phiếu.
Trong hợp đồng Voter
, thêm các dòng mã sau:
Độ rắn
// SPDX-Mã định danh giấy phép: GPL-3.0
độ rắn pragma >=0.7.0 <0.9.0;
hợp đồng Cử tri {
cấu trúc Người {
bool voted;
uint vote;
}
cấu trúc Đề xuất {
string name;
uint voteCount;
}
Đề xuất[] đề xuất công khai;
bản đồ(địa chỉ => Người) cử tri công cộng;
hàm registerVoter() public {
voters[msg.sender].voted = false;
}
hàm addProposal(string bộ nhớ _name) public {
proposals.push(Proposal(_name, 0));
}
hàm 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;
}
}
Hãy chia nhỏ mã mới:
Cấu trúc đề xuất: Chúng tôi đã thêm một cấu trúc mới, Proposal
, chứa tên của đề xuất và số phiếu bầu mà nó đã nhận được.
Mảng đề xuất: Mảng proposals
chứa tất cả các đề xuất trong hệ thống bỏ phiếu.
Thêm hàm đề xuất: Hàm addProposal
cho phép chúng ta thêm một đề xuất mới vào mảng proposals
. Tên đề xuất được chuyển dưới dạng tham số và số phiếu bầu ban đầu được đặt thành 0.
Chức năng bỏ phiếu: Chức năng vote
cho phép cử tri đã đăng ký bỏ phiếu. Nó lấy chỉ mục của một đề xuất làm tham số và tăng số phiếu bầu của đề xuất lên một. Nó cũng kiểm tra xem cử tri đã bỏ phiếu chưa và cập nhật trạng thái của cử tri.
Bây giờ chúng ta đã thêm nhiều tính năng hơn vào hợp đồng của mình, đã đến lúc biên dịch và thử nghiệm nó. Trong Remix IDE, nhấp vào biểu tượng trình biên dịch Solidity trên thanh bên trái rồi nhấp vào nút “Biên dịch”.
Để kiểm tra hợp đồng của bạn, hãy chuyển đến tab “Triển khai & Chạy giao dịch” (tab bên dưới biểu tượng trình biên dịch Solidity) và nhấp vào nút “Triển khai”. Sau khi hợp đồng được triển khai, bạn có thể tương tác với nó bằng cách gọi các chức năng của nó từ tab này. Hãy thử đăng ký cử tri, thêm đề xuất và bỏ phiếu để xem nó hoạt động như thế nào.
Trong bài học tiếp theo chúng ta sẽ triển khai chức năng kiểm phiếu và thông báo kết quả của quá trình bình chọn. Cho đến lúc đó, hãy thoải mái khám phá và thử nghiệm hợp đồng. Solidity cung cấp nhiều tính năng hơn có thể giúp hợp đồng của bạn mạnh mẽ và an toàn hơn. Chúc mừng mã hóa!