check equihash solution covers the block header (#607)

This commit is contained in:
Alfredo Garcia 2020-07-08 07:58:20 -03:00 committed by GitHub
parent 959f029457
commit c8cbb08ae3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 34 additions and 0 deletions

View File

@ -94,6 +94,7 @@ where
let now = Utc::now(); let now = Utc::now();
node_time_check(block.header.time, now)?; node_time_check(block.header.time, now)?;
block.header.is_equihash_solution_valid()?;
// `Tower::Buffer` requires a 1:1 relationship between `poll()`s // `Tower::Buffer` requires a 1:1 relationship between `poll()`s
// and `call()`s, because it reserves a buffer slot in each // and `call()`s, because it reserves a buffer slot in each
@ -471,4 +472,37 @@ mod tests {
Ok(()) Ok(())
} }
#[tokio::test]
#[spandoc::spandoc]
async fn header_solution() -> Result<(), Report> {
install_tracing();
// Service variables
let state_service = Box::new(zebra_state::in_memory::init());
let mut block_verifier = super::init(state_service);
let ready_verifier_service = block_verifier.ready_and().await.map_err(|e| eyre!(e))?;
// Get a valid block
let mut block =
Block::zcash_deserialize(&zebra_test::vectors::BLOCK_MAINNET_415000_BYTES[..])
.expect("block test vector should deserialize");
// This should be ok
ready_verifier_service
.call(Arc::new(block.clone()))
.await
.map_err(|e| eyre!(e))?;
// Change nonce to something invalid
block.header.nonce = [0; 32];
// Error: invalid equihash solution for BlockHeader
ready_verifier_service
.call(Arc::new(block.clone()))
.await
.expect_err("expected the equihash solution to be invalid");
Ok(())
}
} }