From 06bc4ab97751802695b738b59f84f2d87f9ace97 Mon Sep 17 00:00:00 2001 From: "Demi M. Obenour" Date: Mon, 8 Jun 2020 22:38:56 -0400 Subject: [PATCH] =?UTF-8?q?Fix=20Polkadot=20and=20Kusama=20=E2=80=98Sessio?= =?UTF-8?q?nKey=E2=80=99=20structs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I had failed to include the ‘Parachains’ component, which the default Substrate runtime doesn’t have. --- Cargo.toml | 33 +++++++++++++++++++-------------- src/runtimes.rs | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 8ab63c2956..754341d47a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,10 @@ description = "Submit extrinsics (transactions) to a substrate node via RPC" keywords = ["parity", "substrate", "blockchain"] include = ["Cargo.toml", "src/**/*.rs", "README.md", "LICENSE"] +[features] +default = ["kusama"] +kusama = ["polkadot"] + [dependencies] log = "0.4" thiserror = "1.0" @@ -27,22 +31,23 @@ serde_json = "1.0" url = "2.1" codec = { package = "parity-scale-codec", version = "1.3", default-features = false, features = ["derive", "full"] } -frame-metadata = { version = "11.0.0-rc2", package = "frame-metadata" } -frame-support = { version = "2.0.0-rc2", package = "frame-support" } -sp-runtime = { version = "2.0.0-rc2", package = "sp-runtime" } -sp-version = { version = "2.0.0-rc2", package = "sp-version" } -pallet-indices = { version = "2.0.0-rc2", package = "pallet-indices" } +frame-metadata = { git = "https://github.com/paritytech/substrate", branch = "master" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "master" } +pallet-indices = { git = "https://github.com/paritytech/substrate", branch = "master" } hex = "0.4.0" -sp-rpc = { version = "2.0.0-rc2", package = "sp-rpc" } -sp-core = { version = "2.0.0-rc2", package = "sp-core" } -sc-rpc-api = { version = "0.8.0-rc2", package = "sc-rpc-api" } -sp-transaction-pool = { version = "2.0.0-rc2", package = "sp-transaction-pool" } +sp-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-subxt-proc-macro = { version = "0.8.0", path = "proc-macro" } -sp-std = "2.0.0-rc2" -sp-finality-grandpa = "2.0.0-rc2" -sp-consensus-babe = "0.8.0-rc2" -pallet-im-online = "2.0.0-rc2" -sp-authority-discovery = "2.0.0-rc2" +sp-std = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } +pallet-im-online = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } +polkadot = { git = "https://github.com/paritytech/polkadot", branch = "master", optional = true, default-features = false, features = ["std"], package = "polkadot-primitives" } [dev-dependencies] async-std = { version = "1.5.0", features = ["attributes"] } diff --git a/src/runtimes.rs b/src/runtimes.rs index 011897c5c2..146e1b794e 100644 --- a/src/runtimes.rs +++ b/src/runtimes.rs @@ -49,6 +49,13 @@ impl sp_runtime::BoundToRuntimeAppPublic for Grandpa { use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; +/// Parachain marker struct +#[cfg(feature = "kusama")] +pub struct Parachains; +impl sp_runtime::BoundToRuntimeAppPublic for Parachains { + type Public = polkadot::parachain::ValidatorId; +} + /// Authority discovery marker struct pub struct AuthorityDiscovery; impl sp_runtime::BoundToRuntimeAppPublic for AuthorityDiscovery { @@ -56,7 +63,24 @@ impl sp_runtime::BoundToRuntimeAppPublic for AuthorityDiscovery { } impl_opaque_keys! { - /// Runtime keys + /// Substrate base runtime keys + pub struct BasicSessionKeys { + //// GRANDPA session key + pub grandpa: Grandpa, + //// BABE session key + pub babe: Babe, + //// ImOnline session key + pub im_online: ImOnline, + //// Parachain validation session key + pub parachains: Parachains, + //// AuthorityDiscovery session key + pub authority_discovery: AuthorityDiscovery, + } +} + +#[cfg(feature = "kusama")] +impl_opaque_keys! { + /// Polkadot/Kusama runtime keys pub struct SessionKeys { //// GRANDPA session key pub grandpa: Grandpa, @@ -64,6 +88,8 @@ impl_opaque_keys! { pub babe: Babe, //// ImOnline session key pub im_online: ImOnline, + //// ParachainValidator session key + pub parachain_validator: Parachains, //// AuthorityDiscovery session key pub authority_discovery: AuthorityDiscovery, } @@ -117,7 +143,7 @@ impl Balances for DefaultNodeRuntime { impl Session for DefaultNodeRuntime { type SessionIndex = u32; type ValidatorId = ::AccountId; - type Keys = SessionKeys; + type Keys = BasicSessionKeys; } impl Contracts for DefaultNodeRuntime {} @@ -128,9 +154,11 @@ impl Contracts for DefaultNodeRuntime {} /// /// Main difference is `type Address = AccountId`. /// Also the contracts module is not part of the kusama runtime. +#[cfg(feature = "kusama")] #[derive(Debug, Clone, Eq, PartialEq)] pub struct KusamaRuntime; +#[cfg(feature = "kusama")] impl System for KusamaRuntime { type Index = u32; type BlockNumber = u32; @@ -143,12 +171,14 @@ impl System for KusamaRuntime { type AccountData = AccountData<::Balance>; } +#[cfg(feature = "kusama")] impl Session for KusamaRuntime { type SessionIndex = u32; type ValidatorId = ::AccountId; type Keys = SessionKeys; } +#[cfg(feature = "kusama")] impl Staking for KusamaRuntime { type NominatorIndex = u32; type ValidatorIndex = u16; @@ -158,6 +188,7 @@ impl Staking for KusamaRuntime { type RewardPoint = u32; } +#[cfg(feature = "kusama")] impl Balances for KusamaRuntime { type Balance = u128; }