[NAC-PRESALE-V2] 新预售合约和部署手册 - DEPLOY_MANUAL.md

This commit is contained in:
nacadmin 2026-03-10 01:55:42 +08:00
parent 30dbacbd93
commit 5bb6e2cd18
1 changed files with 198 additions and 0 deletions

View File

@ -0,0 +1,198 @@
# XICPresale 合约部署操作手册
**版本:** v2.0
**日期:** 2026-03-09
**合约文件:** `XICPresale.sol`
---
## 一、合约参数总览
| 参数 | 值 | 说明 |
|---|---|---|
| 预售总量(硬顶) | 2,500,000,000 XIC25亿 | 合约内置,可通过 setHardCap 修改 |
| 代币价格 | $0.02 USDT / XIC | tokenPrice = 2e1618位精度 |
| 预售时长 | 180 天(半年) | 从 startPresale() 调用时开始计时 |
| 最小购买 | 无限制 | 任意金额均可 |
| 最大购买 | 无限制 | 任意金额均可 |
| 支持支付方式 | USDTBSC、BNB | USDT 即时到账BNB 通过预言机换算 |
| 未售出回收 | 预售结束后 Owner 可回收 | recoverUnsoldTokens() |
---
## 二、部署前准备
### 2.1 需要准备的地址
| 地址 | 说明 | 当前值 |
|---|---|---|
| XIC Token 合约 | XIC 代币地址(不变) | `0x59FF34dD59680a7125782b1f6df2A86ed46F5A24` |
| BSC USDT 合约 | BSC 链 USDT 地址(不变) | `0x55d398326f99059fF775485246999027B3197955` |
| 收款钱包wallet | 接收 USDT 和 BNB 的地址 | 您的收款钱包地址 |
| 价格预言机oracle | BNB/USD 价格来源 | `0xefdab9b5...`(原合约预言机,或填 address(0) 禁用 BNB 购买) |
### 2.2 部署工具
推荐使用 **Remix IDE**https://remix.ethereum.org**Hardhat**
---
## 三、部署步骤Remix IDE
### Step 1打开 Remix IDE
访问 https://remix.ethereum.org新建文件 `XICPresale.sol`,粘贴合约源码。
### Step 2编译
- Compiler 版本:`0.8.20`
- 勾选 `Optimize`runs = `200`
- 点击 `Compile XICPresale.sol`
### Step 3部署
切换到 **Deploy & Run Transactions** 面板:
- Environment选择 `Injected Provider - MetaMask`(确保 MetaMask 连接 BSC 主网Chain ID: 56
- Contract选择 `XICPresale`
- 填写构造函数参数:
```
_xicToken: 0x59FF34dD59680a7125782b1f6df2A86ed46F5A24
_usdt: 0x55d398326f99059fF775485246999027B3197955
_wallet: [您的收款钱包地址]
_oracle: 0xefdab9b5...(或 0x0000000000000000000000000000000000000000 禁用BNB购买
```
- 点击 `Deploy`MetaMask 弹出确认,支付 Gas 费(约 0.01~0.02 BNB
### Step 4记录合约地址
部署成功后,记录新合约地址(格式:`0x...`),更新前端 `contracts.ts` 中的 `presale` 字段。
---
## 四、部署后操作Owner 钱包执行)
### Step A向新合约转入 25亿 XIC
在 XIC Token 合约(`0x59FF34dD59680a7125782b1f6df2A86ed46F5A24`)的 BscScan 写入页面:
访问https://bscscan.com/address/0x59FF34dD59680a7125782b1f6df2A86ed46F5A24#writeContract
1. 连接 Owner 钱包
2. 找到 `transfer` 函数
3. 填写参数:
- `recipient`:新预售合约地址
- `amount``2500000000000000000000000000`25亿 × 10^18共28位数字
4. 点击 Write确认交易
**验证:** 在 BscScan 上查看新合约地址的 XIC 余额,应显示 2,500,000,000 XIC。
### Step B启动预售
在新预售合约的 BscScan 写入页面:
1. 连接 Owner 钱包
2. 找到 `startPresale()` 函数
3. 点击 Write确认交易
**此操作将:**
- 设置 `presaleStarted = true`
- 记录 `presaleStartTime = 当前时间`
- 设置 `presaleEndTime = 当前时间 + 180天`
**从此刻起,用户即可购买 XIC**
---
## 五、合约函数说明
### 用户函数
| 函数 | 说明 |
|---|---|
| `buyWithUSDT(uint256 usdtAmount)` | 用 USDT 购买usdtAmount 为 6 decimals如 100 USDT = 100000000 |
| `buyWithBNB()` | 用 BNB 购买,发送 BNB 时调用payable |
### 查询函数
| 函数 | 说明 |
|---|---|
| `isPresaleActive()` | 预售是否当前可购买 |
| `timeRemaining()` | 预售剩余秒数 |
| `availableXIC()` | 合约当前可售 XIC 余额 |
| `calculateTokenAmount(usdtAmount)` | 计算 USDT 对应的 XIC 数量 |
| `presaleProgress()` | 预售进度(已售/硬顶/百分比) |
| `totalTokensSold()` | 已售 XIC 总量 |
| `totalRaised()` | 已筹 USDT 总量 |
| `userPurchases(address)` | 查询用户购买的 XIC 总量 |
### Owner 管理函数
| 函数 | 说明 |
|---|---|
| `startPresale()` | 启动预售(只能调用一次) |
| `setPaused(bool)` | 暂停/恢复预售 |
| `recoverUnsoldTokens()` | 预售结束后回收未售出 XIC |
| `setTokenPrice(uint256)` | 修改价格18 decimals |
| `setHardCap(uint256)` | 修改硬顶 |
| `setWallet(address)` | 修改收款钱包 |
| `setPriceOracle(address)` | 修改 BNB 价格预言机 |
| `emergencyWithdraw(address, uint256)` | 紧急提取代币(预售中禁止提取 XIC |
| `withdrawBNB()` | 提取误转入的 BNB |
| `transferOwnership(address)` | 转移合约所有权 |
---
## 六、预售结束后操作
### 6.1 自动结束
预售在以下任一条件满足时自动停止:
- 距 `startPresale()` 已过 180 天
- 25亿 XIC 全部售完
### 6.2 回收未售出 XIC
预售结束后Owner 调用 `recoverUnsoldTokens()`
1. 访问新合约 BscScan 写入页面
2. 连接 Owner 钱包
3. 调用 `recoverUnsoldTokens()`
4. 合约将剩余 XIC 全部转回 Owner 钱包
---
## 七、安全注意事项
1. **部署后立即在 BscScan 上 Verify 合约源码**,增加透明度和信任度
2. **转入 XIC 前三次核对合约地址**,防止转错
3. **amount 精度**25亿 XIC = `2500000000000000000000000000`25后跟26个零共28位
4. **预售进行中禁止提取 XIC**:合约内置保护,`emergencyWithdraw` 在预售活跃期间无法提取 XIC
5. **BNB 购买**:如不需要 BNB 购买功能,部署时 `_oracle``0x0000000000000000000000000000000000000000`
---
## 八、前端更新
部署完成后,更新前端 `client/src/lib/contracts.ts`
```typescript
BSC: {
presale: "0x[新合约地址]", // 替换为新部署的合约地址
// 其他不变
}
```
同时更新 `PRESALE_CONFIG`
```typescript
export const PRESALE_CONFIG = {
tokenPrice: 0.02, // $0.02 per XIC ✅
presaleAllocation: 2_500_000_000, // 25亿 XIC ✅
presaleDuration: 180, // 180天 ✅
minPurchaseUSDT: 0, // 无最小限制 ✅
maxPurchaseUSDT: 0, // 无最大限制0 = 无限制)✅
};
```