create account

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

View this thread on: hive.blogpeakd.comecency.com
· @rivalhw · (edited)
$67.22
区块链学习笔记:投票智能合约 之 获取投票结果 完结篇
最后一个跟案例学习的模块功能,获取投票结果。
获取投票要实现两个功能,即,
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](https://images.hive.blog/DQmS6jMjHQXvvaMXaVkxMqqJNGWa4fCFF58zGc2ko6bcA1B/image.png)

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

完成代码如下,

![image.png](https://images.hive.blog/DQmUYV91fZMnYHxy21iA26xRW3pgBB5yZGvpcKtcdKV8f71/image.png)


![image.png](https://images.hive.blog/DQmRyKzv3umQ7JvV7X6c4sKjinpmgvg6vBwasXhQoeoVqch/image.png)


![image.png](https://images.hive.blog/DQmRPJ7tqYv4X4tLNcBmxZJgeSbdcupi4vRCUtxJTTX84Kv/image.png)

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

我在实际的编写中,将byte32更换成了string,所以在后边获取时,不需要再进行转换,直接获得即可。我没有去查先前的版本,猜测可能是后来的版本才支持这样的写法吧。
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 48 others
properties (23)
authorrivalhw
permlink6r1w8h
categoryhive-105017
json_metadata{"tags":["smartcontract","study","eth","cn-reader","cn"],"image":["https://images.hive.blog/DQmUYV91fZMnYHxy21iA26xRW3pgBB5yZGvpcKtcdKV8f71/image.png","https://images.hive.blog/DQmS6jMjHQXvvaMXaVkxMqqJNGWa4fCFF58zGc2ko6bcA1B/image.png","https://images.hive.blog/DQmRyKzv3umQ7JvV7X6c4sKjinpmgvg6vBwasXhQoeoVqch/image.png","https://images.hive.blog/DQmRPJ7tqYv4X4tLNcBmxZJgeSbdcupi4vRCUtxJTTX84Kv/image.png"],"app":"hiveblog/0.1","format":"markdown","author":"rivalhw"}
created2021-08-17 02:28:48
last_update2021-08-17 02:31:51
depth0
children1
last_payout2021-08-24 02:28:48
cashout_time1969-12-31 23:59:59
total_payout_value33.624 HBD
curator_payout_value33.597 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,269
author_reputation1,804,358,292,489,077
root_title"区块链学习笔记:投票智能合约 之 获取投票结果 完结篇"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id105,590,012
net_rshares86,634,312,132,461
author_curate_reward""
vote details (112)
@wilhb81 ·
需要注意的是,教程里用到byte32类型,实际中转为string要做相应的转换 - 啊,谢谢大伟哥的提示!
properties (22)
authorwilhb81
permlinkqxyzj3
categoryhive-105017
json_metadata{"app":"hiveblog/0.1"}
created2021-08-17 06:04:15
last_update2021-08-17 06:04:15
depth1
children0
last_payout2021-08-24 06:04:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length53
author_reputation228,240,073,324,104
root_title"区块链学习笔记:投票智能合约 之 获取投票结果 完结篇"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id105,593,353
net_rshares0