Remove kernel sum header (#1723)

We maintain this locally in block_sums in the db (sums can be rebuilt from local data)
This commit is contained in:
Antioch Peverell
2018-10-13 02:15:29 +01:00
committed by Ignotus Peverell
parent 805cc24e73
commit 4dff68ab61
3 changed files with 24 additions and 37 deletions
+4 -2
View File
@@ -454,8 +454,10 @@ fn validate_header(header: &BlockHeader, ctx: &mut BlockContext) -> Result<(), E
fn validate_block(block: &Block, ctx: &mut BlockContext) -> Result<(), Error> {
let prev = ctx.batch.get_block_header(&block.header.previous)?;
block
.validate(&prev.total_kernel_offset, ctx.verifier_cache.clone())
.map_err(|e| ErrorKind::InvalidBlockProof(e))?;
.validate(
&prev.total_kernel_offset,
ctx.verifier_cache.clone(),
).map_err(|e| ErrorKind::InvalidBlockProof(e))?;
Ok(())
}
+14 -21
View File
@@ -34,7 +34,7 @@ use grin_core::core::Committed;
use grin_core::core::{Block, BlockHeader, CompactBlock, KernelFeatures, OutputFeatures};
use grin_core::{global, ser};
use keychain::{BlindingFactor, ExtKeychain, Keychain};
use util::{secp, secp_static};
use util::secp;
use wallet::libtx::build::{self, input, output, with_fee};
fn verifier_cache() -> Arc<RwLock<VerifierCache>> {
@@ -48,8 +48,6 @@ fn too_large_block() {
let keychain = ExtKeychain::from_random_seed().unwrap();
let max_out = MAX_BLOCK_WEIGHT / BLOCK_OUTPUT_WEIGHT;
let zero_commit = secp_static::commit_to_zero_value();
let mut pks = vec![];
for n in 0..(max_out + 1) {
pks.push(ExtKeychain::derive_key_id(1, n as u32, 0, 0, 0));
@@ -69,7 +67,7 @@ fn too_large_block() {
let key_id = ExtKeychain::derive_key_id(1, 1, 0, 0, 0);
let b = new_block(vec![&tx], &keychain, &prev, &key_id);
assert!(
b.validate(&BlindingFactor::zero(), &zero_commit, verifier_cache())
b.validate(&BlindingFactor::zero(), verifier_cache())
.is_err()
);
}
@@ -94,8 +92,6 @@ fn block_with_cut_through() {
let key_id2 = ExtKeychain::derive_key_id(1, 2, 0, 0, 0);
let key_id3 = ExtKeychain::derive_key_id(1, 3, 0, 0, 0);
let zero_commit = secp_static::commit_to_zero_value();
let mut btx1 = tx2i1o();
let mut btx2 = build::transaction(
vec![input(7, key_id1), output(5, key_id2.clone()), with_fee(2)],
@@ -117,7 +113,7 @@ fn block_with_cut_through() {
// block should have been automatically compacted (including reward
// output) and should still be valid
println!("3");
b.validate(&BlindingFactor::zero(), &zero_commit, verifier_cache())
b.validate(&BlindingFactor::zero(), verifier_cache())
.unwrap();
assert_eq!(b.inputs().len(), 3);
assert_eq!(b.outputs().len(), 3);
@@ -127,7 +123,6 @@ fn block_with_cut_through() {
#[test]
fn empty_block_with_coinbase_is_valid() {
let keychain = ExtKeychain::from_random_seed().unwrap();
let zero_commit = secp_static::commit_to_zero_value();
let prev = BlockHeader::default();
let key_id = ExtKeychain::derive_key_id(1, 1, 0, 0, 0);
let b = new_block(vec![], &keychain, &prev, &key_id);
@@ -155,7 +150,7 @@ fn empty_block_with_coinbase_is_valid() {
// the block should be valid here (single coinbase output with corresponding
// txn kernel)
assert!(
b.validate(&BlindingFactor::zero(), &zero_commit, verifier_cache())
b.validate(&BlindingFactor::zero(), verifier_cache())
.is_ok()
);
}
@@ -166,7 +161,6 @@ fn empty_block_with_coinbase_is_valid() {
// additionally verifying the merkle_inputs_outputs also fails
fn remove_coinbase_output_flag() {
let keychain = ExtKeychain::from_random_seed().unwrap();
let zero_commit = secp_static::commit_to_zero_value();
let prev = BlockHeader::default();
let key_id = ExtKeychain::derive_key_id(1, 1, 0, 0, 0);
let mut b = new_block(vec![], &keychain, &prev, &key_id);
@@ -186,7 +180,7 @@ fn remove_coinbase_output_flag() {
.is_ok()
);
assert_eq!(
b.validate(&BlindingFactor::zero(), &zero_commit, verifier_cache()),
b.validate(&BlindingFactor::zero(), verifier_cache()),
Err(Error::CoinbaseSumMismatch)
);
}
@@ -196,7 +190,6 @@ fn remove_coinbase_output_flag() {
// invalidates the block and specifically it causes verify_coinbase to fail
fn remove_coinbase_kernel_flag() {
let keychain = ExtKeychain::from_random_seed().unwrap();
let zero_commit = secp_static::commit_to_zero_value();
let prev = BlockHeader::default();
let key_id = ExtKeychain::derive_key_id(1, 1, 0, 0, 0);
let mut b = new_block(vec![], &keychain, &prev, &key_id);
@@ -216,7 +209,7 @@ fn remove_coinbase_kernel_flag() {
);
assert_eq!(
b.validate(&BlindingFactor::zero(), &zero_commit, verifier_cache()),
b.validate(&BlindingFactor::zero(), verifier_cache()),
Err(Error::Secp(secp::Error::IncorrectCommitSum))
);
}
@@ -264,7 +257,7 @@ fn empty_block_serialized_size() {
let b = new_block(vec![], &keychain, &prev, &key_id);
let mut vec = Vec::new();
ser::serialize(&mut vec, &b).expect("serialization failed");
let target_len = 1_257;
let target_len = 1_224;
assert_eq!(vec.len(), target_len);
}
@@ -277,7 +270,7 @@ fn block_single_tx_serialized_size() {
let b = new_block(vec![&tx1], &keychain, &prev, &key_id);
let mut vec = Vec::new();
ser::serialize(&mut vec, &b).expect("serialization failed");
let target_len = 2_839;
let target_len = 2_806;
assert_eq!(vec.len(), target_len);
}
@@ -290,7 +283,7 @@ fn empty_compact_block_serialized_size() {
let cb: CompactBlock = b.into();
let mut vec = Vec::new();
ser::serialize(&mut vec, &cb).expect("serialization failed");
let target_len = 1_265;
let target_len = 1_232;
assert_eq!(vec.len(), target_len);
}
@@ -304,7 +297,7 @@ fn compact_block_single_tx_serialized_size() {
let cb: CompactBlock = b.into();
let mut vec = Vec::new();
ser::serialize(&mut vec, &cb).expect("serialization failed");
let target_len = 1_271;
let target_len = 1_238;
assert_eq!(vec.len(), target_len);
}
@@ -323,7 +316,7 @@ fn block_10_tx_serialized_size() {
let b = new_block(txs.iter().collect(), &keychain, &prev, &key_id);
let mut vec = Vec::new();
ser::serialize(&mut vec, &b).expect("serialization failed");
let target_len = 17_077;
let target_len = 17_044;
assert_eq!(vec.len(), target_len,);
}
@@ -342,7 +335,7 @@ fn compact_block_10_tx_serialized_size() {
let cb: CompactBlock = b.into();
let mut vec = Vec::new();
ser::serialize(&mut vec, &cb).expect("serialization failed");
let target_len = 1_325;
let target_len = 1_292;
assert_eq!(vec.len(), target_len,);
}
@@ -446,7 +439,7 @@ fn empty_block_v2_switch() {
let b = new_block(vec![], &keychain, &prev, &key_id);
let mut vec = Vec::new();
ser::serialize(&mut vec, &b).expect("serialization failed");
let target_len = 1_265;
let target_len = 1_232;
assert_eq!(b.header.version, 2);
assert_eq!(vec.len(), target_len);
@@ -455,7 +448,7 @@ fn empty_block_v2_switch() {
let b = new_block(vec![], &keychain, &prev, &key_id);
let mut vec = Vec::new();
ser::serialize(&mut vec, &b).expect("serialization failed");
let target_len = 1_257;
let target_len = 1_224;
assert_eq!(b.header.version, 1);
assert_eq!(vec.len(), target_len);
}
+6 -14
View File
@@ -30,7 +30,7 @@ use grin_core::core::verifier_cache::{LruVerifierCache, VerifierCache};
use grin_core::core::{aggregate, deaggregate, KernelFeatures, Output, Transaction};
use grin_core::ser;
use keychain::{BlindingFactor, ExtKeychain, Keychain};
use util::{secp_static, static_secp_instance};
use util::static_secp_instance;
use wallet::libtx::build::{
self, initial_tx, input, output, with_excess, with_fee, with_lock_height,
};
@@ -411,15 +411,13 @@ fn reward_empty_block() {
let keychain = keychain::ExtKeychain::from_random_seed().unwrap();
let key_id = ExtKeychain::derive_key_id(1, 1, 0, 0, 0);
let zero_commit = secp_static::commit_to_zero_value();
let previous_header = BlockHeader::default();
let b = new_block(vec![], &keychain, &previous_header, &key_id);
b.cut_through()
.unwrap()
.validate(&BlindingFactor::zero(), &zero_commit, verifier_cache())
.validate(&BlindingFactor::zero(), verifier_cache())
.unwrap();
}
@@ -430,8 +428,6 @@ fn reward_with_tx_block() {
let vc = verifier_cache();
let zero_commit = secp_static::commit_to_zero_value();
let mut tx1 = tx2i1o();
tx1.validate(vc.clone()).unwrap();
@@ -441,7 +437,7 @@ fn reward_with_tx_block() {
block
.cut_through()
.unwrap()
.validate(&BlindingFactor::zero(), &zero_commit, vc.clone())
.validate(&BlindingFactor::zero(), vc.clone())
.unwrap();
}
@@ -452,8 +448,6 @@ fn simple_block() {
let vc = verifier_cache();
let zero_commit = secp_static::commit_to_zero_value();
let mut tx1 = tx2i1o();
let mut tx2 = tx1i1o();
@@ -465,7 +459,7 @@ fn simple_block() {
&key_id,
);
b.validate(&BlindingFactor::zero(), &zero_commit, vc.clone())
b.validate(&BlindingFactor::zero(), vc.clone())
.unwrap();
}
@@ -479,8 +473,6 @@ fn test_block_with_timelocked_tx() {
let vc = verifier_cache();
let zero_commit = secp_static::commit_to_zero_value();
// first check we can add a timelocked tx where lock height matches current
// block height and that the resulting block is valid
let tx1 = build::transaction(
@@ -496,7 +488,7 @@ fn test_block_with_timelocked_tx() {
let previous_header = BlockHeader::default();
let b = new_block(vec![&tx1], &keychain, &previous_header, &key_id3.clone());
b.validate(&BlindingFactor::zero(), &zero_commit, vc.clone())
b.validate(&BlindingFactor::zero(), vc.clone())
.unwrap();
// now try adding a timelocked tx where lock height is greater than current
@@ -514,7 +506,7 @@ fn test_block_with_timelocked_tx() {
let previous_header = BlockHeader::default();
let b = new_block(vec![&tx1], &keychain, &previous_header, &key_id3.clone());
match b.validate(&BlindingFactor::zero(), &zero_commit, vc.clone()) {
match b.validate(&BlindingFactor::zero(), vc.clone()) {
Err(KernelLockHeight(height)) => {
assert_eq!(height, 2);
}