Collateralized stablecoin
MakerDAO / Sky
Maker’s Vat is a ledger of collateral and stablecoin debt. A vault locks collateral, draws DAI, and pays a stability fee that accrues by raising a per-collateral rate. Sky keeps a one-for-one path between DAI and USDS and adds a savings token, sUSDS, without replacing the vault ledger with an AMM.
Maker’s protocol mints a stablecoin against collateral that a user locks in a vault. The stablecoin is a liability of that vault, not a receipt from a custodian and not a share of an AMM. Sky is the current name of the ecosystem around that system. The integrator docs add USDS as an upgrade path from DAI, and sUSDS as a savings wrapper. They do not describe USDS as a new curve or a new lending pool.
This page follows the ledger. The transition guide separates historical Maker names from the token routes Sky documents now. Marketing pages that list collateral sectors are not used here as evidence of what the contracts enforce.
The ledger
The Vat is the accounting contract. The Vat documentation defines two structures that matter for almost every other call:
| Field | Where it lives | What it means |
|---|---|---|
ink | Urn, per vault | Locked collateral, in wad (1e18) |
art | Urn, per vault | Normalized debt, before the stability fee |
rate | Ilk, per collateral type | Accumulated stability-fee multiplier, in ray (1e27) |
spot | Ilk | Collateral price with the safety margin already applied |
line | Ilk | Debt ceiling for that collateral type |
dust | Ilk | Minimum debt for a vault that is not fully repaid |
Art | Ilk | Sum of normalized debt for the collateral type |
Current debt on a vault is art * rate, not art alone. rate starts at 1e27 and only increases as fees accrue. That is why the stored debt is called normalized. One update to rate reprices every vault of that collateral type.
gem is the Vat’s internal collateral balance. dai is the internal stablecoin balance, in rad (1e45), not the ERC-20 in a user’s wallet. The ERC-20 DAI and USDS tokens are minted by join adapters when internal dai is converted out, and burned when it is converted back. The USDS repository describes UsdsJoin as the adapter that mints USDS against vat.dai, analogous to DaiJoin.
- Lock collateralA user posts an asset the protocol is willing to count. The collateral is accounted per position and per collateral type.
- Draw debtThe protocol mints stablecoin debt against that collateral, up to a ceiling and a collateralization rule.
- FeesDebt grows by a governance-set stability fee, or another fee rule. The fee is system revenue, not a market price.
- Repay or liquidateRepaying debt releases collateral. An unsafe position can be liquidated. A peg module can swap the stablecoin with an external asset without touching a vault.
This matches the shape of a vault-based stablecoin such as DAI. It is not a description of a fiat-backed token, and it is not Curve’s StableSwap pool.
Opening, drawing, and the safety check
A user locks collateral, then draws stablecoin. Both adjustments meet in frob. The Vat documentation and the contract require several conditions at once. The ones that define the mechanism are:
- The collateral type has been initialized (
rate != 0). - Drawing debt must not push the collateral type over its
line, or the whole system over the globalLine. - The vault must be safe unless the call is reducing risk. Safety is
art * rate <= ink * spot. - Debt must be zero or at least
dust. A tiny leftover position is rejected. - The vault owner must authorize a call that increases risk.
spot is not a raw oracle price. It is the price after the liquidation ratio has been applied, so the comparison above is the collateralization rule. The oracle and the spotter that writes spot are outside the Vat. If they are wrong, the Vat will still enforce whatever spot it was given.
The rates module explains why someone must call Jug.drip(ilk) for fees to move. The Jug stores a per-second duty for the collateral type plus a global base. drip computes the multiplier for the elapsed time and calls Vat.fold, which adds the change onto Ilk.rate and credits the system surplus. Until drip is called, rate is stale. A vault opened and closed between drips does not pay the fee that would have accrued in that gap. The Jug docs treat that as a property of lazy accrual, and they note that keepers and governance have reasons to call it.
The stability fee is therefore not a utilization curve. Governance sets it. It does not automatically rise because more DAI has been drawn, except insofar as governance reacts. That is the main contrast with Aave.
Liquidation
A vault is unsafe when art * rate exceeds ink * spot. grab is the Vat function that confiscates it: collateral (ink) and normalized debt (art) are taken off the urn, and the debt is recorded as sin, the system’s unbacked debt. The Vat documentation is explicit that grab is how vaults are liquidated at the ledger layer.
Selling the seized collateral is a different module. src/dog.sol sits next to vat.sol in the dss repository. This page does not restate auction parameters from secondary write-ups. The economic point is enough: liquidation is not a fixed close-factor inside the Vat. The ledger moves the position to the protocol, and a separate auction contract sells collateral for stablecoin so the unbacked debt can be cancelled. If the auction does not cover the debt, sin remains until surplus or governance absorbs it.
USDS, the converter, and savings
Sky’s token docs describe USDS as an ERC-20 with permit support, upgradeable through the UUPS pattern and ERC-1967 storage. The DAI–USDS converter exchanges the two tokens at one-to-one in both directions. The same page says no fee is charged and that a fee cannot be enabled later on that route. The converter is a convenience over the joins. It does not reprice DAI.
The token routes also fix MKR to SKY at 1:24,000. They describe sUSDS as an ERC-4626 deposit of USDS into the Sky Savings Rate. sUSDS and the older sDAI token are not one-for-one, because each has accrued a different rate since it launched. The sUSDS contract stores an accumulator chi and a rate ssr. Share-to-asset conversion uses that accumulator, so a transfer of sUSDS transfers a claim whose USDS value changes, while the USDS stays in the savings module.
The routes page points DAI–USDC and USDS–USDC conversion at LitePSM-style contracts: a fixed one-to-one swap against an external stablecoin, subject to the module’s liquidity, not a Curve invariant. That is the peg stability module idea. It can hold the market price near one dollar only while it has inventory and while governance leaves it open. It does not make a vault safer.
What “decentralized” does not remove
Governance sets the collateral list, the stability fee, debt ceilings, the liquidation ratio inside spot, and the savings rate. The USDS token itself can be upgraded by its proxy admin. Oracle infrastructure writes the prices the Vat trusts. Auction keepers have to show up. Those are the operating assumptions. The governance and oracle articles treat them as a class of dependency, not as a defect unique to one brand name.
Sky’s public materials also describe allocators and real-world collateral. Whether a particular allocator is funded is a governance state. It is not something this page can honestly freeze into a collateral pie chart. The mechanism to verify is still the Vat: collateral in, debt out, fee onto rate, unsafe vaults into liquidation.
Versions in this overview
- Vat and Jug (active) Collateral and normalized-debt accounting. Still the ledger USDS joins against.
- DAI (active) The stablecoin balance inside the Vat. Convertible both ways with USDS at one-to-one.
- USDS and sUSDS (active) Sky’s ERC-20 upgrade path and the ERC-4626 savings wrapper. Documented as fee-free conversions, not as a sunset of DAI.
Sources
- Vat detailed documentation Documentation · MakerDAO
- Rates module Documentation · MakerDAO
- Jug detailed documentation Documentation · MakerDAO
- vat.sol Source code · MakerDAO
- dog.sol Source code · MakerDAO
- USDS Documentation · Sky
- sUSDS Documentation · Sky
- Protocol token routes Documentation · Sky
- sky-ecosystem/usds Source code · Sky
- SUsds.sol Source code · Sky