Pelajaran 2

Melaksanakan Pendaftaran Pemilih dan Pemberian Suara

Dalam pelajaran ini, kami akan terus mengembangkan sistem pemungutan suara terdesentralisasi dengan menerapkan fungsi pendaftaran pemilih dan pemberian suara. Kami akan mulai dengan memperluas kontrak Pemilih kami dan kemudian mendalami detail pemetaan dan susunan Solidity.

Memperluas Kontrak Pemilih

Kami akan menambahkan sistem proposal dan opsi bagi pemilih terdaftar untuk memilih. Untuk ini, kita memerlukan array untuk menyimpan proposal dan fungsi baru untuk pemungutan suara.

Dalam kontrak Voter , tambahkan baris kode berikut:

Soliditas 
 // Pengenal Lisensi SPDX: GPL-3.0 
 pragma soliditas >=0.7.0 <0.9.0; 

 kontrak Pemilih { 
 struct Person {
        bool voted;  
        uint vote;   
    }

    struct Proposal {
        string name;   
        uint voteCount; 
    }

    Proposal[] proposal publik; 
 pemetaan (alamat => Orang) pemilih masyarakat; 

 fungsi registerVoter() publik {
        voters[msg.sender].voted = false;
    }

    fungsi addProposal(string memori _nama) publik {
        proposals.push(Proposal(_name, 0));
    }

    fungsi suara(uint _proposal) publik { 
     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; 
    }
}

Memahami Kode

Mari kita uraikan kode barunya:

  1. Struktur Proposal: Kami telah menambahkan struktur baru, Proposal, yang berisi nama proposal dan jumlah suara yang diterima.

  2. Susunan Proposal: Susunan proposals menampung semua proposal dalam sistem pemungutan suara.

  3. Fungsi Tambahkan Proposal: Fungsi addProposal memungkinkan kita menambahkan proposal baru ke array proposals . Nama proposal diteruskan sebagai parameter, dan penghitungan suara awalnya disetel ke nol.

  4. Fungsi Pemungutan Suara: Fungsi vote memungkinkan pemilih terdaftar untuk memberikan suaranya. Dibutuhkan indeks proposal sebagai parameter dan meningkatkan jumlah suara proposal sebanyak satu. Ia juga memeriksa apakah pemilih telah memilih dan memperbarui status pemilih.

Kompilasi dan Pengujian

Sekarang kami telah menambahkan lebih banyak fitur ke kontrak kami, sekarang saatnya untuk mengkompilasi dan mengujinya. Di Remix IDE, klik ikon Solidity compiler di sidebar kiri dan kemudian klik tombol “Compile”.

Untuk menguji kontrak Anda, buka tab “Deploy & Run Transactions” (yang ada di bawah ikon compiler Solidity) dan klik tombol “Deploy”. Setelah kontrak diterapkan, Anda dapat berinteraksi dengannya dengan memanggil fungsinya dari tab ini. Coba daftarkan pemilih, tambahkan proposal, dan berikan suara untuk melihat cara kerjanya.

Pada pelajaran berikutnya, kita akan mengimplementasikan fungsi untuk menghitung suara dan mengumumkan hasil proses pemungutan suara. Sampai saat itu tiba, jangan ragu untuk mengeksplorasi dan bereksperimen dengan kontrak tersebut. Solidity menawarkan lebih banyak fitur yang dapat membuat kontrak Anda lebih kuat dan aman. Selamat membuat kode!

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.
Katalog
Pelajaran 2

Melaksanakan Pendaftaran Pemilih dan Pemberian Suara

Dalam pelajaran ini, kami akan terus mengembangkan sistem pemungutan suara terdesentralisasi dengan menerapkan fungsi pendaftaran pemilih dan pemberian suara. Kami akan mulai dengan memperluas kontrak Pemilih kami dan kemudian mendalami detail pemetaan dan susunan Solidity.

Memperluas Kontrak Pemilih

Kami akan menambahkan sistem proposal dan opsi bagi pemilih terdaftar untuk memilih. Untuk ini, kita memerlukan array untuk menyimpan proposal dan fungsi baru untuk pemungutan suara.

Dalam kontrak Voter , tambahkan baris kode berikut:

Soliditas 
 // Pengenal Lisensi SPDX: GPL-3.0 
 pragma soliditas >=0.7.0 <0.9.0; 

 kontrak Pemilih { 
 struct Person {
        bool voted;  
        uint vote;   
    }

    struct Proposal {
        string name;   
        uint voteCount; 
    }

    Proposal[] proposal publik; 
 pemetaan (alamat => Orang) pemilih masyarakat; 

 fungsi registerVoter() publik {
        voters[msg.sender].voted = false;
    }

    fungsi addProposal(string memori _nama) publik {
        proposals.push(Proposal(_name, 0));
    }

    fungsi suara(uint _proposal) publik { 
     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; 
    }
}

Memahami Kode

Mari kita uraikan kode barunya:

  1. Struktur Proposal: Kami telah menambahkan struktur baru, Proposal, yang berisi nama proposal dan jumlah suara yang diterima.

  2. Susunan Proposal: Susunan proposals menampung semua proposal dalam sistem pemungutan suara.

  3. Fungsi Tambahkan Proposal: Fungsi addProposal memungkinkan kita menambahkan proposal baru ke array proposals . Nama proposal diteruskan sebagai parameter, dan penghitungan suara awalnya disetel ke nol.

  4. Fungsi Pemungutan Suara: Fungsi vote memungkinkan pemilih terdaftar untuk memberikan suaranya. Dibutuhkan indeks proposal sebagai parameter dan meningkatkan jumlah suara proposal sebanyak satu. Ia juga memeriksa apakah pemilih telah memilih dan memperbarui status pemilih.

Kompilasi dan Pengujian

Sekarang kami telah menambahkan lebih banyak fitur ke kontrak kami, sekarang saatnya untuk mengkompilasi dan mengujinya. Di Remix IDE, klik ikon Solidity compiler di sidebar kiri dan kemudian klik tombol “Compile”.

Untuk menguji kontrak Anda, buka tab “Deploy & Run Transactions” (yang ada di bawah ikon compiler Solidity) dan klik tombol “Deploy”. Setelah kontrak diterapkan, Anda dapat berinteraksi dengannya dengan memanggil fungsinya dari tab ini. Coba daftarkan pemilih, tambahkan proposal, dan berikan suara untuk melihat cara kerjanya.

Pada pelajaran berikutnya, kita akan mengimplementasikan fungsi untuk menghitung suara dan mengumumkan hasil proses pemungutan suara. Sampai saat itu tiba, jangan ragu untuk mengeksplorasi dan bereksperimen dengan kontrak tersebut. Solidity menawarkan lebih banyak fitur yang dapat membuat kontrak Anda lebih kuat dan aman. Selamat membuat kode!

Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.