Bài học 2

Реализация регистрации избирателей и голосования

В этом уроке мы продолжим разработку нашей децентрализованной системы голосования, реализовав функциональные возможности для регистрации избирателей и голосования. Мы начнем с расширения нашего контракта Voter, а затем погрузимся в детали отображений и массивов Solidity.

Расширение избирательного контракта

Мы добавим систему предложений и возможность голосования для зарегистрированных избирателей. Для этого нам понадобится массив для хранения предложений и новая функция для голосования.

В контракт Voter добавьте следующие строки кода:

Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Voter {
 struct Person {
        bool voted;  
        uint vote;   
    }

    struct Proposal {
        string name;   
        uint voteCount; 
    }

    Proposal[] public proposals;
 mapping(address => Person) public voters;

 function registerVoter() public {
        voters[msg.sender].voted = false;
    }

    function addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

    function 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 Array): Массив предложений содержит все предложения в системе голосования.

  3. Функция Add Proposal: Функция addProposal позволяет нам добавить новое предложение в массив предложений. Название предложения передается в качестве параметра, а счетчик голосов первоначально устанавливается на ноль.

  4. Функция голосования: Функция голосования позволяет зарегистрированному избирателю отдать свой голос. Она принимает индекс предложения в качестве параметра и увеличивает количество голосов предложения на единицу. Он также проверяет, не проголосовал ли уже избиратель, и обновляет статус избирателя.

Компиляция и тестирование

Теперь, когда мы добавили дополнительные возможности в наш контракт, пришло время скомпилировать и протестировать его. В IDE Remix щелкните на пиктограмме компилятора Solidity на левой боковой панели, а затем нажмите на кнопку "Компиляция".

Чтобы протестировать Ваш контракт, перейдите на вкладку "Deploy & Run Transactions" (та, что находится под иконкой компилятора Solidity) и нажмите на кнопку "Deploy". Когда контракт развернут, Вы можете взаимодействовать с ним, вызывая его функции с этой вкладки. Попробуйте зарегистрироваться в качестве избирателя, добавить предложение и проголосовать, чтобы увидеть, как это работает.

В следующем уроке мы реализуем функциональность для подсчета голосов и объявления результатов голосования. До тех пор не стесняйтесь исследовать и экспериментировать с контрактом. Solidity предлагает множество других возможностей, которые могут сделать Ваш контракт более надежным и безопасным. Счастливого кодирования!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 2

Реализация регистрации избирателей и голосования

В этом уроке мы продолжим разработку нашей децентрализованной системы голосования, реализовав функциональные возможности для регистрации избирателей и голосования. Мы начнем с расширения нашего контракта Voter, а затем погрузимся в детали отображений и массивов Solidity.

Расширение избирательного контракта

Мы добавим систему предложений и возможность голосования для зарегистрированных избирателей. Для этого нам понадобится массив для хранения предложений и новая функция для голосования.

В контракт Voter добавьте следующие строки кода:

Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Voter {
 struct Person {
        bool voted;  
        uint vote;   
    }

    struct Proposal {
        string name;   
        uint voteCount; 
    }

    Proposal[] public proposals;
 mapping(address => Person) public voters;

 function registerVoter() public {
        voters[msg.sender].voted = false;
    }

    function addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

    function 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 Array): Массив предложений содержит все предложения в системе голосования.

  3. Функция Add Proposal: Функция addProposal позволяет нам добавить новое предложение в массив предложений. Название предложения передается в качестве параметра, а счетчик голосов первоначально устанавливается на ноль.

  4. Функция голосования: Функция голосования позволяет зарегистрированному избирателю отдать свой голос. Она принимает индекс предложения в качестве параметра и увеличивает количество голосов предложения на единицу. Он также проверяет, не проголосовал ли уже избиратель, и обновляет статус избирателя.

Компиляция и тестирование

Теперь, когда мы добавили дополнительные возможности в наш контракт, пришло время скомпилировать и протестировать его. В IDE Remix щелкните на пиктограмме компилятора Solidity на левой боковой панели, а затем нажмите на кнопку "Компиляция".

Чтобы протестировать Ваш контракт, перейдите на вкладку "Deploy & Run Transactions" (та, что находится под иконкой компилятора Solidity) и нажмите на кнопку "Deploy". Когда контракт развернут, Вы можете взаимодействовать с ним, вызывая его функции с этой вкладки. Попробуйте зарегистрироваться в качестве избирателя, добавить предложение и проголосовать, чтобы увидеть, как это работает.

В следующем уроке мы реализуем функциональность для подсчета голосов и объявления результатов голосования. До тех пор не стесняйтесь исследовать и экспериментировать с контрактом. Solidity предлагает множество других возможностей, которые могут сделать Ваш контракт более надежным и безопасным. Счастливого кодирования!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.