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
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { runCodegen } from "@/bin/utils/codegen.js";
|
|
2
1
|
import {
|
|
3
2
|
commitBlock,
|
|
4
3
|
createIndexes,
|
|
4
|
+
createLiveQueryTriggers,
|
|
5
5
|
createTriggers,
|
|
6
6
|
createViews,
|
|
7
|
+
dropLiveQueryTriggers,
|
|
7
8
|
dropTriggers,
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
finalizeMultichain,
|
|
10
|
+
revertMultichain,
|
|
10
11
|
} from "@/database/actions.js";
|
|
11
12
|
import {
|
|
12
13
|
type Database,
|
|
@@ -86,17 +87,15 @@ export async function runMultichain({
|
|
|
86
87
|
crashRecoveryCheckpoint: CrashRecoveryCheckpoint;
|
|
87
88
|
database: Database;
|
|
88
89
|
}) {
|
|
89
|
-
runCodegen({ common });
|
|
90
|
-
|
|
91
90
|
const columnAccessPattern = createColumnAccessPattern({
|
|
92
91
|
indexingBuild,
|
|
93
92
|
});
|
|
94
|
-
const syncStore = createSyncStore({ common, database });
|
|
93
|
+
const syncStore = createSyncStore({ common, qb: database.syncQB });
|
|
95
94
|
|
|
96
95
|
const PONDER_CHECKPOINT = getPonderCheckpointTable(namespaceBuild.schema);
|
|
97
96
|
const PONDER_META = getPonderMetaTable(namespaceBuild.schema);
|
|
98
97
|
|
|
99
|
-
|
|
98
|
+
const eventCount = getEventCount(indexingBuild.indexingFunctions);
|
|
100
99
|
|
|
101
100
|
const cachedViemClient = createCachedViemClient({
|
|
102
101
|
common,
|
|
@@ -122,7 +121,6 @@ export async function runMultichain({
|
|
|
122
121
|
common,
|
|
123
122
|
indexingBuild,
|
|
124
123
|
client: cachedViemClient,
|
|
125
|
-
eventCount,
|
|
126
124
|
indexingErrorHandler,
|
|
127
125
|
columnAccessPattern,
|
|
128
126
|
});
|
|
@@ -157,18 +155,17 @@ export async function runMultichain({
|
|
|
157
155
|
|
|
158
156
|
await Promise.all(
|
|
159
157
|
indexingBuild.chains.map(async (chain) => {
|
|
160
|
-
const
|
|
161
|
-
(
|
|
162
|
-
);
|
|
158
|
+
const eventCallbacks =
|
|
159
|
+
indexingBuild.eventCallbacks[indexingBuild.chains.indexOf(chain)]!;
|
|
163
160
|
|
|
164
161
|
const cachedIntervals = await getCachedIntervals({
|
|
165
162
|
chain,
|
|
166
|
-
|
|
163
|
+
filters: eventCallbacks.map(({ filter }) => filter),
|
|
167
164
|
syncStore,
|
|
168
165
|
});
|
|
169
166
|
const syncProgress = await initSyncProgress({
|
|
170
167
|
common,
|
|
171
|
-
|
|
168
|
+
filters: eventCallbacks.map(({ filter }) => filter),
|
|
172
169
|
chain,
|
|
173
170
|
rpc: indexingBuild.rpcs[indexingBuild.chains.indexOf(chain)]!,
|
|
174
171
|
finalizedBlock:
|
|
@@ -176,7 +173,7 @@ export async function runMultichain({
|
|
|
176
173
|
cachedIntervals,
|
|
177
174
|
});
|
|
178
175
|
const childAddresses = await getChildAddresses({
|
|
179
|
-
|
|
176
|
+
filters: eventCallbacks.map(({ filter }) => filter),
|
|
180
177
|
syncStore,
|
|
181
178
|
});
|
|
182
179
|
const unfinalizedBlocks: Omit<
|
|
@@ -302,14 +299,14 @@ export async function runMultichain({
|
|
|
302
299
|
// underlying metrics collection is actually synchronous
|
|
303
300
|
// https://github.com/siimon/prom-client/blob/master/lib/histogram.js#L102-L125
|
|
304
301
|
const { eta, progress } = await getAppProgress(common.metrics);
|
|
305
|
-
if (eta === undefined
|
|
302
|
+
if (eta === undefined && progress === undefined) {
|
|
306
303
|
return;
|
|
307
304
|
}
|
|
308
305
|
|
|
309
306
|
common.logger.info({
|
|
310
307
|
msg: "Updated backfill indexing progress",
|
|
311
|
-
progress: formatPercentage(progress),
|
|
312
|
-
estimate: formatEta(eta * 1_000),
|
|
308
|
+
progress: progress === undefined ? undefined : formatPercentage(progress),
|
|
309
|
+
estimate: eta === undefined ? undefined : formatEta(eta * 1_000),
|
|
313
310
|
});
|
|
314
311
|
}, 5_000);
|
|
315
312
|
|
|
@@ -331,7 +328,7 @@ export async function runMultichain({
|
|
|
331
328
|
indexingBuild,
|
|
332
329
|
crashRecoveryCheckpoint,
|
|
333
330
|
perChainSync,
|
|
334
|
-
|
|
331
|
+
database,
|
|
335
332
|
}),
|
|
336
333
|
(params) => {
|
|
337
334
|
common.metrics.ponder_historical_concurrency_group_duration.inc(
|
|
@@ -364,7 +361,9 @@ export async function runMultichain({
|
|
|
364
361
|
let endClock = startClock();
|
|
365
362
|
await database.userQB.transaction(
|
|
366
363
|
async (tx) => {
|
|
367
|
-
const
|
|
364
|
+
const initialCompletedEvents = structuredClone(
|
|
365
|
+
await common.metrics.ponder_indexing_completed_events.get(),
|
|
366
|
+
);
|
|
368
367
|
|
|
369
368
|
try {
|
|
370
369
|
historicalIndexingStore.qb = tx;
|
|
@@ -453,7 +452,12 @@ export async function runMultichain({
|
|
|
453
452
|
);
|
|
454
453
|
endClock = startClock();
|
|
455
454
|
} catch (error) {
|
|
456
|
-
|
|
455
|
+
for (const value of initialCompletedEvents.values) {
|
|
456
|
+
common.metrics.ponder_indexing_completed_events.set(
|
|
457
|
+
value.labels,
|
|
458
|
+
value.value,
|
|
459
|
+
);
|
|
460
|
+
}
|
|
457
461
|
indexingCache.invalidate();
|
|
458
462
|
indexingCache.clear();
|
|
459
463
|
|
|
@@ -526,7 +530,7 @@ export async function runMultichain({
|
|
|
526
530
|
),
|
|
527
531
|
);
|
|
528
532
|
common.metrics.ponder_indexing_timestamp.set(
|
|
529
|
-
|
|
533
|
+
label,
|
|
530
534
|
seconds[chain.name]!.end,
|
|
531
535
|
);
|
|
532
536
|
}
|
|
@@ -563,6 +567,7 @@ export async function runMultichain({
|
|
|
563
567
|
endClock = startClock();
|
|
564
568
|
|
|
565
569
|
await createTriggers(database.adminQB, { tables });
|
|
570
|
+
await createLiveQueryTriggers(database.adminQB, { namespaceBuild, tables });
|
|
566
571
|
|
|
567
572
|
common.logger.debug({
|
|
568
573
|
msg: "Created database triggers",
|
|
@@ -583,6 +588,8 @@ export async function runMultichain({
|
|
|
583
588
|
});
|
|
584
589
|
}
|
|
585
590
|
|
|
591
|
+
endClock = startClock();
|
|
592
|
+
|
|
586
593
|
await database.adminQB.wrap({ label: "update_ready" }, (db) =>
|
|
587
594
|
db
|
|
588
595
|
.update(PONDER_META)
|
|
@@ -616,7 +623,7 @@ export async function runMultichain({
|
|
|
616
623
|
common,
|
|
617
624
|
indexingBuild,
|
|
618
625
|
perChainSync,
|
|
619
|
-
|
|
626
|
+
database,
|
|
620
627
|
}),
|
|
621
628
|
100,
|
|
622
629
|
bufferCallback,
|
|
@@ -628,93 +635,113 @@ export async function runMultichain({
|
|
|
628
635
|
};
|
|
629
636
|
const endClock = startClock();
|
|
630
637
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
)
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
msg: "Processing block events",
|
|
651
|
-
chain: chain.name,
|
|
652
|
-
chain_id: chain.id,
|
|
653
|
-
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
654
|
-
event_count: events.length,
|
|
655
|
-
});
|
|
656
|
-
|
|
657
|
-
await indexing.processRealtimeEvents({
|
|
658
|
-
events,
|
|
659
|
-
db: realtimeIndexingStore,
|
|
660
|
-
});
|
|
638
|
+
await database.userQB.transaction(
|
|
639
|
+
async (tx) => {
|
|
640
|
+
if (database.userQB.$dialect === "postgres") {
|
|
641
|
+
await tx.wrap(
|
|
642
|
+
(tx) =>
|
|
643
|
+
tx.execute(
|
|
644
|
+
"CREATE TEMP TABLE live_query_tables (table_name TEXT PRIMARY KEY) ON COMMIT DROP",
|
|
645
|
+
),
|
|
646
|
+
context,
|
|
647
|
+
);
|
|
648
|
+
} else {
|
|
649
|
+
await tx.wrap(
|
|
650
|
+
(tx) =>
|
|
651
|
+
tx.execute(
|
|
652
|
+
"CREATE TEMP TABLE IF NOT EXISTS live_query_tables (table_name TEXT PRIMARY KEY)",
|
|
653
|
+
),
|
|
654
|
+
context,
|
|
655
|
+
);
|
|
656
|
+
}
|
|
661
657
|
|
|
662
|
-
|
|
663
|
-
|
|
658
|
+
// Events must be run block-by-block, so that `database.commitBlock` can accurately
|
|
659
|
+
// update the temporary `checkpoint` value set in the trigger.
|
|
660
|
+
for (const { checkpoint, events } of splitEvents(event.events)) {
|
|
661
|
+
const chain = indexingBuild.chains.find(
|
|
662
|
+
(chain) =>
|
|
663
|
+
chain.id === Number(decodeCheckpoint(checkpoint).chainId),
|
|
664
|
+
)!;
|
|
665
|
+
|
|
666
|
+
try {
|
|
667
|
+
realtimeIndexingStore.qb = tx;
|
|
668
|
+
realtimeIndexingStore.isProcessingEvents = true;
|
|
669
|
+
|
|
670
|
+
common.logger.trace({
|
|
671
|
+
msg: "Processing block events",
|
|
672
|
+
chain: chain.name,
|
|
673
|
+
chain_id: chain.id,
|
|
674
|
+
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
675
|
+
event_count: events.length,
|
|
676
|
+
});
|
|
677
|
+
|
|
678
|
+
await indexing.processRealtimeEvents({
|
|
679
|
+
events,
|
|
680
|
+
db: realtimeIndexingStore,
|
|
681
|
+
});
|
|
682
|
+
|
|
683
|
+
common.logger.trace({
|
|
684
|
+
msg: "Processed block events",
|
|
685
|
+
chain: chain.name,
|
|
686
|
+
chain_id: chain.id,
|
|
687
|
+
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
688
|
+
event_count: events.length,
|
|
689
|
+
});
|
|
690
|
+
|
|
691
|
+
realtimeIndexingStore.isProcessingEvents = false;
|
|
692
|
+
|
|
693
|
+
await Promise.all(
|
|
694
|
+
tables.map((table) =>
|
|
695
|
+
commitBlock(tx, { table, checkpoint, preBuild }, context),
|
|
696
|
+
),
|
|
697
|
+
);
|
|
698
|
+
|
|
699
|
+
common.logger.trace({
|
|
700
|
+
msg: "Committed reorg data for block",
|
|
701
|
+
chain: chain.name,
|
|
702
|
+
chain_id: chain.id,
|
|
703
|
+
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
704
|
+
event_count: events.length,
|
|
705
|
+
checkpoint,
|
|
706
|
+
});
|
|
707
|
+
} catch (error) {
|
|
708
|
+
if (error instanceof NonRetryableUserError === false) {
|
|
709
|
+
common.logger.warn({
|
|
710
|
+
msg: "Failed to index block",
|
|
664
711
|
chain: chain.name,
|
|
665
712
|
chain_id: chain.id,
|
|
666
713
|
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
667
|
-
|
|
714
|
+
error: error,
|
|
668
715
|
});
|
|
716
|
+
}
|
|
669
717
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
await Promise.all(
|
|
673
|
-
tables.map((table) =>
|
|
674
|
-
commitBlock(tx, { table, checkpoint }, context),
|
|
675
|
-
),
|
|
676
|
-
);
|
|
718
|
+
throw error;
|
|
719
|
+
}
|
|
677
720
|
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
event_count: events.length,
|
|
684
|
-
checkpoint,
|
|
685
|
-
});
|
|
721
|
+
common.metrics.ponder_indexing_timestamp.set(
|
|
722
|
+
{ chain: chain.name },
|
|
723
|
+
Number(decodeCheckpoint(checkpoint).blockTimestamp),
|
|
724
|
+
);
|
|
725
|
+
}
|
|
686
726
|
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
msg: "Failed to index block",
|
|
695
|
-
chain: chain.name,
|
|
696
|
-
chain_id: chain.id,
|
|
697
|
-
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
698
|
-
error: error,
|
|
699
|
-
});
|
|
700
|
-
}
|
|
701
|
-
|
|
702
|
-
throw error;
|
|
703
|
-
}
|
|
704
|
-
},
|
|
705
|
-
undefined,
|
|
727
|
+
await tx.wrap(
|
|
728
|
+
{ label: "update_checkpoints" },
|
|
729
|
+
(db) =>
|
|
730
|
+
db
|
|
731
|
+
.update(PONDER_CHECKPOINT)
|
|
732
|
+
.set({ latestCheckpoint: event.checkpoint })
|
|
733
|
+
.where(eq(PONDER_CHECKPOINT.chainName, event.chain.name)),
|
|
706
734
|
context,
|
|
707
735
|
);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
736
|
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
737
|
+
if (database.userQB.$dialect === "pglite") {
|
|
738
|
+
await tx.wrap(
|
|
739
|
+
(tx) => tx.execute("TRUNCATE TABLE live_query_tables"),
|
|
740
|
+
context,
|
|
741
|
+
);
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
undefined,
|
|
718
745
|
context,
|
|
719
746
|
);
|
|
720
747
|
|
|
@@ -743,13 +770,17 @@ export async function runMultichain({
|
|
|
743
770
|
await database.userQB.transaction(
|
|
744
771
|
async (tx) => {
|
|
745
772
|
await dropTriggers(tx, { tables }, context);
|
|
773
|
+
await dropLiveQueryTriggers(
|
|
774
|
+
tx,
|
|
775
|
+
{ namespaceBuild, tables },
|
|
776
|
+
context,
|
|
777
|
+
);
|
|
746
778
|
|
|
747
|
-
const counts = await
|
|
779
|
+
const counts = await revertMultichain(
|
|
748
780
|
tx,
|
|
749
781
|
{
|
|
750
782
|
checkpoint: event.checkpoint,
|
|
751
783
|
tables,
|
|
752
|
-
preBuild,
|
|
753
784
|
},
|
|
754
785
|
context,
|
|
755
786
|
);
|
|
@@ -763,6 +794,11 @@ export async function runMultichain({
|
|
|
763
794
|
}
|
|
764
795
|
|
|
765
796
|
await createTriggers(tx, { tables }, context);
|
|
797
|
+
await createLiveQueryTriggers(
|
|
798
|
+
tx,
|
|
799
|
+
{ namespaceBuild, tables },
|
|
800
|
+
context,
|
|
801
|
+
);
|
|
766
802
|
},
|
|
767
803
|
undefined,
|
|
768
804
|
context,
|
|
@@ -784,12 +820,11 @@ export async function runMultichain({
|
|
|
784
820
|
};
|
|
785
821
|
const endClock = startClock();
|
|
786
822
|
|
|
787
|
-
await
|
|
823
|
+
await finalizeMultichain(
|
|
788
824
|
database.userQB,
|
|
789
825
|
{
|
|
790
826
|
checkpoint: event.checkpoint,
|
|
791
827
|
tables,
|
|
792
|
-
preBuild,
|
|
793
828
|
namespaceBuild,
|
|
794
829
|
},
|
|
795
830
|
context,
|