• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

竹千代

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Solidity合约安全和性能checklist

一、设计阶段

 要根据业务,区分出角色、活动阶段。

 明确各种角色在各种活动阶段, 有什么样的执行权限

 活动的特点,容易在什么阶段、受到什么样的攻击

兜底策略应该有哪些

二、开发阶段

  • 注重实施访问权限控制,按照最小特权原则
  • 尽量使用现有、社区审核的库
  • 多使用modifier修饰符
  • 防范类型溢出,比如Number等数值
  • 严格参数校验
  • 紧急停止机制,比如暂停、冻结提款等

三、测试阶段

  • 单元测试覆盖率100%
  • 使用主网模拟、测试网做自动化集成测试
  • 使用安全测试框架,比如Truffle,做property-checking, fuzzing, and formal verification

四、防范攻击

五、安全审计

  • 使用文档生成工具以及高级设计解释来生成实时文档
  • 使用安全测试框架,比如Truffle,做property-checking, fuzzing, and formal verification
  • SAST工具进行代码分析
  • 合约自动化检测工具(如Mythril、Slither等)进行静态分析
  • 聘请专业的安全审计团队进行第三方审计
  • 赏金计划,给社区发现bug的人提供奖励

五、发布部署

  • 发布源码到etherscan,提升透明度
  • 合约内要做分阶段,例如,前面阶段只放开什么功能,只允许哪类角色用户执行
  • 代理合约(Proxy Contract)和逻辑合约(Logic Contract)的设计模式,可以实现智能合约的灵活升级

六、监控

  • 用etherscan查看合约的交易流水、事件日志等

 

性能方面:

  • 不要在循环中修改 storage。先在 memory 构建数据,最后一次性写回。因为storage操作成本比memory高很多。
  • 先用 mapping 而非数组做查找(O(1) vs O(n))
  • 避免在循环中发事件或调用外部合约。gas昂贵且不可预测。
  • 限制循环便利的次数

 

posted on 2024-01-18 12:56  竹千代  阅读(46)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3