diff --git a/backend/mpc-system/services/service-party-app/electron/main.ts b/backend/mpc-system/services/service-party-app/electron/main.ts index 8fd47fa7..c89c4970 100644 --- a/backend/mpc-system/services/service-party-app/electron/main.ts +++ b/backend/mpc-system/services/service-party-app/electron/main.ts @@ -536,6 +536,16 @@ function setupIpcHandlers() { } }); + // Kava 健康检查 + ipcMain.handle('kava:healthCheck', async () => { + try { + const result = await kavaTxService?.healthCheck(); + return { success: result?.ok ?? false, data: result }; + } catch (error) { + return { success: false, error: (error as Error).message }; + } + }); + // =========================================================================== // 对话框相关 // =========================================================================== diff --git a/backend/mpc-system/services/service-party-app/electron/modules/kava-tx-service.ts b/backend/mpc-system/services/service-party-app/electron/modules/kava-tx-service.ts index 2a545afb..3d918358 100644 --- a/backend/mpc-system/services/service-party-app/electron/modules/kava-tx-service.ts +++ b/backend/mpc-system/services/service-party-app/electron/modules/kava-tx-service.ts @@ -500,6 +500,43 @@ export class KavaTxService { disconnect(): void { // REST API 无需断开连接 } + + /** + * 健康检查 - 验证 API 是否可用 + */ + async healthCheck(): Promise<{ ok: boolean; latency?: number; error?: string }> { + const startTime = Date.now(); + try { + // 查询链的最新区块,这是最轻量级的检查 + const response = await this.request<{ + block: { + header: { + height: string; + chain_id: string; + }; + }; + }>('/cosmos/base/tendermint/v1beta1/blocks/latest'); + + const latency = Date.now() - startTime; + + if (response?.block?.header?.height) { + return { + ok: true, + latency, + }; + } + + return { + ok: false, + error: 'Invalid response format', + }; + } catch (error) { + return { + ok: false, + error: error instanceof Error ? error.message : String(error), + }; + } + } } // 导出默认服务实例 diff --git a/backend/mpc-system/services/service-party-app/electron/preload.ts b/backend/mpc-system/services/service-party-app/electron/preload.ts index cc1df141..6777b2e5 100644 --- a/backend/mpc-system/services/service-party-app/electron/preload.ts +++ b/backend/mpc-system/services/service-party-app/electron/preload.ts @@ -182,6 +182,9 @@ contextBridge.exposeInMainWorld('electronAPI', { rpcEndpoint?: string; chainId?: string; }) => ipcRenderer.invoke('kava:updateConfig', { config }), + + // 健康检查 + healthCheck: () => ipcRenderer.invoke('kava:healthCheck'), }, // =========================================================================== diff --git a/backend/mpc-system/services/service-party-app/src/stores/appStore.ts b/backend/mpc-system/services/service-party-app/src/stores/appStore.ts index 06a9bb86..dc4dfab7 100644 --- a/backend/mpc-system/services/service-party-app/src/stores/appStore.ts +++ b/backend/mpc-system/services/service-party-app/src/stores/appStore.ts @@ -139,21 +139,20 @@ export const useAppStore = create((set, get) => ({ setKavaApiStatus({ status: 'checking', message: '正在检测...' }); try { if (window.electronAPI) { - // 使用一个已知的测试地址查询余额来验证 API - const testAddress = 'kava1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqnxwpql'; - const result = await window.electronAPI.kava.getBalance(testAddress); - if (result.success || result.error?.includes('account')) { - // 即使账户不存在,API 能响应也说明连接正常 + // 使用健康检查 API (查询最新区块) + const result = await window.electronAPI.kava.healthCheck(); + if (result.success && result.data?.ok) { const config = await window.electronAPI.kava.getConfig(); + const latencyMsg = result.data.latency ? ` (${result.data.latency}ms)` : ''; setKavaApiStatus({ status: 'connected', - message: config?.lcdEndpoint || 'Kava Mainnet', + message: (config?.lcdEndpoint || 'Kava Mainnet') + latencyMsg, lastChecked: new Date(), }); } else { setKavaApiStatus({ status: 'error', - message: result.error || 'API 响应异常', + message: result.data?.error || result.error || 'API 响应异常', lastChecked: new Date(), }); } diff --git a/backend/mpc-system/services/service-party-app/src/types/electron.d.ts b/backend/mpc-system/services/service-party-app/src/types/electron.d.ts index d0c6eba9..573c16a8 100644 --- a/backend/mpc-system/services/service-party-app/src/types/electron.d.ts +++ b/backend/mpc-system/services/service-party-app/src/types/electron.d.ts @@ -331,6 +331,16 @@ interface GetKavaTxStatusResult { error?: string; } +interface KavaHealthCheckResult { + success: boolean; + data?: { + ok: boolean; + latency?: number; + error?: string; + }; + error?: string; +} + // =========================================================================== // Electron API 接口 // =========================================================================== @@ -403,6 +413,7 @@ interface ElectronAPI { getTxStatus: (txHash: string) => Promise; getConfig: () => Promise; updateConfig: (config: Partial) => Promise<{ success: boolean; error?: string }>; + healthCheck: () => Promise; }; // 对话框相关