Cauldron V3
Last updated
Last updated
Third version of the cauldrons, implementing the following changes:
Dynamic Interest Rate
Borrow Limit (per user & global)
Liquidations emit an event
exchangeRate is automatically updated before solvency checks.
Functions starting with '✨' are new in V3.
It is deployed directly and then used as a masterContract to deploy each market, as clones, following the minimal proxy pattern.
You can find the full contract here.
This will create the masterContract that will be used by all the clones (markets).
Parameter | Description |
---|---|
Accrues the interest on the borrowed tokens and handles the accumulation of fees.
Gets the exchange rate, ie how much collateral to buy 1e18 asset. Invoked if needed since Oracle queries can be expensive.
Returns
Adds share
amount of collateral from msg.sender
to the account to
.
Parameters
Calls _removeCollateral
, which removes the amount share
of collateral and transfers it to the account to
.
Parameters
Calls _borrow
, which allows the sender to borrow amount
and transfer to to
.
Parameters
Returns
Calls _repay
, which repays a loan.
Parameters
Returns
Allows MasterContractOwner to change the borrow limits of the cauldron, both globally and per user.
Parameters
Allows MasterContractOwner to change the interest rate of the Cauldron. The rate can only be change every 3 days The newInterestRate can't be bigger than 175% of the old rate (the rate can't increase by more than 75% at the time) If rate was 0%, the rate can be increased to 1%, the previous rule then applies.
Parameters
Executes a set of actions and allows composability (contract calls) to other contracts.
The cook function allows to bundle functionality within one contract call while passing return values from one call to the next one. Actions are defined by a numeric identifier and can return two values, value1 and value2 to the next function. The input arrays actions, values and datas define the sequential actions. In the Value array the ether value of a call may be defined.
Whereas calling functions like borrow that have the solvent modifier requires solvency at the end of the function, solvency only needs to be guaranteed at the end of the cook function, thereby allowing more complicated operations such as leveraging within one call.
For certain parameters either an external value can be passed in or the identifier USE_VALUE1 (-1) or USE__VALUE2 (-2) to access either of the local variables. The following variables are marked in bold italic in the table below. If an action returns one value it is saved as value1, if two are returned they are saved as value1 and value2 respectively. Any action can access these values during the whole duration of the cook call.
The call data for the actions is ABI encoded as listed below.
Available actions and their ID:
Parameters
Returns
Handles the liquidation of users' balances once the users' amount of collateral is too low.
Parameters
Withdraw the fees accumulated to the feeTo address.
Sets the beneficiary of fees accrued in liquidations. Can only be called by the owner of the contract.
Parameters
Reduces the supply of MIM
Parameters
Returns the opening fee (charged instantly, added to user debt upon borrowing) in Basis Points.
Returns the Collateralization Rate (maximum % borrowable with this collateral) in Basis Points. eg: 75000 = 75%
Returns the liquidation fee in Basis Points. eg: 112000 would add 12% (it's a multiplier, so the value is 112%)
Return values
Return values
Returns the current borrowLimit, expressed in borrowParts at the cauldron level and at the address level.
Return values
Return values
Return values
Return values
Return values
Return values
Return values
Return values
Return values
When transferring ownership, the future owner is pending until they claims ownership.
Return values
Returns the total amounts borrowed from the cauldron.
Return values
Returns the amount (in shares) of the token collateral
used as collateral in this cauldron.
Return values
Returns the amount of borrowParts held by a user. To convert that amount into a numerical MIM debt amount, you must do totalBorrow.elastic / totalBorrow.base * borrowParts.
Parameters
Return values
Amount (in shares) of the token collateral
used as collateral by the user.
Parameters
Return values
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type |
---|---|
Name | Type | Description |
---|---|---|
Action Name | ID | parameter names | ABI encoding | returnValues |
---|---|---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
Name | Type | Description |
---|---|---|
bentoBox_
The address of the BentoBox
magicInternetMoney_
The address of MIM.
updated
bool
boolean determining if the exchange rate has been updated yet or not
rate
uint256
the new exchange rate that was fetched
to
address
receiver of the tokens
skim
bool
True if the amount should be skimmed from the deposit balance of msg.sender.
False if tokens from msg.sender in bentoBox
should be transferred.
share
uint256
amount of shares to add for to
to
address
receiver of the shares
share
uint256
amount of shares to send
to
address
receiver of the borrowed assets
amount
uint256
amount of assets to borrow
part
uint256
total part of debt held by borrowers
share
uint256
total amount in shares borrowed
to
address
address of user payment should go to
skim
bool
true if amount should be skimmed from the deposit balance of msg.sender
part
uint256
amount to repay
amount
uint256
total amount repayed
newBorrowLimit
uint128
perAddressPart
uint128
newInterestRate
uint64
New Interest rate
ACTION_REPAY
2
share, to, skim
int256, address, bool
ACTION_REMOVE_COLLATERAL
4
fraction, to
int256, address
ACTION_BORROW
5
amount, to
int256, address
part, share
ACTION_GET_REPAY_SHARE
6
part
int256
ACTION_GET_REPAY_PART
7
amount
int256
ACTION_ACCRUE
8
ACTION_ADD_COLLATERAL
10
share, to, skim
int256, address, bool
ACTION_UPDATE_EXCHANGE_RATE
11
must_update, minRate, maxRate
bool, uint256, uint256
ACTION_BENTO_DEPOSIT
20
token, to, amount, share
IERC20, address, int256, int256
amountOut, shareOut
ACTION_BENTO_WITHDRAW
21
token, to, amount, share
IERC20, address, int256, int256
amountOut, shareOut
ACTION_BENTO_TRANSFER
22
token, to, share
IERC20, address, int256
ACTION_BENTO_TRANSFER_MULTIPLE
23
token, tos, shares
IERC20, address[], uint256[]
ACTION_BENTO_SETAPPROVAL
24
user, _masterContract, approved, v, r, s
address, address, bool, uint8, bytes32, bytes32
ACTION_CALL
30
callee, callData, useValue1, useValue2, returnValues
address, bytes, bool, bool, uint8
actions
uint8[]
array with sequence of actions to execute
values
uint256[]
one-to-one mapped array to actions
, ETH amounts to send along with the actions
datas
bytes[]
one-to-one mapped array to actions
, contains abi encoded data of function arguments
value1
uint256
may contain first positioned return value of last executed action (if applicable)
value2
uint256
may contain second positioned return value of last executed action which returns 2 values (if applicable)
users
address[]
Array of user addresses
maxBorrowParts
uint256[]
one-to-one mapping to users
, contains maximum (partial) borrow amounts (to liquidate) of the respective user
to
address
address of the receiver in open liquidations if swapper
is zero
swapper
ISwapper
contract address of the ISwapper
implementation, swappers are restricted for closed liquidations
newFeeTo
address
address of the beneficiary
amount
uint256
amount to reduce supply by (in native representation)
lastAccrued
uint64
Timestamp of the last accrue() call.
feesEarned
uint128
Fees accrue between the last withdrawal and the last accrue.
INTEREST_PER_SECOND
uint64
/
address
Address of the bentoBox the cauldron is deployed on. Set by constructor of masterContract
total
uint128
Max total borrow parts for the cauldron.
borrowPartPerAddress
uint128
Max total borrow parts per user.
/
address
Address of the collateral used by this cauldron.
/
uint256
Current cached exchange rate.
/
address
Recipient of the Fees (controlled by masterContract, which is why regular cauldrons have a feeTo zero address)
/
address
Address of MIM, set by constructor of masterContract
/
address
masterContract address.
/
address
Oracle Address.
/
bytes
Oracle data used to query it.
/
address
Owner of the Cauldron (controlled by masterContract, which is why regular cauldrons have zeroAddress as an owner).
/
address
Address of the pending owner.
elastic
uint128
Amount of MIM borrowed by users.
base
uint128
Amount of borrowParts held by users.
/
uint256
Amount of shares of collateral deposited into the Cauldron.
/
address
User address.
/
uint256
Amount of borrowParts held.
/
address
User address.
/
uint256
Shares of collateral deposited.