From f2b9f22658f5cecb6281b96e5d259063d25dcb62 Mon Sep 17 00:00:00 2001 From: ALPAC-4 Date: Mon, 5 Jan 2026 16:04:39 +0900 Subject: [PATCH 1/2] feat: client refresh rate --- README.md | 2 ++ src/db/controller/client.ts | 8 +++++--- src/lib/config.ts | 3 +++ src/workers/index.ts | 3 ++- src/workers/wallet.ts | 6 ++++-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3b3e61d..a936102 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ Create a `config.json` file with the following structure: "metricPort": 70001, "logLevel": "info", "rpcRequestTimeout": 5000, + "clientRefreshRate": 0.1, "chains": [ { "bech32Prefix": "init", @@ -117,6 +118,7 @@ You can also configure Rapid Relayer using environment variables. The following - `LOG_LEVEL`: Log level - `RPC_REQUEST_TIMEOUT`: Timeout for RPC requests in milliseconds - `DB_PATH`: Path to the database directory +- `CLIENT_REFRESH_RATE`: The rate at which to refresh the client. Fraction of the trusting period. Default: 1/3 **Chain configuration:** You can configure chains in two ways: diff --git a/src/db/controller/client.ts b/src/db/controller/client.ts index 61ec563..0544b51 100644 --- a/src/db/controller/client.ts +++ b/src/db/controller/client.ts @@ -136,12 +136,13 @@ export class ClientController { }, ]) - return client ?? this.addClient(rest, chainId, clientId) + return client ?? (await this.addClient(rest, chainId, clientId)) } public static getClientsToUpdate( chainId: string, - counterpartyChainIds: string[] + counterpartyChainIds: string[], + clientRefreshRate?: number ): ClientTable[] { ClientController.logger.info( `getClientsToUpdate: chainId=${chainId}, counterpartyChainIds=${counterpartyChainIds.join(',')}` @@ -166,7 +167,8 @@ export class ClientController { // check need update if ( - client.last_update_time + client.trusting_period * 0.666 < + client.last_update_time + + client.trusting_period * (clientRefreshRate ?? 0.333) < currentTimestamp ) { return true diff --git a/src/lib/config.ts b/src/lib/config.ts index afd4a54..d616b8e 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -44,6 +44,8 @@ export const loadEnvConfig = (): Partial => { if (env.MAX_PARALLEL_BLOCKS) envConfig.maxParallelBlocks = Number(env.MAX_PARALLEL_BLOCKS) if (env.DB_PATH) envConfig.dbPath = env.DB_PATH + if (env.CLIENT_REFRESH_RATE) + envConfig.clientRefreshRate = Number(env.CLIENT_REFRESH_RATE) // chains configuration if (env.CHAINS) { @@ -314,6 +316,7 @@ export interface Config { maxParallelBlocks?: number chains: ChainConfig[] raft?: RaftConfig + clientRefreshRate?: number } export interface RaftConfig { diff --git a/src/workers/index.ts b/src/workers/index.ts index 1203934..cb7ebe6 100644 --- a/src/workers/index.ts +++ b/src/workers/index.ts @@ -137,7 +137,8 @@ export class WorkerController { walletConfig.maxHandlePacket ?? 100, new Wallet(rest, key), balance, - walletConfig.packetFilter + walletConfig.packetFilter, + config.clientRefreshRate ) } } diff --git a/src/workers/wallet.ts b/src/workers/wallet.ts index ba164af..002da0d 100644 --- a/src/workers/wallet.ts +++ b/src/workers/wallet.ts @@ -37,7 +37,8 @@ export class WalletWorker { private maxHandlePacket: number, public wallet: Wallet, public gasTokenBalance: bigint, - public packetFilter?: PacketFilter + public packetFilter?: PacketFilter, + public clientRefreshRate?: number ) { this.logger = createLoggerWithPrefix( `` @@ -224,7 +225,8 @@ export class WalletWorker { // check clients that need to update const clientsToUpdate = ClientController.getClientsToUpdate( this.chain.chainId, - counterpartyChainIdsWithFeeFilter.map((f) => f.chainId) + counterpartyChainIdsWithFeeFilter.map((f) => f.chainId), + this.clientRefreshRate ) // get unique client id From a6cf61a19672ce66db0646ea7b7c2b7b4a5ac720 Mon Sep 17 00:00:00 2001 From: ALPAC-4 Date: Mon, 5 Jan 2026 16:08:21 +0900 Subject: [PATCH 2/2] fix: set client refresh rate on merge configs --- src/lib/config.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/config.ts b/src/lib/config.ts index d616b8e..4178577 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -279,6 +279,8 @@ export const mergeConfigs = ( merged.rpcRequestTimeout = envConfig.rpcRequestTimeout if (envConfig.maxParallelBlocks !== undefined) merged.maxParallelBlocks = envConfig.maxParallelBlocks + if (envConfig.clientRefreshRate !== undefined) + merged.clientRefreshRate = envConfig.clientRefreshRate // merge chains if provided in environment variables if (envConfig.chains && envConfig.chains.length > 0) {