账户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相关推荐

  1. 区块链-以太坊学习资料汇总

    最近一段时间以来,对区块链的底层研究和基于区块链的应用开发已经越来越火热了.机缘巧合,目前我也在进行区块链方面的开发,在之后的博客中,我会和大家一起分享区块链开发中的酸甜苦辣.今天我先来对收藏区块链- ...

  2. 8支团队正在努力构建下一代区块链以太坊Ethereum 2.0

    2019独角兽企业重金招聘Python工程师标准>>> "我们不想在构建 Ethereum 2.0时重新造轮子." 谈到开发人员为 Ethereum 区块链进行两 ...

  3. 可编程区块链以太坊的未来

    区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>,感受一下先行者的思想. 到本文结束时,你将了解一般的区块链(特别是下一代区 ...

  4. 回看2015年是如何描述区块链以太坊的未来

    区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>,感受一下先行者的思想. 到本文结束时,你将了解一般的区块链(特别是下一代区 ...

  5. 回望Vinay2015年的文章:内容可编程的区块链——以太坊的未来

    2019独角兽企业重金招聘Python工程师标准>>> 区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>, ...

  6. 上下文可编程区块链——以太坊的未来

    区块链的火热就不用说了,回看一下Vinay Gupta 2015年发表的文章<内容可编程的区块链:以太坊的未来>,感受一下先行者的思想. 到本文结束时,你将了解一般的区块链(特别是下一代区 ...

  7. 【区块链-以太坊】5 Ubuntu下truffle ganache安装及使用

    [区块链-以太坊]5 Ubuntu下truffle & ganache安装及使用 1 truffle安装 1)输入sudo npm install -g truffle 2)将truffle复 ...

  8. 区块链以太坊以及hyperledger总结

    https://learnblockchain.cn/ 1.什么是智能合约?它有什么特点? 就是具有交互能力而且能够在区块链中传递的合约 一个由计算机代码控制的以太币账户 特点: 公开透明.能即时与区 ...

  9. 区块链 以太坊 区块结构详解

    一.结构 区块由两部分组成,分别是 区块头(header) 区块体(body) 1. 结构图 2. 区块头(header) 区块头存储了区块的元信息,用来对区块内容进行一些标识,校验,说明等. 通用字 ...

  10. 区块链/以太坊/读书笔记/精通以太坊思维导图

    第一章-第三章 学习笔记 思维导图 附:文本结构 精通以太坊-基础1-3章概念基于区块链技术打造的平台智能合约以太坊计算基础框架上执行的程序DApp狭义基于智能合约开发的用户界面至少包含一个智能合约广 ...

最新文章

  1. opensuse 安装 php,在openSUSE上安装和配置LAMP(2)
  2. 学python要基础吗-自学Python要有其他语言基础吗?
  3. Window核心编程
  4. c语言字符串数组的合并,C语言实现合并字符串
  5. 通过selenium模拟登陆新浪微博爬取首页和评论
  6. 简单理解mysql事务_如何理解数据库事务中的一致性的概念?
  7. 原始套接字编程(1)
  8. 2021年95后“他经济”研究报告
  9. pycharm-自动换行
  10. 为未来元素添加点击事件的两种写法
  11. C语言中简单的题目,C语言的一些简单题目,没有答案,哪位大神帮忙做一下!!!...
  12. sql语句中遇到“被零除错误”提示的解决方法
  13. java代码输出我喜欢你_程序员七夕如何表白:朕只爱一个皇后!(单例模式)...
  14. 安装jdk的时候为什么会有两个jre文件
  15. NXP JN5169 唤醒定时器
  16. SpringCloud基础学习
  17. 【独家分享】QQ常见网络骗术***战
  18. rhombus(菱形)
  19. 鸢尾花数据集的线性多分类
  20. 一文带你吃透计算机网络(下)

热门文章

  1. 如何将秘钥分发到多台机器
  2. 你用java的swing可以做出这么炫的mp3播放器吗?
  3. 更新Sogou代理服务器程序,支持HTTPS
  4. ASP.NET 首页性能的4大做法
  5. 配置TOMCAT和IIS协同工作
  6. SQL Server 获取日期是星期周几(默认从周日开始到周六 1-7)
  7. mybatis list条件判断
  8. Python_三级菜单
  9. 用户推广成果总结会议
  10. 关于域名系统DNS解析IP地址的一些总结