diff --git a/substrate/frame/contracts/src/chain_extension.rs b/substrate/frame/contracts/src/chain_extension.rs
index 6d1f3df90f23eeda189e3c56e0ffdd00aff0888b..664504d207f3af75641abcb3684410b496521db8 100644
--- a/substrate/frame/contracts/src/chain_extension.rs
+++ b/substrate/frame/contracts/src/chain_extension.rs
@@ -79,7 +79,7 @@ use frame_support::weights::Weight;
 use sp_runtime::DispatchError;
 use sp_std::{marker::PhantomData, vec::Vec};
 
-pub use crate::{exec::Ext, gas::ChargedAmount, Config};
+pub use crate::{exec::Ext, gas::ChargedAmount, storage::meter::Diff, Config};
 pub use frame_system::Config as SysConfig;
 pub use pallet_contracts_primitives::ReturnFlags;
 
diff --git a/substrate/frame/contracts/src/exec.rs b/substrate/frame/contracts/src/exec.rs
index 9e5fd780ac6ca72a23d263ca3f9d85686b26882c..65a9abe0c39b6bb3113bbe0f7708b114fdf23538 100644
--- a/substrate/frame/contracts/src/exec.rs
+++ b/substrate/frame/contracts/src/exec.rs
@@ -19,7 +19,7 @@
 use crate::unsafe_debug::ExecutionObserver;
 use crate::{
 	gas::GasMeter,
-	storage::{self, DepositAccount, WriteOutcome},
+	storage::{self, meter::Diff, DepositAccount, WriteOutcome},
 	BalanceOf, CodeHash, CodeInfo, CodeInfoOf, Config, ContractInfo, ContractInfoOf,
 	DebugBufferVec, Determinism, Error, Event, Nonce, Origin, Pallet as Contracts, Schedule,
 	System, WasmBlob, LOG_TARGET,
@@ -274,6 +274,9 @@ pub trait Ext: sealing::Sealed {
 	/// Get a mutable reference to the nested gas meter.
 	fn gas_meter_mut(&mut self) -> &mut GasMeter<Self::T>;
 
+	/// Charges `diff` from the meter.
+	fn charge_storage(&mut self, diff: &Diff);
+
 	/// Append a string to the debug buffer.
 	///
 	/// It is added as-is without any additional new line.
@@ -1451,6 +1454,10 @@ where
 		&mut self.top_frame_mut().nested_gas
 	}
 
+	fn charge_storage(&mut self, diff: &Diff) {
+		self.top_frame_mut().nested_storage.charge(diff)
+	}
+
 	fn append_debug_buffer(&mut self, msg: &str) -> bool {
 		if let Some(buffer) = &mut self.debug_message {
 			buffer
diff --git a/substrate/frame/contracts/src/wasm/mod.rs b/substrate/frame/contracts/src/wasm/mod.rs
index 551bfba3fbe6f5dd1ffc8703bf7f9e7d9e3e714d..291f39f7fa797462dcfc4825234f837ac94787b6 100644
--- a/substrate/frame/contracts/src/wasm/mod.rs
+++ b/substrate/frame/contracts/src/wasm/mod.rs
@@ -701,6 +701,7 @@ mod tests {
 		fn gas_meter_mut(&mut self) -> &mut GasMeter<Self::T> {
 			&mut self.gas_meter
 		}
+		fn charge_storage(&mut self, _diff: &crate::storage::meter::Diff) {}
 		fn append_debug_buffer(&mut self, msg: &str) -> bool {
 			self.debug_buffer.extend(msg.as_bytes());
 			true