ag体育官网:在Solidity智能合约中使用Enums之前要三思

ag体育官网

contract storage user { I storage public record storage;constructor(I storage _ record storage)public { record storage=_ record storage;} functionchangestate a()public { record storage . setstate(msg . sender,istorage . record state . States } function change一切都很好调用changeStateA或changeStateB,并通过自己的setState函数对存储合同中的数据进行相应的更改。但是有一天你意识到你需要一个全新的状态选项来构建新的功能。(威廉莎士比亚,温弗里,希望如此)你叫Statec。多么好的名字啊!)。

首先,在IStorage中添加新的枚举成员,以更改源代码.enum recordstate {statea,stateb,statec}和StorageUser的新方法。functionchangestatec()public { record storage . setstate(msg . sender,istorage.recordstate.statec. }也是负责任的开发人员,负责编写调用新方法的测试,并提供顺畅的报告因为只有重建StorageUser合同的计划,而且不期待重新部署存储,所以很多最重要的数据使用同构形式,很难迁移。

因此,StorageUser用于作为其结构函数参数重新部署到当前存储上。你调用新的changeStateC函数.它结束了如您所见,结局的根本原因,修订后的Storage State对RecordState枚举的3名成员说,但原来的StateC选项没有线索。

(阿尔伯特爱因斯坦,Northern Exposure(美国电视连续剧),成功)SetState函数参数StateC无法切换到枚举版本,因此结束。更重要的是,测试会欺骗你,因为它被用于两个合同的修订版。

本质上,网络卓新闻网络,你甚至可以在官方文件中看到关于这个问题的警告。在整个显式切换中,操作时检查该值是否在枚举范围内。

ag体育官网

否则,将发生结束的断言。需要学习的教训最好先用普通整数替换上述情况下的枚举。

是的,看起来不那么好,但结果结构更可靠,更可扩展。第二,不要放弃枚举字段中使用的整个想法。如果这种领域只有一个合同,那就意味着安全。变更时,几乎可以重新分发枚举中使用的所有合同的保证也是安全的。

要求您忘记,枚举第一次从IStorage导入到StorageUser合同时经常出现问题,只有在更改初始成员后才会重新部署。只是不要记住,如果你知道要写在合同上,就要经过最糟糕的深思熟虑后再做。约翰肯尼迪。

-ag体育网址。

本文来源:ag体育网站-www.qif2ofx.com

相关文章

admin

评论已关闭。
网站地图xml地图