@@ -17,7 +17,10 @@ const CONFIG = {
17
17
USD0 : '0x35f1C5cB7Fb977E669fD244C567Da99d8a3a6850' ,
18
18
CHAIN : 'Arbitrum' ,
19
19
} ,
20
+ USUSDSPP_VAULT : '0x67ec31a47a4126A66C7bb2fE017308cf5832A4Db' ,
21
+ USUSDSPP_VAULT_SYMBOL : 'usUSDS++' ,
20
22
USUAL_TOKEN : '0xC4441c2BE5d8fA8126822B9929CA0b81Ea0DE38E' ,
23
+ SUSDS_TOKEN : '0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD' ,
21
24
USUALX_TOKEN : '0x06B964d96f5dCF7Eae9d7C559B09EDCe244d4B8E' ,
22
25
USUALX_LOCKUP : '0x85B6F9BDdb10c6B320d07416a250F984f0F0E9ED' ,
23
26
USUALX_LOCKUP_SYMBOL : 'lUSUALx (12 months)' ,
@@ -175,6 +178,64 @@ async function getUsualXAPY(chain, usualXPrice) {
175
178
} ;
176
179
}
177
180
181
+ async function getUsUSDSAPY ( chain ) {
182
+ const { output } = await sdk . api . abi . call ( {
183
+ target : CONFIG . USUSDSPP_VAULT ,
184
+ chain : chain . toLowerCase ( ) ,
185
+ abi : abi . find ( ( abi ) => abi . name === 'totalAssets' ) ,
186
+ } ) ;
187
+ const totalAssets = output / CONFIG . SCALAR ;
188
+
189
+ const blacklistedBalances = await sdk . api . abi
190
+ . multiCall ( {
191
+ abi : 'erc20:balanceOf' ,
192
+ calls : CONFIG . USUALX_BALANCES_BLACKLIST . map ( ( address ) => ( {
193
+ target : CONFIG . USUSDSPP_VAULT ,
194
+ params : [ address ] ,
195
+ } ) ) ,
196
+ chain : chain . toLowerCase ( ) ,
197
+ permitFailure : true ,
198
+ } )
199
+ . then ( ( call ) =>
200
+ call . output . map ( ( e ) => {
201
+ return e . output / CONFIG . SCALAR ;
202
+ } )
203
+ ) ;
204
+
205
+ const rawUsUSDSppTVL = await getTokenSupply ( chain , CONFIG . USUSDSPP_VAULT ) ;
206
+
207
+ const usualXTVL =
208
+ rawUsUSDSppTVL - ( blacklistedBalances ?. reduce ( ( a , b ) => a + b , 0 ) ?? 0 ) ;
209
+
210
+ //sUSDS++ vault data
211
+ const susdsBalance = await getTokenBalance (
212
+ 'Ethereum' ,
213
+ CONFIG . SUSDS_TOKEN ,
214
+ CONFIG . USUSDSPP_VAULT
215
+ ) ;
216
+ const susdsPrice = await getTokenPrice ( 'Ethereum' , CONFIG . SUSDS_TOKEN ) ;
217
+ const usUSDSppMarketCap = susdsBalance * susdsPrice ;
218
+
219
+ const baseRewards = await getRewardData (
220
+ CONFIG . USUSDSPP_VAULT_SYMBOL ,
221
+ CONFIG . USD0PP_SYMBOL
222
+ ) ;
223
+ const baseUsUSDSApy = utils . aprToApy ( baseRewards . apr , CONFIG . WEEKS_PER_YEAR ) ;
224
+ const usualRewards = await getRewardData (
225
+ CONFIG . USUSDSPP_VAULT_SYMBOL ,
226
+ CONFIG . USUAL_SYMBOL
227
+ ) ;
228
+ const usUSDSRewardApy = utils . aprToApy (
229
+ usualRewards . apr ,
230
+ CONFIG . WEEKS_PER_YEAR
231
+ ) ;
232
+ return {
233
+ baseUsUSDSApy,
234
+ usUSDSRewardApy,
235
+ usUSDSppMarketCap,
236
+ } ;
237
+ }
238
+
178
239
async function getRewardData ( pool , reward ) {
179
240
const { data } = await axios . get ( `${ CONFIG . URLS . REWARD_APR_RATE } ` ) ;
180
241
const apr = data [ pool ] [ reward ] ;
@@ -218,7 +279,8 @@ const apy = async () => {
218
279
usualXLockupMarketCap,
219
280
usualXUnlockedMarketCap,
220
281
} = await getUsualXAPY ( 'Ethereum' , usualxPrice ) ;
221
-
282
+ const { baseUsUSDSApy, usUSDSRewardApy, usUSDSppMarketCap } =
283
+ await getUsUSDSAPY ( 'Ethereum' ) ;
222
284
return [
223
285
createPoolData (
224
286
CONFIG . ETHEREUM . CHAIN ,
@@ -273,6 +335,19 @@ const apy = async () => {
273
335
poolMeta : 'USUALx Lockup' ,
274
336
url : 'https://app.usual.money/swap?from=USUALx&to=lUSUALx' ,
275
337
} ,
338
+ {
339
+ pool : CONFIG . USUSDSPP_VAULT ,
340
+ chain : 'Ethereum' ,
341
+ project : 'usual' ,
342
+ symbol : 'usUSDS++' ,
343
+ tvlUsd : usUSDSppMarketCap ,
344
+ apyBase : baseUsUSDSApy , // Weekly compounding for USUSDS++ APY in USD0++
345
+ apyReward : usUSDSRewardApy , // Reward in Usual APY for USUSDS++
346
+ rewardTokens : [ CONFIG . USUAL_TOKEN ] ,
347
+ underlyingTokens : [ CONFIG . ETHEREUM . USD0PP ] ,
348
+ poolMeta : 'usUSDS++ vault' ,
349
+ url : 'https://app.usual.money/vault/susds' ,
350
+ } ,
276
351
] ;
277
352
} ;
278
353
0 commit comments