demo.sol(投票合约案例):

pragma solidity ^0.4.21;
pragma experimental ABIEncoderV2;contract VoteContract {// 投票人struct Voter {uint voteNumber;  // 投票给第几个候选人bool isVoted;  // 是否投过票uint weight;   // 投票权重,初始值为1,被委托后,权重增加address delegate;  // 指定代理人(委托别人帮自己投票)。 (帮自己投票的人)}// 候选人struct Candidate {string name;   // 候选人名字uint voteCount;  // 获得的投票数}address public admin;  // 管理员,负责创建合约,授权地址为投票人。Candidate[] public candidates;   // 候选人集合。 数组下标表示第几号候选人。mapping(address => Voter)  public voters;  // 投票人集合// 构造函数。  (部署合约时,需要传入候选人的姓名列表)constructor(string[] candidatesNames) public {admin = msg.sender;   // 初始化管理员// 通过传入的候选人名字,初始化候选人集合。for(uint i=0; i<candidatesNames.length; i++){Candidate memory tmp = Candidate({name:candidatesNames[i], voteCount:0});candidates.push(tmp);  // 数组下标表示第几号候选人。}}// 定义修饰器modifier adminOnly() {require(admin == msg.sender);  // 只有管理员才可以执行修饰的函数_;}// 授予投票权限(添加投票人)。 (修饰器,只有管理员才能授权)function grantVoteRightTo(address addr) adminOnly public {if(voters[addr].weight > 0) {revert();   // 如果已经授过权,就直接结束执行。}voters[addr].weight = 1;  // 授权}// 进行投票function vote(uint voteNum) public {Voter storage voter = voters[msg.sender];if(voter.weight<=0 || voter.isVoted) {revert();  // 如果没有投票权限或已经投过票,就直接结束执行。}// 投票voter.isVoted = true;voter.voteNumber = voteNum;candidates[voteNum].voteCount += voter.weight;  // 数组下标表示第几号候选人。}// 投票结果function whoWin() view public returns (string, uint) {string memory winner;uint winnerVoteCount;for(uint i=0; i<candidates.length; i++) {if(candidates[i].voteCount > winnerVoteCount) {winner = candidates[i].name;winnerVoteCount = candidates[i].voteCount;}}return (winner, winnerVoteCount);}// 投票委托function delegateFunc(address to) public {Voter storage voter = voters[msg.sender];if(voter.weight<=0 || voter.isVoted) {revert();  // 如果没有投票权限或已经投过票,就直接结束执行。}while (voters[to].delegate != address(0) && voters[to].delegate != msg.sender) {to = voters[to].delegate;  // "递归"代理,寻找最终的代理人}require(msg.sender != to);  // 自己不能代理给自己。// 进行委托voter.isVoted = true;voter.delegate = to;Voter storage finalDelegateVoter = voters[to];if (finalDelegateVoter.isVoted) {candidates[finalDelegateVoter.voteNumber].voteCount += voter.weight;} else {finalDelegateVoter.weight += voter.weight;}}}

Solidity 投票案例相关推荐

  1. 蚂蚁区块链投票案例(二)---投票合约设计开发

    文章目录 摘要 背景 案例场景 用例分析 系统管理员注册 添加小区.添加房屋 编辑房屋 发起投票 统计投票 业主注册 业主实名认证 客房关系认证 投票 合约设计 设计原则 合约设计 合约开发 命名规则 ...

  2. solidity投票合约在bcos上的部署及解析(三)

    solidity投票合约在bcos上的部署及解析(二) solidity投票合约在bcos上的部署及解析(一) 在上俩篇文章中我们分析了一个solidity语言编写的投票合约,现在我们要将写好的投票合 ...

  3. 蚂蚁区块链投票案例(一)---蚂蚁链简介

    文章目录 摘要 背景 蚂蚁链简介 联盟链(合约体验链) 开放联盟链 开发者测试链 总结 遗留问题 测试环境和生产环境的问题? 摘要 计划用三篇文章,一个月左右的时间来实现一个蚂蚁开放联盟链上的区块链投 ...

  4. solidity经典案例----智能小游戏

    参考于https://ke.qq.com/webcourse/2379017/103111126#taid=10365401060101385&vid=5285890802017890711 ...

  5. Solidity众筹案例

    pragma solidity ^0.4.0;contract zhongchou{// 捐赠者struct funder{address Funderaddress; // 捐赠者地址uint To ...

  6. 3. 投票 案例项目(合集)

    3.投票-1创建项目和子应用 创建项目 命令 $ python django-admin startproject mysite 目录结构 mysite/ # 项目容器.可任意命名manage.py ...

  7. Solidity 最新 0.5.8 中文文档发布

    本文首发于深入浅出区块链社区 热烈祝贺 Solidity 最新 0.5.8 中文文档发布, 这不单是一份 Solidity 速查手册,更是一份深入以太坊智能合约开发宝典. 翻译说明 Solidity ...

  8. 区块链DAPP开发入门课程(PHP版)

    1.前言及环境部署 1.1 课程说明 为什么有这个课程? 入门区块链开发已有些时日,走过的坑实在是太多了,对于像我这种从事互联网软件开发多事的老兵来说,上手都有些吃力,可想而知对于新手来说就更难了,尤 ...

  9. ivx中字体显示_iVX云服务费用优化 · 上篇

    本文全文字数:   3308 预计阅读时间:   10 分钟 本文篇幅较长,建议亲亲能够完成阅读,将会学到不少干货哦~❤️ 本文目录 一虚拟机 ->我们为何关闭了之前的虚拟机服务? ->是 ...

  10. 区块链开发指南_区块链开发完全指南

    区块链将是技术的发展方向. 我认为未来将围绕区块链一新兴技术构建,这绝不是什么牵强附会.区块链最初被设计成一种公共的,无权限的技术,后来引入了另一种区块链,每种区块链都有自己独特的用例集.公共/无权限 ...

最新文章

  1. P2240 【深基12.例1】部分背包问题(贪心)难度⭐
  2. 99%的人都能看懂的分布式最佳「补偿」实践
  3. python自动化测试报告_python自动化测试报告(excel篇)
  4. vue怎么自己创建组件并引用_如何在组件库项目内直接引用vue-cli生成的组件库文件...
  5. Ubuntu禁用root登录
  6. DAY1-Workstation and CentOS7.x 快照
  7. indexOf() 使用方法(数组去重)
  8. ios开发-教程选择
  9. c语言 屏幕刷新,屏幕刷新率
  10. 【论文速览】PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
  11. NeRF神经辐射场学习笔记(十)— BungeeNeRF(CityNeRF)实现以及代码注释
  12. killall杀死nginx顽固进程
  13. 无法定位程序输入点,于动态链接库xxx上的可能原因及解决方法
  14. 解决 wmware windows虚拟机无法使用U盘,提示“跟这台电脑连接的一个usb设备运行不正常 windows无法识别它”的问题!
  15. Ubuntu 安装sogo输入法
  16. Android power_supply驱动开发详解
  17. 苹果发布全新旗舰,对国内手机市场将造成什么影响?
  18. 学python真好玩啊_Python真好玩:教孩子学编程最新章节_刘凤飞著_掌阅小说网
  19. 汽车UDS诊断详解及Vector相关工具链使用说明——2.1.3 初步了解CDD(以10服务为例)
  20. word文档如何停止限制编辑

热门文章

  1. js 绘画js 绘画路径_绘画是一种技能,而不是才能
  2. SketchUp2016如何安装插件
  3. vue-cli首页加载速度慢优化vender+vue预加载
  4. python绘制人物关系图_文本分析之制作网络关系图——Python
  5. Apache Axis2项目的联合创始人总结30条架构原则
  6. 爬虫项目实战1——爬取天善课程
  7. 【详细】【转】CentOS 7部署ASP.NET Core应用程序
  8. 使用memcpy函数的耗时测试(拷贝不同大小数据量耗时不同)
  9. MongoDB~从入门到入坑。
  10. 复数值神经网络matlab,学界 | Yoshua Bengio等提出深度复数网络:用复数构建深度神经网络(已开源)...