智能合约最佳实践 - 基本理念

张亚宁   |     |   1252 次阅读

原文:https://github.com/ConsenSys/smart-contract-best-practices

文章是智能合约最佳实践的基本理念部分,其他部分可以阅读原文。


以太坊和复杂的区块链程序都是非常新的领域并且具有很强的实验性。因此,我们期望在安全领域会不断地发展,因为会有新的bug和安全漏洞被发现,也会不断产生新的最佳实践。所以,以下的安全实践只是安全工作的开始,作为一名智能合约开发者,你需要去实践它们。

智能合约开发需要完全不同的思维观念,它与传统的软件开发不同。失败的成本是非常高的,变更也是非常困难的,使它在某些程度上更像硬件程序或者金融服务程序开发,而不是web或者手机应用开发。因此,仅仅对抗现有的一些漏洞是完全不够的。相反,我们需要学习一种新的开发理念:

  • 准备失败。任何有意义的智能合约都可能存在错误。因此你的代码必须能优雅地响应bug和漏洞。

    • 停止合约,当发生错误时(“断路开关”)
    • 管理账户资金的风险(速率限制,最大可用值)
    • 包含有效的升级方案,来应对bug修复和功能改进
  • 谨慎地前进。最好在生产环境发布前找到bug。

    • 充分测试合约,在新的攻击手段被发现时及时增加测试用例
    • 提供bug奖励,从alpha testnet发布版开始
    • 阶段性发布,每一阶段增加使用量并充分测试
  • 保持合约简洁。复杂会增加错误的可能性。

    • 确保合约逻辑简单
    • 模块化代码,保持合约函数简短
    • 尽量使用已有的工具和代码(不要使用你自己的随机数生成器)
    • 尽量明确性能,在可能的情况下
    • 在你的系统需要使用去中心的化的部分,使用区块链
  • 保持最新。使用后面章节的列出的资源,关注最新的安全发展。

    • 一旦有新的bug发现,检查你的合约
    • 尽快更新到最新的工具和库
    • 采用最新可用的安全技术
  • 了解区块链的特性。当你的编程关系到以太坊编程时,以下陷阱你必须了解。

    • 要十分小心外部合约调用,因为可能会导致恶意代码和更改工作流
    • 明白你的公开函数是公开的,所以可能被恶意调用。你的私有数据同样可以被其他人看到
    • 留意gas消耗和块的gas限制

软件工程师应该具备的技能

  • 升级合约
  • 断路开关
  • 减速手段
  • 速率限制
  • 断言守护
  • 合约迭代推进

翻译:@rubyu2

其他相关:http://ethfans.org/topics/576