Урок 2

Triển khai đăng ký cử tri và bỏ phiếu

Trong bài học này, chúng ta sẽ tiếp tục phát triển hệ thống bỏ phiếu phi tập trung bằng cách triển khai các chức năng đăng ký cử tri và bỏ phiếu. Chúng ta sẽ bắt đầu bằng cách mở rộng hợp đồng Cử tri và sau đó đi sâu vào chi tiết về ánh xạ và mảng của Solidity.

Mở rộng hợp đồng cử tri

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; 
    }
}

Hiểu mã

Hãy chia nhỏ mã mới:

  1. 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.

  2. Mảng đề xuất: Mảng proposals chứa tất cả các đề xuất trong hệ thống bỏ phiếu.

  3. 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.

  4. 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.

Biên dịch và thử nghiệm

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!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 2

Triển khai đăng ký cử tri và bỏ phiếu

Trong bài học này, chúng ta sẽ tiếp tục phát triển hệ thống bỏ phiếu phi tập trung bằng cách triển khai các chức năng đăng ký cử tri và bỏ phiếu. Chúng ta sẽ bắt đầu bằng cách mở rộng hợp đồng Cử tri và sau đó đi sâu vào chi tiết về ánh xạ và mảng của Solidity.

Mở rộng hợp đồng cử tri

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; 
    }
}

Hiểu mã

Hãy chia nhỏ mã mới:

  1. 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.

  2. Mảng đề xuất: Mảng proposals chứa tất cả các đề xuất trong hệ thống bỏ phiếu.

  3. 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.

  4. 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.

Biên dịch và thử nghiệm

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!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.