以太坊教程-智能合约实战:投票合约

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

合约代码

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。

  • Candidate是候选人,保存有候选人的得票数和候选人名。
  • Voter 里记录某个地址是否投过票。
  • voters是一个映射,和js中的对象类似,保存了很多地址和这个地址是否投过票。
  • candidates 是保存所有候选人的数组
  • Votelihe是构造函数,在构造函数里进行初始化,给candidates赋值。这里添加了连个候选人。
  • Vote_candidate 是投票函数,参数是候选人数组的下标,也就是你要给谁投票
    在这个函数中,判断了某个地址是否投过票(voters[msg.sender].voted)和传入的下标是否大于候选人数组的长度(numCandidate>candidates.length)能进行投票。否则就给某个候选人的votecount属性加一(candidates[numCandidate].votecount+=1),并且设置这个地址投过票了(voters[msg.sender].voted=true;)。
  • Getcount 返回候选人得票数

把这段合约代码添加到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票。

扫描下方二维码,关注微信公众号:H5开讲啦,获取更多学习资料。

qr.jpg

猜你喜欢

转载自blog.csdn.net/weixin_42088434/article/details/84334635
今日推荐