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

[consensus] change PID output to clipped values

mohab metwally 3 лет назад
Родитель
Сommit
bc267003e5
2 измененных файлов с 7 добавлено и 6 удалено
  1. 3 0
      src/consensus/constants.rs
  2. 4 6
      src/consensus/state.rs

+ 3 - 0
src/consensus/constants.rs

@@ -44,6 +44,8 @@ lazy_static! {
     // Consensus parameters
     pub static ref  TI: Float10 = FLOAT10_ONE.clone() / FLOAT10_TEN.clone();
     pub static ref  TD: Float10 = FLOAT10_ONE.clone() / FLOAT10_TEN.clone();
+
+    pub static ref PID_OUT_STEP: Float10  = Float10::from_str_native("0.1").unwrap().with_precision(RADIX_BITS).value();
 }
 
 /// Block version number
@@ -69,6 +71,7 @@ pub const LEADER_PROOF_K: u32 = 13;
 
 // TODO: Describe these constants
 pub const RADIX_BITS: usize = 76;
+
 pub const P: &str = "28948022309329048855892746252171976963363056481941560715954676764349967630337";
 pub const LOTTERY_HEAD_START: u64 = 1;
 pub const PRF_NULLIFIER_PREFIX: u64 = 0;

+ 4 - 6
src/consensus/state.rs

@@ -617,12 +617,10 @@ impl ValidatorState {
                 constants::TD.clone() * d.clone());
         while f <= zero.clone() || f >= one.clone() {
             let mut clipped_f = f;
-            while clipped_f <= zero.clone() || clipped_f >= one.clone() {
-                if clipped_f >= one.clone() {
-                    clipped_f -= one.clone();
-                } else if clipped_f <= zero.clone() {
-                    clipped_f += one.clone();
-                }
+            if clipped_f >=one {
+                clipped_f = one - constants::PID_OUT_STEP;
+            } else if clipped_f<=zero {
+                clipped_f = zero + constants::PID_OUT_STEP;
             }
             let clipped_kp = clipped_f /
                 (p.clone() +