From 681ad5984ba71cff81bd1592e7e2b75a9278739a Mon Sep 17 00:00:00 2001 From: NikVolf Date: Mon, 24 Oct 2016 11:58:35 +0300 Subject: [PATCH] merkle root --- verification/src/chain_verifier.rs | 9 ++++++++- verification/src/lib.rs | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/verification/src/chain_verifier.rs b/verification/src/chain_verifier.rs index ba839487..6bcfc050 100644 --- a/verification/src/chain_verifier.rs +++ b/verification/src/chain_verifier.rs @@ -77,12 +77,17 @@ impl Verify for ChainVerifier { return Err(Error::Timestamp); } + // verify merkle root + if block.merkle_root() != block.header().merkle_root_hash { + return Err(Error::MerkleRoot); + } + // check first transaction is a coinbase transaction if !block.transactions()[0].is_coinbase() { return Err(Error::Coinbase) } - // verify transactions + // verify transactions (except coinbase) for (idx, transaction) in block.transactions().iter().skip(1).enumerate() { try!(self.verify_transaction(transaction).map_err(|e| Error::Transaction(idx, e))); } @@ -197,4 +202,6 @@ mod tests { assert_eq!(Chain::Main, verifier.verify(&b1).unwrap()); } + + } diff --git a/verification/src/lib.rs b/verification/src/lib.rs index dd5505e0..273102c1 100644 --- a/verification/src/lib.rs +++ b/verification/src/lib.rs @@ -38,7 +38,9 @@ pub enum Error { /// One of the transactions is invalid (corresponding index and specific transaction error) Transaction(usize, TransactionError), /// nBits do not match difficulty rules - Difficulty + Difficulty, + /// Invalid merkle root + MerkleRoot, } #[derive(Debug)]