EIP-1: Improvements to ESD Coupon Redemption
Authors: Will Price + Robert Leshner
Background
The Empty Set Dollar protocol relies on Coupons to reduce the supply of ESD, in order to increase the price of ESD during a market contraction.
Debt is a tracking variable used to determine the incentive to swap ESD for Coupons; the larger the Debt relative to Supply, the larger the Coupon Premium. This incentive carries a cost; if Coupons are not exercised within 90 epochs, they expire worthless.
Coupons are the liability the protocol owes to those who take on the financial risk of expiry in order to contract the ESD supply to maintain the peg. The nomenclature of Debt and Coupons fail to fully capture the ESD primitives that they are meant to describe.
Collectively, this system is used to reward risk-takers for returning ESD to its $1.00 target price.
As currently implemented, after the target price is restored, existing Debt (the incentive to purchase Coupons) remains–leading to flawed incentives, unnecessary dilution to honest stakeholders, and market inefficiencies.
Situation:
As we saw during the 1st contraction cycle, it is possible for the following situation to occur:
- TWAP above $1.00 and positive; the target price has been restored
- Debt greater than zero (Coupons still available for purchase)
Although users are likely to purchase Coupons when TWAP is above $1, this is by no means guaranteed. As the level of Debt drops, the Coupon Premium may not be high enough to justify the perceived risk of coupon expiry.
Further, the current first-come-first-served Coupon redemption model means that there is no guarantee that users will be able to redeem immediately, even if the TWAP is above $1.
As we saw during the last contraction, this situation opens a window for a bot to profit from the couponing process without incurring any risk by doing the following:
- Flash loan ESD from Uniswap
- Buy Coupons
- Advance the epoch
- Redeem the Coupons
- Pay back flash loan
- Sell ESD profits for USDC on the open market
This method allows the bot to profit from the Coupon process without incurring risk and without a vested interest in the ESD system, and increases the expiration risk to honest Coupon holders. If governance does not act, this will happen again.
Proposed Solution:
Part I: Wipe debt before a positive rebase
Successfully redeemed Coupons dilute the other stakeholders in the system, so we should not be allowing more Coupons to be purchased than the minimum required to return to peg. As Debt is only used to measure the required Coupon Premium, once the price returns to $1, it should logically be reset to zero.
We propose that this step be during the advance() call to the Regulator. Pseudocode:
if (price.greaterThan(Decimal.one())) {
setDebtToZero(); // ADDED THIS LINE
growSupply(price);
return;
}
Part II: Require the advance() function to be called by EOA (non-smart contract)
If only Part I is implemented, the unproductive bot activity mentioned above is still possible.
We propose requiring that epoch advancement only be allowed by EOA to prevent this possibility. After much consideration, we believe this solution is better than an alternative - that is, requiring Coupons be more than 2 epochs old before they are eligible for redemption.
function advance() external incentivized {
require(tx.sender==msg.origin, "advance must be called by EOA"); //ADDED THIS LINE
Bonding.step();
Regulator.step();
Market.step();
emit Advance(epoch(), block.number, block.timestamp);
}
Other benefits:
- A more robust CouponClipper market
- More time to analyze and implement other changes to the Coupon & incentive mechanisms
Thanks to Jon Itzler and Will Sheehan for reviewing drafts of this proposal.