/** * XLayer Portal 操作核心 * * Flap Portal 内盘交易的核心逻辑: * - 买入(swapExactInput: native -> token) * - 卖出(swapExactInput: token -> native) * - 授权(approve) * - 代币转账 */ import { JsonRpcProvider } from 'ethers'; /** * 编码买入调用(swapExactInput: native -> token) * * @param tokenAddress 目标代币地址 * @param inputAmount 输入 OKB 数量(wei) * @param minOutputAmount 最小输出代币数量(默认 0) */ export declare function encodeBuyCall(tokenAddress: string, inputAmount: bigint, minOutputAmount?: bigint): string; /** * 编码买入调用 V3(swapExactInputV3: native -> token,支持 extensionData) * * 与 BSC 版本的 create-to-dex.ts 保持一致: * - 统一优先使用 swapExactInputV3(支持 extensionData;无扩展时传 0x 即可) * - 这里的 V3 指"交易接口版本(扩展支持)",不是"外盘 V3 池子" * * @param tokenAddress 目标代币地址 * @param inputAmount 输入 OKB 数量(wei) * @param minOutputAmount 最小输出代币数量(默认 0) * @param extensionData 扩展数据(默认 0x) */ export declare function encodeBuyCallV3(tokenAddress: string, inputAmount: bigint, minOutputAmount?: bigint, extensionData?: string): string; /** * 编码卖出调用(swapExactInput: token -> native) * * @param tokenAddress 目标代币地址 * @param inputAmount 输入代币数量 * @param minOutputAmount 最小输出 OKB 数量(默认 0) */ export declare function encodeSellCall(tokenAddress: string, inputAmount: bigint, minOutputAmount?: bigint): string; /** * ✅ 编码卖出调用(支持 ERC20 输出):swapExactInput: token -> quoteToken * * @param tokenAddress 输入代币地址 * @param quoteToken 输出代币地址(如 USDT/USDC) * @param inputAmount 输入代币数量 * @param minOutputAmount 最小输出数量(默认 0) */ export declare function encodeSellCallWithQuote(tokenAddress: string, quoteToken: string, inputAmount: bigint, minOutputAmount?: bigint): string; /** * ✅ 编码买入调用(支持 ERC20 输入):swapExactInput: quoteToken -> token * * @param tokenAddress 输出代币地址 * @param quoteToken 输入代币地址(如 USDT/USDC) * @param inputAmount 输入数量 * @param minOutputAmount 最小输出代币数量(默认 0) */ export declare function encodeBuyCallWithQuote(tokenAddress: string, quoteToken: string, inputAmount: bigint, minOutputAmount?: bigint): string; /** * 编码授权调用 * * @param spender 授权对象地址 * @param amount 授权数量(默认无限) */ export declare function encodeApproveCall(spender: string, amount?: bigint): string; /** * 编码代币转账调用 * * @param to 接收地址 * @param amount 转账数量 */ export declare function encodeTransferCall(to: string, amount: bigint): string; /** * 编码创建代币调用 V2 */ export declare function encodeCreateCallV2(params: { name: string; symbol: string; meta: string; dexThresh: number; salt: string; taxRate: number; migratorType: number; quoteToken: string; quoteAmt: bigint; beneficiary: string; permitData: string; }): string; /** * 编码创建代币调用 V3 */ export declare function encodeCreateCallV3(params: { name: string; symbol: string; meta: string; dexThresh: number; salt: string; taxRate: number; migratorType: number; quoteToken: string; quoteAmt: bigint; beneficiary: string; permitData: string; extensionID: string; extensionData: string; }): string; /** * 编码创建代币调用 V4 */ export declare function encodeCreateCallV4(params: { name: string; symbol: string; meta: string; dexThresh: number; salt: string; taxRate: number; migratorType: number; quoteToken: string; quoteAmt: bigint; beneficiary: string; permitData: string; extensionID: string; extensionData: string; dexId: number; lpFeeProfile: number; }): string; /** * 编码创建代币调用 V5(Tax Token V2 高级税收分配) */ export declare function encodeCreateCallV5(params: { name: string; symbol: string; meta: string; dexThresh: number; salt: string; taxRate: number; migratorType: number; quoteToken: string; quoteAmt: bigint; beneficiary: string; permitData: string; extensionID: string; extensionData: string; dexId: number; lpFeeProfile: number; taxDuration: bigint; antiFarmerDuration: bigint; mktBps: number; deflationBps: number; dividendBps: number; lpBps: number; minimumShareBalance: bigint; }): string; export interface PortalQueryConfig { rpcUrl?: string; chainId?: number; portalAddress?: string; } /** * Portal 查询器 * * 提供只读查询方法: * - 代币余额 * - 授权额度 * - 预览买入/卖出 * - 代币状态 */ export declare class PortalQuery { private provider; private portal; private portalAddress; constructor(config?: PortalQueryConfig); private multicallAggregate3; /** * 获取 Provider */ getProvider(): JsonRpcProvider; /** * 获取 Portal 地址 */ getPortalAddress(): string; /** * 获取代币余额 */ getTokenBalance(tokenAddress: string, account: string): Promise; /** * 获取 OKB 余额 */ getOkbBalance(account: string): Promise; /** * 获取授权额度 */ getAllowance(tokenAddress: string, owner: string, spender?: string): Promise; /** * 检查是否需要授权 */ needsApproval(tokenAddress: string, owner: string, amount: bigint, spender?: string): Promise; /** * 预览买入输出 */ previewBuy(tokenAddress: string, okbAmount: bigint): Promise; /** * 预览卖出输出 */ previewSell(tokenAddress: string, tokenAmount: bigint): Promise; /** * 使用 quoteExactInput 查询报价 */ quoteExactInput(inputToken: string, outputToken: string, inputAmount: bigint): Promise; /** * 获取代币状态 V5 */ getTokenV5(tokenAddress: string): Promise<{ status: number; reserve: bigint; circulatingSupply: bigint; price: bigint; tokenVersion: number; r: bigint; h: bigint; k: bigint; dexSupplyThresh: bigint; quoteTokenAddress: string; nativeToQuoteSwapEnabled: boolean; extensionID: string; }>; /** * 获取代币状态 V7 (包含 lpFeeProfile) * * ✅ 修复:与 BSC portal.ts 对齐,使用 16 字段结构 */ getTokenV7(tokenAddress: string): Promise<{ status: number; reserve: bigint; circulatingSupply: bigint; price: bigint; tokenVersion: number; r: bigint; h: bigint; k: bigint; dexSupplyThresh: bigint; quoteTokenAddress: string; nativeToQuoteSwapEnabled: boolean; extensionID: string; taxRate: number; pool: string; progress: bigint; lpFeeProfile: number; }>; /** * 批量获取多个账户的代币余额 */ getMultipleTokenBalances(tokenAddress: string, accounts: string[]): Promise>; /** * 批量获取多个账户的 OKB 余额 */ getMultipleOkbBalances(accounts: string[]): Promise>; /** * 批量获取授权额度 */ getMultipleAllowances(tokenAddress: string, owners: string[], spender?: string): Promise>; } /** * 计算带滑点的最小输出 * * @param expectedOutput 预期输出 * @param slippageBps 滑点基点(如 100 = 1%) */ export declare function applySlippage(expectedOutput: bigint, slippageBps: number): bigint; /** * 将 Portal 的 lpFeeProfile 转换为 V3 Router 所需的 fee (100万分比) * * STANDARD = 0.25% (2500) * LOW = 0.01% (100) * HIGH = 1% (10000) */ export declare function lpFeeProfileToV3Fee(profile: number): number; /** * 创建 Portal 查询器 */ export declare function createPortalQuery(config?: PortalQueryConfig): PortalQuery; /** * 格式化 OKB 金额(wei -> OKB 字符串) */ export declare function formatOkb(wei: bigint): string; /** * 解析 OKB 金额(OKB 字符串 -> wei) */ export declare function parseOkb(okb: string): bigint; /** * 格式化代币金额(考虑精度) */ export declare function formatTokenAmount(amount: bigint, decimals?: number): string; /** * 解析代币金额(考虑精度) */ export declare function parseTokenAmount(amount: string, decimals?: number): bigint;