--- a/runtime/common/ethereum/self_contained_call.rs +++ b/runtime/common/ethereum/self_contained_call.rs @@ -17,9 +17,9 @@ use sp_core::H160; use sp_runtime::{ traits::{Dispatchable, DispatchInfoOf, PostDispatchInfoOf}, - transaction_validity::{TransactionValidityError, TransactionValidity}, + transaction_validity::{TransactionValidityError, TransactionValidity, InvalidTransaction}, }; -use crate::{RuntimeOrigin, RuntimeCall}; +use crate::{RuntimeOrigin, RuntimeCall, Maintenance}; impl fp_self_contained::SelfContainedCall for RuntimeCall { type SignedInfo = H160; @@ -33,7 +33,15 @@ fn check_self_contained(&self) -> Option> { match self { - RuntimeCall::Ethereum(call) => call.check_self_contained(), + RuntimeCall::Ethereum(call) => { + if Maintenance::is_enabled() { + Some(Err(TransactionValidityError::Invalid( + InvalidTransaction::Call, + ))) + } else { + call.check_self_contained() + } + } _ => None, } } @@ -45,7 +53,15 @@ len: usize, ) -> Option { match self { - RuntimeCall::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len), + RuntimeCall::Ethereum(call) => { + if Maintenance::is_enabled() { + Some(Err(TransactionValidityError::Invalid( + InvalidTransaction::Call, + ))) + } else { + call.validate_self_contained(info, dispatch_info, len) + } + } _ => None, } }