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 1 commit
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
31 changes: 27 additions & 4 deletions runtime/common/src/paras_sudo_wrapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,29 @@

//! A simple wrapper allowing `Sudo` to call into `paras` routines.

use sp_std::prelude::*;
use frame_support::{
decl_error, decl_module,
decl_error, decl_module, ensure,
dispatch::DispatchResult,
weights::DispatchClass,
};
use frame_system::ensure_root;
use runtime_parachains::{
dmp, ump, hrmp, paras::{self, ParaGenesisArgs},
configuration, dmp, ump, hrmp, paras::{self, ParaGenesisArgs},
};
use primitives::v1::Id as ParaId;

/// The module's configuration trait.
pub trait Trait: paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait { }
pub trait Trait: configuration::Trait + paras::Trait + dmp::Trait + ump::Trait + hrmp::Trait {}

decl_error! {
pub enum Error for Module<T: Trait> { }
pub enum Error for Module<T: Trait> {
/// The specified parachain or parathread is not registered.
ParaDoesnExist,
/// A DMP message couldn't be sent because it exceeds the maximum size allowed for a downward
/// message.
ExceedsMaxMessageSize,
}
}

decl_module! {
Expand All @@ -58,5 +65,21 @@ decl_module! {
runtime_parachains::schedule_para_cleanup::<T>(id);
Ok(())
}

/// Send a downward message to the given para.
///
/// The given parachain should exist and the payload should not exceed the preconfigured size
/// `config.max_downward_message_size`.
#[weight = (1_000, DispatchClass::Operational)]
pub fn sudo_queue_downward_message(origin, id: ParaId, payload: Vec<u8>) -> DispatchResult {
ensure_root(origin)?;
ensure!(<paras::Module<T>>::is_valid_para(id), Error::<T>::ParaDoesnExist);
let config = <configuration::Module<T>>::config();
<dmp::Module<T>>::queue_downward_message(&config, id, payload)
.map_err(|e| {match e {
dmp::QueueDownwardMessageError::ExceedsMaxMessageSize =>
Error::<T>::ExceedsMaxMessageSize.into(),
}})
}
}
}
2 changes: 1 addition & 1 deletion runtime/parachains/src/paras.rs
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,7 @@ impl<T: Trait> Module<T> {
}

/// Returns whether the given ID refers to a valid para.
pub(crate) fn is_valid_para(id: ParaId) -> bool {
pub fn is_valid_para(id: ParaId) -> bool {
Self::parachains().binary_search(&id).is_ok()
|| Self::is_parathread(id)
}
Expand Down