About APR dynamics

A recent discussion on the forums grabbed my attention as it seemed a majority of people had a different understanding about the workings of GTON rewards and APR as I did.

The question is, how should we assign rewards (as APR) for each pool in order to adequetly reward the liquidity providers of the variety of pools.

In short, I postulated that the rewards will only influence the liquidity present within each pool, and will not influence the eventual APR of people holding liquidity in that pool. The APR that each pool will status quo to is determined by the risk/reward characteristics of the combined user base holding GTON. In some cases, users are willing to take higher risks for less rewards. In this case, this refers to providing liquidity to a paired tokens pool instead of staking. Risk: impermanent loss; reward; higher APR.

Link to start discussion: Telegram: Contact @graviton_community

For fun, I decided to make a simulation (in python).

I describe the population of GTON holders by the minimum reward required for them to move their liquidity from staking to liquidity pairs.

For example, a user with min_APR_diff = 0.4 will only provide liquidity to LP when the APR difference is at least 40%. The population is for this example is described as (distribution):

image

The implemented code basically runs a simulation over x days where liquidity providers change pools depending on whether the constraints are met. On each day, only 5% of the GTON holders are evaluated whether they change pools, ordered according to how long ago the GTON holder was evaluated. Simply put, every GTON holder evaluates their position every 20 days.

For simplicity pf implementation, each liquidity provider is assumed to hold the same amount of GTON. Therefore, # members in pool is a proxy for the amount of liquidity in that pool.

The change through time of members and APR of each pool where the reward allocated for LP is 4 times higher than staking (rewards = np.array([20, 80]))

The change through time of members and APR of each pool where the reward allocated for LP is 2 times higher than staking (rewards = np.array([33, 67]))

As expected, the APR of both pools approach the same status quo, independent of the reward allocation for each pool. Differences in APR between pools can be achieved by changing the decision-making characteristics of the user base.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

samples = 1000
max_change_per_day = 0.05

rewards = np.array([40, 60])
members = np.array([samples, 0])

users =  np.abs(np.random.normal(0.4, scale=0.1, size=samples))

data = pd.DataFrame(np.array([users, np.full(users.shape, fill_value=999, dtype=np.int32), np.zeros_like(users, dtype=int)], dtype=object).T, columns=['min_APR_diff', 'days_since_change', 'pool'])

APRs = []
members_d = []
for day in np.arange(50):
    members_d.append(members.copy())
    APR = rewards/np.maximum(members, 1)
    APRs.append(APR)
    for i, user in data.sort_values('days_since_change')[-int(samples*max_change_per_day):].iterrows():
        APR = rewards/np.maximum(members, 1)
        if max(APR) > (user.min_APR_diff+1)*APR[user.pool]:
            members[user.pool] -= 1
            user.pool = np.argmax(APR)
            members[user.pool] += 1
            user.days_since_change = 0
            data.loc[i] = user
    
            
        
            

fig, ax = plt.subplots(1,2, figsize=(12,6))
axes = ax.ravel()

labels = ['pool 1', 'pool 2']
lines = []
for pool in range(2):
    lines.append(axes[0].scatter(np.arange(len(members_d)), np.array(members_d)[:, pool], ))
    axes[1].scatter(np.arange(len(APRs)), np.array(APRs)[:,pool])
    
    
axes[0].set_title('# members in pool')
axes[1].set_title('Pool APR')
axes[1].set_ylim(0,0.2)
axes[0].set_xlabel('time')
axes[1].set_xlabel('time')
fig.legend(lines, labels)
fig.suptitle(f'REWARD STAKING/LP = {rewards[0]/rewards[1]}       MEMBERS STAKING/POOL = {members_d[-1][0]/members_d[-1][1]}')
3 Likes

Apes will drool over APR and ‘arbitrage liquidity’ to where ever they get max bananas.
Reward adjustment will have to be tailored dynamically somehow if an even liquidity spread is to be achieved cross chains

I am convinced that the difference in APR will be driven by users’ individual preferences and expectations - it cannot be set by the DAO or anybody else.

However, the allocation to each pool can change the total amount that is going into the individual LP pools or into staking. If we want to add more liquidity to a specific pool, increasing their rewards share will do the job.

NIce modelling by the way, Jim!

1 Like

Exactly the point I was trying to make. The reward allocation determines the amount of liquidity in each pool when the status quo is reached. As it is hard to determine the status quo beforehand it makes sense to dynamically adjust this in accordance to what is best for GTON.
For this reason, I do think the reward allocations should be set by experts that have an understanding of what the optimal distribution of liquidity across the pools is (in accordance to letting the project grow).
The notion that a higher reward for some pools will result in higher APRs in that pool is bullocks (except for minor effects maybe).

1 Like

Good work :+1:.

Distributing the same amount of reward to each Graviton / stablecoin pools would make less liquid pools more attractive and this way it would equalize all pools.

But for Graviton / NT pools it may be necessary to adjust reward each time if an NT loses 10% and another gains 20% and the third jumps 50% and so on.

Sometimes coins pump & dump in a short time. Sometimes most of the coins join bull run (or bear market) but some start very late.

How should we act to differentiate between 100% jump and 50% dump in a week and real growth of NTs? Should we adjust the reward each week or wait and see if the price action is stable?

:eyes:
Or, we can setup “equal” allocations to check the theory, right? Based on LP activity we’ll have better understanding of people’s behavior and decision making.

Despite the fact that majority of DeFi users aren’t 100%-rational and we also have investment predictions here (people willing to keep GTON/NT during bull market expectations), I very much like your simulations.
Amazing work! :muscle:

2 Likes

Great job indeed. Nevertheless, I’m still not quite sure what you mean by: “…the liquidity present within each pool, and will not influence the eventual APR of people holding liquidity in that pool. The APR that each pool will status quo to is determined by the risk/reward characteristics of the combined user base holding GTON.”, so i would appreciate if you could provide some more details on that end.

Last but not least, i would also like to see a flexible APR with respect to the balance status of the pool, e.g., if we have a very much unbalanced pool, we might want to lower the APR in order to get LPs engaged in arbing the pool back to balance. Of course we would be running the risk here that LPs rather switch to another pool than arbing it back to balance.

What is your take on this?

Cheers
Marc

Despite the fact that majority of DeFi users aren’t 100%-rational and we also have investment predictions here (people willing to keep GTON/NT during bull market expectations), I very much like your simulations.
Amazing work!

This is fair, although I doubt these people will have an impact.
The simulation comes nonetheless with a load of assumptions, which might give the wrong results if proven wrong.

Great job indeed. Nevertheless, I’m still not quite sure what you mean by: “…the liquidity present within each pool, and will not influence the eventual APR of people holding liquidity in that pool. The APR that each pool will status quo to is determined by the risk/reward characteristics of the combined user base holding GTON.”, so i would appreciate if you could provide some more details on that end.

Well, as the simulation shows, changing reward allocations in each pool does not change the status quo.
What would change the status quo is changing the decision-making bounderies of the user base. For example, if the user base is generally more oriented in secure investments, the status quo APR would change. Practically, this equals shifting the mean of the min_APR_diff towards a higher value.

1 Like

This is incredible great work.

1 Like