vesting.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 logging
  7. import config
  8. import os
  9. logging.basicConfig(filename='log/vesting.log', encoding='utf-8', level=logging.DEBUG)
  10. def vesting_instance(vesting, running_time):
  11. os.system("rm log/*_feedback.hist; rm log/*_output.hist log/darkie* log/rewards.log")
  12. native_drk = ERC20DRK * config.exchange_rate
  13. total_vesting = 0
  14. if __name__ == "__main__":
  15. darkies = []
  16. id = 0
  17. for name, distrib in vesting.items():
  18. darkies += [Darkie(distrib[0] , vesting=distrib, strategy=random_strategy(EPOCH_LENGTH))]
  19. id+=1
  20. total_vesting+=distrib[-1]
  21. airdrop = 0
  22. for darkie in darkies:
  23. airdrop+=darkie.stake
  24. print("initial airdrop: {}/{}% on {} nodes".format(airdrop, airdrop/native_drk*100, len(darkies)))
  25. print('total predistribution: {}/{}%'.format(total_vesting, total_vesting/native_drk*100))
  26. 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)
  27. for darkie in darkies:
  28. dt.add_darkie(darkie)
  29. dt.background(rand_running_time=False)
  30. dt.write()
  31. return dt.avg_apr()
  32. if not os.path.exists(config.vesting_file):
  33. print('add vested distribution csv at path {} with vesting period {} (slots) aparts.'.format(config.vesting_file, ONE_MONTH))
  34. exit()
  35. vesting = {}
  36. with open(config.vesting_file) as f:
  37. for node in f.readlines():
  38. keyval = node.split(',')
  39. key = keyval[0]
  40. val = ','.join(keyval[1:])
  41. vesting[keyval[0]] = eval(eval(val))
  42. nodes = len(vesting)
  43. if config.running_time== 0:
  44. print("Running time is set to 0. Starting sim for whole vesting period...")
  45. running_time = len(next(iter(vesting.values())))*VESTING_PERIOD
  46. else:
  47. running_time = config.running_time
  48. apr = vesting_instance(vesting, running_time)
  49. print('avg apr: {}%'.format(apr*100))
  50. draw()