Make genesis state locally-available on light client (#1622)

* make genesis state available on light client

* RemoteOrLocalCallExecutor

* code_is_executed_locally_or_remotely

* OnDemandOrGenesisState tests

* some comments
This commit is contained in:
Svyatoslav Nikolsky
2019-02-01 12:27:54 +03:00
committed by Gav Wood
parent 5d82cf243e
commit 381cf26f55
8 changed files with 510 additions and 79 deletions
+22 -6
View File
@@ -60,16 +60,32 @@ pub type FullExecutor<F> = client::LocalCallExecutor<
pub type LightBackend<F> = client::light::backend::Backend<
client_db::light::LightStorage<<F as ServiceFactory>::Block>,
network::OnDemand<<F as ServiceFactory>::Block, NetworkService<F>>,
Blake2Hasher,
>;
/// Light client executor type for a factory.
pub type LightExecutor<F> = client::light::call_executor::RemoteCallExecutor<
client::light::blockchain::Blockchain<
pub type LightExecutor<F> = client::light::call_executor::RemoteOrLocalCallExecutor<
<F as ServiceFactory>::Block,
client::light::backend::Backend<
client_db::light::LightStorage<<F as ServiceFactory>::Block>,
network::OnDemand<<F as ServiceFactory>::Block, NetworkService<F>>,
Blake2Hasher
>,
client::light::call_executor::RemoteCallExecutor<
client::light::blockchain::Blockchain<
client_db::light::LightStorage<<F as ServiceFactory>::Block>,
network::OnDemand<<F as ServiceFactory>::Block, NetworkService<F>>
>,
network::OnDemand<<F as ServiceFactory>::Block, NetworkService<F>>
>,
network::OnDemand<<F as ServiceFactory>::Block, NetworkService<F>>,
Blake2Hasher,
client::LocalCallExecutor<
client::light::backend::Backend<
client_db::light::LightStorage<<F as ServiceFactory>::Block>,
network::OnDemand<<F as ServiceFactory>::Block, NetworkService<F>>,
Blake2Hasher
>,
CodeExecutor<F>
>
>;
/// Full client type for a factory.
@@ -499,10 +515,10 @@ impl<Factory: ServiceFactory> Components for LightComponents<Factory> {
};
let db_storage = client_db::light::LightStorage::new(db_settings)?;
let light_blockchain = client::light::new_light_blockchain(db_storage);
let fetch_checker = Arc::new(client::light::new_fetch_checker::<_, Blake2Hasher, _, _, _>(light_blockchain.clone(), executor));
let fetch_checker = Arc::new(client::light::new_fetch_checker(light_blockchain.clone(), executor.clone()));
let fetcher = Arc::new(network::OnDemand::new(fetch_checker));
let client_backend = client::light::new_light_backend(light_blockchain, fetcher.clone());
let client = client::light::new_light(client_backend, fetcher.clone(), &config.chain_spec)?;
let client = client::light::new_light(client_backend, fetcher.clone(), &config.chain_spec, executor)?;
Ok((Arc::new(client), Some(fetcher)))
}