Move sc-client into sc-service (#5502)

* Drop client from sc-network and sc-client-db, move LongestChain to sc-client-api

* move leaves, cht, in_mem to sc-client-api, drop client from sc-finality-grandpa

* drop sc-service from sc-rpc

* drop sc-service from sc-consensus-aura

* drop sc-client from manual-seal and babe

* drop sc-client from utils/frame/rpc/system and utils/frame/benchmarking-cli

* drop sc-client from bin/node and bin/node-template

* drop sc-client

* fix tests

* remove check -p sc-client from gitlab.yml

* fix warnings

* fixes ui test

* fix light client tests

* adds associated Client type to AbstractService

* adds UsageProvider to Client

* fixed ui test, again

* tried and failed to get node-cli to compile for wasm

* thanks to tomaka for helping me get node-cli to compile for wasmm

* ui test pls pas 🙏🏾

* all tests passing 🪄

* no_run documentation code

* rm -f documentation code

* ClientProvider

* fix mega trait

* move LongestChain to sc-consensus, use adds minimal bounds to AbstractService::Client

* adds license to sc-consensus

Co-authored-by: Benjamin Kampmann <ben@parity.io>
This commit is contained in:
Seun Lanlege
2020-04-28 12:59:31 +01:00
committed by GitHub
parent 7784bdeffe
commit 4fa5941f44
87 changed files with 3937 additions and 3575 deletions
+1 -2
View File
@@ -16,7 +16,6 @@ sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/app
sp-consensus-aura = { version = "0.8.0-dev", path = "../../../primitives/consensus/aura" }
sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" }
sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" }
sc-client = { version = "0.8.0-dev", path = "../../" }
sc-client-api = { version = "2.0.0-dev", path = "../../api" }
codec = { package = "parity-scale-codec", version = "1.3.0" }
sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" }
@@ -42,7 +41,7 @@ sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" }
sc-executor = { version = "0.8.0-dev", path = "../../executor" }
sc-network = { version = "0.8.0-dev", path = "../../network" }
sc-network-test = { version = "0.8.0-dev", path = "../../network/test" }
sc-service = { version = "0.8.0-dev", path = "../../service" }
sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" }
substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" }
env_logger = "0.7.0"
tempfile = "3.1.0"
+3 -4
View File
@@ -46,8 +46,7 @@ use sp_consensus::{
use sp_consensus::import_queue::{
Verifier, BasicQueue, BoxJustificationImport, BoxFinalityProofImport,
};
use sc_client_api::backend::AuxStore;
use sc_client::BlockOf;
use sc_client_api::{backend::AuxStore, BlockOf};
use sp_blockchain::{
self, Result as CResult, well_known_cache_keys::{self, Id as CacheKeyId},
ProvideCache, HeaderBackend,
@@ -831,14 +830,14 @@ mod tests {
use sc_network::config::ProtocolConfig;
use parking_lot::Mutex;
use sp_keyring::sr25519::Keyring;
use sc_client::BlockchainEvents;
use sc_client_api::BlockchainEvents;
use sp_consensus_aura::sr25519::AuthorityPair;
use std::task::Poll;
use sc_block_builder::BlockBuilderProvider;
type Error = sp_blockchain::Error;
type TestClient = sc_client::Client<
type TestClient = substrate_test_runtime_client::client::Client<
substrate_test_runtime_client::Backend,
substrate_test_runtime_client::Executor,
TestBlock,
+1 -2
View File
@@ -28,7 +28,6 @@ sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" }
sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" }
sc-keystore = { version = "2.0.0-dev", path = "../../keystore" }
sc-client-api = { version = "2.0.0-dev", path = "../../api" }
sc-client = { version = "0.8.0-dev", path = "../../" }
sc-consensus-epochs = { version = "0.8.0-dev", path = "../epochs" }
sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" }
sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" }
@@ -54,7 +53,7 @@ sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" }
sc-executor = { version = "0.8.0-dev", path = "../../executor" }
sc-network = { version = "0.8.0-dev", path = "../../network" }
sc-network-test = { version = "0.8.0-dev", path = "../../network/test" }
sc-service = { version = "0.8.0-dev", path = "../../service" }
sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" }
substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" }
sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" }
env_logger = "0.7.0"
+1 -1
View File
@@ -40,7 +40,7 @@ type Item = DigestItem<Hash>;
type Error = sp_blockchain::Error;
type TestClient = sc_client::Client<
type TestClient = substrate_test_runtime_client::client::Client<
substrate_test_runtime_client::Backend,
substrate_test_runtime_client::Executor,
TestBlock,
@@ -0,0 +1,17 @@
[package]
name = "sc-consensus"
version = "0.8.0-dev"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
license = "GPL-3.0"
homepage = "https://substrate.dev"
repository = "https://github.com/paritytech/substrate/"
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
sc-client-api = { version = "2.0.0-dev", path = "../../api" }
sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" }
sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" }
sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" }
@@ -0,0 +1,19 @@
// Copyright 2019-2020 Parity Technologies (UK) Ltd.
// This file is part of Substrate.
// Substrate 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.
// Substrate 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 Substrate. If not, see <http://www.gnu.org/licenses/>.
//! Collection of consensus specific imlementations
mod longest_chain;
pub use longest_chain::LongestChain;
@@ -0,0 +1,101 @@
// Copyright 2019-2020 Parity Technologies (UK) Ltd.
// This file is part of Substrate.
// Substrate 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.
// Substrate 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 Substrate. If not, see <http://www.gnu.org/licenses/>.
//! Longest chain implementation
use std::sync::Arc;
use std::marker::PhantomData;
use sc_client_api::backend;
use sp_consensus::{SelectChain, Error as ConsensusError};
use sp_blockchain::{Backend, HeaderBackend};
use sp_runtime::{
traits::{NumberFor, Block as BlockT},
generic::BlockId,
};
/// Implement Longest Chain Select implementation
/// where 'longest' is defined as the highest number of blocks
pub struct LongestChain<B, Block> {
backend: Arc<B>,
_phantom: PhantomData<Block>
}
impl<B, Block> Clone for LongestChain<B, Block> {
fn clone(&self) -> Self {
let backend = self.backend.clone();
LongestChain {
backend,
_phantom: Default::default()
}
}
}
impl<B, Block> LongestChain<B, Block>
where
B: backend::Backend<Block>,
Block: BlockT,
{
/// Instantiate a new LongestChain for Backend B
pub fn new(backend: Arc<B>) -> Self {
LongestChain {
backend,
_phantom: Default::default()
}
}
fn best_block_header(&self) -> sp_blockchain::Result<<Block as BlockT>::Header> {
let info = self.backend.blockchain().info();
let import_lock = self.backend.get_import_lock();
let best_hash = self.backend
.blockchain()
.best_containing(info.best_hash, None, import_lock)?
.unwrap_or(info.best_hash);
Ok(self.backend.blockchain().header(BlockId::Hash(best_hash))?
.expect("given block hash was fetched from block in db; qed"))
}
fn leaves(&self) -> Result<Vec<<Block as BlockT>::Hash>, sp_blockchain::Error> {
self.backend.blockchain().leaves()
}
}
impl<B, Block> SelectChain<Block> for LongestChain<B, Block>
where
B: backend::Backend<Block>,
Block: BlockT,
{
fn leaves(&self) -> Result<Vec<<Block as BlockT>::Hash>, ConsensusError> {
LongestChain::leaves(self)
.map_err(|e| ConsensusError::ChainLookup(e.to_string()).into())
}
fn best_chain(&self) -> Result<<Block as BlockT>::Header, ConsensusError>
{
LongestChain::best_block_header(&self)
.map_err(|e| ConsensusError::ChainLookup(e.to_string()).into())
}
fn finality_target(
&self,
target_hash: Block::Hash,
maybe_max_number: Option<NumberFor<Block>>
) -> Result<Option<Block::Hash>, ConsensusError> {
let import_lock = self.backend.get_import_lock();
self.backend.blockchain().best_containing(target_hash, maybe_max_number, import_lock)
.map_err(|e| ConsensusError::ChainLookup(e.to_string()).into())
}
}
@@ -22,7 +22,6 @@ parking_lot = "0.10.0"
serde = { version = "1.0", features=["derive"] }
assert_matches = "1.3.0"
sc-client = { path = "../../../client" , version = "0.8.0-dev"}
sc-client-api = { path = "../../../client/api" , version = "2.0.0-dev"}
sc-transaction-pool = { path = "../../transaction-pool" , version = "2.0.0-dev"}
sp-blockchain = { path = "../../../primitives/blockchain" , version = "2.0.0-dev"}