import { JsonRpcProvider } from 'ethers'; import type { DirectRouterSignConfig, DexKey, DirectRouterChain, RouterVersion } from './types.js'; /** * 截断小数位数,避免超过代币精度导致 parseUnits 报错 * 例如:truncateDecimals("21906.025000000000000000", 1) => "21906.0" */ export declare function truncateDecimals(value: string, decimals: number): string; /** 获取原生包装代币地址 */ export declare function getWrappedNative(chain: string): string; /** * 判断是否使用旧版 SwapRouter * * 旧版特征: * - exactInputSingle 包含 deadline 字段 * - multicall 只有 bytes[] 参数 * * Monad 上的 V3 DEX 都使用旧版: * - Uniswap V3: 0xd6145b2d3f379919e8cdeda7b97e37c4b2ca9c40 * - PancakeSwap V3: 0x1b81D678ffb9C0263b24A97847620C99d213eB14 * * XLayer: * - V3 Router (0xBB069e9465BcabC4F488d21e793BDEf0F2d41D41) - 旧版(exactInputSingle 包含 deadline) * - SwapRouter02 (0xB45D0149249488333E3F3f9F359807F4b810C1FC) - 新版(V2+V3 混合) * * BSC PancakeSwap V3 使用新版 SwapRouter02 */ export declare function isLegacySwapRouter(chain: string, routerAddress: string): boolean; export declare function getDeadline(minutes?: number): number; export declare function getGasPrice(provider: JsonRpcProvider, config: DirectRouterSignConfig): Promise; export declare function isNativeToken(quoteToken?: string): boolean; /** * 判断是否是 SwapRouter02 (XLayer PotatoSwap V3) * * SwapRouter02 风格的 Router 使用 multicall 包装 V2 方法: * - multicall(uint256 deadline, bytes[] data) * - data 内包含 swapExactTokensForTokens 等 V2 方法 * * SwapRouter02 的 V2 方法签名不同: * - swapExactTokensForTokens(amountIn, amountOutMin, path[], to) - 没有 deadline * - 需要通过 multicall 的 deadline 参数传递 deadline * * ⚠️ 注意:DYORSwap 虽然也用 multicall,但它的 ABI 完全不同,需要单独处理 */ export declare function isSwapRouter02(chain: string, routerAddress: string): boolean; /** * 判断是否是 DYORSwap Router * * DYORSwap 使用 multicall,但它的 swapExactTokensForTokens 有特殊的 ABI: * - swapExactTokensForTokens(amountIn, amountOutMin, path[], payer, flags, factory, pools) * - unwrapWETH9(amountMinimum, recipient, pools) */ export declare function isDYORSwap(chain: string, routerAddress: string): boolean; /** * 根据链和 DEX 获取 Router 地址 */ export declare function getRouterAddress(chain: DirectRouterChain, dexKey: DexKey, version: RouterVersion): string;