2016-12-09 05:37:12 -08:00
|
|
|
use v1::traits::Miner;
|
|
|
|
use v1::types::{BlockTemplate, BlockTemplateRequest};
|
|
|
|
use jsonrpc_core::Error;
|
2016-12-09 06:34:04 -08:00
|
|
|
use sync;
|
|
|
|
use miner;
|
2016-12-09 05:37:12 -08:00
|
|
|
|
|
|
|
pub struct MinerClient<T: MinerClientCoreApi> {
|
2016-12-09 06:34:04 -08:00
|
|
|
core: T,
|
2016-12-09 05:37:12 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
pub trait MinerClientCoreApi: Send + Sync + 'static {
|
2016-12-09 06:34:04 -08:00
|
|
|
fn get_block_template(&self) -> miner::BlockTemplate;
|
2016-12-09 05:37:12 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
pub struct MinerClientCore {
|
2016-12-09 06:34:04 -08:00
|
|
|
local_sync_node: sync::LocalNodeRef,
|
2016-12-09 05:37:12 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
impl MinerClientCore {
|
2016-12-09 06:34:04 -08:00
|
|
|
pub fn new(local_sync_node: sync::LocalNodeRef) -> Self {
|
2016-12-09 05:37:12 -08:00
|
|
|
MinerClientCore {
|
2016-12-09 06:34:04 -08:00
|
|
|
local_sync_node: local_sync_node,
|
2016-12-09 05:37:12 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl MinerClientCoreApi for MinerClientCore {
|
2016-12-09 06:34:04 -08:00
|
|
|
fn get_block_template(&self) -> miner::BlockTemplate {
|
|
|
|
self.local_sync_node.get_block_template()
|
|
|
|
}
|
2016-12-09 05:37:12 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> MinerClient<T> where T: MinerClientCoreApi {
|
|
|
|
pub fn new(core: T) -> Self {
|
|
|
|
MinerClient {
|
2016-12-09 06:34:04 -08:00
|
|
|
core: core,
|
2016-12-09 05:37:12 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> Miner for MinerClient<T> where T: MinerClientCoreApi {
|
|
|
|
fn get_block_template(&self, _request: BlockTemplateRequest) -> Result<BlockTemplate, Error> {
|
2016-12-09 06:34:04 -08:00
|
|
|
Ok(self.core.get_block_template().into())
|
2016-12-09 05:37:12 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
pub mod tests {
|
|
|
|
}
|