6.1 KiB
6.1 KiB
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
- 连接 Owner 钱包
- 找到
transfer函数 - 填写参数:
recipient:新预售合约地址amount:2500000000000000000000000000(25亿 × 10^18,共28位数字)
- 点击 Write,确认交易
验证: 在 BscScan 上查看新合约地址的 XIC 余额,应显示 2,500,000,000 XIC。
Step B:启动预售
在新预售合约的 BscScan 写入页面:
- 连接 Owner 钱包
- 找到
startPresale()函数 - 点击 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():
- 访问新合约 BscScan 写入页面
- 连接 Owner 钱包
- 调用
recoverUnsoldTokens() - 合约将剩余 XIC 全部转回 Owner 钱包
七、安全注意事项
- 部署后立即在 BscScan 上 Verify 合约源码,增加透明度和信任度
- 转入 XIC 前三次核对合约地址,防止转错
- amount 精度:25亿 XIC =
2500000000000000000000000000(25后跟26个零,共28位) - 预售进行中禁止提取 XIC:合约内置保护,
emergencyWithdraw在预售活跃期间无法提取 XIC - BNB 购买:如不需要 BNB 购买功能,部署时
_oracle填0x0000000000000000000000000000000000000000
八、前端更新
部署完成后,更新前端 client/src/lib/contracts.ts:
BSC: {
presale: "0x[新合约地址]", // 替换为新部署的合约地址
// 其他不变
}
同时更新 PRESALE_CONFIG:
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 = 无限制)✅
};