add is_new_best method to engines
This commit is contained in:
		
							parent
							
								
									67c24dcb95
								
							
						
					
					
						commit
						a03db2ff29
					
				@ -36,6 +36,8 @@ use account_provider::AccountProvider;
 | 
			
		||||
use block::ExecutedBlock;
 | 
			
		||||
use spec::CommonParams;
 | 
			
		||||
use evm::Schedule;
 | 
			
		||||
use ethereum::ethash;
 | 
			
		||||
use blockchain::extras::BlockDetails;
 | 
			
		||||
 | 
			
		||||
/// Voting errors.
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
@ -157,7 +159,9 @@ pub trait Engine : Sync + Send {
 | 
			
		||||
	fn execute_builtin(&self, a: &Address, input: &[u8], output: &mut BytesRef) { self.builtins().get(a).unwrap().execute(input, output); }
 | 
			
		||||
 | 
			
		||||
	/// Check if new block should be chosen as the one  in chain.
 | 
			
		||||
	fn is_new_best_block(&self, parent_details: BlockDetails, best_header: HeaderView, new_header: HeaderView) -> bool;
 | 
			
		||||
	fn is_new_best_block(&self, best_total_difficulty: U256, _best_header: HeaderView, parent_details: &BlockDetails, new_header: &HeaderView) -> bool {
 | 
			
		||||
		ethash::is_new_best_block(best_total_difficulty, parent_details, new_header)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: sealing stuff - though might want to leave this for later.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ use engines::Engine;
 | 
			
		||||
use evm::Schedule;
 | 
			
		||||
use ethjson;
 | 
			
		||||
use rlp::{self, UntrustedRlp, View};
 | 
			
		||||
use blockchain::extras::BlockDetails;
 | 
			
		||||
 | 
			
		||||
/// Ethash params.
 | 
			
		||||
#[derive(Debug, PartialEq)]
 | 
			
		||||
@ -273,6 +274,11 @@ impl Engine for Ethash {
 | 
			
		||||
	fn verify_transaction(&self, t: &SignedTransaction, _header: &Header) -> Result<(), Error> {
 | 
			
		||||
		t.sender().map(|_|()) // Perform EC recovery and cache sender
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// Check if new block should be chosen as the one  in chain.
 | 
			
		||||
	fn is_new_best_block(&self, best_total_difficulty: U256, _best_header: HeaderView, parent_details: &BlockDetails, new_header: &HeaderView) -> bool {
 | 
			
		||||
		is_new_best_block(best_total_difficulty, parent_details, new_header)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg_attr(feature="dev", allow(wrong_self_convention))] // to_ethash should take self
 | 
			
		||||
@ -347,6 +353,12 @@ impl Ethash {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Check if a new block should replace the best blockchain block.
 | 
			
		||||
pub fn is_new_best_block(best_total_difficulty: U256, parent_details: &BlockDetails, new_header: &HeaderView) -> bool {
 | 
			
		||||
	parent_details.total_difficulty + new_header.difficulty() > best_total_difficulty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
impl Header {
 | 
			
		||||
	/// Get the none field of the header.
 | 
			
		||||
	pub fn nonce(&self) -> H64 {
 | 
			
		||||
 | 
			
		||||
@ -277,7 +277,7 @@ fn new_db(path: &str) -> Arc<Database> {
 | 
			
		||||
pub fn generate_dummy_blockchain(block_number: u32) -> GuardedTempResult<BlockChain> {
 | 
			
		||||
	let temp = RandomTempPath::new();
 | 
			
		||||
	let db = new_db(temp.as_str());
 | 
			
		||||
	let bc = BlockChain::new(BlockChainConfig::default(), &create_unverifiable_block(0, H256::zero()), db.clone());
 | 
			
		||||
	let bc = BlockChain::new(BlockChainConfig::default(), &create_unverifiable_block(0, H256::zero()), db.clone(), Spec::new_null().engine);
 | 
			
		||||
 | 
			
		||||
	let mut batch = db.transaction();
 | 
			
		||||
	for block_order in 1..block_number {
 | 
			
		||||
@ -295,7 +295,7 @@ pub fn generate_dummy_blockchain(block_number: u32) -> GuardedTempResult<BlockCh
 | 
			
		||||
pub fn generate_dummy_blockchain_with_extra(block_number: u32) -> GuardedTempResult<BlockChain> {
 | 
			
		||||
	let temp = RandomTempPath::new();
 | 
			
		||||
	let db = new_db(temp.as_str());
 | 
			
		||||
	let bc = BlockChain::new(BlockChainConfig::default(), &create_unverifiable_block(0, H256::zero()), db.clone());
 | 
			
		||||
	let bc = BlockChain::new(BlockChainConfig::default(), &create_unverifiable_block(0, H256::zero()), db.clone(), Spec::new_null().engine);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	let mut batch = db.transaction();
 | 
			
		||||
@ -314,7 +314,7 @@ pub fn generate_dummy_blockchain_with_extra(block_number: u32) -> GuardedTempRes
 | 
			
		||||
pub fn generate_dummy_empty_blockchain() -> GuardedTempResult<BlockChain> {
 | 
			
		||||
	let temp = RandomTempPath::new();
 | 
			
		||||
	let db = new_db(temp.as_str());
 | 
			
		||||
	let bc = BlockChain::new(BlockChainConfig::default(), &create_unverifiable_block(0, H256::zero()), db.clone());
 | 
			
		||||
	let bc = BlockChain::new(BlockChainConfig::default(), &create_unverifiable_block(0, H256::zero()), db.clone(), Spec::new_null().engine);
 | 
			
		||||
 | 
			
		||||
	GuardedTempResult::<BlockChain> {
 | 
			
		||||
		_temp: temp,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user