mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-10 07:08:05 -05:00
[research/lotterysim] emulate slashing as random process with certain low probability
This commit is contained in:
@@ -40,4 +40,5 @@ BASE_L = 0.0001*L
|
||||
BASE_L_HP = Num(BASE_L)
|
||||
|
||||
# HEADSTART AIRDROP period ~ 1 month
|
||||
HEADSTART_AIRDROP=28800
|
||||
HEADSTART_AIRDROP=2880
|
||||
SLASHING_RATIO = 0.0001
|
||||
|
||||
@@ -5,7 +5,7 @@ from datetime import timedelta
|
||||
from core.darkie import *
|
||||
from pid.cascade import *
|
||||
from tqdm import tqdm
|
||||
|
||||
import random
|
||||
class DarkfiTable:
|
||||
def __init__(self, airdrop, running_time, controller_type=CONTROLLER_TYPE_DISCRETE, kp=0, ki=0, kd=0, dt=1, kc=0, ti=0, td=0, ts=0, debug=False, r_kp=0, r_ki=0, r_kd=0):
|
||||
self.Sigma=airdrop
|
||||
@@ -52,12 +52,10 @@ class DarkfiTable:
|
||||
total_stake = 0
|
||||
for i in range(len(self.darkies)):
|
||||
self.darkies[i].set_sigma_feedback(self.Sigma, feedback, f, count, hp)
|
||||
#self.darkies[i].update_vesting()
|
||||
self.darkies[i].update_vesting()
|
||||
self.darkies[i].run(hp)
|
||||
total_stake += self.darkies[i].stake
|
||||
#if self.darkies[i].stake>0:
|
||||
#print('darkie {} has stake {} for slot {}'.format(i, self.darkies[i].stake, count))
|
||||
#print('reward: {}'.format(rewards[-1]))
|
||||
|
||||
for i in range(len(self.darkies)):
|
||||
winners += self.darkies[i].won_hist[-1]
|
||||
###
|
||||
@@ -66,6 +64,10 @@ class DarkfiTable:
|
||||
if self.winners[-1]==1:
|
||||
for i in range(len(self.darkies)):
|
||||
if self.darkies[i].won_hist[-1]:
|
||||
if random.random() < SLASHING_RATIO:
|
||||
self.darkies.remove(self.darkies[i])
|
||||
print('stakeholder {} slashed'.format(i))
|
||||
break
|
||||
self.darkies[i].update_stake(self.rewards[-1])
|
||||
break
|
||||
# resolve finalization
|
||||
@@ -91,7 +93,7 @@ class DarkfiTable:
|
||||
break
|
||||
self.darkies[darkie_winning_idx].resync_stake(resync_reward)
|
||||
self.Sigma += resync_reward
|
||||
rt_range.set_description('issuance {} DRK, acc: {}, stake = {}%'.format(round(sum(self.rewards),2), round(acc,2), round(total_stake/self.Sigma*100 if self.Sigma>0 else 0,2)))
|
||||
rt_range.set_description('issuance {} DRK, acc: {}, stake = {}%, sr: {}%, reward:{}'.format(round(sum(self.rewards),2), round(acc,2), round(total_stake/self.Sigma*100 if self.Sigma>0 else 0,2), self.avg_stake_ratio()*100, self.rewards[-1]))
|
||||
#print('[2]stake: {}, sigma: {}, reward: {}'.format(total_stake, self.Sigma, self.rewards[-1]))
|
||||
assert(round(total_stake,1) <= round(self.Sigma,1))
|
||||
count+=1
|
||||
|
||||
@@ -10,11 +10,11 @@ from draw import draw
|
||||
os.system("rm log/*_feedback.hist; rm log/*_output.hist")
|
||||
|
||||
RUNNING_TIME = int(input("running time:"))
|
||||
NODES=100
|
||||
NODES=1000
|
||||
|
||||
if __name__ == "__main__":
|
||||
darkies = [Darkie(0, strategy=LinearStrategy(EPOCH_LENGTH)) for _ in range(NODES)]
|
||||
dt = DarkfiTable(0, RUNNING_TIME, CONTROLLER_TYPE_DISCRETE, kp=-0.010399999999938556, ki=-0.0365999996461878, kd=0, r_kp=-0.63, r_ki=3.35, r_kd=0)
|
||||
dt = DarkfiTable(0, RUNNING_TIME, CONTROLLER_TYPE_DISCRETE, kp=-0.010399999999938556, ki=-0.0365999996461878, kd=0.03840000000000491, r_kp=-2.53, r_ki=29.5, r_kd=53.77)
|
||||
for darkie in darkies:
|
||||
dt.add_darkie(darkie)
|
||||
acc, avg_apy, avg_reward, stake_ratio, avg_apr = dt.background(rand_running_time=False)
|
||||
|
||||
Reference in New Issue
Block a user