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.
Files changed (184) hide show
  1. package/README.md +164 -30
  2. package/bin.mjs +49 -0
  3. package/evm.schema.json +79 -169
  4. package/fuel.schema.json +50 -21
  5. package/index.d.ts +578 -1
  6. package/index.js +4 -0
  7. package/package.json +47 -31
  8. package/rescript.json +4 -1
  9. package/src/Batch.res +11 -8
  10. package/src/Batch.res.mjs +11 -9
  11. package/src/ChainFetcher.res +531 -0
  12. package/src/ChainFetcher.res.mjs +339 -0
  13. package/src/ChainManager.res +190 -0
  14. package/src/ChainManager.res.mjs +166 -0
  15. package/src/Change.res +3 -3
  16. package/src/Config.gen.ts +19 -0
  17. package/src/Config.res +725 -25
  18. package/src/Config.res.mjs +692 -26
  19. package/src/{Indexer.res → Ctx.res} +1 -1
  20. package/src/Ecosystem.res +9 -124
  21. package/src/Ecosystem.res.mjs +19 -160
  22. package/src/Env.res +33 -73
  23. package/src/Env.res.mjs +29 -85
  24. package/src/Envio.gen.ts +3 -1
  25. package/src/Envio.res +77 -9
  26. package/src/Envio.res.mjs +39 -1
  27. package/src/EventConfigBuilder.res +408 -0
  28. package/src/EventConfigBuilder.res.mjs +376 -0
  29. package/src/EventProcessing.res +469 -0
  30. package/src/EventProcessing.res.mjs +337 -0
  31. package/src/EvmTypes.gen.ts +6 -0
  32. package/src/EvmTypes.res +1 -0
  33. package/src/FetchState.res +1256 -639
  34. package/src/FetchState.res.mjs +1135 -612
  35. package/src/GlobalState.res +1224 -0
  36. package/src/GlobalState.res.mjs +1291 -0
  37. package/src/GlobalStateManager.res +68 -0
  38. package/src/GlobalStateManager.res.mjs +75 -0
  39. package/src/GlobalStateManager.resi +7 -0
  40. package/src/HandlerLoader.res +89 -0
  41. package/src/HandlerLoader.res.mjs +79 -0
  42. package/src/HandlerRegister.res +357 -0
  43. package/src/HandlerRegister.res.mjs +299 -0
  44. package/src/HandlerRegister.resi +30 -0
  45. package/src/Hasura.res +111 -175
  46. package/src/Hasura.res.mjs +88 -150
  47. package/src/InMemoryStore.res +1 -1
  48. package/src/InMemoryStore.res.mjs +3 -3
  49. package/src/InMemoryTable.res +1 -1
  50. package/src/InMemoryTable.res.mjs +1 -1
  51. package/src/Internal.gen.ts +6 -0
  52. package/src/Internal.res +265 -12
  53. package/src/Internal.res.mjs +115 -1
  54. package/src/LoadLayer.res +444 -0
  55. package/src/LoadLayer.res.mjs +296 -0
  56. package/src/LoadLayer.resi +32 -0
  57. package/src/LogSelection.res +33 -27
  58. package/src/LogSelection.res.mjs +6 -0
  59. package/src/Logging.res +21 -7
  60. package/src/Logging.res.mjs +16 -8
  61. package/src/Main.res +390 -0
  62. package/src/Main.res.mjs +341 -0
  63. package/src/Persistence.res +7 -21
  64. package/src/Persistence.res.mjs +3 -3
  65. package/src/PgStorage.gen.ts +10 -0
  66. package/src/PgStorage.res +116 -69
  67. package/src/PgStorage.res.d.mts +5 -0
  68. package/src/PgStorage.res.mjs +93 -50
  69. package/src/Prometheus.res +294 -224
  70. package/src/Prometheus.res.mjs +353 -340
  71. package/src/ReorgDetection.res +6 -10
  72. package/src/ReorgDetection.res.mjs +6 -6
  73. package/src/SafeCheckpointTracking.res +4 -4
  74. package/src/SafeCheckpointTracking.res.mjs +2 -2
  75. package/src/SimulateItems.res +353 -0
  76. package/src/SimulateItems.res.mjs +335 -0
  77. package/src/Sink.res +4 -2
  78. package/src/Sink.res.mjs +2 -1
  79. package/src/TableIndices.res +0 -1
  80. package/src/TestIndexer.res +913 -0
  81. package/src/TestIndexer.res.mjs +698 -0
  82. package/src/TestIndexerProxyStorage.res +205 -0
  83. package/src/TestIndexerProxyStorage.res.mjs +151 -0
  84. package/src/TopicFilter.res +1 -1
  85. package/src/Types.ts +1 -1
  86. package/src/UserContext.res +424 -0
  87. package/src/UserContext.res.mjs +279 -0
  88. package/src/Utils.res +97 -26
  89. package/src/Utils.res.mjs +91 -44
  90. package/src/bindings/BigInt.res +10 -0
  91. package/src/bindings/BigInt.res.mjs +15 -0
  92. package/src/bindings/ClickHouse.res +120 -23
  93. package/src/bindings/ClickHouse.res.mjs +118 -28
  94. package/src/bindings/DateFns.res +74 -0
  95. package/src/bindings/DateFns.res.mjs +22 -0
  96. package/src/bindings/EventSource.res +11 -2
  97. package/src/bindings/EventSource.res.mjs +8 -1
  98. package/src/bindings/Express.res +1 -0
  99. package/src/bindings/Hrtime.res +14 -1
  100. package/src/bindings/Hrtime.res.mjs +22 -2
  101. package/src/bindings/Hrtime.resi +4 -0
  102. package/src/bindings/Lodash.res +0 -1
  103. package/src/bindings/NodeJs.res +49 -3
  104. package/src/bindings/NodeJs.res.mjs +11 -3
  105. package/src/bindings/Pino.res +24 -10
  106. package/src/bindings/Pino.res.mjs +14 -8
  107. package/src/bindings/Postgres.gen.ts +8 -0
  108. package/src/bindings/Postgres.res +5 -1
  109. package/src/bindings/Postgres.res.d.mts +5 -0
  110. package/src/bindings/PromClient.res +0 -10
  111. package/src/bindings/PromClient.res.mjs +0 -3
  112. package/src/bindings/Vitest.res +144 -0
  113. package/src/bindings/Vitest.res.mjs +9 -0
  114. package/src/bindings/WebSocket.res +27 -0
  115. package/src/bindings/WebSocket.res.mjs +2 -0
  116. package/src/bindings/Yargs.res +8 -0
  117. package/src/bindings/Yargs.res.mjs +2 -0
  118. package/src/db/EntityHistory.res +7 -7
  119. package/src/db/EntityHistory.res.mjs +9 -9
  120. package/src/db/InternalTable.res +59 -111
  121. package/src/db/InternalTable.res.mjs +73 -104
  122. package/src/db/Table.res +27 -8
  123. package/src/db/Table.res.mjs +25 -14
  124. package/src/sources/Evm.res +84 -0
  125. package/src/sources/Evm.res.mjs +105 -0
  126. package/src/sources/EvmChain.res +94 -0
  127. package/src/sources/EvmChain.res.mjs +60 -0
  128. package/src/sources/Fuel.res +19 -34
  129. package/src/sources/Fuel.res.mjs +34 -16
  130. package/src/sources/FuelSDK.res +38 -0
  131. package/src/sources/FuelSDK.res.mjs +29 -0
  132. package/src/sources/HyperFuel.res +2 -2
  133. package/src/sources/HyperFuel.resi +1 -1
  134. package/src/sources/HyperFuelClient.res +2 -2
  135. package/src/sources/HyperFuelSource.res +35 -13
  136. package/src/sources/HyperFuelSource.res.mjs +26 -16
  137. package/src/sources/HyperSync.res +61 -60
  138. package/src/sources/HyperSync.res.mjs +53 -67
  139. package/src/sources/HyperSync.resi +6 -4
  140. package/src/sources/HyperSyncClient.res +29 -2
  141. package/src/sources/HyperSyncClient.res.mjs +9 -0
  142. package/src/sources/HyperSyncHeightStream.res +76 -118
  143. package/src/sources/HyperSyncHeightStream.res.mjs +68 -75
  144. package/src/sources/HyperSyncSource.res +122 -143
  145. package/src/sources/HyperSyncSource.res.mjs +106 -121
  146. package/src/sources/Rpc.res +86 -14
  147. package/src/sources/Rpc.res.mjs +101 -9
  148. package/src/sources/RpcSource.res +731 -364
  149. package/src/sources/RpcSource.res.mjs +845 -410
  150. package/src/sources/RpcWebSocketHeightStream.res +181 -0
  151. package/src/sources/RpcWebSocketHeightStream.res.mjs +196 -0
  152. package/src/sources/SimulateSource.res +59 -0
  153. package/src/sources/SimulateSource.res.mjs +50 -0
  154. package/src/sources/Source.res +7 -5
  155. package/src/sources/SourceManager.res +358 -221
  156. package/src/sources/SourceManager.res.mjs +346 -171
  157. package/src/sources/SourceManager.resi +17 -6
  158. package/src/sources/Svm.res +81 -0
  159. package/src/sources/Svm.res.mjs +90 -0
  160. package/src/tui/Tui.res +247 -0
  161. package/src/tui/Tui.res.mjs +337 -0
  162. package/src/tui/bindings/Ink.res +371 -0
  163. package/src/tui/bindings/Ink.res.mjs +72 -0
  164. package/src/tui/bindings/Style.res +123 -0
  165. package/src/tui/bindings/Style.res.mjs +2 -0
  166. package/src/tui/components/BufferedProgressBar.res +40 -0
  167. package/src/tui/components/BufferedProgressBar.res.mjs +57 -0
  168. package/src/tui/components/CustomHooks.res +122 -0
  169. package/src/tui/components/CustomHooks.res.mjs +179 -0
  170. package/src/tui/components/Messages.res +41 -0
  171. package/src/tui/components/Messages.res.mjs +75 -0
  172. package/src/tui/components/SyncETA.res +174 -0
  173. package/src/tui/components/SyncETA.res.mjs +263 -0
  174. package/src/tui/components/TuiData.res +47 -0
  175. package/src/tui/components/TuiData.res.mjs +34 -0
  176. package/svm.schema.json +112 -0
  177. package/bin.js +0 -48
  178. package/src/EventRegister.res +0 -241
  179. package/src/EventRegister.res.mjs +0 -240
  180. package/src/EventRegister.resi +0 -30
  181. package/src/bindings/Ethers.gen.ts +0 -14
  182. package/src/bindings/Ethers.res +0 -204
  183. package/src/bindings/Ethers.res.mjs +0 -130
  184. /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$1 = Table.mkTable("envio_chains", undefined, [
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", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, undefined, undefined, undefined),
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$1.tableName + "\" (" + columnNames.join(", ") + ")\nVALUES " + valuesRows.join(",\n ") + ";";
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$1.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"" + "id" + "\" = $1;";
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$1.tableName + "\" as chains;";
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$1.tableName + "\"\nSET " + setClauses.join(",\n ") + "\nWHERE \"id\" = $1;";
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 === "progress_block" ? data.progressBlockNumber : data.totalEventsProcessed);
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$1,
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$2 = Table.mkTable("persisted_state", undefined, [
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$2
185
+ table: table$1
237
186
  };
238
187
 
239
- var table$3 = Table.mkTable("envio_checkpoints", undefined, [
240
- Table.mkField("id", "Int32", S$RescriptSchema.$$int, undefined, undefined, undefined, true, undefined, undefined),
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$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;";
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" + "), " + String(0) + ") AS id FROM \"" + pgSchema + "\".\"" + table$3.tableName + "\";";
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$3.tableName + "\" (\"" + "id" + "\", \"" + "chain_id" + "\", \"" + "block_number" + "\", \"" + "block_hash" + "\", \"" + "events_processed" + "\")\nSELECT * FROM unnest($1::INTEGER[],$2::INTEGER[],$3::INTEGER[],$4::TEXT[],$5::INTEGER[]);";
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
- checkpointIds,
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$3.tableName + "\" WHERE \"" + "id" + "\" > $1;", [rollbackTargetCheckpointId], {prepare: true});
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$3.tableName + "\" WHERE \"" + "id" + "\" < $1;";
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$3.tableName + "\"\nWHERE \n \"" + "chain_id" + "\" = $1 AND\n \"" + "block_number" + "\" <= $2\nORDER BY \"" + "id" + "\" DESC\nLIMIT 1;";
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
- return sql.unsafe(makeGetRollbackTargetCheckpointQuery(pgSchema), [
288
- reorgChainId,
289
- lastKnownValidBlockNumber
290
- ], {prepare: true});
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$3.tableName + "\"\nWHERE \"" + "id" + "\" > $1\nGROUP BY \"" + "chain_id" + "\";";
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
- initialCheckpointId: 0,
303
- table: table$3,
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$1 = S$RescriptSchema.schema(function (s) {
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$4 = Table.mkTable("raw_events", undefined, [
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", "Serial", S$RescriptSchema.$$null(S$RescriptSchema.$$int), undefined, undefined, true, true, undefined, undefined)
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$1,
354
- table: table$4
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$1.tableName + "\"\nORDER BY \"" + "id" + "\";";
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 \"" + "_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\"\nFROM \"" + pgSchema + "\".\"" + table$1.tableName + "\";";
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
- /* schema Not a pure module */
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<string>>,
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<string>> => {
242
+ let getUnfilteredCompositeIndicesUnsafe = (table): array<array<compositeIndexField>> => {
230
243
  table.compositeIndices->Array.map(compositeIndex =>
231
- compositeIndex->Array.map(userDefinedFieldName =>
232
- switch table->getFieldByName(userDefinedFieldName) {
244
+ compositeIndex->Array.map(indexField => {
245
+ let dbFieldName = switch table->getFieldByName(indexField.fieldName) {
233
246
  | Some(field) => field->getFieldName
234
- | None => raise(NonExistingTableField(userDefinedFieldName)) //Unexpected should be validated in schema parser
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.keep(cidx => cidx->Array.length == 1)
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<string>> => {
381
+ let getCompositeIndices = (table): array<array<compositeIndexField>> => {
363
382
  table
364
383
  ->getUnfilteredCompositeIndicesUnsafe
365
384
  ->Array.keep(ind => ind->Array.length > 1)
@@ -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 (userDefinedFieldName) {
234
- var field = getFieldByName(table, userDefinedFieldName);
234
+ return Belt_Array.map(compositeIndex, (function (indexField) {
235
+ var field = getFieldByName(table, indexField.fieldName);
236
+ var dbFieldName;
235
237
  if (field !== undefined) {
236
- return getFieldName(field);
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
- throw {
239
- RE_EXN_ID: NonExistingTableField,
240
- _1: userDefinedFieldName,
241
- Error: new Error()
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.keep(getUnfilteredCompositeIndicesUnsafe(table), (function (cidx) {
358
- return cidx.length === 1;
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
+ }