/** * XLayer SDK — EOA/交易参数与结果类型 * * 包含买入/卖出/换手/刷量/DEX 交易/预授权/买到毕业等交易参数与结果类型 */ import type { HandleOpsResult, XLayerConfig } from './aa-types.js'; /** * 买入参数 */ export interface BuyParams { /** Flap 代币地址 */ tokenAddress: string; /** 买入金额(OKB,字符串格式) */ amountOkb: string; /** 最小输出代币数量(默认 0) */ minOutputAmount?: bigint; /** 滑点基点(默认 100 = 1%) */ slippageBps?: number; } /** * 卖出参数 */ export interface SellParams { /** Flap 代币地址 */ tokenAddress: string; /** 卖出代币数量(可选,默认全部) */ amount?: bigint; /** 卖出比例(0-100,如 50 表示卖出 50%) */ sellPercent?: number; /** 最小输出 OKB 数量(默认 0) */ minOutputAmount?: bigint; /** 滑点基点(默认 100 = 1%) */ slippageBps?: number; } /** * 捆绑买入参数 */ export interface BundleBuyParams { /** 代币地址 */ tokenAddress: string; /** Owner 私钥列表 */ privateKeys: string[]; /** 每个 owner 的买入金额(OKB 或 quoteToken,取决于 quoteToken 参数) */ buyAmounts: string[]; /** 买入使用的代币地址(零地址表示使用原生代币 OKB,非零地址表示使用 ERC20 代币如 USDC) */ quoteToken?: string; /** quoteToken 的精度(默认 18,如果 quoteToken 不是 18 位精度需要指定) */ quoteTokenDecimals?: number; /** 是否将代币转回 owner EOA(默认 false) */ transferBackToOwner?: boolean; /** 配置覆盖 */ config?: Partial; } /** * 捆绑卖出参数 */ export interface BundleSellParams { /** 代币地址 */ tokenAddress: string; /** Owner 私钥列表 */ privateKeys: string[]; /** 卖出比例(0-100,默认 100 全部卖出) */ sellPercent?: number; /** 是否将 OKB 归集回 owner EOA(默认 true) */ withdrawToOwner?: boolean; /** 归集时保留的最小 OKB 余额 */ withdrawReserve?: string; /** 配置覆盖 */ config?: Partial; } /** * 捆绑买卖参数(先买后卖) */ export interface BundleBuySellParams { /** 代币地址 */ tokenAddress: string; /** Owner 私钥列表 */ privateKeys: string[]; /** 每个 owner 的買入金额(OKB 或 quoteToken,取决于 quoteToken 参数) */ buyAmounts: string[]; /** 买入使用的代币地址(零地址表示使用原生代币 OKB,非零地址表示使用 ERC20 代币如 USDC) */ quoteToken?: string; /** quoteToken 的精度(默认 18,如果 quoteToken 不是 18 位精度需要指定) */ quoteTokenDecimals?: number; /** 卖出比例(0-100,默认 100 全部卖出) */ sellPercent?: number; /** 是否将 OKB 归集回 owner EOA(默认 true) */ withdrawToOwner?: boolean; /** 归集时保留的最小 OKB 余额 */ withdrawReserve?: string; /** 配置覆盖 */ config?: Partial; /** LP 费率档位 (V3 专用): 0=STANDARD, 1=LOW, 2=HIGH */ lpFeeProfile?: number; /** DEX 类型: 'V2' | 'V3' */ dexType?: 'V2' | 'V3'; } /** * 捆绑发射签名参数 */ export interface BundleCreateBuySignParams { /** 代币信息 */ tokenInfo: { name: string; symbol: string; meta: string; }; /** 预测的代币地址(可选,如果不传则内盘模式会自动根据 salt 预测) */ tokenAddress?: string; /** 每个 owner 的买入金额(OKB,字符串格式) */ buyAmounts: string[]; /** Owner 私钥列表(第一个为 Dev,后续为买方) */ privateKeys: string[]; /** V2/V3/V4 参数 */ salt?: string; dexThresh?: number; taxRate?: number; migratorType?: number; quoteToken?: string; quoteAmt?: bigint; permitData?: string; extensionID?: string; extensionData?: string; dexId?: number; lpFeeProfile?: number; /** 是否将 OKB 归集回 owner EOA(默认 true) */ withdrawToOwner?: boolean; /** 归集时保留的最小 OKB 余额 */ withdrawReserve?: string; /** 配置覆盖 */ config?: Partial; /** Payer 私钥(用于签 handleOps 交易);默认 privateKeys[0] */ payerPrivateKey?: string; /** beneficiary(默认 payer 地址) */ beneficiary?: string; /** 可选:指定 payer 起始 nonce(不传则用 pending nonce) */ payerStartNonce?: number; } /** * 捆绑发射签名结果 */ export interface BundleCreateBuySignResult { /** raw signed tx 列表 */ signedTransactions: string[]; /** 代币地址 */ tokenAddress: string; /** 元数据 */ metadata: { tokenAddress: string; devOwner: string; devSender: string; buyerOwners: string[]; buyerSenders: string[]; totalBuyWei: string; }; } /** * 一键发射到外盘签名参数(AA 模式) * * 交易顺序: * 1. handleOps #1: 创建代币 + 内盘买入(买到毕业) * 2. handleOps #2: 外盘买入(通过 PotatoSwap V2) * 3. 利润提取(EOA 转账) */ export interface BundleCreateToDexSignParams { /** 代币信息 */ tokenInfo: { name: string; symbol: string; meta: string; }; /** 预计算的代币地址 */ tokenAddress: string; /** Payer 私钥(支付 Gas,同时作为发币者) */ payerPrivateKey: string; /** 内盘买入钱包私钥列表 */ curveBuyerPrivateKeys: string[]; /** 内盘买入金额列表(OKB,按顺序对应) */ curveBuyAmounts: string[]; /** 是否启用外盘买入(默认 false) */ enableDexBuy?: boolean; /** 外盘买入钱包私钥列表(可与内盘钱包相同或不同) */ dexBuyerPrivateKeys?: string[]; /** 外盘买入金额列表(OKB) */ dexBuyAmounts?: string[]; /** V4 发币参数 */ salt?: string; dexThresh?: number; taxRate?: number; migratorType?: number; quoteToken?: string; quoteAmt?: bigint; beneficiary?: string; permitData?: string; extensionID?: string; extensionData?: string; dexId?: number; lpFeeProfile?: number; /** Payer 起始 nonce(不传则用 pending nonce) */ payerStartNonce?: number; /** 配置覆盖 */ config?: Partial; } /** * 一键发射到外盘签名结果 */ export interface BundleCreateToDexSignResult { /** raw signed tx 列表 */ signedTransactions: string[]; /** 代币地址 */ tokenAddress: string; /** 元数据 */ metadata?: { payerOwner: string; payerSender: string; curveBuyerCount: number; curveTotalBuyWei: string; enableDexBuy: boolean; dexBuyerCount: number; dexTotalBuyWei: string; profitAmount?: string; }; } /** * 捆绑换手参数(AA 模式,单卖单买) * - 卖方 AA 先卖出 * - 买方 AA 再买入 * - 两个 UserOp(以及可选 approve)放入同一笔 handleOps */ export interface BundleSwapParams { /** 交易类型:FLAP (内盘), V2 (外盘 V2), V3 (外盘 V3) */ tradeType?: 'FLAP' | 'V2' | 'V3'; /** DEX 标识(用于选择正确的 Router) */ dexKey?: string; /** 显式指定 Router 地址(若不传则由 SDK 根据 dexKey 自动决定) */ routerAddress?: string; /** LP 费率档位 (V3 专用): 0=STANDARD (0.25%), 1=LOW (0.01%), 2=HIGH (1%) */ lpFeeProfile?: number; /** 代币地址 */ tokenAddress: string; /** 卖方 Owner 私钥 */ sellerPrivateKey: string; /** 买方 Owner 私钥 */ buyerPrivateKey: string; /** 卖出数量(人类可读字符串,按代币 decimals 解析);优先于 sellPercent */ sellAmount?: string; /** 卖出比例(0-100,默认 100) */ sellPercent?: number; /** ✅ ERC20 稳定币支持(对齐 BSC):输出代币地址(如 USDT/USDC/USDT0),不传则使用原生代币 OKB */ quoteToken?: string; /** ✅ ERC20 稳定币精度(默认 6,XLayer USDT/USDC/USDT0 都是 6 位精度) */ quoteTokenDecimals?: number; /** * 买入 OKB 数量(字符串)。 * - 不传则默认使用 previewSell(sellAmount) 的结果,并应用 slippageBps */ buyAmountOkb?: string; /** 预估卖出滑点(基点),默认 100 = 1%(用于 buyAmountOkb 未传入时) */ slippageBps?: number; /** * ✅ 转账多跳数(AA 专用,且与 BSC 的“多跳”逻辑相互独立) * * 用途:当卖出与买入不是同一个 AA(Sender) 时,需要把卖出得到的 OKB 先转到买方 AA(Sender) 才能执行 buy。 * - 0:卖方 AA(Sender) 直接转给买方 AA(Sender) * - >0:按“多跳”方式转账(实现位于 xlayer/*,不会影响 BSC bundle/merkle) */ disperseHopCount?: number; /** 配置覆盖 */ config?: Partial; } /** * 捆绑换手执行结果(链上执行 handleOps) */ export interface BundleSwapResult { /** handleOps 交易结果 */ swapResult: HandleOpsResult; /** 元数据(便于前端显示) */ metadata: { sellerOwner: string; sellerSender: string; buyerOwner: string; buyerSender: string; sellAmountWei: string; buyAmountWei: string; hasApprove: boolean; routeAddress?: string; /** 是否提取利润 */ extractProfit?: boolean; /** 利润比例 bps */ profitBps?: number; /** 利润接收地址 */ profitRecipient?: string; /** 预估利润(OKB wei) */ profitWei?: string; /** 预估卖出输出(OKB wei) */ quotedSellOutWei?: string; /** ✅ AA:转账多跳数(仅 xlayer AA 使用;不影响 BSC) */ disperseHopCount?: string; }; }