Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ type CompoundRewardsResponse = Array<{
export class CompoundRewardFetcher implements IRewardFetcher {
private readonly COMPOUND_API_URL =
'https://v3-api.compound.finance/account/0x0000000000000000000000000000000000000000/rewards'
private readonly MAX_APR_THRESHOLD = 1 // 100%
private readonly logger: Logger

constructor(logger: Logger) {
Expand Down Expand Up @@ -50,7 +51,7 @@ export class CompoundRewardFetcher implements IRewardFetcher {
const apr = Number(aprStr)
if (!Number.isFinite(apr) || apr <= 0) continue

const rate = (apr * 100).toString()
const rate = (apr > this.MAX_APR_THRESHOLD ? 0 : apr * 100).toString()
const { address, symbol, decimals } = entry.reward_asset

const rewardRate: RewardRate = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ interface FluidFetcherOptions {

export class FluidRewardFetcher implements IRewardFetcher {
private readonly logger: Logger
private readonly MAX_APR_THRESHOLD = 1 // 100%
private readonly blacklist: Set<string>

constructor(logger: Logger, options?: FluidFetcherOptions) {
Expand Down Expand Up @@ -72,16 +73,17 @@ export class FluidRewardFetcher implements IRewardFetcher {
for (const reward of filtered) {
const rateNum = Number(reward.rate)
if (!Number.isFinite(rateNum) || rateNum <= 0) continue
// API provides e.g. 263 -> 2.63%
const ratePercent = rateNum / 100
// API provides e.g. 263 -> 0.0263
const apr = rateNum / 10000
const rate = apr > this.MAX_APR_THRESHOLD ? 0 : apr * 100

const addr = reward.token.address
const symbol = reward.token.symbol
const decimals = reward.token.decimals

mapped.push({
rewardToken: addr,
rate: ratePercent.toString(),
rate: rate.toString(),
index: index++,
token: {
address: addr,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ interface MorphoVaultReward {

export class MorphoRewardFetcher implements IRewardFetcher {
private readonly MORPHO_API_URL = 'https://blue-api.morpho.org/graphql'
private readonly MAX_APR_THRESHOLD = 1 // 100%
private readonly logger: Logger

constructor(logger: Logger) {
Expand Down Expand Up @@ -123,17 +124,22 @@ export class MorphoRewardFetcher implements IRewardFetcher {
0,
)

const rewards = vaultData.state.rewards.map((reward, index) => ({
rewardToken: reward.asset.address,
rate: ((reward.supplyApr ?? 0) * 100).toString(),
index,
token: {
address: reward.asset.address,
symbol: reward.asset.symbol,
decimals: reward.asset.decimals,
precision: (10n ** BigInt(reward.asset.decimals)).toString(),
},
}))
const rewards = vaultData.state.rewards.map((reward, index) => {
const apr = reward.supplyApr ?? 0
const rate = apr > this.MAX_APR_THRESHOLD ? 0 : apr * 100

return {
rewardToken: reward.asset.address,
rate: rate.toString(),
index,
token: {
address: reward.asset.address,
symbol: reward.asset.symbol,
decimals: reward.asset.decimals,
precision: (10n ** BigInt(reward.asset.decimals)).toString(),
},
}
})

if (totalAssetsAllocated === 0) {
return rewards
Expand Down Expand Up @@ -169,7 +175,7 @@ export class MorphoRewardFetcher implements IRewardFetcher {
if (totalWeightedApy > 0) {
additionalRewards.push({
rewardToken: tokenInfo.address,
rate: (totalWeightedApy > 10 ? 0 : totalWeightedApy * 100).toString(),
rate: (totalWeightedApy > this.MAX_APR_THRESHOLD ? 0 : totalWeightedApy * 100).toString(),
index: nextIndex++,
token: {
address: tokenInfo.address,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ interface MorphoVaultV2Reward {

export class MorphoV2RewardFetcher implements IRewardFetcher {
private readonly MORPHO_API_URL = 'https://blue-api.morpho.org/graphql'
private readonly MAX_APR_THRESHOLD = 1 // 100%
private readonly logger: Logger

constructor(logger: Logger) {
Expand Down Expand Up @@ -86,17 +87,22 @@ export class MorphoV2RewardFetcher implements IRewardFetcher {
private processMorphoVaultV2(vaultData: MorphoVaultV2Reward): RewardRate[] {
return (vaultData.rewards ?? [])
.filter((r) => r.supplyApr != null && Number.isFinite(r.supplyApr) && r.supplyApr > 0)
.map((reward, index) => ({
rewardToken: reward.asset.address,
rate: ((reward.supplyApr ?? 0) * 100).toString(),
index,
token: {
address: reward.asset.address,
symbol: reward.asset.symbol,
decimals: reward.asset.decimals,
precision: (10n ** BigInt(reward.asset.decimals)).toString(),
},
}))
.map((reward, index) => {
const apr = reward.supplyApr ?? 0
const rate = apr > this.MAX_APR_THRESHOLD ? 0 : apr * 100

return {
rewardToken: reward.asset.address,
rate: rate.toString(),
index,
token: {
address: reward.asset.address,
symbol: reward.asset.symbol,
decimals: reward.asset.decimals,
precision: (10n ** BigInt(reward.asset.decimals)).toString(),
},
}
})
}

private async fetchWithRetry(url: string, options?: RequestInit): Promise<Response> {
Expand Down
Loading