Skip to content
Open
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
3bf807e
add Hyperbeat TVL
HugoHL1 Apr 15, 2025
6f17bcb
Revert "add Hyperbeat TVL"
HugoHL1 Apr 15, 2025
3f3f42c
improve fetching tvl with erc20:balanceOf
HugoHL1 Apr 25, 2025
9c89e99
update ubtc vault contract
HugoHL1 May 1, 2025
77b96b4
add sumTokens2
HugoHL1 May 5, 2025
8a807a5
Merge branch 'main' into add-hyperbeat-tvl
HugoHL1 May 7, 2025
729f44e
add usdt0 vault + morpho vault
HugoHL1 May 23, 2025
a621f9b
Merge branch 'main' into add-hyperbeat-tvl
HugoHL1 May 23, 2025
2ccfba8
add xaut vault and relend vault on morpho vault
HugoHL1 Jun 19, 2025
10ccc98
Merge branch 'main' into add-hyperbeat-tvl
HugoHL1 Jun 19, 2025
e4d9203
Update index.js
HugoHL1 Jul 20, 2025
dd596ff
Merge branch 'main' into add-hyperbeat-tvl
HugoHL1 Jul 20, 2025
e3e60e5
Update index.js
HugoHL1 Jul 25, 2025
bc8e52d
Merge branch 'main' into add-hyperbeat-tvl
HugoHL1 Jul 25, 2025
5928102
add: new morpho vaults
HugoHL1 Aug 12, 2025
89970f7
add: wvlp vault
HugoHL1 Aug 14, 2025
a92092c
Merge branch 'add-hyperbeat-tvl'
HugoHL1 Aug 20, 2025
e7e854a
add: dnHYPE vault
HugoHL1 Aug 20, 2025
e667c26
feat: add hbUSDC
constantgillet Sep 16, 2025
a84f981
Merge pull request #1 from 0xhyperbeat/feat/add-hbUSDC
constantgillet Sep 16, 2025
319b825
Merge branch 'main' of https://github.com/0xhyperbeat/DefiLlama-Adapters
HugoHL1 Sep 19, 2025
278b5f3
Merge branch 'main' of https://github.com/0xhyperbeat/DefiLlama-Adapters
HugoHL1 Sep 19, 2025
2035b26
Merge branch 'DefiLlama:main' into main
HugoHL1 Oct 30, 2025
7a7cb02
add: nunchi vault nLP and usdc morpho vault
HugoHL1 Oct 30, 2025
b233fc1
Merge branch 'DefiLlama:main' into main
aliberkhsl Oct 31, 2025
da8a349
add morphobeat tvl and fix the vault tvl calculations
aliberkhsl Nov 4, 2025
2668c5b
add morphobeat tvl and fix the vault tvl calculations
aliberkhsl Nov 4, 2025
2101fc8
remove morpho blue markets tracking, simplify to vault-only tvl
aliberkhsl Nov 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 73 additions & 31 deletions projects/hyperbeat/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
const { sumERC4626VaultsExport } = require('../helper/erc4626');

const liquidHypeStrategist = "0x83a80e5b64086197c01cbb123df2aea79a149c1d"
const oracle = "0x1ceab703956e24b18a0af6b272e0bf3f499aca0f"
const beHype = "0xd8FC8F0b03eBA61F64D08B0bef69d80916E5DdA9"

const config = {
morphoVaults: {
'0x5eEC795d919FA97688Fb9844eeB0072E6B846F9d': '0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34',
Expand All @@ -21,18 +17,33 @@ const config = {
'0x08C00F8279dFF5B0CB5a04d349E7d79708Ceadf3': '0xb88339cb7199b77e23db6e890353e22632ba630f', // Gauntlet USDC
'0x4851D4891321035729713D43bE1F4bb883Dffd34': '0xb88339cb7199b77e23db6e890353e22632ba630f', // MEV USDC
},
standaloneVaults: {
midasVaults: {
'0x5e105266db42f78fa814322bce7f388b4c2e61eb': '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // USDT0
'0x6EB6724D8D3D4FF9E24d872E8c38403169dC05f8': '0xf4D9235269a96aaDaFc9aDAe454a0618eBE37949', // xAUT
'0x81e064d0eB539de7c3170EDF38C1A42CBd752A76': '0x5555555555555555555555555555555555555555', // lstHYPE
'0x441794D6a8F9A3739F5D4E98a728937b33489D29': '0x5555555555555555555555555555555555555555', // liquidHYPE
'0xD66d69c288d9a6FD735d7bE8b2e389970fC4fD42': '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // wVLP
'0xD66d69c288d9a6FD735d7bE8b2e389970fC4fD42': '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // wVLP
'0x949a7250Bb55Eb79BC6bCC97fCd1C473DB3e6F29': '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // dnHYPE
'0x8858A307a85982c2B3CB2AcE1720237f2f09c39B': '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // dnPUMP
// '0xd8FC8F0b03eBA61F64D08B0bef69d80916E5DdA9': '0x5555555555555555555555555555555555555555', // beHYPE → lst adapter
'0x057ced81348D57Aad579A672d521d7b4396E8a61': '0xb88339CB7199b77E23DB6E890353E22632Ba630f', //hbUSDC
'0x441794D6a8F9A3739F5D4E98a728937b33489D29': '0x5555555555555555555555555555555555555555', // liquidHYPE
'0x81e064d0eB539de7c3170EDF38C1A42CBd752A76': '0x5555555555555555555555555555555555555555', // lstHYPE
},
midasVaultTokenOracles: {
'0x5e105266db42f78fa814322bce7f388b4c2e61eb': '0xac3d811f5ff30aa3ab4b26760d0560faf379536a', // USDT0
'0x6EB6724D8D3D4FF9E24d872E8c38403169dC05f8': '0xf3dB9f59f9C90495D1c9556fC5737A679720921d', // xAUT
'0xD66d69c288d9a6FD735d7bE8b2e389970fC4fD42': '0xA9fFe62E785324cb39cB5E2B3Ef713674391d31F', // wVLP
'0x949a7250Bb55Eb79BC6bCC97fCd1C473DB3e6F29': '0xEB3459316211aB3e2bfee836B989f50fe08AA469', // dnHYPE
'0x8858A307a85982c2B3CB2AcE1720237f2f09c39B': '0x707e99655f24747cECEB298B3AAF7FA721EC77fC', // dnPUMP
'0x057ced81348D57Aad579A672d521d7b4396E8a61': '0xc82CAd78983436BddfcAf0F21316207D87b87462', //hbUSDC
'0x441794D6a8F9A3739F5D4E98a728937b33489D29': '0x1CeaB703956e24b18a0AF6b272E0bF3F499aCa0F', // liquidHYPE
'0x81e064d0eB539de7c3170EDF38C1A42CBd752A76': '0x2b959a9Deb8e62FaaEA1b226F3bbcbcC0Af31560', // lstHYPE
},
hyperbeatInfraVaults: {
'0x4Cc221cf1444333510a634CE0D8209D2D11B9bbA': '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // nLP
},
hyperbeatInfraVaultTokenOracles: {
'0x4Cc221cf1444333510a634CE0D8209D2D11B9bbA': '0xC23cdFe493bB5E69bedfCF6E710f508710ac668B', // nLP
}

}

const sixDecimalTokens = [
Expand All @@ -42,38 +53,69 @@ const sixDecimalTokens = [
'0xb88339cb7199b77e23db6e890353e22632ba630f', // USDC
]

const unwrapBeHype = async (api, underlying, supply) => {
const [lastAnswer, beHypeBalance] = await Promise.all([
api.call({ target: oracle, abi: 'uint256:lastAnswer' }),
api.call({ target: beHype, params: [liquidHypeStrategist], abi: 'erc20:balanceOf' })
])


const beHypeToHypeShare = beHypeBalance * lastAnswer / 1e8
api.add(underlying, supply-beHypeToHypeShare) // subtraction of beHype’s share present in the vault
api.add(beHype, beHypeBalance)
const tvlMidasVaults = async (api) => {
const { midasVaults = {}, midasVaultTokenOracles = {} } = config
const vaultTokens = Object.keys(midasVaults)
const supplies = await api.multiCall({ calls: vaultTokens, abi: 'erc20:totalSupply' })
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here can we count the tokens deposited rather than the receipt tokens minted?

const tokenOracles = Object.values(midasVaultTokenOracles)
const exchangeRates = await api.multiCall({ calls: tokenOracles, abi: 'int256:lastAnswer' })


for (const [index, vault] of vaultTokens.entries()) {
const underlying = midasVaults[vault].toLowerCase()

const tvlInToken = sixDecimalTokens.includes(underlying) ? supplies[index] * exchangeRates[index] / 1e20 : supplies[index] * exchangeRates[index] / 1e8;

api.add(underlying, tvlInToken)
}


}
const tvlHyperbeatInfraVaults = async (api) => {
const { hyperbeatInfraVaults = {}, hyperbeatInfraVaultTokenOracles = {} } = config
const vaultTokens = Object.keys(hyperbeatInfraVaults)
const supplies = await api.multiCall({ calls: vaultTokens, abi: 'erc20:totalSupply' })
const tokenOracles = Object.values(hyperbeatInfraVaultTokenOracles)
const exchangeRates = await api.multiCall({ calls: tokenOracles, abi: 'int128:getRate' })
for (const [index, vault] of vaultTokens.entries()) {
const underlying = hyperbeatInfraVaults[vault].toLowerCase()
const tvlInToken = supplies[index] * exchangeRates[index] / 1e8;
api.add(underlying, tvlInToken)
}
}

const tvl = async (api) => {
const { morphoVaults = {}, standaloneVaults = {} } = config
const vaultToUnderlyings = { ...morphoVaults, ...standaloneVaults }
const morphoBeatTvl = async (api) => {
const { morphoVaults = {} } = config
const vaultToUnderlyings = { ...morphoVaults }
const vaults = Object.keys(vaultToUnderlyings)
const supplies = await api.multiCall({ calls: vaults, abi: 'erc20:totalSupply' })
const assets = await api.multiCall({
abi: "function asset() view returns (address)",
calls: vaults,
});

for (const [index, vault] of vaults.entries()) {
const underlying = vaultToUnderlyings[vault].toLowerCase()
const supply = supplies[index]
const totalAssets = await api.multiCall({
abi: "function totalAssets() view returns (uint256)",
calls: vaults,
});

if (vault == "0x441794D6a8F9A3739F5D4E98a728937b33489D29") {
await unwrapBeHype(api, underlying, supply);
continue
assets.forEach((asset, i) => {
if (asset && totalAssets[i]) {
api.add(asset, totalAssets[i]);
}
});

}

const tvl = async (api) => {

await tvlMidasVaults(api)
await tvlHyperbeatInfraVaults(api)
await morphoBeatTvl(api)

const scaled = sixDecimalTokens.includes(underlying) ? supply / 1e18 * 1e6 : supply
api.add(underlying, scaled)
}

return sumERC4626VaultsExport({ vaults: ['0x96C6cBB6251Ee1c257b2162ca0f39AA5Fa44B1FB', '0xc061d38903b99aC12713B550C2CB44B221674F94'], isOG4626: true })(api)
return sumERC4626VaultsExport({ vaults: ['0x96C6cBB6251Ee1c257b2162ca0f39AA5Fa44B1FB', '0xc061d38903b99aC12713B550C2CB44B221674F94'], isOG4626: true })(api)
}

module.exports = {
Expand Down
Loading