// 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 . //! Light client implementation. Used for raw data queries as well as the header //! sync. use std::sync::Arc; use engines::Engine; use ids::BlockID; use service::ClientIoMessage; use block_import_error::BlockImportError; use block_status::BlockStatus; use verification::queue::{HeaderQueue, QueueInfo}; use transaction::SignedTransaction; use blockchain_info::BlockChainInfo; use io::IoChannel; use util::hash::H256; use util::{Bytes, Mutex}; use light::provider::Provider; use light::request; /// Light client implementation. pub struct Client { engine: Arc, header_queue: HeaderQueue, message_channel: Mutex>, } impl Client { /// Import a header as rlp-encoded bytes. pub fn import_header(&self, bytes: Bytes) -> Result { let header = ::rlp::decode(&bytes); self.header_queue.import(header).map_err(Into::into) } /// Whether the block is already known (but not necessarily part of the canonical chain) pub fn is_known(&self, _id: BlockID) -> bool { false } /// Fetch a vector of all pending transactions. pub fn pending_transactions(&self) -> Vec { vec![] } /// Inquire about the status of a given block. pub fn status(&self, _id: BlockID) -> BlockStatus { BlockStatus::Unknown } /// Get the header queue info. pub fn queue_info(&self) -> QueueInfo { self.header_queue.queue_info() } } // dummy implementation -- may draw from canonical cache further on. impl Provider for Client { fn chain_info(&self) -> BlockChainInfo { unimplemented!() } fn reorg_depth(&self, _a: &H256, _b: &H256) -> Option { None } fn earliest_state(&self) -> Option { None } fn block_headers(&self, _req: request::Headers) -> Vec { Vec::new() } fn block_bodies(&self, _req: request::Bodies) -> Vec { Vec::new() } fn receipts(&self, _req: request::Receipts) -> Vec { Vec::new() } fn proofs(&self, _req: request::StateProofs) -> Vec { Vec::new() } fn contract_code(&self, _req: request::ContractCodes) -> Vec { Vec::new() } fn header_proofs(&self, _req: request::HeaderProofs) -> Vec { Vec::new() } fn pending_transactions(&self) -> Vec { Vec::new() } }