Solidity 智能合约示例:投票选举系统
以下是一个简单的 Solidity 合约示例,用于实现基本的投票选举功能:
pragma solidity ^0.8.0;
contract Election {
struct Candidate {
uint id;
string name;
uint voteCount;
}
mapping(uint => Candidate) public candidates;
mapping(address => bool) public voters;
uint public candidatesCount;
event votedEvent (
uint indexed _candidateId
);
constructor() {
addCandidate('候选人1');
addCandidate('候选人2');
}
function addCandidate(string memory _name) private {
candidates[candidatesCount] = Candidate(candidatesCount, _name, 0);
candidatesCount++;
}
function vote(uint _candidateId) public {
require(!voters[msg.sender], '你已投过票!');
require(_candidateId >= 0 && _candidateId < candidatesCount, '候选人ID无效!');
candidates[_candidateId].voteCount++;
voters[msg.sender] = true;
emit votedEvent(_candidateId);
}
}
这个合约中包含了一个Candidate结构体,用于表示候选人的信息,包括 ID、名称和得票数。合约中还包括了一个候选人映射candidates,用于存储候选人的信息;一个投票者映射voters,用于记录投票者的状态;一个候选人计数器candidatesCount,用于记录候选人数量。
合约的构造函数初始化了两个候选人。addCandidate函数用于添加候选人,仅限内部调用。
vote函数用于投票,它接受一个候选人 ID 作为参数。在投票之前,会检查当前投票者是否已经投过票,并确保候选人 ID 有效。如果满足条件,将增加该候选人的得票数,并将投票者状态设置为已投票。最后,通过votedEvent事件触发投票事件。
你可以将以上 Solidity 代码复制到 Solidity 编译器中进行编译和部署。请注意,这只是一个简单的示例,实际的投票选举系统会更加复杂,并需要考虑更多的安全性和合规性因素。
原文地址: https://www.cveoy.top/t/topic/oT1 著作权归作者所有。请勿转载和采集!