Contracts
A developer guide to using Sages Vaults ✨
Sage is a decentralized protocol that offers institutional yield on-chain through USDC lending. Users provide collateral to Sage vaults, which is then lent to borrowers investing in RWA assets like U.S. Treasury bills and on-chain credit products. Yield is returned as stUSDC, a stablecoin combining USDC's security with RWA-backed compounding yields.
The Sage Protocol's deployed codebase is available here: Sage Finance GitHub Repository.
Core
SageAddressProviderRegistry.sol
This contract is the entry point to the deployed Sage protocol and provides a registry for all the deployed Sage vaults. Each vault is represented by mapping an numeric id to the address of a SageAddressProvider contract.
SageAddressProvider.sol
This contract collects all the active addresses within a Sage vault. The Sage vault contracts query this contract when they need to access sibling contracts (e.g., reading a user's requested redemptions for stUSDC shares from the History contract).
SageRoles.sol
Roles for the different permissions within the SageProtocol:
DEFAULT_ROLE
VAULT_ADMIN
HOLDING_CONTRACT_ADMIN
HOLDING_CONTRACT
HOLDING_CONTRACT_MULTI
The DEFAULT_ROLE and *_ADMIN roles will most often be set to a multisig or governance-controlled contract.
Inherited libraries: OpenZeppelin UUPSUpgradeable, OpenZeppelin AccessControlDefaultAdminRulesUpgradeable
SageVaultBase.sol
The base ERC4626 contract for Sage vaults. This contract contains an emergency rescue method callable by the vault admin address.
Inherited libraries: OpenZeppelin ERC4626Upgradeable
Last updated