Урок 2

Здійснення реєстрації виборців та голосування

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

Розуміння Кодексу

Давайте розберемо новий код:

  1. Структура пропозиції: ми додали нову структуру, Proposal, яка містить назву пропозиції та кількість голосів, які вона отримала.

  2. Масив пропозицій: Масив proposals містить усі пропозиції в системі голосування.

  3. Функція Add Proposal: функція addProposal дозволяє нам додавати нову пропозицію до масиву proposals . Назва пропозиції передається як параметр, а підрахунок голосів спочатку обнулюється.

  4. Функція голосування: функція vote дозволяє зареєстрованому виборцю віддати свій голос. Він приймає індекс пропозиції як параметр і збільшує кількість голосів пропозиції на одиницю. Він також перевіряє, чи виборець уже проголосував, і оновлює статус виборця.

Компіляція та тестування

Тепер, коли ми додали більше функцій до нашого контракту, настав час скомпілювати та протестувати його. У Remix IDE натисніть піктограму компілятора Solidity на лівій бічній панелі, а потім натисніть кнопку «Компілювати».

Щоб протестувати свій контракт, перейдіть на вкладку «Deploy & Run Transactions» (ту, що знаходиться під піктограмою компілятора Solidity) і натисніть кнопку «Deploy». Після розгортання контракту ви можете взаємодіяти з ним, викликаючи його функції з цієї вкладки. Спробуйте зареєструвати виборця, додати пропозицію та проголосувати, щоб побачити, як це працює.

На наступному уроці ми запровадимо функціональність для підрахунку голосів і оголошення результатів процесу голосування. До того часу сміливо досліджуйте та експериментуйте з контрактом. Solidity пропонує багато інших функцій, які можуть зробити ваш контракт більш надійним і безпечним. Щасливого кодування!

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 2

Здійснення реєстрації виборців та голосування

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

Розуміння Кодексу

Давайте розберемо новий код:

  1. Структура пропозиції: ми додали нову структуру, Proposal, яка містить назву пропозиції та кількість голосів, які вона отримала.

  2. Масив пропозицій: Масив proposals містить усі пропозиції в системі голосування.

  3. Функція Add Proposal: функція addProposal дозволяє нам додавати нову пропозицію до масиву proposals . Назва пропозиції передається як параметр, а підрахунок голосів спочатку обнулюється.

  4. Функція голосування: функція vote дозволяє зареєстрованому виборцю віддати свій голос. Він приймає індекс пропозиції як параметр і збільшує кількість голосів пропозиції на одиницю. Він також перевіряє, чи виборець уже проголосував, і оновлює статус виборця.

Компіляція та тестування

Тепер, коли ми додали більше функцій до нашого контракту, настав час скомпілювати та протестувати його. У Remix IDE натисніть піктограму компілятора 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 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.