Ensure any call to disable peer has a reason (#321)

* Fix warnings in libp2p

* Force a reason when you use the fatalist disable_peer

* Print more information

* Slightly more concise ref-fu

* Tracing for figuring out what's going into genesis

* Merge

* Fxi test
This commit is contained in:
Gav Wood
2018-07-15 23:30:53 +02:00
committed by GitHub
parent 1aeb2825af
commit c78478cf03
23 changed files with 131 additions and 124 deletions
+13 -14
View File
@@ -592,23 +592,22 @@ impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_storage(self) -> ::std::result::Result<runtime_io::TestExternalities, String> {
use codec::Encode;
use runtime_io::twox_128;
Ok(map![
twox_128(<CandidacyBond<T>>::key()).to_vec() => self.candidacy_bond.encode(),
twox_128(<VotingBond<T>>::key()).to_vec() => self.voter_bond.encode(),
twox_128(<PresentSlashPerVoter<T>>::key()).to_vec() => self.present_slash_per_voter.encode(),
twox_128(<CarryCount<T>>::key()).to_vec() => self.carry_count.encode(),
twox_128(<PresentationDuration<T>>::key()).to_vec() => self.presentation_duration.encode(),
twox_128(<VotingPeriod<T>>::key()).to_vec() => self.approval_voting_period.encode(),
twox_128(<TermDuration<T>>::key()).to_vec() => self.term_duration.encode(),
twox_128(<DesiredSeats<T>>::key()).to_vec() => self.desired_seats.encode(),
twox_128(<InactiveGracePeriod<T>>::key()).to_vec() => self.inactive_grace_period.encode(),
twox_128(<ActiveCouncil<T>>::key()).to_vec() => self.active_council.encode(),
Self::hash(<CandidacyBond<T>>::key()).to_vec() => self.candidacy_bond.encode(),
Self::hash(<VotingBond<T>>::key()).to_vec() => self.voter_bond.encode(),
Self::hash(<PresentSlashPerVoter<T>>::key()).to_vec() => self.present_slash_per_voter.encode(),
Self::hash(<CarryCount<T>>::key()).to_vec() => self.carry_count.encode(),
Self::hash(<PresentationDuration<T>>::key()).to_vec() => self.presentation_duration.encode(),
Self::hash(<VotingPeriod<T>>::key()).to_vec() => self.approval_voting_period.encode(),
Self::hash(<TermDuration<T>>::key()).to_vec() => self.term_duration.encode(),
Self::hash(<DesiredSeats<T>>::key()).to_vec() => self.desired_seats.encode(),
Self::hash(<InactiveGracePeriod<T>>::key()).to_vec() => self.inactive_grace_period.encode(),
Self::hash(<ActiveCouncil<T>>::key()).to_vec() => self.active_council.encode(),
twox_128(<voting::CooloffPeriod<T>>::key()).to_vec() => self.cooloff_period.encode(),
twox_128(<voting::VotingPeriod<T>>::key()).to_vec() => self.voting_period.encode(),
twox_128(<voting::Proposals<T>>::key()).to_vec() => vec![0u8; 0].encode()
Self::hash(<voting::CooloffPeriod<T>>::key()).to_vec() => self.cooloff_period.encode(),
Self::hash(<voting::VotingPeriod<T>>::key()).to_vec() => self.voting_period.encode(),
Self::hash(<voting::Proposals<T>>::key()).to_vec() => vec![0u8; 0].encode()
])
}
}
@@ -340,15 +340,14 @@ impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_storage(self) -> ::std::result::Result<runtime_io::TestExternalities, String> {
use codec::Encode;
use runtime_io::twox_128;
Ok(map![
twox_128(<LaunchPeriod<T>>::key()).to_vec() => self.launch_period.encode(),
twox_128(<VotingPeriod<T>>::key()).to_vec() => self.voting_period.encode(),
twox_128(<MinimumDeposit<T>>::key()).to_vec() => self.minimum_deposit.encode(),
twox_128(<ReferendumCount<T>>::key()).to_vec() => (0 as ReferendumIndex).encode(),
twox_128(<NextTally<T>>::key()).to_vec() => (0 as ReferendumIndex).encode(),
twox_128(<PublicPropCount<T>>::key()).to_vec() => (0 as PropIndex).encode()
Self::hash(<LaunchPeriod<T>>::key()).to_vec() => self.launch_period.encode(),
Self::hash(<VotingPeriod<T>>::key()).to_vec() => self.voting_period.encode(),
Self::hash(<MinimumDeposit<T>>::key()).to_vec() => self.minimum_deposit.encode(),
Self::hash(<ReferendumCount<T>>::key()).to_vec() => (0 as ReferendumIndex).encode(),
Self::hash(<NextTally<T>>::key()).to_vec() => (0 as ReferendumIndex).encode(),
Self::hash(<PublicPropCount<T>>::key()).to_vec() => (0 as PropIndex).encode()
])
}
}
@@ -13,6 +13,7 @@ substrate-primitives = { path = "../../primitives", default_features = false }
substrate-runtime-std = { path = "../../runtime-std", default_features = false }
substrate-runtime-io = { path = "../../runtime-io", default_features = false }
substrate-runtime-support = { path = "../../runtime-support", default_features = false }
log = {version = "0.3", optional = true }
[dev-dependencies]
serde_json = "1.0"
@@ -23,6 +24,7 @@ std = [
"num-traits/std",
"serde",
"serde_derive",
"log",
"substrate-runtime-std/std",
"substrate-runtime-io/std",
"substrate-runtime-support/std",
@@ -26,6 +26,10 @@ extern crate serde;
#[macro_use]
extern crate serde_derive;
#[cfg(feature = "std")]
#[macro_use]
extern crate log;
extern crate num_traits;
extern crate integer_sqrt;
extern crate substrate_runtime_std as rstd;
@@ -43,6 +47,9 @@ use std::collections::HashMap;
use rstd::prelude::*;
use substrate_primitives::hash::{H256, H512};
#[cfg(feature = "std")]
use substrate_primitives::hexdisplay::ascii_format;
#[cfg(feature = "std")]
pub mod testing;
@@ -59,6 +66,11 @@ pub type StorageMap = HashMap<Vec<u8>, Vec<u8>>;
/// Complex storage builder stuff.
#[cfg(feature = "std")]
pub trait BuildStorage {
fn hash(data: &[u8]) -> [u8; 16] {
let r = runtime_io::twox_128(data);
trace!(target: "build_storage", "{} <= {}", substrate_primitives::hexdisplay::HexDisplay::from(&r), ascii_format(data));
r
}
fn build_storage(self) -> Result<StorageMap, String>;
}
@@ -245,15 +245,14 @@ impl<T: Trait> Default for GenesisConfig<T> {
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_storage(self) -> ::std::result::Result<runtime_io::TestExternalities, String> {
use runtime_io::twox_128;
use codec::Encode;
use primitives::traits::As;
Ok(map![
twox_128(<SessionLength<T>>::key()).to_vec() => self.session_length.encode(),
twox_128(<CurrentIndex<T>>::key()).to_vec() => T::BlockNumber::sa(0).encode(),
twox_128(<CurrentStart<T>>::key()).to_vec() => T::Moment::zero().encode(),
twox_128(<Validators<T>>::key()).to_vec() => self.validators.encode(),
twox_128(<BrokenPercentLate<T>>::key()).to_vec() => self.broken_percent_late.encode()
Self::hash(<SessionLength<T>>::key()).to_vec() => self.session_length.encode(),
Self::hash(<CurrentIndex<T>>::key()).to_vec() => T::BlockNumber::sa(0).encode(),
Self::hash(<CurrentStart<T>>::key()).to_vec() => T::Moment::zero().encode(),
Self::hash(<Validators<T>>::key()).to_vec() => self.validators.encode(),
Self::hash(<BrokenPercentLate<T>>::key()).to_vec() => self.broken_percent_late.encode()
])
}
}
@@ -19,7 +19,6 @@
#![cfg(feature = "std")]
use rstd::prelude::*;
use runtime_io::twox_128;
use codec::Encode;
use runtime_support::{StorageValue, StorageMap};
use primitives::traits::{Zero, As};
@@ -127,31 +126,31 @@ impl<T: Trait> primitives::BuildStorage for GenesisConfig<T> {
let total_stake: T::Balance = self.balances.iter().fold(Zero::zero(), |acc, &(_, n)| acc + n);
let mut r: runtime_io::TestExternalities = map![
twox_128(<NextEnumSet<T>>::key()).to_vec() => T::AccountIndex::sa(self.balances.len() / ENUM_SET_SIZE).encode(),
twox_128(<Intentions<T>>::key()).to_vec() => self.intentions.encode(),
twox_128(<SessionsPerEra<T>>::key()).to_vec() => self.sessions_per_era.encode(),
twox_128(<ValidatorCount<T>>::key()).to_vec() => self.validator_count.encode(),
twox_128(<BondingDuration<T>>::key()).to_vec() => self.bonding_duration.encode(),
twox_128(<TransactionBaseFee<T>>::key()).to_vec() => self.transaction_base_fee.encode(),
twox_128(<TransactionByteFee<T>>::key()).to_vec() => self.transaction_byte_fee.encode(),
twox_128(<TransferFee<T>>::key()).to_vec() => self.transfer_fee.encode(),
twox_128(<CreationFee<T>>::key()).to_vec() => self.creation_fee.encode(),
twox_128(<ContractFee<T>>::key()).to_vec() => self.contract_fee.encode(),
twox_128(<ExistentialDeposit<T>>::key()).to_vec() => self.existential_deposit.encode(),
twox_128(<ReclaimRebate<T>>::key()).to_vec() => self.reclaim_rebate.encode(),
twox_128(<CurrentEra<T>>::key()).to_vec() => self.current_era.encode(),
twox_128(<SessionReward<T>>::key()).to_vec() => self.session_reward.encode(),
twox_128(<EarlyEraSlash<T>>::key()).to_vec() => self.early_era_slash.encode(),
twox_128(<TotalStake<T>>::key()).to_vec() => total_stake.encode()
Self::hash(<NextEnumSet<T>>::key()).to_vec() => T::AccountIndex::sa(self.balances.len() / ENUM_SET_SIZE).encode(),
Self::hash(<Intentions<T>>::key()).to_vec() => self.intentions.encode(),
Self::hash(<SessionsPerEra<T>>::key()).to_vec() => self.sessions_per_era.encode(),
Self::hash(<ValidatorCount<T>>::key()).to_vec() => self.validator_count.encode(),
Self::hash(<BondingDuration<T>>::key()).to_vec() => self.bonding_duration.encode(),
Self::hash(<TransactionBaseFee<T>>::key()).to_vec() => self.transaction_base_fee.encode(),
Self::hash(<TransactionByteFee<T>>::key()).to_vec() => self.transaction_byte_fee.encode(),
Self::hash(<TransferFee<T>>::key()).to_vec() => self.transfer_fee.encode(),
Self::hash(<CreationFee<T>>::key()).to_vec() => self.creation_fee.encode(),
Self::hash(<ContractFee<T>>::key()).to_vec() => self.contract_fee.encode(),
Self::hash(<ExistentialDeposit<T>>::key()).to_vec() => self.existential_deposit.encode(),
Self::hash(<ReclaimRebate<T>>::key()).to_vec() => self.reclaim_rebate.encode(),
Self::hash(<CurrentEra<T>>::key()).to_vec() => self.current_era.encode(),
Self::hash(<SessionReward<T>>::key()).to_vec() => self.session_reward.encode(),
Self::hash(<EarlyEraSlash<T>>::key()).to_vec() => self.early_era_slash.encode(),
Self::hash(<TotalStake<T>>::key()).to_vec() => total_stake.encode()
];
let ids: Vec<_> = self.balances.iter().map(|x| x.0.clone()).collect();
for i in 0..(ids.len() + ENUM_SET_SIZE - 1) / ENUM_SET_SIZE {
r.insert(twox_128(&<EnumSet<T>>::key_for(T::AccountIndex::sa(i))).to_vec(),
r.insert(Self::hash(&<EnumSet<T>>::key_for(T::AccountIndex::sa(i))).to_vec(),
ids[i * ENUM_SET_SIZE..ids.len().min((i + 1) * ENUM_SET_SIZE)].to_owned().encode());
}
for (who, value) in self.balances.into_iter() {
r.insert(twox_128(&<FreeBalance<T>>::key_for(who)).to_vec(), value.encode());
r.insert(Self::hash(&<FreeBalance<T>>::key_for(who)).to_vec(), value.encode());
}
Ok(r)
}
@@ -208,15 +208,14 @@ impl<T: Trait> Default for GenesisConfig<T> {
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_storage(self) -> Result<runtime_io::TestExternalities, String> {
use runtime_io::twox_128;
use codec::Encode;
Ok(map![
twox_128(&<BlockHash<T>>::key_for(T::BlockNumber::zero())).to_vec() => [69u8; 32].encode(),
twox_128(<Number<T>>::key()).to_vec() => 1u64.encode(),
twox_128(<ParentHash<T>>::key()).to_vec() => [69u8; 32].encode(),
twox_128(<RandomSeed<T>>::key()).to_vec() => [0u8; 32].encode(),
twox_128(<ExtrinsicIndex<T>>::key()).to_vec() => [0u8; 4].encode()
Self::hash(&<BlockHash<T>>::key_for(T::BlockNumber::zero())).to_vec() => [69u8; 32].encode(),
Self::hash(<Number<T>>::key()).to_vec() => 1u64.encode(),
Self::hash(<ParentHash<T>>::key()).to_vec() => [69u8; 32].encode(),
Self::hash(<RandomSeed<T>>::key()).to_vec() => [0u8; 32].encode(),
Self::hash(<ExtrinsicIndex<T>>::key()).to_vec() => [0u8; 4].encode()
])
}
}
@@ -127,11 +127,10 @@ impl<T: Trait> Default for GenesisConfig<T> {
impl<T: Trait> runtime_primitives::BuildStorage for GenesisConfig<T>
{
fn build_storage(self) -> ::std::result::Result<runtime_primitives::StorageMap, String> {
use runtime_io::twox_128;
use codec::Encode;
Ok(map![
twox_128(<BlockPeriod<T>>::key()).to_vec() => self.period.encode(),
twox_128(<Now<T>>::key()).to_vec() => T::Moment::sa(0).encode()
Self::hash(<BlockPeriod<T>>::key()).to_vec() => self.period.encode(),
Self::hash(<Now<T>>::key()).to_vec() => T::Moment::sa(0).encode()
])
}
}