当前位置: 首页 > 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:
    返回指定投票的所有选项。
http://www.xdnf.cn/news/596827.html

相关文章:

  • 二叉树结构与遍历
  • 消费类,小家电产品如何做Type-C PD快充快速充电
  • Hugging Face 设置镜像源 | 下载失败 | 下载的速度很慢
  • 轴承与螺母表面缺陷数据集
  • 全栈开发中主流 AI 编程辅助工具的实践与对比分析20250522
  • 人工智能时代教育信息化领导力的培养与发展研究
  • 【知识图谱-一-综述】
  • 新一代网校培训平台的技术演进:从教育源码开发到AI赋能教学转型
  • debian12安装freeswitch1.10
  • DL00967-通过伪样本合成进行零样本侧扫声纳图像分类含完整数据集
  • Python基础学习-Day32
  • 计算机图形学Games101笔记--光线追踪。RTX ON!!!(<--删除线)
  • QT5.14版本加载在线地图(天地图)
  • 【C语言】复习~动态内存管理
  • LRU (Least Recently Used) 页面置换算法
  • 征程 6 J6E/M linear 双int16量化支持替代方案
  • 什么是云主机?
  • 使用行为分析和深度证据集群实时检测内部威胁
  • deepwiki-open开源项目分析
  • CVE-2022-22947源码分析与漏洞复现
  • 堆的C语言实现
  • 认识CPU (三):数据通路——CPU的煎饼物流系统
  • 汇舟问卷:国外问卷调查如何闭坑
  • 并发编程实战--对象的共享
  • java每日精进 5.22【多数据源(读写分离)、事务】
  • 01_springCloud基础知识
  • 并发编程之线程基础
  • 『VUE』vue-quill-editor 添加超链接的同时为文字添加颜色(详细图文注释)
  • 有动画效果,但动画窗格里为空
  • 红黑树插入的旋转变色