PREFACE
Hey all,
There’s been a lot of good discussion for this topic, and I’ve seen excellent points brought up from just about everyone. I think we should collectively spend a lot of time trying to understand everyone’s concerns, because I believe all opinions are bringing some good points to the table. The free market is the greatest computation engine to ever exist. The aggregated effects of our purchasing decisions ultimately reflect itself in the market data. In this piece, I will explain how we can implement a solution that combines the best of all the opinions I’ve seen so far.
ABSTRACT
The most optimal solution is a combination of a sigmoid and cubic function. The protocol would need to apply the rebase according to minimal history about it’s state. This is analagous to hysteresis in the natural world => making AMPL a sort of digital steel counterpart to BTC as the digital gold.
PROBLEM STATEMENT
We should make it crystal clear that the purpose of this protocol is to be a unit of account. That has been implemented with our beloved token that returns to it’s price target → without any collateral or lender of last resort. We have seen that Ampl eventually reaches it’s price target, which is a can be thought of as a reflection of the economic theory of supply and demand. However it is not enough to simply reach price target eventually, as the maximum benefit is achieved when Ampl is doing the following:
• As close to it's target price as possible
• At it's target price for as *long* as possible
The goal of this protocol is not any of the following:
• Have a constant supply
• Have an exponentially growing supply
• Have a constant market cap
• Have an always up market cap
The things above will be a result of Ampl staying at it’s price target. They are measures of the usefulness of the protocol. By Goodhart’s Law , when the measurements become targets, they cease to be good measures.
Having said that, if we want to improve AMPL’s price stability, we must look at why price has been following the trend it has, and the supply charts may be helpful for visualizing that. We must first come to alignment on the root cause if we are to come up with an appropriate solution.
OBSERVATIONS
The primary motivation for this endeavor has been stated as being that Ampl’s price spends a relatively short amount of time above it’s target price, but spends long periods of time below it’s market cap. If we want to understand this then we must understand the four things below:
• Why does Ampl's price rise rapidly when it is in expansion (the RIP)
• Why does Ampl's price fall quickly when after it has reached the peak of expansion (the FLIP)
• Why does Ampl's price fall quickly when it is near target after expansion (the DIP)
• Why does Ampl's price rise slowly back to target (the TRIP)
![image](https://global.discourse-cdn.com/standard14/uploads/governance1/original/1X/5aa9d8de68674da0048a69744b202499cc2ccc4d.png)
I’ve shown in my earlier post the data that strongly suggests price activity mainly being driven by short-term-speculation and fast-moving-traders. To help understanding them, we need only apply some staged Game Theory to understand how they think. If we believe our hypothesis is correct, we can revisit the historical data to see if it matches our analysis. We can use a 2x2 matrix where there is Player A and Player B. Their options are to buy & sell.
• If both players prefer to buy, price rises.
• If one player is buying and one is selling, price is unchanged.
• If both players sell, price falls.
Extending that, Ampl is designed so that:
• when both players buy, we have expansion
• when both players sell, we enter contraction
• When only one player buys, and the other sells, supply is neutral.
Part A - THE RIP
Currently the protocol is designed such that if both players buy when initially at neutral price, then we will enter expansion. This actually benefits both players. If both players sell, then we would contract which punishes both players. If one is buying and one selling, then there is no reward. This is a zero-sum game, which is why Ampl eventually always returns to its target. Given that this is played in multiple turns, the sum of all plays for Player A and Player B = 0. It’s also symmetric in that it doesn’t matter if Player A uses Player B’s strategy.
At any given instant where price is neutral, there is a Strictly Dominating strategy. Regardless of what the other player is doing, it’s in the benefit for Player A & Player B to buy. This is what causes the price to rise so rapidly out of Price Target Zone.
Part B - THE FLIP
After Ampl enters expansion, the players switch to playing a classic Stag Hunt game. Applied to our protocol, it would look something like this:
In this game, there isn’t a strictly dominating strategy. This game has a Nash Equilibrium, where each player is incentivized to match what the other player is doing. I.e. if Player A is buying, Player B will also buy. However if Player A decides to sell, then Player B also decides to sell. This is a pure strategy.
And this lines up perfectly with we observe in the charts! Given that we just entered expansion with a RIP, Player A/ Player B assume that the other is buying and matches them. The price continues rising… until someone sells a large enough volume to kick the game out of Nash Equilibrium and towards the new Nash Equilibrium of selling.
PART C - THE DIP
If Player A and Player B both sell, it will cause prices to fall. However, we can observe that Player A and Player B have a tendency to over-shoot. As a result, price will actually quickly fall below price target, causing Ampl to contraction. During contraction, it is still a Stag Hunt game, for which the Nash equilibrium is staying in contraction. This is why Ampl enters contraction so soon after reaching the top of it’s supply curves.
PART D - THE TRIP (back up)
However we’ve observed that Ampl’s price doesn’t continue dropping indefinitely. Moreover, it takes a long time to return to target after reaching expansion. There are a few reasons for this:
1) Humans are biased with loss aversion. Losing $100 feels way worse than winning $100. As a result, the force/disturbance required to move the Stag Hunt game out of equilibrium is much higher than the disturbance required to kick it out of Nash equilibrium during expansion.
2) Despite being in contraction, there are a small amount of buyers speculating on expansion soon :tm: These buyers are very slow.
3) The remaining volume every day during contraction can be attributed to the liquidity pools. When Ampl contracts (all else being equal), the paired tokens will be sold for Ampl in order to keep the pool weightings the same. Investors who have decided to stake their Ampl in liquidity pools have been keeping the buy pressure afloat. As long as those investors are not withdrawing their liquidity, these pools help act as a slow but nudging force. This is very observable in particular when the wider market is trading sideways. Ampl appears to nudge higher slowly, with some small spikes of considerable volume.
When the price eventually reaches target price, the cycle repeats.
Summary so far:
If we apply the theory that there’s a cost to switching between games, then it’s ultimately more efficient to just continue playing the stag hunt game. Yes we always reach price target (opposite moves), but that’s a short detour to the new Nash equilibrium in expansion or contraction. And due to loss aversion, it’s easier for a disturbance to kick the system out of expansion than it is to kick it out of contraction.
Imo this model lines up perfectly with the market data - which is showing us that for the current set up, it’s literally more efficient to spend as little time in neutral range as possible.
Proposed Solutions so Far:
There have been a number of proposed solutions:
@Naguib
@Zezima
@Togenkyo
@kbambridge
1) Sigmoid function -> cap the positive rebase to disincentivize speculators from driving the price up
2) Cubic function-> the idea behind this is to incentivize heavy selling when there is large expansion by the laws of supply and demand
3) Steep slope-> this attempts to further the benefits of sigmoid by forcing the rate of increase of rebase to decrease before reaching high levels
4) Logarithmic input -> this attempts to symmetrize the rebase value as a % away from target rather than a raw amount.
All of these solutions provide benefits, but they’re ultimately incomplete, because they fail to look at what happens over a full cycle of the game.
Below are the criticisms of each:
Sigmoid:
When there is legitimate demand (for a utility perhaps) Player A is revealing their hand by buying. Therefore even the rebase is capped, Nash Equilibrium is still for both players to buy. This feedback loop will continue. Despite rebase growth being throttled, each player’s wallet still grows by a larger amount by buying. Call a spade a spade, it’s still a stag hunt game when away from price neutral target.
Another way of looking at it: Traders ultimately will buy and sell based on their expectation of when others will buy and sell. If you know that supply is not expanding fast enough to accommodate real demand, you will still buy. You might not pay the same price as when it was a Stag Hunt game (since the rebase is capped), but you will still buy.
Side note: This might also explain why some people have commented that sigmoid will do “nothing”.
Cubic Function
This makes the dominant strategy of buying at neutral price even more lucrative by further incentivizing with a higher growth rebase for escaping target price.
Steeper Curves
this attempts to make the throttling of the rebase from Sigmoid happen sooner. Ultimately it’s the same Stag game, and it’s actually worse around neutral price zone for the same reasons that cubic doesn’t work. In some ways, this is the worst by combining both.
Logarithmic Input:
While this solves a problem with respect to how humans evaluate deviation from target, this doesn’t actually address any problem related to the incentives at any point in the cycle of the game.
This is not suggest at all that any of these ideas are useless, however. Far from it.
Strategy for a Wholistic Solution
If we want the best possible solution, we must analyze the game theory as a staged game and design our incentivizes accordingly. Again, coming back to our problem statement, we stated that our goal is to achieve stable price. Therefore we must be targeting an equilibrium where only one player is buying and is one is selling at any given time.
Let us start with the same zero sum game at initial conditions. Since the dominant strategy is buying, we can assume that we start off the same way and enter an expansion phase. After we enter expansion, we can then make the game such that the selling comes the dominant strategy. For that to be the case our expansion matrix would look like this ( forgive muh 3,3 ) :
It’s not enough to disincentivize buying during expansion, we must make it strictly dominant to sell. This is what the sigmoid function fails to do. If we overcorrect and enter contraction, we must again make buying the strictly dominant strategy, which would look something like this:
General Implementation
Traders will sell when their fear of loss is greater than the benefit of the reward.
If we come back to the sigmoid function, there is a cap, which reduces the reward. I.e. disincentivizes buying. This is a good first start. However if we want to make it truly logical to sell, there must be a fear of loss.
One way to do this is to make the rebase drop faster after entering the . Intuitively this makes sense. If rebase can drop much faster than it can rise => then those who sell first, sell best. You’re no longer relying on a disturbance to break a Nash Equilibrium => the restoring force is built into the protocol.
![image](https://global.discourse-cdn.com/standard14/uploads/governance1/original/1X/385da417119c290fbba2fe3cf151de3240dfd05d.png)
In order to adhere to the identity of the protocol to rebase positively above target and negatively target, we would need to make it so that this effect slows down approaching target.
![image](https://global.discourse-cdn.com/standard14/uploads/governance1/original/1X/6f4499cc881863292aaf9c217b549677fcd55faa.png)
On the opposite end, we can apply the same strategy, where the rebase can recover much faster if it went thru heavy contraction. If you look, now, the curves we added look pretty similar to a cubic function. This provides an intuitive explanation for understanding why it has been suggested.
![image](https://global.discourse-cdn.com/standard14/uploads/governance1/original/1X/56632723e6d9d9923344f7d0024a85265bb7c7ca.png)
Ultimately this means our policy will need to follow a different curve based on it’s history.
Aside
This is comparably observable in the magnetic domain, with Hysteresis loops (where the state of the material depends on its history). When a magnetic field is applied to an iron object: it still remains magnetized even after the field is removed. The flux density can not be eliminated unless a coercive force (i.e a field is applied in the opposite direction) is applied.
![image](https://global.discourse-cdn.com/standard14/uploads/governance1/original/1X/1500e97eca027fe44c350d3865fb2915af199a0a.png)
@evankuo I know you studied MechEng like me, so I hope your Berkeley profs were teaching this instead of cancel culture ![:stuck_out_tongue: :stuck_out_tongue:](https://emoji.discourse-cdn.com/apple/stuck_out_tongue.png?v=12)
Jokes aside, this model provides a useful analogy in that if Bitcoin is digital gold, then Ampl is digital Steel. If you haven’t noticed, nearly every man-made structure around you has some form of steel in it. Our whole planet is literally an iron ball at it’s core.
Specific Implementation
The specific implementation would follow something like this:
1) Protocol rebases positively above price target range, negatively below target range, and neutral at target threshold (nothing new here)
2) If price is slightly above or below target, then it follows the sigmoid function.
3) If the price into extreme expansion or extreme contraction i.e. above a higher threshold or below low threshold, then a xTremeFlag is set that let's the protocol remember that we are in sustained Demand zone.
4) If TWAP on any given day is less than the previous day, then the rebase applied is according to a cubic function that's fit thru 3 points ( 0, minRebase) (1, 0 rebase) and (lastRebasePrice, lastRebase%)
The function will be of the form y = (ax-b)^3 + c
5) Once the cubic function mode has been triggered, then that function remains the same.
6) In order for the flag to clear, the TWAP must be within target price range.
7) Once cleared, if price reaches new ATHs, then the next time the cubic function mode is triggered is refitted to replace the (lastRebasePrice, lastRebase%)
Checking against our framework
Since the criticism of the existing proposals was that they did not address the whole cycle, it would be hypocritical to not confirm how the wholistic solution holds up according to the game theory.
So if Player A and Player B choose to go into expansion, it’s becomes more strategic to bring it back into to neutral. And if they over-correct and bring it into contraction, then it will be more efficient to bring it back into neutral. However switching between games comes is inefficient on a whole.
In this multi-stage game, the hypothesis is that the market will realize that it most efficient to enter extreme expansion or contraction, only when absolutely necessary. I.e. if there was a new utility that launched, or if there was a security vulnerability (knock on wood).
By virtue of designing the game so that we are around price-neutral target as often as possible, the supply & market-cap shape will purely be reflective of how useful the protocol is - and whether the game is designed well. Take the elevator up and take the elevator down too.
Technical concerns:
- Obviously more complicated due to having keep track of the xTreme Flag and the previous day’s TWAP. Again I took a look thru the UFragmentsPolicy.sol and didn’t find a reason we couldn’t do something like this, but I may be over-simplifying
- Not sure if an “inverse” sigmoid function function thru three points is better from an implementation standpoint?
- Either way, I’m not sure if EVM can easily compute the coefficients for a given equation based off of 3 points
Other concerns:
- Keeping track of history - I recall reading/hearing somewhere in an explanation from Evan that rebase() has no knowledge of the previous rebase. I don’t remember if there was an justification for this besides the “symmetry” argument. I don’t think it’s a problem to make the monetary policy in this way since it’s ultimately still rules based.
- With respect to symmetry
○ The input deviation into the function can either be (P - T), price minus target or ln (P/T) , natural log of price over target). I personally don’t have an opinion on what this should be. As you can probably tell, I’m autistic af - so the way I measure differences might not align with how most people do it.
-
I’m not sure how a natural log in solidity would work. From what I can tell it would need to be approximated to a certain extent. If anyone wants to chime in on this, would be cool
-
Incentivizing buying during contraction
○ Due to loss aversion, is possible that the incentive to buy might need to be higher than the incentive to sell during expansion. It’s also possible that this may not be a concern if there’s enough utilities for AMPL that offset this need.
Any who, I don’t think it’s a coincidence that I only came up with this after seeing everyone else’s thoughts. It’s literally the result collective domain of the Ampleforth community putting it’s distributed cognitive energy to work. (It might just be me projecting or something tho). Curious what y’all think