您当前的位置: 首页 >  区块链
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

区块链 以太坊 solidity 事务控制和异常处理 require assert

软件工程小施同学 发布时间:2022-02-18 09:22:20 ,浏览量:0

账户A向账户B转账100元,银行在做交易时,需要执行两个动作:

账户A = 账户A - 100
账户B = 账户B + 100

对于这类业务,利用事务的特性,两个操作要么一起成功,要么一起失败。

在Solidity中也存在类似的机制,我们可以在执行过程中判断某个条件是否成立,如果不成立,则通过revert()函数退回到合约执行之前的状态,相当于还原现场。

Solidity中,也直接为开发者提供了require和assert函数。

require(bool cond_expr, string msg);
assert(bool cond_expr);

require和assert在内部调用了revert函数,例如下面的语句是等价的。

if(a != 10) {
	revert();
}
# 等价于
assert(a == 10);
# 等价于
require(a == 10, "a not equal ten.");

assert多用于检测程序的bug,

require多用于检测合约的执行条件。

当assert或require的条件不被满足时,本次合约的调用将会被退回到初始状态,就像是数据库事务里执行了rollback操作。

SmartDev-Contract/Solidity-basic.md at master · WeBankBlockchain/SmartDev-Contract · GitHub

关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

0.0401s