You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

智能合约投票部署后仅返回单一计数,如何获取两方投票的完整结果?

问题根因分析
  • 从你给出的合约代码来看,投票结束后仅将存储赞成票的finalResult设置为了public可见性,存储反对票的totalFalse大概率没有声明public,外部无法直接读取该变量值,所以只能拿到单个主体的计数。
  • 合约未暴露统一查询两方票数的公开方法,也无法在投票过程中主动获取实时计数。
  • 虽然voteEnded事件在触发时会同时返回两方票数,但如果未主动监听链上事件日志,也无法获取到对应数值。
修复方案

场景1:合约尚未部署,可修改代码后重新部署

  1. 给totalFalse变量添加public可见性,和finalResult保持一致,合约会自动生成对应变量的getter方法供外部调用:
// 原变量定义修改为
uint256 public finalResult;
uint256 public totalFalse;
  1. 可选新增实时票数查询方法,无需等待投票结束即可获取两方计数:
function getBothVoteCounts() public view returns (uint256 approveCount, uint256 rejectCount) {
    return (countResult, countRe);
}
  1. 部署修改后的合约即可,后续可直接调用finalResult()、totalFalse()或者getBothVoteCounts()获取两方投票结果。

场景2:合约已上链部署,无法修改代码

  1. 调取链上历史事件日志,查找投票结束时触发的voteEnded事件,该事件参数中已经包含了赞成票finalResult和反对票totalFalse两个数值,可直接提取。
  2. 如果votes数组声明为public,可遍历读取数组内所有投票记录的choice值,自行累加统计两方票数。

内容的提问来源于stack exchange,提问作者ramane Pari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:24:03