跳转至主要内容

帮助更新此页面

🌏

本页面有新版本,但现在只有英文版。请帮助我们翻译最新版本。

翻译页面
查看英文

没有错误!🐛

此页面未翻译,因此特意以英文显示。

智能合约安全清单

智能合约
安全性
solidity
中级
✍Trailofbits
📚构建安全的合约
📆2020年9月7日
⏱️4 分钟阅读

智能合约开发清单

这是一个高级别的过程,我们建议在您编写智能合约时遵循。

检查已知的安全问题:

  • 使用 Slither 审核您的合约。 该程序有 40 多个内置检测器,可以应对常见的脆弱性。 在每次签入时使用新代码运行它,确保它获得一个干净的报告(或使用分类模式来消除某些问题)。
  • 使用 Crytic 审核您的合约。 它可以检查 Slither 未涉及的 50 个问题。 Crytic 还可以帮助您的团队成员保持联系,通过在 GitHub 上的拉取请求轻松显示安全问题。

考虑您的智能合约的特殊功能:

  • 您的合约是否可以升级? 使用 slither-check-upgradeabilityCrytic 检查您的可升级代码是否有缺陷。 我们记录了 17 种升级可能出现的问题。
  • 您的合约是否声明符合 ERC 的要求? 使用 slither-check-erc 对它们进行审核。 这个工具能立即识别出六个常见规范的偏差。
  • 您在 Truffle 中设有单元测试吗? 将它们添加到 slither-prop。 它可以根据您的具体代码自动生成一套强大的安全属性,用于 ERC20 功能。
  • 您是否与第三方代币集成? 在依赖外部合约之前,请先查看我们的 代币集成清单

目视检查代码的关键安全功能。

  • 查看 Slither 的 inheritance-graph printer。 避免以外屏蔽和 C3 线性化问题。
  • 查看 Slither 的 function-summary printer。 它报告功能可见性和访问控制。
  • 查看 Slither 的 vars-and-auth printer。 它报告了对状态变量的访问控制。

记录关键安全属性,并使用自动化测试生成器对其进行评估:

  • 学习 记录代码的安全属性。 一开始是艰难的,但它是实现良好结果的最重要的活动。 这也是使用本教程中任何高级技术的先决条件。
  • 在 Solidity 中定义安全属性,用于 EchidnaManticore。 重点是您的状态机、访问控制、算术运算、外部交互和标准一致性。
  • 使用 Slither 的 Python API 定义安全属性。 重点是继承、变量依赖项、访问控制和其他结构问题。
  • 在每次提交时,使用 Crytic 运行您的属性测试。 Crytic 可以使用和评估安全属性测试,因此团队中的每个人都可以轻松地看到他们通过 GitHub。 测试失败会阻止提交。

最后,请注意自动化工具无法轻易找到的问题:

  • 缺乏隐私:当您的事务在池中排队时,其他所有人都可以看到您的事务
  • 抢先提前交易
  • 加密操作
  • 与外部 DeFi 组件的风险互动

寻求帮助

以太坊的办公时间为每周二下午。 这些 1 小时的 1 对 1 会议是一个机会,您可以向我们询问有关安全的任何问题,使用我们的工具进行故障排除,并获得专家对您当前方法的反馈。 我们将帮助您消化本指南。

加入我们的 Slack: Empire Hacking。 如果您有任何问题,可以随时在 #crytic 和 #ethereum 频道上联系我们。

上次编辑: , Invalid DateTime
编辑页面

本页面对您有帮助吗?

网站最后更新: 2022年11月25日

使用以太坊

  • 查找钱包
  • 获取 ETH
  • 去中心化应用 (dapps)
  • 第二层
  • 运行一个节点
  • 稳定币
  • 质押以太币

生态系统

  • 社区中心
  • 以太坊基金会
  • 以太坊基金会博客
  • 生态系统支持方案
  • 以太坊漏洞悬赏计划
  • 生态系统资助计划
  • 以太坊品牌资产
  • Devcon