我是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");
希望您觉得这些信息有用:(