mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 09:21:04 +00:00
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
use cumulus_pallet_xcm::{ensure_sibling_para, Origin as CumulusOrigin};
|
use cumulus_pallet_xcm::{ensure_sibling_para, Origin as CumulusOrigin};
|
||||||
use cumulus_primitives_core::ParaId;
|
use cumulus_primitives_core::ParaId;
|
||||||
|
use frame_support::{parameter_types, BoundedVec};
|
||||||
use frame_system::Config as SystemConfig;
|
use frame_system::Config as SystemConfig;
|
||||||
use sp_runtime::traits::Saturating;
|
use sp_runtime::traits::Saturating;
|
||||||
use sp_std::prelude::*;
|
use sp_std::prelude::*;
|
||||||
@@ -27,6 +28,11 @@ use xcm::latest::prelude::*;
|
|||||||
|
|
||||||
pub use pallet::*;
|
pub use pallet::*;
|
||||||
|
|
||||||
|
parameter_types! {
|
||||||
|
const MaxParachains: u32 = 100;
|
||||||
|
const MaxPayloadSize: u32 = 1024;
|
||||||
|
}
|
||||||
|
|
||||||
#[frame_support::pallet]
|
#[frame_support::pallet]
|
||||||
pub mod pallet {
|
pub mod pallet {
|
||||||
use super::*;
|
use super::*;
|
||||||
@@ -35,7 +41,6 @@ pub mod pallet {
|
|||||||
|
|
||||||
#[pallet::pallet]
|
#[pallet::pallet]
|
||||||
#[pallet::generate_store(pub(super) trait Store)]
|
#[pallet::generate_store(pub(super) trait Store)]
|
||||||
#[pallet::without_storage_info]
|
|
||||||
pub struct Pallet<T>(_);
|
pub struct Pallet<T>(_);
|
||||||
|
|
||||||
/// The module configuration trait.
|
/// The module configuration trait.
|
||||||
@@ -55,7 +60,11 @@ pub mod pallet {
|
|||||||
|
|
||||||
/// The target parachains to ping.
|
/// The target parachains to ping.
|
||||||
#[pallet::storage]
|
#[pallet::storage]
|
||||||
pub(super) type Targets<T: Config> = StorageValue<_, Vec<(ParaId, Vec<u8>)>, ValueQuery>;
|
pub(super) type Targets<T: Config> = StorageValue<
|
||||||
|
_,
|
||||||
|
BoundedVec<(ParaId, BoundedVec<u8, MaxPayloadSize>), MaxParachains>,
|
||||||
|
ValueQuery,
|
||||||
|
>;
|
||||||
|
|
||||||
/// The total number of pings sent.
|
/// The total number of pings sent.
|
||||||
#[pallet::storage]
|
#[pallet::storage]
|
||||||
@@ -79,7 +88,12 @@ pub mod pallet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[pallet::error]
|
#[pallet::error]
|
||||||
pub enum Error<T> {}
|
pub enum Error<T> {
|
||||||
|
/// Too many parachains have been added as a target.
|
||||||
|
TooManyTargets,
|
||||||
|
/// The payload provided is too large, limit is 1024 bytes.
|
||||||
|
PayloadTooLarge,
|
||||||
|
}
|
||||||
|
|
||||||
#[pallet::hooks]
|
#[pallet::hooks]
|
||||||
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
|
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
|
||||||
@@ -96,7 +110,7 @@ pub mod pallet {
|
|||||||
require_weight_at_most: 1_000,
|
require_weight_at_most: 1_000,
|
||||||
call: <T as Config>::Call::from(Call::<T>::ping {
|
call: <T as Config>::Call::from(Call::<T>::ping {
|
||||||
seq,
|
seq,
|
||||||
payload: payload.clone(),
|
payload: payload.clone().to_vec(),
|
||||||
})
|
})
|
||||||
.encode()
|
.encode()
|
||||||
.into(),
|
.into(),
|
||||||
@@ -104,10 +118,15 @@ pub mod pallet {
|
|||||||
) {
|
) {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
Pings::<T>::insert(seq, n);
|
Pings::<T>::insert(seq, n);
|
||||||
Self::deposit_event(Event::PingSent(para, seq, payload));
|
Self::deposit_event(Event::PingSent(para, seq, payload.to_vec()));
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
Self::deposit_event(Event::ErrorSendingPing(e, para, seq, payload));
|
Self::deposit_event(Event::ErrorSendingPing(
|
||||||
|
e,
|
||||||
|
para,
|
||||||
|
seq,
|
||||||
|
payload.to_vec(),
|
||||||
|
));
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -119,7 +138,11 @@ pub mod pallet {
|
|||||||
#[pallet::weight(0)]
|
#[pallet::weight(0)]
|
||||||
pub fn start(origin: OriginFor<T>, para: ParaId, payload: Vec<u8>) -> DispatchResult {
|
pub fn start(origin: OriginFor<T>, para: ParaId, payload: Vec<u8>) -> DispatchResult {
|
||||||
ensure_root(origin)?;
|
ensure_root(origin)?;
|
||||||
Targets::<T>::mutate(|t| t.push((para, payload)));
|
let payload = BoundedVec::<u8, MaxPayloadSize>::try_from(payload)
|
||||||
|
.map_err(|_| Error::<T>::PayloadTooLarge)?;
|
||||||
|
Targets::<T>::try_mutate(|t| {
|
||||||
|
t.try_push((para, payload)).map_err(|_| Error::<T>::TooManyTargets)
|
||||||
|
})?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,8 +154,13 @@ pub mod pallet {
|
|||||||
payload: Vec<u8>,
|
payload: Vec<u8>,
|
||||||
) -> DispatchResult {
|
) -> DispatchResult {
|
||||||
ensure_root(origin)?;
|
ensure_root(origin)?;
|
||||||
|
let bounded_payload = BoundedVec::<u8, MaxPayloadSize>::try_from(payload)
|
||||||
|
.map_err(|_| Error::<T>::PayloadTooLarge)?;
|
||||||
for _ in 0..count {
|
for _ in 0..count {
|
||||||
Targets::<T>::mutate(|t| t.push((para, payload.clone())));
|
Targets::<T>::try_mutate(|t| {
|
||||||
|
t.try_push((para, bounded_payload.clone()))
|
||||||
|
.map_err(|_| Error::<T>::TooManyTargets)
|
||||||
|
})?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user