Skip to content

Commit e73f64d

Browse files
authored
Merge pull request #2054 from usual-dao/usUSDC-yield
Us usds yield
2 parents c417454 + 5918681 commit e73f64d

File tree

1 file changed

+87
-26
lines changed

1 file changed

+87
-26
lines changed

src/adaptors/usual/index.js

Lines changed: 87 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@ 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)',
2427
USD0_SYMBOL: 'USD0',
2528
USUAL_SYMBOL: 'USUAL',
29+
USUALX_SYMBOL: 'USUALx',
2630
USD0PP_SYMBOL: 'USD0++',
2731
ETH0_SYMBOL: 'ETH0',
2832
URLS: {
@@ -104,21 +108,6 @@ async function getETH0ChainData(chainConfig) {
104108
}
105109

106110
async function getUsualXAPY(chain, usualXPrice) {
107-
const { output } = await sdk.api.abi.call({
108-
target: CONFIG.USUALX_TOKEN,
109-
chain: chain.toLowerCase(),
110-
abi: abi.find((abi) => abi.name === 'totalAssets'),
111-
});
112-
const totalAssets = output / CONFIG.SCALAR;
113-
const rate =
114-
(
115-
await sdk.api.abi.call({
116-
target: CONFIG.USUALX_TOKEN,
117-
chain: chain.toLowerCase(),
118-
abi: abi.find((abi) => abi.name === 'getYieldRate'),
119-
})
120-
).output / CONFIG.SCALAR;
121-
122111
const blacklistedBalances = await sdk.api.abi
123112
.multiCall({
124113
abi: 'erc20:balanceOf',
@@ -145,13 +134,13 @@ async function getUsualXAPY(chain, usualXPrice) {
145134
const usualXTVL =
146135
rawUsualXTVL - (blacklistedBalances?.reduce((a, b) => a + b, 0) ?? 0);
147136

148-
const usualXApr = (rate * CONFIG.DAYS_PER_YEAR) / totalAssets;
137+
const usualXApr = await getRewardData(
138+
CONFIG.USUALX_SYMBOL,
139+
CONFIG.USUAL_SYMBOL
140+
);
149141

150-
// Applying weekly compounding only to USUALx apyReward
151-
const usualxApyReward = utils.aprToApy(
152-
usualXApr * 100,
153-
CONFIG.WEEKS_PER_YEAR
154-
); // Weekly compounding for apyReward
142+
// Applying daily compounding only to USUALx apyReward
143+
const usualxApyReward = utils.aprToApy(usualXApr.apr, CONFIG.DAYS_PER_YEAR); // Daily compounding for apyReward
155144

156145
const usualxMarketCap = usualXTVL * usualXPrice;
157146
const usualXLockupMarketCap = usualXLockupBalance * usualXPrice;
@@ -175,6 +164,64 @@ async function getUsualXAPY(chain, usualXPrice) {
175164
};
176165
}
177166

167+
async function getUsUSDSAPY(chain) {
168+
const { output } = await sdk.api.abi.call({
169+
target: CONFIG.USUSDSPP_VAULT,
170+
chain: chain.toLowerCase(),
171+
abi: abi.find((abi) => abi.name === 'totalAssets'),
172+
});
173+
const totalAssets = output / CONFIG.SCALAR;
174+
175+
const blacklistedBalances = await sdk.api.abi
176+
.multiCall({
177+
abi: 'erc20:balanceOf',
178+
calls: CONFIG.USUALX_BALANCES_BLACKLIST.map((address) => ({
179+
target: CONFIG.USUSDSPP_VAULT,
180+
params: [address],
181+
})),
182+
chain: chain.toLowerCase(),
183+
permitFailure: true,
184+
})
185+
.then((call) =>
186+
call.output.map((e) => {
187+
return e.output / CONFIG.SCALAR;
188+
})
189+
);
190+
191+
const rawUsUSDSppTVL = await getTokenSupply(chain, CONFIG.USUSDSPP_VAULT);
192+
193+
const usualXTVL =
194+
rawUsUSDSppTVL - (blacklistedBalances?.reduce((a, b) => a + b, 0) ?? 0);
195+
196+
//sUSDS++ vault data
197+
const susdsBalance = await getTokenBalance(
198+
'Ethereum',
199+
CONFIG.SUSDS_TOKEN,
200+
CONFIG.USUSDSPP_VAULT
201+
);
202+
const susdsPrice = await getTokenPrice('Ethereum', CONFIG.SUSDS_TOKEN);
203+
const usUSDSppMarketCap = susdsBalance * susdsPrice;
204+
205+
const baseRewards = await getRewardData(
206+
CONFIG.USUSDSPP_VAULT_SYMBOL,
207+
CONFIG.USD0PP_SYMBOL
208+
);
209+
const baseUsUSDSApy = utils.aprToApy(baseRewards.apr, CONFIG.WEEKS_PER_YEAR);
210+
const usualRewards = await getRewardData(
211+
CONFIG.USUSDSPP_VAULT_SYMBOL,
212+
CONFIG.USUAL_SYMBOL
213+
);
214+
const usUSDSRewardApy = utils.aprToApy(
215+
usualRewards.apr,
216+
CONFIG.DAYS_PER_YEAR
217+
);
218+
return {
219+
baseUsUSDSApy,
220+
usUSDSRewardApy,
221+
usUSDSppMarketCap,
222+
};
223+
}
224+
178225
async function getRewardData(pool, reward) {
179226
const { data } = await axios.get(`${CONFIG.URLS.REWARD_APR_RATE}`);
180227
const apr = data[pool][reward];
@@ -218,7 +265,8 @@ const apy = async () => {
218265
usualXLockupMarketCap,
219266
usualXUnlockedMarketCap,
220267
} = await getUsualXAPY('Ethereum', usualxPrice);
221-
268+
const { baseUsUSDSApy, usUSDSRewardApy, usUSDSppMarketCap } =
269+
await getUsUSDSAPY('Ethereum');
222270
return [
223271
createPoolData(
224272
CONFIG.ETHEREUM.CHAIN,
@@ -253,7 +301,7 @@ const apy = async () => {
253301
project: 'usual',
254302
symbol: 'USUALx',
255303
tvlUsd: usualXUnlockedMarketCap,
256-
apyBase: usualxApyReward, // Weekly compounding for USUALx APY
304+
apyBase: usualxApyReward, // Daily compounding for USUALx APY
257305
apyReward: 0, // No additional reward for USUALx
258306
rewardTokens: [CONFIG.ETHEREUM.USD0],
259307
poolMeta: 'Staked USUAL',
@@ -266,13 +314,26 @@ const apy = async () => {
266314
project: 'usual',
267315
symbol: 'USUALx',
268316
tvlUsd: usualXLockupMarketCap,
269-
apyBase: usualxApyReward, // Weekly compounding for USUALx APY
270-
apyReward: usualxApyRevenueSwitch, // Revenue switch APY for Lockup USUALx
317+
apyBase: usualxApyReward, // Daily compounding for USUALx APY
318+
apyReward: usualxApyRevenueSwitch, // Revenue switch APY for Lockup USUALx Weekly compounding
271319
rewardTokens: [CONFIG.ETHEREUM.USD0],
272320
underlyingTokens: [CONFIG.USUAL_TOKEN],
273-
poolMeta: 'USUALx Lockup',
321+
poolMeta: 'Lockup',
274322
url: 'https://app.usual.money/swap?from=USUALx&to=lUSUALx',
275323
},
324+
{
325+
pool: CONFIG.USUSDSPP_VAULT,
326+
chain: 'Ethereum',
327+
project: 'usual',
328+
symbol: 'usUSDS++',
329+
tvlUsd: usUSDSppMarketCap,
330+
apyBase: baseUsUSDSApy, // Weekly compounding for USUSDS++ APY in USD0++
331+
apyReward: usUSDSRewardApy, // Reward in Usual APY for USUSDS++
332+
rewardTokens: [CONFIG.USUAL_TOKEN],
333+
underlyingTokens: [CONFIG.ETHEREUM.USD0PP],
334+
poolMeta: 'usUSDS++ vault',
335+
url: 'https://app.usual.money/vault/susds',
336+
},
276337
];
277338
};
278339

0 commit comments

Comments
 (0)