【区块链实战】智能合约部署说明
一、 部署流程总览表
部署者地址:
0xa6aB9fC9DD0f85B3659F8DE18b07989d3c7C238e
部署网络: Sepolia 测试网
下表按执行顺序列出了部署脚本的 8 个核心阶段:
| 阶段 | 操作目标 | 涉及核心合约 | 关键参数/操作 |
|---|---|---|---|
| 1. 代币部署 | 准备生态基础代币 | EXTH, USDT, GBP, RNB | 部署 4 个 ERC20 合约,EXTH 具备治理功能 |
| 2. 治理框架 | 建立 DAO 核心架构 | Timelock, Dao | 设置测试公示期为 3 分钟 (minDelay = 180) |
| 3. 权限授予 | 确立 DAO 执行路径 | Timelock, Dao | 授予 Dao 合约 PROPOSER 和 EXECUTOR 角色 |
| 4. 业务核心 | 部署交易与金库系统 | Exchange, Treasure, MultiSigWallet | 配置金库地址、仲裁名单,建立三者间的白名单授权 |
| 5. 辅助功能 | 扩展空投与战略融资 | Airdrop, StrategicSwap | 生成 MerkleRoot,配置战略投资者的原子交换参数 |
| 6. 初始化 | 注入资金与种子用户 | EXTH, Exchange, Treasure | 铸造 150亿 EXTH 至金库;注册并资助 2 名种子用户 |
| 7. 所有权移交 | 实现治理去中心化 | 所有 Ownable 合约 | 将 EXTH, Exchange, Treasure, MultiSig 权转给 Timelock |
| 8. 终极权限 | 部署者完全退出 | Timelock | 部署者撤销 Timelock 的 DEFAULT_ADMIN_ROLE |
二、 部署逻辑流程图
流程图展示了从合约创建、互联到最后权限锁定的逻辑。

三、权限控制权流转图
所有权最终汇聚到 Timelock

四、部署阶段详解
1. 代币合约部署
目标: 创建项目所需的所有 ERC20 代币。
部署治理代币 (EXTH):
合约:
EXTH
特性: 具备投票 (ERC20Votes)、许可 (ERC20Permit) 和所有权 (Ownable) 功能。
部署后,部署者是EXTH合约的owner。
部署模拟法币代币 (GBP, RNB):合约:
GBP,RNB
目的: 用于模拟与现实世界法币的交互。
构造函数中会为部署者铸造初始供应量。
部署投资代币 (USDT):合约:
USDT
目的: 模拟真实世界中用于投资的稳定币。
构造函数中会为部署者铸造初始供应量。
2. 核心治理框架搭建
目标: 建立 DAO 的基础架构,包括决策延迟机制和投票系统。
部署时间锁合约 (Timelock):
合约:
Timelock
参数:minDelay = 180秒 (3分钟,用于测试)。
作用: 作为 DAO 的执行官。所有权变更或关键操作都必须经过它的延迟(公示期)后才能执行。
部署 DAO 治理合约:合约:
Dao
参数:
_token:EXTH代币合约地址。
_timelock:Timelock合约地址。
作用: 负责处理提案、投票和计票的逻辑。
3. 治理角色配置
目标: 将治理的权力中心从部署者转移到 DAO 合约。
授权 DAO 合约:
在Timelock合约中,调用grantRole()函数两次:
将PROPOSER_ROLE(提案者角色) 授予Dao合约。
将EXECUTOR_ROLE(执行者角色) 授予Dao合约。
结果:Dao合约现在有权向Timelock提交提案,并在提案通过公示期后执行它们。
4. 应用层核心合约部署与配置
目标: 部署项目的主要业务逻辑合约,并建立它们之间的连接。
部署金库 (Treasure):
合约:
Treasure
作用: 一个安全的资金保险库,用于存放项目的资金(如 EXTH 代币)。
部署交易所 (Exchange):合约:
Exchange
参数:EXTH地址,USDT地址。
配置: 调用exchange.setTreasure(),将Treasure合约的地址写入Exchange合约中。
部署多签钱包 (MultiSigWallet):合约:
MultiSigWallet
参数:Treasure地址,USDT地址,EXTH地址, 以及一个包含3个仲裁委员会成员地址的数组。
作用: 作为争议仲裁机构。
建立应用层合约间的信任关系:
multiSigWallet.setExchangeContract(): 告知多签钱包它需要与哪个Exchange合约交互。
exchange.setAuthorizedCaller(): 授权MultiSigWallet可以在Exchange合约上执行特定操作(如将用户加入黑名单)。
treasure.setMultiSigWallet(): 将MultiSigWallet地址加入Treasure合约的授权列表,允许它在仲裁赔付时动用金库资金。
treasure.addAuthorizedCaller(): 授权Exchange合约可以从Treasure合约中提取EXTH代币以发放交易奖励。
5. 辅助功能合约部署
目标: 部署用于市场活动和特定融资目的的辅助合约。
部署空投合约 (Airdrop):
合约:
Airdrop
参数:
merkleRoot: 预先计算好的白名单默克尔树根。
EXTH地址,Exchange地址,Timelock地址。
部署战略投资合约 (StrategicSwap):合约:
StrategicSwap
参数:EXTH地址,USDT地址, 战略投资者地址,Treasure金库地址, 两种代币的交换数量,Timelock地址。
作用: 用于和特定战略投资者进行一次性的、原子化的代币交换。
6. 初始状态设置
目标: 为协议注入初始流动性并设置种子用户,以启动生态系统。
铸造初始代币:
调用
exth.mint(),向Treasure金库合约铸造 150 亿EXTH代币。
初始化种子用户:注册两个指定的用户地址到
Exchange合约中 (exchange.registerUser())。
关键操作: 此时部署者仍是Treasure的所有者,因此有权调用treasure.withdrawERC20(),从金库中为这两位用户分别转账 900EXTH。
调用exchange.initSeedUsers()将这两个地址设置为“种子用户”类型,使其在早期享有特定权益。
7. 所有权移交(去中心化)
目标: 部署者放弃所有控制权,将协议完全交给 DAO 管理。这是实现“去中心化”的关键一步。
移交所有权:
exth.transferOwnership()-> 移交给Timelock
exchange.transferOwnership()-> 移交给Timelock
treasure.transferOwnership()-> 移交给Timelock
multiSigWallet.transferOwnership()-> 移交给Timelock
结果: 此后,任何对这些合约的onlyOwner函数的调用都必须通过DAO->Timelock的治理流程。
8. 撤销最终权限
目标: 部署者“焚烧”自己的最后权限,完成彻底的去中心化。
放弃管理员角色:
部署者调用timelock.renounceRole(DEFAULT_ADMIN_ROLE, deployer.address)。
结果: 部署者彻底失去了对Timelock合约的控制权,无法再为自己或其他地址分配任何角色。
五、关键配置细节对照表
| 配置项 | 具体数值 / 逻辑 |
|---|---|
| Timelock 延迟 (minDelay) | 180 秒 (3分钟) |
| EXTH 精度 (Decimals) | 6 |
| 初始铸币量 | 150,000,000,000 (150亿) |
| 种子用户初始资产 | 900 EXTH |
| 多签委员会人数 | 3 (需 2 人签名执行) |
| 治理路径 | 用户持有 EXTH -> Dao 提案 -> 公示期 -> Timelock 执行 |
更多推荐


所有评论(0)