mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-08 04:17:23 +00:00
0e27b881a4
During validation, `SkipCheckIfFeeless` should check if the call is `feeless` and delegate to the wrapped extension if not.
106 lines
2.6 KiB
Rust
106 lines
2.6 KiB
Rust
// Copyright (C) Parity Technologies (UK) Ltd.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
use super::*;
|
|
use crate as pallet_skip_feeless_payment;
|
|
|
|
use frame_support::{derive_impl, parameter_types};
|
|
use frame_system as system;
|
|
|
|
type Block = frame_system::mocking::MockBlock<Runtime>;
|
|
type AccountId = u64;
|
|
|
|
#[derive_impl(frame_system::config_preludes::TestDefaultConfig)]
|
|
impl frame_system::Config for Runtime {
|
|
type Block = Block;
|
|
}
|
|
|
|
impl Config for Runtime {
|
|
type RuntimeEvent = RuntimeEvent;
|
|
}
|
|
|
|
parameter_types! {
|
|
pub static PreDispatchCount: u32 = 0;
|
|
pub static ValidateCount: u32 = 0;
|
|
}
|
|
|
|
#[derive(Clone, Eq, PartialEq, Debug, Encode, Decode, TypeInfo)]
|
|
pub struct DummyExtension;
|
|
|
|
impl SignedExtension for DummyExtension {
|
|
type AccountId = AccountId;
|
|
type Call = RuntimeCall;
|
|
type AdditionalSigned = ();
|
|
type Pre = ();
|
|
const IDENTIFIER: &'static str = "DummyExtension";
|
|
fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> {
|
|
Ok(())
|
|
}
|
|
|
|
fn validate(
|
|
&self,
|
|
_who: &Self::AccountId,
|
|
_call: &Self::Call,
|
|
_info: &DispatchInfoOf<Self::Call>,
|
|
_len: usize,
|
|
) -> TransactionValidity {
|
|
ValidateCount::mutate(|c| *c += 1);
|
|
Ok(Default::default())
|
|
}
|
|
|
|
fn pre_dispatch(
|
|
self,
|
|
_who: &Self::AccountId,
|
|
_call: &Self::Call,
|
|
_info: &DispatchInfoOf<Self::Call>,
|
|
_len: usize,
|
|
) -> Result<Self::Pre, TransactionValidityError> {
|
|
PreDispatchCount::mutate(|c| *c += 1);
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[frame_support::pallet(dev_mode)]
|
|
pub mod pallet_dummy {
|
|
use frame_support::pallet_prelude::*;
|
|
use frame_system::pallet_prelude::*;
|
|
|
|
#[pallet::pallet]
|
|
pub struct Pallet<T>(_);
|
|
|
|
#[pallet::config]
|
|
pub trait Config: frame_system::Config {}
|
|
|
|
#[pallet::call]
|
|
impl<T: Config> Pallet<T> {
|
|
#[pallet::feeless_if(|_origin: &OriginFor<T>, data: &u32| -> bool {
|
|
*data == 0
|
|
})]
|
|
pub fn aux(_origin: OriginFor<T>, #[pallet::compact] _data: u32) -> DispatchResult {
|
|
unreachable!()
|
|
}
|
|
}
|
|
}
|
|
|
|
impl pallet_dummy::Config for Runtime {}
|
|
|
|
frame_support::construct_runtime!(
|
|
pub enum Runtime {
|
|
System: system,
|
|
SkipFeeless: pallet_skip_feeless_payment,
|
|
DummyPallet: pallet_dummy,
|
|
}
|
|
);
|