Răsfoiți Sursa

validator: fixed not saving PoW module updates to db

skoupidi 2 ani în urmă
părinte
comite
c15facda1c
2 a modificat fișierele cu 19 adăugiri și 4 ștergeri
  1. 14 3
      src/validator/consensus.rs
  2. 5 1
      src/validator/mod.rs

+ 14 - 3
src/validator/consensus.rs

@@ -26,7 +26,10 @@ use sled_overlay::database::SledDbOverlayState;
 use smol::lock::RwLock;
 
 use crate::{
-    blockchain::{BlockInfo, Blockchain, BlockchainOverlay, BlockchainOverlayPtr, Header},
+    blockchain::{
+        block_store::BlockDifficulty, BlockInfo, Blockchain, BlockchainOverlay,
+        BlockchainOverlayPtr, Header,
+    },
     tx::Transaction,
     util::time::Timestamp,
     validator::{
@@ -539,8 +542,16 @@ impl Fork {
         // Calculate block rank
         let (target_distance_sq, hash_distance_sq) = block_rank(&proposal.block, &next_target)?;
 
-        // Update PoW module
-        self.module.append(proposal.block.header.timestamp, &next_difficulty);
+        // Generate block difficulty and update PoW module
+        let cummulative_difficulty =
+            self.module.cummulative_difficulty.clone() + next_difficulty.clone();
+        let block_difficulty = BlockDifficulty::new(
+            proposal.block.header.height,
+            proposal.block.header.timestamp,
+            next_difficulty,
+            cummulative_difficulty,
+        );
+        self.module.append_difficulty(&self.overlay, block_difficulty)?;
 
         // Update fork ranks
         self.targets_rank += target_distance_sq;

+ 5 - 1
src/validator/mod.rs

@@ -358,12 +358,16 @@ impl Validator {
         let finalized_blocks =
             fork.overlay.lock().unwrap().get_blocks_by_hash(&finalized_proposals)?;
 
-        // Apply finalized proposals diffs
+        // Apply finalized proposals diffs and update PoW module
+        let mut module = self.consensus.module.write().await;
         info!(target: "validator::finalization", "Finalizing proposals:");
         for (index, proposal) in finalized_proposals.iter().enumerate() {
             info!(target: "validator::finalization", "\t{} - {}", proposal, finalized_blocks[index].header.height);
             fork.overlay.lock().unwrap().overlay.lock().unwrap().apply_diff(&mut diffs[index])?;
+            let next_difficulty = module.next_difficulty()?;
+            module.append(finalized_blocks[index].header.timestamp, &next_difficulty);
         }
+        drop(module);
         drop(forks);
 
         // Reset forks starting with the finalized blocks