Skip to content

Commit

Permalink
alias and chain name consistency
Browse files Browse the repository at this point in the history
  • Loading branch information
hopeyen committed Sep 27, 2022
1 parent 212ab95 commit f01a133
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 40 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ Protocol
deployment [string] [default: "0.01"]
--register Whether to register the indexer on chain
[boolean] [default: true]
--block-oracle-endpoint Endpoint to query epoch start blocks from
--epoch-subgraph-endpoint Endpoint to query epoch start blocks from
[string] [required]
Cost Models
Expand Down
4 changes: 2 additions & 2 deletions packages/indexer-agent/src/agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,12 +202,12 @@ class Agent {
const protocolChainLatestValidEpoch = timer(600_000).tryMap(
async () =>
await this.networkMonitor.latestValidEpoch(
this.networkMonitor.protocolChain(),
this.networkMonitor.networkAlias,
),
{
onError: error =>
this.logger.warn(
`Failed to obtain protocol chain's latest valid epoch, trying again later`,
`Failed to obtain protocol chain's latest valid epoch`,
{
error,
},
Expand Down
4 changes: 3 additions & 1 deletion packages/indexer-agent/src/commands/start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
AllocationManagementMode,
NetworkMonitor,
EpochSubgraph,
CAIPIds,
} from '@graphprotocol/indexer-common'
import { startAgent } from '../agent'
import { Indexer } from '../indexer'
Expand Down Expand Up @@ -769,6 +770,7 @@ export default {
await receiptCollector.queuePendingReceiptsFromDatabase()

const networkMonitor = new NetworkMonitor(
CAIPIds[networkMeta.name],
contracts,
toAddress(indexerAddress),
logger,
Expand Down Expand Up @@ -803,7 +805,7 @@ export default {
},
transactionManager: network.transactionManager,
receiptCollector,
epochSubgraph,
networkMonitor,
allocationManagementMode,
autoAllocationMinBatchSize: argv.autoAllocationMinBatchSize,
})
Expand Down
14 changes: 5 additions & 9 deletions packages/indexer-common/src/allocations/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,21 +184,17 @@ export interface NetworkEpochBlock {
startBlockHash: string
}

export const NetworkAliases: { [key: string]: string } = {
export const CAIPIds: { [key: string]: string } = {
mainnet: 'eip155:1',
goerli: 'eip155:5',
gnosis: 'eip155:100',
}

export const aliasInverse = (eipFormat: string): string => {
export const alias = (identifier: string): string => {
try {
return Object.keys(NetworkAliases).filter(
(name) => NetworkAliases[name] == eipFormat,
)[0]
return Object.keys(CAIPIds).filter((name) => CAIPIds[name] == identifier)[0]
} catch (error) {
// hardcoded alias for now, shouldn't get here
// if so this will just let blockHashFromNumber fail later
return ''
throw new Error(`Failed to match chain ids to a network alias`)
}
}
/* eslint-disable @typescript-eslint/no-explicit-any */
Expand All @@ -211,7 +207,7 @@ export const buildEpochBlock = async (
epochNumber: +block.epochNumber,
startBlockNumber: +block.blockNumber,
startBlockHash: await status.blockHashFromNumber(
aliasInverse(block.network.id),
alias(block.network.id),
+block.blockNumber,
),
}
Expand Down
2 changes: 1 addition & 1 deletion packages/indexer-common/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export * from './indexer-management'
export * from './indexing-status'
export * from './network'
export * from './network-subgraph'
export * from './block-oracle-subgraph'
export * from './epoch-subgraph'
export * from './rules'
export * from './subgraphs'
export * from './transactions'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
mutable,
NetworkContracts,
parseGRT,
toAddress,
} from '@graphprotocol/common-ts'

import {
Expand All @@ -35,6 +36,9 @@ import {
OrderDirection,
QueryFeeModels,
TransactionManager,
NetworkMonitor,
EpochSubgraph,
CAIPIds,
} from '@graphprotocol/indexer-common'
import { CombinedError } from '@urql/core'
import { GraphQLError } from 'graphql'
Expand Down Expand Up @@ -283,6 +287,24 @@ const setup = async () => {
voucherRedemptionMaxBatchSize: 100,
})

const epochSubgraph = await EpochSubgraph.create({
logger,
endpoint:
'https://api.thegraph.com/subgraphs/name/graphprotocol/graph-network-testnet',
network: 'goerli',
})

const networkMonitor = new NetworkMonitor(
CAIPIds['goerli'],
contracts,
toAddress('0xc61127cdfb5380df4214b0200b9a07c7c49d34f9'),
logger,
indexingStatusResolver,
networkSubgraph,
ethereum,
epochSubgraph,
)

client = await createIndexerManagementClient({
models: managementModels,
address,
Expand All @@ -293,6 +315,7 @@ const setup = async () => {
networkSubgraph,
receiptCollector,
transactionManager,
networkMonitor,
logger,
defaults,
features: {
Expand Down
19 changes: 3 additions & 16 deletions packages/indexer-common/src/indexer-management/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@ import {
Logger,
mutable,
NetworkContracts,
toAddress,
WritableEventual,
} from '@graphprotocol/common-ts'
import { NetworkSubgraph } from '../network-subgraph'
import { EpochSubgraph } from '../block-oracle-subgraph'

import { IndexerManagementModels, IndexingRuleCreationAttributes } from './models'

Expand Down Expand Up @@ -437,7 +435,7 @@ export interface IndexerManagementClientOptions {
ethereum?: ethers.providers.BaseProvider
transactionManager?: TransactionManager
receiptCollector?: AllocationReceiptCollector
epochSubgraph?: EpochSubgraph
networkMonitor?: NetworkMonitor
allocationManagementMode?: AllocationManagementMode
autoAllocationMinBatchSize?: number
}
Expand Down Expand Up @@ -502,7 +500,7 @@ export const createIndexerManagementClient = async (
features,
transactionManager,
receiptCollector,
epochSubgraph,
networkMonitor,
allocationManagementMode,
autoAllocationMinBatchSize,
} = options
Expand All @@ -521,19 +519,8 @@ export const createIndexerManagementClient = async (
const subgraphManager = new SubgraphManager(deploymentManagementEndpoint, indexNodeIDs)
let allocationManager: AllocationManager | undefined = undefined
let actionManager: ActionManager | undefined = undefined
let networkMonitor: NetworkMonitor | undefined = undefined

if (transactionManager) {
networkMonitor = new NetworkMonitor(
contracts,
toAddress(address),
logger,
indexingStatusResolver,
networkSubgraph,
transactionManager.ethereum,
epochSubgraph,
)

if (transactionManager && networkMonitor) {
if (receiptCollector) {
// TODO: AllocationManager construction inside ActionManager
allocationManager = new AllocationManager(
Expand Down
15 changes: 6 additions & 9 deletions packages/indexer-common/src/indexer-management/monitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ import {
Subgraph,
SubgraphDeployment,
SubgraphVersion,
NetworkAliases,
CAIPIds,
NetworkEpochBlock,
EpochSubgraph,
BlockPointer,
buildEpochBlock,
aliasInverse,
alias,
} from '@graphprotocol/indexer-common'
import {
Address,
Expand All @@ -36,6 +36,7 @@ import { providers, utils, Wallet } from 'ethers'
// The new read only Network class
export class NetworkMonitor {
constructor(
public networkAlias: string,
private contracts: NetworkContracts,
private indexer: Address,
private logger: Logger,
Expand All @@ -45,10 +46,6 @@ export class NetworkMonitor {
private epochSubgraph?: EpochSubgraph,
) {}

protocolChain() {
return `eip155:${this.ethereum.network.chainId}`
}

async currentEpoch(): Promise<number> {
return (await this.contracts.epochManager.currentEpoch()).toNumber()
}
Expand Down Expand Up @@ -567,7 +564,7 @@ export class NetworkMonitor {
).toNumber()
const startBlockHash = (await this.ethereum.getBlock(startBlockNumber)).hash
return {
network: aliasInverse(network),
network: alias(network),
epochNumber,
startBlockNumber,
startBlockHash,
Expand All @@ -576,7 +573,7 @@ export class NetworkMonitor {

async latestValidEpoch(network: string): Promise<NetworkEpochBlock> {
if (!this.epochSubgraph) {
if (network == this.protocolChain()) {
if (network == this.networkAlias) {
return await this.epochManagerCurrentStartBlock(network)
}
throw indexerError(
Expand Down Expand Up @@ -651,7 +648,7 @@ export class NetworkMonitor {
throw `Failed to match allocation with an indexing status or chain`
}
const networkID = indexingStatuses[0].chains[0].network
const epoch = await this.latestValidEpoch(NetworkAliases[networkID])
const epoch = await this.latestValidEpoch(CAIPIds[networkID])
const epochStartBlock = {
number: epoch.startBlockNumber,
hash: epoch.startBlockHash,
Expand Down
2 changes: 1 addition & 1 deletion packages/indexer-common/src/indexing-status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ export class IndexingStatusResolver {
throw indexerError(IndexerErrorCode.IE070)
}

this.logger.trace('Block hash generated', {
this.logger.trace('Resolved block hash', {
network,
blockNumber,
blockHash: result.data.blockHashFromNumber,
Expand Down

0 comments on commit f01a133

Please sign in to comment.