博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solidity(7)
阅读量:5805 次
发布时间:2019-06-18

本文共 1719 字,大约阅读时间需要 5 分钟。

智能合约投票

pragma solidity ^0.4.24;// 投票人与候选人,默认情况每人只能投一票,而且不能重复投票.候选人不能参与投票(包括不能被自己,或者其他候选人投票)contract VoteDemo{        // 创建投票人结构体    struct Voter{        address addr; // 投票人的地址        bool vote;  // 如果为true则说明此人已投票(限制重复投票)        uint amount; // 目前票数默认为1    }        // 创建一个候选人结构体    struct Candidate{        address addr;   // 候选人地址        uint get;   // 当前候选人得到的票数        bool win;   // 是否获胜    }        // 根据业务需求,推荐在平台中存储投票人和候选人    mapping (address => Voter) public voters;    // 候选人的映射    mapping (address => Candidate) public candidates;        // 初始化候选人    function initCandidate(address addr){        candidates[addr] = Candidate(addr,0,false);    }        // 初始化投票人    function initVote(address addr){        if(voters[addr].vote){            return;  // 此人已投票,返回即可        }        // 此人之前已经投票,则不应该在添加到此映射中        // voters[addr]= Voter({addr:addr,vote:false,amount:1});        // 及时没有此地址,也不会抛出null异常        voters[addr].addr = addr;        voters[addr].vote = false;        voters[addr].amount = 1;    }        // 实现投票的业务逻辑,候选人不能参与投票(包括不能被自己,或者其他候选人投票)    function vote(address candidate){        // 调用此函数的人就是投票人        Voter v =voters[msg.sender];        // 如果此人已投票,或者此人为候选人则不能够投票        if(v.vote || v.addr == candidate)            return;        // 给候选人投票        candidates[candidate].get += v.amount;        // 记录当前投票人已投票        v.vote = true;    }        // 判断成功的候选人    function success(address addr1,address addr2) returns (address){        // 通过票数判断获胜投资人        if(candidates[addr1].get > candidates[addr2].get){            // addr1获胜            candidates[addr1].win = true;            return addr1;        }else{            candidates[addr2].win = true;            return addr2;        }    }    }复制代码

转载地址:http://nwgfx.baihongyu.com/

你可能感兴趣的文章
Java I/O操作
查看>>
Tomcat性能调优
查看>>
项目管理心得
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
通过vb.net 和NPOI实现对excel的读操作
查看>>
TCP segmentation offload
查看>>
java数据类型
查看>>
数据结构——串的朴素模式和KMP匹配算法
查看>>
FreeMarker-Built-ins for strings
查看>>
验证DataGridView控件的数据输入
查看>>
POJ1033
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
一维数组
查看>>
Linux学习笔记之三
查看>>
微信公众号
查看>>
POJ1061 青蛙的约会(扩展欧几里得)题解
查看>>
关于Android studio团队协同开发连接到已有项目
查看>>
Sql获取表的信息
查看>>
Java-大数据-图汇集
查看>>