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