Changing formula for MNGO rewards in Liquidity Mining

I like the idea, but it seems a bit complex. There’s a lot of value in having something simple and easy to understand while still achieving our goals. Do you think it provides sufficient improvement over @iwillnotsaveyou’s idea?

Really hard to say without trying it out honestly. I do think it will benefit the book over what we currently have so in my opinion the only issue I have is if it can be abused or not. I do think the restrictions on the side are crucial such as a max time limit for this bucket of rewards to avoid farming for hours or days.

Edit: In general I think the first step is to try changing the way the function is done to (50, ^4) or whatever you had in mind and seeing the effect it has then adding this if that still does not work.

Rewards release schedule for RBG model - Three token rewards with power to the half PI rewards on a scale of 1461 days (4 years) from daily 0.01% to 314% compounded (end of year 4) here distributed in the chunks of division of 7 R, 77 G, 777 B


import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (10,10)

max_days = np.pi * 465
total_number_of_tokens = 21000000000 #21 Billion
total_number_of_rewards = 0.43 #43% for rewards
total_hft_rewards = total_number_of_tokens*total_number_of_rewards

def power_half_of_PI_reward(vesting_days, power_risk_curve=np.pi/2,
                       min_profit=0.0101, max_profit=np.pi * 100,  # (0.01% - 314%)
                       min_days=1, max_days=np.pi * 465):
    y = [min_profit, max_profit]  # two given datapoints to which the exponential function with power pw should fit
    x = [min_days, max_days]
    pw = power_risk_curve
    A = np.exp(np.log(y[0] / y[1]) / pw)
    a = (x[0] - x[1] * A) / (A - 1)
    b = y[0] / (x[0] + a) ** pw

    return round(((vesting_days + a) ** power_risk_curve) * b, 7)

def power_half_of_PI_reward2(vesting_days, power_risk_curve=np.pi/2,
                       min_profit=0.0101, max_profit=np.pi * 100,  # (0.01% - 314%)
                       min_days=1, max_days=np.pi * 465):
    y = [min_profit, max_profit]  # two given datapoints to which the exponential function with power pw should fit
    x = [min_days, max_days]
    pw = power_risk_curve
    A = np.exp(np.log(y[0] / y[1]) / pw)
    a = (x[0] - x[1] * A) / (A - 1)
    b = y[0] / (x[0] + a) ** pw

    return round(((vesting_days + a) ** power_risk_curve) * b, 7)


number_of_days = np.pi * 465
days = np.arange(0, number_of_days, 1)
curve = np.array([power_half_of_PI_reward2(day) for day in days])
infl = np.array([power_half_of_PI_reward2(day) for day in days])
#plt.show()


i = 1
rewards_budget = total_hft_rewards
rewards_budget_1 = total_hft_rewards
rewards_budget_2 = total_hft_rewards
rewards_budget_3 = total_hft_rewards
avg_rewards_per_days = total_hft_rewards/number_of_days


reward_plot = []
budget_inflation_1 = []
budget_inflation_2 = []
budget_inflation_3 = []

for c in curve:
    #print
    reward_emission_1 = rewards_budget_1 * i / (number_of_days-i)/7
    reward_emission_2 = rewards_budget_2 * i / (number_of_days-i)/77
    reward_emission_3 = rewards_budget_3 * i / (number_of_days-i)/777


    rewards_budget_1 = rewards_budget_1 - reward_emission_1
    rewards_budget_2 = rewards_budget_2 - reward_emission_2
    rewards_budget_3 = rewards_budget_3 - reward_emission_3


    budget_inflation_1.append(reward_emission_1)
    budget_inflation_2.append(reward_emission_2)
    budget_inflation_3.append(reward_emission_3)
    reward_plot.append(rewards_budget)

    '''
    print("Day " +str(i) + " Reward: " + str(c)  + " Governance Token issued: " + str(round(i/max_days*100,4)))
    print("reward budget " + str(round(rewards_budget,4)))
    print("reward emission " + str(round(reward_emission,4)))
    '''
    i = i + 1





'''
plt.annotate("1 day - daily inflation " + str(budget_inflation[1])+ " CHFT " +str(round(1/max_days*100,4)) +" Voting power Available", (1, budget_inflation[1]))
plt.annotate("**** 3.9 year -  daily inflation " + str(budget_inflation[1390])+ " CHFT " +str(round(1390/max_days*100,4))+" Voting power Available", (1, budget_inflation[1390]))
'''


fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('Vested days - maximum 4 years = 1461 days')
ax1.set_ylabel('release schedule rewards')
ax1.plot(days, budget_inflation_1, color=color)
ax1.plot(days, budget_inflation_2, color='tab:green')
ax1.plot(days, budget_inflation_3, color='tab:blue')

ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:purple'
ax2.set_ylabel('Purp (purple) - locked voting power to half PI based on RGB pool vesting', color=color)  # we already handled the x-label with ax1
ax2.plot(days, curve, color='tab:purple')
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()





'''
#plt.plot(days, curve)
fig, ax_left = plt.subplots()
ax_right = ax_left.twinx()

plt.xlabel('Vested days - maximum 4 years = 1461 days')
ax_right.label('Daily reward emissions')
plt.title('daily distribution schedule for total supply of 9 Billion R1/G1/B1 for liquidity mining \n collateral rewards (lending) for 43% of R1 token (ratio 35% vesting rewards / 8% buy G1 token) \n  orderbook liquidity rewards for 43% of G1 token (ratio 35% vesting rewards / 8% buy B1 token  \n vested power rewards for 43% of B1 token (ratio 35% vesting rewards / 8% buy R1 token) ')


plt.plot(days, budget_inflation_1, 'r')
plt.plot(days, budget_inflation_2, 'g')
plt.plot(days, budget_inflation_3, 'b')
#plt.plot(days, reward_plot, 'b')
#plt.plot(days, c, 'g') # plotting t, c separately
plt.show()
'''

How much does FTX, Binance, etc. spend on market making?

Obviously they have more users so at a certain point the market can make itself to a certain extent, but presumably they still have some deals in place.

We tried (50, ^4) and it wasn’t good enough because most of the risk was being taken by those at the top of the book, but vast majority (90%) of MNGO rewards were going to quoters quoting wide with very large size. We also are now trying (0, ^1) but it’s not going to work well unless there are competent full time market makers focusing on building systems for it. The rate param is moving around wildly and Mango blocks are taking much longer/shorter than the targeted 1 hour.

I’m working on building Top Size LM which essentially rewards the top N contracts quoted on the book. It’s a little bit hairy to make these changes while contract is already deployed. But I think it’s possible and I think it can be done in a week. But until then, we need to decide on what to do about liquidity mining.

Proposal 1

Reduce LM rewards to 0; Change fees to -4/5bps to reward MMs. And turn on LM again once Top Size is implemented

Proposal 2

Keep LM rewarsd but change it to something more reasonable like (20, ^4) or (20, ^8) until Top Size is implemented.

We also need to decide on some key design factors of Top Size, but maybe those technical decisions are better had in discord. We discuss them in the #governance channel.

Please advise on the liquidity mining!

New forum user, so pardon me if I point something that has already been discussed. It seems like full-time market makers would need a programmatic interface. Does such a thing exist?

I know the Citadel team was working on a Mango .Net interface. Perhaps some of the rewards would be better directed towards creating such tools.

1 Like

Yes, we’re waiting on locked Mangos in the DAO to be able to reward people appropriately.

Perfect. Citadel seems useful for an individual, but I’d expect that if we want full-time market makers, we should put out a MNGO bounty for something like Ichibot. This is likely a separate topic, though.

1 Like