Skip to content

Commit 797fb8c

Browse files
committed
feat: track thawing delegation tokens
Signed-off-by: Tomás Migone <[email protected]>
1 parent 81b4a25 commit 797fb8c

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

schema.graphql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,8 @@ type Indexer @entity(immutable: false) {
815815
delegators: [DelegatedStake!]! @derivedFrom(field: "indexer")
816816
"CURRENT tokens delegated to the indexer"
817817
delegatedTokens: BigInt!
818+
"Tokens delegated that are thawing from the provision"
819+
delegatedThawingTokens: BigInt!
818820
"Ratio between the amount of the indexers own stake over the total usable stake."
819821
ownStakeRatio: BigDecimal!
820822
"Ratio between the amount of delegated stake over the total usable stake."
@@ -998,6 +1000,8 @@ type Provision @entity(immutable: false) {
9981000
# Delegation
9991001
"Tokens delegated to the provision"
10001002
delegatedTokens: BigInt!
1003+
"Tokens delegated that are thawing from the provision"
1004+
delegatedThawingTokens: BigInt!
10011005
"Total shares of the delegator pool"
10021006
delegatorShares: BigInt!
10031007
"Exchange rate of tokens received for each share"

src/mappings/helpers/helpers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ export function createOrLoadIndexer(indexerAddress: Bytes, timestamp: BigInt ):
163163
indexer.availableStake = BigInt.fromI32(0)
164164

165165
indexer.delegatedTokens = BigInt.fromI32(0)
166+
indexer.delegatedThawingTokens = BigInt.fromI32(0)
166167
indexer.ownStakeRatio = BigDecimal.fromString('0')
167168
indexer.delegatedStakeRatio = BigDecimal.fromString('0')
168169
indexer.delegatorShares = BigInt.fromI32(0)
@@ -244,6 +245,7 @@ export function createOrLoadProvision(indexerAddress: Bytes, verifierAddress: By
244245
provision.indexerQueryFees = BigInt.fromI32(0)
245246
provision.delegatorQueryFees = BigInt.fromI32(0)
246247
provision.delegatedTokens = BigInt.fromI32(0)
248+
provision.delegatedThawingTokens = BigInt.fromI32(0)
247249
provision.delegatorShares = BigInt.fromI32(0)
248250
provision.delegationExchangeRate = BigInt.fromI32(0).toBigDecimal()
249251
provision.thawingUntil = BigInt.fromI32(0)

src/mappings/horizonStaking.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,6 @@ export function handleTokensUndelegated(event: TokensUndelegated): void {
466466

467467
let beforeUpdateDelegationExchangeRate = provision.delegationExchangeRate
468468

469-
provision.delegatedTokens = provision.delegatedTokens.minus(event.params.tokens)
470469
provision.delegatorShares = provision.delegatorShares.minus(event.params.shares)
471470
if (provision.delegatorShares != BigInt.fromI32(0)) {
472471
provision = updateDelegationExchangeRateForProvision(provision as Provision)
@@ -477,7 +476,6 @@ export function handleTokensUndelegated(event: TokensUndelegated): void {
477476
// update indexer
478477
let indexerID = event.params.serviceProvider.toHexString()
479478
let indexer = Indexer.load(indexerID)!
480-
indexer.delegatedTokens = indexer.delegatedTokens.minus(event.params.tokens)
481479
indexer.delegatorShares = indexer.delegatorShares.minus(event.params.shares)
482480
if (indexer.delegatorShares != BigInt.fromI32(0)) {
483481
indexer = updateDelegationExchangeRate(indexer as Indexer)
@@ -534,8 +532,15 @@ export function handleTokensUndelegated(event: TokensUndelegated): void {
534532
export function handleDelegatedTokensWithdrawn(event: DelegatedTokensWithdrawn): void {
535533
let provision = createOrLoadProvision(event.params.serviceProvider, event.params.verifier, event.block.timestamp)
536534
// might want to track locked/thawing tokens in provision too
535+
provision.delegatedTokens = provision.delegatedTokens.minus(event.params.tokens)
537536
provision.save()
538537

538+
let indexerID = event.params.serviceProvider.toHexString()
539+
let indexer = Indexer.load(indexerID)!
540+
541+
indexer.delegatedTokens = indexer.delegatedTokens.minus(event.params.tokens)
542+
indexer.save()
543+
539544
// update delegated stake
540545
let delegatorID = event.params.delegator.toHexString()
541546
let id = joinID([delegatorID, provision.id])

0 commit comments

Comments
 (0)