diff --git a/schema.graphql b/schema.graphql index 57b5596c..99935413 100644 --- a/schema.graphql +++ b/schema.graphql @@ -751,6 +751,10 @@ type Indexer @entity(immutable: false) { lockedTokens: BigInt! "The block when the Indexers tokens unlock" tokensLockedUntil: Int! + "[Legacy only] CURRENT tokens locked" + legacyLockedTokens: BigInt! + "[Legacy only] The block when the Indexers tokens unlock" + legacyTokensLockedUntil: Int! "Active allocations of stake for this Indexer" allocations: [Allocation!]! @derivedFrom(field: "activeForIndexer") "All allocations of stake for this Indexer (i.e. closed and active)" @@ -1228,6 +1232,10 @@ type DelegatedStake @entity(immutable: false) { lockedTokens: BigInt! "Epoch the locked tokens get unlocked" lockedUntil: Int! + "[Legacy only] CURRENT tokens locked" + legacyLockedTokens: BigInt! + "[Legacy only] Epoch the locked tokens get unlocked" + legacyLockedUntil: Int! "Shares owned in the delegator pool. Used to calculate total amount delegated" shareAmount: BigInt! "The rate this delegator paid for their shares (calculated using average cost basis). Used for rewards calculations" diff --git a/src/mappings/helpers/helpers.ts b/src/mappings/helpers/helpers.ts index 64412e9e..e75c0c74 100644 --- a/src/mappings/helpers/helpers.ts +++ b/src/mappings/helpers/helpers.ts @@ -147,8 +147,10 @@ export function createOrLoadIndexer(indexerAddress: Bytes, timestamp: BigInt ): indexer.thawingTokens = BigInt.fromI32(0) indexer.allocatedTokens = BigInt.fromI32(0) indexer.lockedTokens = BigInt.fromI32(0) + indexer.legacyLockedTokens = BigInt.fromI32(0) indexer.unstakedTokens = BigInt.fromI32(0) indexer.tokensLockedUntil = 0 + indexer.legacyTokensLockedUntil = 0 indexer.queryFeesCollected = BigInt.fromI32(0) indexer.queryFeeRebates = BigInt.fromI32(0) indexer.rewardsEarned = BigInt.fromI32(0) @@ -374,6 +376,8 @@ export function createOrLoadDelegatedStake( delegatedStake.unstakedTokens = BigInt.fromI32(0) delegatedStake.lockedTokens = BigInt.fromI32(0) delegatedStake.lockedUntil = 0 + delegatedStake.legacyLockedTokens = BigInt.fromI32(0) + delegatedStake.legacyLockedUntil = 0 delegatedStake.shareAmount = BigInt.fromI32(0) delegatedStake.personalExchangeRate = BigDecimal.fromString('1') delegatedStake.realizedRewards = BigDecimal.fromString('0') diff --git a/src/mappings/l1staking.ts b/src/mappings/l1staking.ts index 00190b23..5ff7716a 100644 --- a/src/mappings/l1staking.ts +++ b/src/mappings/l1staking.ts @@ -110,5 +110,6 @@ export function handleStakeDelegatedUnlockedDueToL2Transfer( ]) let delegation = DelegatedStake.load(delegationID)! delegation.lockedUntil = graphNetwork.currentEpoch + delegation.legacyLockedUntil = graphNetwork.currentEpoch delegation.save() } diff --git a/src/mappings/staking.ts b/src/mappings/staking.ts index 8e612f7d..14b6e280 100644 --- a/src/mappings/staking.ts +++ b/src/mappings/staking.ts @@ -108,6 +108,8 @@ export function handleStakeLocked(event: StakeLocked): void { let indexer = Indexer.load(id)! indexer.lockedTokens = event.params.tokens indexer.tokensLockedUntil = event.params.until.toI32() + indexer.legacyLockedTokens = event.params.tokens + indexer.legacyTokensLockedUntil = event.params.until.toI32() indexer = updateLegacyAdvancedIndexerMetrics(indexer as Indexer) indexer = calculateCapacities(indexer as Indexer) indexer.save() @@ -135,6 +137,8 @@ export function handleStakeWithdrawn(event: StakeWithdrawn): void { indexer.stakedTokens = indexer.stakedTokens.minus(event.params.tokens) indexer.lockedTokens = indexer.lockedTokens.minus(event.params.tokens) indexer.tokensLockedUntil = 0 // always set to 0 when withdrawn + indexer.legacyLockedTokens = indexer.legacyLockedTokens.minus(event.params.tokens) + indexer.legacyTokensLockedUntil = 0 // always set to 0 when withdrawn indexer = updateLegacyAdvancedIndexerMetrics(indexer as Indexer) indexer = calculateCapacities(indexer as Indexer) indexer.save() @@ -164,6 +168,7 @@ export function handleStakeSlashed(event: StakeSlashed): void { let staking = Staking.bind(event.address) let indexerStored = staking.stakes(event.params.indexer) indexer.lockedTokens = indexerStored.tokensLocked + indexer.legacyLockedTokens = indexerStored.tokensLocked indexer = updateLegacyAdvancedIndexerMetrics(indexer as Indexer) indexer = calculateCapacities(indexer as Indexer) indexer.save() @@ -268,7 +273,9 @@ export function handleStakeDelegatedLocked(event: StakeDelegatedLocked): void { delegatedStake.unstakedTokens = delegatedStake.unstakedTokens.plus(event.params.tokens) delegatedStake.shareAmount = delegatedStake.shareAmount.minus(event.params.shares) delegatedStake.lockedTokens = delegatedStake.lockedTokens.plus(event.params.tokens) + delegatedStake.legacyLockedTokens = delegatedStake.legacyLockedTokens.plus(event.params.tokens) delegatedStake.lockedUntil = event.params.until.toI32() // until always updates and overwrites the past lockedUntil time + delegatedStake.legacyLockedUntil = event.params.until.toI32() // until always updates and overwrites the past lockedUntil time delegatedStake.lastUndelegatedAt = event.block.timestamp.toI32() let currentBalance = event.params.shares.toBigDecimal().times(beforeUpdateDelegationExchangeRate) @@ -306,7 +313,9 @@ export function handleStakeDelegatedWithdrawn(event: StakeDelegatedWithdrawn): v let id = joinID([delegatorID, indexerID]) let delegatedStake = DelegatedStake.load(id)! delegatedStake.lockedTokens = BigInt.fromI32(0) + delegatedStake.legacyLockedTokens = BigInt.fromI32(0) delegatedStake.lockedUntil = 0 + delegatedStake.legacyLockedUntil = 0 delegatedStake.save() }