import { MockUSDT__factory, ControlledERC20__factory } from "../typechain-types" import { config as dotenvConfig } from "dotenv" import { ethers } from "ethers" import fs from "fs" /** * @dev BSC Testnet部署脚本 * 部署MockUSDT和ControlledERC20合约到BSC Testnet * 包含合约验证和信息保存功能 */ async function main() { dotenvConfig() const rpcUrl = process.env.BSC_TESTNET_RPC_URL const privateKey = process.env.PRIVATE_KEY if (!rpcUrl || !privateKey) { throw new Error("请在.env中配置BSC_TESTNET_RPC_URL和PRIVATE_KEY") } const provider = new ethers.JsonRpcProvider(rpcUrl) const wallet = new ethers.Wallet(privateKey, provider) console.log("🚀 开始部署到BSC Testnet...") console.log("📝 部署账户:", wallet.address) console.log("💰 账户余额:", ethers.formatEther(await provider.getBalance(wallet.address)), "BNB") // 部署MockUSDT合约(标准ERC20代币,用作Mock USDT) console.log("\n📦 部署MockUSDT合约...") const MockUSDT = new MockUSDT__factory(wallet) const mockUSDT = await MockUSDT.deploy("Mock USDT", "mUSDT", wallet.address) await mockUSDT.waitForDeployment() const mockUSDTAddress = await mockUSDT.getAddress() console.log("✅ MockUSDT已部署到:", mockUSDTAddress) // 部署ControlledERC20合约(带有转账开关和权限管理的ERC20代币) console.log("\n📦 部署ControlledERC20合约...") const ControlledERC20 = new ControlledERC20__factory(wallet) const controlledERC20 = await ControlledERC20.deploy("Controlled Token", "CTRL", wallet.address) await controlledERC20.waitForDeployment() const controlledERC20Address = await controlledERC20.getAddress() console.log("✅ ControlledERC20已部署到:", controlledERC20Address) // 输出部署信息到控制台 console.log("\n📋 部署信息:") console.log("🌐 网络: BSC Testnet") console.log("👤 部署者:", wallet.address) console.log("📄 MockUSDT地址:", mockUSDTAddress) console.log("📄 ControlledERC20地址:", controlledERC20Address) // 保存部署信息到JSON文件(用于其他脚本读取) const deploymentInfo = { network: "BSC Testnet", deployer: wallet.address, contracts: { mockUSDT: mockUSDTAddress, controlledERC20: controlledERC20Address, }, timestamp: new Date().toISOString(), } fs.writeFileSync("deployment-bsc-testnet.json", JSON.stringify(deploymentInfo, null, 2)) console.log("\n💾 部署信息已保存到 deployment-bsc-testnet.json") console.log("\n🎉 部署完成!") } main() .then(() => process.exit(0)) .catch((error) => { console.error("❌ 部署失败:", error) process.exit(1) })