如何确保一份明智的合同已经准备好生产。除了单元测试之外,目前还有哪些其他方法或工具可用?
发布于 2018-02-03 01:02:59
功能测试只是将合同部署到MainNet之前的第一步。一旦你的合同做了你想要做的事情,你就需要密切注意以下几点:
我已经放置了一些关于以下每一个的高层次的信息,但是每个主题都很复杂,所以你必须自己做一些额外的研究来了解更多。
您的合同中的安全漏洞将使其无法使用。您需要保护对合同的访问,防止重新进入,执行安全的数学操作,并确保您的合同在部署后发现问题时具有紧急故障安全性。
坚实的文档有几个指针来帮助处理这个问题。还有一些安全工具可以分析您的代码,如奥延特、SmartCheck、迈斯里和其他一些工具。有关更多建议,请参见Ethereum上的这篇文章
优化您的合同将有助于尽量减少气体的使用,既带来成本效益,又能防止气体异常。您是否只存储需要存储的数据?您是否使用正确大小的数据类型和排序您的结构的元素来进行紧密打包?最重要的是,您是否避免了代价高昂的循环(或者更糟糕的是,嵌套循环)可以执行未知次数的迭代?
寻找可以限制代码执行、删除循环、短路条件检查等的领域。有一篇关于智能契约优化的优秀论文,可以找到这里。
最后,如果您需要发布新版本的合同,您将做什么?如果合同所依赖的数据与合同的业务逻辑紧密耦合,则当业务逻辑发生变化时,必须迁移所有这些数据。太贵了。理想情况下,您希望将数据放入实现接口的外部存储契约中,并使用该接口与业务契约中的数据进行交互。
这里是一篇博客文章,详细介绍了如何编写可升级的合同,并介绍了一个例子。
https://ethereum.stackexchange.com/questions/38368
复制相似问题