Procházet zdrojové kódy

[research/lotterysim] update Sigma (total stake) with primary reward with headstart

ertosns před 3 roky
rodič
revize
e9e2de886d

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

@@ -36,7 +36,7 @@ REWARD_MAX_HP = Num(REWARD_MAX)
 
 ACC_WINDOW = 100
 
-BASE_L = 0.001*L
+BASE_L = 0.0001*L
 BASE_L_HP = Num(BASE_L)
 
 # HEADSTART AIRDROP period ~ 1 month

+ 4 - 6
script/research/lotterysim/core/darkie.py

@@ -27,15 +27,13 @@ class Darkie():
     def vesting_wrapped_initial_stake(self):
         #print('initial stake: {}, corresponding vesting: {}'.format(self.initial_stake[0], self.vesting[int((self.slot)/VESTING_PERIOD)]))
         # note index is previous slot since update_vesting is called after background execution.
-        return self.current_vesting() if self.slot>0 else self.initial_stake[0]
+        return self.current_vesting() if self.slot>0 else self.initial_stake[-1]
 
     def apr_scaled_to_runningtime(self):
         initial_stake = self.vesting_wrapped_initial_stake()
-        if initial_stake==0:
-            initial_stake = self.initial_stake[0]
         #print('stake: {}, initial_stake: {}'.format(self.stake, initial_stake))
         assert self.stake >= initial_stake, 'stake: {}, initial_stake: {}, slot: {}, current: {}, previous: {} vesting'.format(self.stake, initial_stake, self.slot, self.current_vesting(), self.prev_vesting())
-        return Num(self.stake - initial_stake) / Num(initial_stake) *  Num(ONE_YEAR/(self.slot/EPOCH_LENGTH)) if self.slot> 0 and self.initial_stake[0]>0 else 0
+        return Num(self.stake - initial_stake) / Num(initial_stake) *  Num(ONE_YEAR/(self.slot/EPOCH_LENGTH)) if self.slot> 0 and initial_stake>0 else 0
 
     def staked_tokens(self):
         '''
@@ -81,7 +79,7 @@ class Darkie():
         self.won_hist += [won]
 
     def update_vesting(self):
-        self.stake+= self.vesting_differential()
+        self.stake += self.vesting_differential()
 
     def current_vesting(self):
         '''
@@ -95,7 +93,7 @@ class Darkie():
         previous corresponding slot vesting
         '''
         prev_vesting_idx = int((self.slot-1)/VESTING_PERIOD)
-        return (self.vesting[prev_vesting_idx] if self.slot>0 else self.current_vesting()) if prev_vesting_idx < len(self.vesting) else 0
+        return (self.vesting[prev_vesting_idx] if self.slot>0 else self.current_vesting()) if prev_vesting_idx < len(self.vesting) else  0
 
     def vesting_differential(self):
         vesting_value =  self.current_vesting() - self.prev_vesting()

+ 11 - 5
script/research/lotterysim/core/lottery.py

@@ -47,13 +47,16 @@ class DarkfiTable:
                 reward = self.primary_pid.pid_clipped(acc, debug)
                 self.rewards += [reward]
 
-            rt_range.set_description('issuance {} DRK, acc: {}'.format(round(sum(self.rewards),2), round(acc,2)))
+
             #note! thread overhead is 10X slower than sequential node execution!
+            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,8 +69,7 @@ class DarkfiTable:
                         self.darkies[i].update_stake(self.rewards[-1])
                         break
                 # resolve finalization
-                if count >= ERC20DRK:
-                    self.Sigma += 1
+                self.Sigma += self.rewards[-1]
                 # resync nodes
                 merge_length = 0
                 for i in reversed(self.winners[:-1]):
@@ -88,6 +90,10 @@ class DarkfiTable:
                             darkie_winning_idx = darkie_idx
                             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)))
+            #print('[2]stake: {}, sigma: {}, reward: {}'.format(total_stake, self.Sigma, self.rewards[-1]))
+            assert(round(total_stake,1) <= round(self.Sigma,1))
             count+=1
         self.end_time=time.time()
         avg_reward = sum(self.rewards)/len(self.rewards)

+ 2 - 2
script/research/lotterysim/plot_darkies.py

@@ -20,8 +20,8 @@ for darkie in darkies:
 
 legends = []
 for darkie in darkies:
-    legend = ["darkie{}, apr: {}".format(darkie[2], format(darkie[1]))]
+    legend = ["darkie{}".format(darkie[2])]
     legends +=[legend]
 plt.legend(legends)
-plt.show()
 plt.savefig("log/plot_darkies.png")
+#plt.show()