envio 2.28.0-alpha.3 → 2.28.0-rc.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/package.json +5 -5
- package/src/Batch.res +146 -0
- package/src/Batch.res.js +129 -0
- package/src/FetchState.res +15 -0
- package/src/FetchState.res.js +20 -0
- package/src/Hasura.res +3 -19
- package/src/Hasura.res.js +6 -16
- package/src/Persistence.res +25 -6
- package/src/Persistence.res.js +18 -3
- package/src/PgStorage.res +16 -8
- package/src/PgStorage.res.js +9 -6
- package/src/Throttler.res +4 -1
- package/src/Throttler.res.js +2 -1
- package/src/Utils.res +7 -0
- package/src/Utils.res.js +6 -1
- package/src/bindings/Postgres.res +1 -1
- package/src/db/InternalTable.gen.ts +0 -7
- package/src/db/InternalTable.res +140 -75
- package/src/db/InternalTable.res.js +104 -73
|
@@ -11,35 +11,6 @@ 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 blockTimestampFieldName = "block_timestamp";
|
|
15
|
-
|
|
16
|
-
var blockNumberFieldName = "block_number";
|
|
17
|
-
|
|
18
|
-
var logIndexFieldName = "log_index";
|
|
19
|
-
|
|
20
|
-
var isPreRegisteringDynamicContractsFieldName = "is_pre_registering_dynamic_contracts";
|
|
21
|
-
|
|
22
|
-
var table = Table.mkTable("event_sync_state", undefined, [
|
|
23
|
-
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
24
|
-
Table.mkField(blockNumberFieldName, "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
25
|
-
Table.mkField(logIndexFieldName, "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
26
|
-
Table.mkField(blockTimestampFieldName, "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
27
|
-
Table.mkField(isPreRegisteringDynamicContractsFieldName, "BOOLEAN", S$RescriptSchema.bool, "false", undefined, undefined, undefined, undefined, undefined)
|
|
28
|
-
]);
|
|
29
|
-
|
|
30
|
-
function resetCurrentCurrentSyncStateQuery(pgSchema) {
|
|
31
|
-
return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\n SET " + blockNumberFieldName + " = 0, \n " + logIndexFieldName + " = 0, \n " + blockTimestampFieldName + " = 0, \n " + isPreRegisteringDynamicContractsFieldName + " = false;";
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
var EventSyncState = {
|
|
35
|
-
blockTimestampFieldName: blockTimestampFieldName,
|
|
36
|
-
blockNumberFieldName: blockNumberFieldName,
|
|
37
|
-
logIndexFieldName: logIndexFieldName,
|
|
38
|
-
isPreRegisteringDynamicContractsFieldName: isPreRegisteringDynamicContractsFieldName,
|
|
39
|
-
table: table,
|
|
40
|
-
resetCurrentCurrentSyncStateQuery: resetCurrentCurrentSyncStateQuery
|
|
41
|
-
};
|
|
42
|
-
|
|
43
14
|
var fields = [
|
|
44
15
|
"id",
|
|
45
16
|
"start_block",
|
|
@@ -47,14 +18,15 @@ var fields = [
|
|
|
47
18
|
"source_block",
|
|
48
19
|
"first_event_block",
|
|
49
20
|
"buffer_block",
|
|
21
|
+
"progress_block",
|
|
50
22
|
"ready_at",
|
|
51
23
|
"events_processed",
|
|
24
|
+
"_progress_log_index",
|
|
52
25
|
"_is_hyper_sync",
|
|
53
|
-
"_latest_processed_block",
|
|
54
26
|
"_num_batches_fetched"
|
|
55
27
|
];
|
|
56
28
|
|
|
57
|
-
var table
|
|
29
|
+
var table = Table.mkTable("envio_chains", undefined, [
|
|
58
30
|
Table.mkField("id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
59
31
|
Table.mkField("start_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
60
32
|
Table.mkField("end_block", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
|
|
@@ -64,7 +36,8 @@ var table$1 = Table.mkTable("envio_chains", undefined, [
|
|
|
64
36
|
Table.mkField("ready_at", "TIMESTAMP WITH TIME ZONE NULL", S$RescriptSchema.$$null(Utils.Schema.dbDate), undefined, undefined, true, undefined, undefined, undefined),
|
|
65
37
|
Table.mkField("events_processed", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
66
38
|
Table.mkField("_is_hyper_sync", "BOOLEAN", S$RescriptSchema.bool, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
67
|
-
Table.mkField("
|
|
39
|
+
Table.mkField("progress_block", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
40
|
+
Table.mkField("_progress_log_index", "INTEGER", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
|
|
68
41
|
Table.mkField("_num_batches_fetched", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
69
42
|
]);
|
|
70
43
|
|
|
@@ -73,12 +46,13 @@ function initialFromConfig(chainConfig) {
|
|
|
73
46
|
id: chainConfig.id,
|
|
74
47
|
start_block: chainConfig.startBlock,
|
|
75
48
|
end_block: Js_null.fromOption(chainConfig.endBlock),
|
|
76
|
-
|
|
49
|
+
progress_block: -1,
|
|
50
|
+
_progress_log_index: null,
|
|
51
|
+
events_processed: 0,
|
|
77
52
|
first_event_block: null,
|
|
78
53
|
buffer_block: -1,
|
|
54
|
+
source_block: 0,
|
|
79
55
|
ready_at: null,
|
|
80
|
-
events_processed: 0,
|
|
81
|
-
_latest_processed_block: null,
|
|
82
56
|
_is_hyper_sync: false,
|
|
83
57
|
_num_batches_fetched: 0
|
|
84
58
|
};
|
|
@@ -113,53 +87,85 @@ function makeInitialValuesQuery(pgSchema, chainConfigs) {
|
|
|
113
87
|
}));
|
|
114
88
|
return "(" + values.join(", ") + ")";
|
|
115
89
|
}));
|
|
116
|
-
return "INSERT INTO \"" + pgSchema + "\".\"" + table
|
|
90
|
+
return "INSERT INTO \"" + pgSchema + "\".\"" + table.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
|
|
117
91
|
}
|
|
118
92
|
|
|
119
|
-
var
|
|
93
|
+
var metaFields = [
|
|
120
94
|
"source_block",
|
|
121
|
-
"first_event_block",
|
|
122
95
|
"buffer_block",
|
|
96
|
+
"first_event_block",
|
|
123
97
|
"ready_at",
|
|
124
|
-
"events_processed",
|
|
125
98
|
"_is_hyper_sync",
|
|
126
|
-
"_latest_processed_block",
|
|
127
99
|
"_num_batches_fetched"
|
|
128
100
|
];
|
|
129
101
|
|
|
130
|
-
function
|
|
131
|
-
var setClauses = Belt_Array.mapWithIndex(
|
|
102
|
+
function makeMetaFieldsUpdateQuery(pgSchema) {
|
|
103
|
+
var setClauses = Belt_Array.mapWithIndex(metaFields, (function (index, field) {
|
|
132
104
|
var paramIndex = index + 2 | 0;
|
|
133
105
|
return "\"" + field + "\" = $" + String(paramIndex);
|
|
134
106
|
}));
|
|
135
|
-
return "UPDATE \"" + pgSchema + "\".\"" + table
|
|
107
|
+
return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
var progressFields = [
|
|
111
|
+
"progress_block",
|
|
112
|
+
"_progress_log_index",
|
|
113
|
+
"events_processed"
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
function makeProgressFieldsUpdateQuery(pgSchema) {
|
|
117
|
+
var setClauses = Belt_Array.mapWithIndex(progressFields, (function (index, field) {
|
|
118
|
+
var paramIndex = index + 2 | 0;
|
|
119
|
+
return "\"" + field + "\" = $" + String(paramIndex);
|
|
120
|
+
}));
|
|
121
|
+
return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function setMeta(sql, pgSchema, chainsData) {
|
|
125
|
+
var query = makeMetaFieldsUpdateQuery(pgSchema);
|
|
126
|
+
var promises = [];
|
|
127
|
+
Utils.Dict.forEachWithKey(chainsData, (function (chainId, data) {
|
|
128
|
+
var params = [];
|
|
129
|
+
params.push(chainId);
|
|
130
|
+
metaFields.forEach(function (field) {
|
|
131
|
+
var value = data[field];
|
|
132
|
+
params.push(value);
|
|
133
|
+
});
|
|
134
|
+
promises.push(sql.unsafe(query, params, {prepare: true}));
|
|
135
|
+
}));
|
|
136
|
+
return Promise.all(promises);
|
|
136
137
|
}
|
|
137
138
|
|
|
138
|
-
function
|
|
139
|
-
var query =
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
139
|
+
function setProgressedChains(sql, pgSchema, progressedChains) {
|
|
140
|
+
var query = makeProgressFieldsUpdateQuery(pgSchema);
|
|
141
|
+
var promises = [];
|
|
142
|
+
progressedChains.forEach(function (data) {
|
|
143
|
+
var params = [];
|
|
144
|
+
params.push(data.chainId);
|
|
145
|
+
progressFields.forEach(function (field) {
|
|
146
|
+
params.push(field === "events_processed" ? data.totalEventsProcessed : (
|
|
147
|
+
field === "progress_block" ? data.progressBlockNumber : Js_null.fromOption(data.progressNextBlockLogIndex)
|
|
148
|
+
));
|
|
149
|
+
});
|
|
150
|
+
promises.push(sql.unsafe(query, params, {prepare: true}));
|
|
151
|
+
});
|
|
152
|
+
return Promise.all(promises);
|
|
150
153
|
}
|
|
151
154
|
|
|
152
155
|
var Chains = {
|
|
153
156
|
fields: fields,
|
|
154
|
-
table: table
|
|
157
|
+
table: table,
|
|
155
158
|
initialFromConfig: initialFromConfig,
|
|
156
159
|
makeInitialValuesQuery: makeInitialValuesQuery,
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
+
metaFields: metaFields,
|
|
161
|
+
makeMetaFieldsUpdateQuery: makeMetaFieldsUpdateQuery,
|
|
162
|
+
progressFields: progressFields,
|
|
163
|
+
makeProgressFieldsUpdateQuery: makeProgressFieldsUpdateQuery,
|
|
164
|
+
setMeta: setMeta,
|
|
165
|
+
setProgressedChains: setProgressedChains
|
|
160
166
|
};
|
|
161
167
|
|
|
162
|
-
var table$
|
|
168
|
+
var table$1 = Table.mkTable("persisted_state", undefined, [
|
|
163
169
|
Table.mkField("id", "SERIAL", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
164
170
|
Table.mkField("envio_version", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
165
171
|
Table.mkField("config_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
@@ -169,17 +175,17 @@ var table$2 = Table.mkTable("persisted_state", undefined, [
|
|
|
169
175
|
]);
|
|
170
176
|
|
|
171
177
|
var PersistedState = {
|
|
172
|
-
table: table$
|
|
178
|
+
table: table$1
|
|
173
179
|
};
|
|
174
180
|
|
|
175
|
-
var table$
|
|
181
|
+
var table$2 = Table.mkTable("end_of_block_range_scanned_data", undefined, [
|
|
176
182
|
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
177
183
|
Table.mkField("block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
178
184
|
Table.mkField("block_hash", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
179
185
|
]);
|
|
180
186
|
|
|
181
187
|
var EndOfBlockRangeScannedData = {
|
|
182
|
-
table: table$
|
|
188
|
+
table: table$2
|
|
183
189
|
};
|
|
184
190
|
|
|
185
191
|
var schema = S$RescriptSchema.schema(function (s) {
|
|
@@ -199,7 +205,7 @@ var schema = S$RescriptSchema.schema(function (s) {
|
|
|
199
205
|
};
|
|
200
206
|
});
|
|
201
207
|
|
|
202
|
-
var table$
|
|
208
|
+
var table$3 = Table.mkTable("raw_events", undefined, [
|
|
203
209
|
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
204
210
|
Table.mkField("event_id", "NUMERIC", S$RescriptSchema.bigint, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
205
211
|
Table.mkField("event_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
@@ -218,7 +224,7 @@ var table$4 = Table.mkTable("raw_events", undefined, [
|
|
|
218
224
|
|
|
219
225
|
var RawEvents = {
|
|
220
226
|
schema: schema,
|
|
221
|
-
table: table$
|
|
227
|
+
table: table$3
|
|
222
228
|
};
|
|
223
229
|
|
|
224
230
|
var metaViewName = "_meta";
|
|
@@ -226,11 +232,11 @@ var metaViewName = "_meta";
|
|
|
226
232
|
var chainMetadataViewName = "chain_metadata";
|
|
227
233
|
|
|
228
234
|
function makeMetaViewQuery(pgSchema) {
|
|
229
|
-
return "CREATE VIEW \"" + pgSchema + "\".\"" + metaViewName + "\" AS \n SELECT \n \"" + "id" + "\" AS \"chainId\",\n \"" + "start_block" + "\" AS \"startBlock\", \n \"" + "end_block" + "\" AS \"endBlock\",\n \"" + "
|
|
235
|
+
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" + "\";";
|
|
230
236
|
}
|
|
231
237
|
|
|
232
238
|
function makeChainMetadataViewQuery(pgSchema) {
|
|
233
|
-
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 \"" + "
|
|
239
|
+
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 + "\";";
|
|
234
240
|
}
|
|
235
241
|
|
|
236
242
|
var Views = {
|
|
@@ -263,7 +269,7 @@ var schema$1 = S$RescriptSchema.schema(function (s) {
|
|
|
263
269
|
|
|
264
270
|
var rowsSchema = S$RescriptSchema.array(schema$1);
|
|
265
271
|
|
|
266
|
-
var table$
|
|
272
|
+
var table$4 = Table.mkTable(name, undefined, [
|
|
267
273
|
Table.mkField("id", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, true, undefined, undefined),
|
|
268
274
|
Table.mkField("chain_id", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
269
275
|
Table.mkField("registering_event_block_number", "INTEGER", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
@@ -276,24 +282,50 @@ var table$5 = Table.mkTable(name, undefined, [
|
|
|
276
282
|
Table.mkField("contract_name", "TEXT", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
277
283
|
]);
|
|
278
284
|
|
|
279
|
-
var entityHistory = EntityHistory.fromTable(table$
|
|
285
|
+
var entityHistory = EntityHistory.fromTable(table$4, schema$1);
|
|
280
286
|
|
|
281
287
|
var config = {
|
|
282
288
|
name: name,
|
|
283
289
|
schema: schema$1,
|
|
284
290
|
rowsSchema: rowsSchema,
|
|
285
|
-
table: table$
|
|
291
|
+
table: table$4,
|
|
286
292
|
entityHistory: entityHistory
|
|
287
293
|
};
|
|
288
294
|
|
|
295
|
+
function makeCleanUpOnRestartQuery(pgSchema, chains) {
|
|
296
|
+
var query = {
|
|
297
|
+
contents: ""
|
|
298
|
+
};
|
|
299
|
+
chains.forEach(function (chain) {
|
|
300
|
+
if (query.contents !== "") {
|
|
301
|
+
query.contents = query.contents + "\n";
|
|
302
|
+
}
|
|
303
|
+
var progressBlockNumber = chain.progress_block;
|
|
304
|
+
var progressNextBlockLogIndex = chain._progress_log_index;
|
|
305
|
+
var tmp;
|
|
306
|
+
tmp = progressNextBlockLogIndex === null ? (
|
|
307
|
+
progressBlockNumber !== -1 ? " AND registering_event_block_number > " + String(progressBlockNumber) : ""
|
|
308
|
+
) : " AND (\n registering_event_block_number > " + String(progressBlockNumber + 1 | 0) + "\n OR registering_event_block_number = " + String(progressBlockNumber + 1 | 0) + "\n AND registering_event_log_index > " + String(progressNextBlockLogIndex) + "\n)";
|
|
309
|
+
var progressBlockNumber$1 = chain.progress_block;
|
|
310
|
+
var progressNextBlockLogIndex$1 = chain._progress_log_index;
|
|
311
|
+
var tmp$1;
|
|
312
|
+
tmp$1 = progressNextBlockLogIndex$1 === null ? (
|
|
313
|
+
progressBlockNumber$1 !== -1 ? " AND entity_history_block_number > " + String(progressBlockNumber$1) : ""
|
|
314
|
+
) : " AND (\n entity_history_block_number > " + String(progressBlockNumber$1 + 1 | 0) + "\n OR entity_history_block_number = " + String(progressBlockNumber$1 + 1 | 0) + "\n AND entity_history_log_index > " + String(progressNextBlockLogIndex$1) + "\n)";
|
|
315
|
+
query.contents = query.contents + ("DELETE FROM \"" + pgSchema + "\".\"" + table$4.tableName + "\"\nWHERE chain_id = " + String(chain.id) + tmp + ";\nDELETE FROM \"" + pgSchema + "\".\"" + table$4.tableName + "_history\"\nWHERE entity_history_chain_id = " + String(chain.id) + tmp$1 + ";");
|
|
316
|
+
});
|
|
317
|
+
return query.contents;
|
|
318
|
+
}
|
|
319
|
+
|
|
289
320
|
var DynamicContractRegistry = {
|
|
290
321
|
name: name,
|
|
291
322
|
makeId: makeId,
|
|
292
323
|
schema: schema$1,
|
|
293
324
|
rowsSchema: rowsSchema,
|
|
294
|
-
table: table$
|
|
325
|
+
table: table$4,
|
|
295
326
|
entityHistory: entityHistory,
|
|
296
|
-
config: config
|
|
327
|
+
config: config,
|
|
328
|
+
makeCleanUpOnRestartQuery: makeCleanUpOnRestartQuery
|
|
297
329
|
};
|
|
298
330
|
|
|
299
331
|
var isPrimaryKey = true;
|
|
@@ -305,7 +337,6 @@ var isIndex = true;
|
|
|
305
337
|
exports.isPrimaryKey = isPrimaryKey;
|
|
306
338
|
exports.isNullable = isNullable;
|
|
307
339
|
exports.isIndex = isIndex;
|
|
308
|
-
exports.EventSyncState = EventSyncState;
|
|
309
340
|
exports.Chains = Chains;
|
|
310
341
|
exports.PersistedState = PersistedState;
|
|
311
342
|
exports.EndOfBlockRangeScannedData = EndOfBlockRangeScannedData;
|