Урок 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 предлагает множество других возможностей, которые могут сделать Ваш контракт более надежным и безопасным. Счастливого кодирования!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 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 предлагает множество других возможностей, которые могут сделать Ваш контракт более надежным и безопасным. Счастливого кодирования!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.