mirror of
https://github.com/cerc-io/watcher-ts
synced 2026-09-08 16:54:08 +00:00
Refactor fill and fill-state CLIs to cli package (#257)
* Refactor fill CLI to cli package * Refactor method to fill-state to graph-node * Refactor fill-state CLI to cli package * Move subgraph state utils to a separate file * Refactor subgraph state helper methods to graph-node * Update mock indexer * Move watcher job-runner to util * Remove mock server and data from erc20-watcher * Import watcher job-runner from util
This commit is contained in:
@@ -286,6 +286,10 @@ export class Database implements DatabaseInterface {
|
||||
return this._baseDatabase.getBlockProgressEntities(repo, where, options);
|
||||
}
|
||||
|
||||
async getEntitiesForBlock (blockHash: string, tableName: string): Promise<any[]> {
|
||||
return this._baseDatabase.getEntitiesForBlock(blockHash, tableName);
|
||||
}
|
||||
|
||||
async updateBlockProgress (queryRunner: QueryRunner, block: BlockProgress, lastProcessedEventIndex: number): Promise<BlockProgress> {
|
||||
const repo = queryRunner.manager.getRepository(BlockProgress);
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import debug from 'debug';
|
||||
import { DeepPartial, FindConditions, FindManyOptions } from 'typeorm';
|
||||
import JSONbig from 'json-bigint';
|
||||
import { ethers } from 'ethers';
|
||||
import _ from 'lodash';
|
||||
{{#if (subgraphPath)}}
|
||||
import { SelectionNode } from 'graphql';
|
||||
{{/if}}
|
||||
@@ -35,7 +34,7 @@ import {
|
||||
getResultEvent
|
||||
} from '@cerc-io/util';
|
||||
{{#if (subgraphPath)}}
|
||||
import { GraphWatcher } from '@cerc-io/graph-node';
|
||||
import { GraphWatcher, updateSubgraphState, dumpSubgraphState } from '@cerc-io/graph-node';
|
||||
{{/if}}
|
||||
|
||||
{{#each contracts as | contract |}}
|
||||
@@ -143,6 +142,12 @@ export class Indexer implements IndexerInterface {
|
||||
return this._storageLayoutMap;
|
||||
}
|
||||
|
||||
{{#if (subgraphPath)}}
|
||||
get graphWatcher (): GraphWatcher {
|
||||
return this._graphWatcher;
|
||||
}
|
||||
|
||||
{{/if}}
|
||||
async init (): Promise<void> {
|
||||
await this._baseIndexer.fetchContracts();
|
||||
await this._baseIndexer.fetchStateStatus();
|
||||
@@ -248,6 +253,10 @@ export class Indexer implements IndexerInterface {
|
||||
);
|
||||
}
|
||||
|
||||
async getEntitiesForBlock (blockHash: string, tableName: string): Promise<any[]> {
|
||||
return this._db.getEntitiesForBlock(blockHash, tableName);
|
||||
}
|
||||
|
||||
async processInitialState (contractAddress: string, blockHash: string): Promise<any> {
|
||||
// Call initial state hook.
|
||||
return createInitialState(this, contractAddress, blockHash);
|
||||
@@ -341,12 +350,14 @@ export class Indexer implements IndexerInterface {
|
||||
return this._baseIndexer.createCheckpoint(this, contractAddress, block);
|
||||
}
|
||||
|
||||
{{#if (subgraphPath)}}
|
||||
// Method to be used by fill-state CLI.
|
||||
async createInit (blockHash: string, blockNumber: number): Promise<void> {
|
||||
// Create initial state for contracts.
|
||||
await this._baseIndexer.createInit(this, blockHash, blockNumber);
|
||||
}
|
||||
|
||||
{{/if}}
|
||||
async saveOrUpdateState (state: State): Promise<State> {
|
||||
return this._baseIndexer.saveOrUpdateState(state);
|
||||
}
|
||||
@@ -636,27 +647,11 @@ export class Indexer implements IndexerInterface {
|
||||
}
|
||||
|
||||
updateSubgraphState (contractAddress: string, data: any): void {
|
||||
// Update the subgraph state for a given contract.
|
||||
const oldData = this._subgraphStateMap.get(contractAddress);
|
||||
const updatedData = _.merge(oldData, data);
|
||||
this._subgraphStateMap.set(contractAddress, updatedData);
|
||||
return updateSubgraphState(this._subgraphStateMap, contractAddress, data);
|
||||
}
|
||||
|
||||
async dumpSubgraphState (blockHash: string, isStateFinalized = false): Promise<void> {
|
||||
// Create a diff for each contract in the subgraph state map.
|
||||
const createDiffPromises = Array.from(this._subgraphStateMap.entries())
|
||||
.map(([contractAddress, data]): Promise<void> => {
|
||||
if (isStateFinalized) {
|
||||
return this.createDiff(contractAddress, blockHash, data);
|
||||
}
|
||||
|
||||
return this.createDiffStaged(contractAddress, blockHash, data);
|
||||
});
|
||||
|
||||
await Promise.all(createDiffPromises);
|
||||
|
||||
// Reset the subgraph state map.
|
||||
this._subgraphStateMap.clear();
|
||||
return dumpSubgraphState(this, this._subgraphStateMap, blockHash, isStateFinalized);
|
||||
}
|
||||
|
||||
_populateEntityTypesMap (): void {
|
||||
|
||||
Reference in New Issue
Block a user