萄京娱乐下载:在Solidity智能合约中使用Enums之前要三思

军事

萄京娱乐下载

【萄京娱乐首页】想象一下正在起草Solidity智能合同。属性之一可以用类型或状态来说明。也就是说,在有限的选项集中。你立刻对自己说。

“太好了,我不打算只用来列举对这个状态变量的回答。”一方面,这种方法有一些好处,例如减少可读性。另一方面,它更容易让你走上可能引起问题的麻烦道路。

嗯,如果枚举(ENUM)成员只有PCB在一个合同中,并且没有在其他文档中提及,那么一切都是可能的。但是,DAPP通常由一些相互连接的合同组成。经常发生完全相同的枚举时,我要争论的问题并不经常发生。

1.枚举成员经常出现在多个合同中。2.在DApp生命周期中展开变更。

例如,有两个合同。首先是存储非常重要的信息。

另外,声明并提及了具有枚举定义的模块。contract I storage { enum recordstate { statea,stateb } function setstate(address user,recordstate new state)pupconstructor()public { } function setstate(address user,record state new state)public { States[user]=SetState函数可更改用户的状态。还有一个最终用户需要交互的协议(非常简单的存储协议中省略了访问控制修改器)。

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无法切换到枚举版本,因此结束。更重要的是,测试会欺骗你,因为它被用于两个合同的修订版。本质上,网络卓新闻网络,你甚至可以在官方文件中看到关于这个问题的警告。

在整个显式切换中,操作时检查该值是否在枚举范围内。否则,将发生结束的断言。

需要学习的教训最好先用普通整数替换上述情况下的枚举。是的,看起来不那么好,但结果结构更可靠,更可扩展。

第二,不要放弃枚举字段中使用的整个想法。如果这种领域只有一个合同,那就意味着安全。

变更时,几乎可以重新分发枚举中使用的所有合同的保证也是安全的。要求您忘记,枚举第一次从IStorage导入到StorageUser合同时经常出现问题,只有在更改初始成员后才会重新部署。只是不要记住,如果你知道要写在合同上,就要经过最糟糕的深思熟虑后再做。

约翰肯尼迪。。

本文来源:萄京娱乐下载-www.hxhuizhan.com

相关文章

网站地图xml地图