Solidity言語学習(三)-インテリジェント契約プログラミングケース一投票システム

2210 ワード

次に、Solidity言語を使用したスマート契約の作成について、実際のコード分析を通じて理解するスマート契約を作成します.
以下の契約は比較的複雑であるが,多くのSolidityの特性を示している.簡単な投票システムを実現しましたもちろん、電子投票の鍵は、投票者に正しい投票者に権限をどのように分配し、不法な投票者を阻止するかだ.ここではすべての機能を実現していませんが、投票を代理することができ、自動的に票数を計算することができ、投票過程全体が完全に透明です.
各票に契約を作成し、略称を提供します.契約の作成者、つまりchairpersonは投票権を各住所に割り当てる権利がある.
投票権が割り当てられた住所は、自分で投票することも、信頼できる人に投票権を代行することもできます.
投票が終わると、winningProposal()が最も多くの票を獲得した票を返します.

pragma solidity ^0.4.22;

///          
contract Ballot {

    //               ,            。
    struct Voter {
        uint weight;//            
        bool voted;//          ,  true     
        address delegate;//          
        uint vote;//         
    }

    //           
    struct Proposal {
        bytes32 name;//      (   32 bytes)
        uint voteCount;//         
    }

    address public chairperson;

    //        mapping,      Voter address
    mapping(address => Voter) public voters;

     //              
    Proposal[] public proposals;

    //    ,       ,     
    function Ballot(bytes32[] proposalNames) public {
        chairperson = msg.sender;
        voters[chairperson].weight = 1;

        //                 ,       
        for(uint i=0; i winningVoteCount){
                winningVoteCount = proposals[p].voteCount;
                winningProposal_ = p;
            }
        }
    }

    //   winningProposal,           ,       。
    function winnerName() public view returns (bytes32 winnerName_){
        winnerName_ = proposals[winningProposal()].name;
    }
}