import type { HandleOpsResult, XLayerConfig } from './aa-types.js'; export type BuyFirstTradeType = 'FLAP' | 'V2'; /** ✅ Router 版本类型 */ export type RouterVersion = 'V2' | 'V3'; /** ✅ 授权目标类型 */ export type ApprovalTarget = 'FLAP_PORTAL' | 'V2_ROUTER' | 'V3_ROUTER'; export interface BuyFirstParams { tradeType?: BuyFirstTradeType; /** ✅ 新增:Router 版本(V2 或 V3,默认 V2) */ routerVersion?: RouterVersion; /** DEX 标识(仅 V2 时使用,用于选择 Router) */ dexKey?: string; /** 显式指定 Router 地址(仅 V2 时使用) */ routerAddress?: string; /** DEX deadline 分钟数(仅 V2 时使用) */ deadlineMinutes?: number; tokenAddress: string; buyerPrivateKeys: string[]; sellerPrivateKeys: string[]; /** 本轮总买入资金(OKB 或 quoteToken) */ buyerFunds: string; buyCount?: number; sellCount?: number; /** ✅ 新增:买入使用的代币地址(零地址或不传表示使用 OKB,非零地址表示使用 ERC20 如 USDT) */ quoteToken?: string; /** ✅ 新增:quoteToken 的精度(默认 18,USDT 在 XLayer 上是 6 位) */ quoteTokenDecimals?: number; /** 报价滑点(仅用于估算 sellAmount),默认 0 */ slippageBps?: number; withdrawToOwner?: boolean; withdrawReserve?: string; config?: Partial; } export interface BuyFirstResult { buySellResult: HandleOpsResult; withdrawResult?: HandleOpsResult; finalSellerBalances?: Map; profit?: { extractProfit: boolean; profitBps: number; profitRecipient: string; totalProfitWei: string; }; metadata: { tradeType: BuyFirstTradeType; tokenAddress: string; buyerOwners: string[]; buyerSenders: string[]; sellerOwners: string[]; sellerSenders: string[]; buyAmountsWei: string[]; sellAmountsWei: string[]; totalBuyWei: string; estimatedTokenOutWei: string; slippageBps: number; }; } export interface BuyFirstVolumeParams extends Omit { buyerFundsPerRound: string; rounds: number; intervalMs?: number; } export interface BuyFirstVolumeResult { successRounds: number; failedRounds: number; roundResults: BuyFirstResult[]; /** 总交易量(OKB wei,按“买入资金*2”统计) */ totalVolume: bigint; } /** * 外盘(PotatoSwap)交易参数 */ export interface DexSwapParams { /** 输入代币地址(零地址表示 OKB) */ inputToken: string; /** 输出代币地址(零地址表示 OKB) */ outputToken: string; /** 输入金额 */ inputAmount: bigint; /** 最小输出金额 */ minOutputAmount: bigint; /** 交易截止时间(默认 20 分钟) */ deadline?: number; } /** * 外盘交易结果 */ export interface DexSwapResult { txHash: string; inputAmount: bigint; outputAmount: bigint; gasUsed: bigint; } /** * 预授权参数 * 用于提前授权代币,避免在交易时等待授权确认 */ export interface BundlePreApproveParams { /** 代币地址 */ tokenAddress: string; /** Owner 私钥列表 */ privateKeys: string[]; /** 授权目标(默认 FLAP_PORTAL,可传 Router 地址用于外盘交易) */ spender?: string; /** * 是否仅签名(不执行) * - true: 返回签名后的 handleOps 交易,由前端发送到服务端广播 * - false(默认): 直接执行 handleOps */ signOnly?: boolean; /** 配置覆盖 */ config?: Partial; /** Payer 私钥(signOnly=true 时必传,用于支付 gas) */ payerPrivateKey?: string; } /** * 预授权结果 */ export interface BundlePreApproveResult { /** 发送授权交易的数量 */ approvedCount: number; /** 已经授权无需操作的数量 */ alreadyApprovedCount: number; /** 授权交易结果(signOnly=false 时有值) */ approveResult?: HandleOpsResult; /** 每个地址的授权状态详情 */ details: ApprovalStatusResult[]; /** signOnly=true 时:签名后的 handleOps 交易(raw signed tx) */ signedTransactions?: string[]; } /** * 授权状态检查结果 */ export interface ApprovalStatusResult { /** Owner EOA 地址 */ owner: string; /** AA Sender 地址 */ sender: string; /** 是否已授权(授权额度 >= 代币余额) */ isApproved: boolean; /** 当前授权额度 */ currentAllowance: bigint; /** 当前代币余额 */ tokenBalance: bigint; } /** * 捆绑买到毕业签名参数 */ export interface BundleGraduateBuyParams { /** 代位地址 */ tokenAddress: string; /** 买入钱包私钥数组 */ privateKeys: string[]; /** AA Payer 私钥 */ payerPrivateKey: string; /** 分配模式 */ amountMode: 'average' | 'random' | 'custom'; /** 平均模式:总买入金额 */ totalBuyAmount?: number; /** 随机模式:最小金额 / 最大金额 */ minAmount?: number; maxAmount?: number; /** 自定义模式:地址 -> 金额 */ walletAmounts?: Record; /** 是否启用外盘买入(默认 false) */ enableDexBuy?: boolean; /** 内盘钱包地址列表(可选,传入则使用前端分组,不传则 SDK 自动分组) */ curveAddresses?: string[]; /** 外盘钱包地址列表(可选) */ dexAddresses?: string[]; /** 动态毕业阈值(可选,不传则使用默认 73.38 OKB) */ graduationAmount?: number; /** 配置覆盖 */ config?: Partial; /** 扩展数据(传递给 swapExactInputV3,默认 0x) */ extensionData?: string; /** Payer 起始 nonce */ payerStartNonce?: number; /** beneficiary(默认 payer 地址) */ beneficiary?: string; } /** * 捆绑买到毕业签名结果 */ export interface BundleGraduateBuyResult { /** raw signed tx 列表 */ signedTransactions: string[]; /** 元数据 */ metadata: { curveCount: number; dexCount: number; curveTotalAmount: string; dexTotalAmount: string; tokenAddress: string; }; }