Stablecoin

How Sky Distributes Rewards to USDS Flagship Vault Users Without Overpaying

Sky
~$28M+in incentivized idle USDS balance
~$802K+distributed in USDS incentives
~4%APR on idle balance

Challenge

Sky.money gives access to USDS and sUSDS, with a growing family of USDS-denominated vaults running on Morpho. Users supply liquidity to the vaults, which route that capital into Morpho markets where USDS can be borrowed.

The challenge was to optimise the rates without overpaying, which meant understanding exactly which portion of supplied USDS actually needs to be incentivized in the first place.

USDS supplied to a vault ends up in one of two states: allocated to Morpho markets, or sitting idle in the vault contract. Allocated USDS earns interest from the market it's lent into. Idle USDS earns nothing. The design question was how to make sure only the idle portion accrues the rewards: enough to make the full balance productive, without spending where capital already earns.

That means the reward infrastructure has to do three things precisely at the same time:

  • track the idle USDS balance held in each whitelisted vault contract block by block
  • route the yield down through nested ERC4626 structures to the actual end user
  • bound spend to the rewards applied on that idle portion, not on all supplied USDS

Building this in-house, vault by vault, would mean months of custom engineering per venue and constant operational overhead to keep payouts aligned with the idle portion.

Solution

Sky turned to Merkl to power its rewards distribution on idle USDS in Morpho vaults.

The program is built around Merkl's idle liquidity-based rewards mechanism. Sky whitelists the ERC4626 vault contract holding USDS, and Merkl tracks the time-weighted USDS balance sitting idle on that contract: the portion that hasn't yet been allocated to Morpho markets.

The economic logic is precise. In most lending vaults, idle balances earn nothing. Here rewards are distributed on exactly that portion, so the idle share earns too. And because the allocated portion already earns on its own, nothing is spent where it isn't needed. Better for the vault, more efficient for the protocol.

As a concrete example, with around $40M in a vault and roughly $33M sitting idle, applying rewards at ~5% on the idle balance translates into an effective ~4% APR for users on their full position. For users, this means access to a vault with substantial available liquidity, while still earning rewards on their position.

Merkl's reward forwarders handle the last-mile problem: they route the incentives through every layer of the vault structure down to the user backing the position, regardless of how that user accessed the vault: directly on Morpho, through a third-party aggregator, or through any vault that supplies into the underlying market. The user sees a single reward stream; under the hood, Merkl routes across nested contracts.

Merkl has become a powerful tool in our operations playbook. Merkl helped fundamentally improve rewards distribution, with the precision and scale we require.

Retro

Soter Labs

Results

At the time of writing, since March 2026, the program on Merkl has reached:

  • ~$33M+ in incentivized idle USDS balance
  • ~$944K+ in USDS distributed to vault users, settled weekly
  • Rewards applied on idle balance only, keeping spend bounded to the unutilized portion of the vault
  • Reward forwarders routing incentives through every layer of the vault structure down to the end user

Because the mechanism is venue-agnostic and reward-forwarder-native, the same idle liquidity-based setup can be extended to any new vault, market, or chain where USDS is held.

A natural next step would be to apply the same setup to the Morpho singleton contract directly: distributing rewards to USDS holders across all Morpho markets at once, with reward forwarders routing down to the underlying users regardless of how they accessed the position.

For any stablecoin issuer running a USDS-style incentive program, Sky.money's setup with Merkl is the working template.

Ready to get started?