EIP-12: Create Reserve
Author: @eqparenthesis
Overview
Recently, we’ve seen periods where demand has far outpaced supply expansion. Raising the supply change limit could be dangerous as it would greatly increase the growth rate while potentially not actually causing sell pressure in the near term. An alternative to this would be to create a mint-then-sell mechanism to inject supply directly into the market.
This mechanism is already part of the v2 proposal, so its addition would be in line with the long term direction of the project. Adding this piece now will give us an extra down-regulation lever, while maintaining our reflexivity, and will allow us to preemptively build a reserve ahead of v2.
Implementation
Instead of building a specific mint-then-sell lever, we can skip directly to a simple Reserve
contract, who’s sole job is to manage the reserve funds.
Treasury vs Reserve
The treasury was created specifically to manage ESD for the purpose of funding grants to ecosystem contributors, while the reserve’s funds can be any token except ESD, and it is specifically used to stabilize the price of ESD. Important to note that the reserve does not constitute any sort of backing for ESD, these funds are mainly to be use to aid with supply regulation.
Permissions
The reserve has permission to mint new ESD through the DAO, and the DAO has permission to withdraw all of the reserve’s funds. We separate these into two contracts mainly for ease of accounting especially since the reserve will likely hold multiple different tokens.
Orders
The DAO (usually via governance proposals) can create orders which are long-standing limit orders from any token to any token at a specified price.
These can be used to manage the reserve by:
- Creating an upper-limit on ESD price by selling for USDC well-above peg
- Swapping USDC for DAI, COMP, UNI or other decentralized reserve assets
- Creating a last-resort backstop by buying ESD with USDC well-below peg
The reserve never holds ESD. When the maker token is ESD, the ESD is minted before selling, likewise when the taker token is ESD, the proceeds are burned.
Initial Proposed Order
Sell ESD @ 1.15 USDC in an unlimited amount.
makerToken: ESD
takerToken: USDC
takerPrice: 1.15
orderAmount: uint256(-1)
Open questions
Should we instead actually sell on Uniswap? This would be significantly more complex to implement + would be front-runnable so it would likely never raise funds.
We should have a total cap for orders, but should we also have per-epoch rate-limiting? Without this, a large buyer could mint a large % expansion in a single epoch if the market price was sitting at the price ceiling.
Do we need to include more extensibility for how the funds can be used (e.g. lending, staking etc) or can this be added later via an upgrade + migration?
When is the right time to propose this? It may not be now, so this should be part of the discussion.