Skip to content

Commit 3cc767b

Browse files
committed
feat: added basic delegation pool management
1 parent 0641632 commit 3cc767b

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

src/mappings/helpers/helpers.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,18 @@ export function updateAdvancedIndexerMetrics(indexer: Indexer): Indexer {
909909
return indexer as Indexer
910910
}
911911

912+
export function updateAdvancedIndexerMetricsHorizon(indexer: Indexer, provision: Provision): Indexer {
913+
indexer.ownStakeRatio = calculateOwnStakeRatio(indexer as Indexer)
914+
indexer.delegatedStakeRatio = calculateDelegatedStakeRatio(indexer as Indexer)
915+
indexer.indexingRewardEffectiveCut = provision.indexingRewardsCut.toBigDecimal()
916+
indexer.queryFeeEffectiveCut = provision.queryFeeCut.toBigDecimal()
917+
indexer.indexerRewardsOwnGenerationRatio = calculateIndexerRewardOwnGenerationRatio(
918+
indexer as Indexer,
919+
)
920+
indexer.overDelegationDilution = calculateOverdelegationDilution(indexer as Indexer)
921+
return indexer as Indexer
922+
}
923+
912924
export function updateDelegationExchangeRate(indexer: Indexer): Indexer {
913925
indexer.delegationExchangeRate = indexer.delegatedTokens
914926
.toBigDecimal()

src/mappings/horizonStaking.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { BigInt, log } from '@graphprotocol/graph-ts'
1+
import { BigInt } from '@graphprotocol/graph-ts'
22
import { addresses } from '../../config/addresses'
3-
import { DelegationFeeCutSet, HorizonStakeDeposited, HorizonStakeLocked, HorizonStakeWithdrawn, OperatorSet, TokensDeprovisioned } from '../types/HorizonStaking/HorizonStaking'
4-
import { Indexer, GraphNetwork, ThawRequest } from '../types/schema'
5-
import { calculateCapacities, createOrLoadDataService, createOrLoadEpoch, createOrLoadGraphAccount, createOrLoadGraphNetwork, createOrLoadIndexer, createOrLoadOperator, createOrLoadProvision, updateAdvancedIndexerMetrics } from './helpers/helpers'
3+
import { DelegationFeeCutSet, HorizonStakeDeposited, HorizonStakeLocked, HorizonStakeWithdrawn, OperatorSet, TokensDeprovisioned, TokensToDelegationPoolAdded } from '../types/HorizonStaking/HorizonStaking'
4+
import { Indexer, ThawRequest } from '../types/schema'
5+
import { calculateCapacities, createOrLoadDataService, createOrLoadEpoch, createOrLoadGraphAccount, createOrLoadGraphNetwork, createOrLoadIndexer, createOrLoadOperator, createOrLoadProvision, updateAdvancedIndexerMetrics, updateAdvancedIndexerMetricsHorizon, updateDelegationExchangeRate } from './helpers/helpers'
66
import {
77
ProvisionCreated,
88
ProvisionIncreased,
@@ -12,8 +12,6 @@ import {
1212
ProvisionThawed,
1313
ThawRequestCreated,
1414
ThawRequestFulfilled,
15-
ThawRequestsFulfilled,
16-
ThawingPeriodCleared
1715
} from '../types/HorizonStaking/HorizonStaking'
1816

1917
export function handleHorizonStakeDeposited(event: HorizonStakeDeposited): void {
@@ -22,7 +20,7 @@ export function handleHorizonStakeDeposited(event: HorizonStakeDeposited): void
2220
let indexer = createOrLoadIndexer(event.params.serviceProvider, event.block.timestamp)
2321
let previousStake = indexer.stakedTokens
2422
indexer.stakedTokens = indexer.stakedTokens.plus(event.params.tokens)
25-
indexer = updateAdvancedIndexerMetrics(indexer as Indexer)
23+
indexer = updateAdvancedIndexerMetrics(indexer as Indexer) // Can't rely on provision here, will need to figure out a way
2624
indexer = calculateCapacities(indexer as Indexer)
2725
indexer.save()
2826

@@ -48,7 +46,7 @@ export function handleHorizonStakeLocked(event: HorizonStakeLocked): void {
4846
let indexer = Indexer.load(id)!
4947
indexer.lockedTokens = event.params.tokens
5048
indexer.tokensLockedUntil = event.params.until.toI32()
51-
indexer = updateAdvancedIndexerMetrics(indexer as Indexer)
49+
indexer = updateAdvancedIndexerMetrics(indexer as Indexer) // Can't rely on provision here, will need to figure out a way
5250
indexer = calculateCapacities(indexer as Indexer)
5351
indexer.save()
5452

@@ -67,7 +65,7 @@ export function handleHorizonStakeWithdrawn(event: HorizonStakeWithdrawn): void
6765
indexer.stakedTokens = indexer.stakedTokens.minus(event.params.tokens)
6866
indexer.lockedTokens = BigInt.fromI32(0) // set to 0 to prevent issues when Stage 2 comes
6967
indexer.tokensLockedUntil = 0 // always set to 0 when withdrawn
70-
indexer = updateAdvancedIndexerMetrics(indexer as Indexer)
68+
indexer = updateAdvancedIndexerMetrics(indexer as Indexer) // Can't rely on provision here, will need to figure out a way
7169
indexer = calculateCapacities(indexer as Indexer)
7270
indexer.save()
7371

@@ -270,4 +268,14 @@ export function handleThawRequestFulfilled(event: ThawRequestFulfilled): void {
270268
request.tokens = event.params.tokens
271269
request.valid = event.params.valid
272270
request.save()
271+
}
272+
273+
export function handleTokensToDelegationPoolAdded(event: TokensToDelegationPoolAdded): void {
274+
let indexer = Indexer.load(event.params.serviceProvider.toHexString())!
275+
let provision = createOrLoadProvision(event.params.serviceProvider, event.params.verifier, event.block.timestamp)
276+
indexer.delegatedTokens = indexer.delegatedTokens.plus(event.params.tokens)
277+
indexer = updateAdvancedIndexerMetricsHorizon(indexer, provision)
278+
indexer = updateDelegationExchangeRate(indexer)
279+
indexer = calculateCapacities(indexer)
280+
indexer.save()
273281
}

subgraph.template.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,8 @@ dataSources:
427427
handler: handleOperatorSet
428428
- event: DelegationFeeCutSet(indexed address,indexed address,indexed uint8,uint256)
429429
handler: handleDelegationFeeCutSet
430+
- event: TokensToDelegationPoolAdded(indexed address,indexed address,uint256)
431+
handler: handleTokensToDelegationPoolAdded
430432
- kind: ethereum/contract
431433
name: Curation
432434
network: {{network}}

0 commit comments

Comments
 (0)