From 61eb12ef49cdd69240047458561d4308b51eb467 Mon Sep 17 00:00:00 2001 From: noandrea Date: Mon, 8 Apr 2024 00:59:36 -0700 Subject: [PATCH] separate permission checks from action processing --- pallets/xcm-transactor/src/lib.rs | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/pallets/xcm-transactor/src/lib.rs b/pallets/xcm-transactor/src/lib.rs index 8d24809ba1..f94cba1630 100644 --- a/pallets/xcm-transactor/src/lib.rs +++ b/pallets/xcm-transactor/src/lib.rs @@ -869,12 +869,21 @@ pub mod pallet { // SetAppendix(RefundSurplus, DepositAsset(sov account)) // Transact - let call_bytes = match action.clone() { - HrmpOperation::InitOpen(params) => { - // allowed from The HRMP Open origin + // check permissions + match &action { + HrmpOperation::InitOpen(_) | HrmpOperation::Accept { .. } => { >::ensure_origin( origin, )?; + } + HrmpOperation::Close(_) | HrmpOperation::Cancel { .. } => { + T::HrmpManipulatorOrigin::ensure_origin(origin)?; + } + } + + // process action + let call_bytes = match action.clone() { + HrmpOperation::InitOpen(params) => { Self::hrmp_encode_call(HrmpAvailableCalls::InitOpenChannel( params.para_id, params.proposed_max_capacity, @@ -882,26 +891,18 @@ pub mod pallet { )) } HrmpOperation::Accept { para_id } => { - // allowed from The HRMP Open origin - >::ensure_origin( - origin, - )?; Self::hrmp_encode_call(HrmpAvailableCalls::AcceptOpenChannel(para_id)) } HrmpOperation::Close(close_params) => { - T::HrmpManipulatorOrigin::ensure_origin(origin)?; Self::hrmp_encode_call(HrmpAvailableCalls::CloseChannel(close_params)) } HrmpOperation::Cancel { channel_id, open_requests, - } => { - T::HrmpManipulatorOrigin::ensure_origin(origin)?; - Self::hrmp_encode_call(HrmpAvailableCalls::CancelOpenRequest( - channel_id, - open_requests, - )) - } + } => Self::hrmp_encode_call(HrmpAvailableCalls::CancelOpenRequest( + channel_id, + open_requests, + )), } .map_err(|_| Error::::HrmpHandlerNotImplemented)?;