Skip to content

Commit 0cd6bfa

Browse files
committed
fix: couple delegation fixes and additions
Signed-off-by: Tomás Migone <[email protected]>
1 parent 04529ed commit 0cd6bfa

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

schema.graphql

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ type DataService @entity {
249249
totalTokensThawing: BigInt!
250250
"Total GRT currently in allocations for this DataService"
251251
totalTokensAllocated: BigInt!
252+
"Total GRT currently delegated to this DataService"
253+
totalTokensDelegated: BigInt!
252254

253255
"Minimum provision tokens for this DataService"
254256
minimumProvisionTokens: BigInt!
@@ -999,9 +1001,16 @@ type Provision @entity {
9991001
rewardsDestination: Bytes
10001002
}
10011003

1004+
enum ThawRequestType {
1005+
Provision
1006+
Delegation
1007+
}
1008+
10021009
type ThawRequest @entity {
10031010
id: ID!
10041011

1012+
type: ThawRequestType!
1013+
10051014
indexer: Indexer!
10061015

10071016
dataService: DataService!

src/mappings/helpers/helpers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ export function createOrLoadDataService(verifierAddress: Bytes): DataService {
271271
service.maximumVerifierCut = BigInt.fromI32(0)
272272
service.minimumThawingPeriod = BigInt.fromI32(0)
273273
service.maximumThawingPeriod = BigInt.fromI32(0)
274+
service.totalTokensDelegated = BigInt.fromI32(0)
274275
service.save()
275276
}
276277

src/mappings/horizonStaking.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,13 @@ export function handleThawRequestCreated(event: ThawRequestCreated): void {
262262
request.thawingUntil = event.params.thawingUntil
263263
request.fulfilled = false
264264
request.fulfilledAsValid = false
265+
if (event.params.requestType == 0) {
266+
request.type = "Provision"
267+
} else if (event.params.requestType == 1) {
268+
request.type = "Delegation"
269+
} else {
270+
throw new Error("Invalid thaw request type")
271+
}
265272
request.save()
266273
}
267274

@@ -274,23 +281,29 @@ export function handleThawRequestFulfilled(event: ThawRequestFulfilled): void {
274281
}
275282

276283
export function handleTokensToDelegationPoolAdded(event: TokensToDelegationPoolAdded): void {
277-
let graphNetwork = createOrLoadGraphNetwork(event.block.number, event.address)
278-
let indexer = Indexer.load(event.params.serviceProvider.toHexString())!
279284
let provision = createOrLoadProvision(event.params.serviceProvider, event.params.verifier, event.block.timestamp)
280285
provision.delegatedTokens = provision.delegatedTokens.plus(event.params.tokens)
281286
if (provision.delegatorShares != BigInt.fromI32(0)) {
282287
provision = updateDelegationExchangeRateForProvision(provision as Provision)
283288
}
289+
provision = updateAdvancedProvisionMetrics(provision as Provision)
284290
provision.save()
285291

292+
let indexer = Indexer.load(event.params.serviceProvider.toHexString())!
286293
indexer.delegatedTokens = indexer.delegatedTokens.plus(event.params.tokens) // this only serves as a general tracker, but the real deal is per provision
287294
if (indexer.delegatorShares != BigInt.fromI32(0)) {
288295
indexer = updateDelegationExchangeRate(indexer as Indexer)
289296
}
297+
indexer = updateAdvancedIndexerMetrics(indexer as Indexer)
290298
indexer.save()
291299

300+
let graphNetwork = createOrLoadGraphNetwork(event.block.number, event.address)
292301
graphNetwork.totalDelegatedTokens = graphNetwork.totalDelegatedTokens.plus(event.params.tokens)
293302
graphNetwork.save()
303+
304+
let dataService = createOrLoadDataService(event.params.verifier)
305+
dataService.totalTokensDelegated = dataService.totalTokensDelegated.plus(event.params.tokens)
306+
dataService.save()
294307
}
295308

296309
// Delegation
@@ -299,7 +312,7 @@ export function handleTokensDelegated(event: TokensDelegated): void {
299312
let zeroShares = event.params.shares.equals(BigInt.fromI32(0))
300313

301314
let dataService = createOrLoadDataService(event.params.verifier)
302-
// Might want to track some stuff here in the future
315+
dataService.totalTokensDelegated = dataService.totalTokensDelegated.plus(event.params.tokens)
303316
dataService.save()
304317

305318
let provision = createOrLoadProvision(event.params.serviceProvider, event.params.verifier, event.block.timestamp)
@@ -315,6 +328,10 @@ export function handleTokensDelegated(event: TokensDelegated): void {
315328
let indexer = createOrLoadIndexer(event.params.serviceProvider, event.block.timestamp)
316329
indexer.delegatedTokens = indexer.delegatedTokens.plus(event.params.tokens)
317330
indexer.delegatorShares = indexer.delegatorShares.plus(event.params.shares)
331+
if (indexer.delegatorShares != BigInt.fromI32(0)) {
332+
indexer = updateDelegationExchangeRate(indexer as Indexer)
333+
}
334+
indexer = updateAdvancedIndexerMetrics(indexer as Indexer)
318335
indexer.save()
319336

320337
// update delegator
@@ -416,6 +433,10 @@ export function handleTokensUndelegated(event: TokensUndelegated): void {
416433
let indexer = Indexer.load(indexerID)!
417434
indexer.delegatedTokens = indexer.delegatedTokens.minus(event.params.tokens)
418435
indexer.delegatorShares = indexer.delegatorShares.minus(event.params.shares)
436+
if (indexer.delegatorShares != BigInt.fromI32(0)) {
437+
indexer = updateDelegationExchangeRate(indexer as Indexer)
438+
}
439+
indexer = updateAdvancedIndexerMetrics(indexer as Indexer)
419440
indexer.save()
420441

421442
// update delegated stake
@@ -459,6 +480,10 @@ export function handleTokensUndelegated(event: TokensUndelegated): void {
459480

460481
graphNetwork.save()
461482
delegator.save()
483+
484+
let dataService = createOrLoadDataService(event.params.verifier)
485+
dataService.totalTokensDelegated = dataService.totalTokensDelegated.minus(event.params.tokens)
486+
dataService.save()
462487
}
463488

464489
export function handleDelegatedTokensWithdrawn(event: DelegatedTokensWithdrawn): void {

0 commit comments

Comments
 (0)