Files
assetxContracts/scripts/deploy/03-deployAsset.ts
2025-12-18 13:07:35 +08:00

100 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
});