Update to latest substrate-master and polkadot v0.3 (#195)

* Rebuild runtime

* Remove invalid value from chainspec (#68)

* service: use grandpa block import for locally sealed aura blocks (#85)

* bump version to v0.3.1

* Update lock file.

* limit number of transactions when building blocks (#91)

* Update to latest Substrate

* Bump to 0.3.2

* Actually bump.

* v0.3.2 (#98)

* bump substrate version

* fix polkadot-collator

* point to alexander-backports of substrate

* bump version

* cli: fix node shutdown (#100)

* update to latest substrate, change to v0.3.4

* update to latest substrate, bump version to 0.3.5

* v0.3.6

* try to build on every v0.3 commit and update alexander-backports

* bump to v0.3.7

* bump to 0.3.8

* Bump to 0.3.9: network and pruning improvements

* Bump to 0.3.10: reduce network bandwidth usage

* Use libp2p-kad 0.3.2 (#122)

* Bump libp2p-identify to 0.3.1 (#123)

* Bump to 0.3.12 (#127)

* Update Substrate again (#128)

* update substrate and bump version to v0.3.13

* bump version to v0.3.14: fix --reserved-nodes

* add a manually curated grandpa module (#136)

* updating v0.3 to use substrate v0.10 (#146)

* updating to latest substrate v0.10

* better handling of outer poll

* nit

* fix tests

* remove comment

* reduce indentation

* use self.poll

* bring oneshot into scope

* spaces

* wrap

* remove match

* wrap

* Update primitives/Cargo.toml

Co-Authored-By: gterzian <2792687+gterzian@users.noreply.github.com>

* Update runtime/wasm/Cargo.toml

Co-Authored-By: gterzian <2792687+gterzian@users.noreply.github.com>

* Update runtime/wasm/Cargo.toml

Co-Authored-By: gterzian <2792687+gterzian@users.noreply.github.com>

* Update test-parachains/adder/collator/src/main.rs

Co-Authored-By: gterzian <2792687+gterzian@users.noreply.github.com>

* indent

* add paranthese

* config: fix wrong ip for alexander bootnode (#161)

* fix curated-grandpa and rebuild wasm (#162)

* [v0.3] Integrates new gossip system into Polkadot (#166)

* new gossip validation in network

* integrate new gossip into service

* network: guard validation network future under exit signal (#168)

* bump version to v0.3.15: substrate v0.10

* [v0.3] update to substrate master (#175)

* update to substrate master

* fix test

* service: fix telemetry endpoints on alexander chainspec (#169) (#178)

* Update v0.3 to latest Substrate master (#177)

* update substrate v0.3 to latest master

* bump spec version

* update to latest master: remove fees module

* update runtime blobs

* bump version to 0.3.16

* replace sr25519 accountid with anysigner

* bump version to v0.3.17

* Some PoC-3 GRANDPA tweaks (#181)

* call on_finalise after triggering curated_grandpa change

* make grandpa rounds shorter for faster finalization

* use authorities when calculating duty roster (#185)

* [v0.3] Update to substrate master (#183)

* update to latest substrate master

* bump version to 0.3.18

* update to latest substrate master

* bump spec version

* update runtime wasm blobs

* remove current_offline_slash from chain spec

* update to substrate master: bump version to v0.3.19 (#188)

* update to substrate master: bump version to v0.3.19

libp2p network improvements

* network: replace NodeIndex with PeerId

* network: fix tests

* polkadot v0.3.20 (#190)

* update to substrate master: bump version to 0.3.20

* runtime: add offchain worker trait

* runtime: rebuild wasm blobs

* bump spec version (#191)

* Fix compilation

* Update version to 0.4.0

* Switch to use `polkadot-master` branch from substrate

* Remove unused struct

* Remove `grandpa::SyncedAuthorities` from `OnSessionChange`
This commit is contained in:
Bastian Köcher
2019-03-28 15:20:40 +01:00
committed by Robert Habermeier
parent 5606afd886
commit 7e2714f843
37 changed files with 2752 additions and 1760 deletions
+7 -5
View File
@@ -19,20 +19,20 @@
use rstd::prelude::*;
use sr_io::{keccak_256, secp256k1_ecdsa_recover};
use srml_support::{StorageValue, StorageMap};
use srml_support::traits::{Currency, ArithmeticType};
use srml_support::traits::Currency;
use system::ensure_signed;
use codec::Encode;
#[cfg(feature = "std")]
use sr_primitives::traits::Zero;
use system;
type BalanceOf<T> = <<T as Trait>::Currency as ArithmeticType>::Type;
type BalanceOf<T> = <<T as Trait>::Currency as Currency<<T as system::Trait>::AccountId>>::Balance;
/// Configuration trait.
pub trait Trait: system::Trait {
/// The overarching event type.
type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
type Currency: ArithmeticType + Currency<Self::AccountId, Balance=BalanceOf<Self>>;
type Currency: Currency<Self::AccountId>;
}
type EthereumAddress = [u8; 20];
@@ -59,7 +59,6 @@ impl EcdsaSignature {
}
}
/// An event in this module.
decl_event!(
pub enum Event<T> where
B = BalanceOf<T>,
@@ -135,7 +134,7 @@ decl_module! {
*t -= balance_due
});
T::Currency::increase_free_balance_creating(&sender, balance_due);
T::Currency::deposit_creating(&sender, balance_due);
// Let's deposit an event to let the outside world know this happened.
Self::deposit_event(RawEvent::Claimed(sender, signer, balance_due));
@@ -186,6 +185,9 @@ mod tests {
type OnFreeBalanceZero = ();
type OnNewAccount = ();
type Event = ();
type TransactionPayment = ();
type DustRemoval = ();
type TransferPayment = ();
}
impl Trait for Test {
type Event = ();
+85
View File
@@ -0,0 +1,85 @@
// Copyright 2017 Parity Technologies (UK) Ltd.
// This file is part of Polkadot.
// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
//! A module for manually curated GRANDPA set.
use {grandpa, system};
use codec::Decode;
use sr_primitives::traits::{As, Hash as HashT, BlakeTwo256, Zero};
use rstd::prelude::*;
pub trait Trait: grandpa::Trait {}
decl_storage! {
trait Store for Module<T: Trait> as CuratedGrandpa {
/// How often to shuffle the GRANDPA sets.
///
/// 0 means never.
pub ShufflePeriod get(shuffle_period) config(shuffle_period): T::BlockNumber;
}
}
decl_module! {
/// curated GRANDPA set.
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
/// Changes the GRANDPA voter set.
fn set_voters(origin, voters: Vec<(T::SessionKey, u64)>) {
system::ensure_root(origin)?;
grandpa::Module::<T>::schedule_change(voters, T::BlockNumber::zero(), None)?;
}
fn on_finalise(block_number: T::BlockNumber) {
// every so often shuffle the voters and issue a change.
let shuffle_period: u64 = Self::shuffle_period().as_();
if shuffle_period == 0 { return }
if block_number.as_() % shuffle_period == 0 {
let mut seed = system::Module::<T>::random_seed().as_ref().to_vec();
seed.extend(b"grandpa_shuffling");
let mut seed = BlakeTwo256::hash(&seed);
let mut voters = grandpa::Module::<T>::grandpa_authorities();
let voter_count = voters.len();
if voter_count == 0 { return }
for i in 0..(voter_count - 1) {
// 4 bytes of entropy used per cycle, 32 bytes entropy per hash
let offset = (i * 4 % 32) as usize;
// number of roles remaining to select from.
let remaining = (voter_count - i) as usize;
// 8 32-bit ints per 256-bit seed.
let voter_index = u32::decode(&mut &seed[offset..offset + 4]).expect("using 4 bytes for a 32-bit quantity") as usize % remaining;
if offset == 28 {
// into the last 4 bytes - rehash to gather new entropy
seed = BlakeTwo256::hash(seed.as_ref());
}
// exchange last item with randomly chosen first.
voters.swap(remaining - 1, voter_index);
}
// finalisation order is undefined, so grandpa's on_finalise might
// have already been called. calling it again is OK though.
let _ = grandpa::Module::<T>::schedule_change(voters, T::BlockNumber::zero(), None);
grandpa::Module::<T>::on_finalise(block_number);
}
}
}
}
+29 -22
View File
@@ -37,6 +37,7 @@ extern crate parity_codec as codec;
extern crate substrate_consensus_aura_primitives as consensus_aura;
extern crate substrate_primitives;
extern crate substrate_inherents as inherents;
extern crate substrate_offchain_primitives as offchain_primitives;
#[macro_use]
extern crate substrate_client as client;
@@ -62,7 +63,6 @@ extern crate srml_sudo as sudo;
extern crate srml_system as system;
extern crate srml_timestamp as timestamp;
extern crate srml_treasury as treasury;
extern crate srml_fees as fees;
extern crate polkadot_primitives as primitives;
@@ -72,14 +72,15 @@ extern crate substrate_keyring as keyring;
#[cfg(test)]
extern crate substrate_trie;
mod curated_grandpa;
mod parachains;
mod claims;
use rstd::prelude::*;
use substrate_primitives::u32_trait::{_2, _4};
use primitives::{
AccountId, AccountIndex, Balance, BlockNumber, Hash, Nonce, SessionKey, SessionSignature,
Signature, parachain,
AccountId, AccountIndex, Balance, BlockNumber, Hash, Nonce, SessionKey, Signature,
parachain, SessionSignature,
};
use client::{
block_builder::api::{self as block_builder_api, InherentData, CheckInherentsResult},
@@ -115,8 +116,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
spec_name: create_runtime_str!("polkadot"),
impl_name: create_runtime_str!("parity-polkadot"),
authoring_version: 1,
spec_version: 107,
impl_version: 1,
spec_version: 108,
impl_version: 0,
apis: RUNTIME_API_VERSIONS,
};
@@ -159,6 +160,9 @@ impl balances::Trait for Runtime {
type OnFreeBalanceZero = Staking;
type OnNewAccount = Indices;
type Event = Event;
type TransactionPayment = ();
type DustRemoval = ();
type TransferPayment = ();
}
impl consensus::Trait for Runtime {
@@ -177,24 +181,28 @@ impl timestamp::Trait for Runtime {
impl session::Trait for Runtime {
type ConvertAccountIdToSessionKey = ();
type OnSessionChange = (Staking, grandpa::SyncedAuthorities<Runtime>);
type OnSessionChange = Staking;
type Event = Event;
}
impl staking::Trait for Runtime {
type Currency = Balances;
type OnRewardMinted = Treasury;
type Event = Event;
type Currency = balances::Module<Self>;
type Slash = ();
type Reward = ();
}
impl democracy::Trait for Runtime {
type Currency = Balances;
type Currency = balances::Module<Self>;
type Proposal = Call;
type Event = Event;
}
impl council::Trait for Runtime {
type Event = Event;
type BadPresentation = ();
type BadReaper = ();
}
impl council::voting::Trait for Runtime {
@@ -208,10 +216,12 @@ impl council::motions::Trait for Runtime {
}
impl treasury::Trait for Runtime {
type Currency = Balances;
type Currency = balances::Module<Self>;
type ApproveOrigin = council_motions::EnsureMembers<_4>;
type RejectOrigin = council_motions::EnsureMembers<_2>;
type Event = Event;
type MintedForSpending = ();
type ProposalRejection = ();
}
impl grandpa::Trait for Runtime {
@@ -222,21 +232,13 @@ impl grandpa::Trait for Runtime {
impl parachains::Trait for Runtime {}
impl curated_grandpa::Trait for Runtime { }
impl sudo::Trait for Runtime {
type Event = Event;
type Proposal = Call;
}
impl claims::Trait for Runtime {
type Event = Event;
type Currency = Balances;
}
impl fees::Trait for Runtime {
type Event = Event;
type TransferAsset = Balances;
}
construct_runtime!(
pub enum Runtime with Log(InternalLog: DigestItem<Hash, SessionKey, SessionSignature>) where
Block = Block,
@@ -254,6 +256,7 @@ construct_runtime!(
Staking: staking,
Democracy: democracy,
Grandpa: grandpa::{Module, Call, Storage, Config<T>, Log(), Event<T>},
CuratedGrandpa: curated_grandpa::{Module, Call, Config<T>, Storage},
Council: council::{Module, Call, Storage, Event<T>},
CouncilVoting: council_voting,
CouncilMotions: council_motions::{Module, Call, Storage, Event<T>, Origin},
@@ -261,8 +264,6 @@ construct_runtime!(
Treasury: treasury,
Parachains: parachains::{Module, Call, Storage, Config<T>, Inherent},
Sudo: sudo,
Claims: claims,
Fees: fees::{Module, Storage, Config<T>, Event<T>},
}
);
@@ -281,7 +282,7 @@ pub type UncheckedExtrinsic = generic::UncheckedMortalCompactExtrinsic<Address,
/// Extrinsic type that has already been checked.
pub type CheckedExtrinsic = generic::CheckedExtrinsic<AccountId, Nonce, Call>;
/// Executive: handles dispatch to the various modules.
pub type Executive = executive::Executive<Runtime, Block, system::ChainContext<Runtime>, Fees, AllModules>;
pub type Executive = executive::Executive<Runtime, Block, system::ChainContext<Runtime>, Balances, AllModules>;
impl_runtime_apis! {
impl client_api::Core<Block> for Runtime {
@@ -336,6 +337,12 @@ impl_runtime_apis! {
}
}
impl offchain_primitives::OffchainWorkerApi<Block> for Runtime {
fn offchain_worker(number: sr_primitives::traits::NumberFor<Block>) {
Executive::offchain_worker(number)
}
}
impl parachain::ParachainHost<Block> for Runtime {
fn validators() -> Vec<parachain::ValidatorId> {
Consensus::authorities() // only possible as long as parachain validator crypto === aura crypto
+6 -5
View File
@@ -478,8 +478,8 @@ mod tests {
#[derive(Clone, Eq, PartialEq)]
pub struct Test;
impl consensus::Trait for Test {
type SessionKey = SessionKey;
type InherentOfflineReport = ();
type SessionKey = SessionKey;
type Log = ::Log;
}
impl system::Trait for Test {
@@ -555,8 +555,8 @@ mod tests {
let candidate_hash = candidate.candidate.hash();
let authorities = ::Consensus::authorities();
let extract_key = |public: &SessionKey| {
AuthorityKeyring::from_public(public).unwrap()
let extract_key = |public: SessionKey| {
AuthorityKeyring::from_raw_public(public.0).unwrap()
};
let validation_entries = duty_roster.validator_duty.iter()
@@ -566,7 +566,7 @@ mod tests {
if duty != Chain::Parachain(candidate.parachain_index()) { continue }
vote_implicit = !vote_implicit;
let key = extract_key(&authorities[idx]);
let key = extract_key(authorities[idx].clone());
let statement = if vote_implicit {
Statement::Candidate(candidate.candidate.clone())
@@ -694,7 +694,8 @@ mod tests {
egress_queue_roots: vec![],
fees: 0,
block_data_hash: Default::default(),
}
},
};
assert!(Parachains::dispatch(Call::set_heads(vec![candidate]), Origin::INHERENT).is_err());