恢复原状后归还某物



我正在尝试在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语句中,您可以在文档中看到机制。

最新更新