区块链学习笔记:投票智能合约 之 获取投票结果 完结篇

Words
460
Reading
3 min
Listen
Play
5y

最后一个跟案例学习的模块功能,获取投票结果。
获取投票要实现两个功能,即,
1>获取投票最多的索引 ;
2>获取赢得提议的名字。

实际上,这两个功能实现很简单,如第一个获取投票最多的索引,我们可以用一个遍历来完成,寻找符合条件的即可。

 for(uint p=0;p <proposals.length;p++ )
 {
     if(proposals[p].voteCount > winningVoteCount)
     {
         winningVoteCount = proposals[p].voteCount;
         winningProposal_ = p;
     }
 }

至于另外一个,获取赢得提议的名字,只需要根据先前获取到的结果,直接通过索引获取投票名称。

proposals[winningProposal()].name

期间碰到个问题,提示出错如下,

TypeError: Data location must be "memory" for return parameter in function, but none was given

我仔细看了下,代码跟教程是一致的,不知道为什么实际中会出现这样错误。

于是按照提示给参数string name 上增加 memory修饰,错误提示便消失了。

测试结果如下,

image.png

到这里,这篇根据教程案例学习编写投票智能合约就完成了。

完成代码如下,

image.png

image.png

image.png

需要注意的是,教程里用到byte32类型,实际中转为string要做相应的转换,而solidity中byte32转换成string不像其它语言那么方便,而且貌似没有提供现成的函数库,教程中的案例都是根据字符一个个进行转换,非常麻烦。

我在实际的编写中,将byte32更换成了string,所以在后边获取时,不需要再进行转换,直接获得即可。我没有去查先前的版本,猜测可能是后来的版本才支持这样的写法吧。

区块链学习笔记:投票智能合约 之 获取投票结果 完结篇 | Ecency