浏览代码

validator/verification: verify block powdata when validating block

skoupidi 8 月之前
父节点
当前提交
211b85b242
共有 1 个文件被更改,包括 9 次插入3 次删除
  1. 9 3
      src/validator/verification.rs

+ 9 - 3
src/validator/verification.rs

@@ -144,10 +144,11 @@ pub async fn verify_genesis_block(
 ///
 ///
 /// A block is considered valid when the following rules apply:
 /// A block is considered valid when the following rules apply:
 ///     1. Block version is correct for its height
 ///     1. Block version is correct for its height
-///     2. Parent hash is equal to the hash of the previous block
+///     2. Previous hash is equal to the hash of the provided previous block
 ///     3. Block height increments previous block height by 1
 ///     3. Block height increments previous block height by 1
 ///     4. Timestamp is valid based on PoWModule validation
 ///     4. Timestamp is valid based on PoWModule validation
-///     5. Block hash is valid based on PoWModule validation
+///     5. Block header Proof of Work data are valid
+///     6. Block hash is valid based on PoWModule validation
 /// Additional validity rules can be applied.
 /// Additional validity rules can be applied.
 pub fn validate_block(block: &BlockInfo, previous: &BlockInfo, module: &PoWModule) -> Result<()> {
 pub fn validate_block(block: &BlockInfo, previous: &BlockInfo, module: &PoWModule) -> Result<()> {
     // Check block version (1)
     // Check block version (1)
@@ -170,7 +171,12 @@ pub fn validate_block(block: &BlockInfo, previous: &BlockInfo, module: &PoWModul
         return Err(Error::BlockIsInvalid(block.hash().as_string()))
         return Err(Error::BlockIsInvalid(block.hash().as_string()))
     }
     }
 
 
-    // Check block hash corresponds to next one (5)
+    // Check PoW data validty (5)
+    if !block.header.validate_powdata() {
+        return Err(Error::BlockIsInvalid(block.hash().as_string()))
+    }
+
+    // Check block hash corresponds to next  mine target (6)
     module.verify_block_hash(&block.header)?;
     module.verify_block_hash(&block.header)?;
 
 
     Ok(())
     Ok(())