diff --git a/substrate/frame/contracts/src/tests.rs b/substrate/frame/contracts/src/tests.rs index b25487469b..8648bd8dcf 100644 --- a/substrate/frame/contracts/src/tests.rs +++ b/substrate/frame/contracts/src/tests.rs @@ -3019,7 +3019,10 @@ fn gas_estimation_call_runtime() { // Call something trivial with a huge gas limit so that we can observe the effects // of pre-charging. This should create a difference between consumed and required. - let call = RuntimeCall::Dummy(pallet_dummy::Call::overestimate_pre_charge {}); + let call = RuntimeCall::Dummy(pallet_dummy::Call::overestimate_pre_charge { + pre_charge: Weight::from_parts(10_000_000, 0), + actual_weight: Weight::from_parts(100, 0), + }); let result = Contracts::bare_call( ALICE, addr_caller.clone(), diff --git a/substrate/frame/contracts/src/tests/pallet_dummy.rs b/substrate/frame/contracts/src/tests/pallet_dummy.rs index d84e34de06..7f8db53bf4 100644 --- a/substrate/frame/contracts/src/tests/pallet_dummy.rs +++ b/substrate/frame/contracts/src/tests/pallet_dummy.rs @@ -4,6 +4,7 @@ pub use pallet::*; pub mod pallet { use frame_support::{ dispatch::{Pays, PostDispatchInfo}, + ensure, pallet_prelude::DispatchResultWithPostInfo, weights::Weight, }; @@ -21,13 +22,15 @@ pub mod pallet { /// values of [`ContractResult::gas_consumed`] and [`ContractResult::gas_required`] in /// tests. #[pallet::call_index(1)] - #[pallet::weight(Weight::from_parts(10_000_000, 0))] - pub fn overestimate_pre_charge(origin: OriginFor) -> DispatchResultWithPostInfo { + #[pallet::weight(*pre_charge)] + pub fn overestimate_pre_charge( + origin: OriginFor, + pre_charge: Weight, + actual_weight: Weight, + ) -> DispatchResultWithPostInfo { ensure_signed(origin)?; - Ok(PostDispatchInfo { - actual_weight: Some(Weight::from_parts(100, 0)), - pays_fee: Pays::Yes, - }) + ensure!(pre_charge.any_gt(actual_weight), "pre_charge must be > actual_weight"); + Ok(PostDispatchInfo { actual_weight: Some(actual_weight), pays_fee: Pays::Yes }) } } }