Documentation

Docs

Everything about SUSD — the yield stablecoin on Robinhood Chain. How to mint it, how yield accrues, how to redeem, and how to integrate with the contracts.

Overview

SUSD is a yield-bearing dollar token on Robinhood Chain. You deposit USDG and receive SUSD 1:1. From the moment it lands in your wallet, your SUSD balance grows every second — no staking, no lock-up, no claim step.

Yield comes from creator fees earned by the SUSD token. Those fees are funnelled into the protocol treasury, and the treasury pays them out to everyone holding SUSD. Because it tracks real performance, the rate is variable and can be negative if the treasury takes a loss.

Backing
1:1 USDG

Every SUSD is backed by USDG held in the vault.

Accrual
Every second

Balances grow continuously with no transaction needed.

Exit
Redeem anytime

Burn SUSD, get USDG back from reserves.

Quick start

  1. Add Robinhood Chain to your wallet (chain ID 4663) and fund it with gas.
  2. Hold some USDG — the stablecoin SUSD is minted against.
  3. Open the dashboard and connect your wallet.
  4. Approve USDG for the vault, then mint. You receive SUSD 1:1.
  5. Hold it. Your balance starts growing immediately.
See how it works

Minting SUSD

Minting is a two-transaction flow because ERC-20 requires an allowance before the vault can move your tokens.

  1. Approve — you grant the vault permission to spend your USDG.
  2. Mint — the vault pulls the USDG, holds it as backing, and mints you an equal dollar amount of SUSD.

USDG has 6 decimals and SUSD has 18. The vault normalizes this, so 1 USDG always mints exactly 1 SUSD.

// Approve, then mint USDG.approve(SWAP_ADDRESS, amount) // amount in 6-decimal units CUSDSwap.mint(USDG_ADDRESS, amount) // returns SUSD minted (18 decimals)

How yield accrues

SUSD is a share-based rebasing token. Internally you own a fixed number of shares. Your displayed balance is:

balance = shares × index / 1e27

The index starts at 1 and grows continuously from the configured APY using the block timestamp. That is why your balance ticks up every second with no transaction — the index is computed live on read.

On top of that stream, the treasury reconciles against real reserves. Anyone can call settle():

  • Reserves above outstanding SUSD → the surplus is distributed and every balance rebases up.
  • Reserves below outstanding SUSD → the shortfall is reported and every balance rebases down.

Your share count never changes when this happens — only the index does, so the effect is perfectly pro-rata across all holders.

Redeeming

Redeeming burns your SUSD and returns USDG from the vault's reserves. You receive the current value of your SUSD, so if the treasury has grown you get back more USDG than you minted with.

CUSDSwap.redeem(USDG_ADDRESS, usdyAmount) // burns SUSD, sends USDG

Redemption requires the vault to actually hold enough USDG. If reserves are short, the transaction reverts with InsufficientReserves.

Paying with SUSD

SUSD is a normal ERC-20, so you can send it to anyone with a plain transfer. Transfers move shares under the hood, which means the recipient keeps earning yield automatically — there is no staking or registration step for them.

SUSD.transfer(recipient, amount)

Token mechanics

NameSUSD Yield Dollar
SymbolSUSD
Decimals18
StandardERC-20, share-based rebasing
Balanceshares × index / 1e27
BackingUSDG held in the CUSDSwap vault
Yieldvariable; can be positive or negative
Mint / burnrestricted to the CUSDSwap vault
ChainRobinhood Chain (4663)

Contracts

Two contracts run the protocol. The token holds balances; the vault holds backing and controls mint/burn.

SUSD token0x44E47ffDd8d1bFf40fDAf14cCF4642EFE84F5907
CUSDSwap vault0x8482568b0852D3C5A3AEBd0D42118D4F9aa1a2c7
USDG (backing)0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168

Integrating

The functions most integrations need. All amounts are raw integers (SUSD 18 decimals, USDG 6).

// --- SUSD token --- balanceOf(address) → uint256 // live, includes accrual sharesOf(address) → uint256 // fixed share count currentIndex() → uint256 // RAY (1e27) precision ratePerYear() → int256 // signed APY, RAY precision totalSupply() → uint256 transfer(address to, uint256 amount) → bool // --- CUSDSwap vault --- mint(address stable, uint256 amount) → uint256 usdyOut redeem(address stable, uint256 usdyAmount) → uint256 stableOut previewMint(address stable, uint256 amount) → uint256 treasuryValue() → uint256 // normalized reserves susdSupply() → uint256 // outstanding SUSD pnl() → int256 // reserves − supply settle() → int256 // distribute profit / report loss

To display a live-ticking balance without spamming RPC calls, read sharesOf, currentIndex and ratePerYear once, then project the index forward client-side using the same linear formula the contract uses.

Risks

  • Yield is not guaranteed. The rate is variable. If the treasury underperforms, balances can rebase down and you can end up with less than you deposited.
  • Redemption depends on reserves. You can only redeem as much USDG as the vault holds.
  • The contracts are not audited. They are deliberately simple, but they have not had a third-party security review.
  • Admin keys exist. The owner can set the target APY, register stablecoins, and move reserves to a strategy.
  • Smart contract risk. Bugs or exploits can cause loss of funds. Only deposit what you can afford to lose.