140 lines
4.6 KiB
TypeScript
140 lines
4.6 KiB
TypeScript
|
|
import { ethers } from "hardhat";
|
|||
|
|
import * as fs from "fs";
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 准备USDC和Chainlink配置
|
|||
|
|
* USDC是已存在的代币,无需部署
|
|||
|
|
*/
|
|||
|
|
async function main() {
|
|||
|
|
console.log("准备USDC和Chainlink配置...\n");
|
|||
|
|
|
|||
|
|
const [deployer] = await ethers.getSigners();
|
|||
|
|
console.log("操作账户:", deployer.address);
|
|||
|
|
console.log("账户余额:", ethers.formatEther(await ethers.provider.getBalance(deployer.address)), "ETH\n");
|
|||
|
|
|
|||
|
|
// 获取当前网络
|
|||
|
|
const network = await ethers.provider.getNetwork();
|
|||
|
|
const chainId = network.chainId;
|
|||
|
|
|
|||
|
|
console.log("网络:", network.name);
|
|||
|
|
console.log("Chain ID:", chainId.toString());
|
|||
|
|
|
|||
|
|
// ===== 根据网络配置USDC和Chainlink地址 =====
|
|||
|
|
let usdcAddress: string;
|
|||
|
|
let usdcPriceFeedAddress: string;
|
|||
|
|
|
|||
|
|
if (chainId === 56n) {
|
|||
|
|
// BSC 主网
|
|||
|
|
console.log("\n检测到 BSC 主网");
|
|||
|
|
usdcAddress = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d";
|
|||
|
|
usdcPriceFeedAddress = "0x51597f405303C4377E36123cBc172b13269EA163";
|
|||
|
|
console.log("✅ USDC地址 (BSC):", usdcAddress);
|
|||
|
|
console.log("✅ Chainlink USDC/USD (BSC):", usdcPriceFeedAddress);
|
|||
|
|
} else if (chainId === 421614n) {
|
|||
|
|
// Arbitrum 测试网
|
|||
|
|
console.log("\n检测到 Arbitrum 测试网");
|
|||
|
|
usdcAddress = "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d";
|
|||
|
|
usdcPriceFeedAddress = "0x0153002d20B96532C639313c2d54c3dA09109309";
|
|||
|
|
console.log("✅ USDC地址 (Arbitrum):", usdcAddress);
|
|||
|
|
console.log("✅ Chainlink USDC/USD (Arbitrum):", usdcPriceFeedAddress);
|
|||
|
|
} else {
|
|||
|
|
throw new Error(`不支持的网络: ${chainId}`);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ===== 验证合约是否存在 =====
|
|||
|
|
console.log("\n===== 验证合约 =====");
|
|||
|
|
|
|||
|
|
if (usdcAddress !== "0x0000000000000000000000000000000000000000") {
|
|||
|
|
const usdcCode = await ethers.provider.getCode(usdcAddress);
|
|||
|
|
if (usdcCode === "0x") {
|
|||
|
|
console.log("❌ USDC合约不存在于该地址");
|
|||
|
|
} else {
|
|||
|
|
console.log("✅ USDC合约验证通过");
|
|||
|
|
|
|||
|
|
// 尝试读取USDC信息
|
|||
|
|
try {
|
|||
|
|
const usdc = await ethers.getContractAt(
|
|||
|
|
["function name() view returns (string)", "function symbol() view returns (string)", "function decimals() view returns (uint8)"],
|
|||
|
|
usdcAddress
|
|||
|
|
);
|
|||
|
|
const name = await usdc.name();
|
|||
|
|
const symbol = await usdc.symbol();
|
|||
|
|
const decimals = await usdc.decimals();
|
|||
|
|
|
|||
|
|
console.log(" 名称:", name);
|
|||
|
|
console.log(" 符号:", symbol);
|
|||
|
|
console.log(" 精度:", decimals.toString());
|
|||
|
|
} catch (e) {
|
|||
|
|
console.log(" ⚠️ 无法读取USDC信息(可能是接口不匹配)");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (usdcPriceFeedAddress !== "0x0000000000000000000000000000000000000000") {
|
|||
|
|
const priceFeedCode = await ethers.provider.getCode(usdcPriceFeedAddress);
|
|||
|
|
if (priceFeedCode === "0x") {
|
|||
|
|
console.log("❌ Chainlink价格预言机不存在于该地址");
|
|||
|
|
} else {
|
|||
|
|
console.log("✅ Chainlink价格预言机验证通过");
|
|||
|
|
|
|||
|
|
// 尝试读取最新价格
|
|||
|
|
try {
|
|||
|
|
const priceFeed = await ethers.getContractAt(
|
|||
|
|
["function latestRoundData() view returns (uint80, int256, uint256, uint256, uint80)"],
|
|||
|
|
usdcPriceFeedAddress
|
|||
|
|
);
|
|||
|
|
const [, price] = await priceFeed.latestRoundData();
|
|||
|
|
console.log(" 当前USDC价格:", ethers.formatUnits(price, 8), "USD (精度1e8)");
|
|||
|
|
} catch (e) {
|
|||
|
|
console.log(" ⚠️ 无法读取价格数据");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ===== 保存配置 =====
|
|||
|
|
const configInfo = {
|
|||
|
|
network: network.name,
|
|||
|
|
chainId: chainId.toString(),
|
|||
|
|
deployer: deployer.address,
|
|||
|
|
timestamp: new Date().toISOString(),
|
|||
|
|
contracts: {
|
|||
|
|
USDC: {
|
|||
|
|
address: usdcAddress,
|
|||
|
|
description: "USDC代币地址(已存在的合约)"
|
|||
|
|
},
|
|||
|
|
ChainlinkUSDCPriceFeed: {
|
|||
|
|
address: usdcPriceFeedAddress,
|
|||
|
|
description: "Chainlink USDC/USD 价格预言机",
|
|||
|
|
precision: "1e8"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
notes: {
|
|||
|
|
bsc: "BSC主网的USDC是18位精度",
|
|||
|
|
arbSepolia: "Arbitrum Sepolia的USDC是6位精度",
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
fs.writeFileSync(
|
|||
|
|
"./deployments-usdc-config.json",
|
|||
|
|
JSON.stringify(configInfo, null, 2)
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
// ===== 显示摘要 =====
|
|||
|
|
console.log("\n===== 配置摘要 =====");
|
|||
|
|
console.log("USDC地址: ", usdcAddress);
|
|||
|
|
console.log("Chainlink价格预言机: ", usdcPriceFeedAddress);
|
|||
|
|
console.log("\n✅ 配置已保存到 deployments-usdc-config.json");
|
|||
|
|
|
|||
|
|
console.log("\n💡 下一步:");
|
|||
|
|
console.log("1. 运行 02-deployYTLp.ts 部署YTLp系统");
|
|||
|
|
console.log("2. 运行 03-deployAsset.ts 部署YTAssetFactory系统");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
main()
|
|||
|
|
.then(() => process.exit(0))
|
|||
|
|
.catch((error) => {
|
|||
|
|
console.error(error);
|
|||
|
|
process.exit(1);
|
|||
|
|
});
|
|||
|
|
|