@@ -4,12 +4,21 @@ const abiLendingPool = require('../aave-v2/abiLendingPool');
4
4
const abiProtocolDataProvider = require ( '../aave-v2/abiProtocolDataProvider' ) ;
5
5
6
6
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' ;
7
15
8
16
const chains = {
9
17
mantle : {
10
18
LendingPool : '0xCFa5aE7c2CE8Fadc6426C1ff872cA45378Fb7cF3' ,
11
19
ProtocolDataProvider : '0x552b9e4bae485C4B7F540777d7D25614CdB84773' ,
12
20
url : 'mantle' ,
21
+ chainId : 5000 ,
13
22
} ,
14
23
} ;
15
24
@@ -127,7 +136,63 @@ const getApy = async () => {
127
136
} ) ;
128
137
} )
129
138
) ;
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 ) ) ;
131
196
} ;
132
197
133
198
module . exports = {
0 commit comments