diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 56b1d1926..c4a71e947 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -12,6 +12,7 @@ pub mod check_nonce; mod migrations; use codec::{Compact, Decode, Encode}; +use frame_support::pallet_prelude::InvalidTransaction; use frame_support::traits::{Imbalance, InsideBoth}; use frame_support::{ dispatch::DispatchResultWithPostInfo, @@ -1596,6 +1597,14 @@ impl_runtime_apis! { tx: ::Extrinsic, block_hash: ::Hash, ) -> TransactionValidity { + use codec::DecodeLimit; + use frame_support::pallet_prelude::ValidateUnsigned; + use frame_support::traits::ExtrinsicCall; + let encoded = tx.call().encode(); + if let Err(e) = ::Call::decode_all_with_depth_limit(100, &mut encoded.as_slice()) { + log::warn!("Failed to decode call: {:?}", e); + return Err(TransactionValidityError::Invalid(InvalidTransaction::Call)); + } Executive::validate_transaction(source, tx, block_hash) } }