Fixes validation for SkipCheckIfFeeless extension (#3993)

During validation, `SkipCheckIfFeeless` should check if the call is
`feeless` and delegate to the wrapped extension if not.
This commit is contained in:
gupnik
2024-04-09 14:05:46 +05:30
committed by GitHub
parent d733c77ee2
commit 0e27b881a4
3 changed files with 48 additions and 2 deletions
@@ -43,7 +43,7 @@ use frame_support::{
use scale_info::{StaticTypeInfo, TypeInfo};
use sp_runtime::{
traits::{DispatchInfoOf, PostDispatchInfoOf, SignedExtension},
transaction_validity::TransactionValidityError,
transaction_validity::{TransactionValidity, TransactionValidityError, ValidTransaction},
};
#[cfg(test)]
@@ -122,6 +122,20 @@ where
self.0.additional_signed()
}
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> TransactionValidity {
if call.is_feeless(&<T as frame_system::Config>::RuntimeOrigin::signed(who.clone())) {
Ok(ValidTransaction::default())
} else {
self.0.validate(who, call, info, len)
}
}
fn pre_dispatch(
self,
who: &Self::AccountId,