envio 3.15.0-subgraph → 3.16.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/README.md +40 -34
- package/evm.schema.json +3 -3
- package/fuel.schema.json +2 -2
- package/index.d.ts +3 -3
- package/licenses/README.md +1 -1
- package/package.json +9 -10
- package/src/Batch.res.mjs +5 -5
- package/src/BatchProcessing.res +1 -0
- package/src/BatchProcessing.res.mjs +1 -0
- package/src/Bin.res +0 -7
- package/src/Bin.res.mjs +0 -8
- package/src/ChainFetching.res +17 -456
- package/src/ChainFetching.res.mjs +33 -404
- package/src/ChainState.res +48 -83
- package/src/ChainState.res.mjs +83 -115
- package/src/ChainState.resi +0 -26
- package/src/Clock.res +57 -0
- package/src/Clock.res.mjs +72 -0
- package/src/Config.res +7 -16
- package/src/Config.res.mjs +4 -11
- package/src/ContractRegisterContext.res +6 -3
- package/src/ContractRegisterContext.res.mjs +2 -4
- package/src/Core.res +5 -136
- package/src/Core.res.mjs +1 -90
- package/src/CrossChainState.res +2 -8
- package/src/CrossChainState.res.mjs +3 -3
- package/src/Ecosystem.res +4 -7
- package/src/Ecosystem.res.mjs +8 -8
- package/src/EffectState.res +10 -2
- package/src/EffectState.res.mjs +8 -4
- package/src/EffectState.resi +3 -1
- package/src/EntityId.res +2 -7
- package/src/EntityId.res.mjs +1 -8
- package/src/EntityTables.res +4 -1
- package/src/EntityTables.res.mjs +1 -1
- package/src/Env.res +0 -16
- package/src/Env.res.mjs +0 -11
- package/src/EventProcessing.res +1 -38
- package/src/EventProcessing.res.mjs +1 -28
- package/src/FetchState.res +160 -319
- package/src/FetchState.res.mjs +182 -292
- package/src/FinalizeBackfill.res +2 -4
- package/src/FinalizeBackfill.res.mjs +3 -4
- package/src/HandlerLoader.res +15 -39
- package/src/HandlerLoader.res.mjs +8 -27
- package/src/HandlerRegister.res +0 -4
- package/src/HandlerRegister.res.mjs +2 -5
- package/src/HandlerRegister.resi +0 -2
- package/src/InMemoryTable.res +17 -16
- package/src/InMemoryTable.res.mjs +14 -15
- package/src/IndexerState.res +28 -4
- package/src/IndexerState.res.mjs +19 -6
- package/src/IndexerState.resi +4 -0
- package/src/Internal.res +0 -110
- package/src/Internal.res.mjs +1 -115
- package/src/LoadLayer.res +21 -47
- package/src/LoadLayer.res.mjs +47 -72
- package/src/LoadLayer.resi +0 -26
- package/src/Main.res +1 -14
- package/src/Main.res.mjs +3 -4
- package/src/Persistence.res +3 -23
- package/src/Persistence.res.mjs +3 -3
- package/src/Rollback.res +0 -1
- package/src/Rollback.res.mjs +1 -1
- package/src/RunScope.res +0 -3
- package/src/SafeCheckpointTracking.res +4 -4
- package/src/SafeCheckpointTracking.res.mjs +1 -1
- package/src/SimulateItems.res +26 -42
- package/src/SimulateItems.res.mjs +16 -40
- package/src/StagedRows.res +106 -0
- package/src/StagedRows.res.mjs +102 -0
- package/src/Staging.res +32 -14
- package/src/Staging.res.mjs +17 -20
- package/src/Storage.res +277 -998
- package/src/Storage.res.mjs +216 -731
- package/src/Supervisor.res +75 -56
- package/src/Supervisor.res.mjs +55 -26
- package/src/TestIndexer.res +22 -27
- package/src/TestIndexer.res.mjs +20 -17
- package/src/Throttler.res +15 -8
- package/src/Throttler.res.mjs +9 -6
- package/src/Throttler.resi +1 -1
- package/src/UserContext.res +46 -410
- package/src/UserContext.res.mjs +30 -318
- package/src/Utils.res +0 -23
- package/src/Utils.res.mjs +1 -17
- package/src/Writing.res +0 -1
- package/src/Writing.res.mjs +1 -1
- package/src/bindings/ClickHouse.res +0 -322
- package/src/bindings/ClickHouse.res.mjs +0 -338
- package/src/bindings/StorageClient.res +107 -175
- package/src/bindings/StorageClient.res.mjs +19 -8
- package/src/bindings/Vitest.res +0 -26
- package/src/bindings/Vitest.res.mjs +0 -3
- package/src/db/Table.res +24 -150
- package/src/db/Table.res.mjs +38 -272
- package/src/sources/AddressSet.res +0 -2
- package/src/sources/AddressStore.res +0 -3
- package/src/sources/ChainSources.res +2 -0
- package/src/sources/ChainSources.res.mjs +2 -2
- package/src/sources/EvmChain.res +4 -7
- package/src/sources/EvmChain.res.mjs +5 -4
- package/src/sources/EvmHyperSyncSource.res +2 -2
- package/src/sources/EvmHyperSyncSource.res.mjs +1 -1
- package/src/sources/EvmRpcClient.res +13 -3
- package/src/sources/EvmRpcClient.res.mjs +4 -3
- package/src/sources/EvmRpcWs.res +4 -3
- package/src/sources/EvmRpcWs.res.mjs +2 -2
- package/src/sources/HeightFeed.res +31 -10
- package/src/sources/HeightFeed.res.mjs +10 -6
- package/src/sources/HeightStream.res +32 -17
- package/src/sources/HeightStream.res.mjs +10 -10
- package/src/sources/HyperSync.res +1 -2
- package/src/sources/HyperSync.res.mjs +1 -2
- package/src/sources/HyperSyncSSE.res +4 -6
- package/src/sources/HyperSyncSSE.res.mjs +2 -2
- package/src/sources/RpcSource.res +10 -1
- package/src/sources/RpcSource.res.mjs +4 -3
- package/src/sources/Source.res +3 -0
- package/src/sources/SourceManager.res +85 -104
- package/src/sources/SourceManager.res.mjs +18 -37
- package/src/sources/SourceManager.resi +3 -5
- package/src/sources/StartBlockResolver.res +1 -0
- package/src/sources/StartBlockResolver.res.mjs +4 -3
- package/src/sources/SvmHyperSyncSource.res +2 -2
- package/src/sources/SvmHyperSyncSource.res.mjs +1 -1
- package/svm.schema.json +3 -3
- package/src/EffectCacheLookup.res +0 -98
- package/src/EffectCacheLookup.res.mjs +0 -116
- package/src/PgWriting.res +0 -36
- package/src/PgWriting.res.mjs +0 -34
- package/src/PreloadLookahead.res +0 -184
- package/src/PreloadLookahead.res.mjs +0 -197
- package/src/SubgraphLog.res +0 -19
- package/src/SubgraphLog.res.mjs +0 -26
- package/src/SyncWrites.res +0 -101
- package/src/SyncWrites.res.mjs +0 -98
- package/src/db/IndexDefinition.res +0 -47
- package/src/db/IndexDefinition.res.mjs +0 -60
- package/src/sources/CallSource.res +0 -274
- package/src/sources/CallSource.res.mjs +0 -196
- package/src/subgraph/abi-types.ts +0 -84
- package/src/subgraph/aggregations.ts +0 -745
- package/src/subgraph/as-package.ts +0 -143
- package/src/subgraph/assemblyscript-regex.ts +0 -67
- package/src/subgraph/assemblyscript.ts +0 -731
- package/src/subgraph/blocks.ts +0 -398
- package/src/subgraph/calls-source.ts +0 -702
- package/src/subgraph/calls.ts +0 -258
- package/src/subgraph/conformance.ts +0 -106
- package/src/subgraph/errors.ts +0 -85
- package/src/subgraph/graft.ts +0 -73
- package/src/subgraph/graph-cli-worker.mjs +0 -35
- package/src/subgraph/graph-cli.ts +0 -900
- package/src/subgraph/graph-node-decimal.ts +0 -199
- package/src/subgraph/graph-ts-enums.ts +0 -28
- package/src/subgraph/graph-ts-types/VERSION +0 -2
- package/src/subgraph/graph-ts-types/chain/arweave.d.ts +0 -70
- package/src/subgraph/graph-ts-types/chain/cosmos.d.ts +0 -327
- package/src/subgraph/graph-ts-types/chain/ethereum.d.ts +0 -233
- package/src/subgraph/graph-ts-types/chain/near.d.ts +0 -253
- package/src/subgraph/graph-ts-types/chain/starknet.d.ts +0 -32
- package/src/subgraph/graph-ts-types/common/collections.d.ts +0 -136
- package/src/subgraph/graph-ts-types/common/conversion.d.ts +0 -11
- package/src/subgraph/graph-ts-types/common/datasource.d.ts +0 -30
- package/src/subgraph/graph-ts-types/common/eager-offset.d.ts +0 -0
- package/src/subgraph/graph-ts-types/common/json.d.ts +0 -17
- package/src/subgraph/graph-ts-types/common/numbers.d.ts +0 -120
- package/src/subgraph/graph-ts-types/common/value.d.ts +0 -120
- package/src/subgraph/graph-ts-types/common/yaml.d.ts +0 -90
- package/src/subgraph/graph-ts-types/global/global.d.ts +0 -194
- package/src/subgraph/graph-ts-types/helper-functions.d.ts +0 -22
- package/src/subgraph/graph-ts-types/index.d.ts +0 -102
- package/src/subgraph/graph-ts.ts +0 -4280
- package/src/subgraph/hosts.ts +0 -554
- package/src/subgraph/log.ts +0 -28
- package/src/subgraph/receipts.ts +0 -184
- package/src/subgraph/register-slots.ts +0 -93
- package/src/subgraph/rollup.ts +0 -109
- package/src/subgraph/rpc.ts +0 -337
- package/src/subgraph/runtime.ts +0 -2060
- package/src/subgraph/scope.ts +0 -177
- package/src/subgraph/stats.ts +0 -42
- package/src/subgraph/template-instances.ts +0 -66
- package/src/subgraph/toolchain.ts +0 -327
- package/src/subgraph/transient.ts +0 -176
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as Env from "./Env.res.mjs";
|
|
4
3
|
import * as Utils from "./Utils.res.mjs";
|
|
5
4
|
import * as Logger from "./Logger.res.mjs";
|
|
6
|
-
import * as Internal from "./Internal.res.mjs";
|
|
7
5
|
import * as RunScope from "./RunScope.res.mjs";
|
|
8
6
|
import * as Ecosystem from "./Ecosystem.res.mjs";
|
|
9
7
|
import * as ChainState from "./ChainState.res.mjs";
|
|
10
|
-
import * as FetchState from "./FetchState.res.mjs";
|
|
11
8
|
import * as IndexerState from "./IndexerState.res.mjs";
|
|
12
9
|
import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
|
|
13
10
|
import * as ChainMetadata from "./ChainMetadata.res.mjs";
|
|
14
11
|
import * as ErrorHandling from "./ErrorHandling.res.mjs";
|
|
15
|
-
import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
|
|
16
12
|
import * as SourceManager from "./sources/SourceManager.res.mjs";
|
|
17
13
|
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
18
14
|
import * as HandlerRuntime from "./HandlerRuntime.res.mjs";
|
|
@@ -24,74 +20,32 @@ function hasContractRegister(item) {
|
|
|
24
20
|
if (item.kind === 0) {
|
|
25
21
|
return item.onEventRegistration.contractRegister !== undefined;
|
|
26
22
|
} else {
|
|
27
|
-
return
|
|
23
|
+
return false;
|
|
28
24
|
}
|
|
29
25
|
}
|
|
30
26
|
|
|
31
27
|
function invokeContractRegister(runtime, item) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
let block = item.block;
|
|
42
|
-
let blockNumber = item.blockNumber;
|
|
43
|
-
let onBlockRegistration = item.onBlockRegistration;
|
|
44
|
-
let contractRegister$2 = onBlockRegistration.contractRegister;
|
|
45
|
-
let contractRegister$3 = contractRegister$2 !== undefined ? contractRegister$2 : Stdlib_JsError.throwWithMessage("Contract register is not set for block handler " + onBlockRegistration.name);
|
|
46
|
-
let ecosystem = HandlerRuntime.ecosystem(runtime);
|
|
47
|
-
let context = runtime.contractRegisterContext;
|
|
48
|
-
let match = ecosystem.name;
|
|
49
|
-
let tmp;
|
|
50
|
-
let exit = 0;
|
|
51
|
-
switch (match) {
|
|
52
|
-
case "evm" :
|
|
53
|
-
case "fuel" :
|
|
54
|
-
exit = 1;
|
|
55
|
-
break;
|
|
56
|
-
case "svm" :
|
|
57
|
-
tmp = {
|
|
58
|
-
slot: blockNumber,
|
|
59
|
-
block: block,
|
|
60
|
-
context: context
|
|
61
|
-
};
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
if (exit === 1) {
|
|
65
|
-
tmp = {
|
|
66
|
-
block: Primitive_option.some(Stdlib_Option.getOr(block, Ecosystem.makeKeyOnlyBlock(blockNumber, ecosystem))),
|
|
67
|
-
context: context
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
return contractRegister$3(tmp);
|
|
28
|
+
let match = item.onEventRegistration;
|
|
29
|
+
let contractRegister = match.contractRegister;
|
|
30
|
+
let contractRegister$1 = contractRegister !== undefined ? contractRegister : Stdlib_JsError.throwWithMessage("Contract register is not set for event " + match.eventConfig.name);
|
|
31
|
+
return contractRegister$1({
|
|
32
|
+
event: Ecosystem.getItemEvent(item, HandlerRuntime.ecosystem(runtime)),
|
|
33
|
+
context: runtime.contractRegisterContext
|
|
34
|
+
});
|
|
71
35
|
}
|
|
72
36
|
|
|
73
37
|
async function runContractRegistersOrThrow(itemsWithContractRegister, runtime, chainState) {
|
|
74
|
-
await ChainState.materializePageItems(
|
|
38
|
+
await ChainState.materializePageItems(itemsWithContractRegister, ChainState.transactionStore(chainState), ChainState.blockStore(chainState), ChainState.shouldChecksum(chainState));
|
|
75
39
|
let registrations = [];
|
|
76
40
|
let chainLogger = ChainState.logger(chainState);
|
|
77
41
|
let ecosystem = HandlerRuntime.ecosystem(runtime);
|
|
78
|
-
let isSubgraph = Env.subgraphMode.contents;
|
|
79
42
|
await Promise.all(itemsWithContractRegister.map(async item => {
|
|
80
|
-
let tmp;
|
|
81
|
-
if (isSubgraph) {
|
|
82
|
-
let tmp$1;
|
|
83
|
-
tmp$1 = item.kind === 0 ? FetchState.creationRoundOfRegistration(ChainState.fetchState(chainState), item) : 1;
|
|
84
|
-
tmp = tmp$1;
|
|
85
|
-
} else {
|
|
86
|
-
tmp = undefined;
|
|
87
|
-
}
|
|
88
43
|
let run = {
|
|
89
44
|
item: item,
|
|
90
45
|
isResolved: false,
|
|
91
46
|
chainLogger: chainLogger,
|
|
92
47
|
ecosystem: ecosystem,
|
|
93
|
-
registrations: registrations
|
|
94
|
-
creationRound: tmp
|
|
48
|
+
registrations: registrations
|
|
95
49
|
};
|
|
96
50
|
let scope = {
|
|
97
51
|
TAG: "ContractRegister",
|
|
@@ -103,208 +57,16 @@ async function runContractRegistersOrThrow(itemsWithContractRegister, runtime, c
|
|
|
103
57
|
} catch (raw_exn) {
|
|
104
58
|
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
105
59
|
RunScope.resolve(scope);
|
|
106
|
-
|
|
107
|
-
tmp$2 = item.kind === 0 ? "Event contractRegister failed, please fix the error to keep the indexer running smoothly" : "Block handler contractRegister failed, please fix the error to keep the indexer running smoothly";
|
|
108
|
-
return ErrorHandling.mkLogAndRaise(RunScope.contractRegisterLogger(run), tmp$2, exn);
|
|
60
|
+
return ErrorHandling.mkLogAndRaise(RunScope.contractRegisterLogger(run), "Event contractRegister failed, please fix the error to keep the indexer running smoothly", exn);
|
|
109
61
|
}
|
|
110
62
|
return RunScope.resolve(scope);
|
|
111
63
|
}));
|
|
112
64
|
return registrations;
|
|
113
65
|
}
|
|
114
66
|
|
|
115
|
-
function mergeRegisterItems(eventItems, blockItems) {
|
|
116
|
-
let merged = [];
|
|
117
|
-
let i = 0;
|
|
118
|
-
let j = 0;
|
|
119
|
-
while (i < eventItems.length || j < blockItems.length) {
|
|
120
|
-
let match = eventItems[i];
|
|
121
|
-
let match$1 = blockItems[j];
|
|
122
|
-
let takeBlock;
|
|
123
|
-
if (match !== undefined) {
|
|
124
|
-
if (match$1 !== undefined) {
|
|
125
|
-
let eventBlock = match.blockNumber;
|
|
126
|
-
let blockBlock = match$1.blockNumber;
|
|
127
|
-
takeBlock = blockBlock < eventBlock || blockBlock === eventBlock && Internal.itemRunsFirst(match$1);
|
|
128
|
-
} else {
|
|
129
|
-
takeBlock = false;
|
|
130
|
-
}
|
|
131
|
-
} else {
|
|
132
|
-
takeBlock = true;
|
|
133
|
-
}
|
|
134
|
-
if (takeBlock) {
|
|
135
|
-
merged.push(blockItems[j]);
|
|
136
|
-
j = j + 1 | 0;
|
|
137
|
-
} else {
|
|
138
|
-
merged.push(eventItems[i]);
|
|
139
|
-
i = i + 1 | 0;
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
return merged;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
async function runRegisterPassesOrThrow(eventItems, blockItems, runtime, chainState) {
|
|
146
|
-
let items = mergeRegisterItems(eventItems, blockItems);
|
|
147
|
-
let registrations = [];
|
|
148
|
-
let start = 0;
|
|
149
|
-
while (start < items.length) {
|
|
150
|
-
let chunk = items.slice(start, start + 2048 | 0);
|
|
151
|
-
registrations.push(...await runContractRegistersOrThrow(chunk, runtime, chainState));
|
|
152
|
-
start = start + 2048 | 0;
|
|
153
|
-
};
|
|
154
|
-
return registrations;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function sortRegistrations(registrations) {
|
|
158
|
-
return registrations.toSorted((a, b) => {
|
|
159
|
-
let order = Primitive_int.compare(a.registrationBlock, b.registrationBlock);
|
|
160
|
-
if (order !== 0) {
|
|
161
|
-
return order;
|
|
162
|
-
} else {
|
|
163
|
-
return Primitive_int.compare(Stdlib_Option.getOr(a.creationRound, 1), Stdlib_Option.getOr(b.creationRound, 1));
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
async function runResponsePassesOrThrow(eventItems, through, runtime, chainState) {
|
|
169
|
-
let registrations = [];
|
|
170
|
-
let eventIdx = 0;
|
|
171
|
-
let passedThrough;
|
|
172
|
-
let after = Stdlib_Option.getOr(ChainState.blockRegisterThrough(chainState), through);
|
|
173
|
-
let isDone = false;
|
|
174
|
-
while (!isDone) {
|
|
175
|
-
let match = ChainState.blockRegisterItemsAfter(chainState, after, through, 10000);
|
|
176
|
-
let match$1 = match !== undefined ? [
|
|
177
|
-
match[0],
|
|
178
|
-
match[1]
|
|
179
|
-
] : [
|
|
180
|
-
[],
|
|
181
|
-
undefined
|
|
182
|
-
];
|
|
183
|
-
let covered = match$1[1];
|
|
184
|
-
let blockItems = match$1[0];
|
|
185
|
-
let eventEnd;
|
|
186
|
-
if (covered !== undefined) {
|
|
187
|
-
if (covered < through) {
|
|
188
|
-
let idx = eventIdx;
|
|
189
|
-
while (idx < eventItems.length && eventItems[idx].blockNumber <= covered) {
|
|
190
|
-
idx = idx + 1 | 0;
|
|
191
|
-
};
|
|
192
|
-
eventEnd = idx;
|
|
193
|
-
} else {
|
|
194
|
-
eventEnd = eventItems.length;
|
|
195
|
-
}
|
|
196
|
-
} else {
|
|
197
|
-
eventEnd = eventItems.length;
|
|
198
|
-
}
|
|
199
|
-
let startedAt = Date.now();
|
|
200
|
-
let windowRegistrations = await runRegisterPassesOrThrow(eventItems.slice(eventIdx, eventEnd), blockItems, runtime, chainState);
|
|
201
|
-
Logger.trace(ChainState.logger(chainState), "Ran register passes with block passes", {
|
|
202
|
-
after: after,
|
|
203
|
-
through: covered,
|
|
204
|
-
blockPasses: blockItems.length,
|
|
205
|
-
eventPasses: eventEnd - eventIdx | 0,
|
|
206
|
-
registrations: windowRegistrations.length,
|
|
207
|
-
ms: Date.now() - startedAt
|
|
208
|
-
});
|
|
209
|
-
registrations.push(...windowRegistrations);
|
|
210
|
-
eventIdx = eventEnd;
|
|
211
|
-
if (covered !== undefined) {
|
|
212
|
-
passedThrough = covered;
|
|
213
|
-
after = covered;
|
|
214
|
-
isDone = covered >= through && eventIdx >= eventItems.length;
|
|
215
|
-
} else {
|
|
216
|
-
isDone = true;
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
return [
|
|
220
|
-
sortRegistrations(registrations),
|
|
221
|
-
passedThrough
|
|
222
|
-
];
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
let registerCallsPerItem = (() => {
|
|
226
|
-
const cost = globalThis.__envioSubgraphRegisterCostPerItem
|
|
227
|
-
const value = cost ? cost() : undefined
|
|
228
|
-
return value === undefined ? undefined : value
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
let reportRegisterFrontier = ((chainId, block) => {
|
|
232
|
-
const report = globalThis.__envioSubgraphRegisterFrontier
|
|
233
|
-
if (report) report(chainId, block)
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
function registerChunkLimit() {
|
|
237
|
-
if (!Env.subgraphMode.contents) {
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
if (Env.subgraphRegisterChunk !== undefined) {
|
|
241
|
-
if (Env.subgraphRegisterChunk > 0) {
|
|
242
|
-
return Env.subgraphRegisterChunk;
|
|
243
|
-
} else {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
let cost = registerCallsPerItem();
|
|
248
|
-
if (cost !== undefined) {
|
|
249
|
-
if (cost < 0.5) {
|
|
250
|
-
return;
|
|
251
|
-
} else {
|
|
252
|
-
return Primitive_int.max(100, 3000 / cost | 0);
|
|
253
|
-
}
|
|
254
|
-
} else {
|
|
255
|
-
return 100;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
function cutAtRegisterLimit(items, latestFetchedBlock, limit) {
|
|
260
|
-
let seen = 0;
|
|
261
|
-
let cutIdx = -1;
|
|
262
|
-
let idx = 0;
|
|
263
|
-
while (cutIdx < 0 && idx < items.length) {
|
|
264
|
-
if (hasContractRegister(items[idx])) {
|
|
265
|
-
seen = seen + 1 | 0;
|
|
266
|
-
if (seen >= limit) {
|
|
267
|
-
cutIdx = idx;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
idx = idx + 1 | 0;
|
|
271
|
-
};
|
|
272
|
-
if (cutIdx < 0) {
|
|
273
|
-
return [
|
|
274
|
-
items,
|
|
275
|
-
latestFetchedBlock
|
|
276
|
-
];
|
|
277
|
-
}
|
|
278
|
-
let cutBlock = items[cutIdx].blockNumber;
|
|
279
|
-
let last = cutIdx;
|
|
280
|
-
while ((last + 1 | 0) < items.length && items[last + 1 | 0].blockNumber <= cutBlock) {
|
|
281
|
-
last = last + 1 | 0;
|
|
282
|
-
};
|
|
283
|
-
if ((last + 1 | 0) >= items.length && cutBlock >= latestFetchedBlock) {
|
|
284
|
-
return [
|
|
285
|
-
items,
|
|
286
|
-
latestFetchedBlock
|
|
287
|
-
];
|
|
288
|
-
} else {
|
|
289
|
-
return [
|
|
290
|
-
items.slice(0, last + 1 | 0),
|
|
291
|
-
cutBlock
|
|
292
|
-
];
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
67
|
function applyQueryResponse(state, chainId, newItems, newRegistrations, knownHeight, latestFetchedBlock, query) {
|
|
297
68
|
let chainState = IndexerState.getChainState(state, chainId);
|
|
298
69
|
ChainState.handleQueryResult(chainState, query, newItems, newRegistrations, latestFetchedBlock, knownHeight);
|
|
299
|
-
if (Env.subgraphMode.contents) {
|
|
300
|
-
let fetchState = ChainState.fetchState(chainState);
|
|
301
|
-
let frontier = FetchState.OptimizedPartitions.getLatestFullyFetchedBlock(fetchState.optimizedPartitions);
|
|
302
|
-
if (frontier !== undefined) {
|
|
303
|
-
let through = fetchState.blockRegisterThrough;
|
|
304
|
-
let frontier$1 = through !== undefined ? Primitive_int.min(frontier, through) : frontier;
|
|
305
|
-
reportRegisterFrontier(chainId, frontier$1);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
70
|
if (!IndexerState.exitAfterFirstEventBlock(state)) {
|
|
309
71
|
return;
|
|
310
72
|
}
|
|
@@ -327,15 +89,8 @@ async function onQueryResponse(state, param, runtime, stateId, scheduleFetch, sc
|
|
|
327
89
|
let transactionStore = response.transactionStore;
|
|
328
90
|
let parsedQueueItems = response.parsedQueueItems;
|
|
329
91
|
let knownHeight = response.knownHeight;
|
|
330
|
-
|
|
331
|
-
let
|
|
332
|
-
parsedQueueItems,
|
|
333
|
-
latestFetchedBlockNumber
|
|
334
|
-
];
|
|
335
|
-
let latestFetchedBlockNumber$1 = match[1];
|
|
336
|
-
let parsedQueueItems$1 = match[0];
|
|
337
|
-
ChainState.recordBlockRangeFetch(chainState, stats["total time elapsed (s)"], Stdlib_Option.getOr(stats["parsing time (s)"], 0), parsedQueueItems$1.length, (latestFetchedBlockNumber$1 - query.fromBlock | 0) + 1 | 0);
|
|
338
|
-
let numContractRegisterEvents = Stdlib_Array.reduce(parsedQueueItems$1, 0, (count, item) => {
|
|
92
|
+
ChainState.recordBlockRangeFetch(chainState, stats["total time elapsed (s)"], Stdlib_Option.getOr(stats["parsing time (s)"], 0), parsedQueueItems.length, (latestFetchedBlockNumber - query.fromBlock | 0) + 1 | 0);
|
|
93
|
+
let numContractRegisterEvents = Stdlib_Array.reduce(parsedQueueItems, 0, (count, item) => {
|
|
339
94
|
if (hasContractRegister(item)) {
|
|
340
95
|
return count + 1 | 0;
|
|
341
96
|
} else {
|
|
@@ -346,15 +101,15 @@ async function onQueryResponse(state, param, runtime, stateId, scheduleFetch, sc
|
|
|
346
101
|
Logger.trace(ChainState.logger(chainState), "Finished querying", {
|
|
347
102
|
partitionId: query.partitionId,
|
|
348
103
|
fromBlock: query.fromBlock,
|
|
349
|
-
toBlock: latestFetchedBlockNumber
|
|
350
|
-
numEvents: parsedQueueItems
|
|
104
|
+
toBlock: latestFetchedBlockNumber,
|
|
105
|
+
numEvents: parsedQueueItems.length
|
|
351
106
|
});
|
|
352
107
|
} else {
|
|
353
108
|
Logger.trace(ChainState.logger(chainState), "Finished querying", {
|
|
354
109
|
partitionId: query.partitionId,
|
|
355
110
|
fromBlock: query.fromBlock,
|
|
356
|
-
toBlock: latestFetchedBlockNumber
|
|
357
|
-
numEvents: parsedQueueItems
|
|
111
|
+
toBlock: latestFetchedBlockNumber,
|
|
112
|
+
numEvents: parsedQueueItems.length,
|
|
358
113
|
numContractRegisterEvents: numContractRegisterEvents
|
|
359
114
|
});
|
|
360
115
|
}
|
|
@@ -363,22 +118,22 @@ async function onQueryResponse(state, param, runtime, stateId, scheduleFetch, sc
|
|
|
363
118
|
if (typeof reorgResult !== "object") {
|
|
364
119
|
rollbackWithReorgDetectedBlockNumber = undefined;
|
|
365
120
|
} else {
|
|
366
|
-
let match
|
|
367
|
-
let scannedBlock = match
|
|
121
|
+
let match = reorgResult._0;
|
|
122
|
+
let scannedBlock = match.scannedBlock;
|
|
368
123
|
Logger.info(ChainState.logger(chainState), `Blockchain reorg detected. ` + (
|
|
369
124
|
ChainState.shouldRollbackOnReorg(chainState) ? "Initiating indexer rollback" : "NOT initiating indexer rollback due to configuration"
|
|
370
125
|
) + `.`, {
|
|
371
126
|
blockNumber: scannedBlock.blockNumber,
|
|
372
127
|
indexedBlockHash: scannedBlock.blockHash,
|
|
373
|
-
receivedBlockHash: match
|
|
128
|
+
receivedBlockHash: match.receivedBlock.blockHash
|
|
374
129
|
});
|
|
375
130
|
ChainState.recordReorgDetected(chainState, scannedBlock.blockNumber);
|
|
376
131
|
rollbackWithReorgDetectedBlockNumber = ChainState.shouldRollbackOnReorg(chainState) ? scannedBlock.blockNumber : undefined;
|
|
377
132
|
}
|
|
378
133
|
if (rollbackWithReorgDetectedBlockNumber !== undefined) {
|
|
379
|
-
let match$
|
|
134
|
+
let match$1 = IndexerState.rollbackState(state);
|
|
380
135
|
let eventsProcessedDiffByChain;
|
|
381
|
-
eventsProcessedDiffByChain = typeof match$
|
|
136
|
+
eventsProcessedDiffByChain = typeof match$1 !== "object" || match$1.TAG !== "RollbackReady" ? undefined : match$1.eventsProcessedDiffByChain;
|
|
382
137
|
Utils.Dict.forEach(IndexerState.chainStates(state), cs => ChainState.prepareReorg(cs, eventsProcessedDiffByChain !== undefined ? eventsProcessedDiffByChain[ChainState.chainConfig(cs).id] : undefined));
|
|
383
138
|
IndexerState.beginReorg(state, chainId, rollbackWithReorgDetectedBlockNumber);
|
|
384
139
|
return scheduleRollback();
|
|
@@ -387,86 +142,31 @@ async function onQueryResponse(state, param, runtime, stateId, scheduleFetch, sc
|
|
|
387
142
|
ChainState.transactionStore(chainState).merge(Primitive_option.valFromOption(transactionStore));
|
|
388
143
|
}
|
|
389
144
|
let itemsWithContractRegister = [];
|
|
390
|
-
for (let idx = 0, idx_finish = parsedQueueItems
|
|
391
|
-
let item = parsedQueueItems
|
|
145
|
+
for (let idx = 0, idx_finish = parsedQueueItems.length; idx < idx_finish; ++idx) {
|
|
146
|
+
let item = parsedQueueItems[idx];
|
|
392
147
|
if (hasContractRegister(item)) {
|
|
393
148
|
itemsWithContractRegister.push(item);
|
|
394
149
|
}
|
|
395
150
|
}
|
|
396
|
-
let proceed =
|
|
397
|
-
let newItems = newItemsOpt !== undefined ? newItemsOpt : parsedQueueItems$1;
|
|
398
|
-
let latestFetchedBlock = latestFetchedBlockOpt !== undefined ? latestFetchedBlockOpt : latestFetchedBlockNumber$1;
|
|
151
|
+
let proceed = newRegistrations => {
|
|
399
152
|
if (!IndexerState.isStale(state, stateId)) {
|
|
400
|
-
applyQueryResponse(state, chainId,
|
|
401
|
-
if (blockRegisterThrough !== undefined) {
|
|
402
|
-
ChainState.markBlockRegistered(chainState, blockRegisterThrough);
|
|
403
|
-
}
|
|
153
|
+
applyQueryResponse(state, chainId, parsedQueueItems, newRegistrations, knownHeight, latestFetchedBlockNumber, query);
|
|
404
154
|
ChainMetadata.stage(state);
|
|
405
155
|
scheduleFetch();
|
|
406
156
|
return scheduleProcessing();
|
|
407
157
|
}
|
|
408
158
|
};
|
|
409
|
-
let blockRegisterCeiling = Primitive_int.min(latestFetchedBlockNumber$1, Primitive_int.max(knownHeight, ChainState.knownHeight(chainState)));
|
|
410
|
-
let withBlockPasses = ChainState.hasBlockRegisters(chainState) && (Utils.$$Array.notEmpty(itemsWithContractRegister) || ChainState.canAdvanceBlockRegisters(chainState, blockRegisterCeiling));
|
|
411
|
-
if (withBlockPasses) {
|
|
412
|
-
let match$3 = ChainState.queueBlockRegisterRun(chainState);
|
|
413
|
-
let finish = match$3[1];
|
|
414
|
-
let held = ChainState.holdExtraBudget(chainState, Primitive_int.max(0, parsedQueueItems$1.length - query.itemsEst | 0));
|
|
415
|
-
await match$3[0];
|
|
416
|
-
if (IndexerState.isStale(state, stateId)) {
|
|
417
|
-
ChainState.releaseExtraBudget(chainState, held);
|
|
418
|
-
finish();
|
|
419
|
-
return scheduleFetch();
|
|
420
|
-
}
|
|
421
|
-
let match$4 = ChainState.blockRegisterItemsAfter(chainState, Primitive_int.max(Stdlib_Option.getOr(ChainState.blockRegisterThrough(chainState), blockRegisterCeiling), query.fromBlock - 1 | 0), blockRegisterCeiling, 50000);
|
|
422
|
-
let cutAt;
|
|
423
|
-
if (match$4 !== undefined) {
|
|
424
|
-
let covered = match$4[1];
|
|
425
|
-
cutAt = covered < blockRegisterCeiling ? covered : undefined;
|
|
426
|
-
} else {
|
|
427
|
-
cutAt = undefined;
|
|
428
|
-
}
|
|
429
|
-
let through = Stdlib_Option.getOr(cutAt, blockRegisterCeiling);
|
|
430
|
-
let match$5;
|
|
431
|
-
if (cutAt !== undefined) {
|
|
432
|
-
let isKept = item => item.blockNumber <= through;
|
|
433
|
-
match$5 = [
|
|
434
|
-
parsedQueueItems$1.filter(isKept),
|
|
435
|
-
itemsWithContractRegister.filter(isKept),
|
|
436
|
-
through
|
|
437
|
-
];
|
|
438
|
-
} else {
|
|
439
|
-
match$5 = [
|
|
440
|
-
parsedQueueItems$1,
|
|
441
|
-
itemsWithContractRegister,
|
|
442
|
-
latestFetchedBlockNumber$1
|
|
443
|
-
];
|
|
444
|
-
}
|
|
445
|
-
let val;
|
|
446
|
-
try {
|
|
447
|
-
val = await runResponsePassesOrThrow(match$5[1], through, runtime, chainState);
|
|
448
|
-
} catch (raw_exn) {
|
|
449
|
-
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
450
|
-
finish();
|
|
451
|
-
return IndexerState.errorExit(state, ErrorHandling.make(exn, ChainState.logger(chainState), undefined));
|
|
452
|
-
}
|
|
453
|
-
ChainState.releaseExtraBudget(chainState, held);
|
|
454
|
-
proceed(val[0], val[1], match$5[0], match$5[2]);
|
|
455
|
-
return finish();
|
|
456
|
-
}
|
|
457
159
|
if (itemsWithContractRegister.length === 0) {
|
|
458
|
-
return proceed([]
|
|
160
|
+
return proceed([]);
|
|
459
161
|
}
|
|
460
|
-
let held$1 = Env.subgraphMode.contents ? Primitive_option.some(ChainState.holdExtraBudget(chainState, Primitive_int.max(0, parsedQueueItems$1.length - query.itemsEst | 0))) : undefined;
|
|
461
162
|
let newRegistrations;
|
|
462
163
|
try {
|
|
463
164
|
newRegistrations = await runContractRegistersOrThrow(itemsWithContractRegister, runtime, chainState);
|
|
464
|
-
} catch (raw_exn
|
|
465
|
-
let exn
|
|
466
|
-
return IndexerState.errorExit(state, ErrorHandling.make(exn
|
|
165
|
+
} catch (raw_exn) {
|
|
166
|
+
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
167
|
+
return IndexerState.errorExit(state, ErrorHandling.make(exn, ChainState.logger(chainState), undefined));
|
|
467
168
|
}
|
|
468
|
-
|
|
469
|
-
return proceed(newRegistrations, undefined, undefined, undefined);
|
|
169
|
+
return proceed(newRegistrations);
|
|
470
170
|
}
|
|
471
171
|
|
|
472
172
|
function finishWaitingForNewBlock(state, chainId, knownHeight, stateId, scheduleFetch, scheduleProcessing) {
|
|
@@ -479,55 +179,11 @@ function finishWaitingForNewBlock(state, chainId, knownHeight, stateId, schedule
|
|
|
479
179
|
scheduleProcessing();
|
|
480
180
|
}
|
|
481
181
|
|
|
482
|
-
async function catchUpBlockRegisters(state, chainId, runtime, stateId, scheduleFetch, scheduleProcessing) {
|
|
483
|
-
let chainState = IndexerState.getChainState(state, chainId);
|
|
484
|
-
if (!ChainState.isBlockRegisterIdle(chainState)) {
|
|
485
|
-
return;
|
|
486
|
-
}
|
|
487
|
-
let match = ChainState.nextBlockRegisterItems(chainState, ChainState.blockRegisterFrontier(chainState), 10000);
|
|
488
|
-
if (match === undefined) {
|
|
489
|
-
return;
|
|
490
|
-
}
|
|
491
|
-
let through = match[1];
|
|
492
|
-
let blockItems = match[0];
|
|
493
|
-
let match$1 = ChainState.queueBlockRegisterRun(chainState);
|
|
494
|
-
let finish = match$1[1];
|
|
495
|
-
let startedAt = Date.now();
|
|
496
|
-
let registrations;
|
|
497
|
-
try {
|
|
498
|
-
registrations = await runRegisterPassesOrThrow([], blockItems, runtime, chainState);
|
|
499
|
-
} catch (raw_exn) {
|
|
500
|
-
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
501
|
-
finish();
|
|
502
|
-
return IndexerState.errorExit(state, ErrorHandling.make(exn, ChainState.logger(chainState), undefined));
|
|
503
|
-
}
|
|
504
|
-
let isStale = IndexerState.isStale(state, stateId);
|
|
505
|
-
Logger.trace(ChainState.logger(chainState), "Ran block passes", {
|
|
506
|
-
through: through,
|
|
507
|
-
blockPasses: blockItems.length,
|
|
508
|
-
registrations: registrations.length,
|
|
509
|
-
stale: isStale,
|
|
510
|
-
ms: Date.now() - startedAt
|
|
511
|
-
});
|
|
512
|
-
if (!isStale) {
|
|
513
|
-
ChainState.applyBlockRegisters(chainState, sortRegistrations(registrations), through);
|
|
514
|
-
}
|
|
515
|
-
finish();
|
|
516
|
-
if (!isStale) {
|
|
517
|
-
ChainMetadata.stage(state);
|
|
518
|
-
scheduleProcessing();
|
|
519
|
-
}
|
|
520
|
-
return scheduleFetch();
|
|
521
|
-
}
|
|
522
|
-
|
|
523
182
|
async function fetchChain(state, chainId, runtime, action, stateId, scheduleFetch, scheduleProcessing, scheduleRollback) {
|
|
524
183
|
let chainState = IndexerState.getChainState(state, chainId);
|
|
525
184
|
if (IndexerState.isResolvingReorg(state) || IndexerState.isStopped(state)) {
|
|
526
185
|
return;
|
|
527
186
|
}
|
|
528
|
-
if (ChainState.hasBlockRegisters(chainState)) {
|
|
529
|
-
catchUpBlockRegisters(state, chainId, runtime, stateId, scheduleFetch, scheduleProcessing);
|
|
530
|
-
}
|
|
531
187
|
let isRealtime = IndexerState.isRealtime(state);
|
|
532
188
|
let sourceManager = ChainState.sourceManager(chainState);
|
|
533
189
|
let reducedPolling = !isRealtime && ChainState.knownHeight(chainState) > 0;
|
|
@@ -544,47 +200,20 @@ async function fetchChain(state, chainId, runtime, action, stateId, scheduleFetc
|
|
|
544
200
|
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
545
201
|
return IndexerState.errorExit(state, ErrorHandling.make(exn, IndexerState.logger(state), undefined));
|
|
546
202
|
}
|
|
547
|
-
}, knownHeight => SourceManager.waitForNewBlock(sourceManager, knownHeight, isRealtime, reducedPolling
|
|
203
|
+
}, knownHeight => SourceManager.waitForNewBlock(sourceManager, knownHeight, isRealtime, reducedPolling), knownHeight => finishWaitingForNewBlock(state, chainId, knownHeight, stateId, scheduleFetch, scheduleProcessing), action, stateId);
|
|
548
204
|
} catch (raw_exn) {
|
|
549
205
|
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
550
206
|
return IndexerState.errorExit(state, ErrorHandling.make(exn, IndexerState.logger(state), IndexerState.unexpectedErrorMsg));
|
|
551
207
|
}
|
|
552
208
|
}
|
|
553
209
|
|
|
554
|
-
let blockRegisterChunk = 2048;
|
|
555
|
-
|
|
556
|
-
let blockRegisterWindow = 10000;
|
|
557
|
-
|
|
558
|
-
let maxResponseBlockPasses = 50000;
|
|
559
|
-
|
|
560
|
-
let registerCallsPerChunk = 3000;
|
|
561
|
-
|
|
562
|
-
let unknownCostChunk = 100;
|
|
563
|
-
|
|
564
|
-
let minRegisterChunk = 100;
|
|
565
|
-
|
|
566
210
|
export {
|
|
567
211
|
hasContractRegister,
|
|
568
212
|
invokeContractRegister,
|
|
569
213
|
runContractRegistersOrThrow,
|
|
570
|
-
mergeRegisterItems,
|
|
571
|
-
blockRegisterChunk,
|
|
572
|
-
blockRegisterWindow,
|
|
573
|
-
maxResponseBlockPasses,
|
|
574
|
-
runRegisterPassesOrThrow,
|
|
575
|
-
sortRegistrations,
|
|
576
|
-
runResponsePassesOrThrow,
|
|
577
|
-
registerCallsPerItem,
|
|
578
|
-
reportRegisterFrontier,
|
|
579
|
-
registerCallsPerChunk,
|
|
580
|
-
unknownCostChunk,
|
|
581
|
-
minRegisterChunk,
|
|
582
|
-
registerChunkLimit,
|
|
583
|
-
cutAtRegisterLimit,
|
|
584
214
|
onQueryResponse,
|
|
585
215
|
applyQueryResponse,
|
|
586
216
|
finishWaitingForNewBlock,
|
|
587
|
-
catchUpBlockRegisters,
|
|
588
217
|
fetchChain,
|
|
589
218
|
}
|
|
590
|
-
/*
|
|
219
|
+
/* Utils Not a pure module */
|