change WUSD payment to USDC
This commit is contained in:
@@ -499,7 +499,7 @@
|
||||
│ │ │ YT-A (原有) │ 30000 │ 30.0% │ 27.27% │ ← 自动变化│ │
|
||||
│ │ │ YT-B (原有) │ 30000 │ 30.0% │ 27.27% │ │ │
|
||||
│ │ │ YT-C (原有) │ 30000 │ 30.0% │ 27.27% │ │ │
|
||||
│ │ │ WUSD (原有) │ 10000 │ 10.0% │ 9.09% │ │ │
|
||||
│ │ │ USDC (原有) │ 10000 │ 10.0% │ 9.09% │ │ │
|
||||
│ │ │ YT-D (新增) │ 10000 │ - │ 9.09% │ ← 新增 │ │
|
||||
│ │ ├──────────────┼────────┼──────────┼──────────┤ │ │
|
||||
│ │ │ 总计 │ 110000 │ 100% │ 100% │ │ │
|
||||
@@ -534,8 +534,10 @@
|
||||
│ ② 初始化价格 (如果需要) │
|
||||
│ forceUpdatePrice(YT-D, 1e30) // 初始价格 $1.00 │
|
||||
│ │
|
||||
│ 注意: YT代币需要实现 assetPrice() 接口 │
|
||||
│ 价格预言机会自动读取该接口获取价格 │
|
||||
│ 注意: │
|
||||
│ • YT代币需要实现 ytPrice() 接口 │
|
||||
│ • 价格预言机会自动读取该接口获取YT价格 │
|
||||
│ • USDC价格自动从Chainlink获取,无需手动配置 │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ 3. 配置完成
|
||||
@@ -569,9 +571,9 @@
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ YT代币必须实现的接口 │
|
||||
│ │
|
||||
│ interface IYTToken { │
|
||||
│ // 必需:返回当前资产价格(30位精度) │
|
||||
│ function assetPrice() external view returns (uint256); │
|
||||
│ interface IYTAssetVault { │
|
||||
│ // 必需:返回当前YT资产价格(30位精度) │
|
||||
│ function ytPrice() external view returns (uint256); │
|
||||
│ │
|
||||
│ // 可选:返回最后价格更新时间 │
|
||||
│ function lastPriceUpdate() external view returns (uint256); │
|
||||
@@ -584,9 +586,14 @@
|
||||
│ external returns (bool); │
|
||||
│ } │
|
||||
│ │
|
||||
│ 价格示例: │
|
||||
│ YT价格示例 (1e30精度): │
|
||||
│ $1.00 = 1 × 10^30 = 1000000000000000000000000000000 │
|
||||
│ $0.998 = 998000000000000000000000000000 │
|
||||
│ │
|
||||
│ USDC价格(从Chainlink获取,1e8精度): │
|
||||
│ $1.00 = 100000000 (1e8) │
|
||||
│ $0.998 = 99800000 │
|
||||
│ 自动转换为1e30精度用于内部计算 │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -640,7 +647,7 @@
|
||||
│ │ │ YT-A │ 30000 │ 30% │ │ │
|
||||
│ │ │ YT-B │ 30000 │ 30% │ │ │
|
||||
│ │ │ YT-C │ 30000 │ 30% │ │ │
|
||||
│ │ │ WUSD │ 10000 │ 10% │ │ │
|
||||
│ │ │ USDC │ 10000 │ 10% │ │ │
|
||||
│ │ │ YT-D (删除) │ 0 │ - │ ← 已移除 │ │
|
||||
│ │ ├──────────────┼────────┼────────┤ │ │
|
||||
│ │ │ 总计 │ 100000 │ 100% │ │ │
|
||||
@@ -783,25 +790,29 @@
|
||||
|
||||
## 6. 系统部署和初始化流程
|
||||
|
||||
### 6.1 部署 YTPriceFeed(优化版)
|
||||
### 6.1 部署 YTPriceFeed(使用 Chainlink)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 部署者 (Deployer) │
|
||||
└────────────────────────────┬────────────────────────────────────────┘
|
||||
│
|
||||
│ 1. 首先部署 WUSD
|
||||
│ 1. 准备 USDC 和 Chainlink 地址
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 部署 WUSD 合约 │
|
||||
│ 准备外部合约地址 │
|
||||
│ ───────────────────────────────────────────────────────────────── │
|
||||
│ WUSD wusd = new WUSD() │
|
||||
│ wusd.initialize("Wrapped USD", "WUSD") │
|
||||
│ • USDC 代币地址(BSC主网) │
|
||||
│ usdc = 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d │
|
||||
│ 注意:BSC主网USDC是18位精度 │
|
||||
│ │
|
||||
│ 得到: 0x7Cd017ca5ddb86861FA983a34b5F495C6F898c41 │
|
||||
│ • Chainlink USDC/USD 价格预言机地址(BSC主网) │
|
||||
│ usdcPriceFeed = 0x51597f405303C4377E36123cBc172b13269EA163 │
|
||||
│ 精度:1e8(Chainlink标准) │
|
||||
│ 价格示例:$1.00 = 100000000 (1e8) │
|
||||
└────────────────────────────┬────────────────────────────────────────┘
|
||||
│
|
||||
│ 2. 部署 YTPriceFeed(传入WUSD地址)
|
||||
│ 2. 部署 YTPriceFeed(传入USDC和Chainlink地址)
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 部署 YTPriceFeed(可升级) │
|
||||
@@ -809,7 +820,10 @@
|
||||
│ const YTPriceFeed = await ethers.getContractFactory("YTPriceFeed") │
|
||||
│ const priceFeed = await upgrades.deployProxy( │
|
||||
│ YTPriceFeed, │
|
||||
│ [wusdAddress], // ← 初始化参数:WUSD地址 │
|
||||
│ [ │
|
||||
│ usdcAddress, // ← USDC代币地址 │
|
||||
│ usdcPriceFeedAddress // ← Chainlink预言机地址 │
|
||||
│ ], │
|
||||
│ { │
|
||||
│ kind: "uups", │
|
||||
│ initializer: "initialize" │
|
||||
@@ -817,29 +831,37 @@
|
||||
│ ) │
|
||||
└────────────────────────────┬────────────────────────────────────────┘
|
||||
│
|
||||
│ 3. initialize(address _wusdAddress)
|
||||
│ 3. initialize(address _usdc, address _usdcPriceFeed)
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ YTPriceFeed.initialize() │
|
||||
│ ───────────────────────────────────────────────────────────────── │
|
||||
│ function initialize(address _wusdAddress) external initializer │
|
||||
│ function initialize( │
|
||||
│ address _usdc, │
|
||||
│ address _usdcPriceFeed │
|
||||
│ ) external initializer │
|
||||
│ │
|
||||
│ 步骤: │
|
||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||
│ │ ① __UUPSUpgradeable_init() │ │
|
||||
│ │ • 初始化UUPS升级功能 │ │
|
||||
│ │ │ │
|
||||
│ │ ② 验证WUSD地址 │ │
|
||||
│ │ if (_wusdAddress == address(0)) revert InvalidAddress() │ │
|
||||
│ │ ✓ 0x7Cd... 有效 │ │
|
||||
│ │ ② 验证USDC地址 │ │
|
||||
│ │ if (_usdc == address(0)) revert InvalidAddress() │ │
|
||||
│ │ ✓ 0x8AC... 有效 │ │
|
||||
│ │ │ │
|
||||
│ │ ③ 保存WUSD地址 │ │
|
||||
│ │ wusdAddress = _wusdAddress │ │
|
||||
│ │ ③ 验证Chainlink预言机地址 │ │
|
||||
│ │ if (_usdcPriceFeed == address(0)) revert InvalidAddress()│ │
|
||||
│ │ ✓ 0x515... 有效 │ │
|
||||
│ │ │ │
|
||||
│ │ ④ 设置治理地址 │ │
|
||||
│ │ ④ 保存地址 │ │
|
||||
│ │ usdc = _usdc │ │
|
||||
│ │ usdcPriceFeed = AggregatorV3Interface(_usdcPriceFeed) │ │
|
||||
│ │ │ │
|
||||
│ │ ⑤ 设置治理地址 │ │
|
||||
│ │ gov = msg.sender (部署者) │ │
|
||||
│ │ │ │
|
||||
│ │ ⑤ 设置默认参数 │ │
|
||||
│ │ ⑥ 设置默认参数 │ │
|
||||
│ │ maxPriceChangeBps = 500 // 5% 最大价格变动 │ │
|
||||
│ └─────────────────────────────────────────────────────────────┘ │
|
||||
└────────────────────────────┬────────────────────────────────────────┘
|
||||
@@ -850,16 +872,20 @@
|
||||
│ YTPriceFeed 就绪 │
|
||||
│ ───────────────────────────────────────────────────────────────── │
|
||||
│ 状态: │
|
||||
│ • wusdAddress: 已设置 ✓ │
|
||||
│ • usdc: 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d ✓ │
|
||||
│ • usdcPriceFeed: 0x51597f405303C4377E36123cBc172b13269EA163 ✓ │
|
||||
│ • gov: 已设置 ✓ │
|
||||
│ • maxPriceChangeBps: 500 (5%) │
|
||||
│ • wusdPriceSource: 未设置(稍后配置) │
|
||||
│ │
|
||||
│ 价格获取方式: │
|
||||
│ • USDC价格:从Chainlink实时获取(自动更新) │
|
||||
│ • YT代币价格:从YTAssetVault.ytPrice()读取(需keeper更新) │
|
||||
│ │
|
||||
│ 优势: │
|
||||
│ ✓ 减少一个初始化参数 │
|
||||
│ ✓ WUSD地址在初始化时就确定 │
|
||||
│ ✓ 避免后续单独设置WUSD地址 │
|
||||
│ ✓ 简化部署流程 │
|
||||
│ ✓ USDC价格实时准确(Chainlink提供) │
|
||||
│ ✓ 无需手动更新USDC价格 │
|
||||
│ ✓ 价格数据去中心化,更可靠 │
|
||||
│ ✓ 支持价格验证(负数/零值检查) │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -869,15 +895,16 @@
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 系统部署顺序 │
|
||||
│ │
|
||||
│ 步骤 1: 部署 WUSD │
|
||||
│ └─→ WUSD.initialize("Wrapped USD", "WUSD") │
|
||||
│ 步骤 1: 准备 USDC 和 Chainlink 地址 │
|
||||
│ ├─→ USDC: 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d (BSC主网) │
|
||||
│ └─→ Chainlink USDC/USD: 0x51597f405303C4377E36123cBc172b13269EA163 │
|
||||
│ │
|
||||
│ 步骤 2: 部署代币合约 │
|
||||
│ ├─→ USDY.initialize() │
|
||||
│ └─→ YTLPToken.initialize() │
|
||||
│ │
|
||||
│ 步骤 3: 部署 YTPriceFeed │
|
||||
│ └─→ YTPriceFeed.initialize(wusdAddress) ← 传入WUSD地址 │
|
||||
│ └─→ YTPriceFeed.initialize(usdcAddress, usdcPriceFeedAddress) │
|
||||
│ │
|
||||
│ 步骤 4: 部署 YTVault │
|
||||
│ └─→ YTVault.initialize(usdyAddress, priceFeedAddress) │
|
||||
@@ -907,9 +934,9 @@
|
||||
│ └─→ poolManager.setHandler(routerAddress, true) │
|
||||
│ │
|
||||
│ 步骤 8: 配置 YTPriceFeed │
|
||||
│ ├─→ priceFeed.setWusdPriceSource(ytAssetVaultAddress) │
|
||||
│ ├─→ priceFeed.setKeeper(keeperAddress, true) │
|
||||
│ └─→ priceFeed.setMaxPriceChangeBps(500) │
|
||||
│ ├─→ priceFeed.setMaxPriceChangeBps(500) │
|
||||
│ └─→ 注意:USDC价格自动从Chainlink获取,无需手动设置 │
|
||||
│ │
|
||||
│ 步骤 9: 配置 YTVault 参数 │
|
||||
│ ├─→ vault.setSwapFees(30, 4, 50, 20) │
|
||||
|
||||
Reference in New Issue
Block a user