投票 Ballet Domo EVM智能合约改写
投票 Ballet Domo智能合约修改如下:
根据例子学习Solidity — Solidity develop 文档https://solidity-cn.readthedocs.io/zh/develop/solidity-by-example.html原文在上述资料中,重要的问题是,命名搞的非常糟糕,用近似的词命名各种变量,看起来很费劲。
pragma solidity ^0.5.17;//vote contractcontract Ballot {//define voter structstruct VoterStruct {uint weight ;bool voted;address delegateAddr;uint voteNum;}//define proposals structstruct ProposalStruct {bytes32 proposalName;uint voteCount;}address public chairPersion;mapping(address => VoterStruct) voters;ProposalStruct[] public proposals;//constructor functionconstructor(bytes32[] memory _proposalNames ) public {chairPersion = msg.sender;voters[chairPersion].weight = 1;for (uint i= 0; i < _proposalNames.length;i++){//add elementproposals.push(ProposalStruct({proposalName:_proposalNames[i],voteCount:0}));}}//give vote rightfunction giveRightToVote(address _voter) public {require(msg.sender == chairPersion,"only chairpersion can give right to vote.");require(!voters[_voter].voted,"The voter always voted!");require(voters[_voter].weight == 0);voters[_voter].weight = 1;}//delegate to someonefunction delegate(address _to) public {VoterStruct storage voterSenderTmp = voters[msg.sender];require(!voterSenderTmp.voted,"you always voted");require( _to != msg.sender,"SelfVoted is not allwed");while (voters[_to].delegateAddr != address(0)){_to = voters[_to].delegateAddr;require(_to != msg.sender ,"Found loop in delegation");}voterSenderTmp.voted = true;voterSenderTmp.delegateAddr = _to;VoterStruct storage voterDelegateTmp = voters[_to];if (voterDelegateTmp.voted){proposals[voterDelegateTmp.voteNum].voteCount += voterSenderTmp.weight;}else{//???voterDelegateTmp.weight = voterSenderTmp.weight;voters[_to].weight = voterSenderTmp.weight;}}function voteDo(uint _proposalNum) public{// VoterStruct storage voterSenderTmp = voters[msg.sender];// require(!voterSenderTmp.voted,"Aleady voted!");require(!voters[msg.sender].voted,"Aleady voted!");voters[msg.sender].voted = true;voters[msg.sender].voteNum = _proposalNum;proposals[_proposalNum].voteCount+= voters[msg.sender].weight;}function winningProposal() public view returns (uint num_,bytes32 name_){uint countTmp = 0;for(uint p = 0; p < proposals.length; p++){if (proposals[p].voteCount > countTmp){countTmp = proposals[p].voteCount;num_ = p;}}name_ = proposals[num_].proposalName;return (num_,name_);}
}
投票 Ballet Domo EVM智能合约改写相关推荐
- 以太坊EVM智能合约中的数据存储
目录 EVM基本信息 数据管理 Stack Args Memory Storage 固定长度的值 动态长度数组 Mappings 复杂类型的组合 总结 EVM基本信息 以太坊是一种基于栈的虚拟机,基于 ...
- 以太坊智能合约solidity去中心化投票系统
实现一个电子投票系统,基于智能合约该电子投票系统的一个主要问题是如何分配合理的权限给正确的人,并且要防止篡改.这个例子不能解决所有问题,但是实现了如何去委托投票,整个投票计数过程是自动且完全透明的. ...
- Qtum智能合约使用方法及说明
Qtum是一个基于比特币UTXO模型,权益证明机制(pos)和支持EVM智能合约的区块链项目.它通过创新的账户抽象层(Account Abstraction Layer)实现了比特币与以太坊两大生态的 ...
- (五)以太坊——委托投票智能合约
一.投票合约介绍 本实例实现一个投票的智能合约.当然,电子投票的主要问题是如何将投票权分配给正确的人员以及如何防止被操纵.我们不会在这里解决所有的问题,但至少我们会展示如何进行委托投票,同时,计票 ...
- 智能合约的投票、拍卖、远程购买、付款
投票 以下合约相当复杂,但展示了很多Solidity的功能.它实施投票合约.当然,电子投票的主要问题是如何为正确的人分配投票权以及如何防止操纵.我们不会在这里解决所有问题,但至少我们将展示如何进行委派 ...
- web3:智能合约-虚拟机(EVM、HVM、WASM、MOVE)
在区块链上,用户通过运行部署在区块链上的合约,完成需要共识的操作.而为智能合约提供运行环境的便是对应的虚拟机. 目录 EVM 基础概念 技术细节 EVM的存储模型 交易在EVM的执行 普通转账交易 智 ...
- 以太坊投票智能合约案例
这个例子相对复杂一些,用到了以太坊编程语言Solidity的很多特性.例子实现了一个投票智能合约.电子投票系统的一个主要问题是如何分配合理的权限给正确的人,并且要防止篡改.这个例子不能解决所有问题,但 ...
- 以太坊智能合约Demo
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战demo示例快速入门,用demo例 ...
- 以太坊智能合约开发第二篇:理解以太坊相关概念
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 很多人都说比特币是区块链1.0,以太坊是区块链2.0.在以太坊平台上,可以开发各种各样的去中心化应用,这些应用构成了以太 ...
最新文章
- MySQL的binlog数据如何查看
- Asp.net 点滴
- python语言如何软件搬家_python写程序-就像搬家把物品分类放在箱子里
- requests的response.text 与 response.content
- spark学习 小汇集
- Atitit 单点登录实现几种模式架构图 目录 1. 因此要点也就以下两个:存储信任验证信任	1 1.1. 共享cookie (最简单	1 1.2. 通过 url带token参数跳转	1 1.3.
- FF14 界面 字变得很小 一种适用于高分辨率笔记本或屏幕下FF14窗口或无边框模式的性能优化方法
- 用excel做logistic回归分析_利用SPSS进行Logistic回归分析
- Astah 三分钟学会躺着画UML时序图
- 大数据的四个核心问题
- 开发前期必须准备的利器:开发原型图、UI图工具pxCook、找图标、写接口文档、代码托管等...
- uncompyle6出现Unknown magic number 227
- 文件服务器如何异地备份,实战演示如何进行异地自动备份数据库
- 【超分辨率】Zoom to Learn, Learn to Zoom
- 二十四进制 加法计数器 并用数码管显示
- 方差、标准差和均方根误差的区别总结
- OpenGL之GLEW安装
- 迁移confluence
- SD卡里的视频无法正常播放出来怎么办?
- 视频编码h264怎么看_新手怎么上高速,视频拍给你看