diff --git a/pallets/dactr/src/extensions/check_app_id.rs b/pallets/dactr/src/extensions/check_app_id.rs index a338b6631..93757ea52 100644 --- a/pallets/dactr/src/extensions/check_app_id.rs +++ b/pallets/dactr/src/extensions/check_app_id.rs @@ -51,6 +51,7 @@ where pub fn do_validate_nested( &self, call: &::RuntimeCall, + maybe_next_app_id: &mut Option, ) -> Result<(), TransactionValidityError> { let done = match call.is_sub_type() { Some(UtilityCall::::batch { calls }) @@ -58,7 +59,7 @@ where | Some(UtilityCall::::force_batch { calls }) => { for call in calls.iter() { let cast = call.clone().into(); - self.do_validate_nested(&cast)?; + self.do_validate_nested(&cast, maybe_next_app_id)?; } true }, @@ -69,21 +70,22 @@ where return Ok(()); } - match call.is_sub_type() { - Some(DACall::::submit_data { .. }) => { - let next_app_id = >::peek_next_application_id(); - ensure!( - self.app_id() < next_app_id, - InvalidTransaction::Custom(InvalidTransactionCustomId::InvalidAppId as u8) - ); - }, - _ => { - ensure!( - self.app_id().0 == 0, - InvalidTransaction::Custom(InvalidTransactionCustomId::ForbiddenAppId as u8) - ); - }, - }; + if let Some(DACall::::submit_data { .. }) = call.is_sub_type() { + let next_app_id = + maybe_next_app_id.unwrap_or_else(|| >::peek_next_application_id()); + ensure!( + self.app_id() < next_app_id, + InvalidTransaction::Custom(InvalidTransactionCustomId::InvalidAppId as u8) + ); + if maybe_next_app_id.is_none() { + *maybe_next_app_id = Some(next_app_id) + } + } else { + ensure!( + self.app_id().0 == 0, + InvalidTransaction::Custom(InvalidTransactionCustomId::ForbiddenAppId as u8) + ); + } Ok(()) } @@ -93,7 +95,8 @@ where &self, call: &::RuntimeCall, ) -> TransactionValidity { - self.do_validate_nested(call)?; + let mut maybe_next_app_id: Option = None; + self.do_validate_nested(call, &mut maybe_next_app_id)?; Ok(ValidTransaction::default()) } }