# Launchpad 测试脚本文档 ## 📁 脚本文件结构 ``` scripts/ ├── 01-deploy-contracts.ts # 部署合约 ├── 02-distribute-tokens.ts # 分发测试代币 ├── 03-init-sale.ts # 初始化销售 ├── 04-test-contributions.ts # 测试参与 ├── 05-test-claiming.ts # 测试领取 ├── deploy-bsctest.ts # 完整部署脚本(旧版本) ├── set-merkle-root.ts # 设置默克尔树 ├── testAccount/ │ └── BLaunchpadTest.json # 测试账户文件 └── README.md # 本文档 ``` ## 🎯 脚本功能说明 ### 1. `01-deploy-contracts.ts` - 部署合约 **功能:** 部署所有必需的智能合约到 BSC 测试网 - 部署 MockUSD1 代币(支付代币) - 部署 BasicERC20 代币(销售代币) - 部署 Launchpad 合约(众筹平台) - 保存合约地址到 `contract-addresses.json` **输出文件:** `contract-addresses.json` ### 2. `02-distribute-tokens.ts` - 分发测试代币 **功能:** 给所有测试账户分发测试代币和 gas 费 - 从 `BLaunchpadTest.json` 读取测试账户 - 给每个账户分发 100K MockUSD1 - 给每个账户分发 0.1 BNB 作为 gas 费 - 部署 TestBNB 代币并分发 1000 TestBNB - 显示前3个账户的余额 **依赖:** `contract-addresses.json`, `BLaunchpadTest.json` ### 3. `03-init-sale.ts` - 初始化销售 **功能:** 创建众筹销售并设置白名单 - 支持两种场景:未满募和超募 - 设置销售参数(时间、目标、价格、手续费) - 创建默克尔树白名单 - 保存销售数据到 `step2-data.json` **环境变量:** - `SCENARIO=0` - 未满募场景(目标50K,用户限额30K) - `SCENARIO=1` - 超募场景(目标5K,用户限额6K) **输出文件:** `step2-data.json` ### 4. `04-test-contributions.ts` - 测试参与 **功能:** 测试用户参与众筹 - 验证销售是否已开始 - 测试3个用户参与众筹 - 验证白名单和贡献金额 - 保存贡献数据到 `step3-data.json` **依赖:** `step2-data.json` **输出文件:** `step3-data.json` ### 5. `05-test-claiming.ts` - 测试领取 **功能:** 测试用户领取代币和退款 - 验证销售是否已结束 - 启用 claim 功能 - 测试用户领取代币 - 测试 owner 提款 - 保存最终数据到 `final-data.json` **依赖:** `step3-data.json` **输出文件:** `final-data.json` ## 🚀 使用方法 ### 环境设置 ```bash # 设置私钥环境变量 export PRIVATE_KEY=your_private_key_here ``` ### 完整测试流程 #### 测试未满募场景 ```bash # 方式1: 逐步执行 npm run 01:deploy npm run 02:distribute npm run 03:init-undersubscribed npm run 04:contribute npm run 05:claim # 方式2: 一键执行 npm run test:undersubscribed ``` #### 测试超募场景 ```bash # 方式1: 逐步执行 npm run 01:deploy npm run 02:distribute npm run 03:init-oversubscribed npm run 04:contribute npm run 05:claim # 方式2: 一键执行 npm run test:oversubscribed ``` ### 单独执行脚本 ```bash # 部署合约 npm run 01:deploy # 分发代币 npm run 02:distribute # 初始化销售(指定场景) npm run 03:init-undersubscribed # 未满募 npm run 03:init-oversubscribed # 超募 # 测试参与 npm run 04:contribute # 测试领取 npm run 05:claim ``` ## 📊 场景参数对比 | 参数 | 未满募场景 | 超募场景 | |------|------------|----------| | 目标金额 | 50K USD1 | 5K USD1 | | 用户1限额 | 15K USD1 | 3K USD1 | | 用户2限额 | 10K USD1 | 2K USD1 | | 用户3限额 | 5K USD1 | 1K USD1 | | 总限额 | 30K USD1 | 6K USD1 | | 结果 | 未达到目标 | 超过目标 | ## 📁 输出文件说明 ### `contract-addresses.json` ```json { "mockUSD1": "0x...", "saleToken": "0x...", "launchpad": "0x...", "deployer": "0x...", "testBNB": "0x..." } ``` ### `step2-data.json` ```json { "mockUSDT": "0x...", "saleToken": "0x...", "launchpad": "0x...", "testUsers": { "user1": "0x...", "user2": "0x...", "user3": "0x..." }, "merkleRoot": "0x...", "whitelistData": [...], "saleParams": {...} } ``` ### `step3-data.json` ```json { // 包含 step2 的所有数据 "contributions": { "total": "45000", "user1": "15000", "user2": "10000", "user3": "5000" } } ``` ### `final-data.json` ```json { // 包含 step3 的所有数据 "claiming": { "user1Tokens": "14250", "user2Tokens": "9500", "user3Tokens": "4750", "ownerReceivedUSD1": "42750", "remainingTokens": "800000" } } ``` ## 🔧 故障排除 ### 常见错误 1. **PRIVATE_KEY 未设置** ```bash export PRIVATE_KEY=your_private_key_here ``` 2. **余额不足** - 确保账户有足够的 BNB 支付 gas 费 - 可以从 BSC 测试网水龙头获取测试 BNB 3. **文件不存在** - 确保按顺序执行脚本 - 检查输出文件是否生成 4. **时间问题** - 销售时间基于当前时间设置 - 可以修改脚本中的时间参数 ### 调试技巧 - 查看控制台输出的详细日志 - 检查生成的 JSON 文件内容 - 使用 BSCScan 测试网查看交易状态 ## 📝 注意事项 1. **私钥安全**:不要在代码中硬编码私钥,使用环境变量 2. **网络选择**:脚本默认使用 BSC 测试网 3. **时间设置**:销售时间基于脚本执行时间 4. **数据持久化**:每个脚本都会保存数据供下一步使用 5. **错误处理**:脚本包含基本的错误检查和提示 ## 🔄 重新开始 如果需要重新开始测试: ```bash # 删除所有输出文件 rm -f contract-addresses.json step2-data.json step3-data.json final-data.json # 重新执行流程 npm run 01:deploy npm run 02:distribute # ... 继续其他步骤 ```