@warptoad/skinny-fat-imt-js 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abis.js","sourceRoot":"","sources":["../src/abis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const DEPLOY_BLOCK: {
2
+ [chainId: number]: number;
3
+ };
4
+ export declare function getDeploymentBlock(chainId: number): number | 0n;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,EAAC;IAAC,CAAC,OAAO,EAAC,MAAM,GAAE,MAAM,CAAA;CAKjD,CAAA;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAC,MAAM,eAGhD"}
package/dist/config.js ADDED
@@ -0,0 +1,11 @@
1
+ export const DEPLOY_BLOCK = {
2
+ 31337: 0, // hardhat
3
+ 11155111: 11400000, // sepolia (not deployed yet)
4
+ 1: 25700000, // mainnet (not deployed yet)
5
+ 324: 71400000, // zk-sync era (not deployed yet)
6
+ };
7
+ export function getDeploymentBlock(chainId) {
8
+ const block = DEPLOY_BLOCK[chainId];
9
+ return block ? block : 0n;
10
+ }
11
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAA6B;IAClD,KAAK,EAAO,CAAC,EAAW,UAAU;IAClC,QAAQ,EAAI,QAAQ,EAAI,kCAAkC;IAC1D,CAAC,EAAW,QAAQ,EAAI,kCAAkC;IAC1D,GAAG,EAAS,QAAQ,EAAI,kCAAkC;CAC7D,CAAA;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAc;IAC7C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACnC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,125 @@
1
+ import type { Abi, AbiEvent, AbiParameter, AbiParameterToPrimitiveType, Address, GetLogsParameters, Log, PublicClient } from 'viem';
2
+ /**
3
+ * Returns the smallest bigint.
4
+ */
5
+ export declare function minBigInt(a: bigint, b: bigint): bigint;
6
+ /**
7
+ * A log of any of the events in TAbiEvent. Distributes over the union, so `.eventName`
8
+ * and `.args` stay narrowable per event.
9
+ */
10
+ export type EventLog<TAbiEvent extends AbiEvent> = TAbiEvent extends AbiEvent ? Log<bigint, number, false, TAbiEvent, true> : never;
11
+ export type PostQueryEventFilter<TAbiEvent extends AbiEvent> = (allEvents: EventLog<TAbiEvent>[], newChunkEvents: EventLog<TAbiEvent>[], firstBlock: bigint, lastBlock: bigint) => [result: EventLog<TAbiEvent>[], quitEarly: boolean];
12
+ type UnionToIntersection<TUnion> = (TUnion extends unknown ? (arg: TUnion) => void : never) extends (arg: infer TIntersection) => void ? TIntersection : never;
13
+ type IndexedInput<TAbiEvent extends AbiEvent> = Extract<TAbiEvent['inputs'][number], {
14
+ indexed: true;
15
+ }>;
16
+ /**
17
+ * Names of the indexed params of a single event. Falls back to `string` when the abi wasn't
18
+ * declared `as const` (`indexed` widened to boolean), so this stays usable instead of collapsing to never.
19
+ */
20
+ type IndexedNames<TAbiEvent extends AbiEvent> = [
21
+ IndexedInput<TAbiEvent>
22
+ ] extends [never] ? string : NonNullable<IndexedInput<TAbiEvent>['name']>;
23
+ /**
24
+ * Indexed param names present in *every* event of the union. Wrapping each event's names in an
25
+ * object and intersecting turns the union of name-sets into their intersection.
26
+ */
27
+ type SharedIndexedNames<TAbiEvent extends AbiEvent> = UnionToIntersection<TAbiEvent extends AbiEvent ? {
28
+ names: IndexedNames<TAbiEvent>;
29
+ } : never> extends {
30
+ names: infer TNames;
31
+ } ? TNames & string : never;
32
+ type IndexedInputByName<TAbiEvent extends AbiEvent, TName extends string> = Extract<IndexedInput<TAbiEvent>, {
33
+ name: TName;
34
+ }>;
35
+ type SharedArgValue<TAbiEvent extends AbiEvent, TName extends string> = [
36
+ IndexedInputByName<TAbiEvent, TName>
37
+ ] extends [never] ? unknown : IndexedInputByName<TAbiEvent, TName> extends infer TInput ? TInput extends AbiParameter ? AbiParameterToPrimitiveType<TInput> : never : never;
38
+ /**
39
+ * Filter on indexed params that all queried events share. A value may be a single value or an
40
+ * array of values (matches any of them), same as viem's `args`.
41
+ */
42
+ export type SharedEventFilterArgs<TAbiEvent extends AbiEvent> = {
43
+ [TName in SharedIndexedNames<TAbiEvent>]?: SharedArgValue<TAbiEvent, TName> | readonly SharedArgValue<TAbiEvent, TName>[] | null | undefined;
44
+ };
45
+ /**
46
+ * Fetches contract events in chunks to avoid RPC limits on big block ranges.
47
+ * Can filter on indexed args and scan backwards (latest first) but returns in normal order (earliest first).
48
+ *
49
+ * Reverse order helps when you want recent events first, so you can stop early with maxEvents without scanning everything.
50
+ * maxEvents lets you quit once you hit enough events, saving RPC calls.
51
+ *
52
+ * Note: No concurrency implemented. This usually messes with rate limits on most RPCs. For local setups, just bump up chunkSize.
53
+ *
54
+ * @param {PublicClient} args.publicClient
55
+ * @param {{ address: Address; abi: TAbi }} args.contract - the viem contract object (returned from getContract). Or just pass {address: 0xUrContract; abi: ["ur", "abi"] }
56
+ * @param {TEventName} args.eventName
57
+ * @param {GetLogsParameters<TAbiEvent>['args']} [args.eventFilterArgs] - Filters for indexed parameters (this is passed to publicClient.getLogs aka eth_getLog)
58
+ * @param {bigint} [args.firstBlock] - Start block (inclusive). Defaults to 0n.
59
+ * @param {bigint} [args.lastBlock] - End block (inclusive). Defaults to current block.
60
+ * @param {boolean} [args.reverseOrder] - Scan latest to earliest, but returns the normal order.
61
+ * @param {number} [args.maxEvents] - Max events to fetch; stops early if hit. (events are counted after postQueryFilter is applied)
62
+ * @param {bigint} [args.chunkSize] - amount of block will be requested with eth_getLogs
63
+ * @param {(events: EventLog<TAbiEvent>[]) => EventLog<TAbiEvent>[]} [args.postQueryFilter] - Filter applied after events are queried.
64
+ *
65
+ * @returns {Promise<EventLog<TAbiEvent>[]>} Array of event logs, earliest to latest.
66
+ */
67
+ export declare function queryEventInChunks<const TAbi extends Abi, const TEventName extends string, TAbiEvent extends AbiEvent = Extract<TAbi[number], AbiEvent & {
68
+ name: TEventName;
69
+ }>>({ publicClient, contract, eventName, eventFilterArgs, firstBlock, lastBlock, reverseOrder, maxEvents, chunkSize, postQueryFilter, }: {
70
+ publicClient: PublicClient;
71
+ contract: {
72
+ address: Address;
73
+ abi: TAbi;
74
+ };
75
+ eventName: TEventName;
76
+ eventFilterArgs?: GetLogsParameters<TAbiEvent>['args'];
77
+ firstBlock?: bigint;
78
+ lastBlock?: bigint;
79
+ reverseOrder?: boolean;
80
+ maxEvents?: number;
81
+ chunkSize?: bigint;
82
+ postQueryFilter?: PostQueryEventFilter<TAbiEvent>;
83
+ }): Promise<EventLog<TAbiEvent>[]>;
84
+ /**
85
+ * Same as {@link queryEventInChunks} but for several events at once: one eth_getLogs per chunk with
86
+ * every event signature OR'd into topic0, so N event names cost the same amount of RPC calls as 1.
87
+ *
88
+ * Filtering (sharedEventFilterArgs) is possible, but only on indexed params that *every* queried event has
89
+ * at the same indexed position and with the same type. eth_getLogs topics are positional, not named:
90
+ * topic1 is the 1st indexed param of whatever event matched, so a filter on it only means one thing
91
+ * if all the events agree on what their 1st indexed param is. Filtering on a param that isn't shared
92
+ * like that throws, instead of silently matching the wrong param on some of the events.
93
+ *
94
+ * @param {PublicClient} args.publicClient
95
+ * @param {{ address: Address; abi: TAbi }} args.contract - the viem contract object (returned from getContract). Or just pass {address: 0xUrContract; abi: ["ur", "abi"] }
96
+ * @param {TEventName[]} args.eventNames - the events to query, all in one filter
97
+ * @param {SharedEventFilterArgs<TAbiEvent>} [args.sharedEventFilterArgs] - Filters for indexed params shared by all queried events, e.g. { treeId: [1n, 2n] }. Throws if a param isn't shared.
98
+ * @param {bigint} [args.firstBlock] - Start block (inclusive). Defaults to 0n.
99
+ * @param {bigint} [args.lastBlock] - End block (inclusive). Defaults to current block.
100
+ * @param {boolean} [args.reverseOrder] - Scan latest to earliest, but returns the normal order.
101
+ * @param {number} [args.maxEvents] - Max events to fetch; stops early if hit. (events are counted after postQueryFilter is applied)
102
+ * @param {bigint} [args.chunkSize] - amount of block will be requested with eth_getLogs
103
+ * @param {PostQueryEventFilter<TAbiEvent>} [args.postQueryFilter] - Filter applied after events are queried.
104
+ *
105
+ * @returns {Promise<EventLog<TAbiEvent>[]>} Array of logs of all requested events mixed together, earliest to latest.
106
+ */
107
+ export declare function queryMultiEventsInChunks<const TAbi extends Abi, const TEventName extends string, TAbiEvent extends AbiEvent = Extract<TAbi[number], AbiEvent & {
108
+ name: TEventName;
109
+ }>>({ publicClient, contract, eventNames, sharedEventFilterArgs, firstBlock, lastBlock, reverseOrder, maxEvents, chunkSize, postQueryFilter, }: {
110
+ publicClient: PublicClient;
111
+ contract: {
112
+ address: Address;
113
+ abi: TAbi;
114
+ };
115
+ eventNames: readonly TEventName[];
116
+ sharedEventFilterArgs?: SharedEventFilterArgs<TAbiEvent>;
117
+ firstBlock?: bigint;
118
+ lastBlock?: bigint;
119
+ reverseOrder?: boolean;
120
+ maxEvents?: number;
121
+ chunkSize?: bigint;
122
+ postQueryFilter?: PostQueryEventFilter<TAbiEvent>;
123
+ }): Promise<EventLog<TAbiEvent>[]>;
124
+ export {};
125
+ //# sourceMappingURL=eventScanning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventScanning.d.ts","sourceRoot":"","sources":["../src/eventScanning.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,2BAA2B,EAC3B,OAAO,EACP,iBAAiB,EACjB,GAAG,EAEH,YAAY,EACf,MAAM,MAAM,CAAA;AAEb;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAE7C;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,SAAS,SAAS,QAAQ,IAC3C,SAAS,SAAS,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;AAGrF,MAAM,MAAM,oBAAoB,CAAC,SAAS,SAAS,QAAQ,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAC,UAAU,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,KAAK,CAAC,MAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAC,SAAS,EAAC,OAAO,CAAC,CAAA;AAGhO,KAAK,mBAAmB,CAAC,MAAM,IAC3B,CAAC,MAAM,SAAS,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,aAAa,KAAK,IAAI,GAC7F,aAAa,GACb,KAAK,CAAC;AAEhB,KAAK,YAAY,CAAC,SAAS,SAAS,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAExG;;;GAGG;AACH,KAAK,YAAY,CAAC,SAAS,SAAS,QAAQ,IACxC;IAAC,YAAY,CAAC,SAAS,CAAC;CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtG;;;GAGG;AACH,KAAK,kBAAkB,CAAC,SAAS,SAAS,QAAQ,IAC9C,mBAAmB,CAAC,SAAS,SAAS,QAAQ,GAAG;IAAE,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,MAAM,CAAA;CAAE,GACtH,MAAM,GAAG,MAAM,GACf,KAAK,CAAC;AAEhB,KAAK,kBAAkB,CAAC,SAAS,SAAS,QAAQ,EAAE,KAAK,SAAS,MAAM,IACpE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAEtD,KAAK,cAAc,CAAC,SAAS,SAAS,QAAQ,EAAE,KAAK,SAAS,MAAM,IAChE;IAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;CAAC,SAAS,CAAC,KAAK,CAAC,GAChD,OAAO,GACP,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,MAAM,MAAM,GACrD,MAAM,SAAS,YAAY,GAAG,2BAA2B,CAAC,MAAM,CAAC,GAAG,KAAK,GACzE,KAAK,CAAC;AAEpB;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAAC,SAAS,SAAS,QAAQ,IAAI;KAC3D,KAAK,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,EACnC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,GAChC,SAAS,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,GAC3C,IAAI,GACJ,SAAS;CAClB,CAAC;AAcF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,CAAC,IAAI,SAAS,GAAG,EACtB,KAAK,CAAC,UAAU,SAAS,MAAM,EAC/B,SAAS,SAAS,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACnF,EACE,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAe,EACf,SAAS,EACT,YAAoB,EACpB,SAAoB,EACpB,SAAkB,EAClB,eAAe,GAClB,EAAE;IACC,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IAC1C,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;IACvD,UAAU,CAAC,EAAC,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;CACpD,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAsBjC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,CAAC,IAAI,SAAS,GAAG,EACtB,KAAK,CAAC,UAAU,SAAS,MAAM,EAC/B,SAAS,SAAS,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,EACnF,EACE,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,UAAe,EACf,SAAS,EACT,YAAoB,EACpB,SAAoB,EACpB,SAAkB,EAClB,eAAe,GAClB,EAAE;IACC,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAC;IAC1C,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAClC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACzD,UAAU,CAAC,EAAC,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;CACpD,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAuCjC"}
@@ -0,0 +1,253 @@
1
+ import { encodeEventTopics, formatLog, numberToHex, parseEventLogs } from 'viem';
2
+ /**
3
+ * Returns the smallest bigint.
4
+ */
5
+ export function minBigInt(a, b) {
6
+ return a < b ? a : b;
7
+ }
8
+ /**
9
+ * Finds the abi entries of an event by name. Overloaded events (same name, different params)
10
+ * yield multiple entries, all are returned.
11
+ */
12
+ function getEventAbis(abi, eventName) {
13
+ const matches = abi.filter((item) => item.type === 'event' && item.name === eventName);
14
+ if (matches.length === 0) {
15
+ throw new Error(`Event "${eventName}" not found in ABI`);
16
+ }
17
+ return matches;
18
+ }
19
+ /**
20
+ * Fetches contract events in chunks to avoid RPC limits on big block ranges.
21
+ * Can filter on indexed args and scan backwards (latest first) but returns in normal order (earliest first).
22
+ *
23
+ * Reverse order helps when you want recent events first, so you can stop early with maxEvents without scanning everything.
24
+ * maxEvents lets you quit once you hit enough events, saving RPC calls.
25
+ *
26
+ * Note: No concurrency implemented. This usually messes with rate limits on most RPCs. For local setups, just bump up chunkSize.
27
+ *
28
+ * @param {PublicClient} args.publicClient
29
+ * @param {{ address: Address; abi: TAbi }} args.contract - the viem contract object (returned from getContract). Or just pass {address: 0xUrContract; abi: ["ur", "abi"] }
30
+ * @param {TEventName} args.eventName
31
+ * @param {GetLogsParameters<TAbiEvent>['args']} [args.eventFilterArgs] - Filters for indexed parameters (this is passed to publicClient.getLogs aka eth_getLog)
32
+ * @param {bigint} [args.firstBlock] - Start block (inclusive). Defaults to 0n.
33
+ * @param {bigint} [args.lastBlock] - End block (inclusive). Defaults to current block.
34
+ * @param {boolean} [args.reverseOrder] - Scan latest to earliest, but returns the normal order.
35
+ * @param {number} [args.maxEvents] - Max events to fetch; stops early if hit. (events are counted after postQueryFilter is applied)
36
+ * @param {bigint} [args.chunkSize] - amount of block will be requested with eth_getLogs
37
+ * @param {(events: EventLog<TAbiEvent>[]) => EventLog<TAbiEvent>[]} [args.postQueryFilter] - Filter applied after events are queried.
38
+ *
39
+ * @returns {Promise<EventLog<TAbiEvent>[]>} Array of event logs, earliest to latest.
40
+ */
41
+ export async function queryEventInChunks({ publicClient, contract, eventName, eventFilterArgs, firstBlock = 0n, lastBlock, reverseOrder = false, maxEvents = Infinity, chunkSize = 20000n, postQueryFilter, }) {
42
+ const address = contract.address;
43
+ // Find the event abi based on eventName (now fully typed)
44
+ const eventAbi = getEventAbis(contract.abi, eventName)[0];
45
+ return await scanInChunks({
46
+ publicClient,
47
+ firstBlock,
48
+ lastBlock,
49
+ reverseOrder,
50
+ maxEvents,
51
+ chunkSize,
52
+ postQueryFilter,
53
+ queryChunk: async (fromBlock, toBlock) => await publicClient.getLogs({
54
+ address,
55
+ event: eventAbi,
56
+ args: eventFilterArgs,
57
+ fromBlock,
58
+ toBlock,
59
+ }),
60
+ });
61
+ }
62
+ /**
63
+ * Same as {@link queryEventInChunks} but for several events at once: one eth_getLogs per chunk with
64
+ * every event signature OR'd into topic0, so N event names cost the same amount of RPC calls as 1.
65
+ *
66
+ * Filtering (sharedEventFilterArgs) is possible, but only on indexed params that *every* queried event has
67
+ * at the same indexed position and with the same type. eth_getLogs topics are positional, not named:
68
+ * topic1 is the 1st indexed param of whatever event matched, so a filter on it only means one thing
69
+ * if all the events agree on what their 1st indexed param is. Filtering on a param that isn't shared
70
+ * like that throws, instead of silently matching the wrong param on some of the events.
71
+ *
72
+ * @param {PublicClient} args.publicClient
73
+ * @param {{ address: Address; abi: TAbi }} args.contract - the viem contract object (returned from getContract). Or just pass {address: 0xUrContract; abi: ["ur", "abi"] }
74
+ * @param {TEventName[]} args.eventNames - the events to query, all in one filter
75
+ * @param {SharedEventFilterArgs<TAbiEvent>} [args.sharedEventFilterArgs] - Filters for indexed params shared by all queried events, e.g. { treeId: [1n, 2n] }. Throws if a param isn't shared.
76
+ * @param {bigint} [args.firstBlock] - Start block (inclusive). Defaults to 0n.
77
+ * @param {bigint} [args.lastBlock] - End block (inclusive). Defaults to current block.
78
+ * @param {boolean} [args.reverseOrder] - Scan latest to earliest, but returns the normal order.
79
+ * @param {number} [args.maxEvents] - Max events to fetch; stops early if hit. (events are counted after postQueryFilter is applied)
80
+ * @param {bigint} [args.chunkSize] - amount of block will be requested with eth_getLogs
81
+ * @param {PostQueryEventFilter<TAbiEvent>} [args.postQueryFilter] - Filter applied after events are queried.
82
+ *
83
+ * @returns {Promise<EventLog<TAbiEvent>[]>} Array of logs of all requested events mixed together, earliest to latest.
84
+ */
85
+ export async function queryMultiEventsInChunks({ publicClient, contract, eventNames, sharedEventFilterArgs, firstBlock = 0n, lastBlock, reverseOrder = false, maxEvents = Infinity, chunkSize = 20000n, postQueryFilter, }) {
86
+ const address = contract.address;
87
+ const abi = contract.abi;
88
+ if (eventNames.length === 0) {
89
+ throw new Error(`No event names given`);
90
+ }
91
+ const eventAbis = eventNames.flatMap((eventName) => getEventAbis(abi, eventName));
92
+ const topics = buildSharedTopics(eventAbis, sharedEventFilterArgs);
93
+ return await scanInChunks({
94
+ publicClient,
95
+ firstBlock,
96
+ lastBlock,
97
+ reverseOrder,
98
+ maxEvents,
99
+ chunkSize,
100
+ postQueryFilter,
101
+ // viem's getLogs refuses args together with multiple events (it can't map named args onto
102
+ // positional topics for a union of events), so the filter is handed to the node as raw topics.
103
+ queryChunk: async (fromBlock, toBlock) => {
104
+ const rpcLogs = await publicClient.request({
105
+ method: 'eth_getLogs',
106
+ params: [{
107
+ address,
108
+ topics,
109
+ fromBlock: numberToHex(fromBlock),
110
+ toBlock: numberToHex(toBlock),
111
+ }],
112
+ });
113
+ return parseEventLogs({
114
+ abi: abi,
115
+ eventName: [...eventNames],
116
+ logs: rpcLogs.map((log) => formatLog(log)),
117
+ strict: true,
118
+ });
119
+ },
120
+ });
121
+ }
122
+ /**
123
+ * Builds the eth_getLogs topics for a multi event query: topic0 is every event signature (OR'd),
124
+ * the rest are the shared indexed args. Throws if an arg isn't shared by all events.
125
+ */
126
+ function buildSharedTopics(eventAbis, sharedEventFilterArgs) {
127
+ const signatures = eventAbis.map((eventAbi) => encodeEventTopics({ abi: [eventAbi] })[0]);
128
+ const topic0 = [...new Set(signatures)];
129
+ const filterNames = Object.entries(sharedEventFilterArgs ?? {})
130
+ .filter(([, value]) => value !== undefined && value !== null)
131
+ .map(([name]) => name);
132
+ if (filterNames.length === 0) {
133
+ return [topic0];
134
+ }
135
+ const indexedInputsPerEvent = eventAbis.map((eventAbi) => ({
136
+ eventAbi,
137
+ inputs: eventAbi.inputs.filter((input) => input.indexed),
138
+ }));
139
+ for (const name of filterNames) {
140
+ // Every event must have this param indexed, at the same position and with the same type,
141
+ // otherwise the same topic slot would mean different things per event.
142
+ const found = indexedInputsPerEvent.map(({ eventAbi, inputs }) => {
143
+ const position = inputs.findIndex((input) => input.name === name);
144
+ return {
145
+ eventName: eventAbi.name,
146
+ position,
147
+ type: position === -1 ? undefined : inputs[position].type,
148
+ isNonIndexedParam: position === -1 && eventAbi.inputs.some((input) => input.name === name),
149
+ };
150
+ });
151
+ const missing = found.filter(({ position }) => position === -1);
152
+ if (missing.length !== 0) {
153
+ const reasons = missing
154
+ .map(({ eventName, isNonIndexedParam }) => `${eventName} (${isNonIndexedParam ? 'not indexed' : 'no such param'})`)
155
+ .join(', ');
156
+ throw new Error(`Cannot filter on "${name}": it is not an indexed param of every queried event. Missing in: ${reasons}. ` +
157
+ `Only params shared by all events can be filtered, since eth_getLogs topics are positional.`);
158
+ }
159
+ const positions = [...new Set(found.map(({ position }) => position))];
160
+ if (positions.length !== 1) {
161
+ const perEvent = found.map(({ eventName, position }) => `${eventName}: #${position + 1}`).join(', ');
162
+ throw new Error(`Cannot filter on "${name}": it is not the same indexed param position in every queried event (${perEvent}). ` +
163
+ `A topic slot is positional, so it must line up across all events.`);
164
+ }
165
+ const types = [...new Set(found.map(({ type }) => type))];
166
+ if (types.length !== 1) {
167
+ const perEvent = found.map(({ eventName, type }) => `${eventName}: ${type}`).join(', ');
168
+ throw new Error(`Cannot filter on "${name}": its type differs between the queried events (${perEvent}).`);
169
+ }
170
+ }
171
+ // Positions were just verified to be identical across all events, so encoding against the first
172
+ // event gives the topics for all of them.
173
+ const [, ...argTopics] = encodeEventTopics({
174
+ abi: [eventAbis[0]],
175
+ eventName: eventAbis[0].name,
176
+ args: sharedEventFilterArgs,
177
+ });
178
+ // Trailing nulls are just "match anything", no need to send them.
179
+ while (argTopics.length !== 0 && argTopics[argTopics.length - 1] === null) {
180
+ argTopics.pop();
181
+ }
182
+ return [topic0, ...argTopics];
183
+ }
184
+ /**
185
+ * Walks the block range in chunks, calling queryChunk per chunk, and applies
186
+ * postQueryFilter / maxEvents. Shared by the single and multi event queries.
187
+ *
188
+ * TODO: optional concurrency (bounded worker pool over the chunk indices, default 1 so nothing
189
+ * changes for whoever doesn't opt in). Chunks are independent, so this is close to a linear speedup
190
+ * up to whatever ceiling applies:
191
+ *
192
+ * - self hosters (biggest win by far): no rate limit at all, the ceiling is NVMe queue depth and
193
+ * cores. Erigon/reth resolve a chunk from their inverted log index (bitmap of blocks per topic),
194
+ * so the per chunk cost is mostly materializing receipts for matched blocks, which parallelizes
195
+ * fine. Bump chunkSize way up too, the provider result caps below don't exist locally.
196
+ * - paid RPCs (still worth it, just capped): providers meter *throughput*, not concurrency, so
197
+ * sequential scanning leaves most of the budget unused. Infura bills eth_getLogs at 255 credits
198
+ * against a per second credit ceiling (2k/s free, up to 40k/s on higher plans), Alchemy meters
199
+ * CUPS (330 free, 10k on PAYG, and it lets you burst above your tier on elastic capacity).
200
+ * Little's law gives the in flight budget: creditsPerSecond * avgLatency / costPerRequest, so
201
+ * Infura free at ~500ms per call is only ~4 in flight, a Team plan is ~78. Past that it's 429s.
202
+ * - free/public RPCs: don't. That's what the default of 1 is for.
203
+ *
204
+ * Two things to get right when implementing:
205
+ * - maxEvents early stop: in flight chunks overshoot before the stop is noticed. Harmless forwards,
206
+ * but in reverseOrder the results have to be stitched back in block order before slicing.
207
+ * - retries: concurrency turns a rate limit into 429s on several chunks at once, so it needs
208
+ * per chunk backoff to not just fail the whole scan.
209
+ */
210
+ async function scanInChunks({ publicClient, queryChunk, firstBlock, lastBlock, reverseOrder, maxEvents, chunkSize, postQueryFilter, }) {
211
+ lastBlock ??= await publicClient.getBlockNumber();
212
+ let allEvents = [];
213
+ let done = false;
214
+ const scanLogic = async (index) => {
215
+ const start = firstBlock + index * chunkSize;
216
+ const stop = minBigInt(start + chunkSize - 1n, lastBlock);
217
+ return [(await queryChunk(start, stop)), start, stop];
218
+ };
219
+ const range = lastBlock - firstBlock + 1n;
220
+ const numIters = Math.ceil(Number(range) / Number(chunkSize));
221
+ if (reverseOrder) {
222
+ for (let index = BigInt(numIters - 1); index >= 0n; index--) {
223
+ const [events, firstBlock, lastBlock] = await scanLogic(index);
224
+ allEvents = [...events, ...allEvents];
225
+ if (postQueryFilter) {
226
+ [allEvents, done] = postQueryFilter(allEvents, events, firstBlock, lastBlock);
227
+ }
228
+ allEvents = allEvents.slice(-maxEvents);
229
+ if (done || allEvents.length >= maxEvents) {
230
+ console.log(`stopped scanning at chunk ${index}/${numIters - 1}`);
231
+ break;
232
+ }
233
+ ;
234
+ }
235
+ }
236
+ else {
237
+ for (let index = 0n; index < BigInt(numIters); index++) {
238
+ const [events, firstBlock, lastBlock] = await scanLogic(index);
239
+ allEvents = [...allEvents, ...events];
240
+ if (postQueryFilter) {
241
+ [allEvents, done] = postQueryFilter(allEvents, events, firstBlock, lastBlock);
242
+ }
243
+ allEvents = allEvents.slice(0, maxEvents);
244
+ if (done || allEvents.length >= maxEvents) {
245
+ console.log(`stopped scanning at chunk ${index}/${numIters - 1}`);
246
+ break;
247
+ }
248
+ ;
249
+ }
250
+ }
251
+ return allEvents;
252
+ }
253
+ //# sourceMappingURL=eventScanning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventScanning.js","sourceRoot":"","sources":["../src/eventScanning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./Trees.js";
2
+ export * from "./config.js";
3
+ export * from "./interfaceId.js";
4
+ export * from "./abis.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./Trees.js";
2
+ export * from "./config.js";
3
+ export * from "./interfaceId.js";
4
+ export * from "./abis.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type Abi, type Address, type Hex, type PublicClient } from "viem";
2
+ /**
3
+ * ERC-165 interface id (`type(I).interfaceId`) for a Solidity interface, computed from its
4
+ * ABI: the XOR of the interface's function selectors. Pass an artifact's `.abi` straight in.
5
+ *
6
+ * A compiled ABI flattens every inherited function in, but Solidity excludes inherited
7
+ * functions from `type(I).interfaceId`. So `excludeFunctionsOf` lets you subtract functions
8
+ * that belong to a base — pass the base interface's ABI(s) and their functions are removed
9
+ * before the XOR. The common case is an interface that extends another (e.g.
10
+ * `IFatIMTReadableStorage is IFatIMTReadableEvent` → pass the event ABI); a plain interface
11
+ * extending only `IERC165` needs nothing, since `supportsInterface` is always excluded.
12
+ *
13
+ * @param abi the interface's ABI (e.g. `artifact.abi`)
14
+ * @param excludeFunctionsOf ABIs whose functions to subtract first — typically the base
15
+ * interface(s) `abi` inherits; `IERC165` is already handled
16
+ */
17
+ export declare function getInterfaceId(abi: Abi, excludeFunctionsOf?: readonly Abi[]): Hex;
18
+ /**
19
+ * The ERC-165 `supportsInterface(bytes4)` function. Its selector (`0x01ffc9a7`) and signature
20
+ * are fixed by the standard, so this ABI is identical on every ERC-165 contract.
21
+ */
22
+ export declare const SUPPORTS_INTERFACE_ABI: readonly [{
23
+ readonly type: "function";
24
+ readonly name: "supportsInterface";
25
+ readonly stateMutability: "view";
26
+ readonly inputs: readonly [{
27
+ readonly name: "interfaceId";
28
+ readonly type: "bytes4";
29
+ }];
30
+ readonly outputs: readonly [{
31
+ readonly name: "";
32
+ readonly type: "bool";
33
+ }];
34
+ }];
35
+ /** Whether `address` reports support for `interfaceId` via ERC-165 `supportsInterface`. */
36
+ export declare function supportsInterface(client: PublicClient, address: Address, interfaceId: Hex): Promise<boolean>;
37
+ /**
38
+ * Probe a contract for a batch of ERC-165 interfaces at once. Give it a map of your own
39
+ * labels to interface ids (e.g. `{ erc721: "0x80ac58cd", metadata: "0x5b5e139f" }`) and it
40
+ * returns the same labels mapped to whether the contract reports support. All queries run
41
+ * concurrently.
42
+ *
43
+ * @param client viem public client to read with
44
+ * @param address address of the (deployed) contract to probe
45
+ * @param interfaceIds map of caller-chosen labels to the interface ids to check
46
+ */
47
+ export declare function detectSupportedInterfaces<K extends string>(client: PublicClient, address: Address, interfaceIds: Record<K, Hex>): Promise<Record<K, boolean>>;
48
+ //# sourceMappingURL=interfaceId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaceId.d.ts","sourceRoot":"","sources":["../src/interfaceId.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,GAAG,EAAoB,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC;AASxH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,GAAE,SAAS,GAAG,EAAO,GAAG,GAAG,CAQrF;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAQX,CAAC;AAEzB,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5G;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,SAAS,MAAM,EAC5D,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAI7B"}
@@ -0,0 +1,70 @@
1
+ import { toFunctionSelector, toHex } from "viem";
2
+ /** Function selectors of an ABI, excluding ERC-165's own `supportsInterface`. */
3
+ function interfaceSelectors(abi) {
4
+ return abi
5
+ .filter((item) => item.type === "function" && item.name !== "supportsInterface")
6
+ .map((fn) => toFunctionSelector(fn));
7
+ }
8
+ /**
9
+ * ERC-165 interface id (`type(I).interfaceId`) for a Solidity interface, computed from its
10
+ * ABI: the XOR of the interface's function selectors. Pass an artifact's `.abi` straight in.
11
+ *
12
+ * A compiled ABI flattens every inherited function in, but Solidity excludes inherited
13
+ * functions from `type(I).interfaceId`. So `excludeFunctionsOf` lets you subtract functions
14
+ * that belong to a base — pass the base interface's ABI(s) and their functions are removed
15
+ * before the XOR. The common case is an interface that extends another (e.g.
16
+ * `IFatIMTReadableStorage is IFatIMTReadableEvent` → pass the event ABI); a plain interface
17
+ * extending only `IERC165` needs nothing, since `supportsInterface` is always excluded.
18
+ *
19
+ * @param abi the interface's ABI (e.g. `artifact.abi`)
20
+ * @param excludeFunctionsOf ABIs whose functions to subtract first — typically the base
21
+ * interface(s) `abi` inherits; `IERC165` is already handled
22
+ */
23
+ export function getInterfaceId(abi, excludeFunctionsOf = []) {
24
+ const excluded = new Set(excludeFunctionsOf.flatMap(interfaceSelectors));
25
+ let id = 0n;
26
+ for (const selector of interfaceSelectors(abi)) {
27
+ if (excluded.has(selector))
28
+ continue;
29
+ id ^= BigInt(selector);
30
+ }
31
+ return toHex(id, { size: 4 });
32
+ }
33
+ /**
34
+ * The ERC-165 `supportsInterface(bytes4)` function. Its selector (`0x01ffc9a7`) and signature
35
+ * are fixed by the standard, so this ABI is identical on every ERC-165 contract.
36
+ */
37
+ export const SUPPORTS_INTERFACE_ABI = [
38
+ {
39
+ type: "function",
40
+ name: "supportsInterface",
41
+ stateMutability: "view",
42
+ inputs: [{ name: "interfaceId", type: "bytes4" }],
43
+ outputs: [{ name: "", type: "bool" }],
44
+ },
45
+ ];
46
+ /** Whether `address` reports support for `interfaceId` via ERC-165 `supportsInterface`. */
47
+ export function supportsInterface(client, address, interfaceId) {
48
+ return client.readContract({
49
+ address,
50
+ abi: SUPPORTS_INTERFACE_ABI,
51
+ functionName: "supportsInterface",
52
+ args: [interfaceId],
53
+ });
54
+ }
55
+ /**
56
+ * Probe a contract for a batch of ERC-165 interfaces at once. Give it a map of your own
57
+ * labels to interface ids (e.g. `{ erc721: "0x80ac58cd", metadata: "0x5b5e139f" }`) and it
58
+ * returns the same labels mapped to whether the contract reports support. All queries run
59
+ * concurrently.
60
+ *
61
+ * @param client viem public client to read with
62
+ * @param address address of the (deployed) contract to probe
63
+ * @param interfaceIds map of caller-chosen labels to the interface ids to check
64
+ */
65
+ export async function detectSupportedInterfaces(client, address, interfaceIds) {
66
+ const labels = Object.keys(interfaceIds);
67
+ const supported = await Promise.all(labels.map((label) => supportsInterface(client, address, interfaceIds[label])));
68
+ return Object.fromEntries(labels.map((label, i) => [label, supported[i]]));
69
+ }
70
+ //# sourceMappingURL=interfaceId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaceId.js","sourceRoot":"","sources":["../src/interfaceId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAyE,MAAM,MAAM,CAAC;AAExH,iFAAiF;AACjF,SAAS,kBAAkB,CAAC,GAAQ;IAChC,OAAO,GAAG;SACL,MAAM,CAAC,CAAC,IAAI,EAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC;SACpG,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,GAAQ,EAAE,qBAAqC,EAAE;IAC5E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzE,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,MAAM,QAAQ,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QACrC,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC;QACI,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,mBAAmB;QACzB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACxC;CACmB,CAAC;AAEzB,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,OAAgB,EAAE,WAAgB;IACtF,OAAO,MAAM,CAAC,YAAY,CAAC;QACvB,OAAO;QACP,GAAG,EAAE,sBAAsB;QAC3B,YAAY,EAAE,mBAAmB;QACjC,IAAI,EAAE,CAAC,WAAW,CAAC;KACtB,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,MAAoB,EACpB,OAAgB,EAChB,YAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAQ,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpH,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAC;AACrG,CAAC"}