envio 2.31.0-alpha.0 → 2.31.0-alpha.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.
- package/package.json +5 -5
- package/src/Batch.res +400 -28
- package/src/Batch.res.js +286 -24
- package/src/EventRegister.res +9 -3
- package/src/EventRegister.res.js +6 -3
- package/src/EventRegister.resi +4 -1
- package/src/FetchState.res +116 -155
- package/src/FetchState.res.js +116 -106
- package/src/Internal.res +49 -0
- package/src/InternalConfig.res +1 -1
- package/src/Persistence.res +16 -1
- package/src/Persistence.res.js +1 -1
- package/src/PgStorage.res +49 -61
- package/src/PgStorage.res.js +44 -37
- package/src/Prometheus.res +7 -1
- package/src/Prometheus.res.js +8 -1
- package/src/ReorgDetection.res +222 -235
- package/src/ReorgDetection.res.js +34 -28
- package/src/SafeCheckpointTracking.res +132 -0
- package/src/SafeCheckpointTracking.res.js +95 -0
- package/src/Utils.res +64 -21
- package/src/Utils.res.js +61 -30
- package/src/db/EntityHistory.res +172 -294
- package/src/db/EntityHistory.res.js +98 -218
- package/src/db/InternalTable.gen.ts +13 -13
- package/src/db/InternalTable.res +286 -77
- package/src/db/InternalTable.res.js +160 -79
- package/src/db/Table.res +1 -0
- package/src/db/Table.res.js +1 -1
- package/src/sources/EventRouter.res +1 -1
- package/src/sources/Source.res +1 -1
|
@@ -11,10 +11,67 @@ var Belt_Array = require("rescript/lib/js/belt_Array.js");
|
|
|
11
11
|
var EntityHistory = require("./EntityHistory.res.js");
|
|
12
12
|
var S$RescriptSchema = require("rescript-schema/src/S.res.js");
|
|
13
13
|
|
|
14
|
+
var name = "dynamic_contract_registry";
|
|
15
|
+
|
|
16
|
+
function makeId(chainId, contractAddress) {
|
|
17
|
+
return String(chainId) + "-" + contractAddress;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
var schema = S$RescriptSchema.schema(function (s) {
|
|
21
|
+
return {
|
|
22
|
+
id: s.m(S$RescriptSchema.string),
|
|
23
|
+
chain_id: s.m(S$RescriptSchema.$$int),
|
|
24
|
+
registering_event_block_number: s.m(S$RescriptSchema.$$int),
|
|
25
|
+
registering_event_log_index: s.m(S$RescriptSchema.$$int),
|
|
26
|
+
registering_event_block_timestamp: s.m(S$RescriptSchema.$$int),
|
|
27
|
+
registering_event_contract_name: s.m(S$RescriptSchema.string),
|
|
28
|
+
registering_event_name: s.m(S$RescriptSchema.string),
|
|
29
|
+
registering_event_src_address: s.m(Address.schema),
|
|
30
|
+
contract_address: s.m(Address.schema),
|
|
31
|
+
contract_name: s.m(S$RescriptSchema.string)
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
var rowsSchema = S$RescriptSchema.array(schema);
|
|
36
|
+
|
|
37
|
+
var table = Table.mkTable(name, undefined, [
|
|
38
|
+
Table.mkField("id", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, true, undefined, undefined),
|
|
39
|
+
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
40
|
+
Table.mkField("registering_event_block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
41
|
+
Table.mkField("registering_event_log_index", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
42
|
+
Table.mkField("registering_event_block_timestamp", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
43
|
+
Table.mkField("registering_event_contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
44
|
+
Table.mkField("registering_event_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
45
|
+
Table.mkField("registering_event_src_address", "TEXT", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
46
|
+
Table.mkField("contract_address", "TEXT", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
47
|
+
Table.mkField("contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
var entityHistory = EntityHistory.fromTable(table, schema);
|
|
51
|
+
|
|
52
|
+
var config = {
|
|
53
|
+
name: name,
|
|
54
|
+
schema: schema,
|
|
55
|
+
rowsSchema: rowsSchema,
|
|
56
|
+
table: table,
|
|
57
|
+
entityHistory: entityHistory
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
var DynamicContractRegistry = {
|
|
61
|
+
name: name,
|
|
62
|
+
makeId: makeId,
|
|
63
|
+
schema: schema,
|
|
64
|
+
rowsSchema: rowsSchema,
|
|
65
|
+
table: table,
|
|
66
|
+
entityHistory: entityHistory,
|
|
67
|
+
config: config
|
|
68
|
+
};
|
|
69
|
+
|
|
14
70
|
var fields = [
|
|
15
71
|
"id",
|
|
16
72
|
"start_block",
|
|
17
73
|
"end_block",
|
|
74
|
+
"max_reorg_depth",
|
|
18
75
|
"source_block",
|
|
19
76
|
"first_event_block",
|
|
20
77
|
"buffer_block",
|
|
@@ -25,10 +82,11 @@ var fields = [
|
|
|
25
82
|
"_num_batches_fetched"
|
|
26
83
|
];
|
|
27
84
|
|
|
28
|
-
var table = Table.mkTable("envio_chains", undefined, [
|
|
85
|
+
var table$1 = Table.mkTable("envio_chains", undefined, [
|
|
29
86
|
Table.mkField("id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
30
87
|
Table.mkField("start_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
31
88
|
Table.mkField("end_block", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
|
|
89
|
+
Table.mkField("max_reorg_depth", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
32
90
|
Table.mkField("buffer_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
33
91
|
Table.mkField("source_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
34
92
|
Table.mkField("first_event_block", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
|
|
@@ -44,6 +102,7 @@ function initialFromConfig(chainConfig) {
|
|
|
44
102
|
id: chainConfig.id,
|
|
45
103
|
start_block: chainConfig.startBlock,
|
|
46
104
|
end_block: Js_null.fromOption(chainConfig.endBlock),
|
|
105
|
+
max_reorg_depth: chainConfig.maxReorgDepth,
|
|
47
106
|
progress_block: -1,
|
|
48
107
|
events_processed: 0,
|
|
49
108
|
first_event_block: null,
|
|
@@ -84,7 +143,7 @@ function makeInitialValuesQuery(pgSchema, chainConfigs) {
|
|
|
84
143
|
}));
|
|
85
144
|
return "(" + values.join(", ") + ")";
|
|
86
145
|
}));
|
|
87
|
-
return "INSERT INTO \"" + pgSchema + "\".\"" + table.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
|
|
146
|
+
return "INSERT INTO \"" + pgSchema + "\".\"" + table$1.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
|
|
88
147
|
}
|
|
89
148
|
|
|
90
149
|
var metaFields = [
|
|
@@ -101,7 +160,15 @@ function makeMetaFieldsUpdateQuery(pgSchema) {
|
|
|
101
160
|
var paramIndex = index + 2 | 0;
|
|
102
161
|
return "\"" + field + "\" = $" + String(paramIndex);
|
|
103
162
|
}));
|
|
104
|
-
return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
|
|
163
|
+
return "UPDATE \"" + pgSchema + "\".\"" + table$1.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"" + "id" + "\" = $1;";
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function makeGetInitialStateQuery(pgSchema) {
|
|
167
|
+
return "SELECT \"" + "id" + "\" as \"id\",\n\"" + "start_block" + "\" as \"startBlock\",\n\"" + "end_block" + "\" as \"endBlock\",\n\"" + "max_reorg_depth" + "\" as \"maxReorgDepth\",\n\"" + "first_event_block" + "\" as \"firstEventBlockNumber\",\n\"" + "ready_at" + "\" as \"timestampCaughtUpToHeadOrEndblock\",\n\"" + "events_processed" + "\" as \"numEventsProcessed\",\n\"" + "progress_block" + "\" as \"progressBlockNumber\",\n(\n SELECT COALESCE(json_agg(json_build_object(\n 'address', \"contract_address\",\n 'contractName', \"contract_name\",\n 'startBlock', \"registering_event_block_number\",\n 'registrationBlock', \"registering_event_block_number\"\n )), '[]'::json)\n FROM \"" + pgSchema + "\".\"" + table.tableName + "\"\n WHERE \"chain_id\" = chains.\"" + "id" + "\"\n) as \"dynamicContracts\"\nFROM \"" + pgSchema + "\".\"" + table$1.tableName + "\" as chains;";
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function getInitialState(sql, pgSchema) {
|
|
171
|
+
return sql.unsafe(makeGetInitialStateQuery(pgSchema));
|
|
105
172
|
}
|
|
106
173
|
|
|
107
174
|
var progressFields = [
|
|
@@ -114,13 +181,13 @@ function makeProgressFieldsUpdateQuery(pgSchema) {
|
|
|
114
181
|
var paramIndex = index + 2 | 0;
|
|
115
182
|
return "\"" + field + "\" = $" + String(paramIndex);
|
|
116
183
|
}));
|
|
117
|
-
return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
|
|
184
|
+
return "UPDATE \"" + pgSchema + "\".\"" + table$1.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
|
|
118
185
|
}
|
|
119
186
|
|
|
120
187
|
function setMeta(sql, pgSchema, chainsData) {
|
|
121
188
|
var query = makeMetaFieldsUpdateQuery(pgSchema);
|
|
122
189
|
var promises = [];
|
|
123
|
-
Utils.Dict.forEachWithKey(chainsData, (function (
|
|
190
|
+
Utils.Dict.forEachWithKey(chainsData, (function (data, chainId) {
|
|
124
191
|
var params = [];
|
|
125
192
|
params.push(chainId);
|
|
126
193
|
metaFields.forEach(function (field) {
|
|
@@ -148,18 +215,20 @@ function setProgressedChains(sql, pgSchema, progressedChains) {
|
|
|
148
215
|
|
|
149
216
|
var Chains = {
|
|
150
217
|
fields: fields,
|
|
151
|
-
table: table,
|
|
218
|
+
table: table$1,
|
|
152
219
|
initialFromConfig: initialFromConfig,
|
|
153
220
|
makeInitialValuesQuery: makeInitialValuesQuery,
|
|
154
221
|
metaFields: metaFields,
|
|
155
222
|
makeMetaFieldsUpdateQuery: makeMetaFieldsUpdateQuery,
|
|
223
|
+
makeGetInitialStateQuery: makeGetInitialStateQuery,
|
|
224
|
+
getInitialState: getInitialState,
|
|
156
225
|
progressFields: progressFields,
|
|
157
226
|
makeProgressFieldsUpdateQuery: makeProgressFieldsUpdateQuery,
|
|
158
227
|
setMeta: setMeta,
|
|
159
228
|
setProgressedChains: setProgressedChains
|
|
160
229
|
};
|
|
161
230
|
|
|
162
|
-
var table$
|
|
231
|
+
var table$2 = Table.mkTable("persisted_state", undefined, [
|
|
163
232
|
Table.mkField("id", "SERIAL", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
164
233
|
Table.mkField("envio_version", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
165
234
|
Table.mkField("config_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
@@ -169,20 +238,88 @@ var table$1 = Table.mkTable("persisted_state", undefined, [
|
|
|
169
238
|
]);
|
|
170
239
|
|
|
171
240
|
var PersistedState = {
|
|
172
|
-
table: table$
|
|
241
|
+
table: table$2
|
|
173
242
|
};
|
|
174
243
|
|
|
175
|
-
var table$
|
|
176
|
-
Table.mkField("
|
|
177
|
-
Table.mkField("
|
|
178
|
-
Table.mkField("
|
|
244
|
+
var table$3 = Table.mkTable("envio_checkpoints", undefined, [
|
|
245
|
+
Table.mkField("id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
246
|
+
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
247
|
+
Table.mkField("block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
248
|
+
Table.mkField("block_hash", "TEXT", S$RescriptSchema.$$null(S$RescriptSchema.string), undefined, undefined, true, undefined, undefined, undefined),
|
|
249
|
+
Table.mkField("events_processed", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
179
250
|
]);
|
|
180
251
|
|
|
181
|
-
|
|
182
|
-
table
|
|
252
|
+
function makeGetReorgCheckpointsQuery(pgSchema) {
|
|
253
|
+
return "WITH reorg_chains AS (\n SELECT \n \"" + "id" + "\" as id,\n \"" + "source_block" + "\" - \"" + "max_reorg_depth" + "\" AS safe_block\n FROM \"" + pgSchema + "\".\"" + table$1.tableName + "\"\n WHERE \"" + "max_reorg_depth" + "\" > 0\n AND \"" + "progress_block" + "\" > \"" + "source_block" + "\" - \"" + "max_reorg_depth" + "\"\n)\nSELECT \n cp.\"" + "id" + "\", \n cp.\"" + "chain_id" + "\", \n cp.\"" + "block_number" + "\", \n cp.\"" + "block_hash" + "\"\nFROM \"" + pgSchema + "\".\"" + table$3.tableName + "\" cp\nINNER JOIN reorg_chains rc \n ON cp.\"" + "chain_id" + "\" = rc.id\nWHERE cp.\"" + "block_hash" + "\" IS NOT NULL\n AND cp.\"" + "block_number" + "\" >= rc.safe_block;";
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function makeCommitedCheckpointIdQuery(pgSchema) {
|
|
257
|
+
return "SELECT COALESCE(MAX(" + "id" + "), " + String(0) + ") AS id FROM \"" + pgSchema + "\".\"" + table$3.tableName + "\";";
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function makeInsertCheckpointQuery(pgSchema) {
|
|
261
|
+
return "INSERT INTO \"" + pgSchema + "\".\"" + table$3.tableName + "\" (\"" + "id" + "\", \"" + "chain_id" + "\", \"" + "block_number" + "\", \"" + "block_hash" + "\", \"" + "events_processed" + "\")\nSELECT * FROM unnest($1::INTEGER[],$2::INTEGER[],$3::INTEGER[],$4::TEXT[],$5::INTEGER[]);";
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function insert(sql, pgSchema, checkpointIds, checkpointChainIds, checkpointBlockNumbers, checkpointBlockHashes, checkpointEventsProcessed) {
|
|
265
|
+
var query = makeInsertCheckpointQuery(pgSchema);
|
|
266
|
+
return sql.unsafe(query, [
|
|
267
|
+
checkpointIds,
|
|
268
|
+
checkpointChainIds,
|
|
269
|
+
checkpointBlockNumbers,
|
|
270
|
+
checkpointBlockHashes,
|
|
271
|
+
checkpointEventsProcessed
|
|
272
|
+
], {prepare: true});
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function rollback(sql, pgSchema, rollbackTargetCheckpointId) {
|
|
276
|
+
return sql.unsafe("DELETE FROM \"" + pgSchema + "\".\"" + table$3.tableName + "\" WHERE \"" + "id" + "\" > $1;", [rollbackTargetCheckpointId], {prepare: true});
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function makePruneStaleCheckpointsQuery(pgSchema) {
|
|
280
|
+
return "DELETE FROM \"" + pgSchema + "\".\"" + table$3.tableName + "\" WHERE \"" + "id" + "\" < $1;";
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function pruneStaleCheckpoints(sql, pgSchema, safeCheckpointId) {
|
|
284
|
+
return sql.unsafe(makePruneStaleCheckpointsQuery(pgSchema), [safeCheckpointId], {prepare: true});
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function makeGetRollbackTargetCheckpointQuery(pgSchema) {
|
|
288
|
+
return "SELECT \"" + "id" + "\" FROM \"" + pgSchema + "\".\"" + table$3.tableName + "\"\nWHERE \n \"" + "chain_id" + "\" = $1 AND\n \"" + "block_number" + "\" <= $2\nORDER BY \"" + "id" + "\" DESC\nLIMIT 1;";
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function getRollbackTargetCheckpoint(sql, pgSchema, reorgChainId, lastKnownValidBlockNumber) {
|
|
292
|
+
return sql.unsafe(makeGetRollbackTargetCheckpointQuery(pgSchema), [
|
|
293
|
+
reorgChainId,
|
|
294
|
+
lastKnownValidBlockNumber
|
|
295
|
+
], {prepare: true});
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function makeGetRollbackProgressDiffQuery(pgSchema) {
|
|
299
|
+
return "SELECT \n \"" + "chain_id" + "\",\n SUM(\"" + "events_processed" + "\") as events_processed_diff,\n MIN(\"" + "block_number" + "\") - 1 as new_progress_block_number\nFROM \"" + pgSchema + "\".\"" + table$3.tableName + "\"\nWHERE \"" + "id" + "\" > $1\nGROUP BY \"" + "chain_id" + "\";";
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function getRollbackProgressDiff(sql, pgSchema, rollbackTargetCheckpointId) {
|
|
303
|
+
return sql.unsafe(makeGetRollbackProgressDiffQuery(pgSchema), [rollbackTargetCheckpointId], {prepare: true});
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
var Checkpoints = {
|
|
307
|
+
initialCheckpointId: 0,
|
|
308
|
+
table: table$3,
|
|
309
|
+
makeGetReorgCheckpointsQuery: makeGetReorgCheckpointsQuery,
|
|
310
|
+
makeCommitedCheckpointIdQuery: makeCommitedCheckpointIdQuery,
|
|
311
|
+
makeInsertCheckpointQuery: makeInsertCheckpointQuery,
|
|
312
|
+
insert: insert,
|
|
313
|
+
rollback: rollback,
|
|
314
|
+
makePruneStaleCheckpointsQuery: makePruneStaleCheckpointsQuery,
|
|
315
|
+
pruneStaleCheckpoints: pruneStaleCheckpoints,
|
|
316
|
+
makeGetRollbackTargetCheckpointQuery: makeGetRollbackTargetCheckpointQuery,
|
|
317
|
+
getRollbackTargetCheckpoint: getRollbackTargetCheckpoint,
|
|
318
|
+
makeGetRollbackProgressDiffQuery: makeGetRollbackProgressDiffQuery,
|
|
319
|
+
getRollbackProgressDiff: getRollbackProgressDiff
|
|
183
320
|
};
|
|
184
321
|
|
|
185
|
-
var schema = S$RescriptSchema.schema(function (s) {
|
|
322
|
+
var schema$1 = S$RescriptSchema.schema(function (s) {
|
|
186
323
|
return {
|
|
187
324
|
chain_id: s.m(S$RescriptSchema.$$int),
|
|
188
325
|
event_id: s.m(S$RescriptSchema.bigint),
|
|
@@ -199,7 +336,7 @@ var schema = S$RescriptSchema.schema(function (s) {
|
|
|
199
336
|
};
|
|
200
337
|
});
|
|
201
338
|
|
|
202
|
-
var table$
|
|
339
|
+
var table$4 = Table.mkTable("raw_events", undefined, [
|
|
203
340
|
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
204
341
|
Table.mkField("event_id", "NUMERIC", S$RescriptSchema.bigint, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
205
342
|
Table.mkField("event_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
@@ -216,8 +353,8 @@ var table$3 = Table.mkTable("raw_events", undefined, [
|
|
|
216
353
|
]);
|
|
217
354
|
|
|
218
355
|
var RawEvents = {
|
|
219
|
-
schema: schema,
|
|
220
|
-
table: table$
|
|
356
|
+
schema: schema$1,
|
|
357
|
+
table: table$4
|
|
221
358
|
};
|
|
222
359
|
|
|
223
360
|
var metaViewName = "_meta";
|
|
@@ -225,11 +362,11 @@ var metaViewName = "_meta";
|
|
|
225
362
|
var chainMetadataViewName = "chain_metadata";
|
|
226
363
|
|
|
227
364
|
function makeMetaViewQuery(pgSchema) {
|
|
228
|
-
return "CREATE VIEW \"" + pgSchema + "\".\"" + metaViewName + "\" AS \n SELECT \n \"" + "id" + "\" AS \"chainId\",\n \"" + "start_block" + "\" AS \"startBlock\", \n \"" + "end_block" + "\" AS \"endBlock\",\n \"" + "progress_block" + "\" AS \"progressBlock\",\n \"" + "buffer_block" + "\" AS \"bufferBlock\",\n \"" + "first_event_block" + "\" AS \"firstEventBlock\",\n \"" + "events_processed" + "\" AS \"eventsProcessed\",\n \"" + "source_block" + "\" AS \"sourceBlock\",\n \"" + "ready_at" + "\" AS \"readyAt\",\n (\"" + "ready_at" + "\" IS NOT NULL) AS \"isReady\"\n FROM \"" + pgSchema + "\".\"" + table.tableName + "\"\n ORDER BY \"" + "id" + "\";";
|
|
365
|
+
return "CREATE VIEW \"" + pgSchema + "\".\"" + metaViewName + "\" AS \n SELECT \n \"" + "id" + "\" AS \"chainId\",\n \"" + "start_block" + "\" AS \"startBlock\", \n \"" + "end_block" + "\" AS \"endBlock\",\n \"" + "progress_block" + "\" AS \"progressBlock\",\n \"" + "buffer_block" + "\" AS \"bufferBlock\",\n \"" + "first_event_block" + "\" AS \"firstEventBlock\",\n \"" + "events_processed" + "\" AS \"eventsProcessed\",\n \"" + "source_block" + "\" AS \"sourceBlock\",\n \"" + "ready_at" + "\" AS \"readyAt\",\n (\"" + "ready_at" + "\" IS NOT NULL) AS \"isReady\"\n FROM \"" + pgSchema + "\".\"" + table$1.tableName + "\"\n ORDER BY \"" + "id" + "\";";
|
|
229
366
|
}
|
|
230
367
|
|
|
231
368
|
function makeChainMetadataViewQuery(pgSchema) {
|
|
232
|
-
return "CREATE VIEW \"" + pgSchema + "\".\"" + chainMetadataViewName + "\" AS \n SELECT \n \"" + "source_block" + "\" AS \"block_height\",\n \"" + "id" + "\" AS \"chain_id\",\n \"" + "end_block" + "\" AS \"end_block\", \n \"" + "first_event_block" + "\" AS \"first_event_block_number\",\n \"" + "_is_hyper_sync" + "\" AS \"is_hyper_sync\",\n \"" + "buffer_block" + "\" AS \"latest_fetched_block_number\",\n \"" + "progress_block" + "\" AS \"latest_processed_block\",\n \"" + "_num_batches_fetched" + "\" AS \"num_batches_fetched\",\n \"" + "events_processed" + "\" AS \"num_events_processed\",\n \"" + "start_block" + "\" AS \"start_block\",\n \"" + "ready_at" + "\" AS \"timestamp_caught_up_to_head_or_endblock\"\n FROM \"" + pgSchema + "\".\"" + table.tableName + "\";";
|
|
369
|
+
return "CREATE VIEW \"" + pgSchema + "\".\"" + chainMetadataViewName + "\" AS \n SELECT \n \"" + "source_block" + "\" AS \"block_height\",\n \"" + "id" + "\" AS \"chain_id\",\n \"" + "end_block" + "\" AS \"end_block\", \n \"" + "first_event_block" + "\" AS \"first_event_block_number\",\n \"" + "_is_hyper_sync" + "\" AS \"is_hyper_sync\",\n \"" + "buffer_block" + "\" AS \"latest_fetched_block_number\",\n \"" + "progress_block" + "\" AS \"latest_processed_block\",\n \"" + "_num_batches_fetched" + "\" AS \"num_batches_fetched\",\n \"" + "events_processed" + "\" AS \"num_events_processed\",\n \"" + "start_block" + "\" AS \"start_block\",\n \"" + "ready_at" + "\" AS \"timestamp_caught_up_to_head_or_endblock\"\n FROM \"" + pgSchema + "\".\"" + table$1.tableName + "\";";
|
|
233
370
|
}
|
|
234
371
|
|
|
235
372
|
var Views = {
|
|
@@ -239,62 +376,6 @@ var Views = {
|
|
|
239
376
|
makeChainMetadataViewQuery: makeChainMetadataViewQuery
|
|
240
377
|
};
|
|
241
378
|
|
|
242
|
-
var name = "dynamic_contract_registry";
|
|
243
|
-
|
|
244
|
-
function makeId(chainId, contractAddress) {
|
|
245
|
-
return String(chainId) + "-" + contractAddress;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
var schema$1 = S$RescriptSchema.schema(function (s) {
|
|
249
|
-
return {
|
|
250
|
-
id: s.m(S$RescriptSchema.string),
|
|
251
|
-
chain_id: s.m(S$RescriptSchema.$$int),
|
|
252
|
-
registering_event_block_number: s.m(S$RescriptSchema.$$int),
|
|
253
|
-
registering_event_log_index: s.m(S$RescriptSchema.$$int),
|
|
254
|
-
registering_event_block_timestamp: s.m(S$RescriptSchema.$$int),
|
|
255
|
-
registering_event_contract_name: s.m(S$RescriptSchema.string),
|
|
256
|
-
registering_event_name: s.m(S$RescriptSchema.string),
|
|
257
|
-
registering_event_src_address: s.m(Address.schema),
|
|
258
|
-
contract_address: s.m(Address.schema),
|
|
259
|
-
contract_name: s.m(S$RescriptSchema.string)
|
|
260
|
-
};
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
var rowsSchema = S$RescriptSchema.array(schema$1);
|
|
264
|
-
|
|
265
|
-
var table$4 = Table.mkTable(name, undefined, [
|
|
266
|
-
Table.mkField("id", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, true, undefined, undefined),
|
|
267
|
-
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
268
|
-
Table.mkField("registering_event_block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
269
|
-
Table.mkField("registering_event_log_index", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
270
|
-
Table.mkField("registering_event_block_timestamp", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
271
|
-
Table.mkField("registering_event_contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
272
|
-
Table.mkField("registering_event_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
273
|
-
Table.mkField("registering_event_src_address", "TEXT", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
274
|
-
Table.mkField("contract_address", "TEXT", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
275
|
-
Table.mkField("contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
276
|
-
]);
|
|
277
|
-
|
|
278
|
-
var entityHistory = EntityHistory.fromTable(table$4, schema$1);
|
|
279
|
-
|
|
280
|
-
var config = {
|
|
281
|
-
name: name,
|
|
282
|
-
schema: schema$1,
|
|
283
|
-
rowsSchema: rowsSchema,
|
|
284
|
-
table: table$4,
|
|
285
|
-
entityHistory: entityHistory
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
var DynamicContractRegistry = {
|
|
289
|
-
name: name,
|
|
290
|
-
makeId: makeId,
|
|
291
|
-
schema: schema$1,
|
|
292
|
-
rowsSchema: rowsSchema,
|
|
293
|
-
table: table$4,
|
|
294
|
-
entityHistory: entityHistory,
|
|
295
|
-
config: config
|
|
296
|
-
};
|
|
297
|
-
|
|
298
379
|
var isPrimaryKey = true;
|
|
299
380
|
|
|
300
381
|
var isNullable = true;
|
|
@@ -304,10 +385,10 @@ var isIndex = true;
|
|
|
304
385
|
exports.isPrimaryKey = isPrimaryKey;
|
|
305
386
|
exports.isNullable = isNullable;
|
|
306
387
|
exports.isIndex = isIndex;
|
|
388
|
+
exports.DynamicContractRegistry = DynamicContractRegistry;
|
|
307
389
|
exports.Chains = Chains;
|
|
308
390
|
exports.PersistedState = PersistedState;
|
|
309
|
-
exports.
|
|
391
|
+
exports.Checkpoints = Checkpoints;
|
|
310
392
|
exports.RawEvents = RawEvents;
|
|
311
393
|
exports.Views = Views;
|
|
312
|
-
|
|
313
|
-
/* table Not a pure module */
|
|
394
|
+
/* schema Not a pure module */
|
package/src/db/Table.res
CHANGED
package/src/db/Table.res.js
CHANGED
|
@@ -259,7 +259,7 @@ function toSqlParams(table, schema, pgSchema) {
|
|
|
259
259
|
if (field$1.TAG === "Field") {
|
|
260
260
|
var f = field$1._0;
|
|
261
261
|
var fieldType = f.fieldType;
|
|
262
|
-
tmp = fieldType === "TIMESTAMP" || fieldType === "TIMESTAMP WITH TIME ZONE" || fieldType === "JSONB" || fieldType === "SERIAL" || fieldType === "TEXT" || fieldType === "DOUBLE PRECISION" || fieldType === "NUMERIC" || fieldType === "BOOLEAN" || fieldType === "INTEGER" || fieldType === "TIMESTAMP WITH TIME ZONE NULL" ? (
|
|
262
|
+
tmp = fieldType === "TIMESTAMP" || fieldType === "TIMESTAMP WITH TIME ZONE" || fieldType === "JSONB" || fieldType === "SERIAL" || fieldType === "TEXT" || fieldType === "DOUBLE PRECISION" || fieldType === "NUMERIC" || fieldType === "BOOLEAN" || fieldType === "BIGINT" || fieldType === "INTEGER" || fieldType === "TIMESTAMP WITH TIME ZONE NULL" ? (
|
|
263
263
|
fieldType === "BOOLEAN" ? "INTEGER[]::" + f.fieldType : fieldType
|
|
264
264
|
) : (
|
|
265
265
|
fieldType.startsWith("NUMERIC(") ? fieldType : "TEXT[]::\"" + pgSchema + "\"." + fieldType
|
package/src/sources/Source.res
CHANGED
|
@@ -49,7 +49,7 @@ type t = {
|
|
|
49
49
|
~fromBlock: int,
|
|
50
50
|
~toBlock: option<int>,
|
|
51
51
|
~addressesByContractName: dict<array<Address.t>>,
|
|
52
|
-
~indexingContracts: dict<
|
|
52
|
+
~indexingContracts: dict<Internal.indexingContract>,
|
|
53
53
|
~currentBlockHeight: int,
|
|
54
54
|
~partitionId: string,
|
|
55
55
|
~selection: FetchState.selection,
|