From 7168170201b87c4ace5414f0b323c2c8f533425d Mon Sep 17 00:00:00 2001 From: Juan Manuel Rodriguez Defago Date: Tue, 10 Sep 2024 03:00:01 -0300 Subject: [PATCH] fix: potentially problematic edge cases --- src/mappings/curation.ts | 19 ++++++++++++++----- src/mappings/gns.ts | 26 +++++++++++++++----------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/mappings/curation.ts b/src/mappings/curation.ts index 24b962be..b0507257 100644 --- a/src/mappings/curation.ts +++ b/src/mappings/curation.ts @@ -170,9 +170,16 @@ export function handleBurned(event: Burned): void { let gnsID = graphNetwork.gns.toHexString() // Update signal let subgraphDeploymentID = event.params.subgraphDeploymentID.toHexString() - let signalID = joinID([id, subgraphDeploymentID]) - let signal = Signal.load(signalID)! + // Assuming signal is created since it's a burn can't be done, as signals can be transferred and + // we currently can't track transfers. On those edge cases values will be weird here, but + // overall network wide should still make sense + let signal = createOrLoadSignal( + id, + subgraphDeploymentID, + (addresses.isL1 ? event.block.number : graphNetwork.currentL1BlockNumber!).toI32(), + event.block.timestamp.toI32(), + ) let gnsSignalOldAmount = signal.signal.toBigDecimal() let isSignalBecomingInactive = !signal.signal.isZero() && event.params.signal == signal.signal @@ -205,8 +212,10 @@ export function handleBurned(event: Burned): void { gnsSignalNewAmount = gnsSignal != null ? gnsSignal.signal.toBigDecimal() : zeroBD } - // Update curator - let curator = Curator.load(id)! + // Assuming curator is created since it's a burn can't be done, as signals can be transferred and + // we currently can't track transfers, thus this might be the first curation interaction of this + // account + let curator = createOrLoadCurator(event.params.curator, event.block.timestamp) curator.totalUnsignalledTokens = curator.totalUnsignalledTokens.plus(event.params.tokens) curator.totalSignal = curator.totalSignal.minus(event.params.signal.toBigDecimal()) curator.totalSignalAverageCostBasis = curator.totalSignalAverageCostBasis.minus(diffACB) @@ -229,7 +238,7 @@ export function handleBurned(event: Burned): void { curator.save() - // Update subgraph + // Deployment can be safely assumed as existing, since someone had to have signaled in order to burn let deployment = SubgraphDeployment.load(subgraphDeploymentID)! let oldSignalAmount = deployment.signalAmount let oldSignalledTokens = deployment.signalledTokens diff --git a/src/mappings/gns.ts b/src/mappings/gns.ts index b1a1c9c3..d79607aa 100644 --- a/src/mappings/gns.ts +++ b/src/mappings/gns.ts @@ -274,11 +274,13 @@ export function handleSubgraphDeprecated(event: SubgraphDeprecated): void { graphNetwork.activeSubgraphCount = graphNetwork.activeSubgraphCount - 1 graphNetwork.save() - let version = SubgraphVersion.load(subgraph.currentVersion!) - if (version != null) { - let deployment = SubgraphDeployment.load(version.subgraphDeployment) + if (subgraph.currentVersion != null) { + let version = SubgraphVersion.load(subgraph.currentVersion!) + if (version != null) { + let deployment = SubgraphDeployment.load(version.subgraphDeployment) - updateCurrentDeploymentLinks(deployment, null, subgraph as Subgraph, true) + updateCurrentDeploymentLinks(deployment, null, subgraph as Subgraph, true) + } } } @@ -612,7 +614,7 @@ export function handleGRTWithdrawn(event: GRTWithdrawn): void { nameSignal.signalAverageCostBasisPerSignal = BigDecimal.fromString('0') nameSignal.save() - let curator = Curator.load(event.params.nameCurator.toHexString())! + let curator = createOrLoadCurator(event.params.nameCurator, event.block.timestamp) curator.totalWithdrawnTokens = curator.totalWithdrawnTokens.plus(event.params.withdrawnGRT) curator.save() } @@ -701,11 +703,13 @@ export function handleSubgraphDeprecatedV2(event: SubgraphDeprecated1): void { graphNetwork.activeSubgraphCount = graphNetwork.activeSubgraphCount - 1 graphNetwork.save() - let version = SubgraphVersion.load(subgraph.currentVersion!) - if (version != null) { - let deployment = SubgraphDeployment.load(version.subgraphDeployment) + if (subgraph.currentVersion != null) { + let version = SubgraphVersion.load(subgraph.currentVersion!) + if (version != null) { + let deployment = SubgraphDeployment.load(version.subgraphDeployment) - updateCurrentDeploymentLinks(deployment, null, subgraph as Subgraph, true) + updateCurrentDeploymentLinks(deployment, null, subgraph as Subgraph, true) + } } } @@ -990,7 +994,7 @@ export function handleGRTWithdrawnV2(event: GRTWithdrawn1): void { nameSignal.save() - let curator = Curator.load(event.params.curator.toHexString())! + let curator = createOrLoadCurator(event.params.curator, event.block.timestamp) curator.totalWithdrawnTokens = curator.totalWithdrawnTokens.plus(event.params.withdrawnGRT) curator.save() } @@ -1131,7 +1135,7 @@ export function handleSubgraphVersionUpdated(event: SubgraphVersionUpdated): voi // create deployment - named subgraph relationship, and update the old one updateCurrentDeploymentLinks(oldDeployment, deployment, subgraph as Subgraph) subgraphVersion.save() - + let context = new DataSourceContext() context.setString('id', metadataId) SubgraphVersionMetadataTemplate.createWithContext(base58Hash, context)