mirror of
https://github.com/mimblewimble/grin.git
synced 2025-02-01 17:01:09 +03:00
Block inputs and ouputs Merkle tree validation.
This commit is contained in:
parent
fc2697e7d8
commit
4a034018cb
2 changed files with 9 additions and 1 deletions
|
@ -167,7 +167,6 @@ fn validate_header(b: &Block, ctx: &mut BlockContext) -> Result<(), Error> {
|
||||||
|
|
||||||
/// Fully validate the block content.
|
/// Fully validate the block content.
|
||||||
fn validate_block(b: &Block, ctx: &mut BlockContext) -> Result<(), Error> {
|
fn validate_block(b: &Block, ctx: &mut BlockContext) -> Result<(), Error> {
|
||||||
// TODO check tx merkle tree
|
|
||||||
let curve = secp::Secp256k1::with_caps(secp::ContextFlag::Commit);
|
let curve = secp::Secp256k1::with_caps(secp::ContextFlag::Commit);
|
||||||
try!(b.verify(&curve).map_err(&Error::InvalidBlockProof));
|
try!(b.verify(&curve).map_err(&Error::InvalidBlockProof));
|
||||||
// TODO check every input exists
|
// TODO check every input exists
|
||||||
|
|
|
@ -350,6 +350,7 @@ impl Block {
|
||||||
pub fn verify(&self, secp: &Secp256k1) -> Result<(), secp::Error> {
|
pub fn verify(&self, secp: &Secp256k1) -> Result<(), secp::Error> {
|
||||||
// sum all inputs and outs commitments
|
// sum all inputs and outs commitments
|
||||||
let io_sum = try!(self.sum_commitments(secp));
|
let io_sum = try!(self.sum_commitments(secp));
|
||||||
|
|
||||||
// sum all proofs commitments
|
// sum all proofs commitments
|
||||||
let proof_commits = map_vec!(self.proofs, |proof| proof.remainder);
|
let proof_commits = map_vec!(self.proofs, |proof| proof.remainder);
|
||||||
let proof_sum = try!(secp.commit_sum(proof_commits, vec![]));
|
let proof_sum = try!(secp.commit_sum(proof_commits, vec![]));
|
||||||
|
@ -364,6 +365,14 @@ impl Block {
|
||||||
for proof in &self.proofs {
|
for proof in &self.proofs {
|
||||||
try!(proof.verify(secp));
|
try!(proof.verify(secp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// verify the transaction Merkle root
|
||||||
|
let tx_merkle = merkle_inputs_outputs(&self.inputs, &self.outputs);
|
||||||
|
if tx_merkle != self.header.tx_merkle {
|
||||||
|
// TODO more specific error
|
||||||
|
return Err(secp::Error::IncorrectCommitSum);
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue