nac-presale/contracts/DEPLOY_MANUAL.md

199 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 = 无限制)✅
};
```