UNPKG

four-flap-meme-sdk

Version:

SDK for Flap bonding curve and four.meme TokenManager

115 lines (114 loc) 4.4 kB
/** * 解析 Flap Protocol 错误信息 * * @param error - 捕获的错误对象 * @returns 错误代码或 null(无法识别的错误) * * @example * ```typescript * try { * await portal.swapExactInput(...); * } catch (err) { * const errorCode = parseFlapError(err); * if (errorCode === 'SLIPPAGE_EXCEEDED') { * console.log('滑点过大,请调整参数'); * } * } * ``` */ export function parseFlapError(error) { const msg = error?.message || error?.data?.message || String(error); const msgLower = msg.toLowerCase(); // Token 状态相关错误 if (msgLower.includes('token already exists') || msgLower.includes('already created')) { return 'TOKEN_ALREADY_EXISTS'; } if (msgLower.includes('token not found') || msgLower.includes('invalid token')) { return 'TOKEN_NOT_FOUND'; } if (msgLower.includes('not tradable') || msgLower.includes('trading disabled')) { return 'TOKEN_NOT_TRADABLE'; } if (msgLower.includes('already on dex') || msgLower.includes('already migrated')) { return 'ALREADY_ON_DEX'; } // 余额相关错误 if (msgLower.includes('insufficient balance') || msgLower.includes('insufficient funds')) { return 'INSUFFICIENT_BALANCE'; } // 滑点错误 if (msgLower.includes('slippage') || msgLower.includes('min output')) { return 'SLIPPAGE_EXCEEDED'; } // 参数验证错误 if (msgLower.includes('invalid amount') || msgLower.includes('amount too small')) { return 'INVALID_AMOUNT'; } if (msgLower.includes('invalid quote token') || msgLower.includes('quote token not supported')) { return 'INVALID_QUOTE_TOKEN'; } if (msgLower.includes('tax rate') && msgLower.includes('too high')) { return 'TAX_RATE_TOO_HIGH'; } // Permit 相关错误 if (msgLower.includes('permit expired') || msgLower.includes('deadline')) { return 'PERMIT_EXPIRED'; } if (msgLower.includes('permit') && (msgLower.includes('invalid') || msgLower.includes('signature'))) { return 'PERMIT_INVALID'; } // 无法识别的错误 return null; } /** * 获取错误的友好提示信息(中文) * * @param errorCode - 错误代码 * @returns 友好的错误提示 */ export function getFlapErrorMessage(errorCode) { if (!errorCode) return '未知错误,请检查交易参数'; const messages = { TOKEN_ALREADY_EXISTS: '代币已存在,请使用不同的参数创建', TOKEN_NOT_FOUND: '代币不存在或地址无效', TOKEN_NOT_TRADABLE: '代币当前不可交易', ALREADY_ON_DEX: '代币已迁移到 DEX,无法在联合曲线上交易', INSUFFICIENT_BALANCE: '余额不足', SLIPPAGE_EXCEEDED: '滑点过大,请调整最小输出数量或重试', INVALID_TOKEN: '无效的代币地址', INVALID_QUOTE_TOKEN: '不支持的 quote token', INVALID_AMOUNT: '无效的交易数量', TAX_RATE_TOO_HIGH: '税率设置过高(最大 10%)', PERMIT_EXPIRED: 'Permit 签名已过期', PERMIT_INVALID: 'Permit 签名无效', UNKNOWN_ERROR: '未知错误', }; return messages[errorCode]; } /** * 获取错误的友好提示信息(英文) * * @param errorCode - 错误代码 * @returns 友好的错误提示 */ export function getFlapErrorMessageEn(errorCode) { if (!errorCode) return 'Unknown error, please check transaction parameters'; const messages = { TOKEN_ALREADY_EXISTS: 'Token already exists, please use different parameters', TOKEN_NOT_FOUND: 'Token not found or invalid address', TOKEN_NOT_TRADABLE: 'Token is not tradable at the moment', ALREADY_ON_DEX: 'Token has been migrated to DEX, cannot trade on bonding curve', INSUFFICIENT_BALANCE: 'Insufficient balance', SLIPPAGE_EXCEEDED: 'Slippage tolerance exceeded, please adjust parameters or retry', INVALID_TOKEN: 'Invalid token address', INVALID_QUOTE_TOKEN: 'Quote token not supported', INVALID_AMOUNT: 'Invalid trade amount', TAX_RATE_TOO_HIGH: 'Tax rate too high (maximum 10%)', PERMIT_EXPIRED: 'Permit signature expired', PERMIT_INVALID: 'Invalid permit signature', UNKNOWN_ERROR: 'Unknown error', }; return messages[errorCode]; }