import { JsonRpcProvider } from 'ethers'; import { NonceManager } from './bundle-helpers.js'; export type EnsureAllowanceResult = { alreadyApproved: boolean; currentAllowance: bigint; requiredAllowance: bigint; txReceipt?: any; }; export type EnsureAllowanceBatchItemResult = EnsureAllowanceResult & { owner: string; }; /** * 检查代币授权状态 - Four.meme V1(只读,不发送交易) * @returns 是否已授权足够的额度 */ export declare function checkSellApprovalV1(chain: 'BSC' | 'BASE' | 'ARBITRUM_ONE', rpcUrl: string, token: string, owner: string, amount: bigint): Promise<{ isApproved: boolean; currentAllowance: bigint; requiredAllowance: bigint; }>; /** * 确保代币已授权给 Four.meme V1 代理合约 * 用于 Four.meme V1 代币的卖出操作 * @returns 授权结果,包含是否已授权、当前额度、交易回执等信息 */ export declare function ensureSellApprovalV1(chain: 'BSC' | 'BASE' | 'ARBITRUM_ONE', rpcUrl: string, privateKey: string, token: string, owner: string, amount: bigint): Promise; /** * 检查代币授权状态 - Four.meme V2(只读,不发送交易) * @returns 是否已授权足够的额度 */ export declare function checkSellApprovalV2(chain: 'BSC' | 'BASE' | 'ARBITRUM_ONE', rpcUrl: string, token: string, owner: string, amount: bigint): Promise<{ isApproved: boolean; currentAllowance: bigint; requiredAllowance: bigint; }>; /** * 确保代币已授权给 Four.meme V2 代理合约 * 用于 Four.meme V2 代币的卖出操作 * @returns 授权结果,包含是否已授权、当前额度、交易回执等信息 */ export declare function ensureSellApprovalV2(chain: 'BSC' | 'BASE' | 'ARBITRUM_ONE', rpcUrl: string, privateKey: string, token: string, owner: string, amount: bigint): Promise; /** * 检查代币授权状态 - Four.meme(通用,默认使用 V2) * @deprecated 建议使用明确版本的方法:checkSellApprovalV1 或 checkSellApprovalV2 */ export declare function checkSellApproval(chain: 'BSC' | 'BASE' | 'ARBITRUM_ONE', rpcUrl: string, token: string, owner: string, amount: bigint): Promise<{ isApproved: boolean; currentAllowance: bigint; requiredAllowance: bigint; }>; /** * 确保代币已授权给 Four.meme 代理合约(通用,默认使用 V2) * @deprecated 建议使用明确版本的方法:ensureSellApprovalV1 或 ensureSellApprovalV2 */ export declare function ensureSellApproval(chain: 'BSC' | 'BASE' | 'ARBITRUM_ONE', rpcUrl: string, privateKey: string, token: string, owner: string, amount: bigint): Promise; /** * 检查代币授权状态 - Flap Protocol(只读,不发送交易) * @returns 是否已授权足够的额度 */ export declare function checkFlapSellApproval(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', rpcUrl: string, token: string, owner: string, amount: bigint): Promise<{ isApproved: boolean; currentAllowance: bigint; requiredAllowance: bigint; }>; /** * 确保代币已授权给 Flap Protocol 代理合约 * 用于 Flap Protocol 代币的卖出操作 * @returns 授权结果,包含是否已授权、当前额度、交易回执等信息 */ export declare function ensureFlapSellApproval(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', rpcUrl: string, privateKey: string, token: string, owner: string, amount: bigint): Promise; /** * 批量确保代币已授权给 Flap Protocol 代理合约(默认授权上限 2^256-1) * @param privateKeys 拥有者私钥数组(每个地址需自行签名) * @returns 每个地址的授权结果(包含 owner 与交易回执等信息) */ export declare function ensureFlapSellApprovalBatch(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', rpcUrl: string, privateKeys: string[], token: string, required?: bigint): Promise; /** * 批量检查 Flap Protocol 授权状态(默认按上限 2^256-1 判断) * ✅ 使用 Multicall3 批量查询,减少 RPC 调用次数 */ export declare function checkFlapSellApprovalBatch(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', rpcUrl: string, token: string, owners: string[], required?: bigint): Promise>; /** * 使用 Multicall3 批量查询 ERC20 授权额度 * @param provider - Provider 实例 * @param tokenAddress - ERC20 代币地址 * @param owners - 所有者地址数组 * @param spender - 被授权的 spender 地址 * @returns 每个地址的授权额度数组 */ export declare function batchCheckAllowances(provider: JsonRpcProvider, tokenAddress: string, owners: string[], spender: string): Promise; /** * ✅ 智能路由:检查单个 ERC20 授权额度(自动选择 spender) * * @param chain - 链名称 ('BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD') * @param platform - 平台名称 ('flap' | 'four' | 'pancake-v2' | 'pancake-v3') * @param rpcUrl - RPC 节点地址 * @param tokenAddress - 代币合约地址 * @param ownerAddress - 代币持有者地址 * @returns 当前授权额度(bigint) */ export declare function checkAllowance(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', platform: 'flap' | 'four' | 'pancake-v2' | 'pancake-v3', rpcUrl: string, tokenAddress: string, ownerAddress: string): Promise; /** * ✅ 底层方法:检查 ERC20 代币授权额度(手动指定 spender) * 适用于任意 spender 地址(Flap、Four、PancakeSwap V2/V3 等) * * @param rpcUrl - RPC 节点地址 * @param tokenAddress - 代币合约地址 * @param ownerAddress - 代币持有者地址 * @param spenderAddress - 被授权的合约地址(如 Router、Portal、TokenManager 等) * @returns 当前授权额度(bigint) */ export declare function checkAllowanceRaw(rpcUrl: string, tokenAddress: string, ownerAddress: string, spenderAddress: string): Promise; /** * ✅ 智能路由:授权 ERC20 代币(自动选择 spender,自动检查,只在不足时才发送交易) * * @param chain - 链名称 ('BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD') * @param platform - 平台名称 ('flap' | 'four' | 'pancake-v2' | 'pancake-v3') * @param rpcUrl - RPC 节点地址 * @param privateKey - 私钥 * @param tokenAddress - 代币合约地址 * @param amount - 授权数量(bigint),传 'max' 表示最大授权 * @returns 授权结果 */ export declare function approveToken(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', platform: 'flap' | 'four' | 'pancake-v2' | 'pancake-v3', rpcUrl: string, privateKey: string, tokenAddress: string, amount: bigint | 'max'): Promise; /** * ✅ 底层方法:授权 ERC20 代币给指定合约(手动指定 spender) * 适用于任意 spender 地址(Flap、Four、PancakeSwap V2/V3 等) * * @param rpcUrl - RPC 节点地址 * @param privateKey - 私钥 * @param tokenAddress - 代币合约地址 * @param spenderAddress - 被授权的合约地址(如 Router、Portal、TokenManager 等) * @param amount - 授权数量(bigint),传 'max' 或 ethers.MaxUint256 表示最大授权 * @returns 授权结果 */ export declare function approveTokenRaw(rpcUrl: string, privateKey: string, tokenAddress: string, spenderAddress: string, amount: bigint | 'max'): Promise; /** * ✅ 智能路由:批量检查多个钱包的授权额度(自动选择 spender) * * @param chain - 链名称 ('BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD') * @param platform - 平台名称 ('flap' | 'four' | 'pancake-v2' | 'pancake-v3') * @param rpcUrl - RPC 节点地址 * @param tokenAddress - 代币合约地址 * @param ownerAddresses - 代币持有者地址数组 * @returns 每个地址的授权额度数组 */ export declare function checkAllowanceBatch(chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD', platform: 'flap' | 'four' | 'pancake-v2' | 'pancake-v3', rpcUrl: string, tokenAddress: string, ownerAddresses: string[]): Promise; /** * ✅ 底层方法:批量检查多个钱包的授权额度(手动指定 spender) * 适用于任意 spender 地址(Flap、Four、PancakeSwap V2/V3 等) * * @param rpcUrl - RPC 节点地址 * @param tokenAddress - 代币合约地址 * @param ownerAddresses - 代币持有者地址数组 * @param spenderAddress - 被授权的合约地址 * @returns 每个地址的授权额度数组 */ export declare function checkAllowanceBatchRaw(rpcUrl: string, tokenAddress: string, ownerAddresses: string[], spenderAddress: string): Promise; export type ApproveTokenBatchParams = { chain: 'BSC' | 'BASE' | 'XLAYER' | 'MORPH' | 'MONAD'; platform: 'flap' | 'four' | 'pancake-v2' | 'pancake-v3'; rpcUrl: string; privateKeys: string[]; tokenAddress: string; amounts: (bigint | 'max')[]; /** 是否只签名不提交(默认 false,直接发送交易) */ signOnly?: boolean; /** Gas Price(可选,单位 Gwei,signOnly=true 时生效) */ gasPriceGwei?: number; /** Gas Limit(可选,默认 100000,signOnly=true 时生效) */ gasLimit?: number; /** 链ID(可选,默认56=BSC,signOnly=true 时生效) */ chainId?: number; /** 跳过合约地址验证(可选,用于某些特殊场景) */ skipValidation?: boolean; }; export type ApproveTokenBatchRawParams = { rpcUrl: string; privateKeys: string[]; tokenAddress: string; spenderAddress: string; amounts: (bigint | 'max')[]; /** 是否只签名不提交(默认 false,直接发送交易) */ signOnly?: boolean; /** Gas Price(可选,单位 Gwei,signOnly=true 时生效) */ gasPriceGwei?: number; /** Gas Limit(可选,默认 100000,signOnly=true 时生效) */ gasLimit?: number; /** 链ID(可选,默认56=BSC,signOnly=true 时生效) */ chainId?: number; /** 外部 NonceManager(可选,用于同一钱包签多笔交易时共享 nonce 状态) */ nonceManager?: NonceManager; /** 跳过合约地址验证(可选,用于某些特殊场景,如 RPC 返回异常时) */ skipValidation?: boolean; }; /** signOnly=false 时的返回结果(直接发送交易) */ export type ApproveTokenBatchResult = { success: boolean; approvedCount: number; results: Array<{ owner: string; alreadyApproved: boolean; currentAllowance: bigint; requiredAllowance: bigint; txHash?: string; error?: string; }>; }; /** signOnly=true 时的返回结果(仅签名) */ export type ApproveTokenBatchSignResult = { /** 需要授权的签名交易数组(已过滤掉已授权的钱包) */ signedTransactions: string[]; /** 详细结果 */ results: Array<{ owner: string; /** 是否已授权(无需发送交易) */ alreadyApproved: boolean; currentAllowance: bigint; requiredAllowance: bigint; /** 签名交易(仅当 alreadyApproved=false 时有值) */ signedTx?: string; }>; /** 需要授权的钱包数量 */ needApproveCount: number; /** 已授权的钱包数量 */ alreadyApprovedCount: number; }; /** * ✅ 智能路由:批量授权 ERC20 代币(自动选择 spender,自动检查,只在不足时才发送交易) * * @param params - 批量授权参数 * @param params.signOnly - 是否只签名不提交(默认 false) * - false: 直接发送交易并等待确认,返回 ApproveTokenBatchResult * - true: 只签名不提交,返回 ApproveTokenBatchSignResult,前端可通过 submitBundleToBlockRazor 提交 * @returns 批量授权结果 * * @example * ```typescript * // 模式1:直接发送交易(默认) * const result = await approveTokenBatch({ * chain: 'BSC', * platform: 'four', * rpcUrl: 'https://bsc-dataseed.binance.org', * privateKeys: [key1, key2], * tokenAddress: '0x...', * amounts: ['max', 'max'] * }); * * // 模式2:只签名,前端提交 * const signResult = await approveTokenBatch({ * chain: 'BSC', * platform: 'four', * rpcUrl: 'https://bsc-dataseed.binance.org', * privateKeys: [key1, key2], * tokenAddress: '0x...', * amounts: ['max', 'max'], * signOnly: true * }); * // 提交到 BlockRazor * if (signResult.signedTransactions.length > 0) { * await submitBundleToBlockRazor(signResult.signedTransactions, { blockOffset: 10 }); * } * ``` */ export declare function approveTokenBatch(params: ApproveTokenBatchParams & { signOnly: true; }): Promise; export declare function approveTokenBatch(params: ApproveTokenBatchParams & { signOnly?: false; }): Promise; /** * ✅ 底层方法:批量授权 ERC20 代币(手动指定 spender) * 适用于任意 spender 地址(Flap、Four、PancakeSwap V2/V3 等) * * @param params - 批量授权参数 * @param params.signOnly - 是否只签名不提交(默认 false) * - false: 直接发送交易并等待确认,返回 ApproveTokenBatchResult * - true: 只签名不提交,返回 ApproveTokenBatchSignResult,前端可通过 submitBundleToBlockRazor 提交 * @returns 批量授权结果 * * @example * ```typescript * // 模式1:直接发送交易(默认) * const result = await approveTokenBatchRaw({ * rpcUrl: 'https://bsc-dataseed.binance.org', * privateKeys: [key1, key2], * tokenAddress: '0x...', * spenderAddress: '0x...', * amounts: ['max', 'max'] * }); * * // 模式2:只签名,前端提交 * const signResult = await approveTokenBatchRaw({ * rpcUrl: 'https://bsc-dataseed.binance.org', * privateKeys: [key1, key2], * tokenAddress: '0x...', * spenderAddress: '0x...', * amounts: ['max', 'max'], * signOnly: true * }); * // 提交到 BlockRazor * if (signResult.signedTransactions.length > 0) { * await submitBundleToBlockRazor(signResult.signedTransactions, { blockOffset: 10 }); * } * ``` */ export declare function approveTokenBatchRaw(params: ApproveTokenBatchRawParams & { signOnly: true; }): Promise; export declare function approveTokenBatchRaw(params: ApproveTokenBatchRawParams & { signOnly?: false; }): Promise;