一、 部署流程总览表

部署者地址: 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(),从金库中为这两位用户分别转账 900 EXTH。
调用 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 执行

更多推荐