Solidity中的assert()、require()与revert()

打印 上一主题 下一主题

主题 905|帖子 905|积分 2715

两者都是用于异常处理的语句中,都需要满足条件才可以举行其他操纵。类似于”if()"
对于”assert()“
该关键字常用于结尾处用来,为了防止发生任何非常糟糕的事变
  1. 检查溢出(上溢出或者下溢出)
  2. 检查不变量
  3. 更改后验证状态
  4. 预防永远不会发生的情况
复制代码
 
如果使用则将消耗掉所有剩余的gas,并恢复所有的操纵并意味着发生了代码层面的错误事件。
对于"require()"
该关键字可随意用,用途广泛,通常应用于函数的开头,用来查抄条件的功能
  1. 验证一个用户的输入是否合法:require(input<20);
  2. 验证一个外部协议的响应:require(external.send(amount));
  3. 判断执行一段语句的前置条件,验证合约执行前的状态:  require(block.number > SOME_BLOCK_NUMBER) or require(balance[msg.sender]>=amount);
  4. require应该被最常使用到;一般用于函数的开头处。
复制代码
如果使用则将退还所有剩余的gas,同时可以返回一个值(自定义的报错信息)。
对于“revert()”
会撤回所有的状态转变。
  1. 1.它允许你返回一个值;
  2.   2.它会把所有剩下的gas退回给caller
  3.   调用起来就像这样子:
  4.   revert(‘Something bad happened’);
  5.   require(condition, ‘Something bad happened’);
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表