我正在尝试在solidity中执行一个函数,如果没有任何问题,它将返回true,但如果有问题,则返回false。此外,我想指出是什么问题导致交易无法完成。对于require,我不能这样做,因为我不能根据情况返回false或true。使用revert也不起作用。有办法做到这一点吗?
PD:我也尝试了事件,并注册了错误,但有了事件,事务就正确结束了。
对于事件,我尝试过这样做,但正如我所说的,事务正确结束,但返回false,并且在日志中可以看到错误
function example(address user) public returns(bool){
if(condition1){
emit Error("ERROR 1");
return false;
}
if(condition2){
emit Error("ERROR 2");
return false;
}
// DO SOMETHING
return true;
}
有了require,我尝试过这个,但它返回true,即使交易没有正确结束
function example(address user) public returns(bool){
require(condition1, "ERROR1");
require(condition2, "ERROR2");
// DO SOMETHING
return true;
}
使用revert,我尝试过这样做,就像在require中一样,它返回true,并且交易没有正确结束
function example(address user) public returns(bool){
if(condition1){
revert("ERROR 1");
return false;
}
if(condition2){
revert("ERROR 2");
return false;
}
// DO SOMETHING
return true;
}
我希望它返回false,而且我希望交易不能正确结束。有办法做到这一点吗?
您不能返回一个值并同时恢复事务,因为在第一种情况下,您指示调用成功,而在第二种情况中,您将引发一个异常,除非调用方合约在try/catch
语句中捕获,否则会恢复状态,这相当于整个事务从未发生。您可以在Solidity的错误处理文档中查看这一点。
如果您直接从外部调用合同,此问题可能有助于您调试调用。
否则,如果您从另一个合同调用您的合同,您可以将调用封装在try/catch
语句中,您可以在文档中看到机制。