Rust Cuckatoo for verifier and test-miner (#1558)
* cuck placeholder * rustfmt * cuckatoo, early days * rustfmt * data structures are in place, siphash key creation is consistent with @tromp * solver in place, (not yet working) * cuckatoo test solver working with test nonce * rustfmt * update solver to remove adjacency list removals * verifier functioning * rustfmt * Proper error handing in Cuckatoo module, couple of tests * modify cuckoo/cuckatoo solvers and verifiers to function identically, in advance of trait refactoring * rustfmt * refactor PoW context into trait, default to using cuckoo context * rustfmt * create macros for integer casting/unwraps * don't instantiate structs when just verifying, add test validation vector for cuckatoo 29 * rustfmt * don't init cuckoo structs if just validating * test fix * ensure BH hashing for POW is only done within miner/validators
This commit is contained in:
+3
-3
@@ -28,7 +28,7 @@ use core::core::merkle_proof::MerkleProof;
|
||||
use core::core::verifier_cache::VerifierCache;
|
||||
use core::core::{Block, BlockHeader, BlockSums, Output, OutputIdentifier, Transaction, TxKernel};
|
||||
use core::global;
|
||||
use core::pow::Difficulty;
|
||||
use core::pow::{self, Difficulty};
|
||||
use error::{Error, ErrorKind};
|
||||
use grin_store::Error::NotFoundErr;
|
||||
use pipe;
|
||||
@@ -153,7 +153,7 @@ pub struct Chain {
|
||||
block_hashes_cache: Arc<RwLock<VecDeque<Hash>>>,
|
||||
verifier_cache: Arc<RwLock<VerifierCache>>,
|
||||
// POW verification function
|
||||
pow_verifier: fn(&BlockHeader, u8) -> bool,
|
||||
pow_verifier: fn(&BlockHeader, u8) -> Result<(), pow::Error>,
|
||||
archive_mode: bool,
|
||||
}
|
||||
|
||||
@@ -169,7 +169,7 @@ impl Chain {
|
||||
db_env: Arc<lmdb::Environment>,
|
||||
adapter: Arc<ChainAdapter>,
|
||||
genesis: Block,
|
||||
pow_verifier: fn(&BlockHeader, u8) -> bool,
|
||||
pow_verifier: fn(&BlockHeader, u8) -> Result<(), pow::Error>,
|
||||
verifier_cache: Arc<RwLock<VerifierCache>>,
|
||||
archive_mode: bool,
|
||||
) -> Result<Chain, Error> {
|
||||
|
||||
+6
-6
@@ -27,7 +27,7 @@ use core::core::verifier_cache::VerifierCache;
|
||||
use core::core::Committed;
|
||||
use core::core::{Block, BlockHeader, BlockSums};
|
||||
use core::global;
|
||||
use core::pow::Difficulty;
|
||||
use core::pow::{self, Difficulty};
|
||||
use error::{Error, ErrorKind};
|
||||
use grin_store;
|
||||
use store;
|
||||
@@ -49,7 +49,7 @@ pub struct BlockContext {
|
||||
/// The sync head
|
||||
pub sync_head: Tip,
|
||||
/// The POW verification function
|
||||
pub pow_verifier: fn(&BlockHeader, u8) -> bool,
|
||||
pub pow_verifier: fn(&BlockHeader, u8) -> Result<(), pow::Error>,
|
||||
/// MMR sum tree states
|
||||
pub txhashset: Arc<RwLock<txhashset::TxHashSet>>,
|
||||
/// Recently processed blocks to avoid double-processing
|
||||
@@ -439,7 +439,7 @@ fn validate_header(
|
||||
if shift != consensus::SECOND_POW_SIZESHIFT && header.pow.scaling_difficulty != 1 {
|
||||
return Err(ErrorKind::InvalidScaling.into());
|
||||
}
|
||||
if !(ctx.pow_verifier)(header, shift) {
|
||||
if !(ctx.pow_verifier)(header, shift).is_ok() {
|
||||
error!(
|
||||
LOGGER,
|
||||
"pipe: validate_header bad cuckoo shift size {}", shift
|
||||
@@ -527,7 +527,8 @@ fn validate_block(
|
||||
&prev.total_kernel_offset,
|
||||
&prev.total_kernel_sum,
|
||||
verifier_cache,
|
||||
).map_err(|e| ErrorKind::InvalidBlockProof(e))?;
|
||||
)
|
||||
.map_err(|e| ErrorKind::InvalidBlockProof(e))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -567,8 +568,7 @@ fn verify_block_sums(b: &Block, ext: &mut txhashset::Extension) -> Result<(), Er
|
||||
let offset = b.header.total_kernel_offset();
|
||||
|
||||
// Verify the kernel sums for the block_sums with the new block applied.
|
||||
let (utxo_sum, kernel_sum) =
|
||||
(block_sums, b as &Committed).verify_kernel_sums(overage, offset)?;
|
||||
let (utxo_sum, kernel_sum) = (block_sums, b as &Committed).verify_kernel_sums(overage, offset)?;
|
||||
|
||||
// Save the new block_sums for the new block to the db via the batch.
|
||||
ext.batch.save_block_sums(
|
||||
|
||||
Reference in New Issue
Block a user