import { ethers, upgrades } from "hardhat"; import * as fs from "fs"; /** * 部署YTAssetFactory和YTAssetVault系统 */ async function main() { console.log("开始部署YT Asset Vault系统...\n"); const [deployer] = await ethers.getSigners(); console.log("部署账户:", deployer.address); console.log("账户余额:", ethers.formatEther(await ethers.provider.getBalance(deployer.address)), "ETH\n"); // WUSD地址(需要提前部署或使用已知地址) // const WUSD_ADDRESS = "0x7Cd017ca5ddb86861FA983a34b5F495C6F898c41"; if (!fs.existsSync("./deployments-wusd.json")) { throw new Error("未找到 deployments-wusd.json,请先运行 deployWUSD.ts"); } const wusdDeployment = JSON.parse(fs.readFileSync("./deployments-wusd.json", "utf8")); const WUSD_ADDRESS = wusdDeployment.contracts.WUSD.proxy; // ===== 1. 部署YTAssetVault实现合约 ===== console.log("===== 1. 部署YTAssetVault实现合约 ====="); const YTAssetVault = await ethers.getContractFactory("YTAssetVault"); console.log("部署YTAssetVault实现..."); const vaultImpl = await YTAssetVault.deploy(); await vaultImpl.waitForDeployment(); const vaultImplAddress = await vaultImpl.getAddress(); console.log("✅ YTAssetVault实现部署到:", vaultImplAddress); // ===== 2. 部署YTAssetFactory(可升级) ===== console.log("\n===== 2. 部署YTAssetFactory(可升级) ====="); const YTAssetFactory = await ethers.getContractFactory("YTAssetFactory"); // 默认硬顶: 1000万 const defaultHardCap = ethers.parseEther("10000000"); console.log("部署YTAssetFactory代理..."); const vaultFactory = await upgrades.deployProxy( YTAssetFactory, [vaultImplAddress, defaultHardCap], { initializer: "initialize", kind: "uups", } ); await vaultFactory.waitForDeployment(); const vaultFactoryAddress = await vaultFactory.getAddress(); console.log("✅ YTAssetFactory部署到:", vaultFactoryAddress); const vaultFactoryImplAddress = await upgrades.erc1967.getImplementationAddress(vaultFactoryAddress); console.log("✅ YTAssetFactory实现:", vaultFactoryImplAddress); // ===== 3. 显示部署摘要 ===== console.log("\n===== 部署摘要 ====="); console.log("WUSD地址: ", WUSD_ADDRESS); console.log("YTAssetVault实现: ", vaultImplAddress); console.log("YTAssetFactory代理: ", vaultFactoryAddress); console.log("YTAssetFactory实现: ", vaultFactoryImplAddress); console.log("默认硬顶: ", ethers.formatEther(defaultHardCap), "tokens"); // 保存到JSON文件 const deploymentInfo = { network: (await ethers.provider.getNetwork()).name, chainId: (await ethers.provider.getNetwork()).chainId.toString(), deployer: deployer.address, timestamp: new Date().toISOString(), wusdAddress: WUSD_ADDRESS, defaultHardCap: defaultHardCap.toString(), contracts: { YTAssetVault: { implementation: vaultImplAddress }, YTAssetFactory: { proxy: vaultFactoryAddress, implementation: vaultFactoryImplAddress } }, vaults: [] // 创建的vault将被添加到这里 }; fs.writeFileSync( "./deployments-vault-system.json", JSON.stringify(deploymentInfo, null, 2) ); console.log("\n✅ 部署信息已保存到 deployments-vault-system.json"); console.log("\n💡 下一步:"); console.log("1. 使用 createVault.ts 创建YTAssetVault代币"); console.log("2. 在YTLp系统中将创建的vault添加到白名单"); console.log("3. 为vault设置价格和其他参数"); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });