Fix Polkadot and Kusama ‘SessionKey’ structs

I had failed to include the ‘Parachains’ component, which the default
Substrate runtime doesn’t have.
This commit is contained in:
Demi M. Obenour
2020-06-08 22:38:56 -04:00
parent 7587469c53
commit 06bc4ab977
2 changed files with 52 additions and 16 deletions
+19 -14
View File
@@ -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"] }
+33 -2
View File
@@ -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 = <Self as System>::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<<Self as Balances>::Balance>;
}
#[cfg(feature = "kusama")]
impl Session for KusamaRuntime {
type SessionIndex = u32;
type ValidatorId = <Self as System>::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;
}