mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 08:11:03 +00:00
Merge remote-tracking branch 'origin/master' into update-scheduler
This commit is contained in:
Generated
+159
-156
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -4,7 +4,7 @@ path = "src/main.rs"
|
||||
|
||||
[package]
|
||||
name = "polkadot"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "polkadot-availability-store"
|
||||
description = "Persistent database for parachain data"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-cli"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
description = "Polkadot Relay-chain Client Node"
|
||||
edition = "2018"
|
||||
|
||||
@@ -128,7 +128,6 @@ pub fn run() -> Result<()> {
|
||||
authority_discovery_enabled,
|
||||
6000,
|
||||
grandpa_pause,
|
||||
None,
|
||||
).map(|(s, _, _)| s)
|
||||
},
|
||||
service::KusamaExecutor::native_version().runtime_version
|
||||
@@ -146,7 +145,6 @@ pub fn run() -> Result<()> {
|
||||
authority_discovery_enabled,
|
||||
6000,
|
||||
grandpa_pause,
|
||||
None,
|
||||
).map(|(s, _, _)| s)
|
||||
},
|
||||
service::WestendExecutor::native_version().runtime_version
|
||||
@@ -164,7 +162,6 @@ pub fn run() -> Result<()> {
|
||||
authority_discovery_enabled,
|
||||
6000,
|
||||
grandpa_pause,
|
||||
None,
|
||||
).map(|(s, _, _)| s)
|
||||
},
|
||||
service::PolkadotExecutor::native_version().runtime_version
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-collator"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
description = "Collator node implementation"
|
||||
edition = "2018"
|
||||
|
||||
@@ -50,7 +50,7 @@ use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use std::pin::Pin;
|
||||
|
||||
use futures::{future, Future, Stream, FutureExt, TryFutureExt, StreamExt, task::Spawn};
|
||||
use futures::{future, Future, Stream, FutureExt, StreamExt, task::Spawn};
|
||||
use log::warn;
|
||||
use sc_client_api::{StateBackend, BlockchainEvents};
|
||||
use sp_blockchain::HeaderBackend;
|
||||
@@ -100,24 +100,17 @@ impl Network for polkadot_network::protocol::Service {
|
||||
}
|
||||
}
|
||||
|
||||
/// Error to return when the head data was invalid.
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub struct InvalidHead;
|
||||
|
||||
/// Collation errors.
|
||||
#[derive(Debug)]
|
||||
pub enum Error {
|
||||
/// Error on the relay-chain side of things.
|
||||
Polkadot(String),
|
||||
/// Error on the collator side of things.
|
||||
Collator(InvalidHead),
|
||||
}
|
||||
|
||||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match *self {
|
||||
Error::Polkadot(ref err) => write!(f, "Polkadot node error: {}", err),
|
||||
Error::Collator(_) => write!(f, "Collator node error: Invalid head data"),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -147,7 +140,7 @@ pub trait BuildParachainContext {
|
||||
/// This can be implemented through an externally attached service or a stub.
|
||||
/// This is expected to be a lightweight, shared type like an Arc.
|
||||
pub trait ParachainContext: Clone {
|
||||
type ProduceCandidate: Future<Output = Result<(BlockData, HeadData), InvalidHead>>;
|
||||
type ProduceCandidate: Future<Output = Option<(BlockData, HeadData)>>;
|
||||
|
||||
/// Produce a candidate, given the relay parent hash, the latest ingress queue information
|
||||
/// and the last parachain head.
|
||||
@@ -167,8 +160,7 @@ pub async fn collate<P>(
|
||||
local_validation_data: LocalValidationData,
|
||||
mut para_context: P,
|
||||
key: Arc<CollatorPair>,
|
||||
)
|
||||
-> Result<parachain::Collation, Error>
|
||||
) -> Option<parachain::Collation>
|
||||
where
|
||||
P: ParachainContext,
|
||||
P::ProduceCandidate: Send,
|
||||
@@ -177,7 +169,7 @@ pub async fn collate<P>(
|
||||
relay_parent,
|
||||
global_validation,
|
||||
local_validation_data,
|
||||
).map_err(Error::Collator).await?;
|
||||
).await?;
|
||||
|
||||
let pov_block = PoVBlock {
|
||||
block_data,
|
||||
@@ -204,7 +196,7 @@ pub async fn collate<P>(
|
||||
pov: pov_block,
|
||||
};
|
||||
|
||||
Ok(collation)
|
||||
Some(collation)
|
||||
}
|
||||
|
||||
#[cfg(feature = "service-rewr")]
|
||||
@@ -341,8 +333,13 @@ fn build_collator_service<SP, P, C, R, Extrinsic>(
|
||||
local_validation,
|
||||
parachain_context,
|
||||
key,
|
||||
).map_ok(move |collation| {
|
||||
network.distribute_collation(targets, collation)
|
||||
).map(move |collation| {
|
||||
match collation {
|
||||
Some(collation) => network.distribute_collation(targets, collation),
|
||||
None => log::trace!("Skipping collation as `collate` returned `None`"),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
});
|
||||
|
||||
future::Either::Right(collation_work)
|
||||
@@ -376,7 +373,6 @@ pub async fn start_collator<P>(
|
||||
para_id: ParaId,
|
||||
key: Arc<CollatorPair>,
|
||||
config: Configuration,
|
||||
informant_prefix: Option<String>,
|
||||
) -> Result<(), polkadot_service::Error>
|
||||
where
|
||||
P: 'static + BuildParachainContext,
|
||||
@@ -397,7 +393,6 @@ where
|
||||
false,
|
||||
6000,
|
||||
None,
|
||||
informant_prefix,
|
||||
)?;
|
||||
let spawn_handle = service.spawn_task_handle();
|
||||
build_collator_service(
|
||||
@@ -416,7 +411,6 @@ where
|
||||
false,
|
||||
6000,
|
||||
None,
|
||||
informant_prefix,
|
||||
)?;
|
||||
let spawn_handle = service.spawn_task_handle();
|
||||
build_collator_service(
|
||||
@@ -435,7 +429,6 @@ where
|
||||
false,
|
||||
6000,
|
||||
None,
|
||||
informant_prefix,
|
||||
)?;
|
||||
let spawn_handle = service.spawn_task_handle();
|
||||
build_collator_service(
|
||||
@@ -470,7 +463,7 @@ mod tests {
|
||||
struct DummyParachainContext;
|
||||
|
||||
impl ParachainContext for DummyParachainContext {
|
||||
type ProduceCandidate = future::Ready<Result<(BlockData, HeadData), InvalidHead>>;
|
||||
type ProduceCandidate = future::Ready<Option<(BlockData, HeadData)>>;
|
||||
|
||||
fn produce_candidate(
|
||||
&mut self,
|
||||
@@ -479,10 +472,10 @@ mod tests {
|
||||
_local_validation: LocalValidationData,
|
||||
) -> Self::ProduceCandidate {
|
||||
// send messages right back.
|
||||
future::ok((
|
||||
future::ready(Some((
|
||||
BlockData(vec![1, 2, 3, 4, 5,]),
|
||||
HeadData(vec![9, 9, 9]),
|
||||
))
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,21 +494,20 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure that the future returned by `start_collator` implementes `Send`.
|
||||
// Make sure that the future returned by `start_collator` implements `Send`.
|
||||
#[test]
|
||||
fn start_collator_is_send() {
|
||||
fn check_send<T: Send>(_: T) {}
|
||||
|
||||
let cli = Cli::from_iter(&["-dev"]);
|
||||
let task_executor = Arc::new(|_, _| unimplemented!());
|
||||
let config = cli.create_configuration(&cli.run.base, task_executor).unwrap();
|
||||
let task_executor = |_, _| unimplemented!();
|
||||
let config = cli.create_configuration(&cli.run.base, task_executor.into()).unwrap();
|
||||
|
||||
check_send(start_collator(
|
||||
BuildDummyParachainContext,
|
||||
0.into(),
|
||||
Arc::new(CollatorPair::generate().0),
|
||||
config,
|
||||
None,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-erasure-coding"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-network"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
description = "Polkadot-specific networking protocol"
|
||||
edition = "2018"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-network-test"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
license = "GPL-3.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
@@ -153,7 +153,7 @@ fn set_prometheus_registry(config: &mut Configuration) -> Result<(), ServiceErro
|
||||
/// Use this macro if you don't actually need the full service, but just the builder in order to
|
||||
/// be able to perform chain operations.
|
||||
macro_rules! new_full_start {
|
||||
($config:expr, $runtime:ty, $executor:ty, $informant_prefix:expr $(,)?) => {{
|
||||
($config:expr, $runtime:ty, $executor:ty) => {{
|
||||
set_prometheus_registry(&mut $config)?;
|
||||
|
||||
let mut import_setup = None;
|
||||
@@ -162,7 +162,6 @@ macro_rules! new_full_start {
|
||||
let builder = service::ServiceBuilder::new_full::<
|
||||
Block, $runtime, $executor
|
||||
>($config)?
|
||||
.with_informant_prefix($informant_prefix.unwrap_or_default())?
|
||||
.with_select_chain(|_, backend| {
|
||||
Ok(sc_consensus::LongestChain::new(backend.clone()))
|
||||
})?
|
||||
@@ -308,7 +307,6 @@ macro_rules! new_full {
|
||||
$grandpa_pause:expr,
|
||||
$runtime:ty,
|
||||
$dispatch:ty,
|
||||
$informant_prefix:expr $(,)?
|
||||
) => {{
|
||||
use sc_client_api::ExecutorProvider;
|
||||
use sp_core::traits::BareCryptoStorePtr;
|
||||
@@ -321,7 +319,7 @@ macro_rules! new_full {
|
||||
let name = $config.network.node_name.clone();
|
||||
|
||||
let (builder, mut import_setup, inherent_data_providers, mut rpc_setup) =
|
||||
new_full_start!($config, $runtime, $dispatch, $informant_prefix);
|
||||
new_full_start!($config, $runtime, $dispatch);
|
||||
|
||||
let service = builder
|
||||
.with_finality_proof_provider(|client, backend| {
|
||||
@@ -583,7 +581,7 @@ where
|
||||
<Runtime::RuntimeApi as sp_api::ApiExt<Block>>::StateBackend: sp_api::StateBackend<BlakeTwo256>,
|
||||
{
|
||||
config.keystore = service::config::KeystoreConfig::InMemory;
|
||||
Ok(new_full_start!(config, Runtime, Dispatch, None).0)
|
||||
Ok(new_full_start!(config, Runtime, Dispatch).0)
|
||||
}
|
||||
|
||||
/// Create a new Polkadot service for a full node.
|
||||
@@ -595,7 +593,6 @@ pub fn polkadot_new_full(
|
||||
_authority_discovery_enabled: bool,
|
||||
_slot_duration: u64,
|
||||
grandpa_pause: Option<(u32, u32)>,
|
||||
informant_prefix: Option<String>,
|
||||
)
|
||||
-> Result<(
|
||||
impl AbstractService,
|
||||
@@ -614,7 +611,6 @@ pub fn polkadot_new_full(
|
||||
grandpa_pause,
|
||||
polkadot_runtime::RuntimeApi,
|
||||
PolkadotExecutor,
|
||||
informant_prefix,
|
||||
);
|
||||
|
||||
Ok((service, client, FullNodeHandles))
|
||||
@@ -629,7 +625,6 @@ pub fn kusama_new_full(
|
||||
_authority_discovery_enabled: bool,
|
||||
_slot_duration: u64,
|
||||
grandpa_pause: Option<(u32, u32)>,
|
||||
informant_prefix: Option<String>,
|
||||
) -> Result<(
|
||||
impl AbstractService,
|
||||
Arc<impl PolkadotClient<
|
||||
@@ -648,7 +643,6 @@ pub fn kusama_new_full(
|
||||
grandpa_pause,
|
||||
kusama_runtime::RuntimeApi,
|
||||
KusamaExecutor,
|
||||
informant_prefix,
|
||||
);
|
||||
|
||||
Ok((service, client, FullNodeHandles))
|
||||
@@ -663,7 +657,6 @@ pub fn westend_new_full(
|
||||
_authority_discovery_enabled: bool,
|
||||
_slot_duration: u64,
|
||||
grandpa_pause: Option<(u32, u32)>,
|
||||
informant_prefix: Option<String>,
|
||||
)
|
||||
-> Result<(
|
||||
impl AbstractService,
|
||||
@@ -682,7 +675,6 @@ pub fn westend_new_full(
|
||||
grandpa_pause,
|
||||
westend_runtime::RuntimeApi,
|
||||
WestendExecutor,
|
||||
informant_prefix,
|
||||
);
|
||||
|
||||
Ok((service, client, FullNodeHandles))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-parachain"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
description = "Types and utilities for creating and working with parachains"
|
||||
edition = "2018"
|
||||
|
||||
@@ -276,6 +276,18 @@ impl sp_externalities::Externalities for ValidationExternalities {
|
||||
panic!("storage_append: unsupported feature for parachain validation")
|
||||
}
|
||||
|
||||
fn storage_start_transaction(&mut self) {
|
||||
panic!("storage_start_transaction: unsupported feature for parachain validation")
|
||||
}
|
||||
|
||||
fn storage_rollback_transaction(&mut self) -> Result<(), ()> {
|
||||
panic!("storage_rollback_transaction: unsupported feature for parachain validation")
|
||||
}
|
||||
|
||||
fn storage_commit_transaction(&mut self) -> Result<(), ()> {
|
||||
panic!("storage_commit_transaction: unsupported feature for parachain validation")
|
||||
}
|
||||
|
||||
fn wipe(&mut self) {
|
||||
panic!("wipe: unsupported feature for parachain validation")
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "test-parachain-adder"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
description = "Test parachain which adds to a number as its state transition"
|
||||
edition = "2018"
|
||||
|
||||
@@ -26,11 +26,9 @@ use primitives::{
|
||||
Hash,
|
||||
parachain::{HeadData, BlockData, Id as ParaId, LocalValidationData, GlobalValidationSchedule},
|
||||
};
|
||||
use collator::{
|
||||
InvalidHead, ParachainContext, Network, BuildParachainContext, Cli, SubstrateCli,
|
||||
};
|
||||
use collator::{ParachainContext, Network, BuildParachainContext, Cli, SubstrateCli};
|
||||
use parking_lot::Mutex;
|
||||
use futures::future::{Ready, ok, err, TryFutureExt};
|
||||
use futures::future::{Ready, ready, TryFutureExt};
|
||||
|
||||
const GENESIS: AdderHead = AdderHead {
|
||||
number: 0,
|
||||
@@ -55,7 +53,7 @@ struct AdderContext {
|
||||
|
||||
/// The parachain context.
|
||||
impl ParachainContext for AdderContext {
|
||||
type ProduceCandidate = Ready<Result<(BlockData, HeadData), InvalidHead>>;
|
||||
type ProduceCandidate = Ready<Option<(BlockData, HeadData)>>;
|
||||
|
||||
fn produce_candidate(
|
||||
&mut self,
|
||||
@@ -64,9 +62,9 @@ impl ParachainContext for AdderContext {
|
||||
local_validation: LocalValidationData,
|
||||
) -> Self::ProduceCandidate
|
||||
{
|
||||
let adder_head = match AdderHead::decode(&mut &local_validation.parent_head.0[..]) {
|
||||
Ok(adder_head) => adder_head,
|
||||
Err(_) => return err(InvalidHead)
|
||||
let adder_head = match AdderHead::decode(&mut &local_validation.parent_head.0[..]).ok() {
|
||||
Some(res) => res,
|
||||
None => return ready(None),
|
||||
};
|
||||
|
||||
let mut db = self.db.lock();
|
||||
@@ -94,7 +92,7 @@ impl ParachainContext for AdderContext {
|
||||
next_head.number, next_body.state.overflowing_add(next_body.add).0);
|
||||
|
||||
db.insert(next_head.clone(), next_body);
|
||||
ok((encoded_body, encoded_head))
|
||||
ready(Some((encoded_body, encoded_head)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +139,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
id,
|
||||
key,
|
||||
config,
|
||||
None,
|
||||
).map_err(|e| e.into())
|
||||
})?;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "test-parachain-halt"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
description = "Test parachain which executes forever"
|
||||
edition = "2018"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-primitives"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
book/
|
||||
*.generated.svg
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
The implementers' guide is compiled from several source files with [mdBook](https://github.com/rust-lang/mdBook). To view it live, locally, from the repo root:
|
||||
|
||||
```sh
|
||||
cargo install mdbook mdbook-linkcheck
|
||||
cargo install mdbook mdbook-linkcheck mdbook-graphviz
|
||||
mdbook serve roadmap/implementors-guide
|
||||
open http://localhost:3000
|
||||
```
|
||||
|
||||
@@ -5,5 +5,8 @@ multilingual = false
|
||||
src = "src"
|
||||
title = "The Polkadot Parachain Host Implementers' Guide"
|
||||
|
||||
[preprocessor.graphviz]
|
||||
command = "mdbook-graphviz"
|
||||
|
||||
[output.html]
|
||||
[output.linkcheck]
|
||||
|
||||
@@ -2,25 +2,22 @@
|
||||
|
||||
Our Parachain Host includes a blockchain known as the relay-chain. A blockchain is a Directed Acyclic Graph (DAG) of state transitions, where every block can be considered to be the head of a linked-list (known as a "chain" or "fork") with a cumulative state which is determined by applying the state transition of each block in turn. All paths through the DAG terminate at the Genesis Block. In fact, the blockchain is a tree, since each block can have only one parent.
|
||||
|
||||
```text
|
||||
+----------------+ +----------------+
|
||||
| Block 4 | | Block 5 |
|
||||
+----------------+ +----------------+
|
||||
\ /
|
||||
V V
|
||||
+---------------+
|
||||
| Block 3 |
|
||||
+---------------+
|
||||
|
|
||||
V
|
||||
+----------------+ +----------------+
|
||||
| Block 1 | | Block 2 |
|
||||
+----------------+ +----------------+
|
||||
\ /
|
||||
V V
|
||||
+----------------+
|
||||
| Genesis |
|
||||
+----------------+
|
||||
```dot process
|
||||
digraph {
|
||||
node [shape=box];
|
||||
genesis [label = Genesis]
|
||||
b1 [label = "Block 1"]
|
||||
b2 [label = "Block 2"]
|
||||
b3 [label = "Block 3"]
|
||||
b4 [label = "Block 4"]
|
||||
b5 [label = "Block 5"]
|
||||
|
||||
b5 -> b3
|
||||
b4 -> b3
|
||||
b3 -> b1
|
||||
b2 -> genesis
|
||||
b1 -> genesis
|
||||
}
|
||||
```
|
||||
|
||||
A blockchain network is comprised of nodes. These nodes each have a view of many different forks of a blockchain and must decide which forks to follow and what actions to take based on the forks of the chain that they are aware of.
|
||||
@@ -34,26 +31,16 @@ The first category of questions will be addressed by the Runtime, which defines
|
||||
|
||||
The second category of questions addressed by Node-side behavior. Node-side behavior defines all activities that a node undertakes, given its view of the blockchain/block-DAG. Node-side behavior can take into account all or many of the forks of the blockchain, and only conditionally undertake certain activities based on which forks it is aware of, as well as the state of the head of those forks.
|
||||
|
||||
```text
|
||||
```dot process
|
||||
digraph G {
|
||||
Runtime [shape=box]
|
||||
"Node" [shape=box margin=0.5]
|
||||
Transport [shape=rectangle width=5]
|
||||
|
||||
__________________________________
|
||||
/ \
|
||||
| Runtime |
|
||||
| |
|
||||
\_________(Runtime API )___________/
|
||||
| ^
|
||||
V |
|
||||
+----------------------------------------------+
|
||||
| |
|
||||
| Node |
|
||||
| |
|
||||
| |
|
||||
+----------------------------------------------+
|
||||
+ +
|
||||
| |
|
||||
--------------------+ +------------------------
|
||||
Transport
|
||||
------------------------------------------------
|
||||
Runtime -> "Node" [dir=both label="Runtime API"]
|
||||
|
||||
"Node" -> Transport [penwidth=1]
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
@@ -60,61 +60,46 @@ Reiterating the lifecycle of a candidate:
|
||||
|
||||
It is also important to take note of the fact that the relay-chain is extended by BABE, which is a forkful algorithm. That means that different block authors can be chosen at the same time, and may not be building on the same block parent. Furthermore, the set of validators is not fixed, nor is the set of parachains. And even with the same set of validators and parachains, the validators' assignments to parachains is flexible. This means that the architecture proposed in the next chapters must deal with the variability and multiplicity of the network state.
|
||||
|
||||
```text
|
||||
|
||||
....... Validator Group 1 ..........
|
||||
. .
|
||||
. (Validator 4) .
|
||||
. (Validator 1) (Validator 2) .
|
||||
. (Validator 5) .
|
||||
. .
|
||||
..........Building on C ........... ........ Validator Group 2 ...........
|
||||
+----------------------+ . .
|
||||
| Relay Block C | . (Validator 7) .
|
||||
+----------------------+ . ( Validator 3) (Validator 6) .
|
||||
\ . .
|
||||
\ ......... Building on B .............
|
||||
\
|
||||
+----------------------+
|
||||
| Relay Block B |
|
||||
+----------------------+
|
||||
|
|
||||
+----------------------+
|
||||
| Relay Block A |
|
||||
+----------------------+
|
||||
```dot process
|
||||
digraph {
|
||||
rca [label = "Relay Block A" shape=rectangle]
|
||||
rcb [label = "Relay Block B" shape=rectangle]
|
||||
rcc [label = "Relay Block C" shape=rectangle]
|
||||
|
||||
vg1 [label =<<b>Validator Group 1</b><br/><br/><font point-size="10">(Validator 4)<br/>(Validator 1) (Validator 2)<br/>(Validator 5)</font>>]
|
||||
vg2 [label =<<b>Validator Group 2</b><br/><br/><font point-size="10">(Validator 7)<br/>(Validator 3) (Validator 6)</font>>]
|
||||
|
||||
rcb -> rca
|
||||
rcc -> rcb
|
||||
|
||||
vg1 -> rcc [label="Building on C" style=dashed arrowhead=none]
|
||||
vg2 -> rcb [label="Building on B" style=dashed arrowhead=none]
|
||||
}
|
||||
```
|
||||
|
||||
In this example, group 1 has received block C while the others have not due to network asynchrony. Now, a validator from group 2 may be able to build another block on top of B, called C'. Assume that afterwards, some validators become aware of both C and C', while others remain only aware of one.
|
||||
|
||||
```text
|
||||
....... Validator Group 1 .......... ........ Validator Group 2 ...........
|
||||
. . . .
|
||||
. (Validator 4) (Validator 1) . . (Validator 7) (Validator 6) .
|
||||
. . . .
|
||||
.......... Building on C .......... ......... Building on C' .............
|
||||
```dot process
|
||||
digraph {
|
||||
rca [label = "Relay Block A" shape=rectangle]
|
||||
rcb [label = "Relay Block B" shape=rectangle]
|
||||
rcc [label = "Relay Block C" shape=rectangle]
|
||||
rcc_prime [label = "Relay Block C'" shape=rectangle]
|
||||
|
||||
vg1 [label =<<b>Validator Group 1</b><br/><br/><font point-size="10">(Validator 4) (Validator 1)</font>>]
|
||||
vg2 [label =<<b>Validator Group 2</b><br/><br/><font point-size="10">(Validator 7) (Validator 6)</font>>]
|
||||
vg3 [label =<<b>Validator Group 3</b><br/><br/><font point-size="10">(Validator 2) (Validator 3)<br/>(Validator 5)</font>>]
|
||||
|
||||
....... Validator Group 3 ..........
|
||||
. .
|
||||
. (Validator 2) (Validator 3) .
|
||||
. (Validator 5) .
|
||||
. .
|
||||
....... Building on C and C' .......
|
||||
rcb -> rca
|
||||
rcc -> rcb
|
||||
rcc_prime -> rcb
|
||||
|
||||
+----------------------+ +----------------------+
|
||||
| Relay Block C | | Relay Block C' |
|
||||
+----------------------+ +----------------------+
|
||||
\ /
|
||||
\ /
|
||||
\ /
|
||||
+----------------------+
|
||||
| Relay Block B |
|
||||
+----------------------+
|
||||
|
|
||||
+----------------------+
|
||||
| Relay Block A |
|
||||
+----------------------+
|
||||
vg1 -> rcc [style=dashed arrowhead=none]
|
||||
vg2 -> rcc_prime [style=dashed arrowhead=none]
|
||||
vg3 -> rcc_prime [style=dashed arrowhead=none]
|
||||
vg3 -> rcc [style=dashed arrowhead=none]
|
||||
}
|
||||
```
|
||||
|
||||
Those validators that are aware of many competing heads must be aware of the work happening on each one. They may contribute to some or a full extent on both. It is possible that due to network asynchrony two forks may grow in parallel for some time, although in the absence of an adversarial network this is unlikely in the case where there are validators who are aware of both chain heads.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-rpc"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-runtime-common"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "kusama-runtime"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
build = "build.rs"
|
||||
|
||||
@@ -86,7 +86,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
||||
spec_name: create_runtime_str!("kusama"),
|
||||
impl_name: create_runtime_str!("parity-kusama"),
|
||||
authoring_version: 2,
|
||||
spec_version: 2011,
|
||||
spec_version: 2012,
|
||||
impl_version: 0,
|
||||
apis: RUNTIME_API_VERSIONS,
|
||||
transaction_version: 1,
|
||||
@@ -268,11 +268,16 @@ impl session::historical::Trait for Runtime {
|
||||
type FullIdentificationOf = staking::ExposureOf<Runtime>;
|
||||
}
|
||||
|
||||
// TODO #6469: This shouldn't be static, but a lazily cached value, not built unless needed, and
|
||||
// re-built in case input parameters have changed. The `ideal_stake` should be determined by the
|
||||
// amount of parachain slots being bid on: this should be around `(75 - 25.min(slots / 4))%`.
|
||||
pallet_staking_reward_curve::build! {
|
||||
const REWARD_CURVE: PiecewiseLinear<'static> = curve!(
|
||||
min_inflation: 0_025_000,
|
||||
max_inflation: 0_100_000,
|
||||
ideal_stake: 0_500_000,
|
||||
// 3:2:1 staked : parachains : float.
|
||||
// while there's no parachains, then this is 75% staked : 25% float.
|
||||
ideal_stake: 0_750_000,
|
||||
falloff: 0_050_000,
|
||||
max_piece_count: 40,
|
||||
test_precision: 0_005_000,
|
||||
@@ -608,7 +613,7 @@ impl<LocalCall> system::offchain::CreateSignedTransaction<LocalCall> for Runtime
|
||||
system::CheckSpecVersion::<Runtime>::new(),
|
||||
system::CheckTxVersion::<Runtime>::new(),
|
||||
system::CheckGenesis::<Runtime>::new(),
|
||||
system::CheckEra::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckMortality::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckNonce::<Runtime>::from(nonce),
|
||||
system::CheckWeight::<Runtime>::new(),
|
||||
transaction_payment::ChargeTransactionPayment::<Runtime>::from(tip),
|
||||
@@ -803,9 +808,50 @@ impl InstanceFilter<Call> for ProxyType {
|
||||
fn filter(&self, c: &Call) -> bool {
|
||||
match self {
|
||||
ProxyType::Any => true,
|
||||
ProxyType::NonTransfer => !matches!(c,
|
||||
Call::Balances(..) | Call::Vesting(vesting::Call::vested_transfer(..))
|
||||
| Call::Indices(indices::Call::transfer(..))
|
||||
ProxyType::NonTransfer => matches!(c,
|
||||
Call::System(..) |
|
||||
Call::Babe(..) |
|
||||
Call::Timestamp(..) |
|
||||
Call::Indices(indices::Call::claim(..)) |
|
||||
Call::Indices(indices::Call::free(..)) |
|
||||
Call::Indices(indices::Call::freeze(..)) |
|
||||
// Specifically omitting Indices `transfer`, `force_transfer`
|
||||
// Specifically omitting the entire Balances pallet
|
||||
Call::Authorship(..) |
|
||||
Call::Staking(..) |
|
||||
Call::Offences(..) |
|
||||
Call::Session(..) |
|
||||
Call::FinalityTracker(..) |
|
||||
Call::Grandpa(..) |
|
||||
Call::ImOnline(..) |
|
||||
Call::AuthorityDiscovery(..) |
|
||||
Call::Democracy(..) |
|
||||
Call::Council(..) |
|
||||
Call::TechnicalCommittee(..) |
|
||||
Call::ElectionsPhragmen(..) |
|
||||
Call::TechnicalMembership(..) |
|
||||
Call::Treasury(..) |
|
||||
Call::Claims(..) |
|
||||
Call::Parachains(..) |
|
||||
Call::Attestations(..) |
|
||||
Call::Slots(..) |
|
||||
Call::Registrar(..) |
|
||||
Call::Utility(..) |
|
||||
Call::Identity(..) |
|
||||
Call::Society(..) |
|
||||
Call::Recovery(recovery::Call::as_recovered(..)) |
|
||||
Call::Recovery(recovery::Call::vouch_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::claim_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::close_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::remove_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::cancel_recovered(..)) |
|
||||
// Specifically omitting Recovery `create_recovery`, `initiate_recovery`
|
||||
Call::Vesting(vesting::Call::vest(..)) |
|
||||
Call::Vesting(vesting::Call::vest_other(..)) |
|
||||
// Specifically omitting Vesting `vested_transfer`, and `force_vested_transfer`
|
||||
Call::Scheduler(..) |
|
||||
Call::Proxy(..) |
|
||||
Call::Multisig(..)
|
||||
),
|
||||
ProxyType::Governance => matches!(c,
|
||||
Call::Democracy(..) | Call::Council(..) | Call::TechnicalCommittee(..)
|
||||
@@ -928,7 +974,7 @@ pub type SignedExtra = (
|
||||
system::CheckSpecVersion<Runtime>,
|
||||
system::CheckTxVersion<Runtime>,
|
||||
system::CheckGenesis<Runtime>,
|
||||
system::CheckEra<Runtime>,
|
||||
system::CheckMortality<Runtime>,
|
||||
system::CheckNonce<Runtime>,
|
||||
system::CheckWeight<Runtime>,
|
||||
transaction_payment::ChargeTransactionPayment<Runtime>,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-runtime"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
build = "build.rs"
|
||||
|
||||
@@ -91,7 +91,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
||||
spec_name: create_runtime_str!("polkadot"),
|
||||
impl_name: create_runtime_str!("parity-polkadot"),
|
||||
authoring_version: 0,
|
||||
spec_version: 11,
|
||||
spec_version: 12,
|
||||
impl_version: 0,
|
||||
apis: RUNTIME_API_VERSIONS,
|
||||
transaction_version: 0,
|
||||
@@ -290,11 +290,16 @@ impl session::historical::Trait for Runtime {
|
||||
type FullIdentificationOf = staking::ExposureOf<Runtime>;
|
||||
}
|
||||
|
||||
// TODO #6469: This shouldn't be static, but a lazily cached value, not built unless needed, and
|
||||
// re-built in case input parameters have changed. The `ideal_stake` should be determined by the
|
||||
// amount of parachain slots being bid on: this should be around `(75 - 25.min(slots / 4))%`.
|
||||
pallet_staking_reward_curve::build! {
|
||||
const REWARD_CURVE: PiecewiseLinear<'static> = curve!(
|
||||
min_inflation: 0_025_000,
|
||||
max_inflation: 0_100_000,
|
||||
ideal_stake: 0_500_000,
|
||||
// 3:2:1 staked : parachains : float.
|
||||
// while there's no parachains, then this is 75% staked : 25% float.
|
||||
ideal_stake: 0_750_000,
|
||||
falloff: 0_050_000,
|
||||
max_piece_count: 40,
|
||||
test_precision: 0_005_000,
|
||||
@@ -655,7 +660,7 @@ impl<LocalCall> system::offchain::CreateSignedTransaction<LocalCall> for Runtime
|
||||
system::CheckSpecVersion::<Runtime>::new(),
|
||||
system::CheckTxVersion::<Runtime>::new(),
|
||||
system::CheckGenesis::<Runtime>::new(),
|
||||
system::CheckEra::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckMortality::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckNonce::<Runtime>::from(nonce),
|
||||
system::CheckWeight::<Runtime>::new(),
|
||||
transaction_payment::ChargeTransactionPayment::<Runtime>::from(tip),
|
||||
@@ -787,9 +792,43 @@ impl InstanceFilter<Call> for ProxyType {
|
||||
fn filter(&self, c: &Call) -> bool {
|
||||
match self {
|
||||
ProxyType::Any => true,
|
||||
ProxyType::NonTransfer => !matches!(c,
|
||||
Call::Balances(..) | Call::Vesting(vesting::Call::vested_transfer(..))
|
||||
| Call::Indices(indices::Call::transfer(..))
|
||||
ProxyType::NonTransfer => matches!(c,
|
||||
Call::System(..) |
|
||||
Call::Scheduler(..) |
|
||||
Call::Babe(..) |
|
||||
Call::Timestamp(..) |
|
||||
Call::Indices(indices::Call::claim(..)) |
|
||||
Call::Indices(indices::Call::free(..)) |
|
||||
Call::Indices(indices::Call::freeze(..)) |
|
||||
// Specifically omitting Indices `transfer`, `force_transfer`
|
||||
// Specifically omitting the entire Balances pallet
|
||||
Call::Authorship(..) |
|
||||
Call::Staking(..) |
|
||||
Call::Offences(..) |
|
||||
Call::Session(..) |
|
||||
Call::FinalityTracker(..) |
|
||||
Call::Grandpa(..) |
|
||||
Call::ImOnline(..) |
|
||||
Call::AuthorityDiscovery(..) |
|
||||
Call::Democracy(..) |
|
||||
Call::Council(..) |
|
||||
Call::TechnicalCommittee(..) |
|
||||
Call::ElectionsPhragmen(..) |
|
||||
Call::TechnicalMembership(..) |
|
||||
Call::Treasury(..) |
|
||||
Call::Parachains(..) |
|
||||
Call::Attestations(..) |
|
||||
Call::Slots(..) |
|
||||
Call::Registrar(..) |
|
||||
Call::Claims(..) |
|
||||
Call::Vesting(vesting::Call::vest(..)) |
|
||||
Call::Vesting(vesting::Call::vest_other(..)) |
|
||||
// Specifically omitting Vesting `vested_transfer`, and `force_vested_transfer`
|
||||
Call::Utility(..) |
|
||||
// Specifically omitting Sudo pallet
|
||||
Call::Identity(..) |
|
||||
Call::Proxy(..) |
|
||||
Call::Multisig(..)
|
||||
),
|
||||
ProxyType::Governance => matches!(c,
|
||||
Call::Democracy(..) | Call::Council(..) | Call::TechnicalCommittee(..)
|
||||
@@ -912,7 +951,7 @@ pub type SignedExtra = (
|
||||
system::CheckSpecVersion<Runtime>,
|
||||
system::CheckTxVersion<Runtime>,
|
||||
system::CheckGenesis<Runtime>,
|
||||
system::CheckEra<Runtime>,
|
||||
system::CheckMortality<Runtime>,
|
||||
system::CheckNonce<Runtime>,
|
||||
system::CheckWeight<Runtime>,
|
||||
transaction_payment::ChargeTransactionPayment<Runtime>,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-test-runtime"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
build = "build.rs"
|
||||
|
||||
@@ -401,7 +401,7 @@ impl<LocalCall> system::offchain::CreateSignedTransaction<LocalCall> for Runtime
|
||||
system::CheckSpecVersion::<Runtime>::new(),
|
||||
system::CheckTxVersion::<Runtime>::new(),
|
||||
system::CheckGenesis::<Runtime>::new(),
|
||||
system::CheckEra::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckMortality::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckNonce::<Runtime>::from(nonce),
|
||||
system::CheckWeight::<Runtime>::new(),
|
||||
transaction_payment::ChargeTransactionPayment::<Runtime>::from(tip),
|
||||
@@ -545,7 +545,7 @@ pub type SignedExtra = (
|
||||
system::CheckSpecVersion<Runtime>,
|
||||
system::CheckTxVersion<Runtime>,
|
||||
system::CheckGenesis<Runtime>,
|
||||
system::CheckEra<Runtime>,
|
||||
system::CheckMortality<Runtime>,
|
||||
system::CheckNonce<Runtime>,
|
||||
system::CheckWeight<Runtime>,
|
||||
transaction_payment::ChargeTransactionPayment::<Runtime>,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "westend-runtime"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
build = "build.rs"
|
||||
|
||||
@@ -82,7 +82,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
||||
spec_name: create_runtime_str!("westend"),
|
||||
impl_name: create_runtime_str!("parity-westend"),
|
||||
authoring_version: 2,
|
||||
spec_version: 31,
|
||||
spec_version: 32,
|
||||
impl_version: 0,
|
||||
apis: RUNTIME_API_VERSIONS,
|
||||
transaction_version: 1,
|
||||
@@ -443,7 +443,7 @@ impl<LocalCall> system::offchain::CreateSignedTransaction<LocalCall> for Runtime
|
||||
system::CheckSpecVersion::<Runtime>::new(),
|
||||
system::CheckTxVersion::<Runtime>::new(),
|
||||
system::CheckGenesis::<Runtime>::new(),
|
||||
system::CheckEra::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckMortality::<Runtime>::from(generic::Era::mortal(period, current_block)),
|
||||
system::CheckNonce::<Runtime>::from(nonce),
|
||||
system::CheckWeight::<Runtime>::new(),
|
||||
transaction_payment::ChargeTransactionPayment::<Runtime>::from(tip),
|
||||
@@ -590,8 +590,42 @@ impl InstanceFilter<Call> for ProxyType {
|
||||
fn filter(&self, c: &Call) -> bool {
|
||||
match self {
|
||||
ProxyType::Any => true,
|
||||
ProxyType::NonTransfer => !matches!(c,
|
||||
Call::Balances(..) | Call::Indices(indices::Call::transfer(..))
|
||||
ProxyType::NonTransfer => matches!(c,
|
||||
Call::System(..) |
|
||||
Call::Babe(..) |
|
||||
Call::Timestamp(..) |
|
||||
Call::Indices(indices::Call::claim(..)) |
|
||||
Call::Indices(indices::Call::free(..)) |
|
||||
Call::Indices(indices::Call::freeze(..)) |
|
||||
// Specifically omitting Indices `transfer`, `force_transfer`
|
||||
// Specifically omitting the entire Balances pallet
|
||||
Call::Authorship(..) |
|
||||
Call::Staking(..) |
|
||||
Call::Offences(..) |
|
||||
Call::Session(..) |
|
||||
Call::FinalityTracker(..) |
|
||||
Call::Grandpa(..) |
|
||||
Call::ImOnline(..) |
|
||||
Call::AuthorityDiscovery(..) |
|
||||
Call::Parachains(..) |
|
||||
Call::Attestations(..) |
|
||||
Call::Registrar(..) |
|
||||
Call::Utility(..) |
|
||||
Call::Identity(..) |
|
||||
Call::Recovery(recovery::Call::as_recovered(..)) |
|
||||
Call::Recovery(recovery::Call::vouch_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::claim_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::close_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::remove_recovery(..)) |
|
||||
Call::Recovery(recovery::Call::cancel_recovered(..)) |
|
||||
// Specifically omitting Recovery `create_recovery`, `initiate_recovery`
|
||||
Call::Vesting(vesting::Call::vest(..)) |
|
||||
Call::Vesting(vesting::Call::vest_other(..)) |
|
||||
// Specifically omitting Vesting `vested_transfer`, and `force_vested_transfer`
|
||||
Call::Scheduler(..) |
|
||||
// Specifically omitting Sudo pallet
|
||||
Call::Proxy(..) |
|
||||
Call::Multisig(..)
|
||||
),
|
||||
ProxyType::Staking => matches!(c,
|
||||
Call::Staking(..) | Call::Utility(utility::Call::batch(..))
|
||||
@@ -701,7 +735,7 @@ pub type SignedExtra = (
|
||||
system::CheckSpecVersion<Runtime>,
|
||||
system::CheckTxVersion<Runtime>,
|
||||
system::CheckGenesis<Runtime>,
|
||||
system::CheckEra<Runtime>,
|
||||
system::CheckMortality<Runtime>,
|
||||
system::CheckNonce<Runtime>,
|
||||
system::CheckWeight<Runtime>,
|
||||
transaction_payment::ChargeTransactionPayment<Runtime>,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-service"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ fn set_prometheus_registry(config: &mut Configuration) -> Result<(), ServiceErro
|
||||
/// Use this macro if you don't actually need the full service, but just the builder in order to
|
||||
/// be able to perform chain operations.
|
||||
macro_rules! new_full_start {
|
||||
($config:expr, $runtime:ty, $executor:ty, $informant_prefix:expr $(,)?) => {{
|
||||
($config:expr, $runtime:ty, $executor:ty) => {{
|
||||
set_prometheus_registry(&mut $config)?;
|
||||
|
||||
let mut import_setup = None;
|
||||
@@ -158,7 +158,6 @@ macro_rules! new_full_start {
|
||||
let builder = service::ServiceBuilder::new_full::<
|
||||
Block, $runtime, $executor
|
||||
>($config)?
|
||||
.with_informant_prefix($informant_prefix.unwrap_or_default())?
|
||||
.with_select_chain(|_, backend| {
|
||||
Ok(sc_consensus::LongestChain::new(backend.clone()))
|
||||
})?
|
||||
@@ -276,7 +275,6 @@ macro_rules! new_full {
|
||||
$grandpa_pause:expr,
|
||||
$runtime:ty,
|
||||
$dispatch:ty,
|
||||
$informant_prefix:expr $(,)?
|
||||
) => {{
|
||||
use sc_network::Event;
|
||||
use sc_client_api::ExecutorProvider;
|
||||
@@ -298,7 +296,7 @@ macro_rules! new_full {
|
||||
let slot_duration = $slot_duration;
|
||||
|
||||
let (builder, mut import_setup, inherent_data_providers, mut rpc_setup) =
|
||||
new_full_start!($config, $runtime, $dispatch, $informant_prefix);
|
||||
new_full_start!($config, $runtime, $dispatch);
|
||||
|
||||
let service = builder
|
||||
.with_finality_proof_provider(|client, backend| {
|
||||
@@ -649,7 +647,7 @@ where
|
||||
<Runtime::RuntimeApi as sp_api::ApiExt<Block>>::StateBackend: sp_api::StateBackend<BlakeTwo256>,
|
||||
{
|
||||
config.keystore = service::config::KeystoreConfig::InMemory;
|
||||
Ok(new_full_start!(config, Runtime, Dispatch, None).0)
|
||||
Ok(new_full_start!(config, Runtime, Dispatch).0)
|
||||
}
|
||||
|
||||
/// Create a new Polkadot service for a full node.
|
||||
@@ -661,7 +659,6 @@ pub fn polkadot_new_full(
|
||||
authority_discovery_enabled: bool,
|
||||
slot_duration: u64,
|
||||
grandpa_pause: Option<(u32, u32)>,
|
||||
informant_prefix: Option<String>,
|
||||
)
|
||||
-> Result<(
|
||||
impl AbstractService,
|
||||
@@ -682,7 +679,6 @@ pub fn polkadot_new_full(
|
||||
grandpa_pause,
|
||||
polkadot_runtime::RuntimeApi,
|
||||
PolkadotExecutor,
|
||||
informant_prefix,
|
||||
);
|
||||
|
||||
Ok((service, client, handles))
|
||||
@@ -697,7 +693,6 @@ pub fn kusama_new_full(
|
||||
authority_discovery_enabled: bool,
|
||||
slot_duration: u64,
|
||||
grandpa_pause: Option<(u32, u32)>,
|
||||
informant_prefix: Option<String>,
|
||||
) -> Result<(
|
||||
impl AbstractService,
|
||||
Arc<impl PolkadotClient<
|
||||
@@ -718,7 +713,6 @@ pub fn kusama_new_full(
|
||||
grandpa_pause,
|
||||
kusama_runtime::RuntimeApi,
|
||||
KusamaExecutor,
|
||||
informant_prefix,
|
||||
);
|
||||
|
||||
Ok((service, client, handles))
|
||||
@@ -733,7 +727,6 @@ pub fn westend_new_full(
|
||||
authority_discovery_enabled: bool,
|
||||
slot_duration: u64,
|
||||
grandpa_pause: Option<(u32, u32)>,
|
||||
informant_prefix: Option<String>,
|
||||
)
|
||||
-> Result<(
|
||||
impl AbstractService,
|
||||
@@ -754,7 +747,6 @@ pub fn westend_new_full(
|
||||
grandpa_pause,
|
||||
westend_runtime::RuntimeApi,
|
||||
WestendExecutor,
|
||||
informant_prefix,
|
||||
);
|
||||
|
||||
Ok((service, client, handles))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-statement-table"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "polkadot-validation"
|
||||
version = "0.8.11"
|
||||
version = "0.8.12"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
edition = "2018"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user