Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
6ca9f1b
Asyncify sign_with
May 6, 2020
139e31b
Asyncify generate/get keys
May 7, 2020
0a9ff21
Complete BareCryptoStore asyncification
May 7, 2020
2d4e2c9
Cleanup
May 7, 2020
dd001bb
Rebase
May 18, 2020
1949f7c
Add Proxy
May 18, 2020
88d48e6
Inject keystore proxy into extensions
May 20, 2020
a6f6ffc
Implement some methods
May 20, 2020
d7714e9
Await on send
May 20, 2020
73a32cf
Cleanup
May 20, 2020
b540f7a
Send result over the oneshot channel sender
May 22, 2020
391fd8a
Process one future at a time
May 25, 2020
0c352da
Fix cargo stuff
Aug 11, 2020
0bf4779
Asyncify sr25519_vrf_sign
Jun 12, 2020
700dcbf
Cherry-pick and fix changes
Aug 21, 2020
de8d0a9
Introduce SyncCryptoStore
Aug 21, 2020
ec5cc86
SQUASH ME WITH THE first commit
Aug 21, 2020
6fd1dfd
Implement into SyncCryptoStore
Aug 21, 2020
8c69a47
Implement BareCryptoStore for KeystoreProxyAdapter
Aug 21, 2020
0f4a993
authority-discovery
Aug 21, 2020
f199295
AURA
Aug 21, 2020
f1b9a50
BABE
Aug 21, 2020
a7dfb5b
finality-grandpa
Aug 21, 2020
8be5932
offchain-workers
Aug 21, 2020
05734ca
benchmarking-cli
Aug 21, 2020
e333cc6
sp_io
Aug 21, 2020
c25fc7b
test-utils
Aug 21, 2020
fcb9fff
application-crypto
Aug 21, 2020
8393835
Extensions and RPC
Aug 21, 2020
d428bc2
Client Service
Aug 21, 2020
1833dcf
bin
Aug 21, 2020
a51c40b
Update cargo.lock
Aug 21, 2020
437fb10
Implement BareCryptoStore on proxy directly
Aug 26, 2020
ce83c89
Simplify proxy setup
Aug 26, 2020
5632e8b
Fix authority-discover
Aug 26, 2020
49b58cb
Pass async keystore to authority-discovery
Aug 28, 2020
774c7d9
Fix tests
Aug 28, 2020
c3d976a
Use async keystore in authority-discovery
Aug 28, 2020
0a97a02
Rename BareCryptoStore to CryptoStore
Aug 28, 2020
e95ff86
WIP
Aug 31, 2020
bae8aee
Remote mutable borrow in CryptoStore trait
Aug 31, 2020
09c61ab
Implement Keystore with backends
Aug 31, 2020
4533975
Remove Proxy implementation
Aug 31, 2020
d0884ef
Fix service builder and keystore user-crates
Aug 31, 2020
54a0573
Fix tests
Aug 31, 2020
a0b73d2
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Aug 31, 2020
3165841
Rework authority-discovery after refactoring
Sep 1, 2020
0eed201
futures::select!
Sep 1, 2020
9e2a0ac
Fix multiple mut borrows in authority-discovery
Sep 1, 2020
312cc5b
Merge fixes
Sep 1, 2020
b0cc694
Require sync
Sep 1, 2020
6bb48a2
Restore Cargo.lock
Sep 1, 2020
387da2e
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 1, 2020
cdf43e6
PR feedback - round 1
Sep 1, 2020
fd00d9b
Remove Keystore and use LocalKeystore directly
Sep 1, 2020
68965ce
Join
Sep 1, 2020
b0a6fce
Remove sync requirement
Sep 1, 2020
da4c039
Fix keystore tests
Sep 1, 2020
3fca456
Fix tests
Sep 2, 2020
325fe0d
client/authority-discovery: Remove event stream dynamic dispatching
mxinden Sep 2, 2020
0be4d79
Make it compile
Sep 2, 2020
792292c
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 2, 2020
4d8654f
Fix submit_transaction
Sep 2, 2020
4f6a5e5
Fix block_on issue
Sep 4, 2020
54304e4
Use await in async context
Sep 4, 2020
a710060
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 4, 2020
b471f58
Fix manual seal keystore
Sep 4, 2020
e1f18cc
Fix authoring_blocks test
Sep 7, 2020
0ec4fde
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 7, 2020
230103a
fix aura authoring_blocks
Sep 7, 2020
100a09c
Try to fix tests for auth-discovery
Sep 8, 2020
8509a1b
client/authority-discovery: Fix lookup_throttling test
mxinden Sep 8, 2020
e4bb4b9
client/authority-discovery: Fix triggers_dht_get_query test
mxinden Sep 8, 2020
873afc0
Fix epoch_authorship_works
Sep 8, 2020
e67e615
client/authority-discovery: Remove timing assumption in unit test
mxinden Sep 8, 2020
7c4a12d
client/authority-discovery: Revert changes to termination test
mxinden Sep 8, 2020
bdf2e27
PR feedback
Sep 9, 2020
e9ef22f
Remove deadcode and mark test code
Sep 9, 2020
e53226b
Fix test_sync
Sep 14, 2020
3c1a606
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 14, 2020
d739ddf
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 15, 2020
bcfa470
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 17, 2020
cc0cf4e
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 20, 2020
9897f53
Use the correct keyring type
Sep 21, 2020
8124deb
Return when from_service stream is closed
Sep 21, 2020
ac63821
Convert SyncCryptoStore to a trait
Sep 21, 2020
64b4d9c
Fix line width
Sep 21, 2020
3ad796b
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 21, 2020
ac45a38
Fix line width - take 2
Sep 21, 2020
c26f7f6
Remove unused import
Sep 21, 2020
84f307f
Fix keystore instantiation
Sep 21, 2020
221e1f6
PR feedback
Sep 21, 2020
ca8e6a8
Merge branch 'master' into pr/7000
shawntabrizi Sep 21, 2020
9aa1152
Remove KeystoreContainer
Sep 22, 2020
d9cf952
Merge branch 'async-keystore-auth-discovery' of github.com:rakanalh/s…
Sep 22, 2020
814eef0
Revert "Remove KeystoreContainer"
Sep 22, 2020
edb4ecb
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 22, 2020
576943e
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 22, 2020
b6b08a5
Take a ref of keystore
Sep 22, 2020
d44cfe8
Move keystore to dev-dependencies
Sep 22, 2020
adbba45
Address some PR feedback
Sep 22, 2020
89ccff5
Missed one
Sep 22, 2020
07134dd
Pass keystore reference - take 2
Sep 23, 2020
db70636
client/finality-grandpa: Use `Arc<dyn CryptoStore>` instead of SyncXXX
mxinden Sep 22, 2020
ad69c2c
Remove SyncCryptoStorePtr
Sep 23, 2020
453d944
Remove KeystoreContainer & SyncCryptoStorePtr
Sep 23, 2020
331807e
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 23, 2020
4622550
PR feedback
Sep 23, 2020
2885dd8
*: Use CryptoStorePtr whereever possible
mxinden Sep 23, 2020
757061c
*: Define SyncCryptoStore as a pure extension trait of CryptoStore
mxinden Sep 23, 2020
99e005f
Follow up to SyncCryptoStore extension trait
Sep 23, 2020
2bc499e
Adjust docs for SyncCryptoStore as Ben suggested
Sep 23, 2020
a71f01f
Cleanup unnecessary requirements
Sep 23, 2020
2c74c4d
sp-keystore
Sep 24, 2020
a56121e
Use async_std::task::block_on in keystore
Sep 24, 2020
667e878
Fix block_on std requirement
Sep 24, 2020
c6df3de
Update primitives/keystore/src/lib.rs
rakanalh Sep 24, 2020
015866d
Fix wasm build
Sep 24, 2020
c789610
Merge branch 'async-keystore-auth-discovery' of github.com:rakanalh/s…
Sep 24, 2020
31d4176
Remove unused var
Sep 24, 2020
3e666fe
Fix wasm compilation - take 2
Sep 24, 2020
f5acb5d
Revert async-std in keystore
Sep 24, 2020
360d730
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Sep 28, 2020
4c74e9d
Fix indent
Oct 1, 2020
b5a66db
Fix version and copyright
Oct 1, 2020
8d5f685
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Oct 1, 2020
9e170f2
Cleanup feature = "std"
Oct 1, 2020
a176da9
Auth Discovery: Ignore if from_service is cloed
Oct 2, 2020
a5fa388
Max's suggestion
Oct 4, 2020
9a4ede4
Revert async-std usage for block_on
Oct 5, 2020
6346a13
Address PR feedback
Oct 6, 2020
086d702
Fix example offchain worker build
Oct 7, 2020
72fb7ad
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Oct 7, 2020
a5f4bd1
Address PR feedback
Oct 8, 2020
eaae1ce
Merge remote-tracking branch 'upstream/master' into async-keystore-au…
Oct 8, 2020
ae6d14f
Update Cargo.lock
Oct 8, 2020
a8e96f8
Move unused methods to test helper functions
Oct 8, 2020
757a5d8
Restore accidentally deleted cargo.lock files
Oct 8, 2020
d2a5de4
Fix unused imports
Oct 8, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Client Service
  • Loading branch information
Rakan Alhneiti committed Aug 21, 2020
commit d428bc236c25a2af82ee99c842c00b477e98eb2f
1 change: 1 addition & 0 deletions client/api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ codec = { package = "parity-scale-codec", version = "1.3.4", default-features =
sp-consensus = { version = "0.8.0-rc5", path = "../../primitives/consensus/common" }
derive_more = { version = "0.99.2" }
sc-executor = { version = "0.8.0-rc5", path = "../executor" }
sc-keystore = { version = "2.0.0-rc5", path = "../keystore" }
sp-externalities = { version = "0.8.0-rc5", path = "../../primitives/externalities" }
fnv = { version = "1.0.6" }
futures = { version = "0.3.1" }
Expand Down
94 changes: 65 additions & 29 deletions client/service/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ use sp_consensus::{
};
use jsonrpc_pubsub::manager::SubscriptionManager;
use futures::{
Future, FutureExt, StreamExt,
FutureExt, StreamExt,
future::ready,
channel::oneshot,
};
Expand All @@ -45,6 +45,7 @@ use sc_keystore::{
proxy as keystore_proxy,
KeystoreProxy,
KeystoreReceiver,
KeystoreProxyAdapter,
},
};
use log::{info, warn, error};
Expand All @@ -63,7 +64,7 @@ use sc_telemetry::{telemetry, SUBSTRATE_INFO};
use sp_transaction_pool::MaintainedTransactionPool;
use prometheus_endpoint::Registry;
use sc_client_db::{Backend, DatabaseSettings};
use sp_core::traits::{CodeExecutor, SpawnNamed};
use sp_core::traits::{CodeExecutor, SpawnNamed, SyncCryptoStore};
use sp_runtime::BuildStorage;
use sc_client_api::{
BlockBackend, BlockchainEvents,
Expand All @@ -72,7 +73,6 @@ use sc_client_api::{
execution_extensions::ExecutionExtensions
};
use sp_blockchain::{HeaderMetadata, HeaderBackend};
use sp_core::storage::Storage;

/// A utility trait for building an RPC extension given a `DenyUnsafe` instance.
/// This is useful since at service definition time we don't know whether the
Expand Down Expand Up @@ -169,16 +169,16 @@ pub type TLightCallExecutor<TBl, TExecDisp> = sc_light::GenesisCallExecutor<
type TFullParts<TBl, TRtApi, TExecDisp> = (
TFullClient<TBl, TRtApi, TExecDisp>,
Arc<TFullBackend<TBl>>,
Arc<RwLock<sc_keystore::Store>>,
Arc<KeystoreProxy>,
KeystoreReceiver,
KeystoreParams,
KeystoreReceiver<Keystore>,
TaskManager,
);

type TLightParts<TBl, TRtApi, TExecDisp> = (
Arc<TLightClient<TBl, TRtApi, TExecDisp>>,
Arc<TLightBackend<TBl>>,
Arc<RwLock<sc_keystore::Store>>,
KeystoreParams,
KeystoreReceiver<Keystore>,
TaskManager,
Arc<OnDemand<TBl>>,
);
Expand All @@ -200,6 +200,51 @@ pub type TLightClientWithBackend<TBl, TRtApi, TExecDisp, TBackend> = Client<
TRtApi,
>;

/// Construct and hold different layers of Keystore wrappers
pub struct KeystoreParams {
keystore: Arc<RwLock<KeystoreProxyAdapter>>,
proxy: Arc<KeystoreProxy>,
sync_keystore: Arc<SyncCryptoStore>,
}

impl KeystoreParams {
/// Construct KeystoreParams
pub fn new(config: &KeystoreConfig) -> Result<(Self, KeystoreReceiver<Keystore>), Error> {
let keystore = match config {
KeystoreConfig::Path { path, password } => Keystore::open(
path.clone(),
password.clone()
)?,
KeystoreConfig::InMemory => Keystore::new_in_memory(),
};
let (keystore_proxy, keystore_receiver) = keystore_proxy(keystore);
let keystore_proxy = Arc::new(keystore_proxy);
let keystore = Arc::new(RwLock::new(KeystoreProxyAdapter::new(keystore_proxy.clone())));
let sync_keystore = Arc::new(SyncCryptoStore::new(keystore.clone()));

Ok((Self {
keystore,
sync_keystore,
proxy: keystore_proxy,
}, keystore_receiver))
}

/// Returns an adapter to the asynchronous keystore that implements `BareCryptoStore`
pub fn keystore(&self) -> Arc<RwLock<KeystoreProxyAdapter>> {
self.keystore.clone()
}

/// Returns the asynchronous keystore proxy
pub fn proxy(&self) -> Arc<KeystoreProxy> {
self.proxy.clone()
}

/// Returns the synchrnous keystore wrapper
pub fn sync_keystore(&self) -> Arc<SyncCryptoStore> {
self.sync_keystore.clone()
}
}

/// Creates a new full client for the given config.
pub fn new_full_client<TBl, TRtApi, TExecDisp>(
config: &Configuration,
Expand All @@ -217,15 +262,7 @@ pub fn new_full_parts<TBl, TRtApi, TExecDisp>(
TBl: BlockT,
TExecDisp: NativeExecutionDispatch + 'static,
{
let keystore = match &config.keystore {
KeystoreConfig::Path { path, password } => Keystore::open(
path.clone(),
password.clone()
)?,
KeystoreConfig::InMemory => Keystore::new_in_memory(),
};
let (keystore_proxy, keystore_receiver) = keystore_proxy(keystore.clone());
let keystore_proxy = Arc::new(keystore_proxy);
let (keystore_container, keystore_receiver) = KeystoreParams::new(&config.keystore)?;

let task_manager = {
let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry);
Expand Down Expand Up @@ -258,8 +295,7 @@ pub fn new_full_parts<TBl, TRtApi, TExecDisp>(

let extensions = sc_client_api::execution_extensions::ExecutionExtensions::new(
config.execution_strategies.clone(),
Some(keystore.clone()),
Some(keystore_proxy.clone()),
Some(keystore_container.sync_keystore()),
);

new_client(
Expand All @@ -278,7 +314,13 @@ pub fn new_full_parts<TBl, TRtApi, TExecDisp>(
)?
};

Ok((client, backend, keystore, keystore_proxy, keystore_receiver, task_manager))
Ok((
client,
backend,
keystore_container,
keystore_receiver,
task_manager
))
}

/// Create the initial parts of a light node.
Expand All @@ -294,13 +336,7 @@ pub fn new_light_parts<TBl, TRtApi, TExecDisp>(
TaskManager::new(config.task_executor.clone(), registry)?
};

let keystore = match &config.keystore {
KeystoreConfig::Path { path, password } => Keystore::open(
path.clone(),
password.clone()
)?,
KeystoreConfig::InMemory => Keystore::new_in_memory(),
};
let (keystore_params, keystore_receiver) = KeystoreParams::new(&config.keystore)?;

let executor = NativeExecutor::<TExecDisp>::new(
config.wasm_method,
Expand Down Expand Up @@ -336,7 +372,7 @@ pub fn new_light_parts<TBl, TRtApi, TExecDisp>(
config.prometheus_config.as_ref().map(|config| config.registry.clone()),
)?);

Ok((client, backend, keystore, task_manager, on_demand))
Ok((client, backend, keystore_params, keystore_receiver, task_manager, on_demand))
}

/// Create an instance of db-backed client.
Expand Down Expand Up @@ -395,7 +431,7 @@ pub struct SpawnTasksParams<'a, TBl: BlockT, TCl, TExPool, TRpc, Backend> {
/// A task manager returned by `new_full_parts`/`new_light_parts`.
pub task_manager: &'a mut TaskManager,
/// A shared keystore returned by `new_full_parts`/`new_light_parts`.
pub keystore: Arc<RwLock<Keystore>>,
pub keystore: Arc<SyncCryptoStore>,
/// An optional, shared data fetcher for light clients.
pub on_demand: Option<Arc<OnDemand<TBl>>>,
/// A shared transaction pool.
Expand Down Expand Up @@ -721,7 +757,7 @@ fn gen_handler<TBl, TBackend, TExPool, TRpc, TCl>(
spawn_handle: SpawnTaskHandle,
client: Arc<TCl>,
transaction_pool: Arc<TExPool>,
keystore: Arc<RwLock<Keystore>>,
keystore: Arc<SyncCryptoStore>,
on_demand: Option<Arc<OnDemand<TBl>>>,
remote_blockchain: Option<Arc<dyn RemoteBlockchain<TBl>>>,
rpc_extensions_builder: &(dyn RpcExtensionBuilder<Output = TRpc> + Send),
Expand Down
31 changes: 21 additions & 10 deletions client/service/src/client/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,13 @@ use sp_core::{
storage::{well_known_keys, ChildInfo, PrefixedStorageKey, StorageData, StorageKey},
ChangesTrieConfiguration, ExecutionContext, NativeOrEncoded,
};
use sc_keystore::proxy::proxy as keystore_proxy;
#[cfg(feature="test-helpers")]
use sp_core::traits::SyncCryptoStore;
#[cfg(feature="test-helpers")]
use sc_keystore::proxy::{
proxy as keystore_proxy,
KeystoreProxyAdapter,
};
use sc_telemetry::{telemetry, SUBSTRATE_INFO};
use sp_runtime::{
Justification, BuildStorage,
Expand Down Expand Up @@ -145,10 +151,10 @@ impl<H> PrePostHeader<H> {

/// Create an instance of in-memory client.
#[cfg(feature="test-helpers")]
pub fn new_in_mem<E, Block, S, RA>(
pub fn new_in_mem<E, Block, S, RA, TStore>(
executor: E,
genesis_storage: &S,
keystore: Option<sp_core::traits::BareCryptoStorePtr>,
keystore: Option<TStore>,
prometheus_registry: Option<Registry>,
spawn_handle: Box<dyn SpawnNamed>,
config: ClientConfig,
Expand All @@ -161,6 +167,7 @@ pub fn new_in_mem<E, Block, S, RA>(
E: CodeExecutor + RuntimeInfo,
S: BuildStorage,
Block: BlockT,
TStore: sp_core::traits::BareCryptoStore + 'static,
{
new_with_backend(
Arc::new(in_mem::Backend::new()),
Expand All @@ -185,11 +192,11 @@ pub struct ClientConfig {
/// Create a client with the explicitly provided backend.
/// This is useful for testing backend implementations.
#[cfg(feature="test-helpers")]
pub fn new_with_backend<B, E, Block, S, RA>(
pub fn new_with_backend<B, E, Block, S, RA, TStore>(
backend: Arc<B>,
executor: E,
build_genesis_storage: &S,
keystore: Option<sp_core::traits::BareCryptoStorePtr>,
keystore: Option<TStore>,
spawn_handle: Box<dyn SpawnNamed>,
prometheus_registry: Option<Registry>,
config: ClientConfig,
Expand All @@ -199,17 +206,21 @@ pub fn new_with_backend<B, E, Block, S, RA>(
S: BuildStorage,
Block: BlockT,
B: backend::LocalBackend<Block> + 'static,
TStore: sp_core::traits::BareCryptoStore + 'static,
{
let keystore_proxy = match keystore.clone() {
let sync_keystore = match keystore {
Some(store) => {
let (keystore_proxy, _) = keystore_proxy(store.clone());
Some(Arc::new(keystore_proxy))
let (keystore_proxy, _) = keystore_proxy(store);
let keystore_proxy = Arc::new(keystore_proxy);
let keystore = Arc::new(RwLock::new(KeystoreProxyAdapter::new(keystore_proxy.clone())));
let sync_keystore = Arc::new(SyncCryptoStore::new(keystore.clone()));
Some(sync_keystore)
},
None => None,
None => None
};

let call_executor = LocalCallExecutor::new(backend.clone(), executor, spawn_handle, config.clone());
let extensions = ExecutionExtensions::new(Default::default(), keystore, keystore_proxy);
let extensions = ExecutionExtensions::new(Default::default(), sync_keystore);
Client::new(
backend,
call_executor,
Expand Down
12 changes: 7 additions & 5 deletions client/service/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ use sp_utils::{status_sinks, mpsc::{tracing_unbounded, TracingUnboundedReceiver,
pub use self::error::Error;
pub use self::builder::{
new_full_client, new_client, new_full_parts, new_light_parts,
spawn_tasks, build_network, BuildNetworkParams, NetworkStarter, build_offchain_workers,
SpawnTasksParams, TFullClient, TLightClient, TFullBackend, TLightBackend,
TLightBackendWithHash, TLightClientWithBackend,
spawn_tasks, build_network, build_offchain_workers,
BuildNetworkParams, KeystoreParams, NetworkStarter, SpawnTasksParams, TFullClient, TLightClient,
TFullBackend, TLightBackend, TLightBackendWithHash, TLightClientWithBackend,
TFullCallExecutor, TLightCallExecutor, RpcExtensionBuilder, NoopRpcExtensionBuilder,
};
pub use config::{
Expand All @@ -81,7 +81,7 @@ pub use task_manager::SpawnTaskHandle;
pub use task_manager::TaskManager;
pub use sp_consensus::import_queue::ImportQueue;
use sc_client_api::BlockchainEvents;
pub use sc_keystore::KeyStorePtr as KeyStore;
use sc_keystore::{Store as Keystore, proxy::KeystoreReceiver};

const DEFAULT_PROTOCOL_ID: &str = "sup";

Expand Down Expand Up @@ -162,7 +162,9 @@ pub struct PartialComponents<Client, Backend, SelectChain, ImportQueue, Transact
/// The chain task manager.
pub task_manager: TaskManager,
/// A shared keystore instance.
pub keystore: KeyStore,
pub keystore_params: KeystoreParams,
/// A shared keystore instance.
pub keystore_receiver: KeystoreReceiver<Keystore>,
/// A chain selection algorithm instance.
pub select_chain: SelectChain,
/// An import queue.
Expand Down
1 change: 1 addition & 0 deletions client/service/test/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,6 @@ substrate-test-runtime-client = { version = "2.0.0-rc5", path = "../../../test-u
sc-client-api = { version = "2.0.0-rc5", path = "../../api" }
sc-block-builder = { version = "0.8.0-rc5", path = "../../block-builder" }
sc-executor = { version = "0.8.0-rc5", path = "../../executor" }
sc-keystore = { version = "2.0.0-rc5", path = "../../keystore" }
sp-panic-handler = { version = "2.0.0-rc5", path = "../../../primitives/panic-handler" }
parity-scale-codec = "1.3.4"
4 changes: 3 additions & 1 deletion client/service/test/src/client/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ use sp_consensus::{
use sp_storage::StorageKey;
use sp_trie::{TrieConfiguration, trie_types::Layout};
use sp_runtime::{generic::BlockId, DigestItem};
use sc_keystore::Store;
use hex_literal::hex;

mod light;
Expand Down Expand Up @@ -1737,7 +1738,8 @@ fn cleans_up_closed_notification_sinks_on_block_import() {
_,
substrate_test_runtime_client::runtime::Block,
_,
substrate_test_runtime_client::runtime::RuntimeApi
substrate_test_runtime_client::runtime::RuntimeApi,
Store,
>(
substrate_test_runtime_client::new_native_executor(),
&substrate_test_runtime_client::GenesisParameters::default().genesis_storage(),
Expand Down