使用 Solidity 语言编写智能合约创建一个投票平台的代码
时间: 2024-05-02 22:16:12 浏览: 86
以下是一个简单的 Solidity 投票合约代码:
```
pragma solidity ^0.8.0;
contract Voting {
// 投票候选人的结构体
struct Candidate {
uint id;
string name;
uint voteCount;
}
// 存储所有候选人的映射
mapping(uint => Candidate) public candidates;
// 存储所有已投票人的映射
mapping(address => bool) public voters;
// 投票候选人的数量
uint public candidatesCount;
// 构造函数,初始化候选人列表
constructor() public {
addCandidate("候选人1");
addCandidate("候选人2");
}
// 添加候选人的函数
function addCandidate(string memory _name) private {
candidatesCount++;
candidates[candidatesCount] = Candidate(candidatesCount, _name, 0);
}
// 投票操作的函数
function vote(uint _candidateId) public {
// 确保该地址没有投过票
require(!voters[msg.sender], "您已经投过票了!");
// 确保候选人存在
require(_candidateId > 0 && _candidateId <= candidatesCount, "候选人不存在!");
// 记录该地址已经投过票了
voters[msg.sender] = true;
// 增加候选人的得票数
candidates[_candidateId].voteCount++;
// 触发投票事件
emit voteEvent(_candidateId);
}
// 投票事件
event voteEvent(uint indexed _candidateId);
}
```
上面代码中,我们定义了一个投票合约,其中包含以下几个要点:
- 一个结构体来存储候选人的信息,包括候选人的 ID、名字和得票数。
- 一个用于存储所有候选人的映射,以及一个用于存储所有已投票人的映射。
- 一个构造函数,初始化候选人列表。
- 一个添加候选人的函数,这个函数是私有的,只能在合约内部调用。
- 一个投票操作的函数,这个函数会检查投票人是否已经投过票,以及候选人是否存在。如果一切正常,那么就增加候选人的得票数,并且触发一个投票事件。
- 一个投票事件,当有人投票时会触发该事件。
这只是一个简单的示例,实际上,投票合约还需要考虑很多其他的因素,比如防止重复投票、防止恶意攻击等等。
阅读全文