Do Static Rewards & Automatic Liquidity Pool Really Stabilize SafeMoon Price?
--
In this article, we will illustrate the effects of each proposed component in the SafeMoon tokenomics (see the whitepaper). Specifically, we want to investigate the claim that these features lead to improved “price stability” and result in a “solid price floor and cushion for holders”. To gain concrete intuition, we will implement these tokenomics inside toy trading simulations to compare the effects on the price of the token over time.
First, let’s recap the major components of the SafeMoon Tokenomics:
SafeMoon employs 3 simple functions: Reflection + LP acquisition + Burn. In each trade, the transaction is taxed a 10% fee, which is split 2 ways.
1. (Reflection/Static Rewards) 5% fee = redistributed to all existing holders
2. (Auto-LP) 5% fee is split 50/50 half of which is sold by the contract into BNB, while the other half of the SAFEMOON tokens are paired automatically with the previously mentioned BNB and added as a liquidity pair on Pancake Swap.
In our experiments, we will compare these 4 scenarios:
- Baseline: No tax on the transactions.
- Reflection only: each transaction is taxed at 5% and the fees are redistributed to the existing holders.
- Auto-LP only: each transaction is taxed at 5%, and half of the SafeMoon from the fee is sold to BNB and added to the liquidity pair.
- Reflection + Auto-LP: this has both #2 and #3 and represents the full SafeMoon protocol. The transaction is taxed at 10% with half for reflection and the other half of the fee for Auto-LP.
For all those scenarios, we can run the same type of buy/sell trading activities and track how the price evolves.
Trading Simulation Details
For those who are interested in the details of the simulation’s pricing model and assumptions that we made, read this section. Otherwise, you can skip to the Experiments section for the results and discussion.
For a nice background on Decentralized Finance in the context of SafeMoon, please see this beginner-friendly medium article.
The main functions that we need to implement for the simulation are the buy and sell functions. Both the buy and sell functions will take in: (1) the amount that they wish to buy/sell, and (2) the current amount of BNB and SafeMoon in the Liquidity Pool.
Liquidity Pool: Constant Product Model
Given a liquidity pool with B amount of BNB and T amount of SafeMoon tokens, we want to keep the product of the two tokens constant before and after the transaction.
Let’s suppose that we are buying the SafeMoon token with b amount of BNB. Then we deposit b amount into the pool and take out t amount of the SafeMoon token. What is t? We need to satisfy the property:
Thus, we can solve for t:
The amount of tokens in the pool is now B+b : T-t, with a new price of (B+b)/(T-t), which is higher than before.
In the case of selling, we are adding t tokens to the liquidity pool and pulling out b. We arrive at a similar expression:
And solve for b:
The amount of tokens in the pool is now B-b : T+t, with a new price of (B-b)/(T+t), which is lower than before.
Note: To keep things simple, we are assuming that there is no additional transaction fee for adding/removing from the liquidity pool, which in practice there is usually a small percentage fee.
- For the baseline with no tax: we essentially implement the equations above
def buy(b, B, T):
t = T - B*T/(B+b)
return t, B + b, T - tdef sell(t, B, T):
b = B - B*T/(T+t)
return b, B - b, T + t
2. For Reflection only: similar to the basic case, but we have an input argument r which controls the percentage SafeMoon token that we redistribution to the holders. In practice, we set r=0.05 for 5% redistribution.
When we buy, we only receive 95% of the tokens sold, but we remove 100% of the SafeMoon tokens bought from liquidity. Similarly, when we sell, we only add 95% of the tokens from the seller to the liquidity pool and pull out the corresponding BNB equivalent amount for that 95% of the sold tokens to give to the seller.
def buy_reflect_only(b, B, T, r):
# Buy Safemoon
t = T - B*T/(B+b) # Ignore small amount of redistribution received
return t*(1-r), B+b, T-tdef sell_reflect_only(t, B, T, r):
# Only t*(1-r) is sold in the liquidity, t*r gets redistribute
b = B - B*T/(T+t*(1-r))
# Ignore redistribution in the received
return b, B - b, T + t*(1-r)
3. For Auto-LP only:
When we buy SafeMoon, we take 5% of the tokens obtained and sell half to get BNB at the current price and add the BNB-SafeMoon pair into the liquidity.
We are assuming that when we sell this 2.5% SafeMoon token to obtain the corresponding BNB, we are not paying the 5% tax on that 2.5% amount(it is unclear in the white paper whether this is the case. If we are paying tax still, then there will be recursive calls). The net effect is that we end up just adding 5% of the SafeMoon token bought (or to be sold) to the liquidity pool after performing the buy/sell on the SafeMoon token.
def buy_sm_autoliq_only(b, B, T, r):
# Buy Safemoon
t = T - B*T/(B+b)
B = B + b
T = T - t
# Ignore redistribution in the received token
# Take r percent of the bought tokens and add to liquidity
return t*(1-r), B, T + t*rdef sell_sm_autoliq_only(t, B, T, r):
# Sell (1-r) Safemoon tokens
b = B - B*T/(T+t*(1-r))
B = B - b
T = T + t*(1-r) # Ignore redistribution in the received token
# Take r percent of the tokens to sell and add to liquidity
return b, B, T + t*r
4. For both Reflection and Auto-LP together: We can put the two functions together. We keep r to be 0.05 to signify 5% for reflection and 5% for Auto-LP.
def buy_sm(b, B, T, r):
# Buy Safemoon
t = T - B*T/(B+b)
B = B + b
T = T - t
# Ignore redistribution in the received token for now
# Take r percent of the bought tokens and add to liquidity
return t*(1-2*r), B, T + t*rdef sell_sm(t, B, T, r):
# Sell (1-2*r) Safemoon tokens
b = B - B*T/(T+t*(1-2*r))
B = B - b
T = T + t*(1-2*r) # Ignore redistribution in the received token for now
# Take r percent of the bought tokens and add to liquidity
return b, B, T + t*r
Experiments
Now for the fun part. Once we have the buy and sell functions defined for simulation, we can input different values for the liquidity pool size, and buy/sell different amounts, and see how the price and liquidity pool change over time.
For our experiments, we are going to assume that in our liquidity pool, we have 1000 BNB and 1000 Safemoon (i.e. initial price of 1 BNB/Safemoon).
Experiment 1: Alternating buy and sell with whatever you got from the last trade.
Let’s say a buyer who has 10 BNB decides to use all of it to buy Safemoon. Then immediately after, the person is a paper-hand and decides to sell all the Safemoon tokens received earlier to get back some BNB. What is the current price?
Scenario #1: Baseline, no tax
In the baseline with no transaction tax, this sequence of a buy and sell will bring the price back to 1 BNB/SafeMoon.
On the first buy, the person receives 9.9 SafeMoon tokens, with the following in the liquidity pool: 1010 BNB and 990.1 SafeMoon. The price is ~1.02 BNB/SafeMoon. That makes sense since we have added some more BNB into the pool while taking out some SafeMoon, so we have more BNB per SafeMoon.
Then when the person sells all 9.9 SafeMoon, they receive 10 BNB, and the liquidity pool has 1000 BNB and 1000 SafeMoon. We’re back to where we started!
Scenario #4: Full SafeMoon tokenomics.
Under the #4 scenario with full SafeMoon Tokenomics, that person receives a little under 9 Safemoon tokens (~8.91) when buying with 10 BNB. This is due to the 10% tax, as well as the constant product algorithm which makes the effective price higher as you buy a bigger amount. Note: we’re ignoring the small amount that they receive due to the redistribution.
The current amount in the pool: 1010 BNB and 990.59 Safemoon.
The current price: 1.0196 BNB/SafeMoon.
Notice that compared to the no-tax case, the price did not rise as much when we bought SafeMoon in this scenario. Because of the Auto-LP, we’ve added back some more SafeMoon tokens into the liquidity. At first glance, you might think that this is bad: “We’re not increasing the price as much! Auto-LP is holding us back!”
But in fact, this is exactly part of the claim for improving price stability: the Auto-LP ensures that the price does not increase as much when you buy, and also ensures that the price does not decrease as much when you sell, compared to the no-tax scenario.
Now, the person is a paper-hand and decides to sell all the 8.91 Safemoon tokens that he has to get back some BNB, at the current price. The person only gets back 8.11 BNB, less than the 10 BNB originally. So that’s unfortunate for the person. But what about the liquidity pool and the price?
The current amount in the pool: 1001.89 BNB and 999.0 Safemoon.
The current price: 1.0028 BNB/SafeMoon.
So the price has gone up compared to the initial 1 BNB/SafeMoon! This is at the cost of the person losing some BNB which has been transferred to the liquidity pool, and some SafeMoon which got redistributed to the holders.
If we repeat this process of buying and selling with whatever we have left for 200 iterations (noting the price after each buy-sell cycle), we see that the price eventually settles to different price levels:
# Buy and sell with the current amount back and forthn = 200
price = []
B = 1000
T = 1000
b = 10for i in range(n):
price.append(B/T)
t, B, T = buy(b, B, T)
b, B, T = sell(t, B, T)
Note that in our experiment, our person has essentially lost all of their BNB/SafeMoon stack for Scenarios #2–#4 by recklessly trading back and forth. But the net effect on the price is an increase for all those 3 scenarios!
Given the same tax %, we can observe that Reflection results in a higher price than Auto-LP. Intuitively, this is due to the fact that with Auto-LP, we are injecting some SafeMoon tokens back into the liquidity pool while not adding any more BNB. This lowers the price slightly. The Auto-LP price is still higher than without tax at all since we are removing less BNB from the pool when there is a tax. But with Redistribution, that tax % of SafeMoon tokens are given to the holders, not put back into the liquidity pool.
Key takeaway: HODL your SafeMoon. Let others do the trading back and forth and drive the price up over time.
Experiment 2: Alternating buy and sell, but each sell is 5% more than what you received from buying.
Let’s see what happens when there’s some extra selling pressure. Whenever there is a buy and the person receives some tokens, the person sells all of it plus an additional 5% (perhaps they’re a whale) extra tokens on top of what they received earlier. We repeat this process for 200 iterations.
# Buy and sell with the current amount back and forthn = 200
price = []
B = 1000
T = 1000
b = 10
r_sell = 0.05for i in range(n):
price.append(B/T)
t, B, T = buy(b, B, T)
b, B, T = sell(t*(1+r_sell), B, T)
Without the tax, selling more than buying will inevitably drive down the price fairly quickly. However, with some form of tax, we observe that the price still can increase! Once again, the Reflection-only tokenomics seems to win out in terms of the price increase.
Experiment 3: Alternating buy and sell, but each sell is 10% more than what you received from buying.
We’re now cranking up the selling pressure:
Now we observe that Auto-LP 5% alone is insufficient for keeping the price up. But at least it is slowing down the decay much more than without the tax.
Experiment 4: Alternating buy and sell, but each sell is 15% more than what you received from buying.
Let’s see the results:
At 15% more selling than buying, we see that the Reflection 5% alone is insufficient for preventing the price decay, but the full Reflection 5% + Auto-LP 5% combo (in red) can still maintain the price.
Experiment 5: Alternating buy and sell, but each sell is 20% more than what you received from buying.
At this percentage level, we see that the price has decreased now for all scenarios. But the Scenario #4 with full SafeMoon tokenomics settles to a price around 0.985 BNB/SafeMoon, which is much better than decaying to a price of 0 BNB/Safemoon.
That begs the question: At what % selling pressure will we see scenario #4 decline to zero?
Experiment 6: Alternating buy and sell, but each sell is 23.46% more than what you received from buying.
The 23.46% comes from 1/(0.9*0.9)-1, which represents the amount of price gain needed to break even. This is because you pay a 10% fee to buy, and also a 10% fee to sell.
At this point, we have so much sell pressure that even our full SafeMoon tokenomics cannot maintain the price, and is slowly declining down towards zero. Note here that we’ve increased the time steps to 2000, or 10 times compared to the previous experiments. This illustrates how stable the price is, even in the face of larger selling pressure.
Experiment 7: Alternate between buying with 10 BNB and selling with 10 SafeMoon.
Let’s illustrate another type of scenario: we are buying/selling with a constant amount of BNB/SafeMoon over a period of time.
In this experiment, we see that having no tax actually turns out to be the better tokenomics. The full SafeMoon protocol still outperforms the other 2 scenarios with only one of the components, settling into a price of around 0.85 BNB/SafeMoon. We suspect this experiment is the mental model of the recent article discussing the Auto-LP aspect of the tokenomics, which argued that the Auto-LP drives down the price of SafeMoon, while essentially handing over 5% to the developers who own the liquidity. We will not comment on the intentions of the SafeMoon developers nor speculate on what happens with this generated liquidity. The article aims to simply understand more concretely how these tokenomics affect the dynamics of the price over time under various scenarios.
Conclusion
If you have made it this far in this deep-dive article, congratulations! You’ve earned a badge in our books. We set out to explore the price evolution of a token with either no tax, reflection only, auto-liquidity pool generation only, or both, under a simple toy simulation environment. While we had to make several simplifying assumptions, we were able to define the precise equations governing the price dynamics of the buy/sell orders under different tokenomics. In many scenarios, it appears that these components together indeed help to stabilize the price level, and sometimes even increase the price, compared to the no-tax scenario (but not always!). We also found that the Reflection mechanism drives up the price more compared to Auto-LP, at the same tax percentage. Perhaps these tokenomics helped to magnify the explosive rise in the price of SafeMoon in the first few weeks, which in turn brought more interested buyers FOMOing in. We will be definitely keeping an eye on SafeMoon as it develops further!