Files
assetxContracts/scripts/upgrade/verifyVaultUpgrade.ts

183 lines
7.0 KiB
TypeScript
Raw Permalink Normal View History

import { ethers, upgrades } from "hardhat";
import * as fs from "fs";
import * as path from "path";
/**
* YTAssetVault
*
*
* 1. Factory
* 2. Vault
* 3.
*/
async function main() {
console.log("\n==========================================");
console.log("🔍 验证 YTAssetVault 升级结果");
console.log("==========================================\n");
// ========== 读取部署信息 ==========
const deploymentsPath = path.join(__dirname, "../../deployments-vault-system.json");
if (!fs.existsSync(deploymentsPath)) {
throw new Error("未找到部署信息文件");
}
const deployments = JSON.parse(fs.readFileSync(deploymentsPath, "utf-8"));
const factory = await ethers.getContractAt(
"YTAssetFactory",
deployments.contracts.YTAssetFactory.proxy
);
// ========== 验证 Factory ==========
console.log("📋 验证 Factory 配置");
console.log("=====================================");
const currentImplInFactory = await factory.vaultImplementation();
const expectedImpl = deployments.contracts.YTAssetVault.implementation;
console.log("Factory Proxy: ", deployments.contracts.YTAssetFactory.proxy);
console.log("当前 vaultImplementation:", currentImplInFactory);
console.log("配置文件中的实现: ", expectedImpl);
if (currentImplInFactory.toLowerCase() === expectedImpl.toLowerCase()) {
console.log("✅ Factory 配置正确!\n");
} else {
console.log("❌ Factory 配置不匹配!\n");
}
// ========== 验证已部署的 Vaults ==========
const vaults = deployments.vaults || [];
if (vaults.length === 0) {
console.log(" 没有已部署的 Vault\n");
return;
}
console.log("📋 验证已部署的 Vaults");
console.log("=====================================");
console.log(`发现 ${vaults.length} 个 Vault\n`);
const results: any[] = [];
for (let i = 0; i < vaults.length; i++) {
const vaultInfo = vaults[i];
console.log(`[${i + 1}/${vaults.length}] 检查 ${vaultInfo.symbol} (${vaultInfo.address})`);
try {
// 获取实现地址
const implAddress = await upgrades.erc1967.getImplementationAddress(vaultInfo.address);
const isUpgraded = implAddress.toLowerCase() === expectedImpl.toLowerCase();
console.log(` 实现地址: ${implAddress}`);
console.log(` 状态: ${isUpgraded ? '✅ 已升级' : '⏸️ 未升级'}`);
// 如果已升级,测试新功能
if (isUpgraded) {
const vault = await ethers.getContractAt("YTAssetVault", vaultInfo.address);
try {
// 测试新增的状态变量
const pendingCount = await vault.pendingRequestsCount();
const requestIdCounter = await vault.requestIdCounter();
const processedUpToIndex = await vault.processedUpToIndex();
console.log(` 新功能验证:`);
console.log(` - pendingRequestsCount: ${pendingCount}`);
console.log(` - requestIdCounter: ${requestIdCounter}`);
console.log(` - processedUpToIndex: ${processedUpToIndex}`);
// 测试新增的查询函数
const queueProgress = await vault.getQueueProgress();
console.log(` - 队列进度: ${queueProgress[0]}/${queueProgress[1]} (待处理: ${queueProgress[2]})`);
console.log(` ✅ 新功能工作正常`);
results.push({
index: i,
symbol: vaultInfo.symbol,
address: vaultInfo.address,
upgraded: true,
functional: true
});
} catch (error: any) {
console.log(` ⚠️ 新功能测试失败: ${error.message}`);
results.push({
index: i,
symbol: vaultInfo.symbol,
address: vaultInfo.address,
upgraded: true,
functional: false,
error: error.message
});
}
} else {
results.push({
index: i,
symbol: vaultInfo.symbol,
address: vaultInfo.address,
upgraded: false,
functional: false
});
}
} catch (error: any) {
console.log(` ❌ 检查失败: ${error.message}`);
results.push({
index: i,
symbol: vaultInfo.symbol,
address: vaultInfo.address,
upgraded: false,
functional: false,
error: error.message
});
}
console.log("");
}
// ========== 验证总结 ==========
console.log("📊 验证总结");
console.log("=====================================");
const upgraded = results.filter(r => r.upgraded);
const functional = results.filter(r => r.functional);
const needsUpgrade = results.filter(r => !r.upgraded);
console.log(`总 Vaults 数量: ${results.length}`);
console.log(`已升级: ${upgraded.length}`);
console.log(`功能正常: ${functional.length}`);
console.log(`待升级: ${needsUpgrade.length} ${needsUpgrade.length > 0 ? '⏸️' : ''}`);
console.log("");
if (needsUpgrade.length > 0) {
console.log("⏸️ 待升级的 Vaults:");
needsUpgrade.forEach(v => {
console.log(` [${v.index}] ${v.symbol}: ${v.address}`);
});
console.log("");
console.log("💡 升级命令:");
console.log(` factory.upgradeVault("vaultAddress", "${expectedImpl}")`);
console.log("");
}
// ========== 升级历史 ==========
if (deployments.upgradeHistory && deployments.upgradeHistory.length > 0) {
console.log("📜 升级历史");
console.log("=====================================");
deployments.upgradeHistory.forEach((h: any, idx: number) => {
console.log(`[${idx + 1}] ${h.timestamp}`);
console.log(` 升级者: ${h.upgrader}`);
console.log(` 旧实现: ${h.oldImplementation}`);
console.log(` 新实现: ${h.newImplementation}`);
});
console.log("");
}
console.log("✅ 验证完成!\n");
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});