mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-18 10:41:01 +00:00
Traitify Runtime (#104)
* Factor out safe-mix and dispatch * Refactor dispatch into something more modular. * Fix wasm build. * Fix up timestamp * fix warnings. * Borked timestamp example * Fix build * Timestamp as skeleton for traity runtime. * New storage macro. * Dispatch module has traity API. * Move consensus module to new API * Refactoring and outer dispatch * Avoid unnecessary derives. * Abstract the low-level half of system. * nicer outer dispatch syntax. * Make runtime compile again (albeit in a heavily simplified state) * Reworking runtime and the upper levels of system. * Initial reworking of runtime: - Introduced executive module; - Introduced trait primitives module; - Provided an API endpoint. * Expose an additional function in system * Another couple of functions traitified in executive. * another function in executive traitified. * One more function traitified. * Finish traitifying executive! * Traitify session module. * Cleanups and ensure session gets run. * First part of traitification of staking module. * Bit more of staking traitified. * Additional stuff in staking. Fix up session. * Penultimate part of staking module. * Final part of staking (code) * Update demo runtime to include staking. * Final tweaks for staking integration. * Remove old runtime files. * Schedule staking. * Minor fixes * First bits of democracy. * Democracy module integrated. * Fix warning. * Traitify and integrate council module * Council voting. * Runtime binary and tweaks. * Binary update. * Fix `*Type` grumble. * Fix up genesis_map * Remove NonTrivialSlicable * Staking "test externalities" stuff along with refactor. * Add session test externalities constructor * Fixed executor tests. * Make one test in executive module work. * Remove test framework stuff into common module. * Enable other tests in executive * Session tests reinstated, minor refactoring of keyring. * Fix staking tests. * Fix up democracy tests. * First few tests in council. * Council tests reinstated :) * Avoid hardcoding blake2 into Header. * Fix last few tests. * Make all primitives generic. * Fix tests. * Refactor runtime to remove genesismap. * Streamline runtime more with macrofied config. * Clean paths * Fix warning. * Consolidate demo runtime crate. * Remove stale code. * Refactor away dodgy trait. * Add corresponding Aux type. * Fixes * Rename Digesty -> Digest * Rename Headery -> Header * Blocky -> Block * Fix wasm build. * kill warnings * more docs * minor cleanups
This commit is contained in:
@@ -12,7 +12,7 @@ log = "0.3"
|
|||||||
hex-literal = "0.1"
|
hex-literal = "0.1"
|
||||||
triehash = "0.1"
|
triehash = "0.1"
|
||||||
ed25519 = { path = "../../substrate/ed25519" }
|
ed25519 = { path = "../../substrate/ed25519" }
|
||||||
app_dirs = "1.2"
|
app_dirs = "1.2.1"
|
||||||
substrate-client = { path = "../../substrate/client" }
|
substrate-client = { path = "../../substrate/client" }
|
||||||
substrate-codec = { path = "../../substrate/codec" }
|
substrate-codec = { path = "../../substrate/codec" }
|
||||||
substrate-runtime-io = { path = "../../substrate/runtime-io" }
|
substrate-runtime-io = { path = "../../substrate/runtime-io" }
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ polkadot-transaction-pool = { path = "../transaction-pool" }
|
|||||||
substrate-bft = { path = "../../substrate/bft" }
|
substrate-bft = { path = "../../substrate/bft" }
|
||||||
substrate-codec = { path = "../../substrate/codec" }
|
substrate-codec = { path = "../../substrate/codec" }
|
||||||
substrate-primitives = { path = "../../substrate/primitives" }
|
substrate-primitives = { path = "../../substrate/primitives" }
|
||||||
|
substrate-runtime-support = { path = "../../substrate/runtime-support" }
|
||||||
substrate-network = { path = "../../substrate/network" }
|
substrate-network = { path = "../../substrate/network" }
|
||||||
|
|
||||||
tokio-core = "0.1.12"
|
tokio-core = "0.1.12"
|
||||||
substrate-keyring = { path = "../../substrate/keyring" }
|
substrate-keyring = { path = "../../substrate/keyring" }
|
||||||
substrate-client = { path = "../../substrate/client" }
|
substrate-client = { path = "../../substrate/client" }
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ extern crate polkadot_transaction_pool as transaction_pool;
|
|||||||
extern crate substrate_bft as bft;
|
extern crate substrate_bft as bft;
|
||||||
extern crate substrate_codec as codec;
|
extern crate substrate_codec as codec;
|
||||||
extern crate substrate_primitives as primitives;
|
extern crate substrate_primitives as primitives;
|
||||||
|
extern crate substrate_runtime_support as runtime_support;
|
||||||
extern crate substrate_network;
|
extern crate substrate_network;
|
||||||
|
|
||||||
extern crate tokio_core;
|
extern crate tokio_core;
|
||||||
@@ -58,6 +59,7 @@ use std::sync::Arc;
|
|||||||
use codec::Slicable;
|
use codec::Slicable;
|
||||||
use table::{Table, Context as TableContextTrait};
|
use table::{Table, Context as TableContextTrait};
|
||||||
use table::generic::Statement as GenericStatement;
|
use table::generic::Statement as GenericStatement;
|
||||||
|
use runtime_support::Hashable;
|
||||||
use polkadot_api::{PolkadotApi, BlockBuilder};
|
use polkadot_api::{PolkadotApi, BlockBuilder};
|
||||||
use polkadot_primitives::{Hash, Timestamp};
|
use polkadot_primitives::{Hash, Timestamp};
|
||||||
use polkadot_primitives::block::Block as PolkadotBlock;
|
use polkadot_primitives::block::Block as PolkadotBlock;
|
||||||
@@ -480,7 +482,7 @@ impl<C: PolkadotApi, N: Network> bft::ProposerFactory for ProposerFactory<C, N>
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn init(&self, parent_header: &SubstrateHeader, authorities: &[AuthorityId], sign_with: Arc<ed25519::Pair>) -> Result<Self::Proposer, Error> {
|
fn init(&self, parent_header: &SubstrateHeader, authorities: &[AuthorityId], sign_with: Arc<ed25519::Pair>) -> Result<Self::Proposer, Error> {
|
||||||
let parent_hash = parent_header.hash();
|
let parent_hash = parent_header.blake2_256().into();
|
||||||
|
|
||||||
let checked_id = self.client.check_id(BlockId::Hash(parent_hash))?;
|
let checked_id = self.client.check_id(BlockId::Hash(parent_hash))?;
|
||||||
let duty_roster = self.client.duty_roster(&checked_id)?;
|
let duty_roster = self.client.duty_roster(&checked_id)?;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ use parking_lot::Mutex;
|
|||||||
use substrate_network as net;
|
use substrate_network as net;
|
||||||
use tokio_core::reactor;
|
use tokio_core::reactor;
|
||||||
use client::BlockchainEvents;
|
use client::BlockchainEvents;
|
||||||
|
use runtime_support::Hashable;
|
||||||
use primitives::{Hash, AuthorityId};
|
use primitives::{Hash, AuthorityId};
|
||||||
use primitives::block::{Id as BlockId, HeaderHash, Header};
|
use primitives::block::{Id as BlockId, HeaderHash, Header};
|
||||||
use polkadot_primitives::parachain::{BlockData, Extrinsic, CandidateReceipt};
|
use polkadot_primitives::parachain::{BlockData, Extrinsic, CandidateReceipt};
|
||||||
@@ -154,7 +155,7 @@ impl Service {
|
|||||||
};
|
};
|
||||||
let bft_service = BftService::new(client.clone(), key, factory);
|
let bft_service = BftService::new(client.clone(), key, factory);
|
||||||
let build_bft = |header: &Header| -> Result<_, Error> {
|
let build_bft = |header: &Header| -> Result<_, Error> {
|
||||||
let hash = header.hash();
|
let hash = header.blake2_256().into();
|
||||||
let authorities = client.authorities(&BlockId::Hash(hash))?;
|
let authorities = client.authorities(&BlockId::Hash(hash))?;
|
||||||
let input = network.bft_messages()
|
let input = network.bft_messages()
|
||||||
.filter_map(move |message| {
|
.filter_map(move |message| {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ impl Slicable for Log {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::codec::NonTrivialSlicable for Log { }
|
|
||||||
|
|
||||||
/// The digest of a block, useful for light-clients.
|
/// The digest of a block, useful for light-clients.
|
||||||
#[derive(Clone, Default, PartialEq, Eq)]
|
#[derive(Clone, Default, PartialEq, Eq)]
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
use primitives::bytes;
|
use primitives::bytes;
|
||||||
use primitives;
|
use primitives;
|
||||||
use codec::{Input, Slicable, NonTrivialSlicable};
|
use codec::{Input, Slicable};
|
||||||
use rstd::cmp::{PartialOrd, Ord, Ordering};
|
use rstd::cmp::{PartialOrd, Ord, Ordering};
|
||||||
use rstd::vec::Vec;
|
use rstd::vec::Vec;
|
||||||
use ::Hash;
|
use ::Hash;
|
||||||
@@ -59,7 +59,7 @@ pub enum Chain {
|
|||||||
|
|
||||||
impl Slicable for Chain {
|
impl Slicable for Chain {
|
||||||
fn decode<I: Input>(input: &mut I) -> Option<Self> {
|
fn decode<I: Input>(input: &mut I) -> Option<Self> {
|
||||||
let disc = try_opt!(u8::decode(input));
|
let disc = input.read_byte()?;
|
||||||
|
|
||||||
match disc {
|
match disc {
|
||||||
0 => Some(Chain::Relay),
|
0 => Some(Chain::Relay),
|
||||||
@@ -71,9 +71,9 @@ impl Slicable for Chain {
|
|||||||
fn encode(&self) -> Vec<u8> {
|
fn encode(&self) -> Vec<u8> {
|
||||||
let mut v = Vec::new();
|
let mut v = Vec::new();
|
||||||
match *self {
|
match *self {
|
||||||
Chain::Relay => { 0u8.using_encoded(|s| v.extend(s)); }
|
Chain::Relay => { v.push(0); }
|
||||||
Chain::Parachain(id) => {
|
Chain::Parachain(id) => {
|
||||||
1u8.using_encoded(|s| v.extend(s));
|
v.push(1u8);
|
||||||
id.using_encoded(|s| v.extend(s));
|
id.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,7 +86,7 @@ impl Slicable for Chain {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NonTrivialSlicable for Chain { }
|
|
||||||
|
|
||||||
/// The duty roster specifying what jobs each validator must do.
|
/// The duty roster specifying what jobs each validator must do.
|
||||||
#[derive(Clone, PartialEq)]
|
#[derive(Clone, PartialEq)]
|
||||||
@@ -317,7 +317,7 @@ impl Slicable for Statement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn decode<I: Input>(value: &mut I) -> Option<Self> {
|
fn decode<I: Input>(value: &mut I) -> Option<Self> {
|
||||||
match u8::decode(value) {
|
match value.read_byte() {
|
||||||
Some(x) if x == StatementKind::Candidate as u8 => {
|
Some(x) if x == StatementKind::Candidate as u8 => {
|
||||||
Slicable::decode(value).map(Statement::Candidate)
|
Slicable::decode(value).map(Statement::Candidate)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ pub enum Proposal {
|
|||||||
|
|
||||||
impl Slicable for Proposal {
|
impl Slicable for Proposal {
|
||||||
fn decode<I: Input>(input: &mut I) -> Option<Self> {
|
fn decode<I: Input>(input: &mut I) -> Option<Self> {
|
||||||
let id = try_opt!(u8::decode(input).and_then(InternalFunctionId::from_u8));
|
let id = InternalFunctionId::from_u8(input.read_byte()?)?;
|
||||||
let function = match id {
|
let function = match id {
|
||||||
InternalFunctionId::SystemSetCode =>
|
InternalFunctionId::SystemSetCode =>
|
||||||
Proposal::SystemSetCode(try_opt!(Slicable::decode(input))),
|
Proposal::SystemSetCode(try_opt!(Slicable::decode(input))),
|
||||||
@@ -119,33 +119,33 @@ impl Slicable for Proposal {
|
|||||||
let mut v = Vec::new();
|
let mut v = Vec::new();
|
||||||
match *self {
|
match *self {
|
||||||
Proposal::SystemSetCode(ref data) => {
|
Proposal::SystemSetCode(ref data) => {
|
||||||
(InternalFunctionId::SystemSetCode as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::SystemSetCode as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Proposal::SessionSetLength(ref data) => {
|
Proposal::SessionSetLength(ref data) => {
|
||||||
(InternalFunctionId::SessionSetLength as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::SessionSetLength as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Proposal::SessionForceNewSession => {
|
Proposal::SessionForceNewSession => {
|
||||||
(InternalFunctionId::SessionForceNewSession as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::SessionForceNewSession as u8);
|
||||||
}
|
}
|
||||||
Proposal::StakingSetSessionsPerEra(ref data) => {
|
Proposal::StakingSetSessionsPerEra(ref data) => {
|
||||||
(InternalFunctionId::StakingSetSessionsPerEra as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::StakingSetSessionsPerEra as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Proposal::StakingSetBondingDuration(ref data) => {
|
Proposal::StakingSetBondingDuration(ref data) => {
|
||||||
(InternalFunctionId::StakingSetBondingDuration as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::StakingSetBondingDuration as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Proposal::StakingSetValidatorCount(ref data) => {
|
Proposal::StakingSetValidatorCount(ref data) => {
|
||||||
(InternalFunctionId::StakingSetValidatorCount as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::StakingSetValidatorCount as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Proposal::StakingForceNewEra => {
|
Proposal::StakingForceNewEra => {
|
||||||
(InternalFunctionId::StakingForceNewEra as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::StakingForceNewEra as u8);
|
||||||
}
|
}
|
||||||
Proposal::GovernanceSetApprovalPpmRequired(ref data) => {
|
Proposal::GovernanceSetApprovalPpmRequired(ref data) => {
|
||||||
(InternalFunctionId::GovernanceSetApprovalPpmRequired as u8).using_encoded(|s| v.extend(s));
|
v.push(InternalFunctionId::GovernanceSetApprovalPpmRequired as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -267,7 +267,7 @@ impl Function {
|
|||||||
|
|
||||||
impl Slicable for Function {
|
impl Slicable for Function {
|
||||||
fn decode<I: Input>(input: &mut I) -> Option<Self> {
|
fn decode<I: Input>(input: &mut I) -> Option<Self> {
|
||||||
let id = try_opt!(u8::decode(input).and_then(FunctionId::from_u8));
|
let id = FunctionId::from_u8(input.read_byte()?)?;
|
||||||
Some(match id {
|
Some(match id {
|
||||||
FunctionId::TimestampSet =>
|
FunctionId::TimestampSet =>
|
||||||
Function::Inherent(InherentFunction::TimestampSet(try_opt!(Slicable::decode(input)))),
|
Function::Inherent(InherentFunction::TimestampSet(try_opt!(Slicable::decode(input)))),
|
||||||
@@ -293,34 +293,34 @@ impl Slicable for Function {
|
|||||||
let mut v = Vec::new();
|
let mut v = Vec::new();
|
||||||
match *self {
|
match *self {
|
||||||
Function::Inherent(InherentFunction::TimestampSet(ref data)) => {
|
Function::Inherent(InherentFunction::TimestampSet(ref data)) => {
|
||||||
(FunctionId::TimestampSet as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::TimestampSet as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Function::SessionSetKey(ref data) => {
|
Function::SessionSetKey(ref data) => {
|
||||||
(FunctionId::SessionSetKey as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::SessionSetKey as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Function::StakingStake => {
|
Function::StakingStake => {
|
||||||
(FunctionId::StakingStake as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::StakingStake as u8);
|
||||||
}
|
}
|
||||||
Function::StakingUnstake => {
|
Function::StakingUnstake => {
|
||||||
(FunctionId::StakingUnstake as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::StakingUnstake as u8);
|
||||||
}
|
}
|
||||||
Function::ReportMisbehavior(ref report) => {
|
Function::ReportMisbehavior(ref report) => {
|
||||||
(FunctionId::StakingReportMisbehavior as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::StakingReportMisbehavior as u8);
|
||||||
report.using_encoded(|s| v.extend(s));
|
report.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Function::StakingTransfer(ref to, ref amount) => {
|
Function::StakingTransfer(ref to, ref amount) => {
|
||||||
(FunctionId::StakingTransfer as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::StakingTransfer as u8);
|
||||||
to.using_encoded(|s| v.extend(s));
|
to.using_encoded(|s| v.extend(s));
|
||||||
amount.using_encoded(|s| v.extend(s));
|
amount.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Function::GovernancePropose(ref data) => {
|
Function::GovernancePropose(ref data) => {
|
||||||
(FunctionId::GovernancePropose as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::GovernancePropose as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
Function::GovernanceApprove(ref data) => {
|
Function::GovernanceApprove(ref data) => {
|
||||||
(FunctionId::GovernanceApprove as u8).using_encoded(|s| v.extend(s));
|
v.push(FunctionId::GovernanceApprove as u8);
|
||||||
data.using_encoded(|s| v.extend(s));
|
data.using_encoded(|s| v.extend(s));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -365,7 +365,7 @@ impl Slicable for Transaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::codec::NonTrivialSlicable for Transaction {}
|
|
||||||
|
|
||||||
/// A transactions right from the external world. Unchecked.
|
/// A transactions right from the external world. Unchecked.
|
||||||
#[derive(Eq, Clone)]
|
#[derive(Eq, Clone)]
|
||||||
@@ -441,7 +441,7 @@ impl Slicable for UncheckedTransaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::codec::NonTrivialSlicable for UncheckedTransaction {}
|
|
||||||
|
|
||||||
impl PartialEq for UncheckedTransaction {
|
impl PartialEq for UncheckedTransaction {
|
||||||
fn eq(&self, other: &Self) -> bool {
|
fn eq(&self, other: &Self) -> bool {
|
||||||
|
|||||||
Generated
+2
-1
@@ -654,8 +654,9 @@ name = "substrate-runtime-support"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ed25519 0.1.0",
|
"ed25519 0.1.0",
|
||||||
"environmental 0.1.0",
|
|
||||||
"hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"substrate-codec 0.1.0",
|
"substrate-codec 0.1.0",
|
||||||
"substrate-primitives 0.1.0",
|
"substrate-primitives 0.1.0",
|
||||||
"substrate-runtime-io 0.1.0",
|
"substrate-runtime-io 0.1.0",
|
||||||
|
|||||||
BIN
Binary file not shown.
Executable → Regular
BIN
Binary file not shown.
Reference in New Issue
Block a user