共计 1835 个字符,预计需要花费 5 分钟才能阅读完成。
以太坊智能合约是极为灵便的。它可能存储超过十分大量的虚构货币(超过十亿美元),并且依据先前部署的智能合约运行不可批改的代码。尽管这发明了一个充满活力和创造性的生态系统,但其中蕴含的无信赖、互相关联的智能合约,也吸引了攻击者利用智能合约中的破绽和以太坊中的未知谬误来赚取利润。智能合约代码通常无奈批改来修复安全漏洞,因而从智能合约中被偷盗的资产是无奈发出的,且被盗资产极难追踪。因为智能合约问题而被盗取或失落的价值总额很容易超过 10 亿美元。
审核不是完满的解决方案
几年前,用于编写、编译、测试和部署智能合约的工具还十分不成熟,许多我的项目被随便地编写 Solidity 代码,并将其交给审查员,审查员将审查代码以确保其平安并按预期运行。在 2020 年,编写 Solidity 代码的开发过程和工具失去了显著改善,不仅能够确保我的项目更易于治理,而且可能组成我的项目安全性的一部分。仅仅在我的项目完结时对您的智能合约进行审计曾经不足以成为我的项目的惟一平安思考。安全性来源于适当的设计和开发过程,所以在您编写第一行智能合约代码之前,安全性就应该被思考。
智能合约开发过程
最低平安限度:
所有代码应该被存在于一个版本控制系统当中,例如 git
所有的代码批改都应该通过拉取申请来进行
所有的拉取申请都应该有至多一个审核员。如果这是一个集体我的项目,请思考寻找另一位集体作者和一个交易代码审核员。
应用开发以太坊环境(请参阅:Truffle),只需一个命令就能够编译、部署和运行一套针对您的代码的测试
曾经通过 Mythril 和 Sliter 等根本代码剖析工具运行了代码,最好是在合并每个拉取申请之前,比拟输入中的差别。
Solidity 代码编辑器不会收回任何正告
您的代码有据可查
下面的这些条目是编写智能合约的一个良好的开始,然而在编写代码过程中还有很多要值得注意。对于更多条目及其具体解释,请参阅 DeFiSafety 提供的过程质量检查清单。DeFiSafete 对我的项目的平安评级等级的一部分包含该我的项目是否恪守了品质检查表。遵循这些审核过程:
通过可复现的自动化测试,产生更平安的代码
审查员将可能更无效地审查您的我的项目
对新开发者敌对
容许开发者疾速迭代、测试并在批改时取得反馈
回滚代码的可能性较低
破绽攻打
既然您正在应用高效的开发过程编写 Solidity 代码,那么让咱们看看一些常见的 Solidity 破绽问题。
重入攻打
重入攻打时在编写智能合约代码时应该思考的最大且最重要的平安问题。尽管以太坊虚拟机不能同时运行多个合约,一个合约能够调用另一个合约来暂停一个合约的执行和内存状态,直到被从新调用。这时,代码将会持续被失常执行。暂停和重新启动的过程可能会造成一种被称为“重入攻打”的破绽。
其余攻打
除了下面的重入攻打,智能合约还会收到许多其余类型的攻打须要留神,例如:
溢出攻打
自毁攻打
delegatecall 数据篡改
随机数问题
平安工具
尽管理解以太坊平安基础知识和延聘业余审计公司审查您的代码是无可替代的,但在合约编写的过程中学会应用平安工具,能帮忙你更有效率的发现和改过代码中呈现的谬误和破绽。
Slither
Slither 是剖析代码和报告问题的实用工具。每个人都有一个 [commercial] 托管版本,但也能够收费在本地运行。像所有自动化测试工具一样,Slither 并不完满,它在报告一侧呈现了太多谬误。即便在不存在可开发的脆弱性的状况下,它也能够就潜在的重返提出正告。在代码更改之间在 Slither 输入中查看 DIFERENER 经常十分有启发性,能够帮忙发现比期待您的我的项目代码实现早得多的破绽。
Mythril
Mythril 是 EVM 字节码的平安剖析工具。它检测为以太坊、Hedera、Quorum、Vechain、Roostock、Tron 和其余与 EVM 兼容的区块链构建的智能合约中的安全漏洞。它应用符号执行、SMT 解决和污点剖析来检测各种安全漏洞。它还在 MythX 平安剖析平台中应用(与其余工具和技术联合应用)。
小结
随着区块链技术的一直倒退,智能合约对于安全性的解决方案也越来越欠缺和多样,但咱们也应该做好预防措施去防止破绽:
应用凋谢的资源与社区承受的库合约的本质规范 (de facto standards),例如 Open Zeppelin’s contracts。
应用举荐的模式与最优操作领导手册,例如 Consensys 提供的。
思考由信用好的供应商审核您的智能合约。