envio 3.0.0-alpha.2 → 3.0.0-alpha.21
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/README.md +164 -30
- package/bin.mjs +49 -0
- package/evm.schema.json +79 -169
- package/fuel.schema.json +50 -21
- package/index.d.ts +578 -1
- package/index.js +4 -0
- package/package.json +47 -31
- package/rescript.json +4 -1
- package/src/Batch.res +11 -8
- package/src/Batch.res.mjs +11 -9
- package/src/ChainFetcher.res +531 -0
- package/src/ChainFetcher.res.mjs +339 -0
- package/src/ChainManager.res +190 -0
- package/src/ChainManager.res.mjs +166 -0
- package/src/Change.res +3 -3
- package/src/Config.gen.ts +19 -0
- package/src/Config.res +725 -25
- package/src/Config.res.mjs +692 -26
- package/src/{Indexer.res → Ctx.res} +1 -1
- package/src/Ecosystem.res +9 -124
- package/src/Ecosystem.res.mjs +19 -160
- package/src/Env.res +33 -73
- package/src/Env.res.mjs +29 -85
- package/src/Envio.gen.ts +3 -1
- package/src/Envio.res +77 -9
- package/src/Envio.res.mjs +39 -1
- package/src/EventConfigBuilder.res +408 -0
- package/src/EventConfigBuilder.res.mjs +376 -0
- package/src/EventProcessing.res +469 -0
- package/src/EventProcessing.res.mjs +337 -0
- package/src/EvmTypes.gen.ts +6 -0
- package/src/EvmTypes.res +1 -0
- package/src/FetchState.res +1256 -639
- package/src/FetchState.res.mjs +1135 -612
- package/src/GlobalState.res +1224 -0
- package/src/GlobalState.res.mjs +1291 -0
- package/src/GlobalStateManager.res +68 -0
- package/src/GlobalStateManager.res.mjs +75 -0
- package/src/GlobalStateManager.resi +7 -0
- package/src/HandlerLoader.res +89 -0
- package/src/HandlerLoader.res.mjs +79 -0
- package/src/HandlerRegister.res +357 -0
- package/src/HandlerRegister.res.mjs +299 -0
- package/src/HandlerRegister.resi +30 -0
- package/src/Hasura.res +111 -175
- package/src/Hasura.res.mjs +88 -150
- package/src/InMemoryStore.res +1 -1
- package/src/InMemoryStore.res.mjs +3 -3
- package/src/InMemoryTable.res +1 -1
- package/src/InMemoryTable.res.mjs +1 -1
- package/src/Internal.gen.ts +6 -0
- package/src/Internal.res +265 -12
- package/src/Internal.res.mjs +115 -1
- package/src/LoadLayer.res +444 -0
- package/src/LoadLayer.res.mjs +296 -0
- package/src/LoadLayer.resi +32 -0
- package/src/LogSelection.res +33 -27
- package/src/LogSelection.res.mjs +6 -0
- package/src/Logging.res +21 -7
- package/src/Logging.res.mjs +16 -8
- package/src/Main.res +390 -0
- package/src/Main.res.mjs +341 -0
- package/src/Persistence.res +7 -21
- package/src/Persistence.res.mjs +3 -3
- package/src/PgStorage.gen.ts +10 -0
- package/src/PgStorage.res +116 -69
- package/src/PgStorage.res.d.mts +5 -0
- package/src/PgStorage.res.mjs +93 -50
- package/src/Prometheus.res +294 -224
- package/src/Prometheus.res.mjs +353 -340
- package/src/ReorgDetection.res +6 -10
- package/src/ReorgDetection.res.mjs +6 -6
- package/src/SafeCheckpointTracking.res +4 -4
- package/src/SafeCheckpointTracking.res.mjs +2 -2
- package/src/SimulateItems.res +353 -0
- package/src/SimulateItems.res.mjs +335 -0
- package/src/Sink.res +4 -2
- package/src/Sink.res.mjs +2 -1
- package/src/TableIndices.res +0 -1
- package/src/TestIndexer.res +913 -0
- package/src/TestIndexer.res.mjs +698 -0
- package/src/TestIndexerProxyStorage.res +205 -0
- package/src/TestIndexerProxyStorage.res.mjs +151 -0
- package/src/TopicFilter.res +1 -1
- package/src/Types.ts +1 -1
- package/src/UserContext.res +424 -0
- package/src/UserContext.res.mjs +279 -0
- package/src/Utils.res +97 -26
- package/src/Utils.res.mjs +91 -44
- package/src/bindings/BigInt.res +10 -0
- package/src/bindings/BigInt.res.mjs +15 -0
- package/src/bindings/ClickHouse.res +120 -23
- package/src/bindings/ClickHouse.res.mjs +118 -28
- package/src/bindings/DateFns.res +74 -0
- package/src/bindings/DateFns.res.mjs +22 -0
- package/src/bindings/EventSource.res +11 -2
- package/src/bindings/EventSource.res.mjs +8 -1
- package/src/bindings/Express.res +1 -0
- package/src/bindings/Hrtime.res +14 -1
- package/src/bindings/Hrtime.res.mjs +22 -2
- package/src/bindings/Hrtime.resi +4 -0
- package/src/bindings/Lodash.res +0 -1
- package/src/bindings/NodeJs.res +49 -3
- package/src/bindings/NodeJs.res.mjs +11 -3
- package/src/bindings/Pino.res +24 -10
- package/src/bindings/Pino.res.mjs +14 -8
- package/src/bindings/Postgres.gen.ts +8 -0
- package/src/bindings/Postgres.res +5 -1
- package/src/bindings/Postgres.res.d.mts +5 -0
- package/src/bindings/PromClient.res +0 -10
- package/src/bindings/PromClient.res.mjs +0 -3
- package/src/bindings/Vitest.res +144 -0
- package/src/bindings/Vitest.res.mjs +9 -0
- package/src/bindings/WebSocket.res +27 -0
- package/src/bindings/WebSocket.res.mjs +2 -0
- package/src/bindings/Yargs.res +8 -0
- package/src/bindings/Yargs.res.mjs +2 -0
- package/src/db/EntityHistory.res +7 -7
- package/src/db/EntityHistory.res.mjs +9 -9
- package/src/db/InternalTable.res +59 -111
- package/src/db/InternalTable.res.mjs +73 -104
- package/src/db/Table.res +27 -8
- package/src/db/Table.res.mjs +25 -14
- package/src/sources/Evm.res +84 -0
- package/src/sources/Evm.res.mjs +105 -0
- package/src/sources/EvmChain.res +94 -0
- package/src/sources/EvmChain.res.mjs +60 -0
- package/src/sources/Fuel.res +19 -34
- package/src/sources/Fuel.res.mjs +34 -16
- package/src/sources/FuelSDK.res +38 -0
- package/src/sources/FuelSDK.res.mjs +29 -0
- package/src/sources/HyperFuel.res +2 -2
- package/src/sources/HyperFuel.resi +1 -1
- package/src/sources/HyperFuelClient.res +2 -2
- package/src/sources/HyperFuelSource.res +35 -13
- package/src/sources/HyperFuelSource.res.mjs +26 -16
- package/src/sources/HyperSync.res +61 -60
- package/src/sources/HyperSync.res.mjs +53 -67
- package/src/sources/HyperSync.resi +6 -4
- package/src/sources/HyperSyncClient.res +29 -2
- package/src/sources/HyperSyncClient.res.mjs +9 -0
- package/src/sources/HyperSyncHeightStream.res +76 -118
- package/src/sources/HyperSyncHeightStream.res.mjs +68 -75
- package/src/sources/HyperSyncSource.res +122 -143
- package/src/sources/HyperSyncSource.res.mjs +106 -121
- package/src/sources/Rpc.res +86 -14
- package/src/sources/Rpc.res.mjs +101 -9
- package/src/sources/RpcSource.res +731 -364
- package/src/sources/RpcSource.res.mjs +845 -410
- package/src/sources/RpcWebSocketHeightStream.res +181 -0
- package/src/sources/RpcWebSocketHeightStream.res.mjs +196 -0
- package/src/sources/SimulateSource.res +59 -0
- package/src/sources/SimulateSource.res.mjs +50 -0
- package/src/sources/Source.res +7 -5
- package/src/sources/SourceManager.res +358 -221
- package/src/sources/SourceManager.res.mjs +346 -171
- package/src/sources/SourceManager.resi +17 -6
- package/src/sources/Svm.res +81 -0
- package/src/sources/Svm.res.mjs +90 -0
- package/src/tui/Tui.res +247 -0
- package/src/tui/Tui.res.mjs +337 -0
- package/src/tui/bindings/Ink.res +371 -0
- package/src/tui/bindings/Ink.res.mjs +72 -0
- package/src/tui/bindings/Style.res +123 -0
- package/src/tui/bindings/Style.res.mjs +2 -0
- package/src/tui/components/BufferedProgressBar.res +40 -0
- package/src/tui/components/BufferedProgressBar.res.mjs +57 -0
- package/src/tui/components/CustomHooks.res +122 -0
- package/src/tui/components/CustomHooks.res.mjs +179 -0
- package/src/tui/components/Messages.res +41 -0
- package/src/tui/components/Messages.res.mjs +75 -0
- package/src/tui/components/SyncETA.res +174 -0
- package/src/tui/components/SyncETA.res.mjs +263 -0
- package/src/tui/components/TuiData.res +47 -0
- package/src/tui/components/TuiData.res.mjs +34 -0
- package/svm.schema.json +112 -0
- package/bin.js +0 -48
- package/src/EventRegister.res +0 -241
- package/src/EventRegister.res.mjs +0 -240
- package/src/EventRegister.resi +0 -30
- package/src/bindings/Ethers.gen.ts +0 -14
- package/src/bindings/Ethers.res +0 -204
- package/src/bindings/Ethers.res.mjs +0 -130
- /package/src/{Indexer.res.mjs → Ctx.res.mjs} +0 -0
|
@@ -2,67 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import * as Table from "./Table.res.mjs";
|
|
4
4
|
import * as Utils from "../Utils.res.mjs";
|
|
5
|
+
import * as $$BigInt from "../bindings/BigInt.res.mjs";
|
|
6
|
+
import * as Config from "../Config.res.mjs";
|
|
5
7
|
import * as Js_exn from "rescript/lib/es6/js_exn.js";
|
|
6
8
|
import * as Address from "../Address.res.mjs";
|
|
7
9
|
import * as Js_dict from "rescript/lib/es6/js_dict.js";
|
|
8
10
|
import * as Js_null from "rescript/lib/es6/js_null.js";
|
|
9
11
|
import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
|
|
12
|
+
import * as Belt_Option from "rescript/lib/es6/belt_Option.js";
|
|
10
13
|
import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
|
|
11
14
|
|
|
12
|
-
var name = "dynamic_contract_registry";
|
|
13
|
-
|
|
14
|
-
function makeId(chainId, contractAddress) {
|
|
15
|
-
return String(chainId) + "-" + contractAddress;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
var schema = S$RescriptSchema.schema(function (s) {
|
|
19
|
-
return {
|
|
20
|
-
id: s.m(S$RescriptSchema.string),
|
|
21
|
-
chain_id: s.m(S$RescriptSchema.$$int),
|
|
22
|
-
registering_event_block_number: s.m(S$RescriptSchema.$$int),
|
|
23
|
-
registering_event_log_index: s.m(S$RescriptSchema.$$int),
|
|
24
|
-
registering_event_block_timestamp: s.m(S$RescriptSchema.$$int),
|
|
25
|
-
registering_event_contract_name: s.m(S$RescriptSchema.string),
|
|
26
|
-
registering_event_name: s.m(S$RescriptSchema.string),
|
|
27
|
-
registering_event_src_address: s.m(Address.schema),
|
|
28
|
-
contract_address: s.m(Address.schema),
|
|
29
|
-
contract_name: s.m(S$RescriptSchema.string)
|
|
30
|
-
};
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
var rowsSchema = S$RescriptSchema.array(schema);
|
|
34
|
-
|
|
35
|
-
var table = Table.mkTable(name, undefined, [
|
|
36
|
-
Table.mkField("id", "String", S$RescriptSchema.string, undefined, undefined, undefined, true, undefined, undefined),
|
|
37
|
-
Table.mkField("chain_id", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
38
|
-
Table.mkField("registering_event_block_number", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
39
|
-
Table.mkField("registering_event_log_index", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
40
|
-
Table.mkField("registering_event_block_timestamp", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
41
|
-
Table.mkField("registering_event_contract_name", "String", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
42
|
-
Table.mkField("registering_event_name", "String", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
43
|
-
Table.mkField("registering_event_src_address", "String", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
44
|
-
Table.mkField("contract_address", "String", Address.schema, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
45
|
-
Table.mkField("contract_name", "String", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
46
|
-
]);
|
|
47
|
-
|
|
48
|
-
var config = {
|
|
49
|
-
name: name,
|
|
50
|
-
index: -1,
|
|
51
|
-
schema: schema,
|
|
52
|
-
rowsSchema: rowsSchema,
|
|
53
|
-
table: table
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
var DynamicContractRegistry = {
|
|
57
|
-
name: name,
|
|
58
|
-
index: -1,
|
|
59
|
-
makeId: makeId,
|
|
60
|
-
schema: schema,
|
|
61
|
-
rowsSchema: rowsSchema,
|
|
62
|
-
table: table,
|
|
63
|
-
config: config
|
|
64
|
-
};
|
|
65
|
-
|
|
66
15
|
var fields = [
|
|
67
16
|
"id",
|
|
68
17
|
"start_block",
|
|
@@ -74,11 +23,10 @@ var fields = [
|
|
|
74
23
|
"progress_block",
|
|
75
24
|
"ready_at",
|
|
76
25
|
"events_processed",
|
|
77
|
-
"_is_hyper_sync"
|
|
78
|
-
"_num_batches_fetched"
|
|
26
|
+
"_is_hyper_sync"
|
|
79
27
|
];
|
|
80
28
|
|
|
81
|
-
var table
|
|
29
|
+
var table = Table.mkTable("envio_chains", undefined, [
|
|
82
30
|
Table.mkField("id", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
83
31
|
Table.mkField("start_block", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
84
32
|
Table.mkField("end_block", "Int32", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
|
|
@@ -87,10 +35,9 @@ var table$1 = Table.mkTable("envio_chains", undefined, [
|
|
|
87
35
|
Table.mkField("source_block", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
88
36
|
Table.mkField("first_event_block", "Int32", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, undefined, undefined, undefined),
|
|
89
37
|
Table.mkField("ready_at", "Date", S$RescriptSchema.$$null(Utils.Schema.dbDate), undefined, undefined, true, undefined, undefined, undefined),
|
|
90
|
-
Table.mkField("events_processed", "
|
|
38
|
+
Table.mkField("events_processed", "UInt52", S$RescriptSchema.$$float, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
91
39
|
Table.mkField("_is_hyper_sync", "Boolean", S$RescriptSchema.bool, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
92
|
-
Table.mkField("progress_block", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
93
|
-
Table.mkField("_num_batches_fetched", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
40
|
+
Table.mkField("progress_block", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined)
|
|
94
41
|
]);
|
|
95
42
|
|
|
96
43
|
function initialFromConfig(chainConfig) {
|
|
@@ -99,14 +46,13 @@ function initialFromConfig(chainConfig) {
|
|
|
99
46
|
start_block: chainConfig.startBlock,
|
|
100
47
|
end_block: Js_null.fromOption(chainConfig.endBlock),
|
|
101
48
|
max_reorg_depth: chainConfig.maxReorgDepth,
|
|
49
|
+
source_block: 0,
|
|
102
50
|
progress_block: -1,
|
|
103
51
|
events_processed: 0,
|
|
104
52
|
first_event_block: null,
|
|
105
53
|
buffer_block: -1,
|
|
106
|
-
source_block: 0,
|
|
107
54
|
ready_at: null,
|
|
108
|
-
_is_hyper_sync: false
|
|
109
|
-
_num_batches_fetched: 0
|
|
55
|
+
_is_hyper_sync: false
|
|
110
56
|
};
|
|
111
57
|
}
|
|
112
58
|
|
|
@@ -123,6 +69,8 @@ function makeInitialValuesQuery(pgSchema, chainConfigs) {
|
|
|
123
69
|
var value = Js_dict.get(initialValues, field);
|
|
124
70
|
var match = typeof value;
|
|
125
71
|
switch (match) {
|
|
72
|
+
case "bigint" :
|
|
73
|
+
return value.toString();
|
|
126
74
|
case "boolean" :
|
|
127
75
|
if (value) {
|
|
128
76
|
return "true";
|
|
@@ -139,16 +87,14 @@ function makeInitialValuesQuery(pgSchema, chainConfigs) {
|
|
|
139
87
|
}));
|
|
140
88
|
return "(" + values.join(", ") + ")";
|
|
141
89
|
}));
|
|
142
|
-
return "INSERT INTO \"" + pgSchema + "\".\"" + table
|
|
90
|
+
return "INSERT INTO \"" + pgSchema + "\".\"" + table.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
|
|
143
91
|
}
|
|
144
92
|
|
|
145
93
|
var metaFields = [
|
|
146
|
-
"source_block",
|
|
147
94
|
"buffer_block",
|
|
148
95
|
"first_event_block",
|
|
149
96
|
"ready_at",
|
|
150
|
-
"_is_hyper_sync"
|
|
151
|
-
"_num_batches_fetched"
|
|
97
|
+
"_is_hyper_sync"
|
|
152
98
|
];
|
|
153
99
|
|
|
154
100
|
function makeMetaFieldsUpdateQuery(pgSchema) {
|
|
@@ -156,11 +102,11 @@ function makeMetaFieldsUpdateQuery(pgSchema) {
|
|
|
156
102
|
var paramIndex = index + 2 | 0;
|
|
157
103
|
return "\"" + field + "\" = $" + String(paramIndex);
|
|
158
104
|
}));
|
|
159
|
-
return "UPDATE \"" + pgSchema + "\".\"" + table
|
|
105
|
+
return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"" + "id" + "\" = $1;";
|
|
160
106
|
}
|
|
161
107
|
|
|
162
108
|
function makeGetInitialStateQuery(pgSchema) {
|
|
163
|
-
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
|
|
109
|
+
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" + "\"::float8 as \"numEventsProcessed\",\n\"" + "progress_block" + "\" as \"progressBlockNumber\",\n\"" + "source_block" + "\" as \"sourceBlockNumber\",\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 + "\".\"" + Config.DynamicContractRegistry.table.tableName + "\"\n WHERE \"chain_id\" = chains.\"" + "id" + "\"\n) as \"dynamicContracts\"\nFROM \"" + pgSchema + "\".\"" + table.tableName + "\" as chains;";
|
|
164
110
|
}
|
|
165
111
|
|
|
166
112
|
function getInitialState(sql, pgSchema) {
|
|
@@ -169,7 +115,8 @@ function getInitialState(sql, pgSchema) {
|
|
|
169
115
|
|
|
170
116
|
var progressFields = [
|
|
171
117
|
"progress_block",
|
|
172
|
-
"events_processed"
|
|
118
|
+
"events_processed",
|
|
119
|
+
"source_block"
|
|
173
120
|
];
|
|
174
121
|
|
|
175
122
|
function makeProgressFieldsUpdateQuery(pgSchema) {
|
|
@@ -177,7 +124,7 @@ function makeProgressFieldsUpdateQuery(pgSchema) {
|
|
|
177
124
|
var paramIndex = index + 2 | 0;
|
|
178
125
|
return "\"" + field + "\" = $" + String(paramIndex);
|
|
179
126
|
}));
|
|
180
|
-
return "UPDATE \"" + pgSchema + "\".\"" + table
|
|
127
|
+
return "UPDATE \"" + pgSchema + "\".\"" + table.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
|
|
181
128
|
}
|
|
182
129
|
|
|
183
130
|
function setMeta(sql, pgSchema, chainsData) {
|
|
@@ -202,7 +149,9 @@ function setProgressedChains(sql, pgSchema, progressedChains) {
|
|
|
202
149
|
var params = [];
|
|
203
150
|
params.push(data.chainId);
|
|
204
151
|
progressFields.forEach(function (field) {
|
|
205
|
-
params.push(field === "
|
|
152
|
+
params.push(field === "source_block" ? data.sourceBlockNumber : (
|
|
153
|
+
field === "progress_block" ? data.progressBlockNumber : data.totalEventsProcessed
|
|
154
|
+
));
|
|
206
155
|
});
|
|
207
156
|
promises.push(sql.unsafe(query, params, {prepare: true}));
|
|
208
157
|
});
|
|
@@ -211,7 +160,7 @@ function setProgressedChains(sql, pgSchema, progressedChains) {
|
|
|
211
160
|
|
|
212
161
|
var Chains = {
|
|
213
162
|
fields: fields,
|
|
214
|
-
table: table
|
|
163
|
+
table: table,
|
|
215
164
|
initialFromConfig: initialFromConfig,
|
|
216
165
|
makeInitialValuesQuery: makeInitialValuesQuery,
|
|
217
166
|
metaFields: metaFields,
|
|
@@ -224,7 +173,7 @@ var Chains = {
|
|
|
224
173
|
setProgressedChains: setProgressedChains
|
|
225
174
|
};
|
|
226
175
|
|
|
227
|
-
var table$
|
|
176
|
+
var table$1 = Table.mkTable("persisted_state", undefined, [
|
|
228
177
|
Table.mkField("id", "Serial", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
|
|
229
178
|
Table.mkField("envio_version", "String", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
230
179
|
Table.mkField("config_hash", "String", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
@@ -233,11 +182,24 @@ var table$2 = Table.mkTable("persisted_state", undefined, [
|
|
|
233
182
|
]);
|
|
234
183
|
|
|
235
184
|
var PersistedState = {
|
|
236
|
-
table: table$
|
|
185
|
+
table: table$1
|
|
237
186
|
};
|
|
238
187
|
|
|
239
|
-
var
|
|
240
|
-
|
|
188
|
+
var dbSchema = S$RescriptSchema.object(function (s) {
|
|
189
|
+
return {
|
|
190
|
+
id: s.f("id", $$BigInt.schema),
|
|
191
|
+
chain_id: s.f("chain_id", S$RescriptSchema.$$int),
|
|
192
|
+
block_number: s.f("block_number", S$RescriptSchema.$$int),
|
|
193
|
+
block_hash: s.f("block_hash", S$RescriptSchema.union([
|
|
194
|
+
S$RescriptSchema.string,
|
|
195
|
+
S$RescriptSchema.literal(null)
|
|
196
|
+
])),
|
|
197
|
+
events_processed: s.f("events_processed", S$RescriptSchema.$$int)
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
var table$2 = Table.mkTable("envio_checkpoints", undefined, [
|
|
202
|
+
Table.mkField("id", "UInt64", S$RescriptSchema.bigint, undefined, undefined, undefined, true, undefined, undefined),
|
|
241
203
|
Table.mkField("chain_id", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
242
204
|
Table.mkField("block_number", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
243
205
|
Table.mkField("block_hash", "String", S$RescriptSchema.$$null(S$RescriptSchema.string), undefined, undefined, true, undefined, undefined, undefined),
|
|
@@ -245,21 +207,22 @@ var table$3 = Table.mkTable("envio_checkpoints", undefined, [
|
|
|
245
207
|
]);
|
|
246
208
|
|
|
247
209
|
function makeGetReorgCheckpointsQuery(pgSchema) {
|
|
248
|
-
return "WITH reorg_chains AS (\n SELECT \n \"" + "id" + "\" as id,\n \"" + "source_block" + "\" - \"" + "max_reorg_depth" + "\" AS safe_block\n FROM \"" + pgSchema + "\".\"" + table
|
|
210
|
+
return "WITH reorg_chains AS (\n SELECT \n \"" + "id" + "\" as id,\n \"" + "source_block" + "\" - \"" + "max_reorg_depth" + "\" AS safe_block\n FROM \"" + pgSchema + "\".\"" + table.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$2.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;";
|
|
249
211
|
}
|
|
250
212
|
|
|
251
213
|
function makeCommitedCheckpointIdQuery(pgSchema) {
|
|
252
|
-
return "SELECT COALESCE(MAX(" + "id" + "), " +
|
|
214
|
+
return "SELECT COALESCE(MAX(" + "id" + "), " + (0n).toString() + ") AS id FROM \"" + pgSchema + "\".\"" + table$2.tableName + "\";";
|
|
253
215
|
}
|
|
254
216
|
|
|
255
217
|
function makeInsertCheckpointQuery(pgSchema) {
|
|
256
|
-
return "INSERT INTO \"" + pgSchema + "\".\"" + table$
|
|
218
|
+
return "INSERT INTO \"" + pgSchema + "\".\"" + table$2.tableName + "\" (\"" + "id" + "\", \"" + "chain_id" + "\", \"" + "block_number" + "\", \"" + "block_hash" + "\", \"" + "events_processed" + "\")\nSELECT * FROM unnest($1::BIGINT[],$2::INTEGER[],$3::INTEGER[],$4::TEXT[],$5::INTEGER[]);";
|
|
257
219
|
}
|
|
258
220
|
|
|
259
221
|
function insert(sql, pgSchema, checkpointIds, checkpointChainIds, checkpointBlockNumbers, checkpointBlockHashes, checkpointEventsProcessed) {
|
|
260
222
|
var query = makeInsertCheckpointQuery(pgSchema);
|
|
223
|
+
var checkpointIdStrings = $$BigInt.arrayToStringArray(checkpointIds);
|
|
261
224
|
return sql.unsafe(query, [
|
|
262
|
-
|
|
225
|
+
checkpointIdStrings,
|
|
263
226
|
checkpointChainIds,
|
|
264
227
|
checkpointBlockNumbers,
|
|
265
228
|
checkpointBlockHashes,
|
|
@@ -268,39 +231,45 @@ function insert(sql, pgSchema, checkpointIds, checkpointChainIds, checkpointBloc
|
|
|
268
231
|
}
|
|
269
232
|
|
|
270
233
|
function rollback(sql, pgSchema, rollbackTargetCheckpointId) {
|
|
271
|
-
return sql.unsafe("DELETE FROM \"" + pgSchema + "\".\"" + table$
|
|
234
|
+
return sql.unsafe("DELETE FROM \"" + pgSchema + "\".\"" + table$2.tableName + "\" WHERE \"" + "id" + "\" > $1;", [rollbackTargetCheckpointId.toString()], {prepare: true});
|
|
272
235
|
}
|
|
273
236
|
|
|
274
237
|
function makePruneStaleCheckpointsQuery(pgSchema) {
|
|
275
|
-
return "DELETE FROM \"" + pgSchema + "\".\"" + table$
|
|
238
|
+
return "DELETE FROM \"" + pgSchema + "\".\"" + table$2.tableName + "\" WHERE \"" + "id" + "\" < $1;";
|
|
276
239
|
}
|
|
277
240
|
|
|
278
241
|
function pruneStaleCheckpoints(sql, pgSchema, safeCheckpointId) {
|
|
279
|
-
return sql.unsafe(makePruneStaleCheckpointsQuery(pgSchema), [safeCheckpointId], {prepare: true});
|
|
242
|
+
return sql.unsafe(makePruneStaleCheckpointsQuery(pgSchema), [safeCheckpointId.toString()], {prepare: true});
|
|
280
243
|
}
|
|
281
244
|
|
|
282
245
|
function makeGetRollbackTargetCheckpointQuery(pgSchema) {
|
|
283
|
-
return "SELECT \"" + "id" + "\" FROM \"" + pgSchema + "\".\"" + table$
|
|
246
|
+
return "SELECT \"" + "id" + "\" FROM \"" + pgSchema + "\".\"" + table$2.tableName + "\"\nWHERE \n \"" + "chain_id" + "\" = $1 AND\n \"" + "block_number" + "\" <= $2\nORDER BY \"" + "id" + "\" DESC\nLIMIT 1;";
|
|
284
247
|
}
|
|
285
248
|
|
|
286
249
|
function getRollbackTargetCheckpoint(sql, pgSchema, reorgChainId, lastKnownValidBlockNumber) {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
250
|
+
var rawResult = sql.unsafe(makeGetRollbackTargetCheckpointQuery(pgSchema), [
|
|
251
|
+
reorgChainId,
|
|
252
|
+
lastKnownValidBlockNumber
|
|
253
|
+
], {prepare: true});
|
|
254
|
+
return rawResult.then(function (rows) {
|
|
255
|
+
return Belt_Option.map(Belt_Array.get(rows, 0), (function (row) {
|
|
256
|
+
return BigInt(row.id);
|
|
257
|
+
}));
|
|
258
|
+
});
|
|
291
259
|
}
|
|
292
260
|
|
|
293
261
|
function makeGetRollbackProgressDiffQuery(pgSchema) {
|
|
294
|
-
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$
|
|
262
|
+
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$2.tableName + "\"\nWHERE \"" + "id" + "\" > $1\nGROUP BY \"" + "chain_id" + "\";";
|
|
295
263
|
}
|
|
296
264
|
|
|
297
265
|
function getRollbackProgressDiff(sql, pgSchema, rollbackTargetCheckpointId) {
|
|
298
|
-
return sql.unsafe(makeGetRollbackProgressDiffQuery(pgSchema), [rollbackTargetCheckpointId], {prepare: true});
|
|
266
|
+
return sql.unsafe(makeGetRollbackProgressDiffQuery(pgSchema), [rollbackTargetCheckpointId.toString()], {prepare: true});
|
|
299
267
|
}
|
|
300
268
|
|
|
301
269
|
var Checkpoints = {
|
|
302
|
-
|
|
303
|
-
|
|
270
|
+
dbSchema: dbSchema,
|
|
271
|
+
initialCheckpointId: 0n,
|
|
272
|
+
table: table$2,
|
|
304
273
|
makeGetReorgCheckpointsQuery: makeGetReorgCheckpointsQuery,
|
|
305
274
|
makeCommitedCheckpointIdQuery: makeCommitedCheckpointIdQuery,
|
|
306
275
|
makeInsertCheckpointQuery: makeInsertCheckpointQuery,
|
|
@@ -314,7 +283,7 @@ var Checkpoints = {
|
|
|
314
283
|
getRollbackProgressDiff: getRollbackProgressDiff
|
|
315
284
|
};
|
|
316
285
|
|
|
317
|
-
var schema
|
|
286
|
+
var schema = S$RescriptSchema.schema(function (s) {
|
|
318
287
|
return {
|
|
319
288
|
chain_id: s.m(S$RescriptSchema.$$int),
|
|
320
289
|
event_id: s.m(S$RescriptSchema.bigint),
|
|
@@ -331,11 +300,9 @@ var schema$1 = S$RescriptSchema.schema(function (s) {
|
|
|
331
300
|
};
|
|
332
301
|
});
|
|
333
302
|
|
|
334
|
-
var table$
|
|
303
|
+
var table$3 = Table.mkTable("raw_events", undefined, [
|
|
335
304
|
Table.mkField("chain_id", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
336
|
-
Table.mkField("event_id",
|
|
337
|
-
type: "BigInt"
|
|
338
|
-
}, S$RescriptSchema.bigint, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
305
|
+
Table.mkField("event_id", "UInt64", S$RescriptSchema.bigint, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
339
306
|
Table.mkField("event_name", "String", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
340
307
|
Table.mkField("contract_name", "String", S$RescriptSchema.string, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
341
308
|
Table.mkField("block_number", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
|
|
@@ -346,12 +313,12 @@ var table$4 = Table.mkTable("raw_events", undefined, [
|
|
|
346
313
|
Table.mkField("block_fields", "Json", S$RescriptSchema.json(false), undefined, undefined, undefined, undefined, undefined, undefined),
|
|
347
314
|
Table.mkField("transaction_fields", "Json", S$RescriptSchema.json(false), undefined, undefined, undefined, undefined, undefined, undefined),
|
|
348
315
|
Table.mkField("params", "Json", S$RescriptSchema.json(false), undefined, undefined, undefined, undefined, undefined, undefined),
|
|
349
|
-
Table.mkField("serial", "
|
|
316
|
+
Table.mkField("serial", "BigSerial", S$RescriptSchema.$$null(S$RescriptSchema.bigint), undefined, undefined, true, true, undefined, undefined)
|
|
350
317
|
]);
|
|
351
318
|
|
|
352
319
|
var RawEvents = {
|
|
353
|
-
schema: schema
|
|
354
|
-
table: table$
|
|
320
|
+
schema: schema,
|
|
321
|
+
table: table$3
|
|
355
322
|
};
|
|
356
323
|
|
|
357
324
|
var metaViewName = "_meta";
|
|
@@ -359,11 +326,11 @@ var metaViewName = "_meta";
|
|
|
359
326
|
var chainMetadataViewName = "chain_metadata";
|
|
360
327
|
|
|
361
328
|
function makeMetaViewQuery(pgSchema) {
|
|
362
|
-
return "CREATE VIEW \"" + pgSchema + "\".\"" + metaViewName + "\" AS \nSELECT \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\"\nFROM \"" + pgSchema + "\".\"" + table
|
|
329
|
+
return "CREATE VIEW \"" + pgSchema + "\".\"" + metaViewName + "\" AS \nSELECT \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" + "\"::float4 AS \"eventsProcessed\",\n \"" + "source_block" + "\" AS \"sourceBlock\",\n \"" + "ready_at" + "\" AS \"readyAt\",\n (\"" + "ready_at" + "\" IS NOT NULL) AS \"isReady\"\nFROM \"" + pgSchema + "\".\"" + table.tableName + "\"\nORDER BY \"" + "id" + "\";";
|
|
363
330
|
}
|
|
364
331
|
|
|
365
332
|
function makeChainMetadataViewQuery(pgSchema) {
|
|
366
|
-
return "CREATE VIEW \"" + pgSchema + "\".\"" + chainMetadataViewName + "\" AS \nSELECT \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
|
|
333
|
+
return "CREATE VIEW \"" + pgSchema + "\".\"" + chainMetadataViewName + "\" AS \nSELECT \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 0 AS \"num_batches_fetched\",\n \"" + "events_processed" + "\"::float4 AS \"num_events_processed\",\n \"" + "start_block" + "\" AS \"start_block\",\n \"" + "ready_at" + "\" AS \"timestamp_caught_up_to_head_or_endblock\"\nFROM \"" + pgSchema + "\".\"" + table.tableName + "\";";
|
|
367
334
|
}
|
|
368
335
|
|
|
369
336
|
var Views = {
|
|
@@ -379,6 +346,8 @@ var isNullable = true;
|
|
|
379
346
|
|
|
380
347
|
var isIndex = true;
|
|
381
348
|
|
|
349
|
+
var DynamicContractRegistry;
|
|
350
|
+
|
|
382
351
|
export {
|
|
383
352
|
isPrimaryKey ,
|
|
384
353
|
isNullable ,
|
|
@@ -390,4 +359,4 @@ export {
|
|
|
390
359
|
RawEvents ,
|
|
391
360
|
Views ,
|
|
392
361
|
}
|
|
393
|
-
/*
|
|
362
|
+
/* table Not a pure module */
|
package/src/db/Table.res
CHANGED
|
@@ -22,11 +22,14 @@ type fieldType =
|
|
|
22
22
|
| String
|
|
23
23
|
| Boolean
|
|
24
24
|
| Uint32
|
|
25
|
+
| UInt52
|
|
26
|
+
| UInt64
|
|
25
27
|
| Int32
|
|
26
28
|
| Number
|
|
27
29
|
| BigInt({precision?: int})
|
|
28
30
|
| BigDecimal({config?: (int, int)}) // (precision, scale)
|
|
29
31
|
| Serial
|
|
32
|
+
| BigSerial
|
|
30
33
|
| Json
|
|
31
34
|
| Date
|
|
32
35
|
| Enum({config: enumConfig<enum>})
|
|
@@ -113,6 +116,8 @@ let getPgFieldType = (
|
|
|
113
116
|
| Boolean => (Postgres.Boolean :> string)
|
|
114
117
|
| Int32 => (Postgres.Integer :> string)
|
|
115
118
|
| Uint32 => (Postgres.BigInt :> string)
|
|
119
|
+
| UInt52 => (Postgres.BigInt :> string)
|
|
120
|
+
| UInt64 => (Postgres.BigInt :> string)
|
|
116
121
|
| Number => (Postgres.DoublePrecision :> string)
|
|
117
122
|
| BigInt({?precision}) =>
|
|
118
123
|
(Postgres.Numeric :> string) ++
|
|
@@ -129,6 +134,7 @@ let getPgFieldType = (
|
|
|
129
134
|
}
|
|
130
135
|
|
|
131
136
|
| Serial => (Postgres.Serial :> string)
|
|
137
|
+
| BigSerial => (Postgres.BigSerial :> string)
|
|
132
138
|
| Json => (Postgres.JsonB :> string)
|
|
133
139
|
| Date =>
|
|
134
140
|
(isNullable ? Postgres.TimestampWithTimezoneNull : Postgres.TimestampWithTimezone :> string)
|
|
@@ -147,10 +153,17 @@ let getPgFieldType = (
|
|
|
147
153
|
columnType ++ (isArray ? "[]" : "")
|
|
148
154
|
}
|
|
149
155
|
|
|
156
|
+
type indexFieldDirection = Asc | Desc
|
|
157
|
+
|
|
158
|
+
type compositeIndexField = {
|
|
159
|
+
fieldName: string,
|
|
160
|
+
direction: indexFieldDirection,
|
|
161
|
+
}
|
|
162
|
+
|
|
150
163
|
type table = {
|
|
151
164
|
tableName: string,
|
|
152
165
|
fields: array<fieldOrDerived>,
|
|
153
|
-
compositeIndices: array<array<
|
|
166
|
+
compositeIndices: array<array<compositeIndexField>>,
|
|
154
167
|
}
|
|
155
168
|
|
|
156
169
|
let mkTable = (tableName, ~compositeIndices=[], ~fields) => {
|
|
@@ -226,14 +239,15 @@ exception NonExistingTableField(string)
|
|
|
226
239
|
Gets all composite indicies (whether they are single indices or not)
|
|
227
240
|
And maps the fields defined to their actual db name (some have _id suffix)
|
|
228
241
|
*/
|
|
229
|
-
let getUnfilteredCompositeIndicesUnsafe = (table): array<array<
|
|
242
|
+
let getUnfilteredCompositeIndicesUnsafe = (table): array<array<compositeIndexField>> => {
|
|
230
243
|
table.compositeIndices->Array.map(compositeIndex =>
|
|
231
|
-
compositeIndex->Array.map(
|
|
232
|
-
switch table->getFieldByName(
|
|
244
|
+
compositeIndex->Array.map(indexField => {
|
|
245
|
+
let dbFieldName = switch table->getFieldByName(indexField.fieldName) {
|
|
233
246
|
| Some(field) => field->getFieldName
|
|
234
|
-
| None => raise(NonExistingTableField(
|
|
247
|
+
| None => raise(NonExistingTableField(indexField.fieldName)) //Unexpected should be validated in schema parser
|
|
235
248
|
}
|
|
236
|
-
|
|
249
|
+
{fieldName: dbFieldName, direction: indexField.direction}
|
|
250
|
+
})
|
|
237
251
|
)
|
|
238
252
|
}
|
|
239
253
|
|
|
@@ -347,7 +361,12 @@ let getSingleIndices = (table): array<string> => {
|
|
|
347
361
|
->getUnfilteredCompositeIndicesUnsafe
|
|
348
362
|
//get all composite indices with only 1 field defined
|
|
349
363
|
//this is still a single index
|
|
350
|
-
->Array.
|
|
364
|
+
->Array.keepMap(cidx =>
|
|
365
|
+
switch cidx {
|
|
366
|
+
| [{fieldName}] => Some([fieldName])
|
|
367
|
+
| _ => None
|
|
368
|
+
}
|
|
369
|
+
)
|
|
351
370
|
->Array.concat([indexFields])
|
|
352
371
|
->Array.concatMany
|
|
353
372
|
->Set.String.fromArray
|
|
@@ -359,7 +378,7 @@ let getSingleIndices = (table): array<string> => {
|
|
|
359
378
|
Gets all composite indicies
|
|
360
379
|
And maps the fields defined to their actual db name (some have _id suffix)
|
|
361
380
|
*/
|
|
362
|
-
let getCompositeIndices = (table): array<array<
|
|
381
|
+
let getCompositeIndices = (table): array<array<compositeIndexField>> => {
|
|
363
382
|
table
|
|
364
383
|
->getUnfilteredCompositeIndicesUnsafe
|
|
365
384
|
->Array.keep(ind => ind->Array.length > 1)
|
package/src/db/Table.res.mjs
CHANGED
|
@@ -83,9 +83,6 @@ function getPgFieldType(fieldType, pgSchema, isArray, isNumericArrayAsText, isNu
|
|
|
83
83
|
case "Boolean" :
|
|
84
84
|
columnType = "BOOLEAN";
|
|
85
85
|
break;
|
|
86
|
-
case "Uint32" :
|
|
87
|
-
columnType = "BIGINT";
|
|
88
|
-
break;
|
|
89
86
|
case "Int32" :
|
|
90
87
|
columnType = "INTEGER";
|
|
91
88
|
break;
|
|
@@ -95,13 +92,17 @@ function getPgFieldType(fieldType, pgSchema, isArray, isNumericArrayAsText, isNu
|
|
|
95
92
|
case "Serial" :
|
|
96
93
|
columnType = "SERIAL";
|
|
97
94
|
break;
|
|
95
|
+
case "BigSerial" :
|
|
96
|
+
columnType = "BIGSERIAL";
|
|
97
|
+
break;
|
|
98
98
|
case "Json" :
|
|
99
99
|
columnType = "JSONB";
|
|
100
100
|
break;
|
|
101
101
|
case "Date" :
|
|
102
102
|
columnType = isNullable ? "TIMESTAMP WITH TIME ZONE NULL" : "TIMESTAMP WITH TIME ZONE";
|
|
103
103
|
break;
|
|
104
|
-
|
|
104
|
+
default:
|
|
105
|
+
columnType = "BIGINT";
|
|
105
106
|
}
|
|
106
107
|
} else {
|
|
107
108
|
switch (fieldType.type) {
|
|
@@ -230,16 +231,22 @@ var NonExistingTableField = /* @__PURE__ */Caml_exceptions.create("Table.NonExis
|
|
|
230
231
|
|
|
231
232
|
function getUnfilteredCompositeIndicesUnsafe(table) {
|
|
232
233
|
return Belt_Array.map(table.compositeIndices, (function (compositeIndex) {
|
|
233
|
-
return Belt_Array.map(compositeIndex, (function (
|
|
234
|
-
var field = getFieldByName(table,
|
|
234
|
+
return Belt_Array.map(compositeIndex, (function (indexField) {
|
|
235
|
+
var field = getFieldByName(table, indexField.fieldName);
|
|
236
|
+
var dbFieldName;
|
|
235
237
|
if (field !== undefined) {
|
|
236
|
-
|
|
238
|
+
dbFieldName = getFieldName(field);
|
|
239
|
+
} else {
|
|
240
|
+
throw {
|
|
241
|
+
RE_EXN_ID: NonExistingTableField,
|
|
242
|
+
_1: indexField.fieldName,
|
|
243
|
+
Error: new Error()
|
|
244
|
+
};
|
|
237
245
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
};
|
|
246
|
+
return {
|
|
247
|
+
fieldName: dbFieldName,
|
|
248
|
+
direction: indexField.direction
|
|
249
|
+
};
|
|
243
250
|
}));
|
|
244
251
|
}));
|
|
245
252
|
}
|
|
@@ -354,8 +361,12 @@ function getSingleIndices(table) {
|
|
|
354
361
|
}
|
|
355
362
|
|
|
356
363
|
}));
|
|
357
|
-
return Belt_SetString.toArray(Belt_SetString.fromArray(Belt_Array.concatMany(Belt_Array.concat(Belt_Array.
|
|
358
|
-
|
|
364
|
+
return Belt_SetString.toArray(Belt_SetString.fromArray(Belt_Array.concatMany(Belt_Array.concat(Belt_Array.keepMap(getUnfilteredCompositeIndicesUnsafe(table), (function (cidx) {
|
|
365
|
+
if (cidx.length !== 1) {
|
|
366
|
+
return ;
|
|
367
|
+
}
|
|
368
|
+
var match = cidx[0];
|
|
369
|
+
return [match.fieldName];
|
|
359
370
|
})), [indexFields])))).sort();
|
|
360
371
|
}
|
|
361
372
|
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
@get external getNumber: Internal.eventBlock => int = "number"
|
|
2
|
+
@get external getTimestamp: Internal.eventBlock => int = "timestamp"
|
|
3
|
+
@get external getId: Internal.eventBlock => string = "hash"
|
|
4
|
+
|
|
5
|
+
let cleanUpRawEventFieldsInPlace: Js.Json.t => unit = %raw(`fields => {
|
|
6
|
+
delete fields.hash
|
|
7
|
+
delete fields.number
|
|
8
|
+
delete fields.timestamp
|
|
9
|
+
}`)
|
|
10
|
+
|
|
11
|
+
let ecosystem: Ecosystem.t = {
|
|
12
|
+
name: Evm,
|
|
13
|
+
blockFields: [
|
|
14
|
+
"number",
|
|
15
|
+
"timestamp",
|
|
16
|
+
"hash",
|
|
17
|
+
"parentHash",
|
|
18
|
+
"nonce",
|
|
19
|
+
"sha3Uncles",
|
|
20
|
+
"logsBloom",
|
|
21
|
+
"transactionsRoot",
|
|
22
|
+
"stateRoot",
|
|
23
|
+
"receiptsRoot",
|
|
24
|
+
"miner",
|
|
25
|
+
"difficulty",
|
|
26
|
+
"totalDifficulty",
|
|
27
|
+
"extraData",
|
|
28
|
+
"size",
|
|
29
|
+
"gasLimit",
|
|
30
|
+
"gasUsed",
|
|
31
|
+
"uncles",
|
|
32
|
+
"baseFeePerGas",
|
|
33
|
+
"blobGasUsed",
|
|
34
|
+
"excessBlobGas",
|
|
35
|
+
"parentBeaconBlockRoot",
|
|
36
|
+
"withdrawalsRoot",
|
|
37
|
+
"l1BlockNumber",
|
|
38
|
+
"sendCount",
|
|
39
|
+
"sendRoot",
|
|
40
|
+
"mixHash",
|
|
41
|
+
],
|
|
42
|
+
transactionFields: [
|
|
43
|
+
"transactionIndex",
|
|
44
|
+
"hash",
|
|
45
|
+
"from",
|
|
46
|
+
"to",
|
|
47
|
+
"gas",
|
|
48
|
+
"gasPrice",
|
|
49
|
+
"maxPriorityFeePerGas",
|
|
50
|
+
"maxFeePerGas",
|
|
51
|
+
"cumulativeGasUsed",
|
|
52
|
+
"effectiveGasPrice",
|
|
53
|
+
"gasUsed",
|
|
54
|
+
"input",
|
|
55
|
+
"nonce",
|
|
56
|
+
"value",
|
|
57
|
+
"v",
|
|
58
|
+
"r",
|
|
59
|
+
"s",
|
|
60
|
+
"contractAddress",
|
|
61
|
+
"logsBloom",
|
|
62
|
+
"root",
|
|
63
|
+
"status",
|
|
64
|
+
"yParity",
|
|
65
|
+
"chainId",
|
|
66
|
+
"maxFeePerBlobGas",
|
|
67
|
+
"blobVersionedHashes",
|
|
68
|
+
"type",
|
|
69
|
+
"l1Fee",
|
|
70
|
+
"l1GasPrice",
|
|
71
|
+
"l1GasUsed",
|
|
72
|
+
"l1FeeScalar",
|
|
73
|
+
"gasUsedForL1",
|
|
74
|
+
"accessList",
|
|
75
|
+
"authorizationList",
|
|
76
|
+
],
|
|
77
|
+
blockNumberName: "number",
|
|
78
|
+
blockTimestampName: "timestamp",
|
|
79
|
+
blockHashName: "hash",
|
|
80
|
+
getNumber,
|
|
81
|
+
getTimestamp,
|
|
82
|
+
getId,
|
|
83
|
+
cleanUpRawEventFieldsInPlace,
|
|
84
|
+
}
|