ponder 0.14.13 → 0.15.0
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.
- package/CHANGELOG.md +16 -0
- package/dist/esm/bin/commands/createViews.js +28 -11
- package/dist/esm/bin/commands/createViews.js.map +1 -1
- package/dist/esm/bin/commands/dev.js +42 -22
- package/dist/esm/bin/commands/dev.js.map +1 -1
- package/dist/esm/bin/commands/prune.js +3 -0
- package/dist/esm/bin/commands/prune.js.map +1 -1
- package/dist/esm/bin/commands/serve.js +4 -1
- package/dist/esm/bin/commands/serve.js.map +1 -1
- package/dist/esm/bin/commands/start.js +18 -6
- package/dist/esm/bin/commands/start.js.map +1 -1
- package/dist/esm/bin/isolatedController.js +200 -0
- package/dist/esm/bin/isolatedController.js.map +1 -0
- package/dist/esm/bin/isolatedWorker.js +146 -0
- package/dist/esm/bin/isolatedWorker.js.map +1 -0
- package/dist/esm/build/config.js +322 -402
- package/dist/esm/build/config.js.map +1 -1
- package/dist/esm/build/index.js +8 -11
- package/dist/esm/build/index.js.map +1 -1
- package/dist/esm/build/pre.js +1 -4
- package/dist/esm/build/pre.js.map +1 -1
- package/dist/esm/build/schema.js +25 -3
- package/dist/esm/build/schema.js.map +1 -1
- package/dist/esm/client/index.js +306 -42
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/database/actions.js +264 -104
- package/dist/esm/database/actions.js.map +1 -1
- package/dist/esm/database/index.js +39 -33
- package/dist/esm/database/index.js.map +1 -1
- package/dist/esm/database/queryBuilder.js +1 -0
- package/dist/esm/database/queryBuilder.js.map +1 -1
- package/dist/esm/drizzle/index.js +11 -7
- package/dist/esm/drizzle/index.js.map +1 -1
- package/dist/esm/drizzle/onchain.js +18 -0
- package/dist/esm/drizzle/onchain.js.map +1 -1
- package/dist/esm/indexing/client.js +32 -25
- package/dist/esm/indexing/client.js.map +1 -1
- package/dist/esm/indexing/index.js +110 -178
- package/dist/esm/indexing/index.js.map +1 -1
- package/dist/esm/indexing/profile.js +1 -1
- package/dist/esm/indexing/profile.js.map +1 -1
- package/dist/esm/indexing-store/cache.js +196 -274
- package/dist/esm/indexing-store/cache.js.map +1 -1
- package/dist/esm/indexing-store/historical.js +17 -13
- package/dist/esm/indexing-store/historical.js.map +1 -1
- package/dist/esm/indexing-store/index.js +10 -1
- package/dist/esm/indexing-store/index.js.map +1 -1
- package/dist/esm/indexing-store/profile.js +3 -3
- package/dist/esm/indexing-store/profile.js.map +1 -1
- package/dist/esm/indexing-store/realtime.js +27 -2
- package/dist/esm/indexing-store/realtime.js.map +1 -1
- package/dist/esm/internal/errors.js +28 -0
- package/dist/esm/internal/errors.js.map +1 -1
- package/dist/esm/internal/metrics.js +279 -82
- package/dist/esm/internal/metrics.js.map +1 -1
- package/dist/esm/internal/options.js +1 -0
- package/dist/esm/internal/options.js.map +1 -1
- package/dist/esm/internal/telemetry.js +1 -1
- package/dist/esm/internal/telemetry.js.map +1 -1
- package/dist/esm/rpc/http.js +130 -0
- package/dist/esm/rpc/http.js.map +1 -0
- package/dist/esm/rpc/index.js +38 -7
- package/dist/esm/rpc/index.js.map +1 -1
- package/dist/esm/runtime/events.js +179 -212
- package/dist/esm/runtime/events.js.map +1 -1
- package/dist/esm/runtime/filter.js +71 -0
- package/dist/esm/runtime/filter.js.map +1 -1
- package/dist/esm/runtime/fragments.js +78 -73
- package/dist/esm/runtime/fragments.js.map +1 -1
- package/dist/esm/runtime/historical.js +306 -130
- package/dist/esm/runtime/historical.js.map +1 -1
- package/dist/esm/runtime/index.js +183 -58
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/isolated.js +462 -0
- package/dist/esm/runtime/isolated.js.map +1 -0
- package/dist/esm/runtime/multichain.js +80 -73
- package/dist/esm/runtime/multichain.js.map +1 -1
- package/dist/esm/runtime/omnichain.js +82 -75
- package/dist/esm/runtime/omnichain.js.map +1 -1
- package/dist/esm/runtime/realtime.js +198 -66
- package/dist/esm/runtime/realtime.js.map +1 -1
- package/dist/esm/sync-historical/index.js +416 -457
- package/dist/esm/sync-historical/index.js.map +1 -1
- package/dist/esm/sync-realtime/bloom.js +3 -3
- package/dist/esm/sync-realtime/bloom.js.map +1 -1
- package/dist/esm/sync-realtime/index.js +27 -46
- package/dist/esm/sync-realtime/index.js.map +1 -1
- package/dist/esm/sync-store/index.js +112 -63
- package/dist/esm/sync-store/index.js.map +1 -1
- package/dist/esm/utils/abi.js +20 -32
- package/dist/esm/utils/abi.js.map +1 -1
- package/dist/esm/utils/chunk.js +8 -0
- package/dist/esm/utils/chunk.js.map +1 -0
- package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
- package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
- package/dist/esm/{client/parse.js → utils/sql-parse.js} +94 -80
- package/dist/esm/utils/sql-parse.js.map +1 -0
- package/dist/types/bin/commands/createViews.d.ts.map +1 -1
- package/dist/types/bin/commands/dev.d.ts.map +1 -1
- package/dist/types/bin/commands/prune.d.ts.map +1 -1
- package/dist/types/bin/commands/serve.d.ts.map +1 -1
- package/dist/types/bin/commands/start.d.ts.map +1 -1
- package/dist/types/bin/isolatedController.d.ts +13 -0
- package/dist/types/bin/isolatedController.d.ts.map +1 -0
- package/dist/types/bin/isolatedWorker.d.ts +9 -0
- package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
- package/dist/types/build/config.d.ts +29 -11
- package/dist/types/build/config.d.ts.map +1 -1
- package/dist/types/build/index.d.ts +3 -2
- package/dist/types/build/index.d.ts.map +1 -1
- package/dist/types/build/pre.d.ts +1 -1
- package/dist/types/build/pre.d.ts.map +1 -1
- package/dist/types/build/schema.d.ts +5 -3
- package/dist/types/build/schema.d.ts.map +1 -1
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/index.d.ts.map +1 -1
- package/dist/types/config/index.d.ts +3 -3
- package/dist/types/config/index.d.ts.map +1 -1
- package/dist/types/database/actions.d.ts +53 -7
- package/dist/types/database/actions.d.ts.map +1 -1
- package/dist/types/database/index.d.ts +21 -21
- package/dist/types/database/index.d.ts.map +1 -1
- package/dist/types/database/queryBuilder.d.ts.map +1 -1
- package/dist/types/drizzle/index.d.ts +4 -5
- package/dist/types/drizzle/index.d.ts.map +1 -1
- package/dist/types/drizzle/onchain.d.ts +6 -0
- package/dist/types/drizzle/onchain.d.ts.map +1 -1
- package/dist/types/indexing/client.d.ts.map +1 -1
- package/dist/types/indexing/index.d.ts +2 -5
- package/dist/types/indexing/index.d.ts.map +1 -1
- package/dist/types/indexing-store/cache.d.ts +3 -2
- package/dist/types/indexing-store/cache.d.ts.map +1 -1
- package/dist/types/indexing-store/historical.d.ts +2 -1
- package/dist/types/indexing-store/historical.d.ts.map +1 -1
- package/dist/types/indexing-store/index.d.ts +1 -0
- package/dist/types/indexing-store/index.d.ts.map +1 -1
- package/dist/types/indexing-store/realtime.d.ts +2 -1
- package/dist/types/indexing-store/realtime.d.ts.map +1 -1
- package/dist/types/internal/errors.d.ts +5 -0
- package/dist/types/internal/errors.d.ts.map +1 -1
- package/dist/types/internal/metrics.d.ts +21 -0
- package/dist/types/internal/metrics.d.ts.map +1 -1
- package/dist/types/internal/options.d.ts +2 -0
- package/dist/types/internal/options.d.ts.map +1 -1
- package/dist/types/internal/types.d.ts +66 -58
- package/dist/types/internal/types.d.ts.map +1 -1
- package/dist/types/rpc/http.d.ts +17 -0
- package/dist/types/rpc/http.d.ts.map +1 -0
- package/dist/types/rpc/index.d.ts.map +1 -1
- package/dist/types/runtime/events.d.ts +4 -4
- package/dist/types/runtime/events.d.ts.map +1 -1
- package/dist/types/runtime/filter.d.ts +5 -1
- package/dist/types/runtime/filter.d.ts.map +1 -1
- package/dist/types/runtime/fragments.d.ts +4 -3
- package/dist/types/runtime/fragments.d.ts.map +1 -1
- package/dist/types/runtime/historical.d.ts +29 -13
- package/dist/types/runtime/historical.d.ts.map +1 -1
- package/dist/types/runtime/index.d.ts +49 -6
- package/dist/types/runtime/index.d.ts.map +1 -1
- package/dist/types/runtime/init.d.ts +5 -5
- package/dist/types/runtime/init.d.ts.map +1 -1
- package/dist/types/runtime/isolated.d.ts +14 -0
- package/dist/types/runtime/isolated.d.ts.map +1 -0
- package/dist/types/runtime/multichain.d.ts.map +1 -1
- package/dist/types/runtime/omnichain.d.ts.map +1 -1
- package/dist/types/runtime/realtime.d.ts +21 -10
- package/dist/types/runtime/realtime.d.ts.map +1 -1
- package/dist/types/sync-historical/index.d.ts +18 -8
- package/dist/types/sync-historical/index.d.ts.map +1 -1
- package/dist/types/sync-realtime/bloom.d.ts.map +1 -1
- package/dist/types/sync-realtime/index.d.ts +2 -2
- package/dist/types/sync-realtime/index.d.ts.map +1 -1
- package/dist/types/sync-store/index.d.ts +9 -9
- package/dist/types/sync-store/index.d.ts.map +1 -1
- package/dist/types/utils/abi.d.ts +3 -34
- package/dist/types/utils/abi.d.ts.map +1 -1
- package/dist/types/utils/chunk.d.ts +2 -0
- package/dist/types/utils/chunk.d.ts.map +1 -0
- package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
- package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
- package/dist/types/utils/sql-parse.d.ts +21 -0
- package/dist/types/utils/sql-parse.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/bin/commands/createViews.ts +35 -15
- package/src/bin/commands/dev.ts +43 -21
- package/src/bin/commands/prune.ts +6 -0
- package/src/bin/commands/serve.ts +4 -1
- package/src/bin/commands/start.ts +20 -5
- package/src/bin/isolatedController.ts +300 -0
- package/src/bin/isolatedWorker.ts +192 -0
- package/src/build/config.ts +570 -632
- package/src/build/index.ts +14 -14
- package/src/build/pre.ts +1 -4
- package/src/build/schema.ts +49 -4
- package/src/client/index.ts +386 -48
- package/src/config/index.ts +3 -3
- package/src/database/actions.ts +469 -120
- package/src/database/index.ts +85 -58
- package/src/database/queryBuilder.ts +1 -0
- package/src/drizzle/index.ts +15 -7
- package/src/drizzle/onchain.ts +19 -0
- package/src/indexing/client.ts +38 -25
- package/src/indexing/index.ts +137 -230
- package/src/indexing/profile.ts +1 -1
- package/src/indexing-store/cache.ts +285 -414
- package/src/indexing-store/historical.ts +20 -10
- package/src/indexing-store/index.ts +16 -0
- package/src/indexing-store/profile.ts +3 -3
- package/src/indexing-store/realtime.ts +28 -0
- package/src/internal/errors.ts +26 -0
- package/src/internal/metrics.ts +341 -111
- package/src/internal/options.ts +4 -0
- package/src/internal/telemetry.ts +1 -1
- package/src/internal/types.ts +70 -87
- package/src/rpc/http.ts +164 -0
- package/src/rpc/index.ts +39 -7
- package/src/runtime/events.ts +195 -240
- package/src/runtime/filter.ts +85 -1
- package/src/runtime/fragments.ts +109 -113
- package/src/runtime/historical.ts +467 -189
- package/src/runtime/index.ts +337 -69
- package/src/runtime/init.ts +5 -5
- package/src/runtime/isolated.ts +768 -0
- package/src/runtime/multichain.ts +137 -102
- package/src/runtime/omnichain.ts +138 -106
- package/src/runtime/realtime.ts +322 -123
- package/src/sync-historical/index.ts +556 -692
- package/src/sync-realtime/bloom.ts +7 -3
- package/src/sync-realtime/index.ts +31 -46
- package/src/sync-store/index.ts +189 -95
- package/src/utils/abi.ts +33 -90
- package/src/utils/chunk.ts +7 -0
- package/src/utils/promiseAllSettledWithThrow.ts +27 -0
- package/src/{client/parse.ts → utils/sql-parse.ts} +100 -90
- package/dist/esm/client/parse.js.map +0 -1
- package/dist/types/client/parse.d.ts +0 -14
- package/dist/types/client/parse.d.ts.map +0 -1
package/src/runtime/fragments.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
BlockFilter,
|
|
3
3
|
Factory,
|
|
4
|
+
Filter,
|
|
4
5
|
FilterAddress,
|
|
5
|
-
FilterWithoutBlocks,
|
|
6
6
|
Fragment,
|
|
7
7
|
FragmentAddress,
|
|
8
8
|
FragmentAddressId,
|
|
@@ -24,9 +24,12 @@ export const isFragmentAddressFactory = (
|
|
|
24
24
|
return true;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
type FragmentReturnType = {
|
|
28
|
+
fragment: Fragment;
|
|
29
|
+
adjacentIds: FragmentId[];
|
|
30
|
+
}[];
|
|
31
|
+
|
|
32
|
+
export const getFragments = (filter: Filter): FragmentReturnType => {
|
|
30
33
|
switch (filter.type) {
|
|
31
34
|
case "block":
|
|
32
35
|
return getBlockFilterFragment(filter as BlockFilter);
|
|
@@ -41,10 +44,25 @@ export const getFragments = (
|
|
|
41
44
|
}
|
|
42
45
|
};
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
export const getFactoryFragments = (factory: Factory): Fragment[] => {
|
|
48
|
+
const fragments: Fragment[] = [];
|
|
49
|
+
|
|
50
|
+
for (const fragmentAddress of Array.isArray(factory.address)
|
|
51
|
+
? factory.address
|
|
52
|
+
: [factory.address]) {
|
|
53
|
+
const fragment = {
|
|
54
|
+
type: "factory_log",
|
|
55
|
+
chainId: factory.chainId,
|
|
56
|
+
address: fragmentAddress,
|
|
57
|
+
eventSelector: factory.eventSelector,
|
|
58
|
+
childAddressLocation: factory.childAddressLocation,
|
|
59
|
+
} satisfies Fragment;
|
|
60
|
+
|
|
61
|
+
fragments.push(fragment);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return fragments;
|
|
65
|
+
};
|
|
48
66
|
|
|
49
67
|
export const getAddressFragments = (
|
|
50
68
|
address: Address | Address[] | Factory | undefined,
|
|
@@ -158,38 +176,30 @@ export const getTraceFilterFragments = ({
|
|
|
158
176
|
|
|
159
177
|
for (const fromAddressFragment of fromAddressFragments) {
|
|
160
178
|
for (const toAddressFragment of toAddressFragments) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
for (const adjacentTxr of filter.hasTransactionReceipt
|
|
181
|
-
? [1]
|
|
182
|
-
: [0, 1]) {
|
|
183
|
-
adjacentIds.push(
|
|
184
|
-
`trace_${chainId}_${fromAddressAdjacentId}_${toAddressAdjacentId}_${adjacentFunctionSelector}_${adjacentTxr as 0 | 1}`,
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
179
|
+
const fragment = {
|
|
180
|
+
type: "trace",
|
|
181
|
+
chainId,
|
|
182
|
+
fromAddress: fromAddressFragment.fragment,
|
|
183
|
+
toAddress: toAddressFragment.fragment,
|
|
184
|
+
functionSelector,
|
|
185
|
+
includeTransactionReceipts: filter.hasTransactionReceipt,
|
|
186
|
+
} satisfies Fragment;
|
|
187
|
+
|
|
188
|
+
const adjacentIds: FragmentId[] = [];
|
|
189
|
+
|
|
190
|
+
for (const fromAddressAdjacentId of fromAddressFragment.adjacentIds) {
|
|
191
|
+
for (const toAddressAdjacentId of toAddressFragment.adjacentIds) {
|
|
192
|
+
for (const adjacentTxr of filter.hasTransactionReceipt
|
|
193
|
+
? [1]
|
|
194
|
+
: [0, 1]) {
|
|
195
|
+
adjacentIds.push(
|
|
196
|
+
`trace_${chainId}_${fromAddressAdjacentId}_${toAddressAdjacentId}_${functionSelector}_${adjacentTxr as 0 | 1}`,
|
|
197
|
+
);
|
|
188
198
|
}
|
|
189
199
|
}
|
|
190
|
-
|
|
191
|
-
fragments.push({ fragment, adjacentIds });
|
|
192
200
|
}
|
|
201
|
+
|
|
202
|
+
fragments.push({ fragment, adjacentIds });
|
|
193
203
|
}
|
|
194
204
|
}
|
|
195
205
|
|
|
@@ -207,57 +217,50 @@ export const getLogFilterFragments = ({
|
|
|
207
217
|
}: Omit<LogFilter, "fromBlock" | "toBlock">): FragmentReturnType => {
|
|
208
218
|
const fragments: FragmentReturnType = [];
|
|
209
219
|
const addressFragments = getAddressFragments(address);
|
|
220
|
+
const eventSelector = topic0;
|
|
210
221
|
|
|
211
222
|
for (const addressFragment of addressFragments) {
|
|
212
|
-
for (const
|
|
213
|
-
for (const
|
|
214
|
-
for (const
|
|
215
|
-
?
|
|
216
|
-
: [
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
for (const
|
|
235
|
-
? [
|
|
223
|
+
for (const fragmentTopic1 of Array.isArray(topic1) ? topic1 : [topic1]) {
|
|
224
|
+
for (const fragmentTopic2 of Array.isArray(topic2) ? topic2 : [topic2]) {
|
|
225
|
+
for (const fragmentTopic3 of Array.isArray(topic3)
|
|
226
|
+
? topic3
|
|
227
|
+
: [topic3]) {
|
|
228
|
+
const fragment = {
|
|
229
|
+
type: "log",
|
|
230
|
+
chainId,
|
|
231
|
+
address: addressFragment.fragment,
|
|
232
|
+
topic0: eventSelector,
|
|
233
|
+
topic1: fragmentTopic1 ?? null,
|
|
234
|
+
topic2: fragmentTopic2 ?? null,
|
|
235
|
+
topic3: fragmentTopic3 ?? null,
|
|
236
|
+
includeTransactionReceipts: filter.hasTransactionReceipt,
|
|
237
|
+
} satisfies Fragment;
|
|
238
|
+
|
|
239
|
+
const adjacentIds: FragmentId[] = [];
|
|
240
|
+
|
|
241
|
+
for (const addressAdjacentId of addressFragment.adjacentIds) {
|
|
242
|
+
for (const adjacentTopic1 of fragmentTopic1
|
|
243
|
+
? [fragmentTopic1, null]
|
|
244
|
+
: [null]) {
|
|
245
|
+
for (const adjacentTopic2 of fragmentTopic2
|
|
246
|
+
? [fragmentTopic2, null]
|
|
236
247
|
: [null]) {
|
|
237
|
-
for (const
|
|
238
|
-
? [
|
|
248
|
+
for (const adjacentTopic3 of fragmentTopic3
|
|
249
|
+
? [fragmentTopic3, null]
|
|
239
250
|
: [null]) {
|
|
240
|
-
for (const
|
|
241
|
-
? [
|
|
242
|
-
: [
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
for (const adjacentTxr of filter.hasTransactionReceipt
|
|
247
|
-
? [1]
|
|
248
|
-
: [0, 1]) {
|
|
249
|
-
adjacentIds.push(
|
|
250
|
-
`log_${chainId}_${addressAdjacentId}_${adjacentTopic0}_${adjacentTopic1}_${adjacentTopic2}_${adjacentTopic3}_${adjacentTxr as 0 | 1}`,
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
251
|
+
for (const adjacentTxr of filter.hasTransactionReceipt
|
|
252
|
+
? [1]
|
|
253
|
+
: [0, 1]) {
|
|
254
|
+
adjacentIds.push(
|
|
255
|
+
`log_${chainId}_${addressAdjacentId}_${eventSelector}_${adjacentTopic1}_${adjacentTopic2}_${adjacentTopic3}_${adjacentTxr as 0 | 1}`,
|
|
256
|
+
);
|
|
254
257
|
}
|
|
255
258
|
}
|
|
256
259
|
}
|
|
257
260
|
}
|
|
258
|
-
|
|
259
|
-
fragments.push({ fragment, adjacentIds });
|
|
260
261
|
}
|
|
262
|
+
|
|
263
|
+
fragments.push({ fragment, adjacentIds });
|
|
261
264
|
}
|
|
262
265
|
}
|
|
263
266
|
}
|
|
@@ -329,6 +332,8 @@ export const encodeFragment = (fragment: Fragment): FragmentId => {
|
|
|
329
332
|
return `log_${fragment.chainId}_${fragmentAddressToId(fragment.address)}_${fragment.topic0}_${fragment.topic1}_${fragment.topic2}_${fragment.topic3}_${fragment.includeTransactionReceipts ? 1 : 0}`;
|
|
330
333
|
case "transfer":
|
|
331
334
|
return `transfer_${fragment.chainId}_${fragmentAddressToId(fragment.fromAddress)}_${fragmentAddressToId(fragment.toAddress)}_${fragment.includeTransactionReceipts ? 1 : 0}`;
|
|
335
|
+
case "factory_log":
|
|
336
|
+
return `factory_log_${fragment.chainId}_${fragment.address}_${fragment.eventSelector}_${fragment.childAddressLocation}`;
|
|
332
337
|
}
|
|
333
338
|
};
|
|
334
339
|
|
|
@@ -453,7 +458,7 @@ export const decodeFragment = (fragmentId: FragmentId): Fragment => {
|
|
|
453
458
|
type: "log",
|
|
454
459
|
chainId: Number(chainId),
|
|
455
460
|
address: fragmentAddress,
|
|
456
|
-
topic0: topic0
|
|
461
|
+
topic0: topic0 as Hex,
|
|
457
462
|
topic1: topic1! === "null" ? null : (topic1 as Hex),
|
|
458
463
|
topic2: topic2! === "null" ? null : (topic2 as Hex),
|
|
459
464
|
topic3: topic3! === "null" ? null : (topic3 as Hex),
|
|
@@ -468,7 +473,7 @@ export const decodeFragment = (fragmentId: FragmentId): Fragment => {
|
|
|
468
473
|
type: "log",
|
|
469
474
|
chainId: Number(chainId),
|
|
470
475
|
address: fragmentAddress,
|
|
471
|
-
topic0: topic0
|
|
476
|
+
topic0: topic0 as Hex,
|
|
472
477
|
topic1: topic1! === "null" ? null : (topic1 as Hex),
|
|
473
478
|
topic2: topic2! === "null" ? null : (topic2 as Hex),
|
|
474
479
|
topic3: topic3! === "null" ? null : (topic3 as Hex),
|
|
@@ -520,16 +525,29 @@ export const decodeFragment = (fragmentId: FragmentId): Fragment => {
|
|
|
520
525
|
includeTransactionReceipts: includeTxr === "1",
|
|
521
526
|
};
|
|
522
527
|
}
|
|
528
|
+
case "factory_log": {
|
|
529
|
+
const [, chainId, address, eventSelector, childAddressLocation] =
|
|
530
|
+
fragmentId.split("_");
|
|
531
|
+
return {
|
|
532
|
+
type: "factory_log",
|
|
533
|
+
chainId: Number(chainId),
|
|
534
|
+
address: address as Address,
|
|
535
|
+
eventSelector: eventSelector as Factory["eventSelector"],
|
|
536
|
+
childAddressLocation:
|
|
537
|
+
childAddressLocation as Factory["childAddressLocation"],
|
|
538
|
+
};
|
|
539
|
+
}
|
|
523
540
|
}
|
|
524
541
|
};
|
|
525
542
|
|
|
526
|
-
const recoverAddress = (
|
|
527
|
-
baseAddress:
|
|
543
|
+
const recoverAddress = <filterAddress extends FilterAddress>(
|
|
544
|
+
baseAddress: filterAddress,
|
|
528
545
|
fragmentAddresses: FragmentAddress[],
|
|
529
|
-
):
|
|
530
|
-
if (baseAddress === undefined) return undefined;
|
|
531
|
-
if (typeof baseAddress === "string") return baseAddress;
|
|
532
|
-
if (Array.isArray(baseAddress))
|
|
546
|
+
): filterAddress => {
|
|
547
|
+
if (baseAddress === undefined) return undefined as filterAddress;
|
|
548
|
+
if (typeof baseAddress === "string") return baseAddress as filterAddress;
|
|
549
|
+
if (Array.isArray(baseAddress))
|
|
550
|
+
return dedupe(fragmentAddresses) as filterAddress;
|
|
533
551
|
|
|
534
552
|
// Note: At this point, `baseAddress` is a factory. We explicitly don't try to recover the factory
|
|
535
553
|
// address from the fragments because we want a `insertChildAddresses` and `getChildAddresses` to
|
|
@@ -538,15 +556,6 @@ const recoverAddress = (
|
|
|
538
556
|
return baseAddress;
|
|
539
557
|
};
|
|
540
558
|
|
|
541
|
-
const recoverSelector = (
|
|
542
|
-
base: Hex | Hex[] | undefined,
|
|
543
|
-
fragments: (Hex | null)[],
|
|
544
|
-
): Hex | Hex[] | undefined => {
|
|
545
|
-
if (base === undefined) return undefined;
|
|
546
|
-
if (typeof base === "string") return base;
|
|
547
|
-
return dedupe(fragments) as Hex[];
|
|
548
|
-
};
|
|
549
|
-
|
|
550
559
|
const recoverTopic = (
|
|
551
560
|
base: Hex | Hex[] | null,
|
|
552
561
|
fragments: (Hex | null)[],
|
|
@@ -557,9 +566,9 @@ const recoverTopic = (
|
|
|
557
566
|
};
|
|
558
567
|
|
|
559
568
|
export const recoverFilter = (
|
|
560
|
-
baseFilter:
|
|
569
|
+
baseFilter: Filter,
|
|
561
570
|
fragments: Fragment[],
|
|
562
|
-
):
|
|
571
|
+
): Filter => {
|
|
563
572
|
switch (baseFilter.type) {
|
|
564
573
|
case "block": {
|
|
565
574
|
return baseFilter;
|
|
@@ -596,14 +605,7 @@ export const recoverFilter = (
|
|
|
596
605
|
(fragment) => fragment.toAddress,
|
|
597
606
|
),
|
|
598
607
|
),
|
|
599
|
-
functionSelector:
|
|
600
|
-
baseFilter.functionSelector,
|
|
601
|
-
fragments.map(
|
|
602
|
-
(fragment) =>
|
|
603
|
-
(fragment as Extract<Fragment, { type: "trace" }>)
|
|
604
|
-
.functionSelector,
|
|
605
|
-
),
|
|
606
|
-
),
|
|
608
|
+
functionSelector: baseFilter.functionSelector,
|
|
607
609
|
};
|
|
608
610
|
}
|
|
609
611
|
case "log": {
|
|
@@ -615,13 +617,7 @@ export const recoverFilter = (
|
|
|
615
617
|
(fragment) => fragment.address,
|
|
616
618
|
),
|
|
617
619
|
),
|
|
618
|
-
topic0:
|
|
619
|
-
baseFilter.topic0,
|
|
620
|
-
fragments.map(
|
|
621
|
-
(fragment) =>
|
|
622
|
-
(fragment as Extract<Fragment, { type: "log" }>).topic0,
|
|
623
|
-
),
|
|
624
|
-
),
|
|
620
|
+
topic0: baseFilter.topic0,
|
|
625
621
|
topic1: recoverTopic(
|
|
626
622
|
baseFilter.topic1,
|
|
627
623
|
fragments.map(
|