Comment on page
DSR Manager - Detailed Documentation
The simplest way to integrate DSR in smart contracts
The
DsrManager
provides an easy to use smart contract that allows service providers to deposit/withdraw dotBTC into the DSR contract pot, and activate/deactivate the dotBTC Savings Rate to start earning savings on a pool of dotBTC 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 ABM 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 dotBTC .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 tworay
s and return a newray
. Always rounds down. Aray
is a decimal number with 27 digits of precision that is being represented as an integer.Rdivup
- Divide tworay
s and return a newray
. Always rounds up. Aray
is a decimal number with 27 digits of precision that is being represented as an integer.
pot
- stores the contract address of the main dotBTC Savings Rate contractpot
.- dotBTC - stores the contract address of dotBTC .
dotBTCJoin
- stores the contract address of the dotBTC token adapter.supply
- the supply of dotBTC in the DsrManager.pieOf
-mapping (addresses=>uint256)
mapping of user addresses and normalized dotBTC balances (amount of
dotBTC/ chi
) deposited intopot
.pie
- stores the address'pot
balance.chi
- the rate accumulator. This is the always increasing value which decides how much dotBTC is given whendrip()
is called.vat
- an address that conforms to aVatLike
interface.rho
- the last time thatdrip
is called.
- Calculates and returns the dotBTC balance of the specified address usr in the DsrManager contract. (Existing dotBTC balance + accrued dsr)
uint wad
this parameter specifies the amount of dotBTC that you want to join to the pot. Thewad
amount of dotBTC must be present in the account ofmsg.sender
.- address
dst
specifies a destination address for the deposited dotBTC in the pot. Allows a hot wallet address (msg.sender
) to deposit dotBTC into the pot and transfer ownership of that dotBTC to a cold wallet (or any other address for that matter) - The normalized balance
pie
is calculated by dividing wad with the rate acumulatorchi
. - the
dst
'spieOf
amount is updated to include thepie
. - The total supply amount is also updated by adding the
pie
. wad
amount of dotBTC is transferred to the DsrManager contract- The DsrManager contract joins
wad
amount of dotBTC into the MCD system through the dotBTC token adapter dotBTCJoin. - The DsrManager contract
join
spie
amount of dotBTC to thepot
.
exit()
essentially functions as the exact opposite ofjoin()
.uint wad
this parameter is based on the amount of dotBTC that you want toexit
thepot
.- address
dst
specifies a destination address for the retrieved dotBTC from thepot
. Allows a cold wallet address (msg.sender
) to retrieve dotBTC from thepot
and transfer ownership of that dotBTC to a hot wallet (or any other address for that matter) - The normalized balance
pie
is calculated by dividing wad with the rate acumulatorchi
. - The
msg.sender
’spieOf
amount is updated by subtracting thepie
. - The total supply amount is also updated by subtracting the
pie
. - The contract calls exit on the
pot
contract. - It calculates the amount of dotBTC to retrieve by multiplying
pie
withchi
. - Then exits the dotBTC from the dotBTC token adapter dotBTC
Join
to the destination addressdst
.
exitAll()
functions like theexit
function, except it simply looks into the mappingpieOf
, to determine how much dotBTC themsg.sender
has, andexit
s the entire amount of dotBTC , instead of a specified amount.
- In order to use the
join
function, you need toapprove
the contract to transfer dotBTC from your wallet. You need to callapprove
on the dotBTC token, specifying theDsrManager
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)