Implement set_keys

This is needed for Ledgeracio.
This commit is contained in:
Demi M. Obenour
2020-06-03 00:49:55 -04:00
parent 57e2390a71
commit 067c6f9c74
4 changed files with 67 additions and 1 deletions
+16
View File
@@ -22,6 +22,10 @@ use crate::frame::system::{
};
use codec::Encode;
use frame_support::Parameter;
use sp_runtime::traits::{
Member,
OpaqueKeys,
};
use std::{
fmt::Debug,
marker::PhantomData,
@@ -36,6 +40,9 @@ pub trait Session: System {
/// The validator account identifier type for the runtime.
type SessionIndex: Parameter + Debug + Ord + Default + Send + Sync + 'static;
/// The keys.
type Keys: OpaqueKeys + Member + Parameter + Default;
}
/// The current set of validators.
@@ -62,3 +69,12 @@ pub struct QueuedChangedStore<T: Session> {
/// Marker for the runtime
pub _runtime: PhantomData<T>,
}
/// The current set of validators.
#[derive(Encode, Call)]
pub struct SetKeysCall<T: Session> {
/// The keys
pub keys: T::Keys,
/// The proof. This is not currently used and can be set to an empty vector.
pub proof: Vec<u8>,
}
-1
View File
@@ -21,7 +21,6 @@
bad_style,
const_err,
improper_ctypes,
missing_docs,
non_shorthand_field_patterns,
no_mangle_generic_items,
overflowing_literals,
+46
View File
@@ -13,9 +13,12 @@
//
// You should have received a copy of the GNU General Public License
// along with substrate-subxt. If not, see <http://www.gnu.org/licenses/>.
#![allow(missing_docs)]
use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
use sp_runtime::{
generic::Header,
impl_opaque_keys,
traits::{
BlakeTwo256,
IdentifyAccount,
@@ -24,6 +27,47 @@ use sp_runtime::{
MultiSignature,
OpaqueExtrinsic,
};
use sp_std::prelude::*;
/// BABE marker struct
pub struct Babe;
impl sp_runtime::BoundToRuntimeAppPublic for Babe {
type Public = sp_consensus_babe::AuthorityId;
}
/// ImOnline marker struct
pub struct ImOnline;
impl sp_runtime::BoundToRuntimeAppPublic for ImOnline {
type Public = ImOnlineId;
}
/// GRANDPA marker struct
pub struct Grandpa;
impl sp_runtime::BoundToRuntimeAppPublic for Grandpa {
type Public = sp_finality_grandpa::AuthorityId;
}
use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
/// Authority discovery marker struct
pub struct AuthorityDiscovery;
impl sp_runtime::BoundToRuntimeAppPublic for AuthorityDiscovery {
type Public = AuthorityDiscoveryId;
}
impl_opaque_keys! {
/// Runtime keys
pub struct SessionKeys {
//// GRANDPA session key
pub grandpa: Grandpa,
//// BABE session key
pub babe: Babe,
//// ImOnline session key
pub im_online: ImOnline,
//// AuthorityDiscovery session key
pub authority_discovery: AuthorityDiscovery,
}
}
use crate::frame::{
balances::{
@@ -73,6 +117,7 @@ impl Balances for DefaultNodeRuntime {
impl Session for DefaultNodeRuntime {
type SessionIndex = u32;
type ValidatorId = <Self as System>::AccountId;
type Keys = SessionKeys;
}
impl Contracts for DefaultNodeRuntime {}
@@ -101,6 +146,7 @@ impl System for KusamaRuntime {
impl Session for KusamaRuntime {
type SessionIndex = u32;
type ValidatorId = <Self as System>::AccountId;
type Keys = SessionKeys;
}
impl Staking for KusamaRuntime {