@@ -14,7 +14,6 @@ import {
1414import { ContractABI , ContractAbiResolverStrategy , GetContractABIStrategy } from './abi-strategy/request-model.js'
1515import { Abi } from 'viem'
1616
17- const STRATEGY_TIMEOUT = 5000
1817export interface AbiParams {
1918 chainID : number
2019 address : string
@@ -212,27 +211,30 @@ const AbiLoaderRequestResolver: Effect.Effect<
212211 )
213212
214213 // NOTE: Firstly we batch strategies by address because in a transaction most of events and traces are from the same abi
215- const response = yield * Effect . forEach ( remaining , ( req ) => {
216- const strategyRequest = new GetContractABIStrategy ( {
217- address : req . address ,
218- chainID : req . chainID ,
219- } )
220-
221- const allAvailableStrategies = Array . prependAll ( strategies . default , strategies [ req . chainID ] ?? [ ] ) . filter (
222- ( strategy ) => strategy . type === 'address' ,
223- )
214+ const response = yield * Effect . forEach (
215+ remaining ,
216+ ( req ) => {
217+ const strategyRequest = new GetContractABIStrategy ( {
218+ address : req . address ,
219+ chainID : req . chainID ,
220+ } )
221+
222+ const allAvailableStrategies = Array . prependAll ( strategies . default , strategies [ req . chainID ] ?? [ ] ) . filter (
223+ ( strategy ) => strategy . type === 'address' ,
224+ )
224225
225- return Effect . validateFirst ( allAvailableStrategies , ( strategy ) =>
226- pipe (
227- Effect . request ( strategyRequest , strategy . resolver ) ,
228- Effect . withRequestCaching ( true ) ,
229- Effect . timeout ( STRATEGY_TIMEOUT ) ,
230- ) ,
231- ) . pipe (
232- Effect . map ( Either . left ) ,
233- Effect . orElseSucceed ( ( ) => Either . right ( req ) ) ,
234- )
235- } )
226+ return Effect . validateFirst ( allAvailableStrategies , ( strategy ) => {
227+ return pipe ( Effect . request ( strategyRequest , strategy . resolver ) , Effect . withRequestCaching ( true ) )
228+ } ) . pipe (
229+ Effect . map ( Either . left ) ,
230+ Effect . orElseSucceed ( ( ) => Either . right ( req ) ) ,
231+ )
232+ } ,
233+ {
234+ concurrency : 'unbounded' ,
235+ batching : true ,
236+ } ,
237+ )
236238
237239 const [ addressStrategyResults , notFound ] = Array . partitionMap ( response , ( res ) => res )
238240
@@ -251,11 +253,7 @@ const AbiLoaderRequestResolver: Effect.Effect<
251253
252254 // TODO: Distinct the errors and missing data, so we can retry on errors
253255 return Effect . validateFirst ( allAvailableStrategies , ( strategy ) =>
254- pipe (
255- Effect . request ( strategyRequest , strategy . resolver ) ,
256- Effect . withRequestCaching ( true ) ,
257- Effect . timeout ( STRATEGY_TIMEOUT ) ,
258- ) ,
256+ pipe ( Effect . request ( strategyRequest , strategy . resolver ) , Effect . withRequestCaching ( true ) ) ,
259257 ) . pipe ( Effect . orElseSucceed ( ( ) => null ) )
260258 } )
261259
@@ -276,7 +274,11 @@ const AbiLoaderRequestResolver: Effect.Effect<
276274 Effect . forEach ( group , ( req ) => Request . completeEffect ( req , result ) , { discard : true } ) ,
277275 )
278276 } ,
279- { discard : true } ,
277+ {
278+ discard : true ,
279+ concurrency : 'unbounded' ,
280+ batching : true ,
281+ } ,
280282 )
281283 } ) ,
282284) . pipe ( RequestResolver . contextFromServices ( AbiStore ) , Effect . withRequestCaching ( true ) )
0 commit comments