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/omnichain.ts
CHANGED
|
@@ -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
|
+
finalizeOmnichain,
|
|
10
|
+
revertOmnichain,
|
|
10
11
|
} from "@/database/actions.js";
|
|
11
12
|
import {
|
|
12
13
|
type Database,
|
|
@@ -89,17 +90,15 @@ export async function runOmnichain({
|
|
|
89
90
|
crashRecoveryCheckpoint: CrashRecoveryCheckpoint;
|
|
90
91
|
database: Database;
|
|
91
92
|
}) {
|
|
92
|
-
runCodegen({ common });
|
|
93
|
-
|
|
94
93
|
const columnAccessPattern = createColumnAccessPattern({
|
|
95
94
|
indexingBuild,
|
|
96
95
|
});
|
|
97
|
-
const syncStore = createSyncStore({ common, database });
|
|
96
|
+
const syncStore = createSyncStore({ common, qb: database.syncQB });
|
|
98
97
|
|
|
99
98
|
const PONDER_CHECKPOINT = getPonderCheckpointTable(namespaceBuild.schema);
|
|
100
99
|
const PONDER_META = getPonderMetaTable(namespaceBuild.schema);
|
|
101
100
|
|
|
102
|
-
|
|
101
|
+
const eventCount = getEventCount(indexingBuild.indexingFunctions);
|
|
103
102
|
|
|
104
103
|
const cachedViemClient = createCachedViemClient({
|
|
105
104
|
common,
|
|
@@ -125,7 +124,6 @@ export async function runOmnichain({
|
|
|
125
124
|
common,
|
|
126
125
|
indexingBuild,
|
|
127
126
|
client: cachedViemClient,
|
|
128
|
-
eventCount,
|
|
129
127
|
indexingErrorHandler,
|
|
130
128
|
columnAccessPattern,
|
|
131
129
|
});
|
|
@@ -160,18 +158,17 @@ export async function runOmnichain({
|
|
|
160
158
|
|
|
161
159
|
await Promise.all(
|
|
162
160
|
indexingBuild.chains.map(async (chain) => {
|
|
163
|
-
const
|
|
164
|
-
(
|
|
165
|
-
);
|
|
161
|
+
const eventCallbacks =
|
|
162
|
+
indexingBuild.eventCallbacks[indexingBuild.chains.indexOf(chain)]!;
|
|
166
163
|
|
|
167
164
|
const cachedIntervals = await getCachedIntervals({
|
|
168
165
|
chain,
|
|
169
|
-
|
|
166
|
+
filters: eventCallbacks.map(({ filter }) => filter),
|
|
170
167
|
syncStore,
|
|
171
168
|
});
|
|
172
169
|
const syncProgress = await initSyncProgress({
|
|
173
170
|
common,
|
|
174
|
-
|
|
171
|
+
filters: eventCallbacks.map(({ filter }) => filter),
|
|
175
172
|
chain,
|
|
176
173
|
rpc: indexingBuild.rpcs[indexingBuild.chains.indexOf(chain)]!,
|
|
177
174
|
finalizedBlock:
|
|
@@ -179,7 +176,7 @@ export async function runOmnichain({
|
|
|
179
176
|
cachedIntervals,
|
|
180
177
|
});
|
|
181
178
|
const childAddresses = await getChildAddresses({
|
|
182
|
-
|
|
179
|
+
filters: eventCallbacks.map(({ filter }) => filter),
|
|
183
180
|
syncStore,
|
|
184
181
|
});
|
|
185
182
|
const unfinalizedBlocks: Omit<
|
|
@@ -305,14 +302,14 @@ export async function runOmnichain({
|
|
|
305
302
|
// underlying metrics collection is actually synchronous
|
|
306
303
|
// https://github.com/siimon/prom-client/blob/master/lib/histogram.js#L102-L125
|
|
307
304
|
const { eta, progress } = await getAppProgress(common.metrics);
|
|
308
|
-
if (eta === undefined
|
|
305
|
+
if (eta === undefined && progress === undefined) {
|
|
309
306
|
return;
|
|
310
307
|
}
|
|
311
308
|
|
|
312
309
|
common.logger.info({
|
|
313
310
|
msg: "Updated backfill indexing progress",
|
|
314
|
-
progress: formatPercentage(progress),
|
|
315
|
-
estimate: formatEta(eta * 1_000),
|
|
311
|
+
progress: progress === undefined ? undefined : formatPercentage(progress),
|
|
312
|
+
estimate: eta === undefined ? undefined : formatEta(eta * 1_000),
|
|
316
313
|
});
|
|
317
314
|
}, 5_000);
|
|
318
315
|
|
|
@@ -331,7 +328,7 @@ export async function runOmnichain({
|
|
|
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(
|
|
@@ -371,7 +368,9 @@ export async function runOmnichain({
|
|
|
371
368
|
let endClock = startClock();
|
|
372
369
|
await database.userQB.transaction(
|
|
373
370
|
async (tx) => {
|
|
374
|
-
const
|
|
371
|
+
const initialCompletedEvents = structuredClone(
|
|
372
|
+
await common.metrics.ponder_indexing_completed_events.get(),
|
|
373
|
+
);
|
|
375
374
|
|
|
376
375
|
try {
|
|
377
376
|
historicalIndexingStore.qb = tx;
|
|
@@ -472,7 +471,12 @@ export async function runOmnichain({
|
|
|
472
471
|
);
|
|
473
472
|
endClock = startClock();
|
|
474
473
|
} catch (error) {
|
|
475
|
-
|
|
474
|
+
for (const value of initialCompletedEvents.values) {
|
|
475
|
+
common.metrics.ponder_indexing_completed_events.set(
|
|
476
|
+
value.labels,
|
|
477
|
+
value.value,
|
|
478
|
+
);
|
|
479
|
+
}
|
|
476
480
|
indexingCache.invalidate();
|
|
477
481
|
indexingCache.clear();
|
|
478
482
|
|
|
@@ -541,7 +545,7 @@ export async function runOmnichain({
|
|
|
541
545
|
),
|
|
542
546
|
);
|
|
543
547
|
common.metrics.ponder_indexing_timestamp.set(
|
|
544
|
-
|
|
548
|
+
label,
|
|
545
549
|
seconds[chain.name]!.end,
|
|
546
550
|
);
|
|
547
551
|
}
|
|
@@ -578,6 +582,7 @@ export async function runOmnichain({
|
|
|
578
582
|
endClock = startClock();
|
|
579
583
|
|
|
580
584
|
await createTriggers(database.adminQB, { tables });
|
|
585
|
+
await createLiveQueryTriggers(database.adminQB, { namespaceBuild, tables });
|
|
581
586
|
|
|
582
587
|
common.logger.debug({
|
|
583
588
|
msg: "Created database triggers",
|
|
@@ -598,6 +603,8 @@ export async function runOmnichain({
|
|
|
598
603
|
});
|
|
599
604
|
}
|
|
600
605
|
|
|
606
|
+
endClock = startClock();
|
|
607
|
+
|
|
601
608
|
await database.adminQB.wrap({ label: "update_ready" }, (db) =>
|
|
602
609
|
db
|
|
603
610
|
.update(PONDER_META)
|
|
@@ -631,7 +638,7 @@ export async function runOmnichain({
|
|
|
631
638
|
common,
|
|
632
639
|
indexingBuild,
|
|
633
640
|
perChainSync,
|
|
634
|
-
|
|
641
|
+
database,
|
|
635
642
|
pendingEvents,
|
|
636
643
|
}),
|
|
637
644
|
100,
|
|
@@ -644,96 +651,117 @@ export async function runOmnichain({
|
|
|
644
651
|
};
|
|
645
652
|
const endClock = startClock();
|
|
646
653
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
)
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
654
|
+
await database.userQB.transaction(
|
|
655
|
+
async (tx) => {
|
|
656
|
+
if (database.userQB.$dialect === "postgres") {
|
|
657
|
+
await tx.wrap(
|
|
658
|
+
(tx) =>
|
|
659
|
+
tx.execute(
|
|
660
|
+
"CREATE TEMP TABLE live_query_tables (table_name TEXT PRIMARY KEY) ON COMMIT DROP",
|
|
661
|
+
),
|
|
662
|
+
context,
|
|
663
|
+
);
|
|
664
|
+
} else {
|
|
665
|
+
await tx.wrap(
|
|
666
|
+
(tx) =>
|
|
667
|
+
tx.execute(
|
|
668
|
+
"CREATE TEMP TABLE IF NOT EXISTS live_query_tables (table_name TEXT PRIMARY KEY)",
|
|
669
|
+
),
|
|
670
|
+
context,
|
|
671
|
+
);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
// Events must be run block-by-block, so that `database.commitBlock` can accurately
|
|
675
|
+
// update the temporary `checkpoint` value set in the trigger.
|
|
676
|
+
for (const { checkpoint, events } of splitEvents(event.events)) {
|
|
677
|
+
const chain = indexingBuild.chains.find(
|
|
678
|
+
(chain) =>
|
|
679
|
+
chain.id === Number(decodeCheckpoint(checkpoint).chainId),
|
|
680
|
+
)!;
|
|
681
|
+
|
|
682
|
+
try {
|
|
683
|
+
realtimeIndexingStore.qb = tx;
|
|
684
|
+
realtimeIndexingStore.isProcessingEvents = true;
|
|
685
|
+
|
|
686
|
+
common.logger.trace({
|
|
687
|
+
msg: "Processing block events",
|
|
688
|
+
chain: chain.name,
|
|
689
|
+
chain_id: chain.id,
|
|
690
|
+
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
691
|
+
event_count: events.length,
|
|
692
|
+
});
|
|
693
|
+
|
|
694
|
+
await indexing.processRealtimeEvents({
|
|
695
|
+
events,
|
|
696
|
+
db: realtimeIndexingStore,
|
|
697
|
+
});
|
|
698
|
+
|
|
699
|
+
common.logger.trace({
|
|
700
|
+
msg: "Processed block events",
|
|
701
|
+
chain: chain.name,
|
|
702
|
+
chain_id: chain.id,
|
|
703
|
+
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
704
|
+
event_count: events.length,
|
|
705
|
+
});
|
|
706
|
+
|
|
707
|
+
realtimeIndexingStore.isProcessingEvents = false;
|
|
708
|
+
|
|
709
|
+
await Promise.all(
|
|
710
|
+
tables.map(
|
|
711
|
+
(table) =>
|
|
712
|
+
commitBlock(tx, { table, checkpoint, preBuild }, context),
|
|
713
|
+
context,
|
|
714
|
+
),
|
|
715
|
+
);
|
|
677
716
|
|
|
678
|
-
|
|
679
|
-
|
|
717
|
+
common.logger.trace({
|
|
718
|
+
msg: "Committed reorg data for block",
|
|
719
|
+
chain: chain.name,
|
|
720
|
+
chain_id: chain.id,
|
|
721
|
+
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
722
|
+
event_count: events.length,
|
|
723
|
+
checkpoint,
|
|
724
|
+
});
|
|
725
|
+
} catch (error) {
|
|
726
|
+
if (error instanceof NonRetryableUserError === false) {
|
|
727
|
+
common.logger.warn({
|
|
728
|
+
msg: "Failed to index block",
|
|
680
729
|
chain: chain.name,
|
|
681
730
|
chain_id: chain.id,
|
|
682
731
|
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
683
|
-
|
|
732
|
+
error: error,
|
|
684
733
|
});
|
|
734
|
+
}
|
|
685
735
|
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
await Promise.all(
|
|
689
|
-
tables.map(
|
|
690
|
-
(table) => commitBlock(tx, { table, checkpoint }),
|
|
691
|
-
context,
|
|
692
|
-
),
|
|
693
|
-
);
|
|
694
|
-
|
|
695
|
-
common.logger.trace({
|
|
696
|
-
msg: "Committed reorg data for block",
|
|
697
|
-
chain: chain.name,
|
|
698
|
-
chain_id: chain.id,
|
|
699
|
-
number: Number(decodeCheckpoint(checkpoint).blockNumber),
|
|
700
|
-
event_count: events.length,
|
|
701
|
-
checkpoint,
|
|
702
|
-
});
|
|
736
|
+
throw error;
|
|
737
|
+
}
|
|
703
738
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
throw error;
|
|
722
|
-
}
|
|
723
|
-
},
|
|
724
|
-
undefined,
|
|
739
|
+
for (const chain of indexingBuild.chains) {
|
|
740
|
+
common.metrics.ponder_indexing_timestamp.set(
|
|
741
|
+
{ chain: chain.name },
|
|
742
|
+
Number(decodeCheckpoint(checkpoint).blockTimestamp),
|
|
743
|
+
);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
await tx.wrap(
|
|
748
|
+
{ label: "update_checkpoints" },
|
|
749
|
+
(db) =>
|
|
750
|
+
db
|
|
751
|
+
.update(PONDER_CHECKPOINT)
|
|
752
|
+
.set({ latestCheckpoint: event.checkpoint })
|
|
753
|
+
.where(eq(PONDER_CHECKPOINT.chainName, event.chain.name)),
|
|
725
754
|
context,
|
|
726
755
|
);
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
756
|
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
757
|
+
if (database.userQB.$dialect === "pglite") {
|
|
758
|
+
await tx.wrap(
|
|
759
|
+
(tx) => tx.execute("TRUNCATE TABLE live_query_tables"),
|
|
760
|
+
context,
|
|
761
|
+
);
|
|
762
|
+
}
|
|
763
|
+
},
|
|
764
|
+
undefined,
|
|
737
765
|
context,
|
|
738
766
|
);
|
|
739
767
|
|
|
@@ -761,13 +789,13 @@ export async function runOmnichain({
|
|
|
761
789
|
|
|
762
790
|
await database.userQB.transaction(async (tx) => {
|
|
763
791
|
await dropTriggers(tx, { tables }, context);
|
|
792
|
+
await dropLiveQueryTriggers(tx, { namespaceBuild, tables }, context);
|
|
764
793
|
|
|
765
|
-
const counts = await
|
|
794
|
+
const counts = await revertOmnichain(
|
|
766
795
|
tx,
|
|
767
796
|
{
|
|
768
797
|
tables,
|
|
769
798
|
checkpoint: event.checkpoint,
|
|
770
|
-
preBuild,
|
|
771
799
|
},
|
|
772
800
|
context,
|
|
773
801
|
);
|
|
@@ -781,6 +809,11 @@ export async function runOmnichain({
|
|
|
781
809
|
}
|
|
782
810
|
|
|
783
811
|
await createTriggers(tx, { tables }, context);
|
|
812
|
+
await createLiveQueryTriggers(
|
|
813
|
+
tx,
|
|
814
|
+
{ namespaceBuild, tables },
|
|
815
|
+
context,
|
|
816
|
+
);
|
|
784
817
|
});
|
|
785
818
|
|
|
786
819
|
common.logger.info({
|
|
@@ -799,12 +832,11 @@ export async function runOmnichain({
|
|
|
799
832
|
};
|
|
800
833
|
const endClock = startClock();
|
|
801
834
|
|
|
802
|
-
await
|
|
835
|
+
await finalizeOmnichain(
|
|
803
836
|
database.userQB,
|
|
804
837
|
{
|
|
805
838
|
checkpoint: event.checkpoint,
|
|
806
839
|
tables,
|
|
807
|
-
preBuild,
|
|
808
840
|
namespaceBuild,
|
|
809
841
|
},
|
|
810
842
|
context,
|