当前位置: 首页 > news >正文

【solidity 学习】错误处理机制汇总

最近发现了一个很好的学习 web3 知识的平台 hackquest,也是一个社区,不仅可以学习 web3 知识,并且经常组织一些线上线下的活动鼓励大家稳步学习。

hackquest 网址

最近我在 solidity ,其中关于错误处理机制有三种:revert、require、assert、error、try\catch。他们的用法类似,容易产生混淆,这里记录一下他们的使用场景以及区别,以便容易区分:

使用场景

  • require() 用法
    1.验证用户输入,例如:require(input < 20);
    2.验证外部合约的调用,例如:require(external.send(amount));
    3.在执行之前验证状态条件,例如:require(balance[msg.sender] >= amount)
  • revert() 用法
    1.处理与require()类似但逻辑更复杂的情况
    2.当存在复杂的嵌套if/else逻辑流时,可以使用revert()代替require()
    3.请注意,复杂的逻辑可能是代码质量不佳的一个迹象,所以在开发中请尽量避免使用revert。
  • assert() 用法
    1.检查溢出/下溢,例如:c = a + b; assert(c > b);
    2.检查不变量,例如:assert(this.balance >= totalSupply);
    3.在更改后验证状态
    4.防止永远不可能发生的情况
  • try/catch
    使用try-catch语句来处理可能存在的错误。并且可以使用catch (error err)语句来捕获特定的错误类型:

区别
assert 的作用和 revert 没有区别,但在 gas 的消耗上有较大的差异:

  1. assert:使用 assert 时,它会消耗掉调用者所发送的剩余未使用的 gas 。你可以将其看作一个恶霸,它不仅阻止你的前进,还会夺走你身上携带的所有现金。
  2. revert和 require:与 assert 不同,revert 和 require 更像是施工队。它们只会阻止你前进,但不会抢走你的财物。当使用 revert 或 require 时,Solidity 会将未使用的 gas 退还给调用者。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【大数据】Eueka与Nacos对比分析,你该怎么选择?
  • 关于HTTP HEAD介绍
  • linux上用anaconda创建一个新环境,并将nicegui的应用打包为一个可执行应用
  • 应用方案 | 低功耗接地故障控制器D4145
  • Day42 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
  • 20240820模拟面试
  • 利用Python实现供应链管理中的线性规划与资源优化——手机生产计划2:利润最大化
  • Unity 求坐标点在扇形区域内的投影
  • 从零开始学数据结构系列之第四章《拓扑排序代码详解》
  • 22 mysql数据库主从搭建
  • 国外机器人相关网站推荐
  • Unity AB包
  • 【计算机网络】网络版本计算器
  • CentOS 7使用RPM安装MySQL
  • Linux 网站服务器的搭建教程
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • js正则,这点儿就够用了
  • JS字符串转数字方法总结
  • Laravel5.4 Queues队列学习
  • Python_网络编程
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 漂亮刷新控件-iOS
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何设计一个微型分布式架构?
  • 如何选择开源的机器学习框架?
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 终端用户监控:真实用户监控还是模拟监控?
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 阿里云服务器购买完整流程
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #LLM入门|Prompt#3.3_存储_Memory
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (175)FPGA门控时钟技术
  • (35)远程识别(又称无人机识别)(二)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (第61天)多租户架构(CDB/PDB)
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (转)平衡树
  • (转)为C# Windows服务添加安装程序
  • (转)用.Net的File控件上传文件的解决方案
  • ***利用Ms05002溢出找“肉鸡
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net经典笔试题
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?