From 7b7c7d2dad1ce86566003d796e5195d21a43c32c Mon Sep 17 00:00:00 2001 From: Theo Butler Date: Tue, 14 Nov 2023 08:22:07 -0500 Subject: [PATCH] feat: optionally override address book --- packages/indexer-agent/src/commands/start.ts | 6 ++++++ packages/indexer-common/src/network-specification.ts | 1 + packages/indexer-common/src/network.ts | 9 ++++++++- packages/indexer-service/src/commands/start.ts | 11 ++++++++++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/indexer-agent/src/commands/start.ts b/packages/indexer-agent/src/commands/start.ts index 2c8e95162..e8fa64abf 100644 --- a/packages/indexer-agent/src/commands/start.ts +++ b/packages/indexer-agent/src/commands/start.ts @@ -233,6 +233,11 @@ export const start = { default: true, group: 'Cost Models', }) + .option('address-book', { + description: 'Graph contracts address book file path', + type: 'string', + required: false, + }) .option('dai-contract', { description: 'Address of the DAI or USDC contract to use for the --inject-dai conversion rate', @@ -421,6 +426,7 @@ export async function createNetworkSpecification( transactionMonitoring, subgraphs, networkProvider, + addressBook: argv.addressBook, dai, }) } catch (parsingError) { diff --git a/packages/indexer-common/src/network-specification.ts b/packages/indexer-common/src/network-specification.ts index 620c7a39a..1fef4b766 100644 --- a/packages/indexer-common/src/network-specification.ts +++ b/packages/indexer-common/src/network-specification.ts @@ -143,6 +143,7 @@ export const NetworkSpecification = z transactionMonitoring: TransactionMonitoring, subgraphs: ProtocolSubgraphs, networkProvider: NetworkProvider, + addressBook: z.string().optional(), dai: Dai, }) .strict() diff --git a/packages/indexer-common/src/network.ts b/packages/indexer-common/src/network.ts index 0104f8844..7ea861836 100644 --- a/packages/indexer-common/src/network.ts +++ b/packages/indexer-common/src/network.ts @@ -5,6 +5,7 @@ import { SubgraphDeploymentID, connectContracts, Eventual, + AddressBook, } from '@graphprotocol/common-ts' import { INDEXER_ERROR_MESSAGES, @@ -27,6 +28,7 @@ import pRetry from 'p-retry' import { resolveChainId } from './indexer-management' import { monitorEthBalance } from './utils' import { QueryFeeModels } from './query-fees' +import { readFileSync } from 'fs' export class Network { logger: Logger @@ -143,6 +145,7 @@ export class Network { wallet, specification.networkIdentifier, logger, + specification.addressBook, ) // * ----------------------------------------------------------------------- @@ -436,6 +439,7 @@ async function connectToProtocolContracts( wallet: Wallet, networkIdentifier: string, logger: Logger, + addressBook?: string, ): Promise { const numericNetworkId = parseInt(networkIdentifier.split(':')[1]) @@ -450,7 +454,10 @@ async function connectToProtocolContracts( let contracts try { - contracts = await connectContracts(wallet, numericNetworkId, undefined) + const contractAddresses = addressBook + ? (JSON.parse(readFileSync(addressBook).toString()) as AddressBook) + : undefined + contracts = await connectContracts(wallet, numericNetworkId, contractAddresses) } catch (error) { const errorMessage = 'Failed to connect to contracts, please ensure you are using the intended protocol network.' diff --git a/packages/indexer-service/src/commands/start.ts b/packages/indexer-service/src/commands/start.ts index caaa5e8bd..8741391c2 100644 --- a/packages/indexer-service/src/commands/start.ts +++ b/packages/indexer-service/src/commands/start.ts @@ -11,6 +11,7 @@ const SUGGESTED_SUBGRAPH_MAX_BLOCK_DISTANCE_ON_L2 = const DEFAULT_SUBGRAPH_FRESHNESS_SLEEP_MILLISECONDS = 5_000 import { + AddressBook, connectContracts, connectDatabase, createLogger, @@ -194,6 +195,11 @@ export default { default: DEFAULT_SUBGRAPH_FRESHNESS_SLEEP_MILLISECONDS, group: 'Protocol', }) + .option('address-book', { + description: 'Graph contracts address book file path', + type: 'string', + required: false, + }) .check(argv => { if (!argv['network-subgraph-endpoint'] && !argv['network-subgraph-deployment']) { @@ -393,10 +399,13 @@ export default { let contracts = undefined try { + const addressBook = argv.addressBook + ? (JSON.parse(fs.readFileSync(argv.addressBook).toString()) as AddressBook) + : undefined contracts = await connectContracts( networkProvider, networkIdentifier.chainId, - undefined, + addressBook, ) } catch (error) { logger.error(