diff --git a/src/bin/client.rs b/src/bin/client.rs index f8b29ac1c..a644ecd1b 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -11,16 +11,15 @@ use util::network::{NetworkService}; use ethcore::client::Client; use ethcore::sync::EthSync; use ethcore::ethereum; -use ethcore::ethereum::ethash::Ethash; fn main() { ::env_logger::init().ok(); let mut service = NetworkService::start().unwrap(); //TODO: replace with proper genesis and chain params. - let engine = Ethash::new_arc(ethereum::new_frontier()); + let spec = ethereum::new_frontier(); let mut dir = env::temp_dir(); dir.push(H32::random().hex()); - let client = Arc::new(Client::new(engine, &dir)); + let client = Arc::new(Client::new(spec, &dir).unwrap()); EthSync::register(&mut service, client); loop { let mut cmd = String::new(); diff --git a/src/client.rs b/src/client.rs index 019bdf797..b914dba19 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,8 +1,9 @@ use util::*; use blockchain::BlockChain; use views::BlockView; -use error::ImportError; +use error::*; use header::BlockNumber; +use spec::Spec; use engine::Engine; /// General block status @@ -95,16 +96,17 @@ pub trait BlockChainClient : Sync { /// Blockchain database client backed by a persistent database. Owns and manages a blockchain and a block queue. pub struct Client { chain: Arc, - _engine: Arc, + _engine: Arc>, } impl Client { - pub fn new(engine: Arc, path: &Path) -> Client { - let chain = Arc::new(BlockChain::new(&engine.spec().genesis_block(), path)); - Client { + pub fn new(spec: Spec, path: &Path) -> Result { + let chain = Arc::new(BlockChain::new(&spec.genesis_block(), path)); + let engine = Arc::new(try!(spec.to_engine())); + Ok(Client { chain: chain.clone(), - _engine: engine.clone(), - } + _engine: engine, + }) } } diff --git a/src/ethereum/ethash.rs b/src/ethereum/ethash.rs index d260e21b4..828441fd6 100644 --- a/src/ethereum/ethash.rs +++ b/src/ethereum/ethash.rs @@ -13,10 +13,6 @@ impl Ethash { pub fn new_boxed(spec: Spec) -> Box { Box::new(Ethash{spec: spec}) } - - pub fn new_arc(spec: Spec) -> Arc { - Arc::new(Ethash{spec: spec}) - } } impl Engine for Ethash { diff --git a/src/sync/mod.rs b/src/sync/mod.rs index aca40ffba..300465014 100644 --- a/src/sync/mod.rs +++ b/src/sync/mod.rs @@ -13,13 +13,11 @@ /// use ethcore::client::Client; /// use ethcore::sync::EthSync; /// use ethcore::ethereum; -/// use ethcore::ethereum::ethash::Ethash; /// /// fn main() { /// let mut service = NetworkService::start().unwrap(); -/// let engine = Ethash::new_arc(ethereum::new_frontier()); /// let dir = env::temp_dir(); -/// let client = Arc::new(Client::new(engine, &dir)); +/// let client = Arc::new(Client::new(ethereum::new_frontier(), &dir).unwrap()); /// EthSync::register(&mut service, client); /// } /// ```