Solidity 错误处理及异常
  6WDFuiiGwNIX 2023年11月02日 33 0

Assert, Require, Revert

错误将撤消事务期间对状态变量所做的所有更改。

assert: 消耗掉所有剩余的gas,并恢复所有的操作

require(false)和 revert():将退还所有剩余的gas,同时可以返回一个值(自定义的报错信息)

一般来说,使用assert()的频率较少,通常用于函数的结尾

以下三个方法最终效果相同:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Error {
function testRequire(uint _i) public pure {
require(_i > 10, "Input must be greater than 10");
}
function testAssert() public view {
assert(_i > 10);
}
function testRevert(uint _i) public pure {
if (_i <= 10) {
revert("Input must be greater than 10");
}
}
}

自定义错误

自定义错误信息可以放在合约外部或者内部;

  • 外部可以被同文件其他合约引用;
  • 内部可以被本合约及继承合约引用;

这是目前最优的错误处理做法, 好处是更节省 Gas,同时可以传递合约中的变量.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
error OutFuncError(address, uint256);

contract Error {
error InFuncError(address, string);

function testInError(uint256 _x) public view {
if (_x == 1) {
revert OutFuncError(msg.sender, _x + 1);
} else {
revert InFuncError(address(this), unicode"这是合约");
}
}
}

输入 2

Solidity 错误处理及异常_Web3

输入 1

Solidity 错误处理及异常_Web3_02

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
6WDFuiiGwNIX