check-balance.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { MockUSDT__factory, ControlledERC20__factory } from "../typechain-types"
  2. import { config as dotenvConfig } from "dotenv"
  3. import { ethers } from "ethers"
  4. import fs from "fs"
  5. /**
  6. * @dev 账户余额检查脚本
  7. * 检查用户在BSC Testnet上的BNB和代币余额
  8. * 显示代币合约地址和基本信息
  9. */
  10. async function main() {
  11. dotenvConfig()
  12. const rpcUrl = process.env.BSC_TESTNET_RPC_URL
  13. const privateKey = process.env.PRIVATE_KEY
  14. if (!rpcUrl || !privateKey) {
  15. throw new Error("请在.env中配置BSC_TESTNET_RPC_URL和PRIVATE_KEY")
  16. }
  17. const provider = new ethers.JsonRpcProvider(rpcUrl)
  18. const wallet = new ethers.Wallet(privateKey, provider)
  19. console.log("💰 检查账户余额...")
  20. console.log("📝 账户地址:", wallet.address)
  21. // 检查BNB余额(用于支付gas费)
  22. const bnbBalance = await provider.getBalance(wallet.address)
  23. console.log("💰 BNB余额:", ethers.formatEther(bnbBalance), "BNB")
  24. // 尝试读取部署信息文件(如果存在则显示代币余额)
  25. try {
  26. const deploymentInfo = JSON.parse(fs.readFileSync("deployment-bsc-testnet.json", "utf8"))
  27. const mockUSDTAddress = deploymentInfo.contracts.mockUSDT
  28. const controlledERC20Address = deploymentInfo.contracts.controlledERC20
  29. // 检查代币余额(连接到已部署的合约)
  30. const mockUSDT = MockUSDT__factory.connect(mockUSDTAddress, wallet)
  31. const controlledERC20 = ControlledERC20__factory.connect(controlledERC20Address, wallet)
  32. const mockUSDTBalance = await mockUSDT.balanceOf(wallet.address)
  33. const controlledERC20Balance = await controlledERC20.balanceOf(wallet.address)
  34. console.log("\n🪙 代币余额:")
  35. console.log("MockUSDT余额:", ethers.formatUnits(mockUSDTBalance, 6), "mUSDT")
  36. console.log("ControlledERC20余额:", ethers.formatEther(controlledERC20Balance), "CTRL")
  37. if (controlledERC20Balance < ethers.parseEther("5")) {
  38. await controlledERC20.mint(wallet.address, ethers.parseEther("1000000"))
  39. }
  40. // 获取代币基本信息(名称、符号等)
  41. const mockUSDTName = await mockUSDT.name()
  42. const mockUSDTSymbol = await mockUSDT.symbol()
  43. const controlledERC20Name = await controlledERC20.name()
  44. const controlledERC20Symbol = await controlledERC20.symbol()
  45. console.log("\n📄 代币信息:")
  46. console.log(`${mockUSDTName} (${mockUSDTSymbol}):`, mockUSDTAddress)
  47. console.log(`${controlledERC20Name} (${controlledERC20Symbol}):`, controlledERC20Address)
  48. } catch (error) {
  49. console.log("⚠️ 无法读取部署信息,仅显示BNB余额")
  50. }
  51. }
  52. main()
  53. .then(() => process.exit(0))
  54. .catch((error) => {
  55. console.error("❌ 检查余额失败:", error)
  56. process.exit(1)
  57. })