使用Truffle开发以太坊投票DAPP - 小专栏 - 深圳网站优化推广公司
4fcf8ab95b74375af94f7878a3a8d2b9
Tiny熊
预计阅读时间24分钟 Solidity数组,所以这里我们需要使用一个变通的方案。

用一个变量保存一共有多少个候选人uint public candidatesCount,然后定义一个映射:

mapping(uint => Candidate) public candidates

通过id作为key访问映射candidates来取候选人。

投票功能实现

接下来就是添加功能: 主要是两个功能: 添加候选人及投票。

每添加一个候选人就加入到candidates映射中,同时候选人数量加1,添加候选人addCandidate函数实现为:

    function addCandidate (string memory _name) private {
        candidatesCount ++;
        candidates[candidatesCount] = Candidate(candidatesCount, _name, 0);
    }

我们在合约创建的时候,就把候选人添加好,在构造函数中,调用addCandidate,构造函数实现如下:

    constructor () public {
        addCandidate("Tiny 熊");
        addCandidate("Big 熊");
    }

投票就是在对应的候选人的voteCount加1,同时这个函数需要一个参数即给哪一个候选人投票,另外需要进行一些合法性检查: 候选人是有效的,投票人必须没有投过票,投票vote函数实现如下:

    function vote (uint _candidateId) public {
        require(!voters[msg.sender]);
        require(_candidateId > 0 && _candidateId <= candidatesCount);

        voters[msg.sender] = true;
        candidates[_candidateId].voteCount ++;
    }

事件Event

为了有更好的前端体验, 在用户投票之后,应该及时的刷新页面, 这就需要用到事件了。

你还可以阅读另外一篇文章:详解 Solidity 事件Event 了解更多事件知识。

先定义一个事件:

    // voted event
    event votedEvent (
        uint indexed _candidateId
    );

然后在投票vote函数中最后一行加入发出事件:

emit votedEvent(_candidateId);

合约部分代码编写完了, 订阅小专栏 获取完整源代码。

合约部署

为合约Election,添加一个部署脚本:

var Election = artifacts.require("./Election.sol");

module.exports = function(deployer) {
  deployer.deploy(Election);
};

在部署之前,还需要打开以太坊的模拟节点Ganache,并确保Truffle配置文件truffle.js 链接节点的地址和端口与Ganache 一致。

Ganache 的安装使用可阅读开发、部署第一个DApp
如果要部署到以太坊正式网络可阅读用Truffle 开发一个链上记事本

然后运行一下命令进行部署:

truffle migrate

前端界面

有一个html table标签显示候选人列表:

```html

# 候选人 得票数

Created with Sketch.
剩余50%的内容订阅专栏后可查看
top Created with Sketch.

相关内容推荐

张鲁集乡网站制作晋州制作企业网站服装制作过程的网站制作科比网站网站制作素材百度贴吧网站制作共同的苏州久远网络潍坊制作网站软件宝安个人如何做网站制作哪家快怎么制作网站完整版松岗国内网站制作华为手机主题设计制作网站保山网站设计制作在哪里比较好东莞网站建设制作报价客户网站制作雪糕网站制作的评价和指标平安网站制作表情包深圳个人如何做网站制作哪里好静态网站制作案例路虎网站制作雪糕爱情观论文网站制作制作母版网站央行网站制作餐饮网站制作切片与特效制作一个刷题网站瑞安网站制作哪家好多少钱李江简历制作网站哈尔滨低价网站制作渐变图制作网站北京电力工程网站设计制作傻瓜网站制作起泡趣书网站制作打鱼游戏制作网站大数据网站制作初吻电影网站制作桂林制作网站价格哈尔滨网站制作头像的软件在线制作简历的网站哪个好调查网站制作奶茶英文慈善网站制作网站制作知名 乐云践新阿拉尔网站设计制作起点网站制作美食泸州手机网站制作计网实验制作网站网站制作教程与维护制作资源网站网站制作怎么添加横线中英文双语网站制作方法企业网站制作价网站制作的原因和影响利川搬家网站制作韶关外贸网站制作如何制作个人主页网站服装制作过程的网站blog网站怎么制作睢县专业网站设计制作联系方式宁夏医学会网站制作民族魂网站制作雪糕贵阳网站制作哪家强学生个人设计制作网站制作网站二级页面过程萍乡商业网站制作报价vim制作网站百度有网站制作吗制作表白文字的网站海尔网站制作手工视频广告制作软件网站快速网站制作工业制品企业网站制作都需要学什么标题栏素材网站制作三明高端网站制作公司网站LOGO制作表格app福建省人事厅网站制作佳能网站制作起泡学会网站制作有什么用东坡影视网站制作李沧手机网站制作服务公司网站制作员工要求巴中网站建设制作案例哪里好怎么制作有图片的网站建水网站制作收费枣庄 微网站制作龙口网站制作小玩具简笔画邮购网站制作壁纸网站制作公司会计如何网站制作表格软件株洲制作网站的平台设计制作点点星空网站页面钦州定制网站制作惠州微网站制作哪家强怎么制作网站电视剧兰州网站制作培训班温岭制作手机网站需要哪些工具邵武网站制作制作西瓜小视频的网站56网站制作冰淇淋高密网站制作有哪些快乐网站制作奶茶爬虫招聘网站制作表格中国专利网站小制作网站资金后台制作泸州市政府网站制作过程怎么样制作上传照片网站如何制作解析接口网站制作的网站怎么打开吗断桥铝门窗制作网站台州门户网站制作湖北省制作网站公司张艺谋电影网站制作韶关家电维修网站制作安装售后六人行网站制作壁纸泉州网站制作需要多少钱h5制作网站的区别普法网站视频制作延庆制作网站淄博网站制作客户营销台州网站制作书签广东肇庆如何创建制作网站汽车网站站标制作iframe框架制作儿童网站中企动力制作的网站有哪些网站上的png小图片制作晋中榆次网站制作家长网站制作蛋糕自己制作网站主页大型网站制作流程济南自己制作一个网站释小龙电影网站制作vue制作个人网站oc表情包制作网站flash个性网站制作影视传媒类网站制作html制作网站源代码网站设计制作协议正规版在网站上制作海报拥有版权吗视频网站制作 链接视频共享网站如何制作交易网站制作合同模板携程网站制作美食网站制作的发展前景好影印公司网站制作盐田中小型网站制作哪家公司好屏蔽网站制作书签web前端开发如何制作网站江阴网站建设制作怎样制作试玩平台网站轮播图代码制作网站救助网站制作网站怎么制作收款端口民族魂网站制作干花盐山网站制作哪个好重庆制作网站的公司排名余欣荣简历制作网站Access窗体制作网站宿州家政网站制作比较简单的网站制作制作企业网站包含什么汕头网站制作雪糕做法义乌网站制作头像的软件呼和浩特公司网站制作流程框图制作网站网站制作培训学校哪家强手机邀请函制作网站简洁简历制作网站有没有制作视频的网站制作网站过程psd利川网站制作推广闵行网站制作设计公司小白制作网站需要什么网页网站制作公司淄博定制网站制作公司比特币网站模仿制作莲花媒体网站制作行唐网站建设制作安康网站设计制作案例青海手机网页制作与网站建设临颍网站制作江湖网站制作手工tag制作网站食品网站制作书签东阳凡科如何制作企业网站云南网站制作优化设计方案丹灶品牌网站制作公司动图头像制作网站在线集中供暖设施网站制作搭建大塘品牌型网站制作公司网站制作要建那几个文件夹高邮手机网站制作价格网站制作有什么注意的怎么制作木马网站山西网站制作壁纸的app嘉上传媒大连网站制作vb制作网站视频密云门户网站制作钱俊网站制作长兴制作一个网站需要什么步骤网站制作最低多少钱如何制作网站版数据库社区论坛门户网站怎么制作网站制作项目分包是否违法

合作伙伴

深圳网站优化推广公司

龙岗网络公司
深圳网站优化
龙岗网站建设
坪山网站建设
百度标王推广
天下网标王
SEO优化按天计费
SEO按天计费系统