当前位置: 首页 > news >正文

投票合约1

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract Voting {struct Poll {string question;string[] options;uint[] votes; // 使用数组存储投票数uint totalVotes;bool active;}mapping(uint => Poll) public polls;uint public pollCount;// 事件event PollCreated(uint pollId, string question, string[] options);event Voted(uint pollId, uint optionId, address voter);// 创建投票function createPoll(string memory question, string[] memory options) public {require(options.length > 0, "At least one option is required.");Poll storage newPoll = polls[pollCount];newPoll.question = question;newPoll.options = options;newPoll.votes = new uint[](options.length); // 初始化投票数组newPoll.active = true;newPoll.totalVotes = 0;emit PollCreated(pollCount, question, options);pollCount++;}// 投票function vote(uint pollId, uint optionId) public {require(pollId < pollCount, "Poll does not exist.");require(optionId < polls[pollId].options.length, "Invalid option.");require(polls[pollId].active, "Poll is not active.");polls[pollId].votes[optionId]++;polls[pollId].totalVotes++;emit Voted(pollId, optionId, msg.sender);}// 结束投票function endPoll(uint pollId) public {require(pollId < pollCount, "Poll does not exist.");polls[pollId].active = false;}// 获取结果function getResults(uint pollId) public view returns (uint[] memory) {require(pollId < pollCount, "Poll does not exist.");return polls[pollId].votes; // 直接返回投票数组}// 获取投票问题function getPollQuestion(uint pollId) public view returns (string memory) {require(pollId < pollCount, "Poll does not exist.");return polls[pollId].question;}// 获取投票选项function getPollOptions(uint pollId) public view returns (string[] memory) {require(pollId < pollCount, "Poll does not exist.");return polls[pollId].options;}
}
  1. 数据结构
    Poll: 存储每个投票的相关信息。
    question: 投票问题。
    options: 投票选项数组。
    votes: 对应每个选项的投票数。
    totalVotes: 投票总数。
    active: 投票是否处于激活状态。
  2. 状态变量
    polls: 一个映射(mapping),将投票 ID 映射到 Poll 结构。
    pollCount: 记录当前投票的总数。
  3. 事件
    PollCreated: 当创建投票时触发,记录投票 ID、问题和选项。
    Voted: 当有人投票时触发,记录投票 ID、选项 ID 和投票者地址。
  4. 功能函数
    createPoll:
    创建新的投票。
    检查选项数量是否有效。
    初始化新的 Poll,并记录在 polls 中。
    触发 PollCreated 事件。
    vote:
    用户对某个投票进行投票。
    检查投票 ID 和选项 ID 的有效性。
    增加对应选项的投票数和总投票数。
    触发 Voted 事件。
    endPoll:
    结束某个投票。
    设置对应投票的 active 状态为 false。
    getResults:
    返回指定投票的投票结果(即每个选项的投票数)。
    getPollQuestion:
    返回指定投票的问题。
    getPollOptions:
    返回指定投票的所有选项。

相关文章:

  • Athena 执行引擎:在线服务计算的效率王者
  • 机器学习实战:犯罪率预测模型
  • C# Unity容器详解
  • 常用快捷键大全
  • DAY33
  • Spring开发系统时如何实现上传和下载文件
  • Redis 的速度为什么这么快
  • 行列视的产品目标
  • 【Android】屏幕适配小合集
  • 【sylar-webserver】9 网络模块
  • git merge解冲突后,add、continue提交
  • 物联网、云计算技术加持,助推楼宇自控系统实现智能高效管理
  • Git实战演练,模拟日常使用,快速掌握命令
  • Vue 3.0中异步组件defineAsyncComponent
  • 前端 git仓库
  • 深入学习和对比Python 列表与元组
  • Win 系统 conda 如何配置镜像源
  • 为 Scade 6 编译器提供形式化认证工具的考虑 (2010)
  • LCI输出频率配置方法
  • Vue.js教学第十章:自定义命令的创建使用与应用
  • 武汉专业制作网页的公司/企业seo优化服务
  • 做网站开发多少钱/广告推广 精准引流
  • 鞍山创网站怎么创/淘宝引流推广平台
  • 电商网站建设目的/百度店铺注册
  • 如何免费做网站推广/温州网站建设
  • 做网站哈尔滨/网站怎样关键词排名优化