Просмотр исходного кода

[research/lotterysim] turn off staking strategies during headstart period

ertosns 3 лет назад
Родитель
Сommit
9dc54e6e3f

+ 3 - 3
script/research/lotterysim/core/constants.py

@@ -33,9 +33,9 @@ ONE_YEAR = 365.25*24*60*60/SLOT
 # vesting issuance period
 VESTING_PERIOD = ONE_MONTH
 # stakeholder assumes  APR target
-TARGET_APR = 0.12
+TARGET_APR = 0.15
 # primary controller assumes accuracy target
-PRIMARY_REWARD_TARGET = 0.33 # staked ratio
+PRIMARY_REWARD_TARGET = 0.35 # staked ratio
 # secondary controller assumes certain frequency of leaders per slot
 SECONDARY_LEAD_TARGET = 1 #number of lead per slot
 # maximum transaction size
@@ -55,7 +55,7 @@ ACC_WINDOW = int(EPOCH_LENGTH)*10
 # headstart airdrop period
 HEADSTART_AIRDROP = ONE_MONTH
 # threshold of randomly slashing stakeholder
-SLASHING_RATIO = 0.00001
+SLASHING_RATIO = 0.000005
 # number of nodes
 NODES = 1000
 # headstart value

+ 5 - 0
script/research/lotterysim/core/darkie.py

@@ -17,6 +17,7 @@ class Darkie():
         self.tips = [0]
         self.idx=idx
         self.aprs = [] #milinial aprs. every 1k slots ~ 1day
+        self.slashed = False
 
     def clone(self):
         return Darkie(self.stake)
@@ -176,6 +177,7 @@ class Darkie():
             buf += '\r\n'
             buf += 'mil-aprs: {}'.format(','.join([str(apr) for apr in self.aprs]))
             buf += '\r\n'
+            buf += 'slashed: {}'.format(str(self.slashed))
             f.write(buf)
 
     """
@@ -207,6 +209,9 @@ class Darkie():
     def last_fee(self):
         return self.fees[-1] if len(self.fees)>0 else 0
 
+    def set_slashed(self):
+        self.slashed = True
+
 class Tx(object):
     def __init__(self, size, tip, idx):
         self.tx = [random.random() for _ in range(size)]

+ 17 - 1
script/research/lotterysim/core/strategy.py

@@ -28,6 +28,10 @@ class Hodler(Strategy):
         self.type = 'hodler'
 
     def set_ratio(self, slot, apr):
+        if slot < HEADSTART_AIRDROP:
+            self.staked_tokens_ratio += [1]
+            self.annual_return +=[apr]
+            return
         if slot%self.epoch_len==0:
             self.staked_tokens_ratio += [1]
             self.annual_return +=[apr]
@@ -38,6 +42,10 @@ class LinearStrategy(Strategy):
         self.type = 'linear'
 
     def set_ratio(self, slot, apr):
+        if slot < HEADSTART_AIRDROP:
+            self.staked_tokens_ratio += [1]
+            self.annual_return +=[apr]
+            return
         if slot%self.epoch_len==0:
                 sr = (apr)/(self.target)
                 if sr>1:
@@ -53,6 +61,10 @@ class LogarithmicStrategy(Strategy):
         self.type = 'logarithmic'
 
     def set_ratio(self, slot, apr):
+        if slot < HEADSTART_AIRDROP:
+            self.staked_tokens_ratio += [1]
+            self.annual_return +=[apr]
+            return
         if slot%self.epoch_len==0:
                 apr_ratio = math.fabs(apr/self.target)
                 fn = lambda x: (math.log(x, 10)+1)/2 * 0.95 + 0.05
@@ -70,6 +82,10 @@ class SigmoidStrategy(Strategy):
         self.type = 'sigmoid'
 
     def set_ratio(self, slot, apr):
+        if slot < HEADSTART_AIRDROP:
+            self.staked_tokens_ratio += [1]
+            self.annual_return +=[apr]
+            return
         if slot%self.epoch_len==0:
                 apr_ratio = apr/self.target
                 apr_ratio = max(apr_ratio, 0)
@@ -196,4 +212,4 @@ class Generous(Tip):
 
 
 def random_tip_strategy():
-    return random.choice([ZeroTip(),  MilthOfReward(), MilthCCApr(), Conservative(), Generous()])
+    return random.choice([ZeroTip(), RewardApr(), TenthReward(), HundredthOfReward(), TenthRewardApr(), MilthOfReward(), TenthCCApr(), HundredthCCApr(), MilthCCApr(), Conservative(), Generous()])