Ми додамо систему пропозицій і можливість голосувати зареєстрованим виборцям. Для цього нам знадобиться масив для зберігання пропозицій і нова функція для голосування.
У договір 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 пропонує багато інших функцій, які можуть зробити ваш контракт більш надійним і безпечним. Щасливого кодування!