diff --git a/config/arbitrum.ts b/config/arbitrum.ts index dd761608..3989031f 100644 --- a/config/arbitrum.ts +++ b/config/arbitrum.ts @@ -130,6 +130,12 @@ export default { }, }, }, + defillama: [ + { + defillamaPoolId: '46f3828a-cbf6-419e-8399-a83b905bf556', + tokenAddress: '0x5a7a183b6b44dc4ec2e3d2ef43f98c5152b1d76d', + }, + ], reaper: { onchainSource: { averageAPRAcrossLastNHarvests: 5, diff --git a/config/mainnet.ts b/config/mainnet.ts index bc9e378e..7265b8a0 100644 --- a/config/mainnet.ts +++ b/config/mainnet.ts @@ -200,6 +200,16 @@ export default { }, }, }, + defillama: [ + { + defillamaPoolId: '5a9c2073-2190-4002-9654-8c245d1e8534', + tokenAddress: '0x6dc3ce9c57b20131347fdc9089d740daf6eb34c5', + }, + { + defillamaPoolId: '46f3828a-cbf6-419e-8399-a83b905bf556', + tokenAddress: '0xf073bac22dab7faf4a3dd6c6189a70d54110525c', + }, + ], euler: { subgraphUrl: 'https://api.thegraph.com/subgraphs/name/euler-xyz/euler-mainnet', tokens: { diff --git a/config/optimism.ts b/config/optimism.ts index 924bf0f3..89cf6be0 100644 --- a/config/optimism.ts +++ b/config/optimism.ts @@ -139,6 +139,12 @@ export default { // and search for the vault address in the link: https://api.beefy.finance/vaults }, }, + defillama: [ + { + defillamaPoolId: '46f3828a-cbf6-419e-8399-a83b905bf556', + tokenAddress: '0x5a7a183b6b44dc4ec2e3d2ef43f98c5152b1d76d', + }, + ], reaper: { subgraphSource: { subgraphUrl: 'https://api.thegraph.com/subgraphs/name/byte-masons/multi-strategy-vaults-optimism', diff --git a/modules/network/apr-config-types.ts b/modules/network/apr-config-types.ts index 8d19a647..e6821b59 100644 --- a/modules/network/apr-config-types.ts +++ b/modules/network/apr-config-types.ts @@ -30,6 +30,10 @@ export interface YbAprConfig { }; etherfi?: string; sveth?: boolean; + defillama?: { + defillamaPoolId: string; + tokenAddress: string; + }[]; defaultHandlers?: DefaultHandlerAprConfig; fixedAprHandler?: FixedAprConfig; } diff --git a/modules/pool/lib/apr-data-sources/yb-apr-handlers/index.ts b/modules/pool/lib/apr-data-sources/yb-apr-handlers/index.ts index fd5d16ed..48a6c599 100644 --- a/modules/pool/lib/apr-data-sources/yb-apr-handlers/index.ts +++ b/modules/pool/lib/apr-data-sources/yb-apr-handlers/index.ts @@ -26,6 +26,7 @@ const sourceToHandler = { etherfi: sources.Etherfi, sveth: sources.svEthAprHandler, dforce: sources.DForce, + defillama: sources.Defillama, }; export class YbAprHandlers { diff --git a/modules/pool/lib/apr-data-sources/yb-apr-handlers/sources/defillama-apr-handler.ts b/modules/pool/lib/apr-data-sources/yb-apr-handlers/sources/defillama-apr-handler.ts new file mode 100644 index 00000000..e20db33a --- /dev/null +++ b/modules/pool/lib/apr-data-sources/yb-apr-handlers/sources/defillama-apr-handler.ts @@ -0,0 +1,43 @@ +import { AprHandler } from '..'; +import { YbAprConfig } from '../../../../../network/apr-config-types'; + +const query = ` + { + osTokens { + apy + } + } +`; + +const requestQuery = { + query, +}; + +interface Response { + data: { + timestamp: string; + apyBase: number; + }[]; +} + +const baseURL = 'https://yields.llama.fi/chart/'; + +export class Defillama implements AprHandler { + constructor(private config: YbAprConfig['defillama']) {} + + async getAprs() { + const aprs: { token: string; apr: number }[] = []; + + for (const token of this.config!) { + { + const response = await fetch(baseURL + token.defillamaPoolId); + + const data = (await response.json()) as Response; + + const apr = Number(data.data[data.data.length - 1].apyBase) / 100; + aprs.push({ token: token.tokenAddress, apr }); + } + } + return Object.fromEntries(aprs.map(({ token, apr }) => [token, { apr, isIbYield: true }])); + } +} diff --git a/modules/pool/lib/apr-data-sources/yb-apr-handlers/sources/index.ts b/modules/pool/lib/apr-data-sources/yb-apr-handlers/sources/index.ts index 86cc0327..259c4e27 100644 --- a/modules/pool/lib/apr-data-sources/yb-apr-handlers/sources/index.ts +++ b/modules/pool/lib/apr-data-sources/yb-apr-handlers/sources/index.ts @@ -20,3 +20,4 @@ export * from './yieldnest-apr-handler'; export * from './etherfi-apr-handler'; export * from './sv-eth'; export * from './dforce-apr-handler'; +export * from './defillama-apr-handler';