假设要创建一个简单的投票智能合约,包括创建选项、投票和查询投票结果等功能。
代码实现:
pragma solidity ^0.8.0;
contract VotingContract {
struct Option {
string name;
uint voteCount;
}
Option[] public options;
mapping(address => bool) public voters;
event OptionCreated(string name);
event Voted(address voter, uint optionIndex);
event VotingResult(string optionName, uint voteCount);
function createOption(string memory _name) public {
require(options.length < 10, "Exceeded maximum number of options");
options.push(Option(_name, 0));
emit OptionCreated(_name);
}
function vote(uint _optionIndex) public {
require(_optionIndex < options.length, "Invalid option index");
require(!voters[msg.sender], "Already voted");
options[_optionIndex].voteCount++;
voters[msg.sender] = true;
emit Voted(msg.sender, _optionIndex);
}
function getVotingResult() public {
require(options.length > 0, "No options available");
for (uint i = 0; i < options.length; i++) {
emit VotingResult(options[i].name, options[i].voteCount);
}
}
}
这个智能合约实现了完整的投票功能。合约中包含了一个名为Option
的结构体,用于表示选项的名称和投票数。options
数组用于存储投票选项,voters
映射用于记录哪些地址已经投票。
createOption
:用于创建一个新的投票选项,会触发OptionCreated
事件;
vote
:用于进行投票,会增加相应选项的投票数,并且记录投票者,每个地址只能投一次票,会触发Voted
事件;getVotingResult
:用于查询投票结果,会依次触发VotingResult
事件,显示每个选项的名称和投票数。这个智能合约可以部署在以太坊或其他兼容的区块链网络上,在部署后,可以通过调用合约的函数来创建选项、进行投票和查询结果。