区块链

智能合约实战-投票合约

2018-04-10  本文已影响8人  DavieKong

我们以一个投票合约来说明一下合约的部署和调用

合约代码

pragma solidity ^0.4.0;
contract Votelihe {

    struct Candidate {

        uint votecount;

        string name;

    }

    struct Voter {

        bool voted;
    }

    mapping(address => Voter) public voters;
  //候选人数组
    Candidate[] public candidates;

    function Votelihe() public{

        candidates.push(Candidate({

                name: "刘能",

                votecount: 0

            }));

        candidates.push(Candidate({

                name: "赵四",

                votecount: 0

            }));

      }

    function Vote_candidate(uint8 numCandidate) public

    {

  //判断投票者是否投过票 已经候选人是否存在
        if(voters[msg.sender].voted ||numCandidate>candidates.length)return;

        candidates[numCandidate].votecount+=1; //给候选人得票+1

        voters[msg.sender].voted=true; //记录投票人状态

    }

//获得投票结果
  function Getcount() constant public returns(string,uint,string,uint){

        return(candidates[0].name,candidates[0].votecount,candidates[1].name,candidates[1].votecount);

    }

}

代码说明:

开头声明了两个结构体Candidate和Voter。

把这段合约代码添加到remix中。


image.png

选择运行环境

我们采用本地虚拟机调试。就是不连接任何一个节点,在内存虚拟出一个以太坊节点进行调试,优点是速度快,配置简单。
点击Environment,选择 JavaScript VM。

image.png

设置成功后,可以在账号状态栏看到可以用的账户列表,


image.png

这里我们随便选一个就行,每个账户都分配了100个以太币。

部署合约

点击“Create”按钮部署智能合约到内存中,并进行调试,如果部署成功,会出现智能合约的函数运行按钮和参数输入框,然后就可以调试你的智能合约了

image.png

调用合约

那下面我们给候选人投下票试试。
在 Vote_candidate 函数后的输入框里填入1,给赵四投一票。然后点击这个函数执行。


image.png

打开控制台可以看到合约执行了。


image.png

那怎么才能知道赵四得到一票了呢。

我们可以在 candidates候选人里输入候选人的下标。查看


image.png

可以看到赵四得到了一票。
然后我们看一下最后的而结果,点击 “Getcount”


image.png
可以看到赵四一票,刘能0票。
上一篇下一篇

猜你喜欢

热点阅读