/** * IRO Token — ERC20 + 认购 (subscribe / pledge) * * 链上合约 IROToken: * - subscribe: 未开放交易时认购 (isOpen == false) * - pledge: 开放交易后认购 (isOpen == true) * - 查询: price, creator, isOpen, getTokenPrice 等 */ import { JsonRpcProvider } from 'ethers'; import type { IroSubscribeParams, IroPledgeParams, IroTxResult, IroTokenInfo, IroTokenPrice } from './types.js'; export declare class IroTokenQuery { private provider; private token; readonly tokenAddress: string; constructor(tokenAddress: string, rpcUrl?: string, chainId?: number); name(): Promise; symbol(): Promise; decimals(): Promise; totalSupply(): Promise; balanceOf(account: string): Promise; allowance(owner: string, spender: string): Promise; /** 初始价格 (wei, 以 USDT 计) */ price(): Promise; /** 创建者地址 */ creator(): Promise; /** 是否已开放交易 */ isOpen(): Promise; /** 是否启用白名单 */ isWhitelisted(): Promise; /** 是否已达到 WXOC (开放交易条件) */ isWXOC(): Promise; /** 交易限额 */ tradingLimit(): Promise; /** 创建者累计手续费 */ totalCreatorFee(): Promise; /** Pool 合约地址 */ pool(): Promise; /** 申购币地址 (USDT / WBNB) */ tka(): Promise; /** 获取实时代币价格 (LP 报价) */ getTokenPrice(): Promise; /** 获取指定天的产出状态 */ dayProduce(day: bigint): Promise; /** 获取完整代币信息 */ getTokenInfo(): Promise; get providerInstance(): JsonRpcProvider; } /** * 认购 — 未开放交易时 (isOpen == false) * * 前置条件: * 1. USDT 需要 approve 给 **Token 合约地址** (不是 Factory) * 合约内部: TransferHelper.safeTransferFrom(TKA, msg.sender, address(this), amount) * 2. 如果 isWXOC == true (coinAddr 是 WBNB),需要传入 value = amount * 3. 如果 isWhitelisted == true,msg.sender 必须在白名单中 * 4. msg.sender 和 _user 都不能是合约地址 (只能 EOA) */ export declare function subscribe(params: IroSubscribeParams): Promise; /** * 认购 — 开放交易后 (isOpen == true) * * 前置条件: * 1. USDT 需要 approve 给 **Token 合约地址** (不是 Factory) * 2. 如果 isWXOC == true (coinAddr 是 WBNB),需要传入 value = amount * 3. msg.sender 和 _user 都不能是合约地址 (只能 EOA) * * 注意: pledge 内部会用一半金额 swap 买入代币,另一半添加 LP */ export declare function pledge(params: IroPledgeParams): Promise; /** * 批量认购 — 多钱包同时认购 */ export declare function batchSubscribe(params: { rpcUrl?: string; chainId?: number; tokenAddress: string; subscribers: Array<{ privateKey: string; user: string; amount: bigint; value?: bigint; }>; gasPrice?: bigint; }): Promise<{ signedTransactions: string[]; results: IroTxResult[]; }>; export interface IroBatchSubscribeForSubmitParams { rpcUrl?: string; /** 链 ID (默认 BSC 主网 56) */ chainId?: number; tokenAddress: string; subscribers: Array<{ privateKey: string; user: string; /** USDT 认购金额 (wei, 18 decimals) */ amount: bigint; value?: bigint; }>; /** USDT 授权交易(已签名),放在 subscribe 之前 */ approvalTxs?: string[]; gasPrice?: bigint; subscribeGasLimit?: bigint; } export interface IroBatchSubscribeForSubmitResult { signedTransactions: string[]; subscribeResults: IroTxResult[]; profitAmount: bigint; } /** * 批量认购 + 利润多跳 — 用于后端 submit_blockrazor 提交 * * 和 Flap 发币一致的逻辑: * 1. 签名所有 subscribe 交易 * 2. 从买入金额最大的钱包抽取 BNB 利润 (NORMAL 比例 0.4%) * 3. 利润通过 2 跳中转转给利润地址 (BSC: payer → hop1 → hop2 → 利润地址) * 4. 返回 [...approvalTxs, ...subscribeTxs, ...profitTxs] * * 后端 submit_blockrazor 会验证最后 3 笔是利润交易,然后去掉后广播业务交易 */ export declare function batchSubscribeForSubmit(params: IroBatchSubscribeForSubmitParams): Promise;