This is a proposal [based on the discussion from [Discussion] Replace Gauge Weight Voting With A Performance Weighted CRV Distribution] to add a new gauge that weights CRV inflation to pools based on their average utilization rate.
This proposal is to add a new gauge that allows veCRV voters to allocate a portion of the CRV inflation to pools based on their relative weekly performance. This gauge would be available in conjunction with existing and future gauges that allocate directly to specific pools, or to some other initiative. Since it does not replace any existing system, it allows governance to scale the influence of performance weighting up or down, and safely experiment with its effectiveness.
The previous discussion on this topic was meant to get an idea of how the community feels about the gauge weight voting process, and the introduction of a system to reward pools based on performance metrics.
The previous discussion on this topic had some useful discussion and apparent interest from its poll results. Therefore, I’ve gone ahead and formed a signal vote with a formal proposal to determine if the community supports this performance weighting gauge.
Since this gauge can be used in conjunction with other gauges, veCRV voters have the power to allocate more or less weight to rewarding performance as part of the weekly gauge weight vote. This flexibility lets governance trial the effectiveness of the performance weighting, and increase weighting over time if it proves effective.
The calculation being proposed here will only account for pool utilization, as it is the only performance metric that does not require a price oracle. For the sake of simplicity, I’ve omitted consideration of pool liquidity size and pool fees earned.
n = total number of Curve pools
U_n = utilization rate of pool n (averaged over previous week)
R = total daily reward allocated to the performance weight gauge
R_n = daily reward allocated to pool n
k = constant
Given some constant, k, the reward allocated to each pool is calculated as:
R_n = k * U_n
k can be determined by calculating:
k = R / (U_1 + U_2 + … + U_n)
Assume there are 3 Curve pools with various average utilization rates, and that governance has allotted 10% of the gauge weighting this week to the performance weight gauge (76,600 of 766,000 daily inflation) :
U_1 = 10%
U_2 = 35%
U_3 = 200%
R = 76,600 CRV
k = 76,600 / (10 + 35 + 200)
k = 312.653
Given k, we can calculate the daily inflation allocated to each pool as:
R_1 = 312.653 * 10
R_1 = 3126.53 CRV
R_2 = 312.653 * 35
R_2 = 10942.85 CRV
R_3 = 312.653 * 200
R_3 = 62530.6 CRV
This weighting would take effect for the week. The calculation would execute when the weekly gauge weighting takes effect, using data from the previous week. After a week, governance could allocate a different amount to the performance gauge, and a new calculation of the relative utilization between pools would execute.
CRV inflation is a form of compensation that should be allocated to the pools that create the most value. Currently there is no way for the system to deterministically reward pools that create the most value. A performance gauge is needed to properly incentivize good use of liquidity on our platform.
This proposal doesn’t take total liquidity into consideration, so it may be possible for very small pools to wash trade a very high utilization rate and earn a large amount of CRV inflation. A formula to counteract this possibility would need an oracle that compares the liquidity amount and trade fees earned between pools denominated in different currencies. This creates complexity in the design.
A possible work around is to whitelist specific pools that have met adoption and liquidity requirements such that manipulation would be difficult to sustain.