Solityv0.8.4引入了自定义错误:
error Unauthorized();假设我有contract,它委托对contract的调用。后者返回到上面定义的自定义错误。我怎样才能在合同A中掩盖这个错误呢?
发布于 2021-10-06 14:25:25
通常,调用或委托都不会在调用可恢复的函数时恢复。
(bool成功,字节内存结果)=.调用/委托所有{value,gas等}(数据)。
成功变量将确定调用是成功的true还是不成功的false。所以如果你打电话:
未经授权的错误(字符串原因);函数取回() public { revert("No“);/或revert (”No“)}
调用不会恢复,但是success bool将是假的。因此,要恢复并返回错误,需要额外的代码。
函数委托(地址到,字节内存数据)公共{ (bool成功,字节内存结果)=to.delegatecall(数据);if (! success ) { if (!success){if (result.length < 68) revert();程序集{ := add(:=,0x04) }:=}abi.decode(结果,(字符串));}}
因此,如果您对退出函数执行委托/调用,您将得到(Remix):
还原事务已恢复到初始状态。合同提供的理由:“没有资金”。
这适用于新类型的错误和旧的错误。
https://ethereum.stackexchange.com/questions/109457
复制相似问题