区块链 以太坊 solidity 事务控制和异常处理 require assert
Posted 软件工程小施同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链 以太坊 solidity 事务控制和异常处理 require assert相关的知识,希望对你有一定的参考价值。
账户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
以上是关于区块链 以太坊 solidity 事务控制和异常处理 require assert的主要内容,如果未能解决你的问题,请参考以下文章
区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码