枚举错误的值



我是solidity的新手,我正在学习一门课程,我为自己设定了一个项目,但我无法找出我做错了什么,因为我记录的数据显示,值是基于枚举位置的预期值。

我使用的是编译器版本^0.6.6

我首先设置了枚举

enum VOTE_STATUS {CLOSED,OPEN}
VOTE_STATUS public voting_status = VOTE_STATUS.CLOSED;

然后我有一个投票功能,我正在调用它。

function addVote(uint _vote) public{
// Make sure voting is open
require(voting_status == VOTE_STATUS.CLOSED,"Voting hasn't opened yet");
}

在混音中,当我单击左侧的voting_status按钮时,它会返回正确的选项,0=CLOSED,1=OPEN。

问题是,当我运行上面的require语句时,它似乎认为枚举总是设置为OPEN,而日志记录和solidity的说法不同。

我已经通过设置require语句来确认这一点,以便在状态关闭时检查OPEN,这给了我寻找的结果

voting_status = VOTE_STATUS.CLOSED;
require(voting_status == VOTE_STATUS.OPEN,"Voting hasn't opened yet");

如有任何帮助,我们将不胜感激感谢

我认为您可能存在概念上的误解。require语句的工作原理如下:

require('condition', 'error msg');

require语句的作用是检查条件是否满足。如果条件不满足,它将恢复事务并返回错误消息。所以你想做的是一个require,它检查voting_status是否为OPEN,如果不是,那么它将抛出错误";投票还没有开始;。

因此,为了更清楚,您当前的需求声明:

require(voting_status == VOTE_STATUS.CLOSED,"Voting hasn't opened yet");

实际上是在检查voting_status是否设置为CLOSED。如果不是,则抛出msg错误";投票还没有开始;。

所以也许你想要的是:

require(voting_status == VOTE_STATUS.OPEN,"Voting hasn't opened yet");

希望您觉得这些信息有用:(

最新更新