From 91d2ac11b3250bbbf53aba9d5e5bee34bfa1a3dd Mon Sep 17 00:00:00 2001 From: PG Herveou Date: Thu, 17 Aug 2023 15:37:53 +0200 Subject: [PATCH] Contracts: expose charge_storage to chain_extension (#14712) * Contracts: expose charge_storage to chain_extension * fix typo * export Diff --- substrate/frame/contracts/src/chain_extension.rs | 2 +- substrate/frame/contracts/src/exec.rs | 9 ++++++++- substrate/frame/contracts/src/wasm/mod.rs | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/substrate/frame/contracts/src/chain_extension.rs b/substrate/frame/contracts/src/chain_extension.rs index 6d1f3df90f..664504d207 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 9e5fd780ac..65a9abe0c3 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; + /// 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 551bfba3fb..291f39f7fa 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 { &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