Skip to content

Commit b674ff8

Browse files
committed
feat(rumpel): add fluid smart vault processing, add more yts, and hbeat strats
1 parent 6cd11a2 commit b674ff8

File tree

1 file changed

+77
-6
lines changed

1 file changed

+77
-6
lines changed

projects/rumpel/index.js

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ const CONTRACTS = {
88
MORPHO_BLUE: "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb",
99
ZIRCUIT_RESTAKING_POOL: "0xF047ab4c75cebf0eB9ed34Ae2c186f3611aEAfa6",
1010
FLUID_POSITION_RESOLVER: "0x3E3dae4F30347782089d398D462546eb5276801C",
11+
FLUID_VAULT_RESOLVER: "0x77648C2FEda8D5f9f21A9FE91db0d102E49d3031",
12+
FLUID_DEX_RESOLVER: "0x71783F64719899319B56BdA4F27E1219d9AF9a3d",
13+
FLUID_DEX_RESERVES_RESOLVER: "0xC93876C0EEd99645DD53937b25433e311881A27C",
1114
// HyperEVM contracts
1215
HYPEREVM_RUMPEL_WALLET_FACTORY: "0xbC89e0B2716079b46A971ce50C208730F73503De",
1316
HYPEREVM_POINT_TOKEN_VAULT: "0xEa333eb11FC6ea62F6f4c2d73Cd9F2d994Ff3587",
@@ -27,6 +30,7 @@ const DEPLOYMENT = {
2730
const TOKENS = {
2831
AGETH: "0xe1B4d34E8754600962Cd944B535180Bd758E6c2e",
2932
SUSDE: ADDRESSES.ethereum.sUSDe,
33+
USDT: ADDRESSES.ethereum.USDT,
3034
USDE: ADDRESSES.ethereum.USDe,
3135
WSTETH: ADDRESSES.ethereum.WSTETH,
3236
WBTC: ADDRESSES.ethereum.WBTC,
@@ -76,6 +80,18 @@ const TOKENS = {
7680
YT_SUSDE_29MAY2025: "0x1de6Ff19FDA7496DdC12f2161f6ad6427c52aBBe",
7781
YT_USDE_27MAR2025: "0x4A8036EFA1307F1cA82d932C0895faa18dB0c9eE",
7882
YT_SUSDE_31JUL2025: "0xb7E51D15161C49C823f3951D579DEd61cD27272B",
83+
YT_EUSDE_28MAY2025: "0x708dD9B344dDc7842f44C7b90492CF0e1E3eb868",
84+
YT_EUSDE_13AUG2025: "0xe8eF806c8aaDc541408dcAd36107c7d26a391712",
85+
YT_USDE_30JUL2025: "0x733Ee9Ba88f16023146EbC965b7A1Da18a322464",
86+
YT_LVLUSD_24SEP2025: "0x946934554a2Bf59039661f971986F0223E906264",
87+
YT_USR_28MAY2025: "0x77DE4Be22Ecc633416D79371eF8e861Fb1d2cC39",
88+
YT_WSTUSR_24SEP2025: "0x1E24B022329f3CA0083b12FAF75d19639FAebF6f",
89+
YT_WEETHS_25JUNE2025: "0xaaC7DB6C2bC926aDE954D69A2d705f059043EA02",
90+
YT_EETH_25JUNE2025: "0x08AEfe9dFe7818CaaedD94E38e910d2155b7d2b0",
91+
YT_WEETHK_25JUNE2025: "0x03722CE19e9F5828969D39474a8EfC35c4eA3987",
92+
YT_AGETH_25JUNE2025: "0x0310A860CF7Efe8F54Ab9B4dE49Cd071C37fCBCB",
93+
YT_USDE_24SEP2025: "0x48bbbEdc4d2491cc08915D7a5c7cc8A8EdF165da",
94+
YT_SUSDE_24SEP2025: "0x029d6247ADb0A57138c62E3019C92d3dfC9c1840",
7995
MELLOW_DVSTETH: "0x5E362eb2c0706Bd1d134689eC75176018385430B",
8096
MELLOW_RENZO_PZETH: "0x8c9532a60E0E7C6BbD2B2c1303F63aCE1c3E9811",
8197
MELLOW_RSENA: "0xc65433845ecD16688eda196497FA9130d6C47Bd8",
@@ -123,23 +139,27 @@ const TOKENS = {
123139
HYPEREVM_GTUSDT0: "0x53A333e51E96FE288bC9aDd7cdC4B1EAD2CD2FfA",
124140
HYPEREVM_MCHYPE: "0xd19e3d00f8547f7d108abFD4bbb015486437B487",
125141
HYPEREVM_GTUETH: "0x0571362ba5ea9784a97605f57483f865a37dbeaa",
142+
HYPEREVM_BEHYPE: "0x441794D6a8F9A3739F5D4E98a728937b33489D29",
143+
HYPEREVM_HYPERBEAT_LST: "0x81e064d0eB539de7c3170EDF38C1A42CBd752A76",
126144
HYPEREVM_SENTIMENT_HYPE_SUPER_POOL: "0x2831775cb5e64b1d892853893858a261e898fbeb",
127145
HYPEREVM_USDT0_FELIX_METAMORPHO_VAULT: "0xFc5126377F0efc0041C0969Ef9BA903Ce67d151e",
128146
HYPEREVM_USDHL_FELIX_METAMORPHO_VAULT: "0x9c59a9389D8f72DE2CdAf1126F36EA4790E2275e",
129147
};
130148

149+
// Note: Some vaults are "smart vaults" where the collateral is DEX LP tokens
150+
// For these vaults, the positions hold LP shares that need to be unwrapped to get actual token values
131151
const FLUID_VAULTS = [
132152
{ VAULT: "0xeAEf563015634a9d0EE6CF1357A3b205C35e028D", TOKEN: TOKENS.WEETH },
133153
{ VAULT: "0x1c6068eC051f0Ac1688cA1FE76810FA9c8644278", TOKEN: TOKENS.WEETHS },
134154
{ VAULT: "0x3996464c0fCCa8183e13ea5E5e74375e2c8744Dd", TOKEN: TOKENS.SUSDE },
135155
{ VAULT: "0xBc345229C1b52e4c30530C614BB487323BA38Da5", TOKEN: TOKENS.SUSDE },
136156
{ VAULT: "0xe210d8ded13Abe836a10E8Aa956dd424658d0034", TOKEN: TOKENS.SUSDE },
137157
{ VAULT: "0x2F3780e21cAba1bEdFB24E37C97917def304dFFA", TOKEN: TOKENS.SUSDE },
138-
{ VAULT: "0x7503b58Bb29937e7E2980f70D3FD021B7ebeA6d0", TOKEN: TOKENS.SUSDE },
158+
{ VAULT: "0x7503b58Bb29937e7E2980f70D3FD021B7ebeA6d0", TOKEN: TOKENS.SUSDE ,IS_SMART: true, LP_TOKEN: "0x1DD125C32e4B5086c63CC13B3cA02C4A2a61Fa9b", TOKEN0: TOKENS.SUSDE, TOKEN1: TOKENS.USDT },
139159
{ VAULT: "0x989a44CB4dBb7eBe20e0aBf3C1E1d727BF90F881", TOKEN: TOKENS.USDE },
140160
{ VAULT: "0x43d1cA906c72f09D96291B4913D7255E241F428d", TOKEN: TOKENS.WBTC },
141-
{ VAULT: "0xB170B94BeFe21098966aa9905Da6a2F569463A21", TOKEN: TOKENS.SUSDE },
142-
{ VAULT: "0xaEac94D417BF8d8bb3A44507100Ab8c0D3b12cA1", TOKEN: TOKENS.USDE },
161+
{ VAULT: "0xB170B94BeFe21098966aa9905Da6a2F569463A21", TOKEN: TOKENS.SUSDE, IS_SMART: true, LP_TOKEN: "0x1DD125C32e4B5086c63CC13B3cA02C4A2a61Fa9b", TOKEN0: TOKENS.SUSDE, TOKEN1: TOKENS.USDT },
162+
{ VAULT: "0xaEac94D417BF8d8bb3A44507100Ab8c0D3b12cA1", TOKEN: TOKENS.USDE , IS_SMART: true, LP_TOKEN: "0xf063BD202E45d6b2843102cb4EcE339026645D4a", TOKEN0: TOKENS.USDE, TOKEN1: TOKENS.USDT },
143163
{ VAULT: "0x0a90ED6964f6bA56902fD35EE11857A810Dd5543", TOKEN: TOKENS.SUSDE },
144164
{ VAULT: "0x91D5884a57E4A3718654B462B32cC628b2c6A39A", TOKEN: TOKENS.SUSDE },
145165
{ VAULT: "0x4B5fa15996C2E23b35E64f0ca62d30c4945E53Cb", TOKEN: TOKENS.USDE },
@@ -208,8 +228,45 @@ async function tvl(api) {
208228
});
209229

210230
for (let i = 0; i < positions.length; i++) {
211-
const rumpelPositions = positions[i].filter(i => owners.includes(i.owner));
212-
api.add(FLUID_VAULTS[i].TOKEN, rumpelPositions.map(i => i.supply))
231+
const vaultPositions = positions[i];
232+
const rumpelPositions = vaultPositions.filter(p => owners.includes(p.owner));
233+
234+
if (rumpelPositions.length === 0) continue;
235+
236+
const vault = FLUID_VAULTS[i];
237+
238+
if (vault.IS_SMART) {
239+
try {
240+
const [totalSupplySharesRaw, reserves] = await Promise.all([
241+
api.call({
242+
target: CONTRACTS.FLUID_DEX_RESOLVER,
243+
abi: 'function getTotalSupplySharesRaw(address dex_) view returns (uint)',
244+
params: [vault.LP_TOKEN]
245+
}),
246+
api.call({
247+
target: CONTRACTS.FLUID_DEX_RESERVES_RESOLVER,
248+
abi: 'function getDexCollateralReserves(address) view returns (uint256,uint256,uint256,uint256)',
249+
params: [vault.LP_TOKEN]
250+
})
251+
]);
252+
253+
const totalSupplyShares = BigInt(totalSupplySharesRaw) & BigInt('0xffffffffffffffffffffffffffffffff');
254+
const [token0Reserves, token1Reserves] = reserves;
255+
256+
const totalPositionShares = rumpelPositions.reduce((sum, p) => sum + BigInt(p.supply), 0n);
257+
const ratio = Number(totalPositionShares) / Number(totalSupplyShares);
258+
259+
const token0Amount = Number(token0Reserves) * ratio;
260+
const token1Amount = Number(token1Reserves) * ratio;
261+
262+
if (token0Amount > 0) api.add(vault.TOKEN0, token0Amount.toFixed(0));
263+
if (token1Amount > 0) api.add(vault.TOKEN1, token1Amount.toFixed(0));
264+
} catch (error) {
265+
// If smart vault processing fails, skip without fallback
266+
}
267+
} else {
268+
api.add(vault.TOKEN, rumpelPositions.map(p => p.supply));
269+
}
213270
}
214271
}
215272

@@ -254,6 +311,18 @@ async function tvl(api) {
254311
TOKENS.YT_SUSDE_29MAY2025,
255312
TOKENS.YT_USDE_27MAR2025,
256313
TOKENS.YT_SUSDE_31JUL2025,
314+
TOKENS.YT_EUSDE_28MAY2025,
315+
TOKENS.YT_EUSDE_13AUG2025,
316+
TOKENS.YT_USDE_30JUL2025,
317+
TOKENS.YT_LVLUSD_24SEP2025,
318+
TOKENS.YT_USR_28MAY2025,
319+
TOKENS.YT_WSTUSR_24SEP2025,
320+
TOKENS.YT_WEETHS_25JUNE2025,
321+
TOKENS.YT_EETH_25JUNE2025,
322+
TOKENS.YT_WEETHK_25JUNE2025,
323+
TOKENS.YT_AGETH_25JUNE2025,
324+
TOKENS.YT_USDE_24SEP2025,
325+
TOKENS.YT_SUSDE_24SEP2025,
257326
TOKENS.MELLOW_DVSTETH,
258327
TOKENS.MELLOW_RENZO_PZETH,
259328
TOKENS.MELLOW_RSENA,
@@ -349,6 +418,8 @@ async function tvl(api) {
349418
{ vault: TOKENS.HYPEREVM_GTUSDT0, underlying: TOKENS.HYPEREVM_USDT0 },
350419
{ vault: TOKENS.HYPEREVM_MCHYPE, underlying: TOKENS.HYPEREVM_WHYPE },
351420
{ vault: TOKENS.HYPEREVM_GTUETH, underlying: TOKENS.HYPEREVM_UETH },
421+
{ vault: TOKENS.HYPEREVM_BEHYPE, underlying: TOKENS.HYPEREVM_WHYPE },
422+
{ vault: TOKENS.HYPEREVM_HYPERBEAT_LST, underlying: TOKENS.HYPEREVM_WHYPE },
352423
{ vault: TOKENS.HYPEREVM_SENTIMENT_HYPE_SUPER_POOL, underlying: TOKENS.HYPEREVM_WHYPE },
353424
{ vault: TOKENS.HYPEREVM_USDT0_FELIX_METAMORPHO_VAULT, underlying: TOKENS.HYPEREVM_USDT0 },
354425
{ vault: TOKENS.HYPEREVM_USDHL_FELIX_METAMORPHO_VAULT, underlying: TOKENS.HYPEREVM_USDHL },
@@ -472,4 +543,4 @@ module.exports = {
472543
hyperliquid: {
473544
tvl,
474545
},
475-
};
546+
};

0 commit comments

Comments
 (0)