mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-20 07:01:02 +00:00
Move client consensus parts out of primitives and into client/consensus/api (#9319)
* moved client code out of primitives * bump ci * Fixup from merge. * Removed unused deps thanks to review feedback * Removing unneeded deps * updating lock file * note about rustfmt * fixed typo to bump ci * Move lonely CacheKeyId to parent * cargo fmt * updating import style * Update docs/STYLE_GUIDE.md Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
This commit is contained in:
Generated
+25
-3
@@ -4542,6 +4542,7 @@ dependencies = [
|
|||||||
"sc-cli",
|
"sc-cli",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
"sc-client-db",
|
"sc-client-db",
|
||||||
|
"sc-consensus",
|
||||||
"sc-executor",
|
"sc-executor",
|
||||||
"sc-service",
|
"sc-service",
|
||||||
"sp-api",
|
"sp-api",
|
||||||
@@ -7242,7 +7243,6 @@ dependencies = [
|
|||||||
"sc-state-db",
|
"sc-state-db",
|
||||||
"sp-arithmetic",
|
"sp-arithmetic",
|
||||||
"sp-blockchain",
|
"sp-blockchain",
|
||||||
"sp-consensus",
|
|
||||||
"sp-core",
|
"sp-core",
|
||||||
"sp-database",
|
"sp-database",
|
||||||
"sp-keyring",
|
"sp-keyring",
|
||||||
@@ -7260,11 +7260,24 @@ name = "sc-consensus"
|
|||||||
version = "0.10.0-dev"
|
version = "0.10.0-dev"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
"futures 0.3.15",
|
||||||
|
"futures-timer 3.0.2",
|
||||||
|
"libp2p",
|
||||||
|
"log",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"serde",
|
||||||
|
"sp-api",
|
||||||
"sp-blockchain",
|
"sp-blockchain",
|
||||||
"sp-consensus",
|
"sp-consensus",
|
||||||
|
"sp-core",
|
||||||
"sp-runtime",
|
"sp-runtime",
|
||||||
|
"sp-state-machine",
|
||||||
|
"sp-test-primitives",
|
||||||
|
"sp-utils",
|
||||||
|
"substrate-prometheus-endpoint",
|
||||||
|
"thiserror",
|
||||||
|
"wasm-timer",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -7281,6 +7294,7 @@ dependencies = [
|
|||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"sc-block-builder",
|
"sc-block-builder",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"sc-consensus",
|
||||||
"sc-consensus-slots",
|
"sc-consensus-slots",
|
||||||
"sc-executor",
|
"sc-executor",
|
||||||
"sc-keystore",
|
"sc-keystore",
|
||||||
@@ -7331,6 +7345,7 @@ dependencies = [
|
|||||||
"retain_mut",
|
"retain_mut",
|
||||||
"sc-block-builder",
|
"sc-block-builder",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"sc-consensus",
|
||||||
"sc-consensus-epochs",
|
"sc-consensus-epochs",
|
||||||
"sc-consensus-slots",
|
"sc-consensus-slots",
|
||||||
"sc-consensus-uncles",
|
"sc-consensus-uncles",
|
||||||
@@ -7422,6 +7437,7 @@ dependencies = [
|
|||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"sc-basic-authorship",
|
"sc-basic-authorship",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"sc-consensus",
|
||||||
"sc-consensus-babe",
|
"sc-consensus-babe",
|
||||||
"sc-consensus-epochs",
|
"sc-consensus-epochs",
|
||||||
"sc-transaction-pool",
|
"sc-transaction-pool",
|
||||||
@@ -7457,6 +7473,7 @@ dependencies = [
|
|||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"sc-consensus",
|
||||||
"sp-api",
|
"sp-api",
|
||||||
"sp-block-builder",
|
"sp-block-builder",
|
||||||
"sp-blockchain",
|
"sp-blockchain",
|
||||||
@@ -7479,6 +7496,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"sc-consensus",
|
||||||
"sc-telemetry",
|
"sc-telemetry",
|
||||||
"sp-api",
|
"sp-api",
|
||||||
"sp-application-crypto",
|
"sp-application-crypto",
|
||||||
@@ -7695,6 +7713,7 @@ dependencies = [
|
|||||||
"rand 0.8.3",
|
"rand 0.8.3",
|
||||||
"sc-block-builder",
|
"sc-block-builder",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"sc-consensus",
|
||||||
"sc-finality-grandpa",
|
"sc-finality-grandpa",
|
||||||
"sc-network",
|
"sc-network",
|
||||||
"sc-service",
|
"sc-service",
|
||||||
@@ -7797,6 +7816,7 @@ dependencies = [
|
|||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
"sc-block-builder",
|
"sc-block-builder",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
|
"sc-consensus",
|
||||||
"sc-peerset",
|
"sc-peerset",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -7954,6 +7974,7 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
"sp-api",
|
"sp-api",
|
||||||
"sp-blockchain",
|
"sp-blockchain",
|
||||||
|
"sp-consensus",
|
||||||
"sp-core",
|
"sp-core",
|
||||||
"sp-io",
|
"sp-io",
|
||||||
"sp-keystore",
|
"sp-keystore",
|
||||||
@@ -8048,6 +8069,7 @@ dependencies = [
|
|||||||
"sc-chain-spec",
|
"sc-chain-spec",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
"sc-client-db",
|
"sc-client-db",
|
||||||
|
"sc-consensus",
|
||||||
"sc-executor",
|
"sc-executor",
|
||||||
"sc-finality-grandpa",
|
"sc-finality-grandpa",
|
||||||
"sc-informant",
|
"sc-informant",
|
||||||
@@ -8110,6 +8132,7 @@ dependencies = [
|
|||||||
"sc-block-builder",
|
"sc-block-builder",
|
||||||
"sc-client-api",
|
"sc-client-api",
|
||||||
"sc-client-db",
|
"sc-client-db",
|
||||||
|
"sc-consensus",
|
||||||
"sc-executor",
|
"sc-executor",
|
||||||
"sc-light",
|
"sc-light",
|
||||||
"sc-network",
|
"sc-network",
|
||||||
@@ -8847,7 +8870,6 @@ dependencies = [
|
|||||||
"async-trait",
|
"async-trait",
|
||||||
"futures 0.3.15",
|
"futures 0.3.15",
|
||||||
"futures-timer 3.0.2",
|
"futures-timer 3.0.2",
|
||||||
"libp2p",
|
|
||||||
"log",
|
"log",
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"parking_lot 0.11.1",
|
"parking_lot 0.11.1",
|
||||||
@@ -9768,6 +9790,7 @@ dependencies = [
|
|||||||
"sp-api",
|
"sp-api",
|
||||||
"sp-application-crypto",
|
"sp-application-crypto",
|
||||||
"sp-block-builder",
|
"sp-block-builder",
|
||||||
|
"sp-consensus",
|
||||||
"sp-consensus-aura",
|
"sp-consensus-aura",
|
||||||
"sp-consensus-babe",
|
"sp-consensus-babe",
|
||||||
"sp-core",
|
"sp-core",
|
||||||
@@ -10024,7 +10047,6 @@ dependencies = [
|
|||||||
"sc-network",
|
"sc-network",
|
||||||
"sc-service",
|
"sc-service",
|
||||||
"sp-api",
|
"sp-api",
|
||||||
"sp-consensus",
|
|
||||||
"sp-consensus-babe",
|
"sp-consensus-babe",
|
||||||
"sp-inherents",
|
"sp-inherents",
|
||||||
"sp-keyring",
|
"sp-keyring",
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ pub fn new_partial(
|
|||||||
FullClient,
|
FullClient,
|
||||||
FullBackend,
|
FullBackend,
|
||||||
FullSelectChain,
|
FullSelectChain,
|
||||||
sp_consensus::DefaultImportQueue<Block, FullClient>,
|
sc_consensus::DefaultImportQueue<Block, FullClient>,
|
||||||
sc_transaction_pool::FullPool<Block, FullClient>,
|
sc_transaction_pool::FullPool<Block, FullClient>,
|
||||||
(
|
(
|
||||||
sc_finality_grandpa::GrandpaBlockImport<
|
sc_finality_grandpa::GrandpaBlockImport<
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ pub fn new_partial(
|
|||||||
FullClient,
|
FullClient,
|
||||||
FullBackend,
|
FullBackend,
|
||||||
FullSelectChain,
|
FullSelectChain,
|
||||||
sp_consensus::DefaultImportQueue<Block, FullClient>,
|
sc_consensus::DefaultImportQueue<Block, FullClient>,
|
||||||
sc_transaction_pool::FullPool<Block, FullClient>,
|
sc_transaction_pool::FullPool<Block, FullClient>,
|
||||||
(
|
(
|
||||||
impl Fn(node_rpc::DenyUnsafe, sc_rpc::SubscriptionTaskExecutor) -> node_rpc::IoHandler,
|
impl Fn(node_rpc::DenyUnsafe, sc_rpc::SubscriptionTaskExecutor) -> node_rpc::IoHandler,
|
||||||
@@ -595,14 +595,13 @@ mod tests {
|
|||||||
Address, BalancesCall, Call, UncheckedExtrinsic,
|
Address, BalancesCall, Call, UncheckedExtrinsic,
|
||||||
};
|
};
|
||||||
use sc_client_api::BlockBackend;
|
use sc_client_api::BlockBackend;
|
||||||
|
use sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy};
|
||||||
use sc_consensus_babe::{BabeIntermediate, CompatibleDigestItem, INTERMEDIATE_KEY};
|
use sc_consensus_babe::{BabeIntermediate, CompatibleDigestItem, INTERMEDIATE_KEY};
|
||||||
use sc_consensus_epochs::descendent_query;
|
use sc_consensus_epochs::descendent_query;
|
||||||
use sc_keystore::LocalKeystore;
|
use sc_keystore::LocalKeystore;
|
||||||
use sc_service_test::TestNetNode;
|
use sc_service_test::TestNetNode;
|
||||||
use sc_transaction_pool_api::{ChainEvent, MaintainedTransactionPool};
|
use sc_transaction_pool_api::{ChainEvent, MaintainedTransactionPool};
|
||||||
use sp_consensus::{
|
use sp_consensus::{BlockOrigin, Environment, Proposer};
|
||||||
BlockImport, BlockImportParams, BlockOrigin, Environment, ForkChoiceStrategy, Proposer,
|
|
||||||
};
|
|
||||||
use sp_core::{crypto::Pair as CryptoPair, Public, H256};
|
use sp_core::{crypto::Pair as CryptoPair, Public, H256};
|
||||||
use sp_inherents::InherentDataProvider;
|
use sp_inherents::InherentDataProvider;
|
||||||
use sp_keyring::AccountKeyring;
|
use sp_keyring::AccountKeyring;
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ sc-informant = { path = "../../../client/informant" }
|
|||||||
sc-consensus = { path = "../../../client/consensus/common" }
|
sc-consensus = { path = "../../../client/consensus/common" }
|
||||||
|
|
||||||
sp-runtime = { path = "../../../primitives/runtime" }
|
sp-runtime = { path = "../../../primitives/runtime" }
|
||||||
sp-consensus = { path = "../../../primitives/consensus/common" }
|
|
||||||
sp-keyring = { path = "../../../primitives/keyring" }
|
sp-keyring = { path = "../../../primitives/keyring" }
|
||||||
sp-timestamp = { path = "../../../primitives/timestamp" }
|
sp-timestamp = { path = "../../../primitives/timestamp" }
|
||||||
sp-api = { path = "../../../primitives/api" }
|
sp-api = { path = "../../../primitives/api" }
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ pallet-balances = { version = "4.0.0-dev", path = "../../../frame/balances" }
|
|||||||
sc-service = { version = "0.10.0-dev", features = ["test-helpers", "db"], path = "../../../client/service" }
|
sc-service = { version = "0.10.0-dev", features = ["test-helpers", "db"], path = "../../../client/service" }
|
||||||
sc-client-db = { version = "0.10.0-dev", path = "../../../client/db/", features = ["kvdb-rocksdb", "parity-db"] }
|
sc-client-db = { version = "0.10.0-dev", path = "../../../client/db/", features = ["kvdb-rocksdb", "parity-db"] }
|
||||||
sc-client-api = { version = "4.0.0-dev", path = "../../../client/api/" }
|
sc-client-api = { version = "4.0.0-dev", path = "../../../client/api/" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||||
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||||
pallet-contracts = { version = "4.0.0-dev", path = "../../../frame/contracts" }
|
pallet-contracts = { version = "4.0.0-dev", path = "../../../frame/contracts" }
|
||||||
pallet-grandpa = { version = "4.0.0-dev", path = "../../../frame/grandpa" }
|
pallet-grandpa = { version = "4.0.0-dev", path = "../../../frame/grandpa" }
|
||||||
|
|||||||
@@ -45,12 +45,11 @@ use sc_client_api::{
|
|||||||
BlockBackend, ExecutionStrategy,
|
BlockBackend, ExecutionStrategy,
|
||||||
};
|
};
|
||||||
use sc_client_db::PruningMode;
|
use sc_client_db::PruningMode;
|
||||||
|
use sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy, ImportResult, ImportedAux};
|
||||||
use sc_executor::{NativeExecutor, WasmExecutionMethod};
|
use sc_executor::{NativeExecutor, WasmExecutionMethod};
|
||||||
use sp_api::ProvideRuntimeApi;
|
use sp_api::ProvideRuntimeApi;
|
||||||
use sp_block_builder::BlockBuilder;
|
use sp_block_builder::BlockBuilder;
|
||||||
use sp_consensus::{
|
use sp_consensus::BlockOrigin;
|
||||||
BlockImport, BlockImportParams, BlockOrigin, ForkChoiceStrategy, ImportResult, ImportedAux,
|
|
||||||
};
|
|
||||||
use sp_core::{blake2_256, ed25519, sr25519, traits::SpawnNamed, ExecutionContext, Pair, Public};
|
use sp_core::{blake2_256, ed25519, sr25519, traits::SpawnNamed, ExecutionContext, Pair, Public};
|
||||||
use sp_inherents::InherentData;
|
use sp_inherents::InherentData;
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ use std::{
|
|||||||
sync::Arc,
|
sync::Arc,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use sp_consensus::ImportedState;
|
|
||||||
pub use sp_state_machine::Backend as StateBackend;
|
pub use sp_state_machine::Backend as StateBackend;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ sc-block-builder = { version = "0.10.0-dev", path = "../../block-builder" }
|
|||||||
sc-client-api = { version = "4.0.0-dev", path = "../../api" }
|
sc-client-api = { version = "4.0.0-dev", path = "../../api" }
|
||||||
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||||
sp-consensus-slots = { version = "0.10.0-dev", path = "../../../primitives/consensus/slots" }
|
sp-consensus-slots = { version = "0.10.0-dev", path = "../../../primitives/consensus/slots" }
|
||||||
derive_more = "0.99.2"
|
derive_more = "0.99.2"
|
||||||
futures = "0.3.9"
|
futures = "0.3.9"
|
||||||
|
|||||||
@@ -23,6 +23,10 @@ use codec::{Codec, Decode, Encode};
|
|||||||
use log::{debug, info, trace};
|
use log::{debug, info, trace};
|
||||||
use prometheus_endpoint::Registry;
|
use prometheus_endpoint::Registry;
|
||||||
use sc_client_api::{backend::AuxStore, BlockOf, UsageProvider};
|
use sc_client_api::{backend::AuxStore, BlockOf, UsageProvider};
|
||||||
|
use sc_consensus::{
|
||||||
|
block_import::{BlockImport, BlockImportParams, ForkChoiceStrategy},
|
||||||
|
import_queue::{BasicQueue, BoxJustificationImport, DefaultImportQueue, Verifier},
|
||||||
|
};
|
||||||
use sc_consensus_slots::{check_equivocation, CheckedHeader, InherentDataProviderExt};
|
use sc_consensus_slots::{check_equivocation, CheckedHeader, InherentDataProviderExt};
|
||||||
use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_TRACE};
|
use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_TRACE};
|
||||||
use sp_api::{ApiExt, ProvideRuntimeApi};
|
use sp_api::{ApiExt, ProvideRuntimeApi};
|
||||||
@@ -31,11 +35,7 @@ use sp_blockchain::{
|
|||||||
well_known_cache_keys::{self, Id as CacheKeyId},
|
well_known_cache_keys::{self, Id as CacheKeyId},
|
||||||
HeaderBackend, ProvideCache,
|
HeaderBackend, ProvideCache,
|
||||||
};
|
};
|
||||||
use sp_consensus::{
|
use sp_consensus::{BlockOrigin, CanAuthorWith, Error as ConsensusError};
|
||||||
import_queue::{BasicQueue, BoxJustificationImport, DefaultImportQueue, Verifier},
|
|
||||||
BlockImport, BlockImportParams, BlockOrigin, CanAuthorWith, Error as ConsensusError,
|
|
||||||
ForkChoiceStrategy,
|
|
||||||
};
|
|
||||||
use sp_consensus_aura::{
|
use sp_consensus_aura::{
|
||||||
digests::CompatibleDigestItem, inherents::AuraInherentData, AuraApi, ConsensusLog,
|
digests::CompatibleDigestItem, inherents::AuraInherentData, AuraApi, ConsensusLog,
|
||||||
AURA_ENGINE_ID,
|
AURA_ENGINE_ID,
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ use log::{debug, trace};
|
|||||||
use codec::{Codec, Decode, Encode};
|
use codec::{Codec, Decode, Encode};
|
||||||
|
|
||||||
use sc_client_api::{backend::AuxStore, BlockOf, UsageProvider};
|
use sc_client_api::{backend::AuxStore, BlockOf, UsageProvider};
|
||||||
|
use sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy, StateAction};
|
||||||
use sc_consensus_slots::{
|
use sc_consensus_slots::{
|
||||||
BackoffAuthoringBlocksStrategy, InherentDataProviderExt, SlotInfo, StorageChanges,
|
BackoffAuthoringBlocksStrategy, InherentDataProviderExt, SlotInfo, StorageChanges,
|
||||||
};
|
};
|
||||||
@@ -53,8 +54,7 @@ use sp_api::ProvideRuntimeApi;
|
|||||||
use sp_application_crypto::{AppKey, AppPublic};
|
use sp_application_crypto::{AppKey, AppPublic};
|
||||||
use sp_blockchain::{HeaderBackend, ProvideCache, Result as CResult};
|
use sp_blockchain::{HeaderBackend, ProvideCache, Result as CResult};
|
||||||
use sp_consensus::{
|
use sp_consensus::{
|
||||||
BlockImport, BlockImportParams, BlockOrigin, CanAuthorWith, Environment,
|
BlockOrigin, CanAuthorWith, Environment, Error as ConsensusError, Proposer, SelectChain,
|
||||||
Error as ConsensusError, ForkChoiceStrategy, Proposer, SelectChain, StateAction,
|
|
||||||
};
|
};
|
||||||
use sp_consensus_slots::Slot;
|
use sp_consensus_slots::Slot;
|
||||||
use sp_core::crypto::{Pair, Public};
|
use sp_core::crypto::{Pair, Public};
|
||||||
@@ -185,7 +185,7 @@ where
|
|||||||
PF: Environment<B, Error = Error> + Send + Sync + 'static,
|
PF: Environment<B, Error = Error> + Send + Sync + 'static,
|
||||||
PF::Proposer: Proposer<B, Error = Error, Transaction = sp_api::TransactionFor<C, B>>,
|
PF::Proposer: Proposer<B, Error = Error, Transaction = sp_api::TransactionFor<C, B>>,
|
||||||
SO: SyncOracle + Send + Sync + Clone,
|
SO: SyncOracle + Send + Sync + Clone,
|
||||||
L: sp_consensus::JustificationSyncLink<B>,
|
L: sc_consensus::JustificationSyncLink<B>,
|
||||||
CIDP: CreateInherentDataProviders<B, ()> + Send,
|
CIDP: CreateInherentDataProviders<B, ()> + Send,
|
||||||
CIDP::InherentDataProviders: InherentDataProviderExt + Send,
|
CIDP::InherentDataProviders: InherentDataProviderExt + Send,
|
||||||
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
||||||
@@ -277,7 +277,7 @@ where
|
|||||||
I: BlockImport<B, Transaction = sp_api::TransactionFor<C, B>> + Send + Sync + 'static,
|
I: BlockImport<B, Transaction = sp_api::TransactionFor<C, B>> + Send + Sync + 'static,
|
||||||
Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
|
Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
|
||||||
SO: SyncOracle + Send + Sync + Clone,
|
SO: SyncOracle + Send + Sync + Clone,
|
||||||
L: sp_consensus::JustificationSyncLink<B>,
|
L: sc_consensus::JustificationSyncLink<B>,
|
||||||
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
||||||
{
|
{
|
||||||
AuraWorker {
|
AuraWorker {
|
||||||
@@ -324,7 +324,7 @@ where
|
|||||||
P::Public: AppPublic + Public + Member + Encode + Decode + Hash,
|
P::Public: AppPublic + Public + Member + Encode + Decode + Hash,
|
||||||
P::Signature: TryFrom<Vec<u8>> + Member + Encode + Decode + Hash + Debug,
|
P::Signature: TryFrom<Vec<u8>> + Member + Encode + Decode + Hash + Debug,
|
||||||
SO: SyncOracle + Send + Clone,
|
SO: SyncOracle + Send + Clone,
|
||||||
L: sp_consensus::JustificationSyncLink<B>,
|
L: sc_consensus::JustificationSyncLink<B>,
|
||||||
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
||||||
Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
|
Error: std::error::Error + Send + From<sp_consensus::Error> + 'static,
|
||||||
{
|
{
|
||||||
@@ -395,7 +395,7 @@ where
|
|||||||
Self::Claim,
|
Self::Claim,
|
||||||
Self::EpochData,
|
Self::EpochData,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
sp_consensus::BlockImportParams<B, sp_api::TransactionFor<C, B>>,
|
sc_consensus::BlockImportParams<B, sp_api::TransactionFor<C, B>>,
|
||||||
sp_consensus::Error,
|
sp_consensus::Error,
|
||||||
> + Send
|
> + Send
|
||||||
+ 'static,
|
+ 'static,
|
||||||
@@ -431,7 +431,7 @@ where
|
|||||||
import_block.post_digests.push(signature_digest_item);
|
import_block.post_digests.push(signature_digest_item);
|
||||||
import_block.body = Some(body);
|
import_block.body = Some(body);
|
||||||
import_block.state_action =
|
import_block.state_action =
|
||||||
StateAction::ApplyChanges(sp_consensus::StorageChanges::Changes(storage_changes));
|
StateAction::ApplyChanges(sc_consensus::StorageChanges::Changes(storage_changes));
|
||||||
import_block.fork_choice = Some(ForkChoiceStrategy::LongestChain);
|
import_block.fork_choice = Some(ForkChoiceStrategy::LongestChain);
|
||||||
|
|
||||||
Ok(import_block)
|
Ok(import_block)
|
||||||
@@ -560,14 +560,14 @@ mod tests {
|
|||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use sc_block_builder::BlockBuilderProvider;
|
use sc_block_builder::BlockBuilderProvider;
|
||||||
use sc_client_api::BlockchainEvents;
|
use sc_client_api::BlockchainEvents;
|
||||||
|
use sc_consensus::BoxJustificationImport;
|
||||||
use sc_consensus_slots::{BackoffAuthoringOnFinalizedHeadLagging, SimpleSlotWorker};
|
use sc_consensus_slots::{BackoffAuthoringOnFinalizedHeadLagging, SimpleSlotWorker};
|
||||||
use sc_keystore::LocalKeystore;
|
use sc_keystore::LocalKeystore;
|
||||||
use sc_network::config::ProtocolConfig;
|
use sc_network::config::ProtocolConfig;
|
||||||
use sc_network_test::{Block as TestBlock, *};
|
use sc_network_test::{Block as TestBlock, *};
|
||||||
use sp_application_crypto::key_types::AURA;
|
use sp_application_crypto::key_types::AURA;
|
||||||
use sp_consensus::{
|
use sp_consensus::{
|
||||||
import_queue::BoxJustificationImport, AlwaysCanAuthor, DisableProofRecording,
|
AlwaysCanAuthor, DisableProofRecording, NoNetwork as DummyOracle, Proposal, SlotData,
|
||||||
NoNetwork as DummyOracle, Proposal, SlotData,
|
|
||||||
};
|
};
|
||||||
use sp_consensus_aura::sr25519::AuthorityPair;
|
use sp_consensus_aura::sr25519::AuthorityPair;
|
||||||
use sp_inherents::InherentData;
|
use sp_inherents::InherentData;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive"] }
|
codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive"] }
|
||||||
sp-consensus-babe = { version = "0.10.0-dev", path = "../../../primitives/consensus/babe" }
|
sp-consensus-babe = { version = "0.10.0-dev", path = "../../../primitives/consensus/babe" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||||
sp-core = { version = "4.0.0-dev", path = "../../../primitives/core" }
|
sp-core = { version = "4.0.0-dev", path = "../../../primitives/core" }
|
||||||
sp-application-crypto = { version = "4.0.0-dev", path = "../../../primitives/application-crypto" }
|
sp-application-crypto = { version = "4.0.0-dev", path = "../../../primitives/application-crypto" }
|
||||||
sp-keystore = { version = "0.10.0-dev", path = "../../../primitives/keystore" }
|
sp-keystore = { version = "0.10.0-dev", path = "../../../primitives/keystore" }
|
||||||
|
|||||||
@@ -85,6 +85,13 @@ use retain_mut::RetainMut;
|
|||||||
use schnorrkel::SignatureError;
|
use schnorrkel::SignatureError;
|
||||||
|
|
||||||
use sc_client_api::{backend::AuxStore, BlockchainEvents, ProvideUncles, UsageProvider};
|
use sc_client_api::{backend::AuxStore, BlockchainEvents, ProvideUncles, UsageProvider};
|
||||||
|
use sc_consensus::{
|
||||||
|
block_import::{
|
||||||
|
BlockCheckParams, BlockImport, BlockImportParams, ForkChoiceStrategy, ImportResult,
|
||||||
|
StateAction,
|
||||||
|
},
|
||||||
|
import_queue::{BasicQueue, BoxJustificationImport, DefaultImportQueue, Verifier},
|
||||||
|
};
|
||||||
use sc_consensus_epochs::{
|
use sc_consensus_epochs::{
|
||||||
descendent_query, Epoch as EpochT, EpochChangesFor, SharedEpochChanges, ViableEpochDescriptor,
|
descendent_query, Epoch as EpochT, EpochChangesFor, SharedEpochChanges, ViableEpochDescriptor,
|
||||||
};
|
};
|
||||||
@@ -100,10 +107,8 @@ use sp_blockchain::{
|
|||||||
Error as ClientError, HeaderBackend, HeaderMetadata, ProvideCache, Result as ClientResult,
|
Error as ClientError, HeaderBackend, HeaderMetadata, ProvideCache, Result as ClientResult,
|
||||||
};
|
};
|
||||||
use sp_consensus::{
|
use sp_consensus::{
|
||||||
import_queue::{BasicQueue, BoxJustificationImport, CacheKeyId, DefaultImportQueue, Verifier},
|
BlockOrigin, CacheKeyId, CanAuthorWith, Environment, Error as ConsensusError, Proposer,
|
||||||
BlockCheckParams, BlockImport, BlockImportParams, BlockOrigin, CanAuthorWith, Environment,
|
SelectChain, SlotData,
|
||||||
Error as ConsensusError, ForkChoiceStrategy, ImportResult, Proposer, SelectChain, SlotData,
|
|
||||||
StateAction,
|
|
||||||
};
|
};
|
||||||
use sp_consensus_babe::inherents::BabeInherentData;
|
use sp_consensus_babe::inherents::BabeInherentData;
|
||||||
use sp_consensus_slots::Slot;
|
use sp_consensus_slots::Slot;
|
||||||
@@ -465,7 +470,7 @@ where
|
|||||||
+ Sync
|
+ Sync
|
||||||
+ 'static,
|
+ 'static,
|
||||||
SO: SyncOracle + Send + Sync + Clone + 'static,
|
SO: SyncOracle + Send + Sync + Clone + 'static,
|
||||||
L: sp_consensus::JustificationSyncLink<B> + 'static,
|
L: sc_consensus::JustificationSyncLink<B> + 'static,
|
||||||
CIDP: CreateInherentDataProviders<B, ()> + Send + Sync + 'static,
|
CIDP: CreateInherentDataProviders<B, ()> + Send + Sync + 'static,
|
||||||
CIDP::InherentDataProviders: InherentDataProviderExt + Send,
|
CIDP::InherentDataProviders: InherentDataProviderExt + Send,
|
||||||
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>> + Send + 'static,
|
||||||
@@ -668,7 +673,7 @@ where
|
|||||||
E::Proposer: Proposer<B, Error = Error, Transaction = sp_api::TransactionFor<C, B>>,
|
E::Proposer: Proposer<B, Error = Error, Transaction = sp_api::TransactionFor<C, B>>,
|
||||||
I: BlockImport<B, Transaction = sp_api::TransactionFor<C, B>> + Send + Sync + 'static,
|
I: BlockImport<B, Transaction = sp_api::TransactionFor<C, B>> + Send + Sync + 'static,
|
||||||
SO: SyncOracle + Send + Clone,
|
SO: SyncOracle + Send + Clone,
|
||||||
L: sp_consensus::JustificationSyncLink<B>,
|
L: sc_consensus::JustificationSyncLink<B>,
|
||||||
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>>,
|
BS: BackoffAuthoringBlocksStrategy<NumberFor<B>>,
|
||||||
Error: std::error::Error + Send + From<ConsensusError> + From<I::Error> + 'static,
|
Error: std::error::Error + Send + From<ConsensusError> + From<I::Error> + 'static,
|
||||||
{
|
{
|
||||||
@@ -774,7 +779,7 @@ where
|
|||||||
StorageChanges<I::Transaction, B>,
|
StorageChanges<I::Transaction, B>,
|
||||||
Self::Claim,
|
Self::Claim,
|
||||||
Self::EpochData,
|
Self::EpochData,
|
||||||
) -> Result<sp_consensus::BlockImportParams<B, I::Transaction>, sp_consensus::Error>
|
) -> Result<sc_consensus::BlockImportParams<B, I::Transaction>, sp_consensus::Error>
|
||||||
+ Send
|
+ Send
|
||||||
+ 'static,
|
+ 'static,
|
||||||
> {
|
> {
|
||||||
@@ -809,7 +814,7 @@ where
|
|||||||
import_block.post_digests.push(digest_item);
|
import_block.post_digests.push(digest_item);
|
||||||
import_block.body = Some(body);
|
import_block.body = Some(body);
|
||||||
import_block.state_action = StateAction::ApplyChanges(
|
import_block.state_action = StateAction::ApplyChanges(
|
||||||
sp_consensus::StorageChanges::Changes(storage_changes),
|
sc_consensus::StorageChanges::Changes(storage_changes),
|
||||||
);
|
);
|
||||||
import_block.intermediates.insert(
|
import_block.intermediates.insert(
|
||||||
Cow::from(INTERMEDIATE_KEY),
|
Cow::from(INTERMEDIATE_KEY),
|
||||||
|
|||||||
@@ -29,15 +29,13 @@ use rand::RngCore;
|
|||||||
use rand_chacha::{rand_core::SeedableRng, ChaChaRng};
|
use rand_chacha::{rand_core::SeedableRng, ChaChaRng};
|
||||||
use sc_block_builder::{BlockBuilder, BlockBuilderProvider};
|
use sc_block_builder::{BlockBuilder, BlockBuilderProvider};
|
||||||
use sc_client_api::{backend::TransactionFor, BlockchainEvents};
|
use sc_client_api::{backend::TransactionFor, BlockchainEvents};
|
||||||
|
use sc_consensus::{BoxBlockImport, BoxJustificationImport};
|
||||||
use sc_consensus_slots::BackoffAuthoringOnFinalizedHeadLagging;
|
use sc_consensus_slots::BackoffAuthoringOnFinalizedHeadLagging;
|
||||||
use sc_keystore::LocalKeystore;
|
use sc_keystore::LocalKeystore;
|
||||||
use sc_network::config::ProtocolConfig;
|
use sc_network::config::ProtocolConfig;
|
||||||
use sc_network_test::{Block as TestBlock, *};
|
use sc_network_test::{Block as TestBlock, *};
|
||||||
use sp_application_crypto::key_types::BABE;
|
use sp_application_crypto::key_types::BABE;
|
||||||
use sp_consensus::{
|
use sp_consensus::{AlwaysCanAuthor, DisableProofRecording, NoNetwork as DummyOracle, Proposal};
|
||||||
import_queue::{BoxBlockImport, BoxJustificationImport},
|
|
||||||
AlwaysCanAuthor, DisableProofRecording, NoNetwork as DummyOracle, Proposal,
|
|
||||||
};
|
|
||||||
use sp_consensus_babe::{
|
use sp_consensus_babe::{
|
||||||
inherents::InherentDataProvider, make_transcript, make_transcript_data, AllowedSlots,
|
inherents::InherentDataProvider, make_transcript, make_transcript_data, AllowedSlots,
|
||||||
AuthorityPair, Slot,
|
AuthorityPair, Slot,
|
||||||
|
|||||||
@@ -13,9 +13,24 @@ readme = "README.md"
|
|||||||
targets = ["x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-unknown-linux-gnu"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-trait = "0.1"
|
thiserror = "1.0.21"
|
||||||
|
libp2p = { version = "0.37.1", default-features = false }
|
||||||
|
log = "0.4.8"
|
||||||
|
futures = { version = "0.3.1", features = ["thread-pool"] }
|
||||||
|
futures-timer = "3.0.1"
|
||||||
sc-client-api = { version = "4.0.0-dev", path = "../../api" }
|
sc-client-api = { version = "4.0.0-dev", path = "../../api" }
|
||||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||||
|
sp-core = { path = "../../../primitives/core", version = "4.0.0-dev"}
|
||||||
|
sp-consensus = { path = "../../../primitives/consensus/common", version = "0.10.0-dev"}
|
||||||
|
sp-state-machine = { version = "0.10.0-dev", path = "../../../primitives/state-machine" }
|
||||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
sp-utils = { version = "4.0.0-dev", path = "../../../primitives/utils" }
|
||||||
|
sp-api = { version = "4.0.0-dev", path = "../../../primitives/api" }
|
||||||
parking_lot = "0.11.1"
|
parking_lot = "0.11.1"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus", version = "0.9.0" }
|
||||||
|
wasm-timer = "0.2.5"
|
||||||
|
async-trait = "0.1.42"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
sp-test-primitives = { version = "2.0.0", path = "../../../primitives/test-primitives" }
|
||||||
|
|||||||
+2
-19
@@ -24,7 +24,7 @@ use sp_runtime::{
|
|||||||
};
|
};
|
||||||
use std::{any::Any, borrow::Cow, collections::HashMap, sync::Arc};
|
use std::{any::Any, borrow::Cow, collections::HashMap, sync::Arc};
|
||||||
|
|
||||||
use crate::{import_queue::CacheKeyId, Error};
|
use sp_consensus::{BlockOrigin, CacheKeyId, Error};
|
||||||
|
|
||||||
/// Block import result.
|
/// Block import result.
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
@@ -92,23 +92,6 @@ impl ImportResult {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Block data origin.
|
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
|
||||||
pub enum BlockOrigin {
|
|
||||||
/// Genesis block built into the client.
|
|
||||||
Genesis,
|
|
||||||
/// Block is part of the initial sync with the network.
|
|
||||||
NetworkInitialSync,
|
|
||||||
/// Block was broadcasted on the network.
|
|
||||||
NetworkBroadcast,
|
|
||||||
/// Block that was received from the network and validated in the consensus process.
|
|
||||||
ConsensusBroadcast,
|
|
||||||
/// Block that was collated by this node.
|
|
||||||
Own,
|
|
||||||
/// Block was imported from a file.
|
|
||||||
File,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Fork choice strategy.
|
/// Fork choice strategy.
|
||||||
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
||||||
pub enum ForkChoiceStrategy {
|
pub enum ForkChoiceStrategy {
|
||||||
@@ -354,7 +337,7 @@ impl<B: BlockT, Transaction> BlockImport<B> for crate::import_queue::BoxBlockImp
|
|||||||
where
|
where
|
||||||
Transaction: Send + 'static,
|
Transaction: Send + 'static,
|
||||||
{
|
{
|
||||||
type Error = crate::error::Error;
|
type Error = sp_consensus::error::Error;
|
||||||
type Transaction = Transaction;
|
type Transaction = Transaction;
|
||||||
|
|
||||||
/// Check block preconditions.
|
/// Check block preconditions.
|
||||||
+22
-17
@@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use log::{debug, trace};
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
traits::{Block as BlockT, Header as _, NumberFor},
|
traits::{Block as BlockT, Header as _, NumberFor},
|
||||||
Justifications,
|
Justifications,
|
||||||
@@ -35,13 +36,13 @@ use sp_runtime::{
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
block_import::{
|
block_import::{
|
||||||
BlockCheckParams, BlockImport, BlockImportParams, BlockOrigin, ImportResult, ImportedAux,
|
BlockCheckParams, BlockImport, BlockImportParams, ImportResult, ImportedAux, ImportedState,
|
||||||
ImportedState, JustificationImport, StateAction,
|
JustificationImport, StateAction,
|
||||||
},
|
},
|
||||||
error::Error as ConsensusError,
|
|
||||||
metrics::Metrics,
|
metrics::Metrics,
|
||||||
};
|
};
|
||||||
pub use basic_queue::BasicQueue;
|
pub use basic_queue::BasicQueue;
|
||||||
|
use sp_consensus::{error::Error as ConsensusError, BlockOrigin, CacheKeyId};
|
||||||
|
|
||||||
/// A commonly-used Import Queue type.
|
/// A commonly-used Import Queue type.
|
||||||
///
|
///
|
||||||
@@ -80,7 +81,7 @@ pub struct IncomingBlock<B: BlockT> {
|
|||||||
pub origin: Option<Origin>,
|
pub origin: Option<Origin>,
|
||||||
/// Allow importing the block skipping state verification if parent state is missing.
|
/// Allow importing the block skipping state verification if parent state is missing.
|
||||||
pub allow_missing_state: bool,
|
pub allow_missing_state: bool,
|
||||||
/// Skip block exection and state verification.
|
/// Skip block execution and state verification.
|
||||||
pub skip_execution: bool,
|
pub skip_execution: bool,
|
||||||
/// Re-validate existing block.
|
/// Re-validate existing block.
|
||||||
pub import_existing: bool,
|
pub import_existing: bool,
|
||||||
@@ -88,9 +89,6 @@ pub struct IncomingBlock<B: BlockT> {
|
|||||||
pub state: Option<ImportedState<B>>,
|
pub state: Option<ImportedState<B>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Type of keys in the blockchain cache that consensus module could use for its needs.
|
|
||||||
pub type CacheKeyId = [u8; 4];
|
|
||||||
|
|
||||||
/// Verify a justification of a block
|
/// Verify a justification of a block
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
pub trait Verifier<B: BlockT>: Send + Sync {
|
pub trait Verifier<B: BlockT>: Send + Sync {
|
||||||
@@ -137,9 +135,10 @@ pub trait Link<B: BlockT>: Send {
|
|||||||
&mut self,
|
&mut self,
|
||||||
_imported: usize,
|
_imported: usize,
|
||||||
_count: usize,
|
_count: usize,
|
||||||
_results: Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
_results: Vec<(BlockImportResult<B>, B::Hash)>,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Justification import result.
|
/// Justification import result.
|
||||||
fn justification_imported(
|
fn justification_imported(
|
||||||
&mut self,
|
&mut self,
|
||||||
@@ -149,13 +148,14 @@ pub trait Link<B: BlockT>: Send {
|
|||||||
_success: bool,
|
_success: bool,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Request a justification for the given block.
|
/// Request a justification for the given block.
|
||||||
fn request_justification(&mut self, _hash: &B::Hash, _number: NumberFor<B>) {}
|
fn request_justification(&mut self, _hash: &B::Hash, _number: NumberFor<B>) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Block import successful result.
|
/// Block import successful result.
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum BlockImportResult<N: std::fmt::Debug + PartialEq> {
|
pub enum BlockImportStatus<N: std::fmt::Debug + PartialEq> {
|
||||||
/// Imported known block.
|
/// Imported known block.
|
||||||
ImportedKnown(N, Option<Origin>),
|
ImportedKnown(N, Option<Origin>),
|
||||||
/// Imported unknown block.
|
/// Imported unknown block.
|
||||||
@@ -181,13 +181,15 @@ pub enum BlockImportError {
|
|||||||
Other(ConsensusError),
|
Other(ConsensusError),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type BlockImportResult<B> = Result<BlockImportStatus<NumberFor<B>>, BlockImportError>;
|
||||||
|
|
||||||
/// Single block import function.
|
/// Single block import function.
|
||||||
pub async fn import_single_block<B: BlockT, V: Verifier<B>, Transaction: Send + 'static>(
|
pub async fn import_single_block<B: BlockT, V: Verifier<B>, Transaction: Send + 'static>(
|
||||||
import_handle: &mut impl BlockImport<B, Transaction = Transaction, Error = ConsensusError>,
|
import_handle: &mut impl BlockImport<B, Transaction = Transaction, Error = ConsensusError>,
|
||||||
block_origin: BlockOrigin,
|
block_origin: BlockOrigin,
|
||||||
block: IncomingBlock<B>,
|
block: IncomingBlock<B>,
|
||||||
verifier: &mut V,
|
verifier: &mut V,
|
||||||
) -> Result<BlockImportResult<NumberFor<B>>, BlockImportError> {
|
) -> BlockImportResult<B> {
|
||||||
import_single_block_metered(import_handle, block_origin, block, verifier, None).await
|
import_single_block_metered(import_handle, block_origin, block, verifier, None).await
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,7 +204,7 @@ pub(crate) async fn import_single_block_metered<
|
|||||||
block: IncomingBlock<B>,
|
block: IncomingBlock<B>,
|
||||||
verifier: &mut V,
|
verifier: &mut V,
|
||||||
metrics: Option<Metrics>,
|
metrics: Option<Metrics>,
|
||||||
) -> Result<BlockImportResult<NumberFor<B>>, BlockImportError> {
|
) -> BlockImportResult<B> {
|
||||||
let peer = block.origin;
|
let peer = block.origin;
|
||||||
|
|
||||||
let (header, justifications) = match (block.header, block.justifications) {
|
let (header, justifications) = match (block.header, block.justifications) {
|
||||||
@@ -226,16 +228,18 @@ pub(crate) async fn import_single_block_metered<
|
|||||||
let import_handler = |import| match import {
|
let import_handler = |import| match import {
|
||||||
Ok(ImportResult::AlreadyInChain) => {
|
Ok(ImportResult::AlreadyInChain) => {
|
||||||
trace!(target: "sync", "Block already in chain {}: {:?}", number, hash);
|
trace!(target: "sync", "Block already in chain {}: {:?}", number, hash);
|
||||||
Ok(BlockImportResult::ImportedKnown(number, peer.clone()))
|
Ok(BlockImportStatus::ImportedKnown(number, peer.clone()))
|
||||||
},
|
},
|
||||||
Ok(ImportResult::Imported(aux)) =>
|
Ok(ImportResult::Imported(aux)) =>
|
||||||
Ok(BlockImportResult::ImportedUnknown(number, aux, peer.clone())),
|
Ok(BlockImportStatus::ImportedUnknown(number, aux, peer.clone())),
|
||||||
Ok(ImportResult::MissingState) => {
|
Ok(ImportResult::MissingState) => {
|
||||||
debug!(target: "sync", "Parent state is missing for {}: {:?}, parent: {:?}", number, hash, parent_hash);
|
debug!(target: "sync", "Parent state is missing for {}: {:?}, parent: {:?}",
|
||||||
|
number, hash, parent_hash);
|
||||||
Err(BlockImportError::MissingState)
|
Err(BlockImportError::MissingState)
|
||||||
},
|
},
|
||||||
Ok(ImportResult::UnknownParent) => {
|
Ok(ImportResult::UnknownParent) => {
|
||||||
debug!(target: "sync", "Block with unknown parent {}: {:?}, parent: {:?}", number, hash, parent_hash);
|
debug!(target: "sync", "Block with unknown parent {}: {:?}, parent: {:?}",
|
||||||
|
number, hash, parent_hash);
|
||||||
Err(BlockImportError::UnknownParent)
|
Err(BlockImportError::UnknownParent)
|
||||||
},
|
},
|
||||||
Ok(ImportResult::KnownBad) => {
|
Ok(ImportResult::KnownBad) => {
|
||||||
@@ -259,7 +263,7 @@ pub(crate) async fn import_single_block_metered<
|
|||||||
})
|
})
|
||||||
.await,
|
.await,
|
||||||
)? {
|
)? {
|
||||||
BlockImportResult::ImportedUnknown { .. } => (),
|
BlockImportStatus::ImportedUnknown { .. } => (),
|
||||||
r => return Ok(r), // Any other successful result means that the block is already imported.
|
r => return Ok(r), // Any other successful result means that the block is already imported.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,7 +295,8 @@ pub(crate) async fn import_single_block_metered<
|
|||||||
import_block.indexed_body = block.indexed_body;
|
import_block.indexed_body = block.indexed_body;
|
||||||
let mut import_block = import_block.clear_storage_changes_and_mutate();
|
let mut import_block = import_block.clear_storage_changes_and_mutate();
|
||||||
if let Some(state) = block.state {
|
if let Some(state) = block.state {
|
||||||
import_block.state_action = StateAction::ApplyChanges(crate::StorageChanges::Import(state));
|
let changes = crate::block_import::StorageChanges::Import(state);
|
||||||
|
import_block.state_action = StateAction::ApplyChanges(changes);
|
||||||
} else if block.skip_execution {
|
} else if block.skip_execution {
|
||||||
import_block.state_action = StateAction::Skip;
|
import_block.state_action = StateAction::Skip;
|
||||||
} else if block.allow_missing_state {
|
} else if block.allow_missing_state {
|
||||||
+20
-17
@@ -14,13 +14,14 @@
|
|||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use futures::{
|
use futures::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
task::{Context, Poll},
|
task::{Context, Poll},
|
||||||
};
|
};
|
||||||
use futures_timer::Delay;
|
use futures_timer::Delay;
|
||||||
|
use log::{debug, trace};
|
||||||
use prometheus_endpoint::Registry;
|
use prometheus_endpoint::Registry;
|
||||||
|
use sp_consensus::BlockOrigin;
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
traits::{Block as BlockT, Header as HeaderT, NumberFor},
|
traits::{Block as BlockT, Header as HeaderT, NumberFor},
|
||||||
Justification, Justifications,
|
Justification, Justifications,
|
||||||
@@ -29,10 +30,9 @@ use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnbound
|
|||||||
use std::{marker::PhantomData, pin::Pin, time::Duration};
|
use std::{marker::PhantomData, pin::Pin, time::Duration};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
block_import::BlockOrigin,
|
|
||||||
import_queue::{
|
import_queue::{
|
||||||
buffered_link::{self, BufferedLinkReceiver, BufferedLinkSender},
|
buffered_link::{self, BufferedLinkReceiver, BufferedLinkSender},
|
||||||
import_single_block_metered, BlockImportError, BlockImportResult, BoxBlockImport,
|
import_single_block_metered, BlockImportError, BlockImportStatus, BoxBlockImport,
|
||||||
BoxJustificationImport, ImportQueue, IncomingBlock, Link, Origin, Verifier,
|
BoxJustificationImport, ImportQueue, IncomingBlock, Link, Origin, Verifier,
|
||||||
},
|
},
|
||||||
metrics::Metrics,
|
metrics::Metrics,
|
||||||
@@ -41,7 +41,7 @@ use crate::{
|
|||||||
/// Interface to a basic block import queue that is importing blocks sequentially in a separate
|
/// Interface to a basic block import queue that is importing blocks sequentially in a separate
|
||||||
/// task, with plugable verification.
|
/// task, with plugable verification.
|
||||||
pub struct BasicQueue<B: BlockT, Transaction> {
|
pub struct BasicQueue<B: BlockT, Transaction> {
|
||||||
/// Channel to send justifcation import messages to the background task.
|
/// Channel to send justification import messages to the background task.
|
||||||
justification_sender: TracingUnboundedSender<worker_messages::ImportJustification<B>>,
|
justification_sender: TracingUnboundedSender<worker_messages::ImportJustification<B>>,
|
||||||
/// Channel to send block import messages to the background task.
|
/// Channel to send block import messages to the background task.
|
||||||
block_import_sender: TracingUnboundedSender<worker_messages::ImportBlocks<B>>,
|
block_import_sender: TracingUnboundedSender<worker_messages::ImportBlocks<B>>,
|
||||||
@@ -156,9 +156,9 @@ mod worker_messages {
|
|||||||
|
|
||||||
/// The process of importing blocks.
|
/// The process of importing blocks.
|
||||||
///
|
///
|
||||||
/// This polls the `block_import_receiver` for new blocks to import and than awaits on importing these blocks.
|
/// This polls the `block_import_receiver` for new blocks to import and than awaits on
|
||||||
/// After each block is imported, this async function yields once to give other futures the possibility
|
/// importing these blocks. After each block is imported, this async function yields once
|
||||||
/// to be run.
|
/// to give other futures the possibility to be run.
|
||||||
///
|
///
|
||||||
/// Returns when `block_import` ended.
|
/// Returns when `block_import` ended.
|
||||||
async fn block_import_process<B: BlockT, Transaction: Send + 'static>(
|
async fn block_import_process<B: BlockT, Transaction: Send + 'static>(
|
||||||
@@ -325,12 +325,13 @@ struct ImportManyBlocksResult<B: BlockT> {
|
|||||||
/// The total number of blocks processed.
|
/// The total number of blocks processed.
|
||||||
block_count: usize,
|
block_count: usize,
|
||||||
/// The import results for each block.
|
/// The import results for each block.
|
||||||
results: Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
results: Vec<(Result<BlockImportStatus<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Import several blocks at once, returning import result for each block.
|
/// Import several blocks at once, returning import result for each block.
|
||||||
///
|
///
|
||||||
/// This will yield after each imported block once, to ensure that other futures can be called as well.
|
/// This will yield after each imported block once, to ensure that other futures can
|
||||||
|
/// be called as well.
|
||||||
async fn import_many_blocks<B: BlockT, V: Verifier<B>, Transaction: Send + 'static>(
|
async fn import_many_blocks<B: BlockT, V: Verifier<B>, Transaction: Send + 'static>(
|
||||||
import_handle: &mut BoxBlockImport<B, Transaction>,
|
import_handle: &mut BoxBlockImport<B, Transaction>,
|
||||||
blocks_origin: BlockOrigin,
|
blocks_origin: BlockOrigin,
|
||||||
@@ -410,11 +411,11 @@ async fn import_many_blocks<B: BlockT, V: Verifier<B>, Transaction: Send + 'stat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A future that will always `yield` on the first call of `poll` but schedules the current task for
|
/// A future that will always `yield` on the first call of `poll` but schedules the
|
||||||
/// re-execution.
|
/// current task for re-execution.
|
||||||
///
|
///
|
||||||
/// This is done by getting the waker and calling `wake_by_ref` followed by returning `Pending`.
|
/// This is done by getting the waker and calling `wake_by_ref` followed by returning
|
||||||
/// The next time the `poll` is called, it will return `Ready`.
|
/// `Pending`. The next time the `poll` is called, it will return `Ready`.
|
||||||
struct Yield(bool);
|
struct Yield(bool);
|
||||||
|
|
||||||
impl Yield {
|
impl Yield {
|
||||||
@@ -441,8 +442,10 @@ impl Future for Yield {
|
|||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
block_import::{
|
||||||
|
BlockCheckParams, BlockImport, BlockImportParams, ImportResult, JustificationImport,
|
||||||
|
},
|
||||||
import_queue::{CacheKeyId, Verifier},
|
import_queue::{CacheKeyId, Verifier},
|
||||||
BlockCheckParams, BlockImport, BlockImportParams, ImportResult, JustificationImport,
|
|
||||||
};
|
};
|
||||||
use futures::{executor::block_on, Future};
|
use futures::{executor::block_on, Future};
|
||||||
use sp_test_primitives::{Block, BlockNumber, Extrinsic, Hash, Header};
|
use sp_test_primitives::{Block, BlockNumber, Extrinsic, Hash, Header};
|
||||||
@@ -463,7 +466,7 @@ mod tests {
|
|||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl BlockImport<Block> for () {
|
impl BlockImport<Block> for () {
|
||||||
type Error = crate::Error;
|
type Error = sp_consensus::Error;
|
||||||
type Transaction = Extrinsic;
|
type Transaction = Extrinsic;
|
||||||
|
|
||||||
async fn check_block(
|
async fn check_block(
|
||||||
@@ -484,7 +487,7 @@ mod tests {
|
|||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl JustificationImport<Block> for () {
|
impl JustificationImport<Block> for () {
|
||||||
type Error = crate::Error;
|
type Error = sp_consensus::Error;
|
||||||
|
|
||||||
async fn on_start(&mut self) -> Vec<(Hash, BlockNumber)> {
|
async fn on_start(&mut self) -> Vec<(Hash, BlockNumber)> {
|
||||||
Vec::new()
|
Vec::new()
|
||||||
@@ -516,7 +519,7 @@ mod tests {
|
|||||||
&mut self,
|
&mut self,
|
||||||
_imported: usize,
|
_imported: usize,
|
||||||
_count: usize,
|
_count: usize,
|
||||||
results: Vec<(Result<BlockImportResult<BlockNumber>, BlockImportError>, Hash)>,
|
results: Vec<(Result<BlockImportStatus<BlockNumber>, BlockImportError>, Hash)>,
|
||||||
) {
|
) {
|
||||||
if let Some(hash) = results.into_iter().find_map(|(r, h)| r.ok().map(|_| h)) {
|
if let Some(hash) = results.into_iter().find_map(|(r, h)| r.ok().map(|_| h)) {
|
||||||
self.events.push(Event::BlockImported(hash));
|
self.events.push(Event::BlockImported(hash));
|
||||||
+7
-9
@@ -22,8 +22,8 @@
|
|||||||
//! # Example
|
//! # Example
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
//! use sp_consensus::import_queue::Link;
|
//! use sc_consensus::import_queue::Link;
|
||||||
//! # use sp_consensus::import_queue::buffered_link::buffered_link;
|
//! # use sc_consensus::import_queue::buffered_link::buffered_link;
|
||||||
//! # use sp_test_primitives::Block;
|
//! # use sp_test_primitives::Block;
|
||||||
//! # struct DummyLink; impl Link<Block> for DummyLink {}
|
//! # struct DummyLink; impl Link<Block> for DummyLink {}
|
||||||
//! # let mut my_link = DummyLink;
|
//! # let mut my_link = DummyLink;
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
//! });
|
//! });
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
use crate::import_queue::{BlockImportError, BlockImportResult, Link, Origin};
|
use crate::import_queue::{Link, Origin};
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
use sp_runtime::traits::{Block as BlockT, NumberFor};
|
use sp_runtime::traits::{Block as BlockT, NumberFor};
|
||||||
use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender};
|
use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender};
|
||||||
@@ -46,6 +46,8 @@ use std::{
|
|||||||
task::{Context, Poll},
|
task::{Context, Poll},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use super::BlockImportResult;
|
||||||
|
|
||||||
/// Wraps around an unbounded channel from the `futures` crate. The sender implements `Link` and
|
/// Wraps around an unbounded channel from the `futures` crate. The sender implements `Link` and
|
||||||
/// can be used to buffer commands, and the receiver can be used to poll said commands and transfer
|
/// can be used to buffer commands, and the receiver can be used to poll said commands and transfer
|
||||||
/// them to another link.
|
/// them to another link.
|
||||||
@@ -78,11 +80,7 @@ impl<B: BlockT> Clone for BufferedLinkSender<B> {
|
|||||||
|
|
||||||
/// Internal buffered message.
|
/// Internal buffered message.
|
||||||
enum BlockImportWorkerMsg<B: BlockT> {
|
enum BlockImportWorkerMsg<B: BlockT> {
|
||||||
BlocksProcessed(
|
BlocksProcessed(usize, usize, Vec<(BlockImportResult<B>, B::Hash)>),
|
||||||
usize,
|
|
||||||
usize,
|
|
||||||
Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
|
||||||
),
|
|
||||||
JustificationImported(Origin, B::Hash, NumberFor<B>, bool),
|
JustificationImported(Origin, B::Hash, NumberFor<B>, bool),
|
||||||
RequestJustification(B::Hash, NumberFor<B>),
|
RequestJustification(B::Hash, NumberFor<B>),
|
||||||
}
|
}
|
||||||
@@ -92,7 +90,7 @@ impl<B: BlockT> Link<B> for BufferedLinkSender<B> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
imported: usize,
|
imported: usize,
|
||||||
count: usize,
|
count: usize,
|
||||||
results: Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
results: Vec<(BlockImportResult<B>, B::Hash)>,
|
||||||
) {
|
) {
|
||||||
let _ = self
|
let _ = self
|
||||||
.tx
|
.tx
|
||||||
@@ -18,7 +18,22 @@
|
|||||||
|
|
||||||
//! Collection of common consensus specific implementations
|
//! Collection of common consensus specific implementations
|
||||||
|
|
||||||
|
pub mod block_import;
|
||||||
|
pub mod import_queue;
|
||||||
|
pub mod metrics;
|
||||||
|
|
||||||
|
pub use block_import::{
|
||||||
|
BlockCheckParams, BlockImport, BlockImportParams, ForkChoiceStrategy, ImportResult,
|
||||||
|
ImportedAux, ImportedState, JustificationImport, JustificationSyncLink, StateAction,
|
||||||
|
StorageChanges,
|
||||||
|
};
|
||||||
|
pub use import_queue::{
|
||||||
|
import_single_block, BasicQueue, BlockImportError, BlockImportStatus, BoxBlockImport,
|
||||||
|
BoxJustificationImport, DefaultImportQueue, ImportQueue, IncomingBlock, Link, Verifier,
|
||||||
|
};
|
||||||
|
|
||||||
mod longest_chain;
|
mod longest_chain;
|
||||||
|
|
||||||
pub mod shared_data;
|
pub mod shared_data;
|
||||||
|
|
||||||
pub use longest_chain::LongestChain;
|
pub use longest_chain::LongestChain;
|
||||||
|
|||||||
+2
-2
@@ -24,7 +24,7 @@ use prometheus_endpoint::{
|
|||||||
|
|
||||||
use sp_runtime::traits::{Block as BlockT, NumberFor};
|
use sp_runtime::traits::{Block as BlockT, NumberFor};
|
||||||
|
|
||||||
use crate::import_queue::{BlockImportError, BlockImportResult};
|
use crate::import_queue::{BlockImportError, BlockImportStatus};
|
||||||
|
|
||||||
/// Generic Prometheus metrics for common consensus functionality.
|
/// Generic Prometheus metrics for common consensus functionality.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@@ -71,7 +71,7 @@ impl Metrics {
|
|||||||
|
|
||||||
pub fn report_import<B: BlockT>(
|
pub fn report_import<B: BlockT>(
|
||||||
&self,
|
&self,
|
||||||
result: &Result<BlockImportResult<NumberFor<B>>, BlockImportError>,
|
result: &Result<BlockImportStatus<NumberFor<B>>, BlockImportError>,
|
||||||
) {
|
) {
|
||||||
let label = match result {
|
let label = match result {
|
||||||
Ok(_) => "success",
|
Ok(_) => "success",
|
||||||
@@ -26,6 +26,7 @@ assert_matches = "1.3.0"
|
|||||||
async-trait = "0.1.50"
|
async-trait = "0.1.50"
|
||||||
|
|
||||||
sc-client-api = { path = "../../api", version = "4.0.0-dev"}
|
sc-client-api = { path = "../../api", version = "4.0.0-dev"}
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../consensus/common" }
|
||||||
sc-consensus-babe = { path = "../../consensus/babe", version = "0.10.0-dev"}
|
sc-consensus-babe = { path = "../../consensus/babe", version = "0.10.0-dev"}
|
||||||
sc-consensus-epochs = { path = "../../consensus/epochs", version = "0.10.0-dev"}
|
sc-consensus-epochs = { path = "../../consensus/epochs", version = "0.10.0-dev"}
|
||||||
sp-consensus-babe = { path = "../../../primitives/consensus/babe", version = "0.10.0-dev"}
|
sp-consensus-babe = { path = "../../../primitives/consensus/babe", version = "0.10.0-dev"}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
//! Extensions for manual seal to produce blocks valid for any runtime.
|
//! Extensions for manual seal to produce blocks valid for any runtime.
|
||||||
use super::Error;
|
use super::Error;
|
||||||
|
|
||||||
use sp_consensus::BlockImportParams;
|
use sc_consensus::BlockImportParams;
|
||||||
use sp_inherents::InherentData;
|
use sp_inherents::InherentData;
|
||||||
use sp_runtime::traits::{Block as BlockT, DigestFor};
|
use sp_runtime::traits::{Block as BlockT, DigestFor};
|
||||||
|
|
||||||
|
|||||||
@@ -36,12 +36,10 @@ use std::{
|
|||||||
time::SystemTime,
|
time::SystemTime,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use sc_consensus::{BlockImportParams, ForkChoiceStrategy, Verifier};
|
||||||
use sp_api::{ProvideRuntimeApi, TransactionFor};
|
use sp_api::{ProvideRuntimeApi, TransactionFor};
|
||||||
use sp_blockchain::{HeaderBackend, HeaderMetadata};
|
use sp_blockchain::{HeaderBackend, HeaderMetadata};
|
||||||
use sp_consensus::{
|
use sp_consensus::{BlockOrigin, CacheKeyId};
|
||||||
import_queue::{CacheKeyId, Verifier},
|
|
||||||
BlockImportParams, BlockOrigin, ForkChoiceStrategy,
|
|
||||||
};
|
|
||||||
use sp_consensus_babe::{
|
use sp_consensus_babe::{
|
||||||
digests::{NextEpochDescriptor, PreDigest, SecondaryPlainPreDigest},
|
digests::{NextEpochDescriptor, PreDigest, SecondaryPlainPreDigest},
|
||||||
inherents::BabeInherentData,
|
inherents::BabeInherentData,
|
||||||
|
|||||||
@@ -20,8 +20,9 @@
|
|||||||
//! This is suitable for a testing environment.
|
//! This is suitable for a testing environment.
|
||||||
|
|
||||||
use futures::channel::{mpsc::SendError, oneshot};
|
use futures::channel::{mpsc::SendError, oneshot};
|
||||||
|
use sc_consensus::ImportResult;
|
||||||
use sp_blockchain::Error as BlockchainError;
|
use sp_blockchain::Error as BlockchainError;
|
||||||
use sp_consensus::{Error as ConsensusError, ImportResult};
|
use sp_consensus::Error as ConsensusError;
|
||||||
use sp_inherents::Error as InherentsError;
|
use sp_inherents::Error as InherentsError;
|
||||||
|
|
||||||
/// Error code for rpc
|
/// Error code for rpc
|
||||||
|
|||||||
@@ -22,12 +22,12 @@
|
|||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
use prometheus_endpoint::Registry;
|
use prometheus_endpoint::Registry;
|
||||||
use sc_client_api::backend::{Backend as ClientBackend, Finalizer};
|
use sc_client_api::backend::{Backend as ClientBackend, Finalizer};
|
||||||
use sp_blockchain::HeaderBackend;
|
use sc_consensus::{
|
||||||
use sp_consensus::{
|
block_import::{BlockImport, BlockImportParams, ForkChoiceStrategy},
|
||||||
import_queue::{BasicQueue, BoxBlockImport, CacheKeyId, Verifier},
|
import_queue::{BasicQueue, BoxBlockImport, Verifier},
|
||||||
BlockImport, BlockImportParams, BlockOrigin, Environment, ForkChoiceStrategy, Proposer,
|
|
||||||
SelectChain,
|
|
||||||
};
|
};
|
||||||
|
use sp_blockchain::HeaderBackend;
|
||||||
|
use sp_consensus::{BlockOrigin, CacheKeyId, Environment, Proposer, SelectChain};
|
||||||
use sp_inherents::CreateInherentDataProviders;
|
use sp_inherents::CreateInherentDataProviders;
|
||||||
use sp_runtime::{traits::Block as BlockT, ConsensusEngineId, Justifications};
|
use sp_runtime::{traits::Block as BlockT, ConsensusEngineId, Justifications};
|
||||||
use std::{marker::PhantomData, sync::Arc};
|
use std::{marker::PhantomData, sync::Arc};
|
||||||
@@ -257,9 +257,9 @@ mod tests {
|
|||||||
use super::*;
|
use super::*;
|
||||||
use sc_basic_authorship::ProposerFactory;
|
use sc_basic_authorship::ProposerFactory;
|
||||||
use sc_client_api::BlockBackend;
|
use sc_client_api::BlockBackend;
|
||||||
|
use sc_consensus::ImportedAux;
|
||||||
use sc_transaction_pool::{BasicPool, Options, RevalidationType};
|
use sc_transaction_pool::{BasicPool, Options, RevalidationType};
|
||||||
use sc_transaction_pool_api::{MaintainedTransactionPool, TransactionPool, TransactionSource};
|
use sc_transaction_pool_api::{MaintainedTransactionPool, TransactionPool, TransactionSource};
|
||||||
use sp_consensus::ImportedAux;
|
|
||||||
use sp_runtime::generic::BlockId;
|
use sp_runtime::generic::BlockId;
|
||||||
use substrate_test_runtime_client::{
|
use substrate_test_runtime_client::{
|
||||||
AccountKeyring::*, DefaultTestClientBuilderExt, TestClientBuilder, TestClientBuilderExt,
|
AccountKeyring::*, DefaultTestClientBuilderExt, TestClientBuilder, TestClientBuilderExt,
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ use futures::{
|
|||||||
};
|
};
|
||||||
use jsonrpc_core::Error;
|
use jsonrpc_core::Error;
|
||||||
use jsonrpc_derive::rpc;
|
use jsonrpc_derive::rpc;
|
||||||
|
use sc_consensus::ImportedAux;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sp_consensus::ImportedAux;
|
|
||||||
use sp_runtime::EncodedJustification;
|
use sp_runtime::EncodedJustification;
|
||||||
|
|
||||||
/// Future's type for jsonrpc
|
/// Future's type for jsonrpc
|
||||||
|
|||||||
@@ -20,13 +20,11 @@
|
|||||||
|
|
||||||
use crate::{rpc, ConsensusDataProvider, CreatedBlock, Error};
|
use crate::{rpc, ConsensusDataProvider, CreatedBlock, Error};
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
|
use sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy, ImportResult, StateAction};
|
||||||
use sc_transaction_pool_api::TransactionPool;
|
use sc_transaction_pool_api::TransactionPool;
|
||||||
use sp_api::{ProvideRuntimeApi, TransactionFor};
|
use sp_api::{ProvideRuntimeApi, TransactionFor};
|
||||||
use sp_blockchain::HeaderBackend;
|
use sp_blockchain::HeaderBackend;
|
||||||
use sp_consensus::{
|
use sp_consensus::{self, BlockOrigin, Environment, Proposer, SelectChain};
|
||||||
self, BlockImport, BlockImportParams, BlockOrigin, Environment, ForkChoiceStrategy,
|
|
||||||
ImportResult, Proposer, SelectChain, StateAction,
|
|
||||||
};
|
|
||||||
use sp_inherents::{CreateInherentDataProviders, InherentDataProvider};
|
use sp_inherents::{CreateInherentDataProviders, InherentDataProvider};
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
generic::BlockId,
|
generic::BlockId,
|
||||||
@@ -147,7 +145,7 @@ pub async fn seal_block<B, BI, SC, C, E, TP, CIDP>(
|
|||||||
params.body = Some(body);
|
params.body = Some(body);
|
||||||
params.finalized = finalize;
|
params.finalized = finalize;
|
||||||
params.fork_choice = Some(ForkChoiceStrategy::LongestChain);
|
params.fork_choice = Some(ForkChoiceStrategy::LongestChain);
|
||||||
params.state_action = StateAction::ApplyChanges(sp_consensus::StorageChanges::Changes(
|
params.state_action = StateAction::ApplyChanges(sc_consensus::StorageChanges::Changes(
|
||||||
proposal.storage_changes,
|
proposal.storage_changes,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ sp-block-builder = { version = "4.0.0-dev", path = "../../../primitives/block-bu
|
|||||||
sp-inherents = { version = "4.0.0-dev", path = "../../../primitives/inherents" }
|
sp-inherents = { version = "4.0.0-dev", path = "../../../primitives/inherents" }
|
||||||
sp-consensus-pow = { version = "0.10.0-dev", path = "../../../primitives/consensus/pow" }
|
sp-consensus-pow = { version = "0.10.0-dev", path = "../../../primitives/consensus/pow" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
futures = { version = "0.3.1", features = ["compat"] }
|
futures = { version = "0.3.1", features = ["compat"] }
|
||||||
futures-timer = "3.0.1"
|
futures-timer = "3.0.1"
|
||||||
|
|||||||
@@ -43,19 +43,23 @@ mod worker;
|
|||||||
|
|
||||||
pub use crate::worker::{MiningBuild, MiningMetadata, MiningWorker};
|
pub use crate::worker::{MiningBuild, MiningMetadata, MiningWorker};
|
||||||
|
|
||||||
|
use crate::worker::UntilImportedOrTimeout;
|
||||||
use codec::{Decode, Encode};
|
use codec::{Decode, Encode};
|
||||||
use futures::{Future, StreamExt};
|
use futures::{Future, StreamExt};
|
||||||
use log::*;
|
use log::*;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use prometheus_endpoint::Registry;
|
use prometheus_endpoint::Registry;
|
||||||
use sc_client_api::{self, backend::AuxStore, BlockOf, BlockchainEvents};
|
use sc_client_api::{self, backend::AuxStore, BlockOf, BlockchainEvents};
|
||||||
|
use sc_consensus::{
|
||||||
|
BasicQueue, BlockCheckParams, BlockImport, BlockImportParams, BoxBlockImport,
|
||||||
|
BoxJustificationImport, ForkChoiceStrategy, ImportResult, Verifier,
|
||||||
|
};
|
||||||
use sp_api::ProvideRuntimeApi;
|
use sp_api::ProvideRuntimeApi;
|
||||||
use sp_block_builder::BlockBuilder as BlockBuilderApi;
|
use sp_block_builder::BlockBuilder as BlockBuilderApi;
|
||||||
use sp_blockchain::{well_known_cache_keys::Id as CacheKeyId, HeaderBackend, ProvideCache};
|
use sp_blockchain::{well_known_cache_keys::Id as CacheKeyId, HeaderBackend, ProvideCache};
|
||||||
use sp_consensus::{
|
use sp_consensus::{
|
||||||
import_queue::{BasicQueue, BoxBlockImport, BoxJustificationImport, Verifier},
|
BlockOrigin, CanAuthorWith, Environment, Error as ConsensusError, Proposer, SelectChain,
|
||||||
BlockCheckParams, BlockImport, BlockImportParams, BlockOrigin, CanAuthorWith, Environment,
|
SyncOracle,
|
||||||
Error as ConsensusError, ForkChoiceStrategy, ImportResult, Proposer, SelectChain, SyncOracle,
|
|
||||||
};
|
};
|
||||||
use sp_consensus_pow::{Seal, TotalDifficulty, POW_ENGINE_ID};
|
use sp_consensus_pow::{Seal, TotalDifficulty, POW_ENGINE_ID};
|
||||||
use sp_inherents::{CreateInherentDataProviders, InherentDataProvider};
|
use sp_inherents::{CreateInherentDataProviders, InherentDataProvider};
|
||||||
@@ -69,8 +73,6 @@ use std::{
|
|||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::worker::UntilImportedOrTimeout;
|
|
||||||
|
|
||||||
#[derive(derive_more::Display, Debug)]
|
#[derive(derive_more::Display, Debug)]
|
||||||
pub enum Error<B: BlockT> {
|
pub enum Error<B: BlockT> {
|
||||||
#[display(fmt = "Header uses the wrong engine {:?}", _0)]
|
#[display(fmt = "Header uses the wrong engine {:?}", _0)]
|
||||||
@@ -540,7 +542,7 @@ where
|
|||||||
E::Error: std::fmt::Debug,
|
E::Error: std::fmt::Debug,
|
||||||
E::Proposer: Proposer<Block, Transaction = sp_api::TransactionFor<C, Block>>,
|
E::Proposer: Proposer<Block, Transaction = sp_api::TransactionFor<C, Block>>,
|
||||||
SO: SyncOracle + Clone + Send + Sync + 'static,
|
SO: SyncOracle + Clone + Send + Sync + 'static,
|
||||||
L: sp_consensus::JustificationSyncLink<Block>,
|
L: sc_consensus::JustificationSyncLink<Block>,
|
||||||
CIDP: CreateInherentDataProviders<Block, ()>,
|
CIDP: CreateInherentDataProviders<Block, ()>,
|
||||||
CAW: CanAuthorWith<Block> + Clone + Send + 'static,
|
CAW: CanAuthorWith<Block> + Clone + Send + 'static,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,10 +23,8 @@ use futures::{
|
|||||||
use futures_timer::Delay;
|
use futures_timer::Delay;
|
||||||
use log::*;
|
use log::*;
|
||||||
use sc_client_api::ImportNotifications;
|
use sc_client_api::ImportNotifications;
|
||||||
use sp_consensus::{
|
use sc_consensus::{BlockImportParams, BoxBlockImport, StateAction, StorageChanges};
|
||||||
import_queue::BoxBlockImport, BlockImportParams, BlockOrigin, Proposal, StateAction,
|
use sp_consensus::{BlockOrigin, Proposal};
|
||||||
StorageChanges,
|
|
||||||
};
|
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
generic::BlockId,
|
generic::BlockId,
|
||||||
traits::{Block as BlockT, Header as HeaderT},
|
traits::{Block as BlockT, Header as HeaderT},
|
||||||
@@ -67,7 +65,7 @@ pub struct MiningWorker<
|
|||||||
Block: BlockT,
|
Block: BlockT,
|
||||||
Algorithm: PowAlgorithm<Block>,
|
Algorithm: PowAlgorithm<Block>,
|
||||||
C: sp_api::ProvideRuntimeApi<Block>,
|
C: sp_api::ProvideRuntimeApi<Block>,
|
||||||
L: sp_consensus::JustificationSyncLink<Block>,
|
L: sc_consensus::JustificationSyncLink<Block>,
|
||||||
Proof,
|
Proof,
|
||||||
> {
|
> {
|
||||||
pub(crate) build: Option<MiningBuild<Block, Algorithm, C, Proof>>,
|
pub(crate) build: Option<MiningBuild<Block, Algorithm, C, Proof>>,
|
||||||
@@ -82,7 +80,7 @@ where
|
|||||||
C: sp_api::ProvideRuntimeApi<Block>,
|
C: sp_api::ProvideRuntimeApi<Block>,
|
||||||
Algorithm: PowAlgorithm<Block>,
|
Algorithm: PowAlgorithm<Block>,
|
||||||
Algorithm::Difficulty: 'static + Send,
|
Algorithm::Difficulty: 'static + Send,
|
||||||
L: sp_consensus::JustificationSyncLink<Block>,
|
L: sc_consensus::JustificationSyncLink<Block>,
|
||||||
sp_api::TransactionFor<C, Block>: Send + 'static,
|
sp_api::TransactionFor<C, Block>: Send + 'static,
|
||||||
{
|
{
|
||||||
/// Get the current best hash. `None` if the worker has just started or the client is doing
|
/// Get the current best hash. `None` if the worker has just started or the client is doing
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ sp-trie = { version = "4.0.0-dev", path = "../../../primitives/trie" }
|
|||||||
sp-application-crypto = { version = "4.0.0-dev", path = "../../../primitives/application-crypto" }
|
sp-application-crypto = { version = "4.0.0-dev", path = "../../../primitives/application-crypto" }
|
||||||
sp-arithmetic = { version = "4.0.0-dev", path = "../../../primitives/arithmetic" }
|
sp-arithmetic = { version = "4.0.0-dev", path = "../../../primitives/arithmetic" }
|
||||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||||
sp-consensus-slots = { version = "0.10.0-dev", path = "../../../primitives/consensus/slots" }
|
sp-consensus-slots = { version = "0.10.0-dev", path = "../../../primitives/consensus/slots" }
|
||||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||||
sp-state-machine = { version = "0.10.0-dev", path = "../../../primitives/state-machine" }
|
sp-state-machine = { version = "0.10.0-dev", path = "../../../primitives/state-machine" }
|
||||||
|
|||||||
@@ -36,12 +36,11 @@ use codec::{Decode, Encode};
|
|||||||
use futures::{future::Either, Future, TryFutureExt};
|
use futures::{future::Either, Future, TryFutureExt};
|
||||||
use futures_timer::Delay;
|
use futures_timer::Delay;
|
||||||
use log::{debug, error, info, warn};
|
use log::{debug, error, info, warn};
|
||||||
|
use sc_consensus::{BlockImport, JustificationSyncLink};
|
||||||
use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_INFO, CONSENSUS_WARN};
|
use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_INFO, CONSENSUS_WARN};
|
||||||
use sp_api::{ApiRef, ProvideRuntimeApi};
|
use sp_api::{ApiRef, ProvideRuntimeApi};
|
||||||
use sp_arithmetic::traits::BaseArithmetic;
|
use sp_arithmetic::traits::BaseArithmetic;
|
||||||
use sp_consensus::{
|
use sp_consensus::{CanAuthorWith, Proposer, SelectChain, SlotData, SyncOracle};
|
||||||
BlockImport, CanAuthorWith, JustificationSyncLink, Proposer, SelectChain, SlotData, SyncOracle,
|
|
||||||
};
|
|
||||||
use sp_consensus_slots::Slot;
|
use sp_consensus_slots::Slot;
|
||||||
use sp_inherents::CreateInherentDataProviders;
|
use sp_inherents::CreateInherentDataProviders;
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
@@ -160,7 +159,7 @@ pub trait SimpleSlotWorker<B: BlockT> {
|
|||||||
Self::Claim,
|
Self::Claim,
|
||||||
Self::EpochData,
|
Self::EpochData,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
sp_consensus::BlockImportParams<
|
sc_consensus::BlockImportParams<
|
||||||
B,
|
B,
|
||||||
<Self::BlockImport as BlockImport<B>>::Transaction,
|
<Self::BlockImport as BlockImport<B>>::Transaction,
|
||||||
>,
|
>,
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ sp-state-machine = { version = "0.10.0-dev", path = "../../primitives/state-mach
|
|||||||
sc-executor = { version = "0.10.0-dev", path = "../executor" }
|
sc-executor = { version = "0.10.0-dev", path = "../executor" }
|
||||||
sc-state-db = { version = "0.10.0-dev", path = "../state-db" }
|
sc-state-db = { version = "0.10.0-dev", path = "../state-db" }
|
||||||
sp-trie = { version = "4.0.0-dev", path = "../../primitives/trie" }
|
sp-trie = { version = "4.0.0-dev", path = "../../primitives/trie" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
|
||||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||||
sp-database = { version = "4.0.0-dev", path = "../../primitives/database" }
|
sp-database = { version = "4.0.0-dev", path = "../../primitives/database" }
|
||||||
parity-db = { version = "0.2.4", optional = true }
|
parity-db = { version = "0.2.4", optional = true }
|
||||||
|
|||||||
@@ -32,5 +32,6 @@ finality-grandpa = { version = "0.14.1" }
|
|||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
sc-block-builder = { version = "0.10.0-dev", path = "../block-builder" }
|
sc-block-builder = { version = "0.10.0-dev", path = "../block-builder" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../client/consensus/common" }
|
||||||
sp-keyring = { version = "4.0.0-dev", path = "../../primitives/keyring" }
|
sp-keyring = { version = "4.0.0-dev", path = "../../primitives/keyring" }
|
||||||
substrate-test-runtime-client = { version = "2.0.0", path = "../../test-utils/runtime/client" }
|
substrate-test-runtime-client = { version = "2.0.0", path = "../../test-utils/runtime/client" }
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ use log::debug;
|
|||||||
use parity_scale_codec::Encode;
|
use parity_scale_codec::Encode;
|
||||||
|
|
||||||
use sc_client_api::{backend::Backend, utils::is_descendent_of};
|
use sc_client_api::{backend::Backend, utils::is_descendent_of};
|
||||||
use sc_consensus::shared_data::{SharedDataLocked, SharedDataLockedUpgradable};
|
use sc_consensus::{
|
||||||
|
shared_data::{SharedDataLocked, SharedDataLockedUpgradable},
|
||||||
|
BlockCheckParams, BlockImport, BlockImportParams, ImportResult, JustificationImport,
|
||||||
|
};
|
||||||
use sc_telemetry::TelemetryHandle;
|
use sc_telemetry::TelemetryHandle;
|
||||||
use sp_api::TransactionFor;
|
use sp_api::TransactionFor;
|
||||||
use sp_blockchain::{well_known_cache_keys, BlockStatus};
|
use sp_blockchain::{well_known_cache_keys, BlockStatus};
|
||||||
use sp_consensus::{
|
use sp_consensus::{BlockOrigin, Error as ConsensusError, SelectChain};
|
||||||
BlockCheckParams, BlockImport, BlockImportParams, BlockOrigin, Error as ConsensusError,
|
|
||||||
ImportResult, JustificationImport, SelectChain,
|
|
||||||
};
|
|
||||||
use sp_finality_grandpa::{ConsensusLog, ScheduledChange, SetId, GRANDPA_ENGINE_ID};
|
use sp_finality_grandpa::{ConsensusLog, ScheduledChange, SetId, GRANDPA_ENGINE_ID};
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
generic::{BlockId, OpaqueDigestItemId},
|
generic::{BlockId, OpaqueDigestItemId},
|
||||||
|
|||||||
@@ -66,11 +66,12 @@ use sc_client_api::{
|
|||||||
BlockchainEvents, CallExecutor, ExecutionStrategy, ExecutorProvider, Finalizer, LockImportRun,
|
BlockchainEvents, CallExecutor, ExecutionStrategy, ExecutorProvider, Finalizer, LockImportRun,
|
||||||
TransactionFor,
|
TransactionFor,
|
||||||
};
|
};
|
||||||
|
use sc_consensus::BlockImport;
|
||||||
use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_INFO};
|
use sc_telemetry::{telemetry, TelemetryHandle, CONSENSUS_DEBUG, CONSENSUS_INFO};
|
||||||
use sp_api::ProvideRuntimeApi;
|
use sp_api::ProvideRuntimeApi;
|
||||||
use sp_application_crypto::AppKey;
|
use sp_application_crypto::AppKey;
|
||||||
use sp_blockchain::{Error as ClientError, HeaderBackend, HeaderMetadata};
|
use sp_blockchain::{Error as ClientError, HeaderBackend, HeaderMetadata};
|
||||||
use sp_consensus::{BlockImport, SelectChain};
|
use sp_consensus::SelectChain;
|
||||||
use sp_core::crypto::Public;
|
use sp_core::crypto::Public;
|
||||||
use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr};
|
use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr};
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
|
|||||||
@@ -24,6 +24,10 @@ use environment::HasVoted;
|
|||||||
use futures::executor::block_on;
|
use futures::executor::block_on;
|
||||||
use futures_timer::Delay;
|
use futures_timer::Delay;
|
||||||
use parking_lot::{Mutex, RwLock};
|
use parking_lot::{Mutex, RwLock};
|
||||||
|
use sc_consensus::{
|
||||||
|
BlockImport, BlockImportParams, BoxJustificationImport, ForkChoiceStrategy, ImportResult,
|
||||||
|
ImportedAux,
|
||||||
|
};
|
||||||
use sc_network::config::{ProtocolConfig, Role};
|
use sc_network::config::{ProtocolConfig, Role};
|
||||||
use sc_network_test::{
|
use sc_network_test::{
|
||||||
Block, BlockImportAdapter, FullPeerConfig, Hash, PassThroughVerifier, Peer, PeersClient,
|
Block, BlockImportAdapter, FullPeerConfig, Hash, PassThroughVerifier, Peer, PeersClient,
|
||||||
@@ -31,10 +35,7 @@ use sc_network_test::{
|
|||||||
};
|
};
|
||||||
use sp_api::{ApiRef, ProvideRuntimeApi};
|
use sp_api::{ApiRef, ProvideRuntimeApi};
|
||||||
use sp_blockchain::Result;
|
use sp_blockchain::Result;
|
||||||
use sp_consensus::{
|
use sp_consensus::BlockOrigin;
|
||||||
import_queue::BoxJustificationImport, BlockImport, BlockImportParams, BlockOrigin,
|
|
||||||
ForkChoiceStrategy, ImportResult, ImportedAux,
|
|
||||||
};
|
|
||||||
use sp_core::H256;
|
use sp_core::H256;
|
||||||
use sp_finality_grandpa::{
|
use sp_finality_grandpa::{
|
||||||
AuthorityList, EquivocationProof, GrandpaApi, OpaqueKeyOwnershipProof, GRANDPA_ENGINE_ID,
|
AuthorityList, EquivocationProof, GrandpaApi, OpaqueKeyOwnershipProof, GRANDPA_ENGINE_ID,
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ smallvec = "1.5.0"
|
|||||||
sp-arithmetic = { version = "4.0.0-dev", path = "../../primitives/arithmetic" }
|
sp-arithmetic = { version = "4.0.0-dev", path = "../../primitives/arithmetic" }
|
||||||
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
sp-blockchain = { version = "4.0.0-dev", path = "../../primitives/blockchain" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../consensus/common" }
|
||||||
sp-core = { version = "4.0.0-dev", path = "../../primitives/core" }
|
sp-core = { version = "4.0.0-dev", path = "../../primitives/core" }
|
||||||
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime" }
|
||||||
sp-utils = { version = "4.0.0-dev", path = "../../primitives/utils" }
|
sp-utils = { version = "4.0.0-dev", path = "../../primitives/utils" }
|
||||||
|
|||||||
@@ -36,10 +36,8 @@ use libp2p::{
|
|||||||
};
|
};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use prost::Message;
|
use prost::Message;
|
||||||
use sp_consensus::{
|
use sc_consensus::import_queue::{IncomingBlock, Origin};
|
||||||
import_queue::{IncomingBlock, Origin},
|
use sp_consensus::BlockOrigin;
|
||||||
BlockOrigin,
|
|
||||||
};
|
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
traits::{Block as BlockT, NumberFor},
|
traits::{Block as BlockT, NumberFor},
|
||||||
Justifications,
|
Justifications,
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
//! Blockchain access trait
|
//! Blockchain access trait
|
||||||
|
|
||||||
use sc_client_api::{BlockBackend, ProofProvider};
|
use sc_client_api::{BlockBackend, ProofProvider};
|
||||||
pub use sc_client_api::{ImportedState, StorageData, StorageKey};
|
pub use sc_client_api::{StorageData, StorageKey};
|
||||||
|
pub use sc_consensus::ImportedState;
|
||||||
use sp_blockchain::{Error, HeaderBackend, HeaderMetadata};
|
use sp_blockchain::{Error, HeaderBackend, HeaderMetadata};
|
||||||
use sp_runtime::traits::{Block as BlockT, BlockIdTo};
|
use sp_runtime::traits::{Block as BlockT, BlockIdTo};
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,8 @@ use libp2p::{
|
|||||||
multiaddr, wasm_ext, Multiaddr, PeerId,
|
multiaddr, wasm_ext, Multiaddr, PeerId,
|
||||||
};
|
};
|
||||||
use prometheus_endpoint::Registry;
|
use prometheus_endpoint::Registry;
|
||||||
use sp_consensus::{block_validation::BlockAnnounceValidator, import_queue::ImportQueue};
|
use sc_consensus::ImportQueue;
|
||||||
|
use sp_consensus::block_validation::BlockAnnounceValidator;
|
||||||
use sp_runtime::traits::Block as BlockT;
|
use sp_runtime::traits::Block as BlockT;
|
||||||
use std::{
|
use std::{
|
||||||
borrow::Cow,
|
borrow::Cow,
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ fn build_test_full_node(network_config: config::NetworkConfiguration)
|
|||||||
struct PassThroughVerifier(bool);
|
struct PassThroughVerifier(bool);
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl<B: BlockT> sp_consensus::import_queue::Verifier<B> for PassThroughVerifier {
|
impl<B: BlockT> sc_consensus::Verifier<B> for PassThroughVerifier {
|
||||||
async fn verify(
|
async fn verify(
|
||||||
&mut self,
|
&mut self,
|
||||||
origin: sp_consensus::BlockOrigin,
|
origin: sp_consensus::BlockOrigin,
|
||||||
@@ -59,7 +59,7 @@ fn build_test_full_node(network_config: config::NetworkConfiguration)
|
|||||||
body: Option<Vec<B::Extrinsic>>,
|
body: Option<Vec<B::Extrinsic>>,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
(
|
(
|
||||||
sp_consensus::BlockImportParams<B, ()>,
|
sc_consensus::BlockImportParams<B, ()>,
|
||||||
Option<Vec<(sp_blockchain::well_known_cache_keys::Id, Vec<u8>)>>,
|
Option<Vec<(sp_blockchain::well_known_cache_keys::Id, Vec<u8>)>>,
|
||||||
),
|
),
|
||||||
String,
|
String,
|
||||||
@@ -79,16 +79,16 @@ fn build_test_full_node(network_config: config::NetworkConfiguration)
|
|||||||
)]
|
)]
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut import = sp_consensus::BlockImportParams::new(origin, header);
|
let mut import = sc_consensus::BlockImportParams::new(origin, header);
|
||||||
import.body = body;
|
import.body = body;
|
||||||
import.finalized = self.0;
|
import.finalized = self.0;
|
||||||
import.justifications = justifications;
|
import.justifications = justifications;
|
||||||
import.fork_choice = Some(sp_consensus::ForkChoiceStrategy::LongestChain);
|
import.fork_choice = Some(sc_consensus::ForkChoiceStrategy::LongestChain);
|
||||||
Ok((import, maybe_keys))
|
Ok((import, maybe_keys))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let import_queue = Box::new(sp_consensus::import_queue::BasicQueue::new(
|
let import_queue = Box::new(sc_consensus::BasicQueue::new(
|
||||||
PassThroughVerifier(false),
|
PassThroughVerifier(false),
|
||||||
Box::new(client.clone()),
|
Box::new(client.clone()),
|
||||||
None,
|
None,
|
||||||
|
|||||||
@@ -48,12 +48,9 @@ use message::{
|
|||||||
use notifications::{Notifications, NotificationsOut};
|
use notifications::{Notifications, NotificationsOut};
|
||||||
use prometheus_endpoint::{register, Gauge, GaugeVec, Opts, PrometheusError, Registry, U64};
|
use prometheus_endpoint::{register, Gauge, GaugeVec, Opts, PrometheusError, Registry, U64};
|
||||||
use prost::Message as _;
|
use prost::Message as _;
|
||||||
|
use sc_consensus::import_queue::{BlockImportError, BlockImportStatus, IncomingBlock, Origin};
|
||||||
use sp_arithmetic::traits::SaturatedConversion;
|
use sp_arithmetic::traits::SaturatedConversion;
|
||||||
use sp_consensus::{
|
use sp_consensus::{block_validation::BlockAnnounceValidator, BlockOrigin};
|
||||||
block_validation::BlockAnnounceValidator,
|
|
||||||
import_queue::{BlockImportError, BlockImportResult, IncomingBlock, Origin},
|
|
||||||
BlockOrigin,
|
|
||||||
};
|
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
generic::BlockId,
|
generic::BlockId,
|
||||||
traits::{Block as BlockT, CheckedSub, Header as HeaderT, NumberFor, Zero},
|
traits::{Block as BlockT, CheckedSub, Header as HeaderT, NumberFor, Zero},
|
||||||
@@ -1048,7 +1045,7 @@ impl<B: BlockT> Protocol<B> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
imported: usize,
|
imported: usize,
|
||||||
count: usize,
|
count: usize,
|
||||||
results: Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
results: Vec<(Result<BlockImportStatus<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
||||||
) {
|
) {
|
||||||
let results = self.sync.on_blocks_processed(imported, count, results);
|
let results = self.sync.on_blocks_processed(imported, count, results);
|
||||||
for result in results {
|
for result in results {
|
||||||
|
|||||||
@@ -39,11 +39,11 @@ use extra_requests::ExtraRequests;
|
|||||||
use futures::{stream::FuturesUnordered, task::Poll, Future, FutureExt, StreamExt};
|
use futures::{stream::FuturesUnordered, task::Poll, Future, FutureExt, StreamExt};
|
||||||
use libp2p::PeerId;
|
use libp2p::PeerId;
|
||||||
use log::{debug, error, info, trace, warn};
|
use log::{debug, error, info, trace, warn};
|
||||||
|
use sc_consensus::{BlockImportError, BlockImportStatus, IncomingBlock};
|
||||||
use sp_arithmetic::traits::Saturating;
|
use sp_arithmetic::traits::Saturating;
|
||||||
use sp_blockchain::{Error as ClientError, HeaderMetadata};
|
use sp_blockchain::{Error as ClientError, HeaderMetadata};
|
||||||
use sp_consensus::{
|
use sp_consensus::{
|
||||||
block_validation::{BlockAnnounceValidator, Validation},
|
block_validation::{BlockAnnounceValidator, Validation},
|
||||||
import_queue::{BlockImportError, BlockImportResult, IncomingBlock},
|
|
||||||
BlockOrigin, BlockStatus,
|
BlockOrigin, BlockStatus,
|
||||||
};
|
};
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
@@ -1240,7 +1240,7 @@ impl<B: BlockT> ChainSync<B> {
|
|||||||
&'a mut self,
|
&'a mut self,
|
||||||
imported: usize,
|
imported: usize,
|
||||||
count: usize,
|
count: usize,
|
||||||
results: Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
results: Vec<(Result<BlockImportStatus<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
||||||
) -> impl Iterator<Item = Result<(PeerId, BlockRequest<B>), BadPeer>> + 'a {
|
) -> impl Iterator<Item = Result<(PeerId, BlockRequest<B>), BadPeer>> + 'a {
|
||||||
trace!(target: "sync", "Imported {} of {}", imported, count);
|
trace!(target: "sync", "Imported {} of {}", imported, count);
|
||||||
|
|
||||||
@@ -1260,12 +1260,12 @@ impl<B: BlockT> ChainSync<B> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
match result {
|
match result {
|
||||||
Ok(BlockImportResult::ImportedKnown(number, who)) => {
|
Ok(BlockImportStatus::ImportedKnown(number, who)) => {
|
||||||
if let Some(peer) = who.and_then(|p| self.peers.get_mut(&p)) {
|
if let Some(peer) = who.and_then(|p| self.peers.get_mut(&p)) {
|
||||||
peer.update_common_number(number);
|
peer.update_common_number(number);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Ok(BlockImportResult::ImportedUnknown(number, aux, who)) => {
|
Ok(BlockImportStatus::ImportedUnknown(number, aux, who)) => {
|
||||||
if aux.clear_justification_requests {
|
if aux.clear_justification_requests {
|
||||||
trace!(
|
trace!(
|
||||||
target: "sync",
|
target: "sync",
|
||||||
@@ -2454,7 +2454,7 @@ mod test {
|
|||||||
///
|
///
|
||||||
/// The node is connected to multiple peers. Both of these peers are having a best block (1) that
|
/// The node is connected to multiple peers. Both of these peers are having a best block (1) that
|
||||||
/// is below our best block (3). Now peer 2 announces a fork of block 3 that we will
|
/// is below our best block (3). Now peer 2 announces a fork of block 3 that we will
|
||||||
/// request from peer 2. After imporitng the fork, peer 2 and then peer 1 will announce block 4.
|
/// request from peer 2. After importing the fork, peer 2 and then peer 1 will announce block 4.
|
||||||
/// But as peer 1 in our view is still at block 1, we will request block 2 (which we already have)
|
/// But as peer 1 in our view is still at block 1, we will request block 2 (which we already have)
|
||||||
/// from it. In the meanwhile peer 2 sends us block 4 and 3 and we send another request for block
|
/// from it. In the meanwhile peer 2 sends us block 4 and 3 and we send another request for block
|
||||||
/// 2 to peer 2. Peer 1 answers with block 2 and then peer 2. This will need to succeed, as we
|
/// 2 to peer 2. Peer 1 answers with block 2 and then peer 2. This will need to succeed, as we
|
||||||
@@ -2777,7 +2777,7 @@ mod test {
|
|||||||
.rev()
|
.rev()
|
||||||
.map(|b| {
|
.map(|b| {
|
||||||
(
|
(
|
||||||
Ok(BlockImportResult::ImportedUnknown(
|
Ok(BlockImportStatus::ImportedUnknown(
|
||||||
b.header().number().clone(),
|
b.header().number().clone(),
|
||||||
Default::default(),
|
Default::default(),
|
||||||
Some(peer_id1.clone()),
|
Some(peer_id1.clone()),
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ use libp2p::{
|
|||||||
use log::{debug, error, info, trace, warn};
|
use log::{debug, error, info, trace, warn};
|
||||||
use metrics::{Histogram, HistogramVec, MetricSources, Metrics};
|
use metrics::{Histogram, HistogramVec, MetricSources, Metrics};
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
|
use sc_consensus::{BlockImportError, BlockImportStatus, ImportQueue, Link};
|
||||||
use sc_peerset::PeersetHandle;
|
use sc_peerset::PeersetHandle;
|
||||||
use sp_consensus::import_queue::{BlockImportError, BlockImportResult, ImportQueue, Link};
|
|
||||||
use sp_runtime::traits::{Block as BlockT, NumberFor};
|
use sp_runtime::traits::{Block as BlockT, NumberFor};
|
||||||
use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender};
|
use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender};
|
||||||
use std::{
|
use std::{
|
||||||
@@ -1265,7 +1265,7 @@ impl<'a, B: BlockT + 'static, H: ExHashT> sp_consensus::SyncOracle for &'a Netwo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<B: BlockT, H: ExHashT> sp_consensus::JustificationSyncLink<B> for NetworkService<B, H> {
|
impl<B: BlockT, H: ExHashT> sc_consensus::JustificationSyncLink<B> for NetworkService<B, H> {
|
||||||
fn request_justification(&self, hash: &B::Hash, number: NumberFor<B>) {
|
fn request_justification(&self, hash: &B::Hash, number: NumberFor<B>) {
|
||||||
NetworkService::request_justification(self, hash, number);
|
NetworkService::request_justification(self, hash, number);
|
||||||
}
|
}
|
||||||
@@ -2104,7 +2104,7 @@ impl<'a, B: BlockT> Link<B> for NetworkLink<'a, B> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
imported: usize,
|
imported: usize,
|
||||||
count: usize,
|
count: usize,
|
||||||
results: Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
results: Vec<(Result<BlockImportStatus<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
||||||
) {
|
) {
|
||||||
self.protocol
|
self.protocol
|
||||||
.behaviour_mut()
|
.behaviour_mut()
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ fn build_test_full_node(
|
|||||||
struct PassThroughVerifier(bool);
|
struct PassThroughVerifier(bool);
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl<B: BlockT> sp_consensus::import_queue::Verifier<B> for PassThroughVerifier {
|
impl<B: BlockT> sc_consensus::Verifier<B> for PassThroughVerifier {
|
||||||
async fn verify(
|
async fn verify(
|
||||||
&mut self,
|
&mut self,
|
||||||
origin: sp_consensus::BlockOrigin,
|
origin: sp_consensus::BlockOrigin,
|
||||||
@@ -56,7 +56,7 @@ fn build_test_full_node(
|
|||||||
body: Option<Vec<B::Extrinsic>>,
|
body: Option<Vec<B::Extrinsic>>,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
(
|
(
|
||||||
sp_consensus::BlockImportParams<B, ()>,
|
sc_consensus::BlockImportParams<B, ()>,
|
||||||
Option<Vec<(sp_blockchain::well_known_cache_keys::Id, Vec<u8>)>>,
|
Option<Vec<(sp_blockchain::well_known_cache_keys::Id, Vec<u8>)>>,
|
||||||
),
|
),
|
||||||
String,
|
String,
|
||||||
@@ -75,16 +75,16 @@ fn build_test_full_node(
|
|||||||
vec![(sp_blockchain::well_known_cache_keys::AUTHORITIES, blob.to_vec())]
|
vec![(sp_blockchain::well_known_cache_keys::AUTHORITIES, blob.to_vec())]
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut import = sp_consensus::BlockImportParams::new(origin, header);
|
let mut import = sc_consensus::BlockImportParams::new(origin, header);
|
||||||
import.body = body;
|
import.body = body;
|
||||||
import.finalized = self.0;
|
import.finalized = self.0;
|
||||||
import.justifications = justifications;
|
import.justifications = justifications;
|
||||||
import.fork_choice = Some(sp_consensus::ForkChoiceStrategy::LongestChain);
|
import.fork_choice = Some(sc_consensus::ForkChoiceStrategy::LongestChain);
|
||||||
Ok((import, maybe_keys))
|
Ok((import, maybe_keys))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let import_queue = Box::new(sp_consensus::import_queue::BasicQueue::new(
|
let import_queue = Box::new(sc_consensus::BasicQueue::new(
|
||||||
PassThroughVerifier(false),
|
PassThroughVerifier(false),
|
||||||
Box::new(client.clone()),
|
Box::new(client.clone()),
|
||||||
None,
|
None,
|
||||||
|
|||||||
@@ -21,12 +21,11 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
use futures::executor::block_on;
|
use futures::executor::block_on;
|
||||||
use sc_block_builder::BlockBuilderProvider;
|
use sc_block_builder::BlockBuilderProvider;
|
||||||
use sp_consensus::{
|
use sc_consensus::{
|
||||||
import_queue::{
|
import_single_block, BasicQueue, BlockImportError, BlockImportStatus, ImportedAux,
|
||||||
import_single_block, BasicQueue, BlockImportError, BlockImportResult, IncomingBlock,
|
IncomingBlock,
|
||||||
},
|
|
||||||
ImportedAux,
|
|
||||||
};
|
};
|
||||||
|
use sp_consensus::BlockOrigin;
|
||||||
use sp_runtime::generic::BlockId;
|
use sp_runtime::generic::BlockId;
|
||||||
use substrate_test_runtime_client::{
|
use substrate_test_runtime_client::{
|
||||||
self,
|
self,
|
||||||
@@ -76,7 +75,7 @@ fn import_single_good_block_works() {
|
|||||||
block,
|
block,
|
||||||
&mut PassThroughVerifier::new(true),
|
&mut PassThroughVerifier::new(true),
|
||||||
)) {
|
)) {
|
||||||
Ok(BlockImportResult::ImportedUnknown(ref num, ref aux, ref org))
|
Ok(BlockImportStatus::ImportedUnknown(ref num, ref aux, ref org))
|
||||||
if *num == number && *aux == expected_aux && *org == Some(peer_id) => {},
|
if *num == number && *aux == expected_aux && *org == Some(peer_id) => {},
|
||||||
r @ _ => panic!("{:?}", r),
|
r @ _ => panic!("{:?}", r),
|
||||||
}
|
}
|
||||||
@@ -91,7 +90,7 @@ fn import_single_good_known_block_is_ignored() {
|
|||||||
block,
|
block,
|
||||||
&mut PassThroughVerifier::new(true),
|
&mut PassThroughVerifier::new(true),
|
||||||
)) {
|
)) {
|
||||||
Ok(BlockImportResult::ImportedKnown(ref n, _)) if *n == number => {},
|
Ok(BlockImportStatus::ImportedKnown(ref n, _)) if *n == number => {},
|
||||||
_ => panic!(),
|
_ => panic!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,10 @@ use sc_client_api::{
|
|||||||
BlockBackend, BlockImportNotification, BlockchainEvents, FinalityNotification,
|
BlockBackend, BlockImportNotification, BlockchainEvents, FinalityNotification,
|
||||||
FinalityNotifications, ImportNotifications,
|
FinalityNotifications, ImportNotifications,
|
||||||
};
|
};
|
||||||
use sc_consensus::LongestChain;
|
use sc_consensus::{
|
||||||
|
BasicQueue, BlockCheckParams, BlockImport, BlockImportParams, BoxJustificationImport,
|
||||||
|
ForkChoiceStrategy, ImportResult, JustificationImport, LongestChain, Verifier,
|
||||||
|
};
|
||||||
pub use sc_network::config::EmptyTransactionPool;
|
pub use sc_network::config::EmptyTransactionPool;
|
||||||
use sc_network::{
|
use sc_network::{
|
||||||
block_request_handler::{self, BlockRequestHandler},
|
block_request_handler::{self, BlockRequestHandler},
|
||||||
@@ -58,11 +61,8 @@ use sp_blockchain::{
|
|||||||
HeaderBackend, Info as BlockchainInfo, Result as ClientResult,
|
HeaderBackend, Info as BlockchainInfo, Result as ClientResult,
|
||||||
};
|
};
|
||||||
use sp_consensus::{
|
use sp_consensus::{
|
||||||
block_import::{BlockImport, ImportResult},
|
|
||||||
block_validation::{BlockAnnounceValidator, DefaultBlockAnnounceValidator},
|
block_validation::{BlockAnnounceValidator, DefaultBlockAnnounceValidator},
|
||||||
import_queue::{BasicQueue, BoxJustificationImport, Verifier},
|
BlockOrigin, Error as ConsensusError,
|
||||||
BlockCheckParams, BlockImportParams, BlockOrigin, Error as ConsensusError, ForkChoiceStrategy,
|
|
||||||
JustificationImport,
|
|
||||||
};
|
};
|
||||||
use sp_core::H256;
|
use sp_core::H256;
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
@@ -152,7 +152,7 @@ pub enum PeersClient {
|
|||||||
impl PeersClient {
|
impl PeersClient {
|
||||||
pub fn as_full(&self) -> Option<Arc<PeersFullClient>> {
|
pub fn as_full(&self) -> Option<Arc<PeersFullClient>> {
|
||||||
match *self {
|
match *self {
|
||||||
PeersClient::Full(ref client, ref _backend) => Some(client.clone()),
|
PeersClient::Full(ref client, _) => Some(client.clone()),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,15 +163,15 @@ impl PeersClient {
|
|||||||
|
|
||||||
pub fn get_aux(&self, key: &[u8]) -> ClientResult<Option<Vec<u8>>> {
|
pub fn get_aux(&self, key: &[u8]) -> ClientResult<Option<Vec<u8>>> {
|
||||||
match *self {
|
match *self {
|
||||||
PeersClient::Full(ref client, ref _backend) => client.get_aux(key),
|
PeersClient::Full(ref client, _) => client.get_aux(key),
|
||||||
PeersClient::Light(ref client, ref _backend) => client.get_aux(key),
|
PeersClient::Light(ref client, _) => client.get_aux(key),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn info(&self) -> BlockchainInfo<Block> {
|
pub fn info(&self) -> BlockchainInfo<Block> {
|
||||||
match *self {
|
match *self {
|
||||||
PeersClient::Full(ref client, ref _backend) => client.chain_info(),
|
PeersClient::Full(ref client, _) => client.chain_info(),
|
||||||
PeersClient::Light(ref client, ref _backend) => client.chain_info(),
|
PeersClient::Light(ref client, _) => client.chain_info(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,8 +180,8 @@ impl PeersClient {
|
|||||||
block: &BlockId<Block>,
|
block: &BlockId<Block>,
|
||||||
) -> ClientResult<Option<<Block as BlockT>::Header>> {
|
) -> ClientResult<Option<<Block as BlockT>::Header>> {
|
||||||
match *self {
|
match *self {
|
||||||
PeersClient::Full(ref client, ref _backend) => client.header(block),
|
PeersClient::Full(ref client, _) => client.header(block),
|
||||||
PeersClient::Light(ref client, ref _backend) => client.header(block),
|
PeersClient::Light(ref client, _) => client.header(block),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,22 +200,22 @@ impl PeersClient {
|
|||||||
|
|
||||||
pub fn justifications(&self, block: &BlockId<Block>) -> ClientResult<Option<Justifications>> {
|
pub fn justifications(&self, block: &BlockId<Block>) -> ClientResult<Option<Justifications>> {
|
||||||
match *self {
|
match *self {
|
||||||
PeersClient::Full(ref client, ref _backend) => client.justifications(block),
|
PeersClient::Full(ref client, _) => client.justifications(block),
|
||||||
PeersClient::Light(ref client, ref _backend) => client.justifications(block),
|
PeersClient::Light(ref client, _) => client.justifications(block),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn finality_notification_stream(&self) -> FinalityNotifications<Block> {
|
pub fn finality_notification_stream(&self) -> FinalityNotifications<Block> {
|
||||||
match *self {
|
match *self {
|
||||||
PeersClient::Full(ref client, ref _backend) => client.finality_notification_stream(),
|
PeersClient::Full(ref client, _) => client.finality_notification_stream(),
|
||||||
PeersClient::Light(ref client, ref _backend) => client.finality_notification_stream(),
|
PeersClient::Light(ref client, _) => client.finality_notification_stream(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn import_notification_stream(&self) -> ImportNotifications<Block> {
|
pub fn import_notification_stream(&self) -> ImportNotifications<Block> {
|
||||||
match *self {
|
match *self {
|
||||||
PeersClient::Full(ref client, ref _backend) => client.import_notification_stream(),
|
PeersClient::Full(ref client, _) => client.import_notification_stream(),
|
||||||
PeersClient::Light(ref client, ref _backend) => client.import_notification_stream(),
|
PeersClient::Light(ref client, _) => client.import_notification_stream(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ substrate-test-runtime-client = { version = "2.0.0", path = "../../test-utils/ru
|
|||||||
tokio = "0.1.22"
|
tokio = "0.1.22"
|
||||||
sc-transaction-pool = { version = "4.0.0-dev", path = "../transaction-pool" }
|
sc-transaction-pool = { version = "4.0.0-dev", path = "../transaction-pool" }
|
||||||
sc-cli = { version = "0.10.0-dev", path = "../cli" }
|
sc-cli = { version = "0.10.0-dev", path = "../cli" }
|
||||||
|
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
test-helpers = ["lazy_static"]
|
test-helpers = ["lazy_static"]
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ use futures::{
|
|||||||
executor,
|
executor,
|
||||||
};
|
};
|
||||||
use sc_block_builder::BlockBuilderProvider;
|
use sc_block_builder::BlockBuilderProvider;
|
||||||
|
use sp_consensus::BlockOrigin;
|
||||||
use sp_rpc::list::ListOrValue;
|
use sp_rpc::list::ListOrValue;
|
||||||
use substrate_test_runtime_client::{
|
use substrate_test_runtime_client::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
runtime::{Block, Header, H256},
|
runtime::{Block, Header, H256},
|
||||||
sp_consensus::BlockOrigin,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -25,11 +25,12 @@ use futures::{compat::Future01CompatExt, executor};
|
|||||||
use futures01::stream::Stream;
|
use futures01::stream::Stream;
|
||||||
use sc_block_builder::BlockBuilderProvider;
|
use sc_block_builder::BlockBuilderProvider;
|
||||||
use sc_rpc_api::DenyUnsafe;
|
use sc_rpc_api::DenyUnsafe;
|
||||||
|
use sp_consensus::BlockOrigin;
|
||||||
use sp_core::{hash::H256, storage::ChildInfo, ChangesTrieConfiguration};
|
use sp_core::{hash::H256, storage::ChildInfo, ChangesTrieConfiguration};
|
||||||
use sp_io::hashing::blake2_256;
|
use sp_io::hashing::blake2_256;
|
||||||
use sp_runtime::generic::BlockId;
|
use sp_runtime::generic::BlockId;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use substrate_test_runtime_client::{prelude::*, runtime, sp_consensus::BlockOrigin};
|
use substrate_test_runtime_client::{prelude::*, runtime};
|
||||||
|
|
||||||
const STORAGE_KEY: &[u8] = b"child";
|
const STORAGE_KEY: &[u8] = b"child";
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ sp-session = { version = "4.0.0-dev", path = "../../primitives/session" }
|
|||||||
sp-state-machine = { version = "0.10.0-dev", path = "../../primitives/state-machine" }
|
sp-state-machine = { version = "0.10.0-dev", path = "../../primitives/state-machine" }
|
||||||
sp-application-crypto = { version = "4.0.0-dev", path = "../../primitives/application-crypto" }
|
sp-application-crypto = { version = "4.0.0-dev", path = "../../primitives/application-crypto" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../client/consensus/common" }
|
||||||
sp-inherents = { version = "4.0.0-dev", path = "../../primitives/inherents" }
|
sp-inherents = { version = "4.0.0-dev", path = "../../primitives/inherents" }
|
||||||
sp-storage = { version = "4.0.0-dev", path = "../../primitives/storage" }
|
sp-storage = { version = "4.0.0-dev", path = "../../primitives/storage" }
|
||||||
sc-network = { version = "0.10.0-dev", path = "../network" }
|
sc-network = { version = "0.10.0-dev", path = "../network" }
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ use sc_client_api::{
|
|||||||
ForkBlocks, StorageProvider, UsageProvider,
|
ForkBlocks, StorageProvider, UsageProvider,
|
||||||
};
|
};
|
||||||
use sc_client_db::{Backend, DatabaseSettings};
|
use sc_client_db::{Backend, DatabaseSettings};
|
||||||
|
use sc_consensus::import_queue::ImportQueue;
|
||||||
use sc_executor::{NativeExecutionDispatch, NativeExecutor, RuntimeInfo};
|
use sc_executor::{NativeExecutionDispatch, NativeExecutor, RuntimeInfo};
|
||||||
use sc_keystore::LocalKeystore;
|
use sc_keystore::LocalKeystore;
|
||||||
use sc_network::{
|
use sc_network::{
|
||||||
@@ -49,9 +50,8 @@ use sc_telemetry::{telemetry, ConnectionMessage, Telemetry, TelemetryHandle, SUB
|
|||||||
use sc_transaction_pool_api::MaintainedTransactionPool;
|
use sc_transaction_pool_api::MaintainedTransactionPool;
|
||||||
use sp_api::{CallApiAt, ProvideRuntimeApi};
|
use sp_api::{CallApiAt, ProvideRuntimeApi};
|
||||||
use sp_blockchain::{HeaderBackend, HeaderMetadata};
|
use sp_blockchain::{HeaderBackend, HeaderMetadata};
|
||||||
use sp_consensus::{
|
use sp_consensus::block_validation::{
|
||||||
block_validation::{BlockAnnounceValidator, Chain, DefaultBlockAnnounceValidator},
|
BlockAnnounceValidator, Chain, DefaultBlockAnnounceValidator,
|
||||||
import_queue::ImportQueue,
|
|
||||||
};
|
};
|
||||||
use sp_core::traits::{CodeExecutor, SpawnNamed};
|
use sp_core::traits::{CodeExecutor, SpawnNamed};
|
||||||
use sp_keystore::{CryptoStore, SyncCryptoStore, SyncCryptoStorePtr};
|
use sp_keystore::{CryptoStore, SyncCryptoStore, SyncCryptoStorePtr};
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ use crate::error::Error;
|
|||||||
use codec::Encode;
|
use codec::Encode;
|
||||||
use futures::{future, prelude::*};
|
use futures::{future, prelude::*};
|
||||||
use sc_client_api::{BlockBackend, UsageProvider};
|
use sc_client_api::{BlockBackend, UsageProvider};
|
||||||
use sp_consensus::import_queue::ImportQueue;
|
use sc_consensus::import_queue::ImportQueue;
|
||||||
use sp_runtime::{generic::BlockId, traits::Block as BlockT};
|
use sp_runtime::{generic::BlockId, traits::Block as BlockT};
|
||||||
|
|
||||||
use crate::chain_ops::import_blocks;
|
use crate::chain_ops::import_blocks;
|
||||||
|
|||||||
@@ -19,21 +19,21 @@
|
|||||||
use crate::{error, error::Error};
|
use crate::{error, error::Error};
|
||||||
use codec::{Decode, IoReader as CodecIoReader};
|
use codec::{Decode, IoReader as CodecIoReader};
|
||||||
use futures::{future, prelude::*};
|
use futures::{future, prelude::*};
|
||||||
|
use futures_timer::Delay;
|
||||||
use log::{info, warn};
|
use log::{info, warn};
|
||||||
use sc_chain_spec::ChainSpec;
|
use sc_chain_spec::ChainSpec;
|
||||||
use sp_consensus::{
|
use sc_client_api::UsageProvider;
|
||||||
import_queue::{BlockImportError, BlockImportResult, ImportQueue, IncomingBlock, Link},
|
use sc_consensus::import_queue::{
|
||||||
BlockOrigin,
|
BlockImportError, BlockImportStatus, ImportQueue, IncomingBlock, Link,
|
||||||
};
|
};
|
||||||
|
use serde_json::{de::IoRead as JsonIoRead, Deserializer, StreamDeserializer};
|
||||||
|
use sp_consensus::BlockOrigin;
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
generic::SignedBlock,
|
generic::SignedBlock,
|
||||||
traits::{Block as BlockT, Header, MaybeSerializeDeserialize, NumberFor, Zero},
|
traits::{
|
||||||
|
Block as BlockT, CheckedDiv, Header, MaybeSerializeDeserialize, NumberFor, Saturating, Zero,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
use futures_timer::Delay;
|
|
||||||
use sc_client_api::UsageProvider;
|
|
||||||
use serde_json::{de::IoRead as JsonIoRead, Deserializer, StreamDeserializer};
|
|
||||||
use sp_runtime::traits::{CheckedDiv, Saturating};
|
|
||||||
use std::{
|
use std::{
|
||||||
convert::{TryFrom, TryInto},
|
convert::{TryFrom, TryInto},
|
||||||
io::{Read, Seek},
|
io::{Read, Seek},
|
||||||
@@ -316,7 +316,7 @@ where
|
|||||||
&mut self,
|
&mut self,
|
||||||
imported: usize,
|
imported: usize,
|
||||||
_num_expected_blocks: usize,
|
_num_expected_blocks: usize,
|
||||||
results: Vec<(Result<BlockImportResult<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
results: Vec<(Result<BlockImportStatus<NumberFor<B>>, BlockImportError>, B::Hash)>,
|
||||||
) {
|
) {
|
||||||
self.imported_blocks += imported as u64;
|
self.imported_blocks += imported as u64;
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ use sc_client_api::{
|
|||||||
notifications::{StorageEventStream, StorageNotifications},
|
notifications::{StorageEventStream, StorageNotifications},
|
||||||
CallExecutor, ExecutorProvider, KeyIterator, ProofProvider, UsageProvider,
|
CallExecutor, ExecutorProvider, KeyIterator, ProofProvider, UsageProvider,
|
||||||
};
|
};
|
||||||
|
use sc_consensus::{
|
||||||
|
BlockCheckParams, BlockImportParams, ForkChoiceStrategy, ImportResult, StateAction,
|
||||||
|
};
|
||||||
use sc_executor::RuntimeVersion;
|
use sc_executor::RuntimeVersion;
|
||||||
use sc_light::fetcher::ChangesProof;
|
use sc_light::fetcher::ChangesProof;
|
||||||
use sc_telemetry::{telemetry, TelemetryHandle, SUBSTRATE_INFO};
|
use sc_telemetry::{telemetry, TelemetryHandle, SUBSTRATE_INFO};
|
||||||
@@ -56,10 +59,8 @@ use sp_blockchain::{
|
|||||||
self as blockchain, well_known_cache_keys::Id as CacheKeyId, Backend as ChainBackend, Cache,
|
self as blockchain, well_known_cache_keys::Id as CacheKeyId, Backend as ChainBackend, Cache,
|
||||||
CachedHeaderMetadata, Error, HeaderBackend as ChainHeaderBackend, HeaderMetadata, ProvideCache,
|
CachedHeaderMetadata, Error, HeaderBackend as ChainHeaderBackend, HeaderMetadata, ProvideCache,
|
||||||
};
|
};
|
||||||
use sp_consensus::{
|
use sp_consensus::{BlockOrigin, BlockStatus, Error as ConsensusError};
|
||||||
BlockCheckParams, BlockImportParams, BlockOrigin, BlockStatus, Error as ConsensusError,
|
|
||||||
ForkChoiceStrategy, ImportResult, StateAction,
|
|
||||||
};
|
|
||||||
use sp_core::{
|
use sp_core::{
|
||||||
convert_hash,
|
convert_hash,
|
||||||
storage::{well_known_keys, ChildInfo, PrefixedStorageKey, StorageData, StorageKey},
|
storage::{well_known_keys, ChildInfo, PrefixedStorageKey, StorageData, StorageKey},
|
||||||
@@ -120,17 +121,18 @@ where
|
|||||||
_phantom: PhantomData<RA>,
|
_phantom: PhantomData<RA>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// used in importing a block, where additional changes are made after the runtime
|
/// Used in importing a block, where additional changes are made after the runtime
|
||||||
// executed.
|
/// executed.
|
||||||
enum PrePostHeader<H> {
|
enum PrePostHeader<H> {
|
||||||
// they are the same: no post-runtime digest items.
|
/// they are the same: no post-runtime digest items.
|
||||||
Same(H),
|
Same(H),
|
||||||
// different headers (pre, post).
|
/// different headers (pre, post).
|
||||||
Different(H, H),
|
Different(H, H),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<H> PrePostHeader<H> {
|
impl<H> PrePostHeader<H> {
|
||||||
// get a reference to the "post-header" -- the header as it should be after all changes are applied.
|
/// get a reference to the "post-header" -- the header as it should be
|
||||||
|
/// after all changes are applied.
|
||||||
fn post(&self) -> &H {
|
fn post(&self) -> &H {
|
||||||
match *self {
|
match *self {
|
||||||
PrePostHeader::Same(ref h) => h,
|
PrePostHeader::Same(ref h) => h,
|
||||||
@@ -138,7 +140,8 @@ impl<H> PrePostHeader<H> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert to the "post-header" -- the header as it should be after all changes are applied.
|
/// convert to the "post-header" -- the header as it should be after
|
||||||
|
/// all changes are applied.
|
||||||
fn into_post(self) -> H {
|
fn into_post(self) -> H {
|
||||||
match self {
|
match self {
|
||||||
PrePostHeader::Same(h) => h,
|
PrePostHeader::Same(h) => h,
|
||||||
@@ -149,7 +152,7 @@ impl<H> PrePostHeader<H> {
|
|||||||
|
|
||||||
enum PrepareStorageChangesResult<B: backend::Backend<Block>, Block: BlockT> {
|
enum PrepareStorageChangesResult<B: backend::Backend<Block>, Block: BlockT> {
|
||||||
Discard(ImportResult),
|
Discard(ImportResult),
|
||||||
Import(Option<sp_consensus::StorageChanges<Block, backend::TransactionFor<B, Block>>>),
|
Import(Option<sc_consensus::StorageChanges<Block, backend::TransactionFor<B, Block>>>),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create an instance of in-memory client.
|
/// Create an instance of in-memory client.
|
||||||
@@ -577,7 +580,8 @@ where
|
|||||||
Ok(StorageProof::merge(proofs))
|
Ok(StorageProof::merge(proofs))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generates CHT-based proof for roots of changes tries at given blocks (that are part of single CHT).
|
/// Generates CHT-based proof for roots of changes tries at given blocks
|
||||||
|
/// (that are part of single CHT).
|
||||||
fn changes_trie_roots_proof_at_cht(
|
fn changes_trie_roots_proof_at_cht(
|
||||||
&self,
|
&self,
|
||||||
cht_size: NumberFor<Block>,
|
cht_size: NumberFor<Block>,
|
||||||
@@ -603,11 +607,12 @@ where
|
|||||||
Ok(proof)
|
Ok(proof)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns changes trie storage and all configurations that have been active in the range [first; last].
|
/// Returns changes trie storage and all configurations that have been active
|
||||||
|
/// in the range [first; last].
|
||||||
///
|
///
|
||||||
/// Configurations are returned in descending order (and obviously never overlap).
|
/// Configurations are returned in descending order (and obviously never overlap).
|
||||||
/// If fail_if_disabled is false, returns maximal consequent configurations ranges, starting from last and
|
/// If fail_if_disabled is false, returns maximal consequent configurations ranges,
|
||||||
/// stopping on either first, or when CT have been disabled.
|
/// starting from last and stopping on either first, or when CT have been disabled.
|
||||||
/// If fail_if_disabled is true, fails when there's a subrange where CT have been disabled
|
/// If fail_if_disabled is true, fails when there's a subrange where CT have been disabled
|
||||||
/// inside first..last blocks range.
|
/// inside first..last blocks range.
|
||||||
fn require_changes_trie(
|
fn require_changes_trie(
|
||||||
@@ -656,7 +661,7 @@ where
|
|||||||
import_block: BlockImportParams<Block, backend::TransactionFor<B, Block>>,
|
import_block: BlockImportParams<Block, backend::TransactionFor<B, Block>>,
|
||||||
new_cache: HashMap<CacheKeyId, Vec<u8>>,
|
new_cache: HashMap<CacheKeyId, Vec<u8>>,
|
||||||
storage_changes: Option<
|
storage_changes: Option<
|
||||||
sp_consensus::StorageChanges<Block, backend::TransactionFor<B, Block>>,
|
sc_consensus::StorageChanges<Block, backend::TransactionFor<B, Block>>,
|
||||||
>,
|
>,
|
||||||
) -> sp_blockchain::Result<ImportResult>
|
) -> sp_blockchain::Result<ImportResult>
|
||||||
where
|
where
|
||||||
@@ -749,7 +754,7 @@ where
|
|||||||
body: Option<Vec<Block::Extrinsic>>,
|
body: Option<Vec<Block::Extrinsic>>,
|
||||||
indexed_body: Option<Vec<Vec<u8>>>,
|
indexed_body: Option<Vec<Vec<u8>>>,
|
||||||
storage_changes: Option<
|
storage_changes: Option<
|
||||||
sp_consensus::StorageChanges<Block, backend::TransactionFor<B, Block>>,
|
sc_consensus::StorageChanges<Block, backend::TransactionFor<B, Block>>,
|
||||||
>,
|
>,
|
||||||
new_cache: HashMap<CacheKeyId, Vec<u8>>,
|
new_cache: HashMap<CacheKeyId, Vec<u8>>,
|
||||||
finalized: bool,
|
finalized: bool,
|
||||||
@@ -793,7 +798,7 @@ where
|
|||||||
let storage_changes = match storage_changes {
|
let storage_changes = match storage_changes {
|
||||||
Some(storage_changes) => {
|
Some(storage_changes) => {
|
||||||
let storage_changes = match storage_changes {
|
let storage_changes = match storage_changes {
|
||||||
sp_consensus::StorageChanges::Changes(storage_changes) => {
|
sc_consensus::StorageChanges::Changes(storage_changes) => {
|
||||||
self.backend
|
self.backend
|
||||||
.begin_state_operation(&mut operation.op, BlockId::Hash(parent_hash))?;
|
.begin_state_operation(&mut operation.op, BlockId::Hash(parent_hash))?;
|
||||||
let (main_sc, child_sc, offchain_sc, tx, _, changes_trie_tx, tx_index) =
|
let (main_sc, child_sc, offchain_sc, tx, _, changes_trie_tx, tx_index) =
|
||||||
@@ -813,7 +818,7 @@ where
|
|||||||
|
|
||||||
Some((main_sc, child_sc))
|
Some((main_sc, child_sc))
|
||||||
},
|
},
|
||||||
sp_consensus::StorageChanges::Import(changes) => {
|
sc_consensus::StorageChanges::Import(changes) => {
|
||||||
let storage = sp_storage::Storage {
|
let storage = sp_storage::Storage {
|
||||||
top: changes.state.into_iter().collect(),
|
top: changes.state.into_iter().collect(),
|
||||||
children_default: Default::default(),
|
children_default: Default::default(),
|
||||||
@@ -889,7 +894,8 @@ where
|
|||||||
|
|
||||||
operation.op.insert_aux(aux)?;
|
operation.op.insert_aux(aux)?;
|
||||||
|
|
||||||
// we only notify when we are already synced to the tip of the chain or if this import triggers a re-org
|
// we only notify when we are already synced to the tip of the chain
|
||||||
|
// or if this import triggers a re-org
|
||||||
if make_notifications || tree_route.is_some() {
|
if make_notifications || tree_route.is_some() {
|
||||||
if finalized {
|
if finalized {
|
||||||
operation.notify_finalized.push(hash);
|
operation.notify_finalized.push(hash);
|
||||||
@@ -933,7 +939,7 @@ where
|
|||||||
(_, StateAction::Skip) => (false, None),
|
(_, StateAction::Skip) => (false, None),
|
||||||
(
|
(
|
||||||
BlockStatus::InChainPruned,
|
BlockStatus::InChainPruned,
|
||||||
StateAction::ApplyChanges(sp_consensus::StorageChanges::Changes(_)),
|
StateAction::ApplyChanges(sc_consensus::StorageChanges::Changes(_)),
|
||||||
) => return Ok(PrepareStorageChangesResult::Discard(ImportResult::MissingState)),
|
) => return Ok(PrepareStorageChangesResult::Discard(ImportResult::MissingState)),
|
||||||
(BlockStatus::InChainPruned, StateAction::Execute) =>
|
(BlockStatus::InChainPruned, StateAction::Execute) =>
|
||||||
return Ok(PrepareStorageChangesResult::Discard(ImportResult::MissingState)),
|
return Ok(PrepareStorageChangesResult::Discard(ImportResult::MissingState)),
|
||||||
@@ -975,7 +981,7 @@ where
|
|||||||
{
|
{
|
||||||
return Err(Error::InvalidStateRoot)
|
return Err(Error::InvalidStateRoot)
|
||||||
}
|
}
|
||||||
Some(sp_consensus::StorageChanges::Changes(gen_storage_changes))
|
Some(sc_consensus::StorageChanges::Changes(gen_storage_changes))
|
||||||
},
|
},
|
||||||
// No block body, no storage changes
|
// No block body, no storage changes
|
||||||
(true, None, None) => None,
|
(true, None, None) => None,
|
||||||
@@ -1852,7 +1858,7 @@ where
|
|||||||
/// objects. Otherwise, importing blocks directly into the client would be bypassing
|
/// objects. Otherwise, importing blocks directly into the client would be bypassing
|
||||||
/// important verification work.
|
/// important verification work.
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl<B, E, Block, RA> sp_consensus::BlockImport<Block> for &Client<B, E, Block, RA>
|
impl<B, E, Block, RA> sc_consensus::BlockImport<Block> for &Client<B, E, Block, RA>
|
||||||
where
|
where
|
||||||
B: backend::Backend<Block>,
|
B: backend::Backend<Block>,
|
||||||
E: CallExecutor<Block> + Send + Sync,
|
E: CallExecutor<Block> + Send + Sync,
|
||||||
@@ -1960,7 +1966,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl<B, E, Block, RA> sp_consensus::BlockImport<Block> for Client<B, E, Block, RA>
|
impl<B, E, Block, RA> sc_consensus::BlockImport<Block> for Client<B, E, Block, RA>
|
||||||
where
|
where
|
||||||
B: backend::Backend<Block>,
|
B: backend::Backend<Block>,
|
||||||
E: CallExecutor<Block> + Send + Sync,
|
E: CallExecutor<Block> + Send + Sync,
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ pub use sc_chain_spec::{
|
|||||||
Properties, RuntimeGenesis,
|
Properties, RuntimeGenesis,
|
||||||
};
|
};
|
||||||
use sc_client_api::{blockchain::HeaderBackend, BlockchainEvents};
|
use sc_client_api::{blockchain::HeaderBackend, BlockchainEvents};
|
||||||
|
pub use sc_consensus::ImportQueue;
|
||||||
pub use sc_executor::NativeExecutionDispatch;
|
pub use sc_executor::NativeExecutionDispatch;
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub use sc_network::config::{OnDemand, TransactionImport, TransactionImportFuture};
|
pub use sc_network::config::{OnDemand, TransactionImport, TransactionImportFuture};
|
||||||
@@ -74,7 +75,6 @@ pub use sc_rpc::Metadata as RpcMetadata;
|
|||||||
pub use sc_tracing::TracingReceiver;
|
pub use sc_tracing::TracingReceiver;
|
||||||
pub use sc_transaction_pool::Options as TransactionPoolOptions;
|
pub use sc_transaction_pool::Options as TransactionPoolOptions;
|
||||||
pub use sc_transaction_pool_api::{error::IntoPoolError, InPoolTransaction, TransactionPool};
|
pub use sc_transaction_pool_api::{error::IntoPoolError, InPoolTransaction, TransactionPool};
|
||||||
pub use sp_consensus::import_queue::ImportQueue;
|
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub use std::{ops::Deref, result::Result, sync::Arc};
|
pub use std::{ops::Deref, result::Result, sync::Arc};
|
||||||
pub use task_manager::{SpawnTaskHandle, TaskManager};
|
pub use task_manager::{SpawnTaskHandle, TaskManager};
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ futures = { version = "0.3.1", features = ["compat"] }
|
|||||||
sc-service = { version = "0.10.0-dev", features = ["test-helpers"], path = "../../service" }
|
sc-service = { version = "0.10.0-dev", features = ["test-helpers"], path = "../../service" }
|
||||||
sc-network = { version = "0.10.0-dev", path = "../../network" }
|
sc-network = { version = "0.10.0-dev", path = "../../network" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||||
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
sp-runtime = { version = "4.0.0-dev", path = "../../../primitives/runtime" }
|
||||||
sp-core = { version = "4.0.0-dev", path = "../../../primitives/core" }
|
sp-core = { version = "4.0.0-dev", path = "../../../primitives/core" }
|
||||||
sc-transaction-pool-api = { version = "4.0.0-dev", path = "../../../client/transaction-pool/api" }
|
sc-transaction-pool-api = { version = "4.0.0-dev", path = "../../../client/transaction-pool/api" }
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ use sc_client_api::{in_mem, BlockBackend, BlockchainEvents, StorageProvider};
|
|||||||
use sc_client_db::{
|
use sc_client_db::{
|
||||||
Backend, DatabaseSettings, DatabaseSettingsSrc, KeepBlocks, PruningMode, TransactionStorageMode,
|
Backend, DatabaseSettings, DatabaseSettingsSrc, KeepBlocks, PruningMode, TransactionStorageMode,
|
||||||
};
|
};
|
||||||
|
use sc_consensus::{
|
||||||
|
BlockCheckParams, BlockImport, BlockImportParams, ForkChoiceStrategy, ImportResult,
|
||||||
|
};
|
||||||
use sc_executor::native_executor_instance;
|
use sc_executor::native_executor_instance;
|
||||||
use sc_service::client::{self, new_in_mem, Client, LocalCallExecutor};
|
use sc_service::client::{self, new_in_mem, Client, LocalCallExecutor};
|
||||||
use sp_api::ProvideRuntimeApi;
|
use sp_api::ProvideRuntimeApi;
|
||||||
use sp_consensus::{
|
use sp_consensus::{BlockOrigin, BlockStatus, Error as ConsensusError, SelectChain};
|
||||||
BlockCheckParams, BlockImport, BlockImportParams, BlockOrigin, BlockStatus,
|
|
||||||
Error as ConsensusError, ForkChoiceStrategy, ImportResult, SelectChain,
|
|
||||||
};
|
|
||||||
use sp_core::{blake2_256, testing::TaskExecutor, ChangesTrieConfiguration, H256};
|
use sp_core::{blake2_256, testing::TaskExecutor, ChangesTrieConfiguration, H256};
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
generic::BlockId,
|
generic::BlockId,
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
title: Style Guide for Rust in Substrate
|
title: Style Guide for Rust in Substrate
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Where possible these styles are enforced by settings in `rustfmt.toml` so if you run `cargo fmt`
|
||||||
|
then you will adhere to most of these style guidelines automatically.
|
||||||
|
|
||||||
# Formatting
|
# Formatting
|
||||||
|
|
||||||
- Indent using tabs.
|
- Indent using tabs.
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ pub use frame_metadata::{
|
|||||||
};
|
};
|
||||||
pub use sp_runtime::{traits::Dispatchable, DispatchError};
|
pub use sp_runtime::{traits::Dispatchable, DispatchError};
|
||||||
|
|
||||||
/// The return typ of a `Dispatchable` in frame. When returned explicitly from
|
/// The return type of a `Dispatchable` in frame. When returned explicitly from
|
||||||
/// a dispatchable function it allows overriding the default `PostDispatchInfo`
|
/// a dispatchable function it allows overriding the default `PostDispatchInfo`
|
||||||
/// returned from a dispatch.
|
/// returned from a dispatch.
|
||||||
pub type DispatchResultWithPostInfo =
|
pub type DispatchResultWithPostInfo =
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ pub enum BlockStatus {
|
|||||||
/// A list of all well known keys in the blockchain cache.
|
/// A list of all well known keys in the blockchain cache.
|
||||||
pub mod well_known_cache_keys {
|
pub mod well_known_cache_keys {
|
||||||
/// The type representing cache keys.
|
/// The type representing cache keys.
|
||||||
pub type Id = sp_consensus::import_queue::CacheKeyId;
|
pub type Id = sp_consensus::CacheKeyId;
|
||||||
|
|
||||||
/// A list of authorities.
|
/// A list of authorities.
|
||||||
pub const AUTHORITIES: Id = *b"auth";
|
pub const AUTHORITIES: Id = *b"auth";
|
||||||
|
|||||||
@@ -13,15 +13,14 @@ readme = "README.md"
|
|||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
targets = ["x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-unknown-linux-gnu"]
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
thiserror = "1.0.21"
|
async-trait = "0.1.42"
|
||||||
libp2p = { version = "0.37.1", default-features = false }
|
codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive"] }
|
||||||
|
futures = { version = "0.3.1", features = ["thread-pool"] }
|
||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
sp-core = { path= "../../core", version = "4.0.0-dev"}
|
sp-core = { path= "../../core", version = "4.0.0-dev"}
|
||||||
sp-inherents = { version = "4.0.0-dev", path = "../../inherents" }
|
sp-inherents = { version = "4.0.0-dev", path = "../../inherents" }
|
||||||
sp-state-machine = { version = "0.10.0-dev", path = "../../state-machine" }
|
sp-state-machine = { version = "0.10.0-dev", path = "../../state-machine" }
|
||||||
futures = { version = "0.3.1", features = ["thread-pool"] }
|
|
||||||
futures-timer = "3.0.1"
|
futures-timer = "3.0.1"
|
||||||
sp-std = { version = "4.0.0-dev", path = "../../std" }
|
sp-std = { version = "4.0.0-dev", path = "../../std" }
|
||||||
sp-version = { version = "4.0.0-dev", path = "../../version" }
|
sp-version = { version = "4.0.0-dev", path = "../../version" }
|
||||||
@@ -29,12 +28,11 @@ sp-runtime = { version = "4.0.0-dev", path = "../../runtime" }
|
|||||||
sp-utils = { version = "4.0.0-dev", path = "../../utils" }
|
sp-utils = { version = "4.0.0-dev", path = "../../utils" }
|
||||||
sp-trie = { version = "4.0.0-dev", path = "../../trie" }
|
sp-trie = { version = "4.0.0-dev", path = "../../trie" }
|
||||||
sp-api = { version = "4.0.0-dev", path = "../../api" }
|
sp-api = { version = "4.0.0-dev", path = "../../api" }
|
||||||
codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive"] }
|
|
||||||
parking_lot = "0.11.1"
|
parking_lot = "0.11.1"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus", version = "0.9.0"}
|
prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus", version = "0.9.0"}
|
||||||
wasm-timer = "0.2.5"
|
wasm-timer = "0.2.5"
|
||||||
async-trait = "0.1.50"
|
thiserror = "1.0.21"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
futures = "0.3.9"
|
futures = "0.3.9"
|
||||||
|
|||||||
@@ -21,14 +21,6 @@
|
|||||||
//! change. Implementors of traits should not rely on the interfaces to remain
|
//! change. Implementors of traits should not rely on the interfaces to remain
|
||||||
//! the same.
|
//! the same.
|
||||||
|
|
||||||
// This provides "unused" building blocks to other crates
|
|
||||||
#![allow(dead_code)]
|
|
||||||
// our error-chain could potentially blow up otherwise
|
|
||||||
#![recursion_limit = "128"]
|
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate log;
|
|
||||||
|
|
||||||
use std::{sync::Arc, time::Duration};
|
use std::{sync::Arc, time::Duration};
|
||||||
|
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
@@ -38,25 +30,19 @@ use sp_runtime::{
|
|||||||
};
|
};
|
||||||
use sp_state_machine::StorageProof;
|
use sp_state_machine::StorageProof;
|
||||||
|
|
||||||
pub mod block_import;
|
|
||||||
pub mod block_validation;
|
pub mod block_validation;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
pub mod evaluation;
|
pub mod evaluation;
|
||||||
pub mod import_queue;
|
|
||||||
mod metrics;
|
|
||||||
mod select_chain;
|
mod select_chain;
|
||||||
|
|
||||||
pub use self::error::Error;
|
pub use self::error::Error;
|
||||||
pub use block_import::{
|
|
||||||
BlockCheckParams, BlockImport, BlockImportParams, BlockOrigin, ForkChoiceStrategy,
|
|
||||||
ImportResult, ImportedAux, ImportedState, JustificationImport, JustificationSyncLink,
|
|
||||||
StateAction, StorageChanges,
|
|
||||||
};
|
|
||||||
pub use import_queue::DefaultImportQueue;
|
|
||||||
pub use select_chain::SelectChain;
|
pub use select_chain::SelectChain;
|
||||||
pub use sp_inherents::InherentData;
|
pub use sp_inherents::InherentData;
|
||||||
pub use sp_state_machine::Backend as StateBackend;
|
pub use sp_state_machine::Backend as StateBackend;
|
||||||
|
|
||||||
|
/// Type of keys in the blockchain cache that consensus module could use for its needs.
|
||||||
|
pub type CacheKeyId = [u8; 4];
|
||||||
|
|
||||||
/// Block status.
|
/// Block status.
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub enum BlockStatus {
|
pub enum BlockStatus {
|
||||||
@@ -72,6 +58,23 @@ pub enum BlockStatus {
|
|||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Block data origin.
|
||||||
|
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
|
||||||
|
pub enum BlockOrigin {
|
||||||
|
/// Genesis block built into the client.
|
||||||
|
Genesis,
|
||||||
|
/// Block is part of the initial sync with the network.
|
||||||
|
NetworkInitialSync,
|
||||||
|
/// Block was broadcasted on the network.
|
||||||
|
NetworkBroadcast,
|
||||||
|
/// Block that was received from the network and validated in the consensus process.
|
||||||
|
ConsensusBroadcast,
|
||||||
|
/// Block that was collated by this node.
|
||||||
|
Own,
|
||||||
|
/// Block was imported from a file.
|
||||||
|
File,
|
||||||
|
}
|
||||||
|
|
||||||
/// Environment for a Consensus instance.
|
/// Environment for a Consensus instance.
|
||||||
///
|
///
|
||||||
/// Creates proposer instance.
|
/// Creates proposer instance.
|
||||||
|
|||||||
@@ -19,10 +19,9 @@
|
|||||||
|
|
||||||
use codec::alloc::collections::hash_map::HashMap;
|
use codec::alloc::collections::hash_map::HashMap;
|
||||||
use sc_client_api::{backend::Finalizer, client::BlockBackend};
|
use sc_client_api::{backend::Finalizer, client::BlockBackend};
|
||||||
|
use sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy};
|
||||||
use sc_service::client::Client;
|
use sc_service::client::Client;
|
||||||
use sp_consensus::{
|
use sp_consensus::{BlockOrigin, Error as ConsensusError};
|
||||||
BlockImport, BlockImportParams, BlockOrigin, Error as ConsensusError, ForkChoiceStrategy,
|
|
||||||
};
|
|
||||||
use sp_runtime::{generic::BlockId, traits::Block as BlockT, Justification, Justifications};
|
use sp_runtime::{generic::BlockId, traits::Block as BlockT, Justification, Justifications};
|
||||||
|
|
||||||
/// Extension trait for a test client.
|
/// Extension trait for a test client.
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ serde = { version = "1.0.126", optional = true, features = ["derive"] }
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
sc-block-builder = { version = "0.10.0-dev", path = "../../client/block-builder" }
|
sc-block-builder = { version = "0.10.0-dev", path = "../../client/block-builder" }
|
||||||
sc-executor = { version = "0.10.0-dev", path = "../../client/executor" }
|
sc-executor = { version = "0.10.0-dev", path = "../../client/executor" }
|
||||||
|
sp-consensus = { version = "0.10.0-dev", path = "../../primitives/consensus/common" }
|
||||||
substrate-test-runtime-client = { version = "2.0.0", path = "./client" }
|
substrate-test-runtime-client = { version = "2.0.0", path = "./client" }
|
||||||
futures = "0.3.9"
|
futures = "0.3.9"
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"]
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
sc-light = { version = "4.0.0-dev", path = "../../../client/light" }
|
sc-light = { version = "4.0.0-dev", path = "../../../client/light" }
|
||||||
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
sp-consensus = { version = "0.10.0-dev", path = "../../../primitives/consensus/common" }
|
||||||
|
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
||||||
sc-block-builder = { version = "0.10.0-dev", path = "../../../client/block-builder" }
|
sc-block-builder = { version = "0.10.0-dev", path = "../../../client/block-builder" }
|
||||||
substrate-test-client = { version = "2.0.0", path = "../../client" }
|
substrate-test-client = { version = "2.0.0", path = "../../client" }
|
||||||
sp-core = { version = "4.0.0-dev", path = "../../../primitives/core" }
|
sp-core = { version = "4.0.0-dev", path = "../../../primitives/core" }
|
||||||
@@ -23,6 +24,5 @@ sp-api = { version = "4.0.0-dev", path = "../../../primitives/api" }
|
|||||||
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" }
|
||||||
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
codec = { package = "parity-scale-codec", version = "2.0.0" }
|
||||||
sc-client-api = { version = "4.0.0-dev", path = "../../../client/api" }
|
sc-client-api = { version = "4.0.0-dev", path = "../../../client/api" }
|
||||||
sc-consensus = { version = "0.10.0-dev", path = "../../../client/consensus/common" }
|
|
||||||
sc-service = { version = "0.10.0-dev", default-features = false, path = "../../../client/service" }
|
sc-service = { version = "0.10.0-dev", default-features = false, path = "../../../client/service" }
|
||||||
futures = "0.3.9"
|
futures = "0.3.9"
|
||||||
|
|||||||
@@ -1244,12 +1244,12 @@ mod tests {
|
|||||||
use codec::Encode;
|
use codec::Encode;
|
||||||
use sc_block_builder::BlockBuilderProvider;
|
use sc_block_builder::BlockBuilderProvider;
|
||||||
use sp_api::ProvideRuntimeApi;
|
use sp_api::ProvideRuntimeApi;
|
||||||
|
use sp_consensus::BlockOrigin;
|
||||||
use sp_core::storage::well_known_keys::HEAP_PAGES;
|
use sp_core::storage::well_known_keys::HEAP_PAGES;
|
||||||
use sp_runtime::generic::BlockId;
|
use sp_runtime::generic::BlockId;
|
||||||
use sp_state_machine::ExecutionStrategy;
|
use sp_state_machine::ExecutionStrategy;
|
||||||
use substrate_test_runtime_client::{
|
use substrate_test_runtime_client::{
|
||||||
prelude::*, runtime::TestAPI, sp_consensus::BlockOrigin, DefaultTestClientBuilderExt,
|
prelude::*, runtime::TestAPI, DefaultTestClientBuilderExt, TestClientBuilder,
|
||||||
TestClientBuilder,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -227,10 +227,11 @@
|
|||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
|
use sc_consensus::BlockImport;
|
||||||
use sc_executor::NativeExecutionDispatch;
|
use sc_executor::NativeExecutionDispatch;
|
||||||
use sc_service::TFullClient;
|
use sc_service::TFullClient;
|
||||||
use sp_api::{ConstructRuntimeApi, TransactionFor};
|
use sp_api::{ConstructRuntimeApi, TransactionFor};
|
||||||
use sp_consensus::{BlockImport, SelectChain};
|
use sp_consensus::SelectChain;
|
||||||
use sp_inherents::InherentDataProvider;
|
use sp_inherents::InherentDataProvider;
|
||||||
use sp_runtime::traits::{Block as BlockT, SignedExtension};
|
use sp_runtime::traits::{Block as BlockT, SignedExtension};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user