Methodology

How sDAI yield on Gnosis Chain is calculated, why it can diverge from the on-chain reported APY, and how every number on this dashboard is derived.

Overview

sDAI on Gnosis Chain earns yield through two mechanisms: the Sky Savings Rate (SSR) set on Ethereum mainnet, and a bridge amplification effect that arises because the pool of DAI bridged to Gnosis is larger than the sDAI deposited there.

The sDAI vault exposes a vaultAPY() function that DeFi protocols (Spark, Aave) use to price sDAI collateral. This value only refreshes when an epoch claim fires — roughly every 72 hours — when accrued interest is bridged from Ethereum. Between claims, vaultAPY is stale. This dashboard tracks both the calculated APR (derived directly from on-chain inputs) and the reported vaultAPY, so you can see the gap between them in real time.

Before 2024-09-04, yield was driven by the DSR (Dai Savings Rate) via the Pot contract on Ethereum mainnet. From approximately November 2025, Sky began migrating DAI liquidity to USDS, gradually reducing bridged DAI and compressing the amplification ratio.

Historical data is available from 6 October 2023 — the first full day after the Gnosis bridge investment module was activated.

Data Collection

For each selected date the backend fetches values from Ethereum mainnet and Gnosis Chain via Tenderly RPC. It binary-searches for the Ethereum block closest to midnight UTC for that date, then reads the SSR contract and the bridge escrow. Three scheduler jobs run automatically:

  • fetch_daily — runs at midnight UTC, captures the midnight block for historical cache consistency.
  • fetch_current — runs every 15 minutes at the current block, keeping the live metrics row up-to-date.
  • fetch_backfill — runs on startup, filling any daily gaps between the SSR launch date and yesterday so the historical record stays complete after downtime.

Epoch claim events are sourced separately from an Envio indexer that indexes BridgeInterestReceiver.Claimed events on Gnosis Chain (starting at block 30,195,209). The indexer stores each claim with its timestamp, amount, inter-claim interval, and delay vs the 72-hour target. These records are served via a Hasura GraphQL endpoint and exposed on the /api/vault-epochs route.

The following values are read per data point:

  • DSR/SSR — the raw per-second compounding rate stored as a ray (10²⁷ fixed-point). Before 2024-09-04 from the DSR Pot contract; from 2024-09-04 onward from the Sky SSR contract.
  • Bridged DAIinvestedAmount(token) + balanceOf(escrow) on Ethereum mainnet: DAI currently earning the SSR in the bridge escrow plus liquid DAI waiting in escrow.
  • sDAI totalAssets — total assets held by the sDAI vault on Gnosis Chain at the corresponding block.
  • vault_apy — the value returned by vaultAPY() on the sDAI vault on Gnosis Chain, expressed as an annualised rate. Only populated for dates where this data is available in the database.
  • pending_bridge_interest — interest accrued on Ethereum for the current epoch that has not yet been claimed and bridged to Gnosis.
  • gnosis_epoch_balance — DAI landed on Gnosis in the current epoch that has not yet been fully settled into vaultAPY.
  • interval_hours / delay_hours — per-claim fields sourced from the Envio indexer: actual time between consecutive claims (hours), and the signed deviation from the 72-hour target.

All fetched values are cached per-timestamp so subsequent queries reuse existing data and only fetch missing dates.

DSR/SSR to APY Conversion

The raw savings rate is a per-second compounding rate stored as a ray (10²⁷ fixed-point). It is converted to an annualised yield:

Savings Rate APY = (rate / 10²⁷) ^ 31,557,600 − 1

The exponent 31,557,600 is the number of seconds in a Julian year (365.25 × 24 × 3600). The computation uses 50-digit decimal precision to avoid floating-point rounding errors at the ray scale.

Amplification Ratio

More DAI is locked in the Ethereum–Gnosis bridge than is minted as sDAI on Gnosis. The entire bridged pool earns the SSR, but that yield is distributed only among sDAI holders — who represent a smaller pool. The amplification ratio captures this leverage:

Amplification = Bridged DAI / sDAI totalAssets

A ratio above 1.0 means sDAI holders earn yield on more capital than they deposited, boosting their effective APR above the base SSR. As the amplification ratio converges toward 1.0 (from USDS migration reducing bridged DAI), the yield spread between sDAI APR and the raw SSR shrinks.

sDAI APR

The calculated sDAI APR on Gnosis is the product of the SSR APY and the amplification ratio:

sDAI APR = Savings Rate APY × Amplification

This gives the annualised return that an sDAI holder on Gnosis effectively receives, accounting for both the base savings rate and the bridge amplification. This is the number this dashboard treats as ground truth — derived purely from on-chain inputs with no dependency on the vault's own reporting.

On-Chain vaultAPY & the Reporting Gap

The sDAI vault on Gnosis exposes vaultAPY(), which DeFi protocols use to price sDAI as collateral. Unlike the calculated APR above, vaultAPY only updates when an epoch claim fires — approximately every 72 hours. Between claims it is frozen at the rate from the previous epoch.

The Reporting Gap is the signed difference:

Reporting Gap (pp) = vaultAPY − Calculated sDAI APR

A positive gap means the vault is overstating the current yield (stale high reading); a negative gap means it is understating it. Protocols pricing collateral against a stale vaultAPY may therefore over- or under-collateralise positions relative to the true rate.

Queued Interest is the absolute DAI currently in transit between Ethereum and the Gnosis vault:

Queued Interest ($) = pending_bridge_interest + gnosis_epoch_balance

A large queued balance indicates that a claim is due soon and vaultAPY is likely to jump when it fires.

Epoch Delay measures how much each interest claim deviates from the expected 72-hour cadence:

Epoch Delay (h) = Actual interval − 72h

A positive delay means the claim arrived later than expected; a negative delay means it arrived early. These values are sourced from the Envio indexer which tracks every BridgeInterestReceiver.Claimed event on Gnosis Chain. Persistent late claims signal operational lag in the bridge; early claims can temporarily compress the gap before vaultAPY catches up.

Interest Pipeline

Interest earned on bridged DAI flows through a four-step lifecycle before it is reflected in vaultAPY:

  • SSR yields on ETH — DAI locked in the Ethereum bridge escrow earns the Sky SSR continuously via the bridge's investment module.
  • Pending bridge interest (pending_bridge_interest) — interest has accrued on Ethereum for the current epoch but has not yet been claimed. It is recorded on Ethereum but invisible to Gnosis contracts.
  • Epoch claim (~72h) — a permissionless claim transaction bridges the accrued interest from Ethereum to Gnosis. Claim frequency is driven by the bridge protocol — typically every 1–3 days depending on activity.
  • Gnosis epoch balance (gnosis_epoch_balance) — the claimed DAI has landed on Gnosis in the current epoch settlement contract but is not yet distributed into vaultAPY.
  • vaultAPY refreshes — once the epoch settles the interest into the vault, vaultAPY() is recomputed and reflects the true current rate.

Data Adjustments

Certain dates have known data quality issues — bridge migrations, contract transitions, or outlier reads — that are corrected at query time using a forward-fill rule: each affected row is replaced with the last good value immediately before the affected range.

When your selected date range includes adjusted rows, a warning banner appears above the charts. Expanding it reveals which adjustments were applied and why. The chart annotations (orange shaded regions) only appear while the banner is open, so they do not clutter the view by default.

Current known adjustments:

  • 2024-09-04 to 2024-09-17 — SSR launch transition window; on-chain reads were unreliable during the Pot → SSR migration.
  • 2025-02-07 — vault APY outlier excluded (field: vault_apy only).
  • 2025-11-07 — DAI→USDS bridge migration day; all on-chain reads unreliable.

Contract Addresses

All on-chain reads use standard eth_call — reproducible with any public RPC.

RoleNetworkAddress
SSR contractEthereum mainnet0xa3931d71877c0e7a3148cb7eb4463524fec27fbd
DSR / Pot contract (pre-SSR, before 2024-09-04)Ethereum mainnet0x197e90f9fad81970ba7976f33cbd77088e5d7cf7
Bridge EscrowEthereum mainnet0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016
DAI tokenEthereum mainnet0x6B175474E89094C44Da98b954EedeAC495271d0F
USDS token (post-migration ~Nov 2025)Ethereum mainnet0xdC035D45d973E3EC169d2276DDab16f1e407384F
BridgeInterestReceiver (Envio indexed)Gnosis Chain0x670daeaf0f1a5e336090504c68179670b5059088
sDAI vaultGnosis Chain0xaf204776c7245bF4147c2612BF6e5972Ee483701
sDAI Chainlink oracleGnosis Chain0x620424f393dD413c2F8Dc2980905c4daa3619e61
USDC/USD Chainlink oracleGnosis Chain0x26C31ac71010aF62E6B486D1132E266D6298857D
Aave sDAI (aToken)Gnosis Chain0x7a5c3860a77a8DC1b225BD46d0fb2ac1C6D191BC
USDC.e variable debt tokenGnosis Chain0x37b9ad6b5dc8ad977ad716e92f49e9d200e58431
Aave v3 PoolGnosis Chain0xb50201558B00496A145fE76f7424749556E326D8

Yieldoors Methodology

The Yieldoors page ranks sDAI holders on Gnosis by their effective exposure. Data is sourced from the Blockscout public API (no API key required) via paginated token holder lists.

Position size: Each holder's total sDAI exposure is sDAI balance + Aave sDAI balance. The Aave v3 Pool address is excluded from holder lists to avoid double-counting.

Position type is assigned as follows:

  • Leveraged — holder has a non-zero USDC.e variable debt position (borrowed against sDAI collateral on Aave).
  • Aave — holder has Aave sDAI (deposited into Aave) but no debt.
  • Direct — holder holds sDAI directly in their wallet.

Leverage ratio for leveraged positions:

Leverage = sDAI value ($) / (sDAI value − USDC.e debt in $)

sDAI price is read from the Chainlink sDAI/USD oracle on Gnosis Chain, refreshed every 15 minutes by the scheduler. USDC.e debt is priced via the Chainlink USDC/USD oracle — both debts and collateral values are denominated in USD.

% of supply denominator accounts for accrued Aave interest:

Supply = sDAI.totalSupply() + max(0, AaveSDAI.totalSupply() − sDAI.balanceOf(AavePool))

This adds back any Aave sDAI exceeding the sDAI held by the Aave Pool, representing interest accrued to Aave depositors not yet minted as sDAI.

Verify Yourself

All data used by this dashboard comes from public on-chain sources. You can reproduce every figure independently:

All reads are standard eth_call — reproducible with any public Gnosis or Ethereum RPC endpoint.