11import { BigInt } from '@graphprotocol/graph-ts'
2- import { addresses } from '../../config/addresses.template '
3- import { HorizonStakeDeposited , HorizonStakeLocked , HorizonStakeWithdrawn } from '../types/HorizonStaking/HorizonStaking'
2+ import { addresses } from '../../config/addresses'
3+ import { HorizonStakeDeposited , HorizonStakeLocked , HorizonStakeWithdrawn } from '../types/HorizonStaking/HorizonStaking'
44import { Indexer } from '../types/schema'
55import { calculateCapacities , createOrLoadEpoch , createOrLoadGraphNetwork , createOrLoadIndexer , updateAdvancedIndexerMetrics } from './helpers/helpers'
66
77
88export function handleHorizonStakeDeposited ( event : HorizonStakeDeposited ) : void {
9- // To Do
109 let graphNetwork = createOrLoadGraphNetwork ( event . block . number , event . address )
1110 // update indexer
1211 let indexer = createOrLoadIndexer ( event . params . serviceProvider , event . block . timestamp )
@@ -15,64 +14,61 @@ export function handleHorizonStakeDeposited(event: HorizonStakeDeposited): void
1514 indexer = updateAdvancedIndexerMetrics ( indexer as Indexer )
1615 indexer = calculateCapacities ( indexer as Indexer )
1716 indexer . save ( )
18-
17+
1918 // Update graph network
2019 graphNetwork . totalTokensStaked = graphNetwork . totalTokensStaked . plus ( event . params . tokens )
21- if ( previousStake == BigInt . fromI32 ( 0 ) ) {
22- graphNetwork . stakedIndexersCount = graphNetwork . stakedIndexersCount + 1
20+ if ( previousStake . isZero ( ) ) {
21+ graphNetwork . stakedIndexersCount = graphNetwork . stakedIndexersCount + 1
2322 }
2423 graphNetwork . save ( )
25-
24+
2625 // Update epoch
2726 let epoch = createOrLoadEpoch (
28- addresses . isL1 ? event . block . number : graphNetwork . currentL1BlockNumber ! ,
27+ addresses . isL1 ? event . block . number : graphNetwork . currentL1BlockNumber ! ,
2928 )
3029 epoch . stakeDeposited = epoch . stakeDeposited . plus ( event . params . tokens )
3130 epoch . save ( )
3231}
3332
3433export function handleHorizonStakeLocked ( event : HorizonStakeLocked ) : void {
35- // To Do
36- let graphNetwork = createOrLoadGraphNetwork ( event . block . number , event . address )
37- // update indexer
38- let id = event . params . serviceProvider . toHexString ( )
39- let indexer = Indexer . load ( id ) !
40- let oldLockedTokens = indexer . lockedTokens
41- indexer . lockedTokens = event . params . tokens
42- indexer . tokensLockedUntil = event . params . until . toI32 ( )
43- indexer = updateAdvancedIndexerMetrics ( indexer as Indexer )
44- indexer = calculateCapacities ( indexer as Indexer )
45- indexer . save ( )
34+ let graphNetwork = createOrLoadGraphNetwork ( event . block . number , event . address )
35+ // update indexer
36+ let id = event . params . serviceProvider . toHexString ( )
37+ let indexer = Indexer . load ( id ) !
38+ indexer . lockedTokens = event . params . tokens
39+ indexer . tokensLockedUntil = event . params . until . toI32 ( )
40+ indexer = updateAdvancedIndexerMetrics ( indexer as Indexer )
41+ indexer = calculateCapacities ( indexer as Indexer )
42+ indexer . save ( )
4643
47- // update graph network
48- // the tokens from the event replace the previously locked tokens
49- // from this indexer
50- graphNetwork . totalUnstakedTokensLocked = graphNetwork . totalUnstakedTokensLocked . plus (
51- event . params . tokens ,
52- ) . minus ( oldLockedTokens )
53- if ( indexer . stakedTokens == indexer . lockedTokens ) {
54- graphNetwork . stakedIndexersCount = graphNetwork . stakedIndexersCount - 1
55- }
56- graphNetwork . save ( )
44+ // update graph network
45+ graphNetwork . totalUnstakedTokensLocked = graphNetwork . totalUnstakedTokensLocked . plus (
46+ event . params . tokens ,
47+ )
48+ graphNetwork . save ( )
5749}
5850
5951export function handleHorizonStakeWithdrawn ( event : HorizonStakeWithdrawn ) : void {
60- // To Do
61- let graphNetwork = createOrLoadGraphNetwork ( event . block . number , event . address )
62- // update indexer
63- let id = event . params . serviceProvider . toHexString ( )
64- let indexer = Indexer . load ( id ) !
65- indexer . stakedTokens = indexer . stakedTokens . minus ( event . params . tokens )
66- indexer . lockedTokens = BigInt . fromI32 ( 0 ) // set to 0 to prevent issues when Stage 2 comes
67- indexer . tokensLockedUntil = 0 // always set to 0 when withdrawn
68- indexer = updateAdvancedIndexerMetrics ( indexer as Indexer )
69- indexer = calculateCapacities ( indexer as Indexer )
70- indexer . save ( )
52+ let graphNetwork = createOrLoadGraphNetwork ( event . block . number , event . address )
53+ // update indexer
54+ let id = event . params . serviceProvider . toHexString ( )
55+ let indexer = Indexer . load ( id ) !
56+ indexer . stakedTokens = indexer . stakedTokens . minus ( event . params . tokens )
57+ indexer . lockedTokens = BigInt . fromI32 ( 0 ) // set to 0 to prevent issues when Stage 2 comes
58+ indexer . tokensLockedUntil = 0 // always set to 0 when withdrawn
59+ indexer = updateAdvancedIndexerMetrics ( indexer as Indexer )
60+ indexer = calculateCapacities ( indexer as Indexer )
61+ indexer . save ( )
7162
72- // Update graph network
73- graphNetwork . totalTokensStaked = graphNetwork . totalTokensStaked . minus ( event . params . tokens )
74- graphNetwork . totalUnstakedTokensLocked = graphNetwork . totalUnstakedTokensLocked . minus (
75- event . params . tokens ,
76- )
77- graphNetwork . save ( )
63+ // Update graph network
64+ graphNetwork . totalTokensStaked = graphNetwork . totalTokensStaked . minus ( event . params . tokens )
65+ graphNetwork . totalUnstakedTokensLocked = graphNetwork . totalUnstakedTokensLocked . minus (
66+ event . params . tokens ,
67+ )
68+ // We might want to introduce the notion of "provisioned indexer count" or "active indexer count"
69+ // to each data service since that's what this particular count wanted to convey.
70+ if ( indexer . stakedTokens . isZero ( ) ) {
71+ graphNetwork . stakedIndexersCount = graphNetwork . stakedIndexersCount - 1
72+ }
73+ graphNetwork . save ( )
7874}
0 commit comments