diff --git a/Cargo.toml b/Cargo.toml index f009b4cc7..1032a8459 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,6 +88,7 @@ winapi = { version = "0.3.4", features = ["winsock2", "winuser", "shellapi"] } daemonize = { git = "https://github.com/paritytech/daemonize" } [features] +miner-debug = ["ethcore/miner-debug"] json-tests = ["ethcore/json-tests"] test-heavy = ["ethcore/test-heavy"] evm-debug = ["ethcore/evm-debug"] diff --git a/ethcore/Cargo.toml b/ethcore/Cargo.toml index c0f705709..82dd2230d 100644 --- a/ethcore/Cargo.toml +++ b/ethcore/Cargo.toml @@ -87,6 +87,10 @@ work-notify = ["ethcore-miner/work-notify"] price-info = ["ethcore-miner/price-info"] stratum = ["ethcore-stratum"] +# Disables seal verification for mined blocks. +# This allows you to submit any seal via RPC to test and benchmark +# how fast pending block get's created while running on the mainnet. +miner-debug = [] # Display EVM debug traces. evm-debug = ["evm/evm-debug"] # Display EVM debug traces when running tests. diff --git a/ethcore/src/ethereum/ethash.rs b/ethcore/src/ethereum/ethash.rs index b51da58fe..17268fee1 100644 --- a/ethcore/src/ethereum/ethash.rs +++ b/ethcore/src/ethereum/ethash.rs @@ -280,11 +280,18 @@ impl Engine for Arc { block_reward::apply_block_rewards(&rewards, block, &self.machine) } + #[cfg(not(feature = "miner-debug"))] fn verify_local_seal(&self, header: &Header) -> Result<(), Error> { self.verify_block_basic(header) .and_then(|_| self.verify_block_unordered(header)) } + #[cfg(feature = "miner-debug")] + fn verify_local_seal(&self, _header: &Header) -> Result<(), Error> { + warn!("Skipping seal verification, running in miner testing mode."); + Ok(()) + } + fn verify_block_basic(&self, header: &Header) -> Result<(), Error> { // check the seal fields. let seal = Seal::parse_seal(header.seal())?; diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 8ff29848c..16a20f8a0 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -97,7 +97,7 @@ const DEFAULT_MINIMAL_GAS_PRICE: u64 = 20_000_000_000; /// before stopping attempts to push more transactions to the block. /// This is an optimization that prevents traversing the entire pool /// in case we have only a fraction of available block gas limit left. -const MAX_SKIPPED_TRANSACTIONS: usize = 8; +const MAX_SKIPPED_TRANSACTIONS: usize = 128; /// Configures the behaviour of the miner. #[derive(Debug, PartialEq)] @@ -397,7 +397,7 @@ impl Miner { let max_transactions = if min_tx_gas.is_zero() { usize::max_value() } else { - (*open_block.block().header().gas_limit() / min_tx_gas).as_u64() as usize + MAX_SKIPPED_TRANSACTIONS.saturating_add((*open_block.block().header().gas_limit() / min_tx_gas).as_u64() as usize) }; let pending: Vec> = self.transaction_queue.pending(