Solidity中的assert()、require()与revert()
  U6UHQBKl2wpG 2024年08月07日 45 0

两者都是用于异常处理的语句中,都需要满足条件才可以进行其他操作。类似于”if()"

对于”assert()“

该关键字常用于结尾处用来,为了防止发生任何非常糟糕的事情

检查溢出(上溢出或者下溢出)
检查不变量
更改后验证状态
预防永远不会发生的情况

 

如果使用则将消耗掉所有剩余的gas,并恢复所有的操作并意味着发生了代码层面的错误事件。

对于"require()"

该关键字可随意用,用途广泛,通常应用于函数的开头,用来检查条件的功能

验证一个用户的输入是否合法:require(input<20);
验证一个外部协议的响应:require(external.send(amount));
判断执行一段语句的前置条件,验证合约执行前的状态:  require(block.number > SOME_BLOCK_NUMBER) or require(balance[msg.sender]>=amount);
require应该被最常使用到;一般用于函数的开头处。

如果使用则将退还所有剩余的gas,同时可以返回一个值(自定义的报错信息)。

对于“revert()”

会撤回所有的状态转变。

1.它允许你返回一个值;

  2.它会把所有剩下的gas退回给caller

  调用起来就像这样子:

  revert(‘Something bad happened’);

  require(condition, ‘Something bad happened’);

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

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

暂无评论

推荐阅读
  U6UHQBKl2wpG   2024年08月07日   40   0   0 区块链
  U6UHQBKl2wpG   2024年08月07日   42   0   0 区块链
  SLI5qvYxXXnE   2024年08月07日   43   0   0 区块链
  SLI5qvYxXXnE   2024年08月07日   41   0   0 区块链
  SLI5qvYxXXnE   2024年08月07日   50   0   0 区块链
  SLI5qvYxXXnE   2024年08月07日   45   0   0 区块链
  dve6WtqypWN1   2024年08月06日   41   0   0 区块链
U6UHQBKl2wpG