11import { getProvider , RPCProviderLive } from './rpc-provider'
2- import { Effect , Layer } from 'effect'
2+ import { Effect , Layer , ManagedRuntime } from 'effect'
33import {
44 DecodedTransaction ,
55 DecodeResult ,
@@ -13,13 +13,21 @@ import {
1313 SourcifyStrategyResolver ,
1414 UnknownNetwork ,
1515 UnsupportedEvent ,
16+ AbiStore ,
17+ AbiParams ,
18+ ContractAbiResult ,
19+ ContractMetaStore ,
20+ ContractMetaParams ,
21+ ContractMetaResult ,
22+ PublicClient ,
1623} from '@3loop/transaction-decoder'
1724import { SqlAbiStore , SqlContractMetaStore } from '@3loop/transaction-decoder/sql'
1825import { Hex } from 'viem'
1926import { DatabaseLive } from './database'
20- import { SqlError } from '@effect/sql/SqlError'
27+ import { PgClient } from '@effect/sql-pg/PgClient'
28+ import { SqlClient } from '@effect/sql/SqlClient'
2129import { ConfigError } from 'effect/ConfigError'
22- import { ParseError } from 'effect/ParseResult '
30+ import { SqlError } from '@ effect/sql/SqlError '
2331
2432const AbiStoreLive = SqlAbiStore . make ( {
2533 default : [
@@ -36,7 +44,17 @@ const MetaStoreLive = SqlContractMetaStore.make()
3644
3745const DataLayer = Layer . mergeAll ( RPCProviderLive , DatabaseLive )
3846const LoadersLayer = Layer . mergeAll ( AbiStoreLive , MetaStoreLive )
39- const MainLayer = Layer . provideMerge ( LoadersLayer , DataLayer )
47+ const MainLayer = Layer . provideMerge ( LoadersLayer , DataLayer ) as Layer . Layer <
48+ | AbiStore < AbiParams , ContractAbiResult >
49+ | ContractMetaStore < ContractMetaParams , ContractMetaResult >
50+ | PublicClient
51+ | PgClient
52+ | SqlClient ,
53+ ConfigError | SqlError ,
54+ never
55+ >
56+
57+ const runtime = ManagedRuntime . make ( MainLayer )
4058
4159export async function decodeTransaction ( {
4260 chainID,
@@ -46,19 +64,9 @@ export async function decodeTransaction({
4664 hash : string
4765} ) : Promise < DecodedTransaction | undefined > {
4866 // NOTE: For unknonw reason the context of main layer is still missing the SqlClient in the type
49- const runnable = Effect . provide ( decodeTransactionByHash ( hash as Hex , chainID ) , MainLayer ) as Effect . Effect <
50- DecodedTransaction ,
51- | SqlError
52- | UnknownNetwork
53- | ConfigError
54- | SqlError
55- | RPCFetchError
56- | ParseError
57- | UnsupportedEvent
58- | FetchTransactionError ,
59- never
60- >
61- return Effect . runPromise ( runnable ) . catch ( ( error : unknown ) => {
67+ const runnable = decodeTransactionByHash ( hash as Hex , chainID )
68+
69+ return runtime . runPromise ( runnable ) . catch ( ( error : unknown ) => {
6270 console . error ( 'Decode error' , JSON . stringify ( error , null , 2 ) )
6371 return undefined
6472 } )
@@ -73,26 +81,13 @@ export async function decodeCalldata({
7381 data : string
7482 contractAddress ?: string
7583} ) : Promise < DecodeResult | undefined > {
76- const runnable = Effect . provide (
77- calldataDecoder ( {
78- data : data as Hex ,
79- chainID,
80- contractAddress,
81- } ) ,
82- MainLayer ,
83- ) as Effect . Effect <
84- DecodeResult ,
85- | SqlError
86- | UnknownNetwork
87- | ConfigError
88- | SqlError
89- | RPCFetchError
90- | ParseError
91- | UnsupportedEvent
92- | FetchTransactionError ,
93- never
94- >
95- return Effect . runPromise ( runnable ) . catch ( ( error : unknown ) => {
84+ const runnable = calldataDecoder ( {
85+ data : data as Hex ,
86+ chainID,
87+ contractAddress,
88+ } )
89+
90+ return runtime . runPromise ( runnable ) . catch ( ( error : unknown ) => {
9691 console . error ( 'Decode error' , JSON . stringify ( error , null , 2 ) )
9792 return undefined
9893 } )
0 commit comments