【开发智能合约—Solidity系列】错误处理的机制(Error Handling)
Solidity语言的错误检查提供了Require()、Revert()、Assert(),这三种方便的API调用,而这三种用途分别不同,毕竟牵涉到瓦斯费的问题,因此才会与过往的程序语言有些许的差异,
Require
require()通常会被使用在输入值的验证检查,因为它的特性主要是能够退回剩余的Gas fee,我们也知道瓦斯费在区块链的成本是昂贵的,因此这些检查都有助于不必要的浪费,主要使用方式为:
require(判断式,信息)
Revert
revert()顾名思义为撤销的意思,也就是通常不符合某些条件时则进行撤销,与reqiure一样是会退回剩余的Gas fee,那看到这边可能心里会产生一些疑问,比如说为什么不用require就好了呢两者语意事实上是有差异的。
require表述的是「必须要满足什么条件」。 revert则表述「当什么条件未被满足」时进行撤回。
另外revert使用的方式有以下三种:
revert CustomError(…) revert(”message”) revert()
刚开始可能会有些雾里看花,这么多不同的承接方式与参数,但撰写一段时间过后就会相当熟练,且在合适的时机使用正确的方式。
Assert
assert()跟require()一样,算是进行检核的机制,必须满足某些条件才能继续执行,但最大的差异在于当条件不满足时,会耗尽Gas fee,因此通常用来处理比较严重且不易发生的错误,例如边界值、特殊条件…等程序内部错误,也是最不常被使用的错误处理方法。
Try … Catch
相信这种语法如果有在开发其他程序的朋友应该非常熟悉,没错,Solidity亦提供这种错误处理机制,但值得注意的是在智能合约的世界中仅适合外部调用,白话来说就是A合约去尝试使用B合约的功能,语法结构主要为:
而错误的捕捉类型又分为以下四种方式,分别说明:
结语
原来一个简单的错误处理背后其实并不简单…,与「金钱」有关的产品或服务最重要的莫过于严谨的审查机制,因此很多错误都是不能被容忍的,故而错误处理的机制就显得非常重要,处理方式也相较于大部分程序语言有所不同,主要是因为纳入了Gas fee的缘故,以此为鉴,当开发者进行开发智能合约时的错误处理也要非常小心,哪个使用情境要用哪一种错误处理的技巧并且不浪费Gas fee的状况下,真的是对于智能合约开发者来说是一大挑战,相信我们只要读懂这些错误处理的概念后,未来开发时就会特别注意。
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。