Ми додамо систему пропозицій і можливість голосувати зареєстрованим виборцям. Для цього нам знадобиться масив для зберігання пропозицій і нова функція для голосування.
У договір Voter
додайте такі рядки коду:
Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
контракт Виборець {
struct Особа {
bool voted;
uint vote;
}
struct Proposal {
string name;
uint voteCount;
}
Proposal[] публічні пропозиції;
відображення (адреса => особа) публічних виборців;
функція registerVoter() public {
voters[msg.sender].voted = false;
}
функція addProposal(string memory _name) public {
proposals.push(Proposal(_name, 0));
}
функція 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
містить усі пропозиції в системі голосування.
Функція Add Proposal: функція addProposal
дозволяє нам додавати нову пропозицію до масиву proposals
. Назва пропозиції передається як параметр, а підрахунок голосів спочатку обнулюється.
Функція голосування: функція vote
дозволяє зареєстрованому виборцю віддати свій голос. Він приймає індекс пропозиції як параметр і збільшує кількість голосів пропозиції на одиницю. Він також перевіряє, чи виборець уже проголосував, і оновлює статус виборця.
Тепер, коли ми додали більше функцій до нашого контракту, настав час скомпілювати та протестувати його. У Remix IDE натисніть піктограму компілятора Solidity на лівій бічній панелі, а потім натисніть кнопку «Компілювати».
Щоб протестувати свій контракт, перейдіть на вкладку «Deploy & Run Transactions» (ту, що знаходиться під піктограмою компілятора Solidity) і натисніть кнопку «Deploy». Після розгортання контракту ви можете взаємодіяти з ним, викликаючи його функції з цієї вкладки. Спробуйте зареєструвати виборця, додати пропозицію та проголосувати, щоб побачити, як це працює.
На наступному уроці ми запровадимо функціональність для підрахунку голосів і оголошення результатів процесу голосування. До того часу сміливо досліджуйте та експериментуйте з контрактом. Solidity пропонує багато інших функцій, які можуть зробити ваш контракт більш надійним і безпечним. Щасливого кодування!
Ми додамо систему пропозицій і можливість голосувати зареєстрованим виборцям. Для цього нам знадобиться масив для зберігання пропозицій і нова функція для голосування.
У договір Voter
додайте такі рядки коду:
Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
контракт Виборець {
struct Особа {
bool voted;
uint vote;
}
struct Proposal {
string name;
uint voteCount;
}
Proposal[] публічні пропозиції;
відображення (адреса => особа) публічних виборців;
функція registerVoter() public {
voters[msg.sender].voted = false;
}
функція addProposal(string memory _name) public {
proposals.push(Proposal(_name, 0));
}
функція 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
містить усі пропозиції в системі голосування.
Функція Add Proposal: функція addProposal
дозволяє нам додавати нову пропозицію до масиву proposals
. Назва пропозиції передається як параметр, а підрахунок голосів спочатку обнулюється.
Функція голосування: функція vote
дозволяє зареєстрованому виборцю віддати свій голос. Він приймає індекс пропозиції як параметр і збільшує кількість голосів пропозиції на одиницю. Він також перевіряє, чи виборець уже проголосував, і оновлює статус виборця.
Тепер, коли ми додали більше функцій до нашого контракту, настав час скомпілювати та протестувати його. У Remix IDE натисніть піктограму компілятора Solidity на лівій бічній панелі, а потім натисніть кнопку «Компілювати».
Щоб протестувати свій контракт, перейдіть на вкладку «Deploy & Run Transactions» (ту, що знаходиться під піктограмою компілятора Solidity) і натисніть кнопку «Deploy». Після розгортання контракту ви можете взаємодіяти з ним, викликаючи його функції з цієї вкладки. Спробуйте зареєструвати виборця, додати пропозицію та проголосувати, щоб побачити, як це працює.
На наступному уроці ми запровадимо функціональність для підрахунку голосів і оголошення результатів процесу голосування. До того часу сміливо досліджуйте та експериментуйте з контрактом. Solidity пропонує багато інших функцій, які можуть зробити ваш контракт більш надійним і безпечним. Щасливого кодування!