@@ -7,7 +7,10 @@ import type {
77import { type Log , formatLog } from "viem" ;
88import { resolveContractAbi } from "../../contract/actions/resolve-abi.js" ;
99import type { ThirdwebContract } from "../../contract/contract.js" ;
10- import { getContractEvents as getContractEventsInsight } from "../../insight/get-events.js" ;
10+ import {
11+ type ContractEvent ,
12+ getContractEvents as getContractEventsInsight ,
13+ } from "../../insight/get-events.js" ;
1114import { eth_blockNumber } from "../../rpc/actions/eth_blockNumber.js" ;
1215import {
1316 type GetLogsBlockParams ,
@@ -156,6 +159,23 @@ export async function getContractEvents<
156159
157160 // if we have an abi on the contract, we can encode the topics with it
158161 if ( ! events ?. length && ! ! contract ) {
162+ if ( useIndexer ) {
163+ // fetch all events from the indexer, no need to get events from ABI
164+ const events = await getContractEventsInsight ( {
165+ client : contract . client ,
166+ chains : [ contract . chain ] ,
167+ contractAddress : contract . address ,
168+ decodeLogs : true ,
169+ queryOptions : {
170+ limit : 500 ,
171+ filter_block_hash : restParams . blockHash ,
172+ filter_block_number_gte : restParams . fromBlock ,
173+ filter_block_number_lte : restParams . toBlock ,
174+ } ,
175+ } ) ;
176+ return toLog ( events ) as GetContractEventsResult < abiEvents , TStrict > ;
177+ }
178+
159179 // if we have a contract *WITH* an abi we can use that
160180 if ( contract . abi ?. length ) {
161181 // @ts -expect-error - we can't make typescript happy here, but we know this is an abi event
@@ -246,6 +266,10 @@ async function getLogsFromInsight(options: {
246266 } ,
247267 } ) ;
248268
269+ return toLog ( r ) ;
270+ }
271+
272+ function toLog ( r : ContractEvent [ ] ) {
249273 const cleanedEventData = r . map ( ( tx ) => ( {
250274 chainId : tx . chain_id ,
251275 blockNumber : numberToHex ( Number ( tx . block_number ) ) ,
@@ -257,6 +281,15 @@ async function getLogsFromInsight(options: {
257281 address : tx . address ,
258282 data : tx . data as Hex ,
259283 topics : tx . topics as [ `0x${string } `, ...`0x${string } `[ ] ] | [ ] | undefined ,
284+ ...( tx . decoded
285+ ? {
286+ eventName : tx . decoded . name ,
287+ args : {
288+ ...tx . decoded . indexed_params ,
289+ ...tx . decoded . non_indexed_params ,
290+ } ,
291+ }
292+ : { } ) ,
260293 } ) ) ;
261294
262295 return cleanedEventData . map ( ( e ) => formatLog ( e ) ) ;
0 commit comments