diff --git a/rpc/src/v1/impls/light/mod.rs b/rpc/src/v1/impls/light/mod.rs index 71a3a497d..3a09076a9 100644 --- a/rpc/src/v1/impls/light/mod.rs +++ b/rpc/src/v1/impls/light/mod.rs @@ -21,6 +21,8 @@ pub mod eth; pub mod parity; +pub mod parity_set; pub use self::eth::EthClient; pub use self::parity::ParityClient; +pub use self::parity_set::ParitySetClient; diff --git a/rpc/src/v1/impls/light/parity_set.rs b/rpc/src/v1/impls/light/parity_set.rs new file mode 100644 index 000000000..4741f2bc0 --- /dev/null +++ b/rpc/src/v1/impls/light/parity_set.rs @@ -0,0 +1,143 @@ +// Copyright 2015-2017 Parity Technologies (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 . + +//! Parity-specific rpc interface for operations altering the settings. +//! Implementation for light client. + +use std::io; +use std::sync::{Arc, Weak}; + +use ethcore::miner::MinerService; +use ethcore::client::MiningBlockChainClient; +use ethcore::mode::Mode; +use ethsync::ManageNetwork; +use fetch::{self, Fetch}; +use futures::{BoxFuture, Future}; +use util::sha3; +use updater::{Service as UpdateService}; + +use jsonrpc_core::Error; +use v1::helpers::errors; +use v1::traits::ParitySet; +use v1::types::{Bytes, H160, H256, U256, ReleaseInfo}; + +/// Parity-specific rpc interface for operations altering the settings. +pub struct ParitySetClient { + net: Arc, + fetch: F, +} + +impl ParitySetClient { + /// Creates new `ParitySetClient` with given `Fetch`. + pub fn new(net: Arc, fetch: F) -> Self { + ParitySetClient { + net: net, + fetch: fetch, + } + } +} + +impl ParitySet for ParitySetClient { + + fn set_min_gas_price(&self, _gas_price: U256) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn set_gas_floor_target(&self, _target: U256) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn set_gas_ceil_target(&self, _target: U256) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn set_extra_data(&self, _extra_data: Bytes) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn set_author(&self, _author: H160) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn set_engine_signer(&self, _address: H160, _password: String) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn set_transactions_limit(&self, _limit: usize) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn set_tx_gas_limit(&self, _limit: U256) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn add_reserved_peer(&self, peer: String) -> Result { + match self.net.add_reserved_peer(peer) { + Ok(()) => Ok(true), + Err(e) => Err(errors::invalid_params("Peer address", e)), + } + } + + fn remove_reserved_peer(&self, peer: String) -> Result { + match self.net.remove_reserved_peer(peer) { + Ok(()) => Ok(true), + Err(e) => Err(errors::invalid_params("Peer address", e)), + } + } + + fn drop_non_reserved_peers(&self) -> Result { + self.net.deny_unreserved_peers(); + Ok(true) + } + + fn accept_non_reserved_peers(&self) -> Result { + self.net.accept_unreserved_peers(); + Ok(true) + } + + fn start_network(&self) -> Result { + self.net.start_network(); + Ok(true) + } + + fn stop_network(&self) -> Result { + self.net.stop_network(); + Ok(true) + } + + fn set_mode(&self, mode: String) -> Result { + Err(errors::light_unimplemented(None)) + } + + fn hash_content(&self, url: String) -> BoxFuture { + self.fetch.process(self.fetch.fetch(&url).then(move |result| { + result + .map_err(errors::from_fetch_error) + .and_then(|response| { + sha3(&mut io::BufReader::new(response)).map_err(errors::from_fetch_error) + }) + .map(Into::into) + })) + } + + fn upgrade_ready(&self) -> Result, Error> { + Err(errors::light_unimplemented(None)) + } + + fn execute_upgrade(&self) -> Result { + Err(errors::light_unimplemented(None)) + } +}