Skip to content

Commit 474e6db

Browse files
committed
add ususds++ yield
1 parent 127db20 commit 474e6db

File tree

1 file changed

+76
-1
lines changed

1 file changed

+76
-1
lines changed

src/adaptors/usual/index.js

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ const CONFIG = {
1717
USD0: '0x35f1C5cB7Fb977E669fD244C567Da99d8a3a6850',
1818
CHAIN: 'Arbitrum',
1919
},
20+
USUSDSPP_VAULT: '0x67ec31a47a4126A66C7bb2fE017308cf5832A4Db',
21+
USUSDSPP_VAULT_SYMBOL: 'usUSDS++',
2022
USUAL_TOKEN: '0xC4441c2BE5d8fA8126822B9929CA0b81Ea0DE38E',
23+
SUSDS_TOKEN: '0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD',
2124
USUALX_TOKEN: '0x06B964d96f5dCF7Eae9d7C559B09EDCe244d4B8E',
2225
USUALX_LOCKUP: '0x85B6F9BDdb10c6B320d07416a250F984f0F0E9ED',
2326
USUALX_LOCKUP_SYMBOL: 'lUSUALx (12 months)',
@@ -175,6 +178,64 @@ async function getUsualXAPY(chain, usualXPrice) {
175178
};
176179
}
177180

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+
178239
async function getRewardData(pool, reward) {
179240
const { data } = await axios.get(`${CONFIG.URLS.REWARD_APR_RATE}`);
180241
const apr = data[pool][reward];
@@ -218,7 +279,8 @@ const apy = async () => {
218279
usualXLockupMarketCap,
219280
usualXUnlockedMarketCap,
220281
} = await getUsualXAPY('Ethereum', usualxPrice);
221-
282+
const { baseUsUSDSApy, usUSDSRewardApy, usUSDSppMarketCap } =
283+
await getUsUSDSAPY('Ethereum');
222284
return [
223285
createPoolData(
224286
CONFIG.ETHEREUM.CHAIN,
@@ -273,6 +335,19 @@ const apy = async () => {
273335
poolMeta: 'USUALx Lockup',
274336
url: 'https://app.usual.money/swap?from=USUALx&to=lUSUALx',
275337
},
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+
},
276351
];
277352
};
278353

0 commit comments

Comments
 (0)