Skip to content

Commit 7a408f8

Browse files
Update ABI strategy errors and log level (#236)
1 parent 7e88411 commit 7a408f8

File tree

13 files changed

+65
-35
lines changed

13 files changed

+65
-35
lines changed

.changeset/silver-gifts-chew.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@3loop/transaction-decoder': patch
3+
---
4+
5+
Update ABI strategy errors and log levels

packages/transaction-decoder/src/abi-loader.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ export const AbiLoaderRequestResolver = RequestResolver.makeBatched((requests: A
202202
strategyId: 'address-batch',
203203
})
204204
.pipe(
205-
Effect.tapError(Effect.logWarning),
205+
Effect.tapError(Effect.logDebug),
206206
Effect.orElseSucceed(() => null),
207207
Effect.map((result) => (result ? Either.left(result) : Either.right(req))),
208208
)
@@ -234,7 +234,7 @@ export const AbiLoaderRequestResolver = RequestResolver.makeBatched((requests: A
234234
strategyId: 'fragment-batch',
235235
})
236236
.pipe(
237-
Effect.tapError(Effect.logWarning),
237+
Effect.tapError(Effect.logDebug),
238238
Effect.orElseSucceed(() => null),
239239
) // If no strategies found, return null
240240
},

packages/transaction-decoder/src/abi-strategy/blockscout-abi.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ export const BlockscoutStrategyResolver = (config: {
9191
),
9292
)
9393
} else {
94-
return yield* Effect.fail(new RequestModel.ResolveStrategyABIError('Blockscout', req.address, req.chainId))
94+
return yield* Effect.fail(
95+
new RequestModel.ResolveStrategyABIError('Blockscout', req.address, req.chainId, String(result.cause)),
96+
)
9597
}
9698
}),
9799
'AbiStrategy.BlockscoutStrategyResolver',

packages/transaction-decoder/src/abi-strategy/etherscan-abi.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ export const EtherscanStrategyResolver = (config?: {
136136
),
137137
)
138138
} else {
139-
return yield* Effect.fail(new RequestModel.ResolveStrategyABIError('etherscan', req.address, req.chainId))
139+
return yield* Effect.fail(
140+
new RequestModel.ResolveStrategyABIError('etherscan', req.address, req.chainId, String(result.cause)),
141+
)
140142
}
141143
}),
142144
'AbiStrategy.EtherscanStrategyResolver',

packages/transaction-decoder/src/abi-strategy/etherscanv2-abi.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ export const EtherscanV2StrategyResolver = (config?: {
9999
),
100100
)
101101
} else {
102-
return yield* Effect.fail(new RequestModel.ResolveStrategyABIError('etherscanV2', req.address, req.chainId))
102+
return yield* Effect.fail(
103+
new RequestModel.ResolveStrategyABIError('etherscanV2', req.address, req.chainId, String(result.cause)),
104+
)
103105
}
104106
}),
105107
'AbiStrategy.EtherscanV2StrategyResolver',

packages/transaction-decoder/src/abi-strategy/experimental-erc20.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import { erc20Abi, getAddress, getContract } from 'viem'
66
const getLocalFragments = (service: PublicClient, { address, chainId }: RequestModel.GetContractABIStrategyParams) =>
77
Effect.gen(function* () {
88
if (!address)
9-
return yield* Effect.fail(new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId))
9+
return yield* Effect.fail(
10+
new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId, 'Address is required'),
11+
)
1012

1113
const client = yield* service
1214
.getPublicClient(chainId)
1315
.pipe(
14-
Effect.catchAll(() =>
15-
Effect.fail(new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId)),
16+
Effect.catchAll((e) =>
17+
Effect.fail(new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId, String(e))),
1618
),
1719
)
1820

@@ -23,14 +25,12 @@ const getLocalFragments = (service: PublicClient, { address, chainId }: RequestM
2325
address: getAddress(address),
2426
client: client.client,
2527
}),
26-
catch: () => {
27-
throw new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId)
28-
},
28+
catch: (e) => new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId, String(e)),
2929
})
3030

3131
const decimals = yield* Effect.tryPromise({
3232
try: () => inst.read.decimals(),
33-
catch: () => new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId),
33+
catch: (e) => new RequestModel.ResolveStrategyABIError('local-strategy', address, chainId, String(e)),
3434
})
3535

3636
if (decimals != null) {

packages/transaction-decoder/src/abi-strategy/fourbyte-abi.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,12 @@ export const FourByteStrategyResolver = (): RequestModel.ContractAbiResolverStra
119119
)
120120
} else {
121121
return yield* Effect.fail(
122-
new RequestModel.ResolveStrategyABIError('4byte.directory', req.address, req.chainId),
122+
new RequestModel.ResolveStrategyABIError(
123+
'4byte.directory',
124+
req.address,
125+
req.chainId,
126+
String(result.cause),
127+
),
123128
)
124129
}
125130
}),

packages/transaction-decoder/src/abi-strategy/openchain-abi.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ export const OpenchainStrategyResolver = (): RequestModel.ContractAbiResolverStr
136136
),
137137
)
138138
} else {
139-
return yield* Effect.fail(new RequestModel.ResolveStrategyABIError('openchain', req.address, req.chainId))
139+
return yield* Effect.fail(
140+
new RequestModel.ResolveStrategyABIError('openchain', req.address, req.chainId, String(result.cause)),
141+
)
140142
}
141143
}),
142144
'AbiStrategy.OpenchainStrategyResolver',

packages/transaction-decoder/src/abi-strategy/request-model.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Effect, RateLimiter } from 'effect'
1+
import { Data, Effect, RateLimiter } from 'effect'
22

33
export interface FetchABIParams {
44
readonly chainID: number
@@ -7,25 +7,35 @@ export interface FetchABIParams {
77
readonly signature?: string | undefined
88
}
99

10-
export class ResolveStrategyABIError {
11-
readonly _tag = 'ResolveStrategyABIError'
12-
constructor(
13-
readonly resolverName: string,
14-
readonly address: string,
15-
readonly chain: number,
16-
) {}
10+
export class ResolveStrategyABIError extends Data.TaggedError('ResolveStrategyABIError')<{
11+
resolver: string
12+
address: string
13+
chainID: number
14+
message: string
15+
}> {
16+
constructor(resolver: string, address: string, chainID: number, message: string) {
17+
super({ resolver, address, chainID, message })
18+
}
1719
}
1820

19-
export class MissingABIStrategyError {
20-
readonly _tag = 'MissingABIStrategyError'
21+
export class MissingABIStrategyError extends Data.TaggedError('MissingABIStrategyError')<{
22+
address: string
23+
chainId: number
24+
strategyId: string
25+
event?: string
26+
signature?: string
27+
message: string
28+
}> {
2129
constructor(
22-
readonly address: string,
23-
readonly chainId: number,
24-
readonly strategyId: string,
25-
readonly event?: string,
26-
readonly signature?: string,
27-
readonly message: string = 'Missing contract ABI',
28-
) {}
30+
address: string,
31+
chainId: number,
32+
strategyId: string,
33+
event?: string,
34+
signature?: string,
35+
message = 'Missing contract ABI',
36+
) {
37+
super({ address, chainId, strategyId, event, signature, message })
38+
}
2939
}
3040

3141
interface FunctionFragmentABI {

packages/transaction-decoder/src/abi-strategy/sourcify-abi.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ export const SourcifyStrategyResolver = (): RequestModel.ContractAbiResolverStra
9696
),
9797
)
9898
} else {
99-
return yield* Effect.fail(new RequestModel.ResolveStrategyABIError('sourcify', req.address, req.chainId))
99+
return yield* Effect.fail(
100+
new RequestModel.ResolveStrategyABIError('sourcify', req.address, req.chainId, String(result.cause)),
101+
)
100102
}
101103
}),
102104
'AbiStrategy.SourcifyStrategyResolver',

0 commit comments

Comments
 (0)