Skip to content

Conversation

@jimboevans
Copy link
Contributor

The getVaultERC4626Info function wasn't correctly handling vaults with 6-decimal underlying assets (e.g., USDC, USDT, etc). This would result in effectively 0 fees for all associated vaults.

The problem is that 'convertToAssets' returns values in the underlying asset's decimal precision, but 'getMorphoVaultFee' assumes all rates are 18-decimal format when calculating interest.

I also addressed an issue w/ the bifrost dex and fees index.js files.

This is a follow-up to PR 4618 (closed).

NOTE

Please enable "Allow edits by maintainers" while putting up the PR.


  • If you would like to add a tvl adapter please submit the PR here.
  1. Once your adapter has been merged, it takes time to show on the UI. If more than 24 hours have passed, please let us know in Discord.
  2. Please fill the form below only if the PR is for listing a new protocol else it can be ignored/replaced with reason/details about the PR
  3. For updating listing info It is a different repo, you can find your listing in this file: https://github.com/DefiLlama/defillama-server/blob/master/defi/src/protocols/data4.ts, you can edit it there and put up a PR
  4. Do not edit/push poackage.json/package-lock.json file as part of your changes
  5. No need to go to our discord/other channel and announce that you've created a PR, we monitor all PRs and will review it asap

Name (to be shown on DefiLlama):
Twitter Link:
List of audit links if any:
Website Link:
Logo (High resolution, will be shown with rounded borders):
Current TVL:
Treasury Addresses (if the protocol has treasury)
Chain:
Coingecko ID (so your TVL can appear on Coingecko, leave empty if not listed): (https://api.coingecko.com/api/v3/coins/list)
Coinmarketcap ID (so your TVL can appear on Coinmarketcap, leave empty if not listed): (https://api.coinmarketcap.com/data-api/v3/map/all?listing_status=active,inactive,untracked&start=1&limit=10000)
Short Description (to be shown on DefiLlama):
Token address and ticker if any:
Category (full list at https://defillama.com/categories) *Please choose only one:
Oracle Provider(s): Specify the oracle(s) used (e.g., Chainlink, Band, API3, TWAP, etc.):
Implementation Details: Briefly describe how the oracle is integrated into your project:
Documentation/Proof: Provide links to documentation or any other resources that verify the oracle's usage:
forkedFrom (Does your project originate from another project):
methodology (what is being counted as tvl, how is tvl being calculated):
Github org/user (Optional, if your code is open source, we can track activity):

@llamabutler
Copy link

The bifrost-dex.ts adapter exports:

> [email protected] test
> ts-node --transpile-only cli/testAdapter.ts dexs bifrost-dex.ts

🦙 Running BIFROST-DEX.TS adapter 🦙
---------------------------------------------------
Start Date:	Fri, 07 Nov 2025 00:00:00 GMT
End Date:	Sat, 08 Nov 2025 00:00:00 GMT
---------------------------------------------------

BIFROST 👇
Backfill start time: 8/11/2024
Daily volume: 1.09 M

@llamabutler
Copy link

The bifrost-chain.ts adapter exports:

> [email protected] test
> ts-node --transpile-only cli/testAdapter.ts fees bifrost-chain.ts

🦙 Running BIFROST-CHAIN.TS adapter 🦙
---------------------------------------------------
Start Date:	Fri, 07 Nov 2025 00:00:00 GMT
End Date:	Sat, 08 Nov 2025 00:00:00 GMT
---------------------------------------------------

BIFROST 👇
Backfill start time: 8/11/2024
Daily fees: 9.00

@noateden noateden self-assigned this Nov 10, 2025
const asset = assets[i]
if (asset) {
const assetDecimals = Number(decimals[i]);
const decimalAdjustment = BigInt(10 ** (18 - assetDecimals));
Copy link
Contributor

Choose a reason for hiding this comment

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

why are using decimalAdjustment like this? Can you share an example vault need this fix?

The current logic is USDC has 6 decimals, totalAssets or totalSupply return 6 decimals
The rate always have 18 decimals

Copy link
Contributor Author

@jimboevans jimboevans Nov 11, 2025

Choose a reason for hiding this comment

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

Hey, of course. Re; why I was doing it like this:

Problem:
convertToAssets takes in 18 decimal shares as input, but it returns values in the asset's native decimals. So rate doesn't always have 18 decimals.

Example:
Vault (hyperliquid, morpho, usdt0): 0xfc5126377f0efc0041c0969ef9ba903ce67d151e

// Start Date:     Mon, 10 Nov 2025 20:47:56 GMT
// End Date:       Tue, 11 Nov 2025 20:47:56 GMT

balance = 35,702,570,836,010
rateBefore = 1,045,623
rateAfter  = 1,045,837
growthRate = 214

// Original calculation:
interestEarnedIncludingFees = balance * growthRate / BigInt(10**18)
               = 35,702,570,836,010 * 214 / 1e18
               = 0

// With decimalAdjustment:
interestEarnedIncludingFees = balance * growthRate / BigInt(10**18)
               = 35,702,570,836,010 * 214,000,000,000,000 / 1e18
               = 7,640,350,158
               = 7,640.35 // convert from 6 decimals to USD

This should only impact <18 decimal assets.

Thank you!

Copy link
Contributor

@noateden noateden left a comment

Choose a reason for hiding this comment

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

.

@noateden noateden merged commit c4bf788 into DefiLlama:master Nov 12, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants