diff --git a/evm/evm-processor/src/ds-rpc/client.ts b/evm/evm-processor/src/ds-rpc/client.ts index ee67a6845..8b7ed4483 100644 --- a/evm/evm-processor/src/ds-rpc/client.ts +++ b/evm/evm-processor/src/ds-rpc/client.ts @@ -45,6 +45,7 @@ export interface EvmRpcDataSourceOptions { debugTraceTimeout?: string log?: Logger validationFlags?: RpcValidationFlags + maxBlocksPerIteration?: number } export class EvmRpcDataSource implements HotDataSource { @@ -52,6 +53,7 @@ export class EvmRpcDataSource implements HotDataSource { private finalityConfirmation: number private headPollInterval: number private newHeadTimeout: number + private maxBlocksPerIteration: number private preferTraceApi?: boolean private useDebugApiForStateDiffs?: boolean private debugTraceTimeout?: string @@ -66,6 +68,7 @@ export class EvmRpcDataSource implements HotDataSource { this.preferTraceApi = options.preferTraceApi this.useDebugApiForStateDiffs = options.useDebugApiForStateDiffs this.debugTraceTimeout = options.debugTraceTimeout + this.maxBlocksPerIteration = Math.max(options.maxBlocksPerIteration || 10, 1) } async getFinalizedHeight(): Promise { @@ -85,7 +88,7 @@ export class EvmRpcDataSource implements HotDataSource { getFinalizedHeight: () => this.getFinalizedHeight(), getSplit: req => this._getColdSplit(req), requests: mapRangeRequestList(requests, req => this.toMappingRequest(req)), - splitSize: 10, + splitSize: this.maxBlocksPerIteration, concurrency: Math.min(5, this.rpc.client.getConcurrency()), stopOnHead, headPollInterval: this.headPollInterval diff --git a/evm/evm-processor/src/processor.ts b/evm/evm-processor/src/processor.ts index 4547b698d..d127c634e 100644 --- a/evm/evm-processor/src/processor.ts +++ b/evm/evm-processor/src/processor.ts @@ -86,6 +86,11 @@ export interface RpcDataIngestionSettings { * Flags to switch off the data consistency checks */ validationFlags?: RpcValidationFlags + + /** + * The maximum number of blocks to process at a time + */ + maxBlocksPerIteration?: number } @@ -473,6 +478,7 @@ export class EvmBatchProcessor { headPollInterval: this.rpcIngestSettings?.headPollInterval, newHeadTimeout: this.rpcIngestSettings?.newHeadTimeout, validationFlags: this.rpcIngestSettings?.validationFlags, + maxBlocksPerIteration: this.rpcIngestSettings?.maxBlocksPerIteration, log: this.getLogger().child('rpc', {rpcUrl: this.getChainRpcClient().url}) }) }