Skip to content

Merging updates from defillama#3

Open
iagoLD wants to merge 6522 commits into
Window-Finance:masterfrom
DefiLlama:master
Open

Merging updates from defillama#3
iagoLD wants to merge 6522 commits into
Window-Finance:masterfrom
DefiLlama:master

Conversation

@iagoLD

@iagoLD iagoLD commented Jul 18, 2022

Copy link
Copy Markdown

No description provided.

slasher125 and others added 28 commits May 27, 2026 17:45
* add monolith-market saving vaults & cdp markets

* monolith-market: use sdk for logs

* monolith-market: remove unused variable

* monolith-market: sdk.getEventLogs usage

* monolith-market: add borrowToken field

* monolith-market: clean
* Add Flying Tulip ftUSD APY adapter

sftUSD is the staked form of ftUSD, Flying Tulip's yield-bearing
stablecoin. APY is funded entirely by FT rewards: protocol fees from
ftUSD MintAndRedeem are used to buy FT on the open market and FT is
distributed to stakers per epoch through the EpochRewardsVault. FT total
supply is fixed so nothing is minted.

The adapter reads sftUSD.totalSupply() for tvlUsd (1:1 with USD because
ftUSD is dollar pegged and the vault is a 1:1 ERC4626) and sums the
rewardAmount field of EpochSettled events from the trailing 30 days,
priced via coins.llama.fi. APY is annualised over the 30 day window.
Reads on chain only, no centralised API dependency.

Verified locally:
  Ethereum: tvlUsd=$496,429.90, apyReward=2.19%
  Sonic:    tvlUsd=$340,619.84, apyReward=2.44%
TVL matches api.flyingtulip.com/ftusd/staking exactly.

* Address codex review on flying-tulip-ftusd

- Sum rewards in the BigInt domain and only convert to Number after
  scaling down by 10^12 wei. The previous direct Number(totalRewardWei)
  cast lost precision once a single epoch's rewardAmount went past 2^53
  (around 0.009 FT).
- Treat a missing or zero FT price from coins.llama.fi as soft fail
  (apyReward = 0) instead of throwing. A transient pricing miss
  shouldn't drop both pools.

* set apyreward as null if price missing

* refactor use timestamp lookback period

---------

Co-authored-by: kr3p <123127490+0xkr3p@users.noreply.github.com>
slasher125 and others added 30 commits July 2, 2026 11:42
mint deterministic config ids (uuidv5 of pool key) for new pools
* Add Monetrix yield adapter (sUSDM)

* fix(monetrix): address review feedback on sUSDM yield adapter

- pin totalAssets to latest block so TVL matches the share-price samples
- correct sUSDM share decimals to 12 (was 18), fixing pricePerShare scale
- add pricePerShare and isIntrinsicSource: true (yield-bearing stablecoin)
- add apyBaseInception (since-launch annualized return)
- lowercase pool id
- price via USDM with USDC fallback, ready for when USDM pricing lands
- update pool url to /app/earn

* fix(monetrix): export protocolId for yield-server test suite

The test suite now requires each adapter to export a protocolId matching
its DefiLlama protocol slug (monetrix = 8019). Local branch shipped without
it because its test harness predated that check.
* Add Valdora Finance yield adapter

* valdora-finance: address review feedback

- Switch to Promise.allSettled for validator commission fetching so that
  a single unresponsive validator does not abort the entire APY pipeline;
  failed results are filtered out and the average is computed over the
  remaining ones (returns 0 if all fail)
- Deduct the 10% performance fee and the 2% community tax from the APR
  formula; the displayed APY now reflects net yield for the staker
- Add pricePerShare field by querying the exchange_rate from the staker
  contract, covering the stZIG→ZIG conversion ratio for liquid assets
- Validator addresses remain hardcoded for now: the chain does not expose
  a public endpoint to enumerate Valdora's curated validator set

* fix: replace non-existent exchange_rate query with total_supply

The contract does not expose an exchange_rate query endpoint,
causing HTTP 500 errors. Compute pricePerShare from
funds_raised / total_supply instead.

* valdora-finance: validate contract balances
* add styfi + stfyix

* onchain calls > api
Co-authored-by: Greg T. <greg@permianlabs.xyz>
Update project-0 adapter to new API endpoint
The tracked skUSD vault was redeployed on 2026-07-03 to
0x96F5102C15b839757f811A98CEc3725Ac21DfA14. The prior vault (0xdEd74F7E) had a
share price distorted by early test deposits; the redeploy resets price-per-share
to par. Same ERC-4626 skUSD-over-kUSD design, same asset() (kUSD), same realised
on-chain APY logic; only the address changes. Verified on-chain: asset()=kUSD,
convertToAssets(1e24)=1e18, totalAssets ~1013 kUSD.

Co-authored-by: enerzy17 <enerzy17@users.noreply.github.com>
* show merkl rewards too

* add dummy reward token if none present

Co-authored-by: Copilot <copilot@github.com>

* add direct merkl incentives

* wip

* add forwarded token opportunities

* remove reference file

* enable all chains and remove filter

* add min 10k tvl filter for api query

* fix casing

* filter blacklisted pools

---------

Co-authored-by: Copilot <copilot@github.com>
* Monetrix: support timetravel for historical backfill; symbol USDM -> sUSDM

- apy(timestamp) now anchors every read (block lookup, totalAssets, share
  prices, window math) at the requested historical timestamp, so the
  adapter can be backfilled from when yield started (2026-06-10 13:00 UTC).
  Live runs still anchor at the chain head. Returns [] for timestamps
  before yield began.
- flip timetravel to true
- symbol USDM -> sUSDM: the pool is the sUSDM staking vault (deposit
  USDM, receive sUSDM). Stablecoin classification is unaffected
  (substring match on usdm).

* Monetrix: price backfilled rows at the anchor timestamp

utils.getPrices only hits /prices/current, so historical rows were valued
with today's USDM/USDC price. Timetravel runs now fetch
/prices/historical/<anchor>/... via utils.getPriceApiData; live runs keep
using /prices/current. Fallback order (USDM feed -> USDC -> 1) unchanged.
The previous single USDC vault (sSnowbl, 0xd61b…06e8) was retired after a
contract migration. Return one pool per new Base ERC-4626 vault, each with
its own underlying decimals and USD price:

- sUSD  -> USDC  (6 decimals)
- sETH  -> WETH  (18 decimals)
- sBTC  -> cbBTC (8 decimals)
* sky-lending: add USDS staking farm pools (SKY, GROVE)

Adds the two Sky USDS StakingRewards farms missing from the yields page:
- USDS->SKY farm 0x0650CAF159C5A49f711e8169D4336ECB9b950275 (reward period currently ended, apyReward 0)
- USDS->GROVE farm 0x4E41488C19cD35EB4de3083Fc3e204854c75c86a (~$88M TVL)

APY calc mirrors the existing spkFarm() in the sparklend adapter (same
contract shape). Per-pool urls deep-link to the corresponding farm on
app.sky.money.

* sky-lending: guard USDS price lookup in farmsAPY

Short-circuit farmsAPY with an empty array when the USDS price is
missing from the price API, matching the defensive pattern in
susdsAPY(), so a missing price cannot reject the whole apy() chain.

* sky-lending: drop SKY farm pool (pool id owned by sparklend), keep GROVE

CI's pool-id uniqueness check flags 0x0650CAF159C5A49f711e8169D4336ECB9b950275
as already owned by the sparklend adapter (it listed the SKY farm
historically). Scope this PR to the new GROVE farm only; full jest suite
now passes (218/218).

* retrigger CI (transient RPC failure in globalSetup)

---------

Co-authored-by: techsqrt <techsqrt@users.noreply.github.com>
* meta tags

* comments
* Add Hybra V4 yield adapter

Hybra V4 is a dynamic-fee concentrated-liquidity DEX with a ve(3,3)
flywheel on Hyperliquid L1 (HyperEVM). LPs stake positions in gauges and
earn weekly HYBR emissions; swap fees accrue to veHYBR voters (matching
the hybra-v4 dimension-adapters methodology), so pools report apyReward
from gauge emissions with apyBase 0.

- pools + TVL + token prices from the public Hybra V4 Goldsky subgraph
- gauge staked amounts and weekly HYBR emission per gauge from the
  gauge-rewards subgraph; apyReward = latest epoch emission annualized
  over the USD value staked in the gauge
- skips near-empty gauges (<$100 staked) to avoid absurd APRs

* fix(hybra-v4): paginate gaugeEpochRewards query

The rewards query was a single request capped at first: 1000, which would
silently drop entries once the gauge count grows and exclude those pools
from results. Reuse paginate() like the other two queries; the
newest-first ordering is preserved across pages so the latest-entry-per-
gauge dedupe is unchanged.
* Add Tori Finance yields adapter (strUSD; protocolId 8063)

* tori-finance fixes

---------

Co-authored-by: kr3p <123127490+0xkr3p@users.noreply.github.com>
* add shapeswap v3 yields

* Update index.js

* Update index.js

* chore: retrigger CI

* address review: fix prior-volume fallback, raw symbol, add protocolId
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.