问题:Kava主网RPC (evm.kava.io) 偶发503,导致mining-blockchain-service 所有链上操作失败(转账、余额查询、区块扫描等)。 方案:新增RpcProviderManager单例服务,统一管理各链的JsonRpcProvider实例, 当某个RPC端点连续失败超过3分钟后自动轮转到下一个备选端点。 新增文件: - rpc-provider-manager.service.ts: 核心故障转移管理器 · 每条链维护 provider/urls/currentIndex/failureState · reportSuccess() 重置失败状态 · reportFailure() 记录失败,>=3分钟触发 switchToNextUrl() · 轮转创建新 JsonRpcProvider,替换旧实例 · 每30秒记录一次失败日志,避免日志刷屏 修改文件: - blockchain.config.ts: 新增 rpcUrls 配置字段(KAVA_RPC_URLS/BSC_RPC_URLS) - chain-config.service.ts: 解析逗号分隔的URL列表,回退到单个rpcUrl - domain.module.ts: 注册并导出 RpcProviderManager - index.ts: 导出 RpcProviderManager - evm-provider.adapter.ts: 委托RpcProviderManager获取provider, 所有公开方法通过executeWithFailover包裹,自动上报成功/失败 - erc20-transfer.service.ts: 移除本地providers Map,改用RpcProviderManager, 新增isRpcConnectionError()区分RPC网络错误与合约执行错误 - docker-compose.2.0.yml: 添加KAVA_RPC_URLS默认4个端点 - .env.example: 添加KAVA_RPC_URLS配置说明 默认端点仍为 evm.kava.io,备选: evm.kava-rpc.com, kava-evm-rpc.publicnode.com, rpc.ankr.com/kava_evm Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .claude | ||
| api-gateway | ||
| infrastructure | ||
| mpc-system | ||
| scripts | ||
| services | ||
| .env.windows | ||
| docker-compose.windows.yml | ||