vesting.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from core.lottery import *
  2. from core.strategy import random_strategy
  3. from core.constants import *
  4. from pid.pid_base import *
  5. from draw import draw
  6. import os
  7. def vesting_instance(vesting, running_time):
  8. os.system("rm log/*_feedback.hist; rm log/*_output.hist log/darkie* log/rewards.log")
  9. print('running time: {}'.format(running_time))
  10. total_vesting = 0
  11. if __name__ == "__main__":
  12. darkies = []
  13. id = 0
  14. for name, distrib in vesting.items():
  15. darkies += [Darkie(distrib[0] , vesting=distrib, strategy=random_strategy(EPOCH_LENGTH))]
  16. id+=1
  17. total_vesting+=distrib[-1]
  18. airdrop = 0
  19. for darkie in darkies:
  20. airdrop+=darkie.stake
  21. print("network airdrop: {}/{}% on {} nodes".format(airdrop, airdrop/ERC20DRK*100, len(darkies)))
  22. print('total vesting: {}/{}%'.format(total_vesting, total_vesting/ERC20DRK*100))
  23. dt = DarkfiTable(airdrop, running_time, kp=-0.010399999999938556, ki=-0.0365999996461878, kd=0.03840000000000491, r_kp=-2.53, r_ki=29.5, r_kd=53.77)
  24. for darkie in darkies:
  25. dt.add_darkie(darkie)
  26. dt.background(rand_running_time=False)
  27. dt.write()
  28. return dt.avg_apr()
  29. if not os.path.exists(VESTING_FILE):
  30. print('add vested distribution csv at path {} with vesting period {} (slots) aparts.'.format(VESTING_FILE, ONE_MONTH))
  31. exit()
  32. vesting = {}
  33. with open(VESTING_FILE) as f:
  34. for node in f.readlines():
  35. keyval = node.split(',')
  36. key = keyval[0]
  37. val = ','.join(keyval[1:])
  38. vesting[keyval[0]] = eval(eval(val))
  39. nodes = len(vesting)
  40. running_time = input("running time (leave it empty to run the whole vesting running time):")
  41. if running_time=='':
  42. running_time = len(next(iter(vesting.values())))*VESTING_PERIOD
  43. else:
  44. running_time = int(running_time)
  45. apr = vesting_instance(vesting, running_time)
  46. print('avg apr: {}%'.format(apr*100))
  47. draw()