diff --git a/ethcore/src/block.rs b/ethcore/src/block.rs
index 7ec8ed4ce40..db0bac6144d 100644
--- a/ethcore/src/block.rs
+++ b/ethcore/src/block.rs
@@ -17,7 +17,7 @@
//! Blockchain block.
use common::*;
-use engine::*;
+use engines::Engine;
use state::*;
use verification::PreverifiedBlock;
use trace::FlatTrace;
diff --git a/ethcore/src/block_queue.rs b/ethcore/src/block_queue.rs
index bd806099683..6772c0461bd 100644
--- a/ethcore/src/block_queue.rs
+++ b/ethcore/src/block_queue.rs
@@ -22,7 +22,7 @@ use std::sync::{Condvar as SCondvar, Mutex as SMutex};
use util::*;
use verification::*;
use error::*;
-use engine::Engine;
+use engines::Engine;
use views::*;
use header::*;
use service::*;
diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs
index 06ff5bd8cb1..eb06ef0cac3 100644
--- a/ethcore/src/client/client.rs
+++ b/ethcore/src/client/client.rs
@@ -40,7 +40,7 @@ use header::BlockNumber;
use state::State;
use spec::Spec;
use basic_types::Seal;
-use engine::Engine;
+use engines::Engine;
use views::HeaderView;
use service::ClientIoMessage;
use env_info::LastHashes;
diff --git a/ethcore/src/basic_authority.rs b/ethcore/src/engines/basic_authority.rs
similarity index 97%
rename from ethcore/src/basic_authority.rs
rename to ethcore/src/engines/basic_authority.rs
index b5b199c8235..525b825b950 100644
--- a/ethcore/src/basic_authority.rs
+++ b/ethcore/src/engines/basic_authority.rs
@@ -19,8 +19,8 @@
use common::*;
use account_provider::AccountProvider;
use block::*;
-use spec::{CommonParams, Spec};
-use engine::*;
+use spec::CommonParams;
+use engines::Engine;
use evm::Schedule;
use ethjson;
@@ -176,16 +176,16 @@ impl Header {
}
}
-/// Create a new test chain spec with `BasicAuthority` consensus engine.
-pub fn new_test_authority() -> Spec { Spec::load(include_bytes!("../res/test_authority.json")) }
-
#[cfg(test)]
mod tests {
- use super::*;
use common::*;
use block::*;
use tests::helpers::*;
use account_provider::AccountProvider;
+ use spec::Spec;
+
+ /// Create a new test chain spec with `BasicAuthority` consensus engine.
+ fn new_test_authority() -> Spec { Spec::load(include_bytes!("../../res/test_authority.json")) }
#[test]
fn has_valid_metadata() {
diff --git a/ethcore/src/engine.rs b/ethcore/src/engines/mod.rs
similarity index 97%
rename from ethcore/src/engine.rs
rename to ethcore/src/engines/mod.rs
index e78f84c13e1..25feed74dec 100644
--- a/ethcore/src/engine.rs
+++ b/ethcore/src/engines/mod.rs
@@ -14,7 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
-//! Consensus engine specification
+//! Consensus engine specification and basic implementations.
+
+mod null_engine;
+mod basic_authority;
+
+pub use self::null_engine::NullEngine;
+pub use self::basic_authority::BasicAuthority;
use common::*;
use account_provider::AccountProvider;
diff --git a/ethcore/src/null_engine.rs b/ethcore/src/engines/null_engine.rs
similarity index 93%
rename from ethcore/src/null_engine.rs
rename to ethcore/src/engines/null_engine.rs
index a760bea9336..aebf7d1bf3b 100644
--- a/ethcore/src/null_engine.rs
+++ b/ethcore/src/engines/null_engine.rs
@@ -17,12 +17,12 @@
use std::collections::BTreeMap;
use util::hash::Address;
use builtin::Builtin;
-use engine::Engine;
+use engines::Engine;
use spec::CommonParams;
use evm::Schedule;
use env_info::EnvInfo;
-/// An engine which does not provide any consensus mechanism.
+/// An engine which does not provide any consensus mechanism and does not seal blocks.
pub struct NullEngine {
params: CommonParams,
builtins: BTreeMap
,
diff --git a/ethcore/src/ethereum/ethash.rs b/ethcore/src/ethereum/ethash.rs
index 802b68e8298..2a0f84c23a8 100644
--- a/ethcore/src/ethereum/ethash.rs
+++ b/ethcore/src/ethereum/ethash.rs
@@ -18,7 +18,7 @@ use ethash::{quick_get_difficulty, EthashManager, H256 as EH256};
use common::*;
use block::*;
use spec::CommonParams;
-use engine::*;
+use engines::Engine;
use evm::Schedule;
use ethjson;
diff --git a/ethcore/src/executive.rs b/ethcore/src/executive.rs
index 5a7d6da1096..9a48f9d4adf 100644
--- a/ethcore/src/executive.rs
+++ b/ethcore/src/executive.rs
@@ -17,7 +17,7 @@
//! Transaction Execution environment.
use common::*;
use state::*;
-use engine::*;
+use engines::Engine;
use types::executed::CallType;
use evm::{self, Ext, Factory, Finalize};
use externalities::*;
diff --git a/ethcore/src/externalities.rs b/ethcore/src/externalities.rs
index 47c4d9c60e5..25fed01769d 100644
--- a/ethcore/src/externalities.rs
+++ b/ethcore/src/externalities.rs
@@ -17,7 +17,7 @@
//! Transaction Execution environment.
use common::*;
use state::*;
-use engine::*;
+use engines::Engine;
use executive::*;
use evm::{self, Schedule, Ext, ContractCreateResult, MessageCallResult, Factory};
use substate::*;
@@ -300,7 +300,7 @@ impl<'a, T, V> Ext for Externalities<'a, T, V> where T: 'a + Tracer, V: 'a + VMT
mod tests {
use common::*;
use state::*;
- use engine::*;
+ use engines::Engine;
use evm::{Ext};
use substate::*;
use tests::helpers::*;
diff --git a/ethcore/src/json_tests/executive.rs b/ethcore/src/json_tests/executive.rs
index dd6573a375e..f1be3e4e062 100644
--- a/ethcore/src/json_tests/executive.rs
+++ b/ethcore/src/json_tests/executive.rs
@@ -17,7 +17,7 @@
use super::test_common::*;
use state::*;
use executive::*;
-use engine::*;
+use engines::Engine;
use evm;
use evm::{Schedule, Ext, Factory, Finalize, VMType, ContractCreateResult, MessageCallResult};
use externalities::*;
diff --git a/ethcore/src/lib.rs b/ethcore/src/lib.rs
index 1472326833d..3c6f319a12f 100644
--- a/ethcore/src/lib.rs
+++ b/ethcore/src/lib.rs
@@ -99,7 +99,7 @@ extern crate ethcore_devtools as devtools;
#[cfg(feature = "jit" )] extern crate evmjit;
pub mod account_provider;
-pub mod basic_authority;
+pub mod engines;
pub mod block;
pub mod block_queue;
pub mod client;
@@ -111,7 +111,6 @@ pub mod trace;
pub mod spec;
pub mod views;
pub mod pod_state;
-pub mod engine;
pub mod migrations;
pub mod miner;
pub mod snapshot;
@@ -127,7 +126,6 @@ mod pod_account;
mod state;
mod account;
mod account_db;
-mod null_engine;
mod builtin;
mod substate;
mod executive;
diff --git a/ethcore/src/migrations/mod.rs b/ethcore/src/migrations/mod.rs
index 391e5e2f27b..e3e1f403196 100644
--- a/ethcore/src/migrations/mod.rs
+++ b/ethcore/src/migrations/mod.rs
@@ -1,3 +1,19 @@
+// Copyright 2015, 2016 Ethcore (UK) Ltd.
+// This file is part of Parity.
+
+// Parity is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Parity is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Parity. If not, see .
+
//! Database migrations.
pub mod state;
diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs
index 79c8a95bf17..3edf56a3b80 100644
--- a/ethcore/src/miner/miner.rs
+++ b/ethcore/src/miner/miner.rs
@@ -29,7 +29,7 @@ use error::*;
use transaction::SignedTransaction;
use receipt::Receipt;
use spec::Spec;
-use engine::Engine;
+use engines::Engine;
use miner::{MinerService, MinerStatus, TransactionQueue, AccountDetails, TransactionOrigin};
use miner::work_notify::WorkPoster;
use client::TransactionImportResult;
diff --git a/ethcore/src/spec/spec.rs b/ethcore/src/spec/spec.rs
index 3daf096fb34..6a9223a1c9f 100644
--- a/ethcore/src/spec/spec.rs
+++ b/ethcore/src/spec/spec.rs
@@ -17,14 +17,12 @@
//! Parameters for a block chain.
use common::*;
-use engine::*;
+use engines::{Engine, NullEngine, BasicAuthority};
use pod_state::*;
-use null_engine::*;
use account_db::*;
use super::genesis::Genesis;
use super::seal::Generic as GenericSeal;
use ethereum;
-use basic_authority::BasicAuthority;
use ethjson;
/// Parameters common to all engines.
diff --git a/ethcore/src/state.rs b/ethcore/src/state.rs
index 1da70df3ad2..45a88d519d2 100644
--- a/ethcore/src/state.rs
+++ b/ethcore/src/state.rs
@@ -15,7 +15,7 @@
// along with Parity. If not, see .
use common::*;
-use engine::Engine;
+use engines::Engine;
use executive::{Executive, TransactOptions};
use evm::Factory as EvmFactory;
use account_db::*;
diff --git a/ethcore/src/tests/helpers.rs b/ethcore/src/tests/helpers.rs
index 6e94d2ee365..fe717aa0912 100644
--- a/ethcore/src/tests/helpers.rs
+++ b/ethcore/src/tests/helpers.rs
@@ -21,7 +21,7 @@ use block::{OpenBlock, Drain};
use blockchain::{BlockChain, Config as BlockChainConfig};
use state::*;
use evm::Schedule;
-use engine::*;
+use engines::Engine;
use ethereum;
use devtools::*;
use miner::Miner;
diff --git a/ethcore/src/verification/canon_verifier.rs b/ethcore/src/verification/canon_verifier.rs
index e0ebf1b7c05..cc6bc448aa6 100644
--- a/ethcore/src/verification/canon_verifier.rs
+++ b/ethcore/src/verification/canon_verifier.rs
@@ -15,7 +15,7 @@
// along with Parity. If not, see .
use blockchain::BlockProvider;
-use engine::Engine;
+use engines::Engine;
use error::Error;
use header::Header;
use super::Verifier;
diff --git a/ethcore/src/verification/noop_verifier.rs b/ethcore/src/verification/noop_verifier.rs
index 99d1d594ccc..fb798be4664 100644
--- a/ethcore/src/verification/noop_verifier.rs
+++ b/ethcore/src/verification/noop_verifier.rs
@@ -15,7 +15,7 @@
// along with Parity. If not, see .
use blockchain::BlockProvider;
-use engine::Engine;
+use engines::Engine;
use error::Error;
use header::Header;
use super::Verifier;
diff --git a/ethcore/src/verification/verification.rs b/ethcore/src/verification/verification.rs
index d3e7827642b..f0f67c4c2b2 100644
--- a/ethcore/src/verification/verification.rs
+++ b/ethcore/src/verification/verification.rs
@@ -22,7 +22,7 @@
/// 3. Final verification against the blockchain done before enactment.
use common::*;
-use engine::Engine;
+use engines::Engine;
use blockchain::*;
/// Preprocessed block data gathered in `verify_block_unordered` call
@@ -233,7 +233,7 @@ mod tests {
use error::BlockError::*;
use views::*;
use blockchain::*;
- use engine::*;
+ use engines::Engine;
use spec::*;
use transaction::*;
use tests::helpers::*;
diff --git a/ethcore/src/verification/verifier.rs b/ethcore/src/verification/verifier.rs
index 5db81a4ebcc..7f57407f770 100644
--- a/ethcore/src/verification/verifier.rs
+++ b/ethcore/src/verification/verifier.rs
@@ -15,7 +15,7 @@
// along with Parity. If not, see .
use blockchain::BlockProvider;
-use engine::Engine;
+use engines::Engine;
use error::Error;
use header::Header;