commit
This commit is contained in:
184
scripts/deploy/02-deployYTLp.ts
Normal file
184
scripts/deploy/02-deployYTLp.ts
Normal file
@@ -0,0 +1,184 @@
|
||||
import { ethers, upgrades } from "hardhat";
|
||||
import * as fs from "fs";
|
||||
|
||||
/**
|
||||
* 部署YTLp系统的所有合约(不包含配置)
|
||||
*/
|
||||
async function main() {
|
||||
console.log("开始部署YT协议可升级合约...\n");
|
||||
|
||||
const [deployer] = await ethers.getSigners();
|
||||
console.log("部署账户:", deployer.address);
|
||||
console.log("账户余额:", ethers.formatEther(await ethers.provider.getBalance(deployer.address)), "ETH\n");
|
||||
|
||||
// ==================== 1. 部署代币合约 ====================
|
||||
console.log("===== 1. 部署代币合约 =====");
|
||||
|
||||
// 部署USDY (可升级)
|
||||
console.log("部署USDY...");
|
||||
const USDY = await ethers.getContractFactory("USDY");
|
||||
const usdy = await upgrades.deployProxy(USDY, [], {
|
||||
kind: "uups",
|
||||
initializer: "initialize"
|
||||
});
|
||||
await usdy.waitForDeployment();
|
||||
const usdyAddress = await usdy.getAddress();
|
||||
console.log("✅ USDY deployed to:", usdyAddress);
|
||||
|
||||
// 部署YTLPToken (可升级)
|
||||
console.log("部署YTLPToken...");
|
||||
const YTLPToken = await ethers.getContractFactory("YTLPToken");
|
||||
const ytLP = await upgrades.deployProxy(YTLPToken, [], {
|
||||
kind: "uups",
|
||||
initializer: "initialize"
|
||||
});
|
||||
await ytLP.waitForDeployment();
|
||||
const ytLPAddress = await ytLP.getAddress();
|
||||
console.log("✅ YTLPToken deployed to:", ytLPAddress);
|
||||
|
||||
// ==================== 2. 部署核心合约 ====================
|
||||
console.log("\n===== 2. 部署核心合约 =====");
|
||||
|
||||
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 wusdAddress = wusdDeployment.contracts.WUSD.proxy;
|
||||
|
||||
|
||||
// 部署YTPriceFeed (可升级)
|
||||
console.log("部署YTPriceFeed...");
|
||||
const YTPriceFeed = await ethers.getContractFactory("YTPriceFeed");
|
||||
const priceFeed = await upgrades.deployProxy(YTPriceFeed, [wusdAddress], {
|
||||
kind: "uups",
|
||||
initializer: "initialize"
|
||||
});
|
||||
await priceFeed.waitForDeployment();
|
||||
const priceFeedAddress = await priceFeed.getAddress();
|
||||
console.log("✅ YTPriceFeed deployed to:", priceFeedAddress);
|
||||
|
||||
// 部署YTVault (可升级)
|
||||
console.log("部署YTVault...");
|
||||
const YTVault = await ethers.getContractFactory("YTVault");
|
||||
const vault = await upgrades.deployProxy(
|
||||
YTVault,
|
||||
[usdyAddress, priceFeedAddress],
|
||||
{
|
||||
kind: "uups",
|
||||
initializer: "initialize"
|
||||
}
|
||||
);
|
||||
await vault.waitForDeployment();
|
||||
const vaultAddress = await vault.getAddress();
|
||||
console.log("✅ YTVault deployed to:", vaultAddress);
|
||||
|
||||
// 部署YTPoolManager (可升级)
|
||||
console.log("部署YTPoolManager...");
|
||||
const YTPoolManager = await ethers.getContractFactory("YTPoolManager");
|
||||
const cooldownDuration = 15 * 60; // 15分钟
|
||||
const poolManager = await upgrades.deployProxy(
|
||||
YTPoolManager,
|
||||
[vaultAddress, usdyAddress, ytLPAddress, cooldownDuration],
|
||||
{
|
||||
kind: "uups",
|
||||
initializer: "initialize"
|
||||
}
|
||||
);
|
||||
await poolManager.waitForDeployment();
|
||||
const poolManagerAddress = await poolManager.getAddress();
|
||||
console.log("✅ YTPoolManager deployed to:", poolManagerAddress);
|
||||
|
||||
// 部署YTRewardRouter (可升级)
|
||||
console.log("部署YTRewardRouter...");
|
||||
const YTRewardRouter = await ethers.getContractFactory("YTRewardRouter");
|
||||
const router = await upgrades.deployProxy(
|
||||
YTRewardRouter,
|
||||
[usdyAddress, ytLPAddress, poolManagerAddress, vaultAddress],
|
||||
{
|
||||
kind: "uups",
|
||||
initializer: "initialize"
|
||||
}
|
||||
);
|
||||
await router.waitForDeployment();
|
||||
const routerAddress = await router.getAddress();
|
||||
console.log("✅ YTRewardRouter deployed to:", routerAddress);
|
||||
|
||||
// ==================== 3. 输出部署信息 ====================
|
||||
console.log("\n===== 部署完成!=====");
|
||||
console.log("\n📋 合约地址:");
|
||||
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
console.log("USDY: ", usdyAddress);
|
||||
console.log("YTLPToken: ", ytLPAddress);
|
||||
console.log("YTPriceFeed: ", priceFeedAddress);
|
||||
console.log("YTVault: ", vaultAddress);
|
||||
console.log("YTPoolManager: ", poolManagerAddress);
|
||||
console.log("YTRewardRouter: ", routerAddress);
|
||||
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
|
||||
// 获取实现合约地址
|
||||
console.log("\n📋 实现合约地址 (用于验证和升级):");
|
||||
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
const usdyImpl = await upgrades.erc1967.getImplementationAddress(usdyAddress);
|
||||
const ytLPImpl = await upgrades.erc1967.getImplementationAddress(ytLPAddress);
|
||||
const priceFeedImpl = await upgrades.erc1967.getImplementationAddress(priceFeedAddress);
|
||||
const vaultImpl = await upgrades.erc1967.getImplementationAddress(vaultAddress);
|
||||
const poolManagerImpl = await upgrades.erc1967.getImplementationAddress(poolManagerAddress);
|
||||
const routerImpl = await upgrades.erc1967.getImplementationAddress(routerAddress);
|
||||
|
||||
console.log("USDY Implementation: ", usdyImpl);
|
||||
console.log("YTLPToken Implementation: ", ytLPImpl);
|
||||
console.log("YTPriceFeed Implementation: ", priceFeedImpl);
|
||||
console.log("YTVault Implementation: ", vaultImpl);
|
||||
console.log("YTPoolManager Implementation: ", poolManagerImpl);
|
||||
console.log("YTRewardRouter Implementation: ", routerImpl);
|
||||
console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
|
||||
|
||||
// 保存到JSON文件
|
||||
const deploymentInfo = {
|
||||
network: (await ethers.provider.getNetwork()).name,
|
||||
chainId: (await ethers.provider.getNetwork()).chainId.toString(),
|
||||
deployer: deployer.address,
|
||||
timestamp: new Date().toISOString(),
|
||||
contracts: {
|
||||
USDY: {
|
||||
proxy: usdyAddress,
|
||||
implementation: usdyImpl
|
||||
},
|
||||
YTLPToken: {
|
||||
proxy: ytLPAddress,
|
||||
implementation: ytLPImpl
|
||||
},
|
||||
YTPriceFeed: {
|
||||
proxy: priceFeedAddress,
|
||||
implementation: priceFeedImpl
|
||||
},
|
||||
YTVault: {
|
||||
proxy: vaultAddress,
|
||||
implementation: vaultImpl
|
||||
},
|
||||
YTPoolManager: {
|
||||
proxy: poolManagerAddress,
|
||||
implementation: poolManagerImpl
|
||||
},
|
||||
YTRewardRouter: {
|
||||
proxy: routerAddress,
|
||||
implementation: routerImpl
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
fs.writeFileSync(
|
||||
"./deployments-ytlp.json",
|
||||
JSON.stringify(deploymentInfo, null, 2)
|
||||
);
|
||||
console.log("\n✅ 部署信息已保存到 deployments-ytlp.json");
|
||||
console.log("\n⚠️ 注意: 合约已部署但未配置,请运行 configureYTLp.ts 进行配置");
|
||||
}
|
||||
|
||||
main()
|
||||
.then(() => process.exit(0))
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user