Vesting for the Compound protocol

Apologies if I mired the initial explanation with jargon. Here’s what I mean in hopefully simpler terms:

Assumption: A user prefers to receive COMP now rather than later

Concretely: For a user, receiving 1 COMP now is equivalent to receiving 1.1 COMP in a month if you can reinvest the 1 COMP you receive immediately and earn 10% in a month (e.g. via being a Uniswap LP, lending on a venue that lends COMP, etc.)

Analysis

  • Using this assumption, if you place a cToken in a Uniswap pool and the cToken is earning COMP every block vs. every month, there’s a value difference in the Uniswap pool share (e.g. LP shares with cTokens that vest COMP on every block are valued more than LP shares with cTokens that vest the same amount of COMP every month)
  • Owning LP shares or placing cTokens in pools means that the value of the liquidity pool share that has a cToken with a COMP / block will be worth more than the one with COMP / month -> you’ll end up w/ different amounts of on-chain liquidity based on the issuance and/or lock-up

Thus, even if COMP never has an incentivized pool (like Synthetix), the choice of how vesting works effects the value of COMP when used elsewhere on chain. If a large portion of the community wants to utilize their COMP in other on-chain financial products, the vesting effect will be quite important to analyze carefully.

Since the precise implementation of how vesting is added to the protocol will effect the time scale, frequency, and amount of user interaction needed for vesting, it is important to keep this effect in mind, especially if the community deems on-chain usage of COMP to be a high priority.

As an explicit example of what might happen if the user has to manually claim vested COMP rewards, consider the Balancer gulp() bug that led to losses due to a deflationary token. While COMP will not have losses of this form, there is an issue if claimComp() is called on cTokens in an LP share a long time post vest. Consider the following numerical example:

  • cUSDT/USDT price is $1.01 so LP share is worth $1.01 [0]
  • Earns an average of $0.01 COMP / block

If claimComp() is called every block/continuously vested, then the LP share’s value k blocks after vesting begins is $1.01 + k * $0.01. On the other hand, if the vest happens every 100 blocks, then the price of the LP share at block k is $1.01 + floor(k/100) * $0.01. And if the user forgets to call claimComp(), then there will be a bigger shock to the price of the pool share when the COMP is claimed.

We’re only pointing this out because the continuous (e.g. every block) vs. discrete (e.g. user has to claim ever week/month) vesting schedules will require different levels of COMP holder attentiveness, especially when COMP is in other protocols.

[0] Slightly misleading in that you have to include Uniswap/gas fees on withdrawal, so the price might differ slightly. However, in a low gas price and 0% fee world, this is true.

3 Likes