第二周·总结二:权限、代币经济与模块化系统

  • 涵盖课次

    • lesson11:Ownable + Vault(参考:day11-MasterKey/day11-Ownable.sollarry/day11-MasterKey/day11-VaultMaster.sol
    • lesson12:ERC20 基础代币(参考:day12-MyFirstToken.sol
    • lesson13:代币预售(参考:day13-PreorderTokens.sol
    • lesson14:智能存储柜(接口/抽象/多合约)(参考:day14-SafeDeposit/*
  • 核心知识点

    • 所有权与继承:Ownable 抽象出权限控制;下游合约(例如 Vault)通过 onlyOwner 约束敏感操作。
    • ERC20 标准:totalSupplybalanceOftransfer/approve/transferFromTransfer/Approval 事件与 decimals 精度。
    • 代币销售:定价与时间窗、额度上下限、资金托管与最终结算;在销售期内锁定转账。
    • 接口与抽象:统一交互面向 interface,抽象基类落实通用逻辑,派生合约实现差异化能力,管理合约集中编排。
  • 代码要点与启发

    • Ownable + VaultMaster:
      • Ownable 提供 onlyOwnerOwnershipTransferred 事件,VaultMaster 继承后集中控制 withdraw
      • 建议:withdraw 对等额取款使用 >= 校验;外部转账使用 CEI 顺序与可选重入保护;为重要操作补充事件。
    • 简版 ERC20:
      • 基本字段与两层 allowance_transfer 内部复用,触发 Transfer 事件。
      • 建议:
        • 确保构造函数正确拼写并初始化(当前代码中 contructor 为拼写错误)。
        • transfer 建议使用 >= 以符合主流 ERC20 语义;同时关注 approve 竞争条件与“先清零再设值”的模式。
        • 对溢出/下溢(^0.8 已内置检查)与零地址转账做显式防护;优先参考 OpenZeppelin 实现。
    • 代币预售(SimplifiedTokenSale):
      • 通过继承代币合约,部署时把代币 _transfer 到销售合约地址;限定 saleStart/Endmin/max;购买时按 tokenPrice 计算发放;finalize 把 ETH 结算给 projectOwner,并通过 receive() 支持直付购买。
      • 锁定期:通过重写 transfer/transferFrom 在未 finalized 时限制自由转账(当前实现存在拼写错误 fasle 导致编译/逻辑异常,需修正为 false)。
      • 建议:
        • projectOwner 非零检查;考虑为购买加上每地址上限、白名单与退款路径;对买入数量的整数除法与舍入向下有清晰提示。
        • 统一销售代币精度与价格精度(以 wei/最小代币单位计价)。
        • 关键流程事件完善(Purchased、Finalized、Refuned 等)。
    • SafeDeposit(接口/抽象/多合约):
      • IDepositBox 统一能力;BaseDepositBox 抽象通用的 ownerdepositTimestoreSecret;派生 Basic/Premium/TimeLocked 覆盖差异化能力,VaultManager 管理创建/命名/所有权转移与信息查询。
      • 建议:
        • BaseDepositBox 实现 getSecret() 并由派生类通过修饰器进一步约束访问(例如 TimeLocked 的时间锁);同时确保可见性与修饰器在派生类中可用。
        • VaultManager.getBoxInfo 注意返回参数分隔(当前代码中 getDepositTime(). 为语法错误应改为逗号)。
        • 为创建与转移添加事件(已有),并在跨合约调用前后做好权限与地址有效性校验。
  • 安全与工程化要点

    • 权限与治理:对于高价值金库或销售合约,考虑多签治理替代单一 owner;关键参数变更需要延时与事件公告。
    • 资金安全:所有外部转账前更新内部状态(CEI),必要时加重入锁;对 receive/fallback 行为限制。
    • 模块化与可测性:接口驱动设计便于替换实现与单元测试;为各模块编写独立测试,覆盖时序边界(开始/结束/锁定/解锁)。
  • 自测清单

    • 何时应优先继承 Ownable?哪些操作应被 onlyOwner 保护?
    • 代币预售中,如何处理小数精度、舍入与超额购买?你会如何设计退款/白名单/上限?
    • 在接口/抽象/派生/管理四件套的架构下,如何验证每个环节的权限与数据流正确无误?
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容