Skip to content

Commit 59b6a5b

Browse files
committed
feat: add isLegacy boolean to indexer entity
Signed-off-by: Tomás Migone <[email protected]>
1 parent 41bcce9 commit 59b6a5b

File tree

5 files changed

+23
-7
lines changed

5 files changed

+23
-7
lines changed

schema.graphql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,9 @@ type Indexer @entity {
698698
"Default display name is the current default name. Used for filtered queries"
699699
defaultDisplayName: String
700700

701+
"Whether the indexer is a legacy indexer. This is true for all indexers registered before the Horizon upgrade"
702+
isLegacy: Boolean!
703+
701704
# Staking data
702705
"CURRENT tokens staked in the protocol. Decreases on withdraw, not on lock"
703706
stakedTokens: BigInt!

src/mappings/helpers/helpers.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,17 @@ export function createOrLoadSubgraphDeployment(
129129
return deployment as SubgraphDeployment
130130
}
131131

132-
export function createOrLoadIndexer(indexerAddress: Bytes, timestamp: BigInt): Indexer {
132+
export function createOrLoadIndexer(indexerAddress: Bytes, timestamp: BigInt ): Indexer {
133133
let id = indexerAddress.toHexString()
134134
let indexer = Indexer.load(id)
135135
if (indexer == null) {
136136
indexer = new Indexer(id)
137137
indexer.createdAt = timestamp.toI32()
138138
indexer.account = id
139139

140+
// By default we assume indexers are not legacy. Legacy codepaths should flip this to true
141+
indexer.isLegacy = false
142+
140143
indexer.stakedTokens = BigInt.fromI32(0)
141144
indexer.transferredToL2 = false
142145
indexer.stakedTokensTransferredToL2 = BigInt.fromI32(0)
@@ -197,6 +200,13 @@ export function createOrLoadIndexer(indexerAddress: Bytes, timestamp: BigInt): I
197200
return indexer as Indexer
198201
}
199202

203+
export function createOrLoadLegacyIndexer(indexerAddress: Bytes, timestamp: BigInt): Indexer {
204+
let indexer = createOrLoadIndexer(indexerAddress, timestamp)
205+
indexer.isLegacy = true
206+
indexer.save()
207+
return indexer
208+
}
209+
200210
export function createOrLoadProvision(indexerAddress: Bytes, verifierAddress: Bytes, timestamp: BigInt): Provision {
201211
let id = joinID([indexerAddress.toHexString(), verifierAddress.toHexString()])
202212
let provision = Provision.load(id)

src/mappings/serviceRegistry.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ServiceRegistered, ServiceUnregistered } from '../types/ServiceRegistry/ServiceRegistry'
22
import { Indexer } from '../types/schema'
33

4-
import { createOrLoadIndexer, createOrLoadGraphAccount } from './helpers/helpers'
4+
import { createOrLoadLegacyIndexer, createOrLoadGraphAccount } from './helpers/helpers'
55

66
/**
77
* @dev handleServiceRegistered
@@ -11,7 +11,7 @@ export function handleServiceRegistered(event: ServiceRegistered): void {
1111
// Creates Graph Account, if needed
1212
createOrLoadGraphAccount(event.params.indexer, event.block.timestamp)
1313

14-
let indexer = createOrLoadIndexer(event.params.indexer, event.block.timestamp)
14+
let indexer = createOrLoadLegacyIndexer(event.params.indexer, event.block.timestamp)
1515
indexer.url = event.params.url
1616
indexer.geoHash = event.params.geohash
1717
indexer.save()

src/mappings/staking.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333

3434
import {
3535
createOrLoadSubgraphDeployment,
36-
createOrLoadIndexer,
36+
createOrLoadLegacyIndexer,
3737
createOrLoadPool,
3838
createOrLoadEpoch,
3939
joinID,
@@ -53,7 +53,7 @@ import { addresses } from '../../config/addresses'
5353

5454
export function handleDelegationParametersUpdated(event: DelegationParametersUpdated): void {
5555
let graphNetwork = createOrLoadGraphNetwork(event.block.number, event.address)
56-
let indexer = createOrLoadIndexer(event.params.indexer, event.block.timestamp)
56+
let indexer = createOrLoadLegacyIndexer(event.params.indexer, event.block.timestamp)
5757
indexer.indexingRewardCut = event.params.indexingRewardCut.toI32()
5858
indexer.queryFeeCut = event.params.queryFeeCut.toI32()
5959
indexer.delegatorParameterCooldown = event.params.cooldownBlocks.toI32()
@@ -73,7 +73,7 @@ export function handleDelegationParametersUpdated(event: DelegationParametersUpd
7373
export function handleStakeDeposited(event: StakeDeposited): void {
7474
let graphNetwork = createOrLoadGraphNetwork(event.block.number, event.address)
7575
// update indexer
76-
let indexer = createOrLoadIndexer(event.params.indexer, event.block.timestamp)
76+
let indexer = createOrLoadLegacyIndexer(event.params.indexer, event.block.timestamp)
7777
let previousStake = indexer.stakedTokens
7878
indexer.stakedTokens = indexer.stakedTokens.plus(event.params.tokens)
7979
indexer = updateAdvancedIndexerMetrics(indexer as Indexer)
@@ -177,7 +177,7 @@ export function handleStakeDelegated(event: StakeDelegated): void {
177177
let zeroShares = event.params.shares.equals(BigInt.fromI32(0))
178178

179179
// update indexer
180-
let indexer = createOrLoadIndexer(event.params.indexer, event.block.timestamp)
180+
let indexer = createOrLoadLegacyIndexer(event.params.indexer, event.block.timestamp)
181181
indexer.delegatedTokens = indexer.delegatedTokens.plus(event.params.tokens)
182182
indexer.delegatorShares = indexer.delegatorShares.plus(event.params.shares)
183183

src/mappings/subgraphService.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ export function handleServiceProviderRegistered(event: ServiceProviderRegistered
2626
indexer.url = url
2727
indexer.geoHash = geoHash
2828
indexer.rewardsDestination = rewardsDestination
29+
30+
// Change legacy status in case the indexer was created before the Horizon upgrade
31+
indexer.isLegacy = false
2932
indexer.save()
3033
} else {
3134
log.warning("ServiceProviderRegistered failed to decode: {}", [event.params.data.toHexString()])

0 commit comments

Comments
 (0)