DsrManager
provides an easy to use smart contract that allows service providers to deposit/withdraw dai into the DSR contract pot, and activate/deactivate the Dai Savings Rate to start earning savings on a pool of dai in a single function call. To understand the DsrManager, it is necessary to have an understanding of the pot first. The DSR is set by Maker Governance, and will typically be less than the base stability fee to remain sustainable. The purpose of DSR is to offer another incentive for holding Dai.wad
- some quantity of tokens, as a fixed point integer with 18 decimal places.ray
- a fixed point integer, with 27 decimal places.rad
- a fixed point integer, with 45 decimal places.mul(uint, uint)
, rmul(uint, uint)
, add(uint, uint)
& sub(uint, uint)
- will revert on overflow or underflowRdiv
- Divide two ray
s and return a new ray
. Always rounds down. A ray
is a decimal number with 27 digits of precision that is being represented as an integer.Rdivup
- Divide two ray
s and return a new ray
. Always rounds up. A ray
is a decimal number with 27 digits of precision that is being represented as an integer.pot
- stores the contract address of the main Dai Savings Rate contract pot
.dai
- stores the contract address of dai.daiJoin
- stores the contract address of the Dai token adapter.supply
- the supply of Dai in the DsrManager.pieOf
- mapping (addresses=>uint256)
mapping of user addresses and normalized Dai balances (amount of dai / chi
) deposited into pot
.pie
- stores the address' pot
balance.chi
- the rate accumulator. This is the always increasing value which decides how much dai is given when drip()
is called.vat
- an address that conforms to a VatLike
interface.rho
- the last time that drip
is called.uint wad
this parameter specifies the amount of Dai that you want to join to the pot. The wad
amount of Dai must be present in the account of msg.sender
.dst
specifies a destination address for the deposited dai in the pot. Allows a hot wallet address (msg.sender
) to deposit dai into the pot and transfer ownership of that dai to a cold wallet (or any other address for that matter)pie
is calculated by dividing wad with the rate acumulator chi
.dst
's pieOf
amount is updated to include the pie
.pie
.wad
amount of dai is transferred to the DsrManager contractwad
amount of dai into the MCD system through the dai token adapter daiJoin
.join
s pie
amount of dai to the pot
.exit()
essentially functions as the exact opposite of join()
.uint wad
this parameter is based on the amount of dai that you want to exit
the pot
.dst
specifies a destination address for the retrieved dai from the pot
. Allows a cold wallet address (msg.sender
) to retrieve dai from the pot
and transfer ownership of that dai to a hot wallet (or any other address for that matter)pie
is calculated by dividing wad with the rate acumulator chi
.msg.sender
’s pieOf
amount is updated by subtracting the pie
.pie
.pot
contract.pie
with chi
.daiJoin
to the destination address dst
.exitAll()
functions like the exit
function, except it simply looks into the mapping pieOf
, to determine how much dai the msg.sender
has, and exit
s the entire amount of dai, instead of a specified amount.join
function, you need to approve
the contract to transfer Dai from your wallet. You need to call approve
on the Dai token, specifying the DsrManager
contract and the amount that the contract should be able to pull (can be set to -1
, if you want to set an unlimited approval)