Compensation Proposal: Distribute COMP to Affected Users in the DAI Liquidations

Note: I’ve deployed the CAP for this proposal . If you support this, you can delegate to this address: 0x2f04664b18fb9b6d49124fcc876b52a4ba797718

Objectives:

Following the first proposal to increase the DAI reserve factor with the goal of de-risking the DAI market and mitigating against future improper liquidations, this next step outlines the mechanics to compensate users for funds lost in the liquidation events of 11/26 by distributing 55,255 COMP (0.55% of total COMP supply) to affected users.

Background:

COMP distribution to users began on June 15, 2020, and has since distributed ~450K COMP, with approximately 4MM COMP remaining.

Behind the scenes, the distribution works through two main contracts, the Reservoir, and the ‘Comptroller’. The Reservoir is an immutable contract that exists outside the control of governance and drips 0.50 COMP per block into the Comptroller contract. The Reservoir continuously adds COMP at the drip rate and is independent of the rate at which the Comptroller distributes such COMP. The Comptroller contract controls the usage and distribution rate of COMP for a number of functions including but not limited to, i) distribution to borrowers and lenders for each market, ii) building a reserve that can be used for community needs, and iii) voting, among other uses.

Currently, the Comptroller distributes 0.352 COMP/block (70%) on liquidity incentives and accrues the remaining 0.148 COMP/block (30%) as treasury reserves. At the current COMP price of ~$155, Compound’s treasury is growing at a rate of ~$149,000 per day, or $4.5MM per month.

Gauntlet’s prop30 added the ability for the Comptroller contract to send COMP to a particular user, group, address, or contract selected by a governance vote. These changes as described by @jmo, enable a plethora of use cases, including the use of treasury assets to compensate those liquidated in the Thanksgiving Event, as suggested by @mrhen .

Mechanics:

This proposal uses the _grantComp function introduced by Gauntlet to distribute a set quantity of COMP to a Merkle distributor contract that will automatically distribute the corresponding COMP to each of the wallets affected—user’s don’t need to interact with any contract to claim this COMP; After the proposal’s execution, the relayer will claim COMP for each wallet according to the merkle distributor and distribute it.

To calculate the amount of COMP needed from the Comptroller for the compensation, this proposal uses the 14-day average closing price of COMP from CoinMarketCap as of the time of writing (12/8/20) to compensate users 8% of the liquidated amount.

As an illustrative example, if a wallet had 100 DAI repaid by a liquidator, then that wallet would receive 8 DAI worth of COMP, which equates to 0.064 COMP of compensation (assuming a 14-day average COMP price of $123.39).

Distributor Methodology

Referencing the DAI liquidations spreadsheet published by @rleshner, a total of 85,220,406.43 DAI was repaid on 11/26/20. Applying the 8% liquidation penalty, this proposal would pay out a total of 6,817,632.51 DAI (in COMP). Taking the 6,817,632.51 DAI and dividing by $123.39 (the 14-day average price of COMP) equals 55,254.95 COMP distributed to users. Numbers here:

  • To preview the COMP distribution per address, see here.

Overall, this distribution of COMP represents only 0.55% of the fully diluted COMP 10M supply and less than 2% of the 24hr COMP volume traded globally, suggesting minimal market impact. Additionally, assuming the Comptroller earns 962 COMP per day, the 55k COMP distribution will be replenished in less than 60 days.

I propose proceeding with this approach for the following reasons:

  1. Compensate users who lost funds: This proposal achieves the objective of compensating users who lost funds due to the abnormal DAI price action that took place on Coinbase, which reflected an off-mark DAI price relative to the other exchanges and liquidity venues, as noted by members of the community.
    d06192d870bf08faa13faf77b6590a97eb635161_2_624x367

  2. Restore borrower confidence: Based on forum discussions, it seems that the community believes that the liquidations were not in the spirit of how the Compound protocol should have affected users given the off-mark price of DAI. Community members and borrowers have expressed their frustration in the forums and suggested compensation.

  3. Achievable: While the community acknowledges that the exact dollar value impact of the liquidation event varies per user, with feedback from core Compound contributors, this approach executes an achievable, straightforward, and timely compensation resolution rather than constructing an overly complex approach that would look to compensate an exact amount. This proposal is a Pareto optimal solution.

  4. Parameter choice: The 14-day average price is a middle ground between the COMP price of 2 weeks ago and the current spot prices. Backdating a price too long, and it gives affected users COMP at an unfair discount relative to the current spot prices. Too recent could lead to material differences by the time the proposal goes live after the CAP, voting, and queuing period.

  5. Relatively small distribution: This proposal would not inflate the COMP supply and simply allocates existing COMP in the Comptroller to affected users, as noted by @rleshner. The distribution represents a very small % of the total COMP supply (0.55%).


Next steps:
If you support this proposal, you can delegate COMP to the CAP at this address 0x2f04664b18fb9b6d49124fcc876b52a4ba797718


Disclosure:
For full transparency, I was one of the 121 Compound users affected in the DAI liquidation event. I recently worked with the community to pass a reserve factor change to the DAI market to de-risk it and prevent repeat events.

11 Likes

I’ve deployed a CAP that implements the changes in this proposal. You can find it here:

4 Likes

isn’t 8 % a bit low. I think it should be 8,5 or 9 % to compensate for the inconvenience and possible losses due to price difference , the fact the funds where in accessible , …

4 Likes

I am all for the idea of compensation in any way.

But there is one nuance I would like to point out.
The only compensation mentioned was 8% fee for the liquidation of positions.
But it’s just a commission, and the larger problem was that Coinbase Oracle was attacked, and Security was exchanged to DAI for the unfair, non-market price.

People lost not these 8%, but rather much larger sums because of the exchange rate difference.

In order to evaluate real damages we might consider so-called DAI rate deviation margin - and apply it to whole sum of DAI paid out by the liquidators.

For instance, average DAI exchange rate this month was about 1.04$
Max DAI exchange rate during the attack 1.23$

so, roughly speaking, the rate deviated for about 18% from the monthly average.

Referencing the DAI liquidations spreadsheet published by rleshner, a total of 85,220,406.43

I think we should add another 15339673,08 (18%) to the sum above, and use it as a final sum for compensation calculation.

If it seems too complex, we can round the sum to 100M (85M + 15M), and dispense 8% out of the total 100M between the damaged parties.

It is just a concept; if the approval for such scheme would be granted, we will have to make precise calculation, but I think you get the idea above.

6 Likes

@zino @Dmitry: You are correct. The community has acknowledged that losses varied per user based on a number of factors such as prices, liquidation timing, and collateral type. The losses incurred by users varied between 8% to 30% depending on the factors above.

I think it’s important to zoom out and acknowledge a few points:

  1. Compensation is an act of good gesture by the Compound community and its stakeholders to restore borrower confidence and acknowledge the liquidations affected users in an adverse and unintended manner.
  2. Some have argued that users affected should not be fully compensated and that instead, they should get less than the 8%, or get 80c on the dollar, or such.
  3. Considering the complexities of precisely calculating the exact losses per user, this proposal takes what’s known–the 8% liquidation penalty–and seeks, in good faith, to compensate users based on an achievable approach.
  4. The actual compensation percent is ultimately a function of COMP price. If COMP price is greater than the twap price used to calculate the COMP taken from the controller, users will be marginally better off than 8%. Conversely, if COMP price is less than the twap price, users will be marginally worse off than 8%. The point being here being, that due to the delays and timelocks of the Compound Governance contract, it’s not achievable to get users an exact percentage compensation either way.

The code that executes this proposal has taken time to develop and would take several more weeks to go back and re-develop the code to incorporate new logic. In situations such as this one, community action and self-organizing play a crucial role in effectuating this proposal. A practical course of action is important before the Thanksgiving liquidation events and the frustration by the community becomes stale.

The deployed and currently live autonomous proposal (CAP) has a real shot at compensating users.

You can view the CAP here (https://compound.finance/governance/address/0x2f04664b18fb9b6d49124fcc876b52a4ba797718) and delegate votes to it at this address 0x2f04664b18fb9b6d49124fcc876b52a4ba797718.

2 Likes

It seems my math might have been off indeed.

The total that should have been paid off is 85M paid out by liquidators plus 15M of exchange rates difference. But there’s just no reason to treat it as a base for 8% compensation. We have to add two things:

  1. 8% liquidators fee collected on 85M paid out; and
  2. exchange rate difference calculated as I suggested before (DAI monthly average to max known Compound Oracle closing exchange rate), for the sake of the conversation let’s assume it in the range of 18%.

In this case total compensation should be about 26% (8+18) out of 85M. Basically, the figure mentioned in p. 2 and its calculation should be the topic of discussion. I would add the percentage of the exchange rates nevertheless, at least partly (maybe not in full, but at least 50% of it).

Indeed, this calculation does not account for comp token (which is suggested as a compensation medium) price change.

5 Likes

I’m impressed with the efforts here, but wanted to weigh in that I am somewhat against this proposal. I think this sets a bad precedent for compensating a few borrowers for what is/was currently considered normal oracle/market behavior of the protocol. The protocol does not treat DAI as having a fixed price (as it does for USDC/USDT), and so without changing how the oracle/protocol works to address a change in policy first, I definitely don’t see how governance can pass this without creating worse problems down the road.

9 Likes

What kind of bad precedent will this do? The borrowers still lost a shit load of money after the proposed compensation; it’s not like the compensation made it become a good deal to get liquidated on weird price oracle events. You said there is just ‘a few borrowers’, but keep in mind it could have happened to more borrowers if Dai went higher or if Coinbase reports weird prices on other assets. It is also not completely impossible that lenders will get screwed in some different way one day. If this doesn’t get addressed it actually is setting a bad precedent. Next time an incident happen people can reference to this event to not compensate again, and eventually no one would feel comfortable using Compound if you can just get screwed randomly with no protection.

Also I disagree with your point that this event is “currently considered normal oracle/market behavior of the protocol”. This is just not true.You also mentioned that the oracle / protocol needs changing, which means you agreed that it is not normal.

Maybe you are just arguing about the order of things being addressed. I agree both issues should be addressed and fixing oracle is more important than compensating a few people that no one cares about, but I don’t think these two issues have to block each other.

6 Likes

without changing how the oracle/protocol works to address a change in policy first

in progress.

@ kybx86
“I am working on a series of proposals to 1) reduce the risk in the cDAI market , and 2) compensate users who were impacted in the DAI liquidation event . I am working with active community members, stakeholders, and users of the protocol to enact these changes.”

As a result the Governance proposal was accepted. (This proposal includes a community member that explains the DAI market risk. Increase DAI Reserve Factor from 5% to 15%):

Compound (Passed)

@ kybx86 solves a global problem. Not just compensation

5 Likes

@jared thanks for your thoughts. They are well taken. I acknowledge that the Compound protocol is not perfect today and that further steps are needed to improve its security and mechanics. Oracles (or more generally price feeds) have been one of the toughest problems to solve in finance and DeFi. Price perfection in real-time is a difficult thing to achieve particularly when markets move quickly. An oracle needs to simultaneously recognize the real-time price while also rejecting real-time prices that don’t reflect the true price–in some fashion, oracles remind me of the Heisenberg Uncertainty Principle in physics: the more closely you measure its position the more uncertain its velocity, and vice-versa. Price feeds suffer a similar curse: too fast and you can intake the wrong price; too slow and it quotes a stale price, creating a trade-off between speed and accuracy. Traditional financial markets have usually solved this problem through human reasoning (i.e. “the price is off”) or litigation (i.e. “you improperly liquidated me, so I’m going to sue”). These dynamics don’t exist on-chain yet. But I am of the mind that steps can be taken to improve the design of oracles AND liquidation mechanics. The UMA protocol is a great example of this, where liquidations go through an on-chain dispute process that allows members to vote on the validity and accuracy of a liquidation. (UMA is particularly interesting in this regard because it’s “priceless”, so there are no oracles at all).

As you know best, the Compound protocol and design have taken +2 years to develop and have benefited from user feedback and community use. Designing the perfect oracle and liquidation solution will take time, and require feedback from the community.

To that end, I am cognizant of the existing risks of the protocol and I think my first proposal around increasing the reserve factors across the DAI market (and others) is a strong first step in de-risking the protocol. Of note, I think you’ll see many DAI liquidity miners wind down their leverage (and reduce the risk to the protocol) since the wider spread between borrow and supply rates will make farming COMP less economical to them.

Compensating users for a market-event that exclusively affected the Compound protocol in a timely manner is an important step towards improving the protocol. Other protocols that have been affected by adverse market events, such as Pickle, Yearn, Opyn, Hegic, and other trustworthy exchanges have reimbursed users for protocol hiccups. This compensation proposal, along with the DAI reserve change, is one of many future steps in engaging the community around important governance issues and working together on further improvements.

3 Likes

You really think that is normal?
That priceof the DAI on one exchange is 30% higher than global price?
And “quite by accident” protocol use only that exchange oracle?
And “quite by accident” that exchange is an early investor in the protocol?
And “quite by accident” that one hour-long manipulation frontrunners work harder than usually?
You think that problem is compensated protocol users with COMP tokens? Whois a better holder of native token than users of protocol?
Somebody liquidation in ratio on 1 ETH: 377 DAI is normal? How long ETH price is above 400$? Somebody obviously need super premium price?
Who was willing to buy a DAI for $ 1.3 when they could mint it for 1$ from MakerDAO (Oasis)?
I think you know who …
And than we discuss about 8%?
This is a humiliation of true protocol users

4 Likes

@dabar90 please delegate your COMP votes to seek compensation!

4 Likes

I agree with you, i didnt expect 100% compensation but this is too low

3 Likes

@jared, the oracle printed a price that was way off market. That is not normal and not acceptable. The oracle needs better market coverage and probably much tighter bounds based on the Uniswap TWAP.

As far as addressing the oracle problem first, I am okay with that.

4 Likes

I am a comp holder, as well as a lender, and I agree this compensation is too low; when most users lost more than 8% (the liquidation fee). It is important to restore faith in the COMP protocol and protect the long term health of our ecosystem in order to maximise the long term value of COMP. As a holder, I want to see short term dilution for long term stability and capital appreciation.

DeFi is a competitive market and this is our game to lose. A lack of trust and confidence in COMP from this will cause serious long term impairment, and allow competitors to rapidly gain marketshare.

I suggest compensation around the 15% range. This parameter should be tweakable easily. I believe more of the community will support this change, and believe this change is better for all of Compound.

The likely price impact of this heavier dilution is 2-4%. 2-4%, people. Think about what the cost of being seen as unsafe is…

Even Ethereum bailed out the whole network for a bug in the DAO; the leading smart contract at that time.

8 Likes

I think this is a well reasoned rundown. My losses were around 25%-30% of the liquidated amount based on the false DAI price and liquidation fee combination. I also believe the compensation amount should be reasonably computed in a structured and logical manner.

@kybx86 What rationale are we currently using to arrive at the current 8% value?

I’d also like to point out that it is possible to have multiple compensation proposals and stage them in; potentially beginning with this proposal initially.

3 Likes

@4D_compound, thanks for your thoughts.

The 8% is coming from the liquidation incentive liquidators get paid to close our undercollateralized positions. Basically, it’s the incentive fee for liquidators to run bots. This 8% incentive fee gets paid from the user’s collateral(s) balance. When a liquidator repays up to 50% of the undercollateralized loan, the liquidator gets back 8% in the collateral of their choice, so long as the user had it enabled as collateral type. Because users were borrowing DAI against many different types of collateral supported on Compound, user’s losses varied in non-trivial ways. So the 8% is compensating users for the liquidation penalty that was collected by the liquidator.

1 Like

From a technical and functional standpoint this proposal works as follows:

Using the _grantComp function supported by the Comptroller, the proposal takes X amount of COMP from the comptroller to distribute it to the timelock contract. The COMP sits in the timelock, and after its approved, it then sends the COMP to the Merkle Distributor. The Merkle Distributor is a smart contract that distributes the COMP according to a merkle root. The Merkle Distributor used in this proposal is forked from the tried and proven Uniswap merkle distributor which was used to distribute UNI, and further improved by Dharma.

This is the immutable merkle root, which shows every wallet and the hexadecimal COMP amounts.

The merkle root relays the COMP to each user’s wallets automatically and completely removes any technical claiming process or required interaction by the user. Each user affected would receive the COMP units in accordance to their liquidated amount. The COMP that would be distributed to each wallet is listed in this file.

1 Like

So if I’m reading it correctly, the 8% is the portion of losses that is guaranteed to have been suffered by each user as a result of the attack. In my case I had X liquidated for DAI for cost C1, but in another case a user may have had Y liquidated for DAI for cost C2, resulting in different total damages that were not simply a percentage of the amount liquidated (computable from the divergence of the incorrect DAI oracle price)?

Do you have data for how much was lost for each liquidation?

2 Likes

8% premium + exchange rate difference + high gas fee when I tried to defend my collateral(because of front-runners).
I have the impression that the community did not take the attack on the protocol seriously.
Is there any more detailed report on the attack that includes information about reporters from the Coinbase open price feed?

1 Like