Skip to content

Commit 8c8973f

Browse files
committed
feat: upd lendle adapter with Vaults Data
1 parent c6a75f0 commit 8c8973f

File tree

1 file changed

+66
-1
lines changed

1 file changed

+66
-1
lines changed

src/adaptors/lendle/index.js

+66-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,21 @@ const abiLendingPool = require('../aave-v2/abiLendingPool');
44
const abiProtocolDataProvider = require('../aave-v2/abiProtocolDataProvider');
55

66
const utils = require('../utils');
7+
const { rewardTokens } = require('../sommelier/config');
8+
9+
const vaultsApi = 'https://lendle-vaults-api-184110952121.europe-west4.run.app';
10+
const vaultsApy = `${vaultsApi}/apy/breakdown`;
11+
const vaultsTvl = `${vaultsApi}/tvl`;
12+
const vaultsData = `${vaultsApi}/vaults`;
13+
14+
const vaultsCampaignApi = 'https://api.merkl.xyz/v4/opportunities?name=lendle';
715

816
const chains = {
917
mantle: {
1018
LendingPool: '0xCFa5aE7c2CE8Fadc6426C1ff872cA45378Fb7cF3',
1119
ProtocolDataProvider: '0x552b9e4bae485C4B7F540777d7D25614CdB84773',
1220
url: 'mantle',
21+
chainId: 5000,
1322
},
1423
};
1524

@@ -127,7 +136,63 @@ const getApy = async () => {
127136
});
128137
})
129138
);
130-
return pools.flat().filter((p) => utils.keepFinite(p));
139+
140+
const vaults = await Promise.all(
141+
Object.keys(chains).map(async (chain) => {
142+
const chainId = chains[chain].chainId;
143+
144+
const _vaultsData = (await axios.get(vaultsData)).data;
145+
const vaultsList = _vaultsData.map((vault) => vault.earnContractAddress);
146+
147+
const _vaultsTvl = (await axios.get(vaultsTvl)).data;
148+
const _vaultsApy = (await axios.get(vaultsApy)).data;
149+
150+
const _vaultsCampaignApi = (await axios.get(vaultsCampaignApi)).data;
151+
152+
return vaultsList.map((t, i) => {
153+
const config = _vaultsData[i];
154+
if (config.status !== 'active') return null;
155+
156+
const tvlUsd = _vaultsTvl[chainId][config.id];
157+
158+
let id = config.id;
159+
if (config.id === 'lendle-vault-mnt') {
160+
id = 'lendle-vault-wmnt';
161+
}
162+
const apyBase = _vaultsApy[id].totalApy;
163+
164+
const aprData = _vaultsCampaignApi.find(
165+
(item) =>
166+
item.status === 'LIVE' &&
167+
item.identifier.toLowerCase() === t.toLowerCase() &&
168+
item.rewardsRecord.breakdowns[0].token.address !== '0x0000000000000000000000000000000000000000'
169+
);
170+
const apyReward = aprData ? aprData.apr : 0;
171+
172+
const url = `https://app.lendle.xyz/vault/${
173+
config.id
174+
}`;
175+
176+
return {
177+
pool: `${t}-${chain}`.toLowerCase(),
178+
symbol: config.earnedToken,
179+
project: 'lendle',
180+
chain,
181+
tvlUsd,
182+
apyBase,
183+
apyReward,
184+
underlyingTokens: [config.tokenAddress],
185+
rewardTokens: aprData && apyReward
186+
? [aprData.rewardsRecord.breakdowns[0].token.address]
187+
: ['0x0000000000000000000000000000000000000000'],
188+
url,
189+
poolMeta: 'Vault',
190+
};
191+
});
192+
})
193+
);
194+
195+
return [...pools.flat(), ...vaults.flat()].filter((p) => utils.keepFinite(p));
131196
};
132197

133198
module.exports = {

0 commit comments

Comments
 (0)