envio 3.6.1 → 3.7.0-subgraph
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/index.d.ts +197 -9
- package/package.json +6 -6
- package/src/Batch.res +64 -25
- package/src/Batch.res.mjs +69 -46
- package/src/ChainFetching.res +13 -17
- package/src/ChainFetching.res.mjs +9 -14
- package/src/ChainState.res +160 -119
- package/src/ChainState.res.mjs +75 -46
- package/src/ChainState.resi +15 -12
- package/src/Config.res +18 -2
- package/src/Config.res.mjs +9 -6
- package/src/Core.res +20 -0
- package/src/Core.res.mjs +11 -0
- package/src/Ecosystem.res +0 -1
- package/src/Envio.res +16 -3
- package/src/EventConfigBuilder.res +155 -40
- package/src/EventConfigBuilder.res.mjs +76 -24
- package/src/EventProcessing.res +10 -14
- package/src/EventProcessing.res.mjs +12 -10
- package/src/EventUtils.res +3 -47
- package/src/FetchState.res +124 -104
- package/src/FetchState.res.mjs +116 -100
- package/src/HandlerLoader.res +20 -8
- package/src/HandlerLoader.res.mjs +11 -2
- package/src/HandlerRegister.res +108 -2
- package/src/HandlerRegister.res.mjs +59 -10
- package/src/HandlerRegister.resi +4 -0
- package/src/InMemoryStore.res +1 -6
- package/src/InMemoryStore.res.mjs +1 -3
- package/src/Internal.res +84 -24
- package/src/Internal.res.mjs +33 -2
- package/src/LazyLoader.res +12 -11
- package/src/LazyLoader.res.mjs +13 -7
- package/src/Main.res +22 -9
- package/src/Main.res.mjs +18 -5
- package/src/MemoryStorage.res +756 -0
- package/src/MemoryStorage.res.mjs +623 -0
- package/src/Persistence.res +4 -2
- package/src/PgStorage.res +24 -8
- package/src/PgStorage.res.mjs +15 -12
- package/src/ReorgDetection.res +0 -222
- package/src/ReorgDetection.res.mjs +0 -163
- package/src/Rollback.res +14 -15
- package/src/Rollback.res.mjs +4 -5
- package/src/SimulateItems.res +2 -2
- package/src/UserContext.res +358 -51
- package/src/UserContext.res.mjs +271 -35
- package/src/Utils.res +3 -0
- package/src/bindings/ClickHouse.res +16 -11
- package/src/bindings/ClickHouse.res.mjs +10 -10
- package/src/bindings/Vitest.res +1 -1
- package/src/sources/BlockStore.res +115 -5
- package/src/sources/BlockStore.res.mjs +25 -0
- package/src/sources/Evm.res +0 -1
- package/src/sources/Evm.res.mjs +0 -1
- package/src/sources/EvmHyperSyncSource.res +19 -84
- package/src/sources/EvmHyperSyncSource.res.mjs +24 -60
- package/src/sources/Fuel.res +24 -4
- package/src/sources/Fuel.res.mjs +23 -3
- package/src/sources/FuelHyperSync.res +8 -3
- package/src/sources/FuelHyperSync.res.mjs +5 -4
- package/src/sources/FuelHyperSync.resi +3 -1
- package/src/sources/FuelHyperSyncClient.res +7 -10
- package/src/sources/FuelHyperSyncSource.res +18 -45
- package/src/sources/FuelHyperSyncSource.res.mjs +18 -35
- package/src/sources/HyperSync.res +49 -229
- package/src/sources/HyperSync.res.mjs +74 -191
- package/src/sources/HyperSync.resi +11 -35
- package/src/sources/HyperSyncClient.res +9 -79
- package/src/sources/HyperSyncClient.res.mjs +2 -6
- package/src/sources/RequestStat.res +5 -0
- package/src/sources/RequestStat.res.mjs +2 -0
- package/src/sources/RpcSource.res +149 -43
- package/src/sources/RpcSource.res.mjs +104 -41
- package/src/sources/SimulateSource.res +8 -5
- package/src/sources/SimulateSource.res.mjs +6 -6
- package/src/sources/Source.res +89 -16
- package/src/sources/Source.res.mjs +50 -1
- package/src/sources/SourceManager.res +255 -50
- package/src/sources/SourceManager.res.mjs +149 -55
- package/src/sources/SourceManager.resi +2 -6
- package/src/sources/Svm.res +0 -7
- package/src/sources/Svm.res.mjs +0 -8
- package/src/sources/SvmHyperSyncClient.res +21 -16
- package/src/sources/SvmHyperSyncClient.res.mjs +3 -4
- package/src/sources/SvmHyperSyncSource.res +25 -117
- package/src/sources/SvmHyperSyncSource.res.mjs +8 -121
- package/src/subgraph/blocks.ts +176 -0
- package/src/subgraph/calls.ts +217 -0
- package/src/subgraph/conformance.ts +99 -0
- package/src/subgraph/division.ts +110 -0
- package/src/subgraph/errors.ts +90 -0
- package/src/subgraph/graph-ts-types/VERSION +2 -0
- package/src/subgraph/graph-ts-types/chain/arweave.d.ts +70 -0
- package/src/subgraph/graph-ts-types/chain/cosmos.d.ts +327 -0
- package/src/subgraph/graph-ts-types/chain/ethereum.d.ts +233 -0
- package/src/subgraph/graph-ts-types/chain/near.d.ts +253 -0
- package/src/subgraph/graph-ts-types/chain/starknet.d.ts +32 -0
- package/src/subgraph/graph-ts-types/common/collections.d.ts +136 -0
- package/src/subgraph/graph-ts-types/common/conversion.d.ts +11 -0
- package/src/subgraph/graph-ts-types/common/datasource.d.ts +30 -0
- package/src/subgraph/graph-ts-types/common/eager-offset.d.ts +0 -0
- package/src/subgraph/graph-ts-types/common/json.d.ts +17 -0
- package/src/subgraph/graph-ts-types/common/numbers.d.ts +120 -0
- package/src/subgraph/graph-ts-types/common/value.d.ts +120 -0
- package/src/subgraph/graph-ts-types/common/yaml.d.ts +90 -0
- package/src/subgraph/graph-ts-types/global/global.d.ts +194 -0
- package/src/subgraph/graph-ts-types/helper-functions.d.ts +22 -0
- package/src/subgraph/graph-ts-types/index.d.ts +102 -0
- package/src/subgraph/graph-ts.ts +1871 -0
- package/src/subgraph/hosts.ts +148 -0
- package/src/subgraph/runtime.ts +845 -0
- package/src/subgraph/scope.ts +63 -0
- package/svm.schema.json +3 -2
package/src/ChainFetching.res
CHANGED
|
@@ -11,17 +11,17 @@ type partitionQueryResponse = {
|
|
|
11
11
|
let runContractRegistersOrThrow = async (
|
|
12
12
|
~itemsWithContractRegister: array<Internal.item>,
|
|
13
13
|
~config: Config.t,
|
|
14
|
+
~chainState: ChainState.t,
|
|
14
15
|
~transactionStore: option<TransactionStore.t>,
|
|
15
|
-
~blockStore: option<BlockStore.t>,
|
|
16
16
|
) => {
|
|
17
17
|
// contractRegister handlers can read event.transaction and event.block, so
|
|
18
18
|
// materialise the selected fields onto the payloads before running them. All
|
|
19
|
-
// items belong to the chain being fetched
|
|
19
|
+
// items belong to the chain being fetched: transactions come from its
|
|
20
|
+
// response page, blocks from the chain store the page was merged into.
|
|
20
21
|
await ChainState.materializePageItems(
|
|
21
22
|
~items=itemsWithContractRegister,
|
|
22
23
|
~transactionStore,
|
|
23
|
-
~blockStore,
|
|
24
|
-
~ecosystem=config.ecosystem.name,
|
|
24
|
+
~blockStore=chainState->ChainState.blockStore,
|
|
25
25
|
)
|
|
26
26
|
|
|
27
27
|
let registrations: array<AddressStore.registration> = []
|
|
@@ -111,10 +111,8 @@ let rec onQueryResponse = async (
|
|
|
111
111
|
transactionStore,
|
|
112
112
|
blockStore,
|
|
113
113
|
latestFetchedBlockNumber,
|
|
114
|
-
latestFetchedBlockTimestamp,
|
|
115
114
|
stats,
|
|
116
115
|
knownHeight,
|
|
117
|
-
blockHashes,
|
|
118
116
|
fromBlockQueried,
|
|
119
117
|
} = response
|
|
120
118
|
|
|
@@ -150,7 +148,7 @@ let rec onQueryResponse = async (
|
|
|
150
148
|
})
|
|
151
149
|
}
|
|
152
150
|
|
|
153
|
-
let reorgResult = chainState->ChainState.registerReorgGuard(~
|
|
151
|
+
let reorgResult = chainState->ChainState.registerReorgGuard(~blockStore, ~knownHeight)
|
|
154
152
|
|
|
155
153
|
let rollbackWithReorgDetectedBlockNumber = switch reorgResult {
|
|
156
154
|
| ReorgDetected(reorgDetected) => {
|
|
@@ -158,13 +156,17 @@ let rec onQueryResponse = async (
|
|
|
158
156
|
->ChainState.logger
|
|
159
157
|
->Logging.childInfo(
|
|
160
158
|
reorgDetected->ReorgDetection.reorgDetectedToLogParams(
|
|
161
|
-
~shouldRollbackOnReorg=
|
|
159
|
+
~shouldRollbackOnReorg=chainState->ChainState.shouldRollbackOnReorg,
|
|
162
160
|
),
|
|
163
161
|
)
|
|
164
162
|
chainState->ChainState.recordReorgDetected(
|
|
165
163
|
~blockNumber=reorgDetected.scannedBlock.blockNumber,
|
|
166
164
|
)
|
|
167
|
-
|
|
165
|
+
|
|
166
|
+
// Must agree with the `reportOnly` flag registerReorgGuard passed to
|
|
167
|
+
// the merge: a discarded page (rollback mode) needs the rollback to
|
|
168
|
+
// actually happen, or the stale stored hash re-reports forever.
|
|
169
|
+
if chainState->ChainState.shouldRollbackOnReorg {
|
|
168
170
|
Some(reorgDetected.scannedBlock.blockNumber)
|
|
169
171
|
} else {
|
|
170
172
|
None
|
|
@@ -224,13 +226,9 @@ let rec onQueryResponse = async (
|
|
|
224
226
|
~newItems,
|
|
225
227
|
~newRegistrations,
|
|
226
228
|
~knownHeight,
|
|
227
|
-
~latestFetchedBlock=
|
|
228
|
-
FetchState.blockNumber: latestFetchedBlockNumber,
|
|
229
|
-
blockTimestamp: latestFetchedBlockTimestamp,
|
|
230
|
-
},
|
|
229
|
+
~latestFetchedBlock=latestFetchedBlockNumber,
|
|
231
230
|
~query,
|
|
232
231
|
~transactionStore,
|
|
233
|
-
~blockStore,
|
|
234
232
|
)
|
|
235
233
|
ChainMetadata.stage(state)
|
|
236
234
|
scheduleFetch()
|
|
@@ -243,8 +241,8 @@ let rec onQueryResponse = async (
|
|
|
243
241
|
switch await runContractRegistersOrThrow(
|
|
244
242
|
~itemsWithContractRegister,
|
|
245
243
|
~config=state->IndexerState.config,
|
|
244
|
+
~chainState,
|
|
246
245
|
~transactionStore,
|
|
247
|
-
~blockStore,
|
|
248
246
|
) {
|
|
249
247
|
| exception exn => IndexerState.errorExit(state, exn->ErrorHandling.make)
|
|
250
248
|
| newRegistrations => proceed(~newRegistrations)
|
|
@@ -262,7 +260,6 @@ and applyQueryResponse = (
|
|
|
262
260
|
~latestFetchedBlock,
|
|
263
261
|
~query,
|
|
264
262
|
~transactionStore,
|
|
265
|
-
~blockStore,
|
|
266
263
|
) => {
|
|
267
264
|
let chainState = state->IndexerState.getChainState(~chainId)
|
|
268
265
|
let wasFetchingAtHead = chainState->ChainState.isFetchingAtHead
|
|
@@ -274,7 +271,6 @@ and applyQueryResponse = (
|
|
|
274
271
|
~newRegistrations,
|
|
275
272
|
~knownHeight,
|
|
276
273
|
~transactionStore,
|
|
277
|
-
~blockStore,
|
|
278
274
|
)
|
|
279
275
|
|
|
280
276
|
// In auto-exit mode, set endBlock to the first event's block when events arrive.
|
|
@@ -16,8 +16,8 @@ import * as Stdlib_Promise from "@rescript/runtime/lib/es6/Stdlib_Promise.js";
|
|
|
16
16
|
import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
|
|
17
17
|
import * as ContractRegisterContext from "./ContractRegisterContext.res.mjs";
|
|
18
18
|
|
|
19
|
-
async function runContractRegistersOrThrow(itemsWithContractRegister, config,
|
|
20
|
-
await ChainState.materializePageItems(itemsWithContractRegister, transactionStore, blockStore
|
|
19
|
+
async function runContractRegistersOrThrow(itemsWithContractRegister, config, chainState, transactionStore) {
|
|
20
|
+
await ChainState.materializePageItems(itemsWithContractRegister, transactionStore, ChainState.blockStore(chainState));
|
|
21
21
|
let registrations = [];
|
|
22
22
|
let onRegister = (item, contractAddress, contractName) => {
|
|
23
23
|
registrations.push({
|
|
@@ -63,10 +63,10 @@ async function runContractRegistersOrThrow(itemsWithContractRegister, config, tr
|
|
|
63
63
|
return registrations;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function applyQueryResponse(state, chainId, newItems, newRegistrations, knownHeight, latestFetchedBlock, query, transactionStore
|
|
66
|
+
function applyQueryResponse(state, chainId, newItems, newRegistrations, knownHeight, latestFetchedBlock, query, transactionStore) {
|
|
67
67
|
let chainState = IndexerState.getChainState(state, chainId);
|
|
68
68
|
let wasFetchingAtHead = ChainState.isFetchingAtHead(chainState);
|
|
69
|
-
ChainState.handleQueryResult(chainState, query, newItems, newRegistrations, latestFetchedBlock, knownHeight, transactionStore
|
|
69
|
+
ChainState.handleQueryResult(chainState, query, newItems, newRegistrations, latestFetchedBlock, knownHeight, transactionStore);
|
|
70
70
|
if (IndexerState.exitAfterFirstEventBlock(state) && newItems.length !== 0) {
|
|
71
71
|
ChainState.setEndBlockToFirstEvent(chainState, newItems[0].blockNumber);
|
|
72
72
|
}
|
|
@@ -84,10 +84,8 @@ async function onQueryResponse(state, param, stateId, scheduleFetch, schedulePro
|
|
|
84
84
|
}
|
|
85
85
|
let chainState = IndexerState.getChainState(state, chainId);
|
|
86
86
|
let stats = response.stats;
|
|
87
|
-
let latestFetchedBlockTimestamp = response.latestFetchedBlockTimestamp;
|
|
88
87
|
let latestFetchedBlockNumber = response.latestFetchedBlockNumber;
|
|
89
88
|
let fromBlockQueried = response.fromBlockQueried;
|
|
90
|
-
let blockStore = response.blockStore;
|
|
91
89
|
let transactionStore = response.transactionStore;
|
|
92
90
|
let parsedQueueItems = response.parsedQueueItems;
|
|
93
91
|
let knownHeight = response.knownHeight;
|
|
@@ -119,15 +117,15 @@ async function onQueryResponse(state, param, stateId, scheduleFetch, schedulePro
|
|
|
119
117
|
numContractRegisterEvents: numContractRegisterEvents
|
|
120
118
|
});
|
|
121
119
|
}
|
|
122
|
-
let reorgResult = ChainState.registerReorgGuard(chainState, response.
|
|
120
|
+
let reorgResult = ChainState.registerReorgGuard(chainState, response.blockStore, knownHeight);
|
|
123
121
|
let rollbackWithReorgDetectedBlockNumber;
|
|
124
122
|
if (typeof reorgResult !== "object") {
|
|
125
123
|
rollbackWithReorgDetectedBlockNumber = undefined;
|
|
126
124
|
} else {
|
|
127
125
|
let reorgDetected = reorgResult._0;
|
|
128
|
-
Logging.childInfo(ChainState.logger(chainState), ReorgDetection.reorgDetectedToLogParams(reorgDetected,
|
|
126
|
+
Logging.childInfo(ChainState.logger(chainState), ReorgDetection.reorgDetectedToLogParams(reorgDetected, ChainState.shouldRollbackOnReorg(chainState)));
|
|
129
127
|
ChainState.recordReorgDetected(chainState, reorgDetected.scannedBlock.blockNumber);
|
|
130
|
-
rollbackWithReorgDetectedBlockNumber =
|
|
128
|
+
rollbackWithReorgDetectedBlockNumber = ChainState.shouldRollbackOnReorg(chainState) ? reorgDetected.scannedBlock.blockNumber : undefined;
|
|
131
129
|
}
|
|
132
130
|
if (rollbackWithReorgDetectedBlockNumber !== undefined) {
|
|
133
131
|
let match = IndexerState.rollbackState(state);
|
|
@@ -146,10 +144,7 @@ async function onQueryResponse(state, param, stateId, scheduleFetch, schedulePro
|
|
|
146
144
|
}
|
|
147
145
|
let proceed = newRegistrations => {
|
|
148
146
|
if (!IndexerState.isStale(state, stateId)) {
|
|
149
|
-
applyQueryResponse(state, chainId, parsedQueueItems, newRegistrations, knownHeight,
|
|
150
|
-
blockNumber: latestFetchedBlockNumber,
|
|
151
|
-
blockTimestamp: latestFetchedBlockTimestamp
|
|
152
|
-
}, query, transactionStore, blockStore);
|
|
147
|
+
applyQueryResponse(state, chainId, parsedQueueItems, newRegistrations, knownHeight, latestFetchedBlockNumber, query, transactionStore);
|
|
153
148
|
ChainMetadata.stage(state);
|
|
154
149
|
scheduleFetch();
|
|
155
150
|
return scheduleProcessing();
|
|
@@ -160,7 +155,7 @@ async function onQueryResponse(state, param, stateId, scheduleFetch, schedulePro
|
|
|
160
155
|
}
|
|
161
156
|
let newRegistrations;
|
|
162
157
|
try {
|
|
163
|
-
newRegistrations = await runContractRegistersOrThrow(itemsWithContractRegister, IndexerState.config(state),
|
|
158
|
+
newRegistrations = await runContractRegistersOrThrow(itemsWithContractRegister, IndexerState.config(state), chainState, transactionStore);
|
|
164
159
|
} catch (raw_exn) {
|
|
165
160
|
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
166
161
|
return IndexerState.errorExit(state, ErrorHandling.make(exn, undefined, undefined));
|