diff --git a/authority/src/lib.rs b/authority/src/lib.rs index e97699ed27178c00550d4aa40049787cfdc593c2..3403fea803b6ed6069bdafd38707b02ccbcd5fcb 100644 --- a/authority/src/lib.rs +++ b/authority/src/lib.rs @@ -40,30 +40,34 @@ mod tests; /// A delayed origin. Can only be dispatched via `dispatch_as` with a delay. #[derive(PartialEq, Eq, Clone, RuntimeDebug, Encode, Decode)] -pub struct DelayedOrigin<BlockNumber, Origin> { +pub struct DelayedOrigin<BlockNumber, PalletsOrigin> { /// Number of blocks that this call have been delayed. pub delay: BlockNumber, /// The initial origin. - pub origin: Box<Origin>, + pub origin: Box<PalletsOrigin>, } /// Ensure the origin have a minimum amount of delay. -pub struct EnsureDelayed<Delay, Inner, BlockNumber>(sp_std::marker::PhantomData<(Delay, Inner, BlockNumber)>); +pub struct EnsureDelayed<Delay, Inner, BlockNumber, PalletsOrigin>( + sp_std::marker::PhantomData<(Delay, Inner, BlockNumber, PalletsOrigin)>, +); impl< - O: Into<Result<DelayedOrigin<BlockNumber, O>, O>> + From<DelayedOrigin<BlockNumber, O>>, + PalletsOrigin: Into<O>, + O: Into<Result<DelayedOrigin<BlockNumber, PalletsOrigin>, O>> + From<DelayedOrigin<BlockNumber, PalletsOrigin>>, Delay: Get<BlockNumber>, Inner: EnsureOrigin<O>, BlockNumber: PartialOrd, - > EnsureOrigin<O> for EnsureDelayed<Delay, Inner, BlockNumber> + > EnsureOrigin<O> for EnsureDelayed<Delay, Inner, BlockNumber, PalletsOrigin> { type Success = Inner::Success; fn try_origin(o: O) -> Result<Self::Success, O> { o.into().and_then(|delayed_origin| { if delayed_origin.delay >= Delay::get() { - Inner::try_origin(*delayed_origin.origin) + let pallets_origin = *delayed_origin.origin; + Inner::try_origin(pallets_origin.into()) } else { - Err(*delayed_origin.origin) + Err(delayed_origin.into()) } }) }