Lección 2

有権者登録と投票の実施

このレッスンでは、有権者登録と投票の機能を実装することにより、分散型投票システムの開発を続けます。 まず、Voter コントラクトを拡張し、次に Solidity のマッピングと配列の詳細を掘り下げます。

有権者契約の拡大

提案制度と登録有権者が投票できるオプションを追加します。 このためには、提案を格納するための配列と、投票用の新しい関数が必要です。

コントラクトに Voter 、次のコード行を追加します。

硬度
SPDX-ライセンス識別子: GPL-3.0
プラグマの堅実さ >=0.7.0 <0.9.0;

契約有権者 {
    struct Person {
        bool voted;  
        uint vote;   
    }

struct プロポーザル {
        string name;   
        uint voteCount; 
    }

プロポーザル[] 公開プロポーザル;
    mapping(address => Person) 一般投票者;

関数 registerVoter() public {
        voters[msg.sender].voted = false;
    }

function addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

function vote(uint _proposal) 公開 { 
     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. 提案関数の追加: この addProposal 関数を使用すると、配列に proposals 新しい提案を追加できます。 プロポーザル名はパラメーターとして渡され、投票数は最初は 0 に設定されます。

  4. 投票機能: 登録 vote 有権者が投票できる機能です。 プロポーザルのインデックスをパラメーターとして受け取り、プロポーザルの投票数を 1 つ増やします。 また、投票者がすでに投票しているかどうかを確認し、投票者のステータスを更新します。

コンパイルとテスト

コントラクトにさらに機能を追加したので、次はそれをコンパイルしてテストします。 Remix IDEで、左側のサイドバーにあるSolidityコンパイラアイコンをクリックし、「コンパイル」ボタンをクリックします。

コントラクトをテストするには、"Deploy & Run Transactions" タブ (Solidity コンパイラーアイコンの下) に移動し、「Deploy」ボタンをクリックします。 コントラクトがデプロイされたら、このタブからその関数を呼び出すことで、コントラクトを操作できます。 有権者を登録し、提案を追加し、投票して、それがどのように機能するかを確認してください。

次のレッスンでは、投票を集計し、投票プロセスの結果を通知する機能を実装します。 それまでは、コントラクトを自由に調べて実験してください。 Solidityは、契約をより堅牢で安全なものにするために、さらに多くの機能を提供しています。 ハッピーコーディング!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 2

有権者登録と投票の実施

このレッスンでは、有権者登録と投票の機能を実装することにより、分散型投票システムの開発を続けます。 まず、Voter コントラクトを拡張し、次に Solidity のマッピングと配列の詳細を掘り下げます。

有権者契約の拡大

提案制度と登録有権者が投票できるオプションを追加します。 このためには、提案を格納するための配列と、投票用の新しい関数が必要です。

コントラクトに Voter 、次のコード行を追加します。

硬度
SPDX-ライセンス識別子: GPL-3.0
プラグマの堅実さ >=0.7.0 <0.9.0;

契約有権者 {
    struct Person {
        bool voted;  
        uint vote;   
    }

struct プロポーザル {
        string name;   
        uint voteCount; 
    }

プロポーザル[] 公開プロポーザル;
    mapping(address => Person) 一般投票者;

関数 registerVoter() public {
        voters[msg.sender].voted = false;
    }

function addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

function vote(uint _proposal) 公開 { 
     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. 提案関数の追加: この addProposal 関数を使用すると、配列に proposals 新しい提案を追加できます。 プロポーザル名はパラメーターとして渡され、投票数は最初は 0 に設定されます。

  4. 投票機能: 登録 vote 有権者が投票できる機能です。 プロポーザルのインデックスをパラメーターとして受け取り、プロポーザルの投票数を 1 つ増やします。 また、投票者がすでに投票しているかどうかを確認し、投票者のステータスを更新します。

コンパイルとテスト

コントラクトにさらに機能を追加したので、次はそれをコンパイルしてテストします。 Remix IDEで、左側のサイドバーにあるSolidityコンパイラアイコンをクリックし、「コンパイル」ボタンをクリックします。

コントラクトをテストするには、"Deploy & Run Transactions" タブ (Solidity コンパイラーアイコンの下) に移動し、「Deploy」ボタンをクリックします。 コントラクトがデプロイされたら、このタブからその関数を呼び出すことで、コントラクトを操作できます。 有権者を登録し、提案を追加し、投票して、それがどのように機能するかを確認してください。

次のレッスンでは、投票を集計し、投票プロセスの結果を通知する機能を実装します。 それまでは、コントラクトを自由に調べて実験してください。 Solidityは、契約をより堅牢で安全なものにするために、さらに多くの機能を提供しています。 ハッピーコーディング!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.