UNPKG

four-flap-meme-sdk

Version:

SDK for Flap bonding curve and four.meme TokenManager

273 lines (272 loc) 9.17 kB
/** * 独立的Bundle提交方法 * * 用于服务器端接收前端构建的签名交易后,提交到Merkle或BlockRazor * 以及 Monad 等不支持 Bundle 的链的逐笔广播 */ /** * 精简的Merkle提交配置(只包含提交需要的字段) */ export interface MerkleSubmitConfig { /** Merkle API Key(必需) */ apiKey: string; /** 自定义RPC URL(可选) */ customRpcUrl?: string; /** 链ID(可选,默认56=BSC) */ chainId?: 56 | 1; /** Bundle区块偏移量(可选,默认3) */ bundleBlockOffset?: number; /** 最小区块偏移量(可选,默认3) */ minBlockOffset?: number; /** 是否自动重试(可选,默认false) */ autoRetryBundle?: boolean; /** 最大重试次数(可选,默认2) */ maxBundleRetries?: number; } /** * Bundle提交结果 */ export interface SubmitBundleResult { /** 提交状态:true=成功,false=失败 */ code: boolean; /** 交易总数(无论成功与否都会返回) */ totalTransactions: number; /** Bundle哈希(成功时返回) */ bundleHash?: string; /** 交易哈希列表(成功时返回) */ txHashes?: string[]; /** 目标区块号(成功时返回) */ targetBlock?: number; /** 交易数量(成功时返回) */ txCount?: number; /** 错误信息(失败时返回) */ error?: string; } /** * 提交已签名的交易到Merkle(服务器端使用) * * 这个方法接收前端构建和签名好的交易,直接提交到Merkle服务 * * @param signedTransactions 签名后的交易数组 * @param config Merkle提交配置(精简版,只需要提交相关参数) * @returns Bundle提交结果 * * @example * ```typescript * // 服务器端代码 * import { submitBundleToMerkle } from 'four-flap-meme-sdk'; * * const result = await submitBundleToMerkle(signedTransactions, { * apiKey: process.env.MERKLE_API_KEY, * customRpcUrl: process.env.MERKLE_RPC_URL, * bundleBlockOffset: 5 * }); * * if (result.code) { * } else { * console.error('❌ Bundle提交失败:', result.error); * } * ``` */ export declare function submitBundleToMerkle(signedTransactions: string[], config: MerkleSubmitConfig): Promise<SubmitBundleResult>; /** * 批量提交多个Bundle到Merkle(顺序执行) * * @param bundles 多个Bundle的签名交易数组 * @param config Merkle提交配置 * @returns Bundle提交结果数组 */ export declare function submitMultipleBundles(bundles: string[][], config: MerkleSubmitConfig): Promise<SubmitBundleResult[]>; /** * 并行提交多个Bundle到Merkle(适用于独立的Bundle) * * @param bundles 多个Bundle的签名交易数组 * @param config Merkle提交配置 * @returns Bundle提交结果数组 */ export declare function submitMultipleBundlesParallel(bundles: string[][], config: MerkleSubmitConfig): Promise<SubmitBundleResult[]>; /** * BlockRazor 提交配置 * 参考: https://blockrazor.gitbook.io/blockrazor/bsc/block-builder/send-bundle */ export interface BlockRazorSubmitConfig { /** API Key(可选,根据 Tier 需要) */ apiKey?: string; /** 自定义 RPC URL(用于查询区块号等,可选) */ customRpcUrl?: string; /** Builder RPC URL(用于发送 Bundle,可选) */ builderRpcUrl?: string; /** 区块偏移量(默认 10,最大有效区块 = 当前区块 + offset) */ blockOffset?: number; /** 最大区块偏移量(默认 100) */ maxBlockOffset?: number; /** 是否禁止 Bundle 合并(默认 false,允许合并可提高打包率) */ noMerge?: boolean; /** 允许 revert 的交易哈希列表 */ revertingTxHashes?: string[]; /** 是否自动重试(默认 false) */ autoRetry?: boolean; /** 最大重试次数(默认 3) */ maxRetries?: number; } /** * BlockRazor Bundle 提交结果 */ export interface BlockRazorSubmitResult { /** 提交状态:true=成功,false=失败 */ code: boolean; /** 交易总数 */ totalTransactions: number; /** Bundle 哈希(成功时返回) */ bundleHash?: string; /** 交易哈希列表(成功时返回) */ txHashes?: string[]; /** 最大有效区块号(成功时返回) */ maxBlockNumber?: number; /** 交易数量(成功时返回) */ txCount?: number; /** 错误信息(失败时返回) */ error?: string; } /** * 提交已签名的交易到 BlockRazor(服务器端使用) * * BlockRazor 是 BSC 链的 Block Builder 服务,支持 Bundle 提交 * * 特点: * - 向 Builder EOA 转账 BNB 可提高优先级 * - 支持 Bundle 合并提高打包率 * - 最低 Gas Price 要求: 0.05 Gwei * * @param signedTransactions 签名后的交易数组 * @param config BlockRazor 提交配置 * @returns Bundle 提交结果 * * @example * ```typescript * // 服务器端代码 * import { submitBundleToBlockRazor } from 'four-flap-meme-sdk'; * * const result = await submitBundleToBlockRazor(signedTransactions, { * blockOffset: 10, * noMerge: false, // 允许合并 * autoRetry: true * }); * * if (result.code) { * } else { * console.error('❌ Bundle 提交失败:', result.error); * } * ``` */ export declare function submitBundleToBlockRazor(signedTransactions: string[], config: BlockRazorSubmitConfig): Promise<BlockRazorSubmitResult>; /** * 批量提交多个 Bundle 到 BlockRazor(顺序执行) * * @param bundles 多个 Bundle 的签名交易数组 * @param config BlockRazor 提交配置 * @returns Bundle 提交结果数组 */ export declare function submitMultipleBundlesToBlockRazor(bundles: string[][], config: BlockRazorSubmitConfig): Promise<BlockRazorSubmitResult[]>; /** * 并行提交多个 Bundle 到 BlockRazor(适用于独立的 Bundle) * * @param bundles 多个 Bundle 的签名交易数组 * @param config BlockRazor 提交配置 * @returns Bundle 提交结果数组 */ export declare function submitMultipleBundlesToBlockRazorParallel(bundles: string[][], config: BlockRazorSubmitConfig): Promise<BlockRazorSubmitResult[]>; /** * 逐笔广播配置(用于不支持 Bundle 的链,如 Monad) */ export interface DirectSubmitConfig { /** RPC URL(必需) */ rpcUrl: string; /** 链ID(可选,默认143=Monad) */ chainId?: number; /** 链名称(可选,用于日志) */ chainName?: string; /** 是否等待交易确认(可选,默认false) */ waitForConfirmation?: boolean; /** 确认超时时间ms(可选,默认30000) */ confirmationTimeout?: number; } /** * 单笔交易结果 */ export interface DirectTxResult { /** 交易索引 */ index: number; /** 是否成功 */ success: boolean; /** 交易哈希(成功时返回) */ txHash?: string; /** 错误信息(失败时返回) */ error?: string; } /** * 逐笔广播提交结果 */ export interface DirectSubmitResult { /** 提交状态:至少有一笔成功则为true */ code: boolean; /** 交易总数 */ totalTransactions: number; /** 成功数量 */ successCount: number; /** 失败数量 */ failedCount: number; /** 交易哈希列表(成功的交易) */ txHashes: string[]; /** 每笔交易的详细结果 */ results: DirectTxResult[]; /** 错误摘要(如果有失败) */ errorSummary?: string; } /** * 并行广播到 RPC(用于不支持 Bundle 的链,如 Monad) * * ✅ 优化:默认使用并行广播,速度更快 * * @param signedTransactions 签名后的交易数组 * @param config 直接广播配置 * @returns 广播结果 * * @example * ```typescript * // 服务器端代码(Monad 链) * import { submitDirectToRpc } from 'four-flap-meme-sdk'; * * const result = await submitDirectToRpc(signedTransactions, { * rpcUrl: 'https://rpc-mainnet.monadinfra.com', * chainId: 143, * chainName: 'MONAD' * }); * * if (result.code) { * } else { * console.error('❌ 全部广播失败:', result.errorSummary); * } * ``` */ export declare function submitDirectToRpc(signedTransactions: string[], config: DirectSubmitConfig): Promise<DirectSubmitResult>; /** * ✅ 顺序广播并等待确认(用于多跳交易等需要顺序执行的场景) * * 每笔交易广播后会等待上链确认,确保后续交易能正确执行 * * @param signedTransactions 签名后的交易数组 * @param config 直接广播配置 * @returns 广播结果 */ export declare function submitDirectToRpcSequential(signedTransactions: string[], config: DirectSubmitConfig): Promise<DirectSubmitResult>; /** * 并行逐笔广播到 RPC(速度更快,但可能有 nonce 冲突) * * ⚠️ 注意:仅适用于不同钱包的交易,同一钱包的多笔交易应使用顺序广播 * * @param signedTransactions 签名后的交易数组 * @param config 直接广播配置 * @returns 广播结果 */ export declare function submitDirectToRpcParallel(signedTransactions: string[], config: DirectSubmitConfig): Promise<DirectSubmitResult>;