Мы добавим систему предложений и возможность голосования для зарегистрированных избирателей. Для этого нам понадобится массив для хранения предложений и новая функция для голосования.
В контракт 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;
}
}
Давайте разберем новый код:
Структура предложения: Мы добавили новую структуру, Proposal
, которая содержит название предложения и количество голосов, полученных за него.
Массив предложений (Proposals Array): Массив предложений
содержит все предложения в системе голосования.
Функция Add Proposal: Функция addProposal
позволяет нам добавить новое предложение в массив предложений
. Название предложения передается в качестве параметра, а счетчик голосов первоначально устанавливается на ноль.
Функция голосования: Функция голосования
позволяет зарегистрированному избирателю отдать свой голос. Она принимает индекс предложения в качестве параметра и увеличивает количество голосов предложения на единицу. Он также проверяет, не проголосовал ли уже избиратель, и обновляет статус избирателя.
Теперь, когда мы добавили дополнительные возможности в наш контракт, пришло время скомпилировать и протестировать его. В IDE Remix щелкните на пиктограмме компилятора Solidity на левой боковой панели, а затем нажмите на кнопку "Компиляция".
Чтобы протестировать Ваш контракт, перейдите на вкладку "Deploy & Run Transactions" (та, что находится под иконкой компилятора Solidity) и нажмите на кнопку "Deploy". Когда контракт развернут, Вы можете взаимодействовать с ним, вызывая его функции с этой вкладки. Попробуйте зарегистрироваться в качестве избирателя, добавить предложение и проголосовать, чтобы увидеть, как это работает.
В следующем уроке мы реализуем функциональность для подсчета голосов и объявления результатов голосования. До тех пор не стесняйтесь исследовать и экспериментировать с контрактом. 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;
}
}
Давайте разберем новый код:
Структура предложения: Мы добавили новую структуру, Proposal
, которая содержит название предложения и количество голосов, полученных за него.
Массив предложений (Proposals Array): Массив предложений
содержит все предложения в системе голосования.
Функция Add Proposal: Функция addProposal
позволяет нам добавить новое предложение в массив предложений
. Название предложения передается в качестве параметра, а счетчик голосов первоначально устанавливается на ноль.
Функция голосования: Функция голосования
позволяет зарегистрированному избирателю отдать свой голос. Она принимает индекс предложения в качестве параметра и увеличивает количество голосов предложения на единицу. Он также проверяет, не проголосовал ли уже избиратель, и обновляет статус избирателя.
Теперь, когда мы добавили дополнительные возможности в наш контракт, пришло время скомпилировать и протестировать его. В IDE Remix щелкните на пиктограмме компилятора Solidity на левой боковой панели, а затем нажмите на кнопку "Компиляция".
Чтобы протестировать Ваш контракт, перейдите на вкладку "Deploy & Run Transactions" (та, что находится под иконкой компилятора Solidity) и нажмите на кнопку "Deploy". Когда контракт развернут, Вы можете взаимодействовать с ним, вызывая его функции с этой вкладки. Попробуйте зарегистрироваться в качестве избирателя, добавить предложение и проголосовать, чтобы увидеть, как это работает.
В следующем уроке мы реализуем функциональность для подсчета голосов и объявления результатов голосования. До тех пор не стесняйтесь исследовать и экспериментировать с контрактом. Solidity предлагает множество других возможностей, которые могут сделать Ваш контракт более надежным и безопасным. Счастливого кодирования!