Skip to content

Commit

Permalink
cleanup, pass header around where it makes sense
Browse files Browse the repository at this point in the history
  • Loading branch information
antiochp committed Jan 22, 2020
1 parent 9143e59 commit 01eeddd
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 31 deletions.
14 changes: 5 additions & 9 deletions chain/src/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ impl Chain {
txhashset::extending_readonly(&mut header_pmmr, &mut txhashset, |ext, batch| {
pipe::rewind_and_apply_fork(&header, ext, batch)?;
ext.extension
.validate(&self.genesis, fast_validation, &NoStatus, batch)?;
.validate(&self.genesis, fast_validation, &NoStatus, &header)?;
Ok(())
})
}
Expand Down Expand Up @@ -949,7 +949,7 @@ impl Chain {
// Validate the extension, generating the utxo_sum and kernel_sum.
// Full validation, including rangeproofs and kernel signature verification.
let (utxo_sum, kernel_sum) =
extension.validate(&self.genesis, false, status, batch)?;
extension.validate(&self.genesis, false, status, &header)?;

// Save the block_sums (utxo_sum, kernel_sum) to the db for use later.
batch.save_block_sums(
Expand Down Expand Up @@ -1508,7 +1508,7 @@ fn setup_head(

let ref mut extension = ext.extension;

extension.validate_roots(batch)?;
extension.validate_roots(&header)?;

// now check we have the "block sums" for the block in question
// if we have no sums (migrating an existing node) we need to go
Expand All @@ -1523,7 +1523,7 @@ fn setup_head(
// Do a full (and slow) validation of the txhashset extension
// to calculate the utxo_sum and kernel_sum at this block height.
let (utxo_sum, kernel_sum) =
extension.validate_kernel_sums(&genesis.header, batch)?;
extension.validate_kernel_sums(&genesis.header, &header)?;

// Save the block_sums to the db for use later.
batch.save_block_sums(
Expand Down Expand Up @@ -1576,11 +1576,7 @@ fn setup_head(
};
}
txhashset::extending(header_pmmr, txhashset, &mut batch, |ext, batch| {
let ref mut extension = ext.extension;
extension.apply_block(&genesis, batch)?;
extension.validate_roots(batch)?;
extension.validate_sizes(batch)?;
Ok(())
ext.extension.apply_block(&genesis, batch)
})?;

// Save the block_sums to the db for use later.
Expand Down
7 changes: 3 additions & 4 deletions chain/src/pipe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -432,10 +432,9 @@ fn apply_block_to_txhashset(
ext: &mut txhashset::ExtensionPair<'_>,
batch: &store::Batch<'_>,
) -> Result<(), Error> {
let ref mut extension = ext.extension;
extension.apply_block(block, batch)?;
extension.validate_roots(batch)?;
extension.validate_sizes(batch)?;
ext.extension.apply_block(block, batch)?;
ext.extension.validate_roots(&block.header)?;
ext.extension.validate_sizes(&block.header)?;
Ok(())
}

Expand Down
33 changes: 15 additions & 18 deletions chain/src/txhashset/txhashset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1161,24 +1161,22 @@ impl<'a> Extension<'a> {
}

/// Validate the MMR (output, rangeproof, kernel) roots against the latest header.
pub fn validate_roots(&self, batch: &Batch<'_>) -> Result<(), Error> {
if self.head.height == 0 {
pub fn validate_roots(&self, header: &BlockHeader) -> Result<(), Error> {
if header.height == 0 {
return Ok(());
}
let head_header = batch.get_block_header(&self.head.hash())?;
self.roots()?.validate(&head_header)
self.roots()?.validate(header)
}

/// Validate the header, output and kernel MMR sizes against the block header.
pub fn validate_sizes(&self, batch: &Batch<'_>) -> Result<(), Error> {
if self.head.height == 0 {
pub fn validate_sizes(&self, header: &BlockHeader) -> Result<(), Error> {
if header.height == 0 {
return Ok(());
}
let head_header = batch.get_block_header(&self.head.last_block_h)?;
if (
head_header.output_mmr_size,
head_header.output_mmr_size,
head_header.kernel_mmr_size,
header.output_mmr_size,
header.output_mmr_size,
header.kernel_mmr_size,
) != self.sizes()
{
Err(ErrorKind::InvalidMMRSize.into())
Expand Down Expand Up @@ -1219,14 +1217,13 @@ impl<'a> Extension<'a> {
pub fn validate_kernel_sums(
&self,
genesis: &BlockHeader,
batch: &Batch<'_>,
header: &BlockHeader,
) -> Result<(Commitment, Commitment), Error> {
let now = Instant::now();

let head_header = batch.get_block_header(&self.head.last_block_h)?;
let (utxo_sum, kernel_sum) = self.verify_kernel_sums(
head_header.total_overage(genesis.kernel_mmr_size > 0),
head_header.total_kernel_offset(),
header.total_overage(genesis.kernel_mmr_size > 0),
header.total_kernel_offset(),
)?;

debug!(
Expand All @@ -1244,11 +1241,11 @@ impl<'a> Extension<'a> {
genesis: &BlockHeader,
fast_validation: bool,
status: &dyn TxHashsetWriteStatus,
batch: &Batch<'_>,
header: &BlockHeader,
) -> Result<(Commitment, Commitment), Error> {
self.validate_mmrs()?;
self.validate_roots(batch)?;
self.validate_sizes(batch)?;
self.validate_roots(header)?;
self.validate_sizes(header)?;

if self.head.height == 0 {
let zero_commit = secp_static::commit_to_zero_value();
Expand All @@ -1257,7 +1254,7 @@ impl<'a> Extension<'a> {

// The real magicking happens here. Sum of kernel excesses should equal
// sum of unspent outputs minus total supply.
let (output_sum, kernel_sum) = self.validate_kernel_sums(genesis, batch)?;
let (output_sum, kernel_sum) = self.validate_kernel_sums(genesis, header)?;

// These are expensive verification step (skipped for "fast validation").
if !fast_validation {
Expand Down

0 comments on commit 01eeddd

Please sign in to comment.