【开发智能合约—Solidity系列】状态的可变性限制(State Mutability)

这次的篇章主要在介绍智能合约状态的可变性,透过约束来限制状态,避免随意更改状态导致错误的合约出现。

我们都知道状态在智能合约中扮演着非常重要的角色,经过什么事件之后变化为什么状态,甚至某些特定状态是不可被修改的,又或者是某些功能开放给外部使用时,不可以读取到合约内状态…,都围绕在可变与不可变之间,而Solidity也提供了几个特定的识别字,让我们可以在开发特定功能时,限制该功能对于可变程度的约束。

重要的约束关键字,分别是: pure、view,而none的部分是没有限制的意思,故使用none表述,但官方并未具有none这个关键字,特此声明。

pure

顾名思义就是非常「纯」的意思,也就是我们在功能开发上一但约束为pure,就不能对状态进行修改,甚至连窥探也不行,这种函式通常用来计算没有任何依赖的式子,因此过程中不会改变到任何状态,也不会依赖状态来进行演算。

因此假设我们在pure的function内读取或修改状态,在编译阶段时就会被检查出错误,也无法顺利编译。

view

view的部分就是想像成唯读模式,仅能读取状态,但不能修改状态,因此可以藉由状态来进行一些判断后运算。

none

没有任何约束的function,可以读取也可以修改状态,除非必要,否则不建议随意修改状态。

结语

刚接触Solidity时不免会阅读许多大神们的程序代码,过程中发现时不时就有个pure、view,但只知道有这两个关键字却不曾想进一步去了解,直到一步步学习时,发现编译的过程有些警告,贴心的编译器会建议我们,当没有进行状态的读取时就使用pure…,当时也没有深究其因,就照着IDE的警告进行修正,而透过这次的深入学习之后,才发现原来pure及view的设计是有其意义的,而我们也应该了解限制与用法之后,才能更进一步的开发智能合约。

本文链接地址:https://www.wwsww.cn/jishu/14048.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。