-
涵盖课次
- lesson11:Ownable + Vault(参考:
day11-MasterKey/day11-Ownable.sol,larry/day11-MasterKey/day11-VaultMaster.sol) - lesson12:ERC20 基础代币(参考:
day12-MyFirstToken.sol) - lesson13:代币预售(参考:
day13-PreorderTokens.sol) - lesson14:智能存储柜(接口/抽象/多合约)(参考:
day14-SafeDeposit/*)
- lesson11:Ownable + Vault(参考:
-
核心知识点
- 所有权与继承:
Ownable抽象出权限控制;下游合约(例如 Vault)通过onlyOwner约束敏感操作。 - ERC20 标准:
totalSupply、balanceOf、transfer/approve/transferFrom、Transfer/Approval事件与decimals精度。 - 代币销售:定价与时间窗、额度上下限、资金托管与最终结算;在销售期内锁定转账。
- 接口与抽象:统一交互面向
interface,抽象基类落实通用逻辑,派生合约实现差异化能力,管理合约集中编排。
- 所有权与继承:
-
代码要点与启发
- Ownable + VaultMaster:
-
Ownable提供onlyOwner与OwnershipTransferred事件,VaultMaster继承后集中控制withdraw。 - 建议:
withdraw对等额取款使用>=校验;外部转账使用 CEI 顺序与可选重入保护;为重要操作补充事件。
-
- 简版 ERC20:
- 基本字段与两层
allowance;_transfer内部复用,触发Transfer事件。 - 建议:
- 确保构造函数正确拼写并初始化(当前代码中
contructor为拼写错误)。 -
transfer建议使用>=以符合主流 ERC20 语义;同时关注approve竞争条件与“先清零再设值”的模式。 - 对溢出/下溢(^0.8 已内置检查)与零地址转账做显式防护;优先参考 OpenZeppelin 实现。
- 确保构造函数正确拼写并初始化(当前代码中
- 基本字段与两层
- 代币预售(SimplifiedTokenSale):
- 通过继承代币合约,部署时把代币
_transfer到销售合约地址;限定saleStart/End、min/max;购买时按tokenPrice计算发放;finalize把 ETH 结算给projectOwner,并通过receive()支持直付购买。 - 锁定期:通过重写
transfer/transferFrom在未finalized时限制自由转账(当前实现存在拼写错误fasle导致编译/逻辑异常,需修正为false)。 - 建议:
- 对
projectOwner非零检查;考虑为购买加上每地址上限、白名单与退款路径;对买入数量的整数除法与舍入向下有清晰提示。 - 统一销售代币精度与价格精度(以 wei/最小代币单位计价)。
- 关键流程事件完善(Purchased、Finalized、Refuned 等)。
- 对
- 通过继承代币合约,部署时把代币
- SafeDeposit(接口/抽象/多合约):
-
IDepositBox统一能力;BaseDepositBox抽象通用的owner、depositTime、storeSecret;派生Basic/Premium/TimeLocked覆盖差异化能力,VaultManager管理创建/命名/所有权转移与信息查询。 - 建议:
- 在
BaseDepositBox实现getSecret()并由派生类通过修饰器进一步约束访问(例如TimeLocked的时间锁);同时确保可见性与修饰器在派生类中可用。 -
VaultManager.getBoxInfo注意返回参数分隔(当前代码中getDepositTime().为语法错误应改为逗号)。 - 为创建与转移添加事件(已有),并在跨合约调用前后做好权限与地址有效性校验。
- 在
-
- Ownable + VaultMaster:
-
安全与工程化要点
- 权限与治理:对于高价值金库或销售合约,考虑多签治理替代单一
owner;关键参数变更需要延时与事件公告。 - 资金安全:所有外部转账前更新内部状态(CEI),必要时加重入锁;对
receive/fallback行为限制。 - 模块化与可测性:接口驱动设计便于替换实现与单元测试;为各模块编写独立测试,覆盖时序边界(开始/结束/锁定/解锁)。
- 权限与治理:对于高价值金库或销售合约,考虑多签治理替代单一
-
自测清单
- 何时应优先继承
Ownable?哪些操作应被onlyOwner保护? - 代币预售中,如何处理小数精度、舍入与超额购买?你会如何设计退款/白名单/上限?
- 在接口/抽象/派生/管理四件套的架构下,如何验证每个环节的权限与数据流正确无误?
- 何时应优先继承
第二周·总结二:权限、代币经济与模块化系统
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- ## 区块链智能合约: 实际应用与安全审计 **Meta Description:** 深入探讨区块链智能合约的核...
- ## 区块链应用实践:使用智能合约开发去中心化应用 ### 区块链与智能合约技术基础 区块链(Blockchain...
- 1、流程图 2、ERC20代码详解 1)、基本合约提供总发行量,余额,交易转账函数以及转账事件 2)、Safe...
- ## 区块链技术实操: 智能合约与去中心化应用开发 ### 引言:区块链开发新范式 在当今数字化变革浪潮中,**区...