deploy-bsc-testnet.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 BSC Testnet部署脚本
  7. * 部署MockUSDT和ControlledERC20合约到BSC Testnet
  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("🚀 开始部署到BSC Testnet...")
  20. console.log("📝 部署账户:", wallet.address)
  21. console.log("💰 账户余额:", ethers.formatEther(await provider.getBalance(wallet.address)), "BNB")
  22. // 部署MockUSDT合约(标准ERC20代币,用作Mock USDT)
  23. console.log("\n📦 部署MockUSDT合约...")
  24. const MockUSDT = new MockUSDT__factory(wallet)
  25. const mockUSDT = await MockUSDT.deploy("Mock USDT", "mUSDT", wallet.address)
  26. await mockUSDT.waitForDeployment()
  27. const mockUSDTAddress = await mockUSDT.getAddress()
  28. console.log("✅ MockUSDT已部署到:", mockUSDTAddress)
  29. // 部署ControlledERC20合约(带有转账开关和权限管理的ERC20代币)
  30. console.log("\n📦 部署ControlledERC20合约...")
  31. const ControlledERC20 = new ControlledERC20__factory(wallet)
  32. const controlledERC20 = await ControlledERC20.deploy("Controlled Token", "CTRL", wallet.address)
  33. await controlledERC20.waitForDeployment()
  34. const controlledERC20Address = await controlledERC20.getAddress()
  35. console.log("✅ ControlledERC20已部署到:", controlledERC20Address)
  36. // 输出部署信息到控制台
  37. console.log("\n📋 部署信息:")
  38. console.log("🌐 网络: BSC Testnet")
  39. console.log("👤 部署者:", wallet.address)
  40. console.log("📄 MockUSDT地址:", mockUSDTAddress)
  41. console.log("📄 ControlledERC20地址:", controlledERC20Address)
  42. // 保存部署信息到JSON文件(用于其他脚本读取)
  43. const deploymentInfo = {
  44. network: "BSC Testnet",
  45. deployer: wallet.address,
  46. contracts: {
  47. mockUSDT: mockUSDTAddress,
  48. controlledERC20: controlledERC20Address,
  49. },
  50. timestamp: new Date().toISOString(),
  51. }
  52. fs.writeFileSync("deployment-bsc-testnet.json", JSON.stringify(deploymentInfo, null, 2))
  53. console.log("\n💾 部署信息已保存到 deployment-bsc-testnet.json")
  54. console.log("\n🎉 部署完成!")
  55. }
  56. main()
  57. .then(() => process.exit(0))
  58. .catch((error) => {
  59. console.error("❌ 部署失败:", error)
  60. process.exit(1)
  61. })