mirror of
https://github.com/cerc-io/watcher-ts
synced 2025-08-02 04:32:06 +00:00
Avoid historical sync for block handlers and eth_getLogs without event handlers
This commit is contained in:
parent
981f70ec9b
commit
115c9de0f0
@ -60,6 +60,9 @@ export class GraphWatcher {
|
|||||||
|
|
||||||
_context: Context;
|
_context: Context;
|
||||||
|
|
||||||
|
_blockHandlerExists = false;
|
||||||
|
_eventHandlerExists = false;
|
||||||
|
|
||||||
constructor (database: GraphDatabase, ethClient: EthClient, ethProvider: providers.BaseProvider, serverConfig: ServerConfig) {
|
constructor (database: GraphDatabase, ethClient: EthClient, ethProvider: providers.BaseProvider, serverConfig: ServerConfig) {
|
||||||
this._database = database;
|
this._database = database;
|
||||||
this._ethClient = ethClient;
|
this._ethClient = ethClient;
|
||||||
@ -110,6 +113,10 @@ export class GraphWatcher {
|
|||||||
};
|
};
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
|
// Check if handlers exist for deciding watcher behaviour
|
||||||
|
this._blockHandlerExists = this._dataSources.some(dataSource => Boolean(dataSource.mapping.blockHandlers));
|
||||||
|
this._eventHandlerExists = this._dataSources.some(dataSource => Boolean(dataSource.mapping.eventHandlers));
|
||||||
|
|
||||||
const data = await Promise.all(dataPromises);
|
const data = await Promise.all(dataPromises);
|
||||||
|
|
||||||
// Create a map from dataSource contract address to instance and contract interface.
|
// Create a map from dataSource contract address to instance and contract interface.
|
||||||
@ -151,6 +158,14 @@ export class GraphWatcher {
|
|||||||
return this._dataSources;
|
return this._dataSources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get blockHandlerExists (): boolean {
|
||||||
|
return this._blockHandlerExists;
|
||||||
|
}
|
||||||
|
|
||||||
|
get eventHandlerExists (): boolean {
|
||||||
|
return this._eventHandlerExists;
|
||||||
|
}
|
||||||
|
|
||||||
async addContracts () {
|
async addContracts () {
|
||||||
assert(this._indexer);
|
assert(this._indexer);
|
||||||
assert(this._indexer.watchContract);
|
assert(this._indexer.watchContract);
|
||||||
|
@ -123,9 +123,15 @@ export class EventWatcher {
|
|||||||
startBlockNumber = syncStatus.chainHeadBlockNumber + 1;
|
startBlockNumber = syncStatus.chainHeadBlockNumber + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if filter for logs is enabled
|
// Perform checks before starting historical block processing
|
||||||
// Check if starting block for watcher is before latest canonical block
|
if (
|
||||||
if (this._config.jobQueue.useBlockRanges && startBlockNumber < latestCanonicalBlockNumber) {
|
// Check if useBlockRanges is enabled for historical blocks processing
|
||||||
|
this._config.jobQueue.useBlockRanges &&
|
||||||
|
// Check if starting block for watcher is before latest canonical block
|
||||||
|
startBlockNumber < latestCanonicalBlockNumber &&
|
||||||
|
// Check if any block handler exists in subgraph config
|
||||||
|
!this._indexer.graphWatcher?.blockHandlerExists
|
||||||
|
) {
|
||||||
await this.startHistoricalBlockProcessing(startBlockNumber, latestCanonicalBlockNumber);
|
await this.startHistoricalBlockProcessing(startBlockNumber, latestCanonicalBlockNumber);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -288,6 +288,7 @@ export interface GraphDatabaseInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface GraphWatcherInterface {
|
export interface GraphWatcherInterface {
|
||||||
|
readonly blockHandlerExists: boolean;
|
||||||
init (): Promise<void>;
|
init (): Promise<void>;
|
||||||
setIndexer (indexer: IndexerInterface): void;
|
setIndexer (indexer: IndexerInterface): void;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user