Skip to content

Commit cfe601c

Browse files
committed
feat: add rateNative prop in otoken and arm daily stats
1 parent 01f1922 commit cfe601c

File tree

9 files changed

+708
-690
lines changed

9 files changed

+708
-690
lines changed

schema.graphql

Lines changed: 634 additions & 633 deletions
Large diffs are not rendered by default.

scripts/generate-validations.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ const oTokenDailyStats = (prefix: string, address: string) => {
177177
fees
178178
rateETH
179179
rateUSD
180+
rateNative
180181
yield
181182
marketCapUSD
182183
accountsOverThreshold
@@ -281,6 +282,7 @@ const arm = (prefix: string, armAddress: string) => {
281282
totalAssetsCap
282283
totalSupply
283284
yield
285+
rateNative
284286
}
285287
`),
286288
]

src/model/generated/armDailyStat.model.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,7 @@ export class ArmDailyStat {
8888

8989
@FloatColumn_({nullable: false})
9090
rateETH!: number
91+
92+
@FloatColumn_({nullable: false})
93+
rateNative!: number
9194
}

src/model/generated/index.ts

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,18 @@
1-
export * from "./utilCache.model"
2-
export * from "./exchangeRate.model"
3-
export * from "./nativeBalance.model"
4-
export * from "./legacyStaker.model"
5-
export * from "./curvePool.model"
6-
export * from "./curvePoolBalance.model"
7-
export * from "./curvePoolRate.model"
1+
export * from "./ognDailyStat.model"
2+
export * from "./coinGeckoCoinData.model"
83
export * from "./protocolDailyStat.model"
94
export * from "./protocolDailyStatDetail.model"
105
export * from "./beaconDepositEvent.model"
116
export * from "./beaconDepositPubkey.model"
127
export * from "./accountingConsensusRewards.model"
138
export * from "./executionRewardsCollected.model"
14-
export * from "./coinGeckoCoinData.model"
15-
export * from "./ognBuyback.model"
169
export * from "./walletLabels.model"
17-
export * from "./ognDailyStat.model"
18-
export * from "./ogv.model"
19-
export * from "./ogvAddress.model"
20-
export * from "./ogvLockupTxLog.model"
21-
export * from "./_ogvLockupEventType"
22-
export * from "./ogvLockup.model"
23-
export * from "./ogvProposalTxLog.model"
24-
export * from "./_ogvProposalEvent"
25-
export * from "./ogvProposal.model"
26-
export * from "./_ogvProposalState"
27-
export * from "./ogvProposalVote.model"
28-
export * from "./_ogvVoteType"
29-
export * from "./ogvDailyStat.model"
30-
export * from "./transactionDetails.model"
31-
export * from "./pool.model"
32-
export * from "./poolBooster.model"
33-
export * from "./poolBoosterBribeExecuted.model"
10+
export * from "./curvePool.model"
11+
export * from "./curvePoolBalance.model"
12+
export * from "./curvePoolRate.model"
13+
export * from "./ognBuyback.model"
14+
export * from "./nativeBalance.model"
15+
export * from "./legacyStaker.model"
3416
export * from "./oToken.model"
3517
export * from "./oTokenRawData.model"
3618
export * from "./woToken.model"
@@ -51,43 +33,24 @@ export * from "./oTokenHarvesterYieldSent.model"
5133
export * from "./oTokenRewardTokenCollected.model"
5234
export * from "./oTokenWithdrawalRequest.model"
5335
export * from "./oTokenYieldForwarded.model"
36+
export * from "./poolBooster.model"
37+
export * from "./poolBoosterBribeExecuted.model"
38+
export * from "./transactionDetails.model"
39+
export * from "./strategyBalance.model"
40+
export * from "./strategyYield.model"
41+
export * from "./strategyDailyYield.model"
5442
export * from "./arm.model"
5543
export * from "./armState.model"
5644
export * from "./armDailyStat.model"
5745
export * from "./armWithdrawalRequest.model"
5846
export * from "./armSwap.model"
5947
export * from "./traderateChanged.model"
60-
export * from "./erc20.model"
61-
export * from "./erc20Holder.model"
62-
export * from "./erc20State.model"
63-
export * from "./erc20StateByDay.model"
64-
export * from "./erc20Balance.model"
65-
export * from "./erc20Transfer.model"
66-
export * from "./processingStatus.model"
67-
export * from "./aeroClGaugeNotifyReward.model"
68-
export * from "./aeroGaugeNotifyReward.model"
69-
export * from "./aeroPoolCreated.model"
70-
export * from "./aeroClPoolCreated.model"
71-
export * from "./aeroVoterGaugeCreated.model"
72-
export * from "./aeroPoolState.model"
73-
export * from "./aeroClPoolState.model"
74-
export * from "./aeroClPoolTick.model"
75-
export * from "./aeroPoolEpochState.model"
76-
export * from "./_tokenAmount"
77-
export * from "./aeroLp.model"
78-
export * from "./aeroLpPosition.model"
7948
export * from "./governanceProposalEvent.model"
8049
export * from "./_governanceProposalEventType"
8150
export * from "./governanceProposal.model"
8251
export * from "./_governanceProposalState"
8352
export * from "./governanceProposalVote.model"
8453
export * from "./_governanceVoteType"
85-
export * from "./bridgeTransfer.model"
86-
export * from "./bridgeTransferState.model"
87-
export * from "./frrsRewardCollected.model"
88-
export * from "./frrsRewardsPerSecondChanged.model"
89-
export * from "./frrsRewardsTargetChange.model"
90-
export * from "./frrsStrategistUpdated.model"
9154
export * from "./esToken.model"
9255
export * from "./esAccount.model"
9356
export * from "./esYield.model"
@@ -101,9 +64,46 @@ export * from "./esPenalty.model"
10164
export * from "./esReward.model"
10265
export * from "./esStake.model"
10366
export * from "./esUnstake.model"
104-
export * from "./strategyBalance.model"
105-
export * from "./strategyYield.model"
106-
export * from "./strategyDailyYield.model"
67+
export * from "./bridgeTransfer.model"
68+
export * from "./bridgeTransferState.model"
69+
export * from "./aeroPoolState.model"
70+
export * from "./aeroClPoolState.model"
71+
export * from "./aeroClPoolTick.model"
72+
export * from "./aeroPoolEpochState.model"
73+
export * from "./_tokenAmount"
74+
export * from "./aeroLp.model"
75+
export * from "./aeroLpPosition.model"
76+
export * from "./aeroClGaugeNotifyReward.model"
77+
export * from "./aeroGaugeNotifyReward.model"
78+
export * from "./aeroPoolCreated.model"
79+
export * from "./aeroClPoolCreated.model"
80+
export * from "./aeroVoterGaugeCreated.model"
81+
export * from "./frrsRewardCollected.model"
82+
export * from "./frrsRewardsPerSecondChanged.model"
83+
export * from "./frrsRewardsTargetChange.model"
84+
export * from "./frrsStrategistUpdated.model"
85+
export * from "./processingStatus.model"
86+
export * from "./erc20.model"
87+
export * from "./erc20Holder.model"
88+
export * from "./erc20State.model"
89+
export * from "./erc20StateByDay.model"
90+
export * from "./erc20Balance.model"
91+
export * from "./erc20Transfer.model"
92+
export * from "./pool.model"
10793
export * from "./sfcWithdrawal.model"
10894
export * from "./morphoMarketState.model"
10995
export * from "./eventWoethPriceUpdated.model"
96+
export * from "./utilCache.model"
97+
export * from "./exchangeRate.model"
98+
export * from "./ogv.model"
99+
export * from "./ogvAddress.model"
100+
export * from "./ogvLockupTxLog.model"
101+
export * from "./_ogvLockupEventType"
102+
export * from "./ogvLockup.model"
103+
export * from "./ogvProposalTxLog.model"
104+
export * from "./_ogvProposalEvent"
105+
export * from "./ogvProposal.model"
106+
export * from "./_ogvProposalState"
107+
export * from "./ogvProposalVote.model"
108+
export * from "./_ogvVoteType"
109+
export * from "./ogvDailyStat.model"

src/model/generated/oTokenDailyStat.model.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ export class OTokenDailyStat {
5050
@BigIntColumn_({nullable: false})
5151
rateETH!: bigint
5252

53+
@BigIntColumn_({nullable: false})
54+
rateNative!: bigint
55+
5356
@BigIntColumn_({nullable: false})
5457
totalSupply!: bigint
5558

src/templates/origin-arm/origin-arm.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ type ArmDailyStat @entity {
7272
cumulativeFees: BigInt!
7373
rateUSD: Float!
7474
rateETH: Float!
75+
rateNative: Float!
7576
}
7677

7778
type ArmWithdrawalRequest @entity {

src/templates/origin-arm/origin-arm.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,11 +351,12 @@ export const createOriginARMProcessors = ({
351351
for (const block of ctx.blocks) {
352352
if (tracker(ctx, block) || (block.header.height > from && ctx.latestBlockOfDay(block))) {
353353
// ArmState
354-
const [state, yesterdayState, rateUSD, rateETH] = await Promise.all([
354+
const [state, yesterdayState, rateUSD, rateETH, rateNative] = await Promise.all([
355355
getCurrentState(block),
356356
getYesterdayState(block),
357357
ensureExchangeRate(ctx, block, underlyingToken, 'USD'),
358358
ensureExchangeRate(ctx, block, underlyingToken, 'ETH'),
359+
ensureExchangeRate(ctx, block, underlyingToken, ctx.chain.nativeCurrency.symbol as Currency),
359360
])
360361

361362
// ArmDailyStat
@@ -402,6 +403,7 @@ export const createOriginARMProcessors = ({
402403
cumulativeYield: state.totalYield,
403404
rateUSD: +formatUnits(rateUSD?.rate ?? 0n, rateUSD?.decimals ?? 18),
404405
rateETH: +formatUnits(rateETH?.rate ?? 0n, rateETH?.decimals ?? 18),
406+
rateNative: +formatUnits(rateNative?.rate ?? 0n, rateNative?.decimals ?? 18),
405407
})
406408
dailyStatsMap.set(currentDayId, armDailyStatEntity)
407409
}

src/templates/otoken/otoken-daily-stats.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import * as wotokenAbi from '@abi/woeth'
1010
import { OToken, OTokenAPY, OTokenDailyStat, OTokenRebase } from '@model'
1111
import { Block, Context } from '@originprotocol/squid-utils'
1212
import { ensureExchangeRate } from '@shared/post-processors/exchange-rates'
13-
import { CurrencyAddress } from '@shared/post-processors/exchange-rates/mainnetCurrencies'
13+
import { Currency, CurrencyAddress } from '@shared/post-processors/exchange-rates/mainnetCurrencies'
1414

1515
/**
1616
* For sake of efficiency, we only want to update the daily stats if the block is within 20 seconds of the hourly crossover or if there has been recent activity on the OToken.
@@ -79,7 +79,7 @@ export const processOTokenDailyStats = async (
7979
: null
8080

8181
const asyncStartTime = Date.now()
82-
const [otokenObject, apy, rebases, rateETH, rateUSD, dripperWETH, amoSupply, wrappedSupply, wrappedRate] =
82+
const [otokenObject, apy, rebases, rateETH, rateUSD, dripperWETH, amoSupply, wrappedSupply, wrappedRate, rateNative] =
8383
await Promise.all([
8484
(async () => {
8585
let otokenObject = findLast(params.otokens, (o) => o.timestamp <= blockDate)
@@ -127,6 +127,9 @@ export const processOTokenDailyStats = async (
127127
params.getAmoSupply(ctx, block.header.height),
128128
wotokenContract ? wotokenContract.totalSupply() : 0n,
129129
wotokenContract ? wotokenContract.previewRedeem(10n ** 18n) : 0n,
130+
ensureExchangeRate(ctx, block, params.otokenAddress as CurrencyAddress, ctx.chain.nativeCurrency.symbol as Currency).then(
131+
(a) => a?.rate ?? 0n,
132+
),
130133
])
131134
if (process.env.DEBUG_PERF === 'true') {
132135
ctx.log.info(`getOTokenDailyStat async calls took ${Date.now() - asyncStartTime}ms`)
@@ -175,6 +178,7 @@ export const processOTokenDailyStats = async (
175178

176179
entity.rateETH = rateETH
177180
entity.rateUSD = rateUSD
181+
entity.rateNative = rateNative
178182
entity.amoSupply = amoSupply
179183

180184
entity.dripperWETH = dripperWETH
@@ -217,6 +221,7 @@ export const getOTokenDailyStat = async (
217221

218222
rateUSD: 0n,
219223
rateETH: 0n,
224+
rateNative: 0n,
220225

221226
totalSupply: 0n,
222227
rebasingSupply: 0n,

src/templates/otoken/otoken.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ type OTokenDailyStat @entity {
177177

178178
rateUSD: BigInt!
179179
rateETH: BigInt!
180+
rateNative: BigInt!
180181

181182
totalSupply: BigInt!
182183
rebasingSupply: BigInt!

0 commit comments

Comments
 (0)