/** * PancakeSwap V2/V3 通用捆绑换手(Merkle Bundle)- 先买后卖 * * 功能:钱包B先买入代币 → 钱包A卖出相同数量 → 原子执行 */ import { ethers } from 'ethers'; import type { GeneratedWallet } from '../../../utils/wallet.js'; import { CommonBundleConfig } from '../../../utils/bundle-helpers.js'; export interface PancakeBuyFirstSignConfig { rpcUrl: string; gasLimit?: number | bigint; gasLimitMultiplier?: number; minGasPriceGwei?: number; maxGasPriceGwei?: number; txType?: 0 | 2; chainId?: number; reserveGasBNB?: number; skipQuoteOnError?: boolean; userType?: UserType; bribeAmount?: number; v2RouterAddress?: string; } /** * 获取 Gas Limit */ export declare function getGasLimit(config: PancakeBuyFirstSignConfig | PancakeBuyFirstConfig, defaultGas?: number): bigint; export declare function getGasPrice(provider: ethers.JsonRpcProvider, config: PancakeBuyFirstSignConfig | PancakeBuyFirstConfig): Promise; export declare const PANCAKE_V2_ROUTER_ABI: string[]; export declare const PANCAKE_V3_ROUTER_ABI: (string | { inputs: { components: { name: string; type: string; }[]; name: string; type: string; }[]; name: string; outputs: { name: string; type: string; }[]; stateMutability: string; type: string; })[]; export declare const ERC20_BALANCE_OF_ABI: string[]; export declare const PANCAKE_V2_ROUTER_ADDRESS: "0x10ED43C718714eb63d5aA57B78B54704E256024E"; export declare const PANCAKE_V3_ROUTER_ADDRESS: "0x13f4EA83D0bd40E75C8222255bc855a974568Dd4"; export declare const FLAT_FEE = 0n; /** 最大 Bundle 签名数 */ export declare const MAX_BUNDLE_SIGNATURES = 50; /** 贿赂交易数 */ export declare const BRIBE_TX_COUNT = 1; /** 利润中转交易数(支付者 1 笔 + 中转钱包 PROFIT_HOP_COUNT 笔 + 最终接收 1 笔) */ export declare const PROFIT_TX_COUNT: number; /** 最大买卖交易数 */ export declare const MAX_SWAP_TX_COUNT: number; export type UserType = 'v0' | 'v1'; /** * 根据 userType 获取每笔交易的利润率 */ export declare function getProfitRatePerTxBps(userType?: UserType): number; /** * 验证买卖笔数 */ export declare function validateSwapCounts(buyCount: number, sellCount: number): void; export { splitAmountByWeight as splitAmount } from '../../../shared/foundation/amount/split-by-weight.js'; /** 多笔买卖 nonce 规划(与 Flap 一致) */ export type MultiNoncePlan = { buyerNonces: number[]; sellerNonces: number[]; bribeNonce?: number; profitNonce?: number; }; export type SwapRouteType = 'v2' | 'v3-single' | 'v3-multi'; export interface V2RouteParams { routeType: 'v2'; v2Path: string[]; } export interface V3SingleRouteParams { routeType: 'v3-single'; v3TokenIn: string; v3TokenOut: string; v3Fee: number; v2Path?: string[]; } export interface V3MultiRouteParams { routeType: 'v3-multi'; v3LpAddresses: string[]; v3ExactTokenIn: string; v2Path?: string[]; } export type RouteParams = V2RouteParams | V3SingleRouteParams | V3MultiRouteParams; export interface PancakeBuyFirstConfig extends CommonBundleConfig { apiKey: string; customRpcUrl?: string; bundleBlockOffset?: number; reserveGasBNB?: number; waitForConfirmation?: boolean; waitTimeoutMs?: number; } export interface PancakeBundleBuyFirstSignParams { buyerPrivateKey?: string; buyerPrivateKeys?: string[]; sellerPrivateKey?: string; sellerPrivateKeys?: string[]; tokenAddress: string; routeParams: RouteParams; buyerFunds?: string; buyerFundsPercentage?: number; config: PancakeBuyFirstSignConfig; quoteToken?: string; quoteTokenDecimals?: number; startNonces?: number[]; buyCount?: number; sellCount?: number; taxRateBps?: number; } export interface PancakeBundleBuyFirstParams { buyerPrivateKey: string; sellerPrivateKey: string; tokenAddress: string; routeParams: RouteParams; buyerFunds?: string; buyerFundsPercentage?: number; config: PancakeBuyFirstConfig; } /** ✅ Pancake BuyFirst 结果(简化版) */ export type PancakeBuyFirstResult = { signedTransactions: string[]; profitHopWallets?: GeneratedWallet[]; metadata?: { buyerAddress: string; sellerAddress: string; buyAmount: string; sellAmount: string; profitAmount?: string; buyCount?: number; sellCount?: number; buyAmounts?: string[]; sellAmounts?: string[]; }; }; export type PancakeContext = { chainId: number; provider: ethers.JsonRpcProvider; }; export type BuyerFundsResult = { buyerFundsWei: bigint; buyerBalance: bigint; reserveGas: bigint; }; export type QuoteTokenResult = { quotedTokenOut: bigint; };