Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
319 changes: 151 additions & 168 deletions Cargo.lock

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions runtime/src/attestations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

use rstd::prelude::*;
use codec::{Encode, Decode};
use frame_support::{decl_storage, decl_module, ensure, dispatch::Result, traits::Get};
use frame_support::{decl_storage, decl_module, ensure, dispatch::DispatchResult, traits::Get};

use primitives::{Hash, parachain::{AttestedCandidate, CandidateReceipt, Id as ParaId}};
use sp_runtime::RuntimeDebug;
Expand Down Expand Up @@ -110,7 +110,7 @@ decl_module! {
/// Parachain-attestations module.
pub struct Module<T: Trait> for enum Call where origin: <T as system::Trait>::Origin {
/// Provide candidate receipts for parachains, in ascending order by id.
fn more_attestations(origin, _more: MoreAttestations) -> Result {
fn more_attestations(origin, _more: MoreAttestations) -> DispatchResult {
ensure_none(origin)?;
ensure!(!<DidUpdate>::exists(), "More attestations can be added only once in a block.");
<DidUpdate>::put(true);
Expand Down
7 changes: 4 additions & 3 deletions runtime/src/claims.rs
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ mod tests {
type AvailableBlockRatio = AvailableBlockRatio;
type MaximumBlockLength = MaximumBlockLength;
type Version = ();
type ModuleToIndex = ();
}

parameter_types! {
Expand Down Expand Up @@ -407,7 +408,7 @@ mod tests {
new_test_ext().execute_with(|| {
assert_noop!(
Claims::mint_claim(Origin::signed(42), eth(&bob()), 200, None),
"RequireRootOrigin"
sp_runtime::traits::BadOrigin,
);
assert_eq!(Balances::free_balance(&42), 0);
assert_noop!(
Expand All @@ -426,7 +427,7 @@ mod tests {
new_test_ext().execute_with(|| {
assert_noop!(
Claims::mint_claim(Origin::signed(42), eth(&bob()), 200, Some((50, 10, 1))),
"RequireRootOrigin"
sp_runtime::traits::BadOrigin,
);
assert_eq!(Balances::free_balance(&42), 0);
assert_noop!(
Expand All @@ -446,7 +447,7 @@ mod tests {
assert_eq!(Balances::free_balance(&42), 0);
assert_err!(
Claims::claim(Origin::signed(42), 42, sig(&alice(), &42u64.encode())),
"RequireNoOrigin",
sp_runtime::traits::BadOrigin,
);
});
}
Expand Down
9 changes: 6 additions & 3 deletions runtime/src/crowdfund.rs
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ mod tests {
// The testing primitives are very useful for avoiding having to work with signatures
// or public keys. `u64` is used as the `AccountId` and no `Signature`s are requried.
use sp_runtime::{
Perbill, Permill, testing::Header,
Perbill, Permill, testing::Header, DispatchResult,
traits::{BlakeTwo256, OnInitialize, OnFinalize, IdentityLookup},
};
use crate::registrar::Registrar;
Expand Down Expand Up @@ -542,6 +542,7 @@ mod tests {
type MaximumBlockLength = MaximumBlockLength;
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
}
parameter_types! {
pub const ExistentialDeposit: u64 = 0;
Expand Down Expand Up @@ -594,12 +595,13 @@ mod tests {
(*p.borrow() - 1).into()
})
}

fn register_para(
id: ParaId,
_info: ParaInfo,
code: Vec<u8>,
initial_head_data: Vec<u8>
) -> Result<(), &'static str> {
) -> DispatchResult {
PARACHAINS.with(|p| {
if p.borrow().contains_key(&id.into()) {
panic!("ID already exists")
Expand All @@ -608,7 +610,8 @@ mod tests {
Ok(())
})
}
fn deregister_para(id: ParaId) -> Result<(), &'static str> {

fn deregister_para(id: ParaId) -> DispatchResult {
PARACHAINS.with(|p| {
if !p.borrow().contains_key(&id.into()) {
panic!("ID doesn't exist")
Expand Down
3 changes: 2 additions & 1 deletion runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
spec_name: create_runtime_str!("kusama"),
impl_name: create_runtime_str!("parity-kusama"),
authoring_version: 2,
spec_version: 1031,
spec_version: 1032,
impl_version: 0,
apis: RUNTIME_API_VERSIONS,
};
Expand Down Expand Up @@ -163,6 +163,7 @@ impl system::Trait for Runtime {
type MaximumBlockLength = MaximumBlockLength;
type AvailableBlockRatio = AvailableBlockRatio;
type Version = Version;
type ModuleToIndex = ModuleToIndex;
}

parameter_types! {
Expand Down
55 changes: 28 additions & 27 deletions runtime/src/parachains.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use codec::{Encode, Decode};

use sp_runtime::traits::{
Hash as HashT, BlakeTwo256, Saturating, One, Zero, Dispatchable,
AccountIdConversion,
AccountIdConversion, BadOrigin,
};
use frame_support::weights::SimpleDispatchInfo;
use primitives::{
Expand All @@ -34,7 +34,7 @@ use primitives::{
},
};
use frame_support::{
Parameter, dispatch::Result, decl_storage, decl_module, ensure,
Parameter, dispatch::DispatchResult, decl_storage, decl_module, ensure,
traits::{Currency, Get, WithdrawReason, ExistenceRequirement, Randomness},
};

Expand Down Expand Up @@ -74,7 +74,7 @@ fn number_range<N>(low: N, high: N) -> BlockNumberRange<N> {
// doesn't work.`
pub trait ParachainCurrency<AccountId> {
fn free_balance(para_id: ParaId) -> Balance;
fn deduct(para_id: ParaId, amount: Balance) -> Result;
fn deduct(para_id: ParaId, amount: Balance) -> DispatchResult;
}

impl<AccountId, T: Currency<AccountId>> ParachainCurrency<AccountId> for T where
Expand All @@ -86,7 +86,7 @@ impl<AccountId, T: Currency<AccountId>> ParachainCurrency<AccountId> for T where
T::free_balance(&para_account).into()
}

fn deduct(para_id: ParaId, amount: Balance) -> Result {
fn deduct(para_id: ParaId, amount: Balance) -> DispatchResult {
let para_account = para_id.into_account();

// burn the fee.
Expand Down Expand Up @@ -197,7 +197,7 @@ decl_module! {
pub struct Module<T: Trait> for enum Call where origin: <T as system::Trait>::Origin {
/// Provide candidate receipts for parachains, in ascending order by id.
#[weight = SimpleDispatchInfo::FixedNormal(1_000_000)]
pub fn set_heads(origin, heads: Vec<AttestedCandidate>) -> Result {
pub fn set_heads(origin, heads: Vec<AttestedCandidate>) -> DispatchResult {
ensure_none(origin)?;
ensure!(!<DidUpdate>::exists(), "Parachain heads must be updated only once in the block");

Expand Down Expand Up @@ -350,7 +350,7 @@ impl<T: Trait> Module<T> {
upward_messages: &[UpwardMessage],
max_queue_count: usize,
watermark_queue_size: usize,
) -> Result {
) -> DispatchResult {
// Either there are no more messages to add...
if !upward_messages.is_empty() {
let (count, size) = <RelayDispatchQueueSize>::get(id);
Expand Down Expand Up @@ -616,32 +616,32 @@ impl<T: Trait> Module<T> {
fn check_egress_queue_roots(
head: &AttestedCandidate,
active_parachains: &[(ParaId, Option<(CollatorId, Retriable)>)]
) -> Result {
) -> DispatchResult {
let mut last_egress_id = None;
let mut iter = active_parachains.iter().map(|x| x.0);
for (egress_para_id, root) in &head.candidate.egress_queue_roots {
// egress routes should be ascending order by parachain ID without duplicate.
ensure!(
last_egress_id.as_ref().map_or(true, |x| x < &egress_para_id),
"Egress routes out of order by ID"
"Egress routes out of order by ID",
);

// a parachain can't route to self
ensure!(
*egress_para_id != head.candidate.parachain_index,
"Parachain routing to self"
"Parachain routing to self",
);

// no empty trie roots
ensure!(
*root != EMPTY_TRIE_ROOT.into(),
"Empty trie root included"
"Empty trie root included",
);

// can't route to a parachain which doesn't exist
ensure!(
iter.find(|x| x == egress_para_id).is_some(),
"Routing to non-existent parachain"
"Routing to non-existent parachain",
);

last_egress_id = Some(egress_para_id)
Expand All @@ -654,7 +654,7 @@ impl<T: Trait> Module<T> {
fn check_candidates(
attested_candidates: &[AttestedCandidate],
active_parachains: &[(ParaId, Option<(CollatorId, Retriable)>)]
) -> rstd::result::Result<IncludedBlocks<T>, &'static str>
) -> rstd::result::Result<IncludedBlocks<T>, sp_runtime::DispatchError>
{
use primitives::parachain::ValidityAttestation;
use sp_runtime::traits::AppVerify;
Expand Down Expand Up @@ -739,12 +739,12 @@ impl<T: Trait> Module<T> {

ensure!(
candidate.validity_votes.len() >= majority_of(validator_group.len()),
"Not enough validity attestations"
"Not enough validity attestations",
);

ensure!(
candidate.validity_votes.len() <= authorities.len(),
"The number of attestations exceeds the number of authorities"
"The number of attestations exceeds the number of authorities",
);

let fees = candidate.candidate().fees;
Expand All @@ -762,15 +762,15 @@ impl<T: Trait> Module<T> {
.enumerate()
{
let validity_attestation = match candidate.validity_votes.get(vote_index) {
None => return Err("Not enough validity votes"),
None => Err("Not enough validity votes")?,
Some(v) => {
expected_votes_len = vote_index + 1;
v
}
};

if validator_group.iter().find(|&(idx, _)| *idx == auth_index).is_none() {
return Err("Attesting validator not on this chain's validation duty.");
Err("Attesting validator not on this chain's validation duty.")?
}

let (payload, sig) = match validity_attestation {
Expand All @@ -796,15 +796,15 @@ impl<T: Trait> Module<T> {

ensure!(
sig.verify(&payload[..], &authorities[auth_index]),
"Candidate validity attestation signature is bad."
"Candidate validity attestation signature is bad.",
);
}

para_block_hashes.push(candidate_hash.unwrap_or_else(|| candidate.candidate().hash()));

ensure!(
ensure!(
candidate.validity_votes.len() == expected_votes_len,
"Extra untagged validity votes along with candidate"
"Extra untagged validity votes along with candidate",
);
}

Expand Down Expand Up @@ -887,12 +887,12 @@ impl<T: Trait> ProvideInherent for Module<T> {

/// Ensure that the origin `o` represents a parachain.
/// Returns `Ok` with the parachain ID that effected the extrinsic or an `Err` otherwise.
pub fn ensure_parachain<OuterOrigin>(o: OuterOrigin) -> result::Result<ParaId, &'static str>
pub fn ensure_parachain<OuterOrigin>(o: OuterOrigin) -> result::Result<ParaId, BadOrigin>
where OuterOrigin: Into<result::Result<Origin, OuterOrigin>>
{
match o.into() {
Ok(Origin::Parachain(id)) => Ok(id),
_ => Err("bad origin: expected to be a parachain origin"),
_ => Err(BadOrigin),
}
}

Expand Down Expand Up @@ -961,6 +961,7 @@ mod tests {
type MaximumBlockLength = MaximumBlockLength;
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
}

parameter_types! {
Expand Down Expand Up @@ -1516,7 +1517,7 @@ mod tests {
];
assert_err!(
Parachains::check_upward_messages(0.into(), &messages, 2, 3),
"Messages added when queue full"
"Messages added when queue full",
);
});
}
Expand All @@ -1537,7 +1538,7 @@ mod tests {
];
assert_err!(
Parachains::check_upward_messages(0.into(), &messages, 2, 3),
"Messages added when queue full"
"Messages added when queue full",
);
});
}
Expand Down Expand Up @@ -1967,7 +1968,7 @@ mod tests {
Origin::NONE,
);

assert_eq!(Err("Routing to non-existent parachain"), result);
assert_eq!(Err("Routing to non-existent parachain".into()), result);
});
}

Expand All @@ -1992,7 +1993,7 @@ mod tests {
Origin::NONE,
);

assert_eq!(Err("Parachain routing to self"), result);
assert_eq!(Err("Parachain routing to self".into()), result);
});
}

Expand All @@ -2017,7 +2018,7 @@ mod tests {
Origin::NONE,
);

assert_eq!(Err("Egress routes out of order by ID"), result);
assert_eq!(Err("Egress routes out of order by ID".into()), result);
});
}

Expand All @@ -2042,7 +2043,7 @@ mod tests {
Origin::NONE,
);

assert_eq!(Err("Empty trie root included"), result);
assert_eq!(Err("Empty trie root included".into()), result);
});
}

Expand Down
Loading