[NAC-PRESALE-V2] 新预售合约和部署手册 - DEPLOY_MANUAL.md
This commit is contained in:
parent
30dbacbd93
commit
5bb6e2cd18
|
|
@ -0,0 +1,198 @@
|
|||
# XICPresale 合约部署操作手册
|
||||
|
||||
**版本:** v2.0
|
||||
**日期:** 2026-03-09
|
||||
**合约文件:** `XICPresale.sol`
|
||||
|
||||
---
|
||||
|
||||
## 一、合约参数总览
|
||||
|
||||
| 参数 | 值 | 说明 |
|
||||
|---|---|---|
|
||||
| 预售总量(硬顶) | 2,500,000,000 XIC(25亿) | 合约内置,可通过 setHardCap 修改 |
|
||||
| 代币价格 | $0.02 USDT / XIC | tokenPrice = 2e16(18位精度) |
|
||||
| 预售时长 | 180 天(半年) | 从 startPresale() 调用时开始计时 |
|
||||
| 最小购买 | 无限制 | 任意金额均可 |
|
||||
| 最大购买 | 无限制 | 任意金额均可 |
|
||||
| 支持支付方式 | USDT(BSC)、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 = 无限制)✅
|
||||
};
|
||||
```
|
||||
Loading…
Reference in New Issue