Setting the Positive Rebase Sale Rate via Continuous Voting
In the discussions about the “mint and sell” rate on positive rebases that are currently in vogue, there has been little discussion of a dynamic rate setting mechanism. There are numerous options and possibilities that can be explored if we consider a dynamic mechanism. Let’s start as simple as possible.
With the right mechanism, Yam Stakers can continually vote for their preference to either raise or lower the rate by depositing Sushiswap ETH/YAM SLP tokens. We could make 2 (or 3) incentivizer contracts to stake in. One contract would vote to increase the tithe/tax/donation rate and the other would vote to decrease it. If you were neutral you could either stake equally in both or we could provide a neutral 3rd pool. The rate (A) could be adjusted every n blocks depending on the ratio of the 2 pools. This would measure market sentiment on the rate in close to real time. The rate of increase or decrease could be calculated with a set percentage x that is added every block, multiplied by the ratio or difference between the pools.
The rate of change (x) could be bracketed to have a max rate at which A can change per block. For example, we could set the max rate at which A can change at .01% per block if the ratio of the pools reaches .25/.75 either way… That would be a 0.50 difference between the 2 pools (pool.diff). This becomes our way to set x:
0.01% max rate = x * 0.50 pool.diff
x = 0.0001/0.50
If we did this every block:
A.new = A.old + (0.0002 * pool.diff)
Below I am assuming A.old is our current rate of 0.10
Equal YAM in each pool
50+/50- : pool.diff = 0
A.new = 0.10 + (0.0002 * (0))
A.new = 0.10 or 10%
A bit more YAM voting to raise the rate
55+/45- : pool.diff = 0.1
A.new = 0.10 + (0.0002 * (0.1))
A.new = 0.10 + (0.00002)
A.new = 0.10002 of 10.0002%
A bit more YAM voting to lower the rate
45+/55- : pool.diff = -0.1
A.new = 0.10 + (0.0002 * (-0.1))
A.new = 0.10 + (-0.00002)
A.new = 0.09998 or 9.998%
Max YAM voting to lower the rate
25+/75- : pool.diff = -0.5
A.new = 0.10 + (0.0002 * (-.5))
A.new = 0.10 + (-0.0001)
A.new = .0999 or 9.99%
A lower bound for A could be set by governance or it could be allowed to drop to 0. In this form, anything below 0% would be nonsensical. At the max rate of change described with the parameters above, the rate would drop to zero within 1000 blocks unless people moved their stake to the other pool. This is probably too fast, but these numbers can all be adjusted to meet our needs.
In a forthcoming post I will dive a little deeper into a model that builds on this idea and also uses the difference between the Treasury value and YAM market cap as a scalar. This scalar algorithmically lowers the rate when the treasury value is closer to the market cap and raises it when the treasury value is further from the market cap. Stay tuned.