Summary:
Replace monetary_policy_impl() on the LlamaLend factory with an implementation contract that reduces MIN_RATE from 0.1% to 0.00000001% deployed here.
Abstract:
This proposal will introduce a new Semilog monetary policy implementation contract referenced by the LlamaLend market factory when creating new LlamaLend markets. The current contract has a MIN_RATE of 0.1% while the new implementation has a MIN_RATE of 0.00000001%. No other change is introduced. This will not affect already deployed LlamaLend markets.
Motivation:
Semilog monetary policy takes two arguments, min_rate and max_rate, to determine the interest rate as a function of the market utilization. Although relatively simple and intuitive, there are challenges in balancing several key priorities:
- Make rates sufficiently high when the market is fully utilized to incentivize borrower repayment and/or lender supply.
- Keep rates relatively stable at a reasonable level when the market is underutilized.
- Assign a reasonable rate at target utilization (e.g. 80%).
In general, we prioritize lenders by ensuring the max_rate is set at a level that ensures adequate liquidity in the market at all times. We also value LlamaLend market competitiveness, which requires to determine an appropriate target utilization and set rate at target to a level that matches prevailing rates for the given collateral type. Due to limited control over the Semilog curve, balancing these priorities generally requires the min_rate to be set to a very low value - sometime orders of magnitude lower than the MIN_RATE constant enforced in the current Semilog contract (0.1%).
For reference, see our recent analyses for CRV-long, USDe-long, and pufETH-long to see our process for determining optimal Semilog parameters. Also see our analyses for WETH2-long, wstETH2-long, and WBTC. We see a general trend of requiring a lower MIN_RATE to accommodate parameter recommendations that perform best in terms of mean squared error (how closely the simulated market tracks target utilization), time above threshold (how well the simulated market contains periods of overutilization), and balances these against an increase in rate sensitivity.
Specification:
FACTORY = "0xeA6876DDE9e3467564acBeE1Ed5bac88783205E0"
NEW_MONPOL = "0x53443740EA74C4E816a9E167704f9f9fAe3595A3"
ACTIONS = [
# Replace monetary policy implementation
(FACTORY,
"set_implementations",
"0x0000000000000000000000000000000000000000", # controller
"0x0000000000000000000000000000000000000000", # amm
"0x0000000000000000000000000000000000000000", # vault
"0x0000000000000000000000000000000000000000", # price oracle
NEW_MONPOL,
"0x0000000000000000000000000000000000000000" # gauge
),
]