From 5bb6e2cd181b0cda423ecd20333b8e9231193739 Mon Sep 17 00:00:00 2001 From: nacadmin Date: Tue, 10 Mar 2026 01:55:42 +0800 Subject: [PATCH] =?UTF-8?q?[NAC-PRESALE-V2]=20=E6=96=B0=E9=A2=84=E5=94=AE?= =?UTF-8?q?=E5=90=88=E7=BA=A6=E5=92=8C=E9=83=A8=E7=BD=B2=E6=89=8B=E5=86=8C?= =?UTF-8?q?=20-=20DEPLOY=5FMANUAL.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/XICPresale_v2/DEPLOY_MANUAL.md | 198 +++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 contracts/XICPresale_v2/DEPLOY_MANUAL.md diff --git a/contracts/XICPresale_v2/DEPLOY_MANUAL.md b/contracts/XICPresale_v2/DEPLOY_MANUAL.md new file mode 100644 index 0000000..4df0a12 --- /dev/null +++ b/contracts/XICPresale_v2/DEPLOY_MANUAL.md @@ -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 = 无限制)✅ +}; +```