diff --git a/apps/indexer-coordinator/package.json b/apps/indexer-coordinator/package.json index 2cc573d4..dc00c7b7 100644 --- a/apps/indexer-coordinator/package.json +++ b/apps/indexer-coordinator/package.json @@ -1,6 +1,6 @@ { "name": "@subql/indexer-coordinator", - "version": "2.10.4", + "version": "2.10.5", "description": "", "author": "SubQuery", "license": "Apache-2.0", @@ -8,9 +8,7 @@ "/dist", "/bin" ], - "bin": { - "indexer-coordinator": "./bin/run" - }, + "bin": "./bin/run", "scripts": { "prebuild": "rimraf dist", "build": "nest build && sh ./scripts/copy-resources.sh", @@ -156,5 +154,9 @@ ], "coverageDirectory": "../coverage", "testEnvironment": "node" + }, + "volta": { + "node": "20.19.0", + "yarn": "1.22.22" } } diff --git a/apps/indexer-coordinator/src/payg/payg.query.service.ts b/apps/indexer-coordinator/src/payg/payg.query.service.ts index 34a332d9..3b62e1fd 100644 --- a/apps/indexer-coordinator/src/payg/payg.query.service.ts +++ b/apps/indexer-coordinator/src/payg/payg.query.service.ts @@ -58,7 +58,7 @@ export class PaygQueryService { } @timeoutPromiseCatched(20000, undefined) - async getStateChannel(id: string): Promise { + async getStateChannel(id: string): Promise { try { const result = await this.client.query({ // @ts-ignore TODO: fix type @@ -67,8 +67,9 @@ export class PaygQueryService { }); const channel = result.data.stateChannel; + // null: channel not found on network; undefined: request failed // @ts-ignore TODO: fix type - return channel; + return channel ?? null; } catch (e) { logger.error(`Failed to get channel ${id} from Subquery Project: ${e}`); return; diff --git a/apps/indexer-coordinator/src/payg/payg.service.ts b/apps/indexer-coordinator/src/payg/payg.service.ts index 6f171067..b7c6ddc7 100644 --- a/apps/indexer-coordinator/src/payg/payg.service.ts +++ b/apps/indexer-coordinator/src/payg/payg.service.ts @@ -173,15 +173,19 @@ export class PaygService implements OnModuleInit { async updateChannelFromNetwork( id: string, - altChannelData?: StateChannelOnNetwork, + altChannelData?: StateChannelOnNetwork | null, isFinal?: boolean ): Promise { id = BigNumber.from(id).toHexString().toLowerCase(); - if (!altChannelData) { + if (altChannelData === undefined) { altChannelData = await this.paygQueryService.getStateChannel(id); } - if (!altChannelData) { + if (altChannelData === undefined) { + logger.debug(`State channel fetch from network failed, skip update: ${id}`); + return; + } + if (altChannelData === null) { logger.debug(`State channel not exist on network, remove from db: ${id}`); await this.channelRepo.delete({ id }); return; @@ -265,7 +269,7 @@ export class PaygService implements OnModuleInit { async syncChannel( channelId: string, altPrice?: BigNumber, - altChannelData?: StateChannelOnNetwork + altChannelData?: StateChannelOnNetwork | null ): Promise { if (!this.contract.getSdk()) { return; @@ -275,7 +279,7 @@ export class PaygService implements OnModuleInit { const channelState = await this.channelFromContract(BigNumber.from(id)); if (!channelState) { - return this.updateChannelFromNetwork(id, altChannelData, true); + return this.updateChannelFromNetwork(id, altChannelData); } let channelPrice: BigNumber; diff --git a/package.json b/package.json index 7ae19d0e..73976779 100644 --- a/package.json +++ b/package.json @@ -20,5 +20,9 @@ "lint-staged": "yarn lint-staged:admin && yarn lint-staged:coordinator", "lint-staged:admin": "cd apps/indexer-admin && yarn lint-staged", "lint-staged:coordinator": "cd apps/indexer-coordinator && yarn lint-staged" + }, + "volta": { + "node": "20.19.0", + "yarn": "1.22.22" } }