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上的BNB和代币余额 * 显示代币合约地址和基本信息 */ 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("💰 检查账户余额...") console.log("📝 账户地址:", wallet.address) // 检查BNB余额(用于支付gas费) const bnbBalance = await provider.getBalance(wallet.address) console.log("💰 BNB余额:", ethers.formatEther(bnbBalance), "BNB") // 尝试读取部署信息文件(如果存在则显示代币余额) try { const deploymentInfo = JSON.parse(fs.readFileSync("deployment-bsc-testnet.json", "utf8")) const mockUSDTAddress = deploymentInfo.contracts.mockUSDT const controlledERC20Address = deploymentInfo.contracts.controlledERC20 // 检查代币余额(连接到已部署的合约) const mockUSDT = MockUSDT__factory.connect(mockUSDTAddress, wallet) const controlledERC20 = ControlledERC20__factory.connect(controlledERC20Address, wallet) const mockUSDTBalance = await mockUSDT.balanceOf(wallet.address) const controlledERC20Balance = await controlledERC20.balanceOf(wallet.address) console.log("\n🪙 代币余额:") console.log("MockUSDT余额:", ethers.formatUnits(mockUSDTBalance, 6), "mUSDT") console.log("ControlledERC20余额:", ethers.formatEther(controlledERC20Balance), "CTRL") if (controlledERC20Balance < ethers.parseEther("5")) { await controlledERC20.mint(wallet.address, ethers.parseEther("1000000")) } // 获取代币基本信息(名称、符号等) const mockUSDTName = await mockUSDT.name() const mockUSDTSymbol = await mockUSDT.symbol() const controlledERC20Name = await controlledERC20.name() const controlledERC20Symbol = await controlledERC20.symbol() console.log("\n📄 代币信息:") console.log(`${mockUSDTName} (${mockUSDTSymbol}):`, mockUSDTAddress) console.log(`${controlledERC20Name} (${controlledERC20Symbol}):`, controlledERC20Address) } catch (error) { console.log("⚠️ 无法读取部署信息,仅显示BNB余额") } } main() .then(() => process.exit(0)) .catch((error) => { console.error("❌ 检查余额失败:", error) process.exit(1) })