From 6436178c93fd7fe0902d69f37bde01d205f62050 Mon Sep 17 00:00:00 2001 From: Rick Staa Date: Fri, 21 Nov 2025 16:55:13 +0100 Subject: [PATCH] feat: add USD valuation to reward events Add USD valuation to RewardEvent using existing price helper --- schema.graphql | 2 ++ src/mappings/bondingManager.ts | 16 ++++++++-------- utils/helpers.ts | 6 +++++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/schema.graphql b/schema.graphql index aa25ed2..49df868 100755 --- a/schema.graphql +++ b/schema.graphql @@ -507,6 +507,8 @@ type RewardEvent implements Event @entity { round: Round! "Amount of inflationary token rewards claimed" rewardTokens: BigDecimal! + "Amount of inflationary token rewards claimed in USD" + rewardTokensUSD: BigDecimal! "Reference to the delegate that claimed its inflationary token reward" delegate: Transcoder! } diff --git a/src/mappings/bondingManager.ts b/src/mappings/bondingManager.ts index fa94260..835a906 100755 --- a/src/mappings/bondingManager.ts +++ b/src/mappings/bondingManager.ts @@ -8,6 +8,7 @@ import { createOrLoadTranscoder, EMPTY_ADDRESS, getBlockNum, + getLptPriceUsd, makeEventId, makePoolId, makeUnbondingLockId, @@ -486,17 +487,15 @@ export function reward(event: Reward): void { let poolId = makePoolId(event.params.transcoder.toHex(), round.id); let pool = Pool.load(poolId); let protocol = createOrLoadProtocol(); + let rewardTokens = convertToDecimal(event.params.amount); + let rewardTokensUSD = rewardTokens.times(getLptPriceUsd()); - delegate.delegatedAmount = delegate.delegatedAmount.plus( - convertToDecimal(event.params.amount) - ); + delegate.delegatedAmount = delegate.delegatedAmount.plus(rewardTokens); - transcoder.totalStake = transcoder.totalStake.plus( - convertToDecimal(event.params.amount) - ); + transcoder.totalStake = transcoder.totalStake.plus(rewardTokens); transcoder.lastRewardRound = round.id; - pool!.rewardTokens = convertToDecimal(event.params.amount); + pool!.rewardTokens = rewardTokens; pool!.feeShare = transcoder.feeShare; pool!.rewardCut = transcoder.rewardCut; @@ -513,7 +512,8 @@ export function reward(event: Reward): void { rewardEvent.transaction = event.transaction.hash.toHex(); rewardEvent.timestamp = event.block.timestamp.toI32(); rewardEvent.round = round.id; - rewardEvent.rewardTokens = convertToDecimal(event.params.amount); + rewardEvent.rewardTokens = rewardTokens; + rewardEvent.rewardTokensUSD = rewardTokensUSD; rewardEvent.delegate = event.params.transcoder.toHex(); rewardEvent.save(); } diff --git a/utils/helpers.ts b/utils/helpers.ts index 84c30d5..d1603ef 100644 --- a/utils/helpers.ts +++ b/utils/helpers.ts @@ -390,13 +390,17 @@ export function safeDiv(amount0: BigDecimal, amount1: BigDecimal): BigDecimal { } export function getEthPriceUsd(): BigDecimal { - return getPriceForPair(getUniswapV3DaiEthPoolAddress()); + return getPriceForPair(getUniswapV3DaiEthPoolAddress()) } export function getLptPriceEth(): BigDecimal { return getPriceForPair(getUniswapV3LptEthPoolAddress()); } +export function getLptPriceUsd(): BigDecimal { + return getLptPriceEth().times(getEthPriceUsd()); +} + export function getPriceForPair(address: string): BigDecimal { let pricePair = ZERO_BD;