Composable Yield: A New Paradigm for Stablecoins

May 22, 2025

May 22, 2025

May 22, 2025

Adi Ravi Raj

Introduction

Since their inception 10 years ago, stablecoins have advanced rapidly.

The first generation, exemplified by USDC, offered reliability and global money movement. This stablecoin market currently stands at over $240 billion.

Then came yield-bearing stablecoins. This second generation improved upon its predecessors by allowing certain stakeholders to share returns on the capital underlying the stablecoin. The yield-bearing stablecoin market cap is quickly growing, currently at $5.5 billion.

The third evolution of stablecoins, spearheaded by Noble Dollar (USDN), is an evolution of yield-bearing stablecoins with a fundamental breakthrough: composable yield.

This innovation shifts control to where it belongs: with integrators, not issuers. As USDN flows across blockchain networks, projects gain complete sovereignty over yield distribution. They can direct returns to users, fund core development, incentivise validators, power token buybacks, or build entirely new economic models.

What is composable yield?

Composable yield refers to USDN's ability to:

  1. Accrue returns from its reserve assets: currently short-term U.S. Treasury Bills via the M^0 Protocol, offering an estimated 4.16%

  2. Distribute this yield cross-chain to integrators of USDN

  3. Give developers and the community complete control over how the yield is disbursed on their network

In the technical deep dive section, we'll explore the architecture enabling this cross-chain yield distribution.

Case studies

With Noble’s upcoming v10 release later this month, USDN's yield can be streamed across networks over the IBC and Hyperlane protocols. 

Here’s how some of early integrators plan to leverage composable yield from USDN:

  • Namada: Directing yield to USDN holders in their shielded pool

  • Osmosis: Combining USDN and USDC into an ‘allUSDC’ yield-bearing asset

  • Neutron: Sending yield straight to their DAO treasury

Other initial integrators of USDN include Aurora/Near, Babylon, Initia, and Coreum, among others.

USDN integration process 

To leverage composable yield using USDN:

  1. Ensure your network has an open IBC channel or Hyperlane route to Noble

  2. Designate where the yield should be sent. This could be a smart contract, multisig, DAO treasury or any other address

  3. The yield distribution is registered by Noble validators to accrue to the address of choice

That's it. Once initialised, the yield begins flowing automatically to the specified recipient.

Technical deep dive: How composable yield works

USDN implements a yield accrual system through an index-based approach:

// Simplified version of the actual code
currentSupply := k.bank.GetSupply(ctx, k.denom).Amount
expectedSupply := k.GetPresentAmount(totalPrincipal, index)
// Calculate yield by comparing expected vs current supply
yieldAmount := expectedSupply.Sub(currentSupply)
if yieldAmount.IsPositive() {
    // Mint new tokens as yield
    k.bank.MintCoins(ctx, types.ModuleName, yieldCoins)
    k.bank.SendCoinsFromModuleToModule(ctx, types.ModuleName, types.YieldName, yieldCoins)
}

When the Noble blockchain updates its yield index:

  1. It compares the current token supply against the expected supply (based on total principal * new index). The yield index is essentially a multiplier showing accumulated returns over time

  2. Mints new tokens representing this yield

  3. Distributes them to external integrators via IBC or Hyperlane

The distribution of yield cross-chain occurs as follows:

Using IBC

IBC (Inter-Blockchain Communication) is a cross-chain protocol with 115+ supported networks. For IBC-enabled networks, USDN is distributed in the following manner:

// Simplified version of the actual code
// In claimExternalYieldIBC function
for channelId, yieldRecipient := range yieldRecipients {
    // Grab yield for the IBC channel's escrow address
    escrowAddress := transfertypes.GetEscrowAddress(transfertypes.PortID, channelId)
    yield := k.claimModuleYield(ctx, escrowAddress)
    
    // Add any failed previous transfers
    retryAmount := k.GetRetryAmountAndRemove(ctx, provider, channelId)
    accruedYield := yield.Add(retryAmount)
    
    // Transfer yield over IBC to the recipient
    timeout := uint64(k.header.GetHeaderInfo(ctx).Time.UnixNano()) + transfertypes.DefaultRelativePacketTimeoutTimestamp
    k.transfer.Transfer(ctx, &transfertypes.MsgTransfer{
        SourcePort:       transfertypes.PortID,
        SourceChannel:    channelId,
        Token:            sdk.NewCoin(k.denom, accruedYield),
        Sender:           escrowAddress.String(),
        Receiver:         yieldRecipient,
        TimeoutHeight:    clienttypes.ZeroHeight(),
        TimeoutTimestamp: timeout,
    })
}

Using Hyperlane

Hyperlane enables cross-chain messaging for 140+ networks. For Hyperlane-supported networks, USDN distributes yield proportionally based on collateral balances:

// Simplified version of the actual code
// In claimExternalYieldHyperlane function
// First calculate total collateral across all routes
totalCollateral := math.ZeroInt()
for identifier := range yieldRecipients {
    token := getHyperlaneToken(identifier)
    totalCollateral = totalCollateral.Add(token.CollateralBalance)
}
// Then distribute yield proportionally
for identifier, yieldRecipient := range yieldRecipients {
    token := tokens[identifier]
    collateral := token.CollateralBalance
    
    // Each route gets yield proportional to its collateral
    collateralPortion := math.LegacyNewDecFromInt(collateral).QuoInt(totalCollateral)
    yieldPortion := collateralPortion.MulInt(yield).TruncateInt()
    
    // Send yield via Hyperlane
    k.warp.RemoteTransferCollateral(
        sdkCtx,
        token,
        address.String(),
        router.ReceiverDomain,
        yieldRecipientBz,  
        yieldPortion,
        // Additional fields omitted for brevity
    )
}

Note: The above code snippets are simplified for clarity. The full implementation for yield calculation and distribution mechanisms can be found here.

A new chapter for yield-bearing stablecoins

Until now, stablecoins have largely replicated traditional finance in a digital, borderless form. While useful, they've remained inherently static.

USDN's composable yield opens up a new chapter - something truly novel that empowers developers and the community with full control over stablecoin yield distribution. Composable yield ushers in a new financial paradigm where stablecoin yield flows freely across networks, empowering both users and ecosystems alike.

More blog posts