---
# System prepended metadata

title: MakerDAO DSR (Dai Savings Rate) Module

---

# MakerDAO DSR (Dai Savings Rate) Module

The DSR is a special module in the MakerDAO smart contract system that allows DAI holders to receive a share of the revenue earned by MakerDAO. This share was recently voted to be set to *1% APR* as per **this on-chain poll**.

There are several ways to integrate with the DSR

## Using SavingsDAI (ERC4626 Vault)

**SavingsDAI** is an ERC20-compliant token that conforms to the ERC4626 spec.  
You can deposit **DAI** in the DSR by calling its `mint` method and withdraw by calling the `burn` method.  
This contract requires a DAI approval to be set before minting sDAI, and an sDAI approval before burning it.

SavingsDAI's address is [0x843801cef0fe346a2db6e13e7ba02f9f2a411d0d](
https://etherscan.io/address/0x843801cef0fe346a2db6e13e7ba02f9f2a411d0d)

## Using Chai (ERC20)

**Chai** is a tradable ERC20 representation of DAI deposited in the DSR.  
To deposit **DAI** and get **Chai**, call its `join` method, specifying the receiving address and the amount of DAI to be deposited.  
To redeem **Chai** for **DAI**, call its `exit` method, specifying the chai holder's address and the amount of **Chai** to be burnt.

Chai's address is [0x06AF07097C9Eeb7fD685c692751D5C66dB49c215](https://etherscan.io/token/0x06AF07097C9Eeb7fD685c692751D5C66dB49c215)

## Integrating directly with the DSR system

To integrate with the DSR, you will need to interact with several Maker contracts. Here is a quick list of the addresses (on Mainnet) you need to be aware of:

* DaiJoin @ `0x9759A6Ac90977b93B58547b4A71c78317f391A28`
* Pot @ `0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7`
* Vat @ `0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B`

The **test deployment** can be found on the Goerli testnet with the following address set:
* DaiJoin @ `0x6a60b7070befb2bfc964F646efDF70388320f4E0`
* Pot @ `0x50672F0a14B40051B65958818a7AcA3D54Bd81Af`
* Vat @ `0xB966002DDAa2Baf48369f5015329750019736031`

Steps to follow to deposit DAI in the DSR:
1. Approve DaiJoin to spend the amount of DAI you want to deposit in the DSR by calling `DAI.approve(DaiJoin, <amount>)`
2. Deposit your DAI in the system by calling `DaiJoin.join(<your address>, <amount>)`
3. Calculate `chi` (the conversion factor from DAI to DSR shares) as the following
    1. get the `rho` from the Pot by calling `Pot.rho()`
    2. if `rho < timestamp(right now)`, `chi` is assigned to be `Pot.drip()` 
    3. else, `chi` is assigned to be `Pot.chi()`
4. Calculate the amount of DSR shares `shares` as `<DAI amount> / chi`, with 18 decimals of precision.
5. Assign your deposited DAI to the DSR by calling `Pot.join(shares)`

To withdraw:
1. Retrieve your DSR share balance `shares` by calling `Pot.pie(<your address>)`
2. Calculate the amount of DAI you can retrieve from the Maker system as `amount = shares * chi` (with 18 decimals of precision)
    1. *This result is the current DAI balance of the address, and can be shown to users.*
4. Call `Pot.exit(shares)` to assign the underlying DAI balance to your address.
5. Calculate `chi` (the conversion factor from DAI to DSR shares) as the following
    1. get the `rho` from the Pot by calling `Pot.rho()`
    2. if `rho < timestamp(right now)`, `chi` is assigned to be `Pot.drip()` 
    3. else, `chi` is assigned to be `Pot.chi()`
6. Call `DaiJoin.exit(<your address>, amount)`
7. ERC20 DAI tokens will be credited to your address.