首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用DELEGATECALL时出现自定义错误?

如何在使用DELEGATECALL时出现自定义错误?
EN

Ethereum用户
提问于 2021-09-06 11:52:20
回答 1查看 1.7K关注 0票数 11

Solityv0.8.4引入了自定义错误

代码语言:javascript
复制
error Unauthorized();

假设我有contract,它委托对contract的调用。后者返回到上面定义的自定义错误。我怎样才能在合同A中掩盖这个错误呢?

EN

回答 1

Ethereum用户

发布于 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):

还原事务已恢复到初始状态。合同提供的理由:“没有资金”。

这适用于新类型的错误和旧的错误。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/109457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档