diff --git a/prdoc/pr_6908.prdoc b/prdoc/pr_6908.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..0be9e613f88ae028dc7845b7637b7ba7b1f2e300
--- /dev/null
+++ b/prdoc/pr_6908.prdoc
@@ -0,0 +1,12 @@
+title: '[pallet-revive] implement the ref_time_left API'
+doc:
+- audience: Runtime Dev
+  description: This PR implements the ref_time_left API method. Solidity knows only
+    a single "gas" dimension; Solidity contracts will use this to query the gas left.
+crates:
+- name: pallet-revive-fixtures
+  bump: minor
+- name: pallet-revive
+  bump: minor
+- name: pallet-revive-uapi
+  bump: minor
diff --git a/substrate/frame/revive/fixtures/contracts/ref_time_left.rs b/substrate/frame/revive/fixtures/contracts/ref_time_left.rs
new file mode 100644
index 0000000000000000000000000000000000000000..aa892a8ba440efb570dd2e124163237eb63f5896
--- /dev/null
+++ b/substrate/frame/revive/fixtures/contracts/ref_time_left.rs
@@ -0,0 +1,34 @@
+// This file is part of Substrate.
+
+// Copyright (C) Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// 	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#![no_std]
+#![no_main]
+
+extern crate common;
+use uapi::{HostFn, HostFnImpl as api, ReturnFlags};
+
+#[no_mangle]
+#[polkavm_derive::polkavm_export]
+pub extern "C" fn deploy() {
+	assert!(api::ref_time_left() > api::ref_time_left());
+}
+
+#[no_mangle]
+#[polkavm_derive::polkavm_export]
+pub extern "C" fn call() {
+	api::return_value(ReturnFlags::empty(), &api::ref_time_left().to_le_bytes());
+}
diff --git a/substrate/frame/revive/src/benchmarking/mod.rs b/substrate/frame/revive/src/benchmarking/mod.rs
index 1947d310baf29f0e2be168544ff48753f7eb3a44..28736cd8d5da2286f398763f63f2ee09e4c70c2f 100644
--- a/substrate/frame/revive/src/benchmarking/mod.rs
+++ b/substrate/frame/revive/src/benchmarking/mod.rs
@@ -671,6 +671,18 @@ mod benchmarks {
 		);
 	}
 
+	#[benchmark(pov_mode = Measured)]
+	fn seal_ref_time_left() {
+		build_runtime!(runtime, memory: [vec![], ]);
+
+		let result;
+		#[block]
+		{
+			result = runtime.bench_ref_time_left(memory.as_mut_slice());
+		}
+		assert_eq!(result.unwrap(), runtime.ext().gas_meter().gas_left().ref_time());
+	}
+
 	#[benchmark(pov_mode = Measured)]
 	fn seal_balance() {
 		build_runtime!(runtime, memory: [[0u8;32], ]);
diff --git a/substrate/frame/revive/src/tests.rs b/substrate/frame/revive/src/tests.rs
index 7ca08303316edd9092f6df1dc930b4b6e87099fe..b73f50e34bc5a552251806bd0089d573b70abc30 100644
--- a/substrate/frame/revive/src/tests.rs
+++ b/substrate/frame/revive/src/tests.rs
@@ -1874,6 +1874,27 @@ fn lazy_batch_removal_works() {
 	});
 }
 
+#[test]
+fn ref_time_left_api_works() {
+	let (code, _) = compile_module("ref_time_left").unwrap();
+
+	ExtBuilder::default().existential_deposit(100).build().execute_with(|| {
+		let _ = <Test as Config>::Currency::set_balance(&ALICE, 1_000_000);
+
+		// Create fixture: Constructor calls ref_time_left twice and asserts it to decrease
+		let Contract { addr, .. } =
+			builder::bare_instantiate(Code::Upload(code)).build_and_unwrap_contract();
+
+		// Call the contract: It echoes back the ref_time returned by the ref_time_left API.
+		let received = builder::bare_call(addr).build_and_unwrap_result();
+		assert_eq!(received.flags, ReturnFlags::empty());
+
+		let returned_value = u64::from_le_bytes(received.data[..8].try_into().unwrap());
+		assert!(returned_value > 0);
+		assert!(returned_value < GAS_LIMIT.ref_time());
+	});
+}
+
 #[test]
 fn lazy_removal_partial_remove_works() {
 	let (code, _hash) = compile_module("self_destruct").unwrap();
diff --git a/substrate/frame/revive/src/wasm/runtime.rs b/substrate/frame/revive/src/wasm/runtime.rs
index 8f944b530e86e1adf02f10848a09fb807c6a95aa..47fdfa8bab09503543d11d49a9e0babc938a2442 100644
--- a/substrate/frame/revive/src/wasm/runtime.rs
+++ b/substrate/frame/revive/src/wasm/runtime.rs
@@ -306,6 +306,8 @@ pub enum RuntimeCosts {
 	CallerIsRoot,
 	/// Weight of calling `seal_address`.
 	Address,
+	/// Weight of calling `seal_ref_time_left`.
+	RefTimeLeft,
 	/// Weight of calling `seal_weight_left`.
 	WeightLeft,
 	/// Weight of calling `seal_balance`.
@@ -462,6 +464,7 @@ impl<T: Config> Token<T> for RuntimeCosts {
 			CallerIsOrigin => T::WeightInfo::seal_caller_is_origin(),
 			CallerIsRoot => T::WeightInfo::seal_caller_is_root(),
 			Address => T::WeightInfo::seal_address(),
+			RefTimeLeft => T::WeightInfo::seal_ref_time_left(),
 			WeightLeft => T::WeightInfo::seal_weight_left(),
 			Balance => T::WeightInfo::seal_balance(),
 			BalanceOf => T::WeightInfo::seal_balance_of(),
@@ -1701,6 +1704,14 @@ pub mod env {
 		Ok(result?)
 	}
 
+	/// Returns the amount of ref_time left.
+	/// See [`pallet_revive_uapi::HostFn::ref_time_left`].
+	#[stable]
+	fn ref_time_left(&mut self, memory: &mut M) -> Result<u64, TrapReason> {
+		self.charge_gas(RuntimeCosts::RefTimeLeft)?;
+		Ok(self.ext.gas_meter().gas_left().ref_time())
+	}
+
 	/// Call into the chain extension provided by the chain if any.
 	/// See [`pallet_revive_uapi::HostFn::call_chain_extension`].
 	fn call_chain_extension(
diff --git a/substrate/frame/revive/src/weights.rs b/substrate/frame/revive/src/weights.rs
index 94bd0397a0d5cf0ee6b0ae0586c652c392371aa6..03899fb3f20aa0e66ba6069bf7f8ccf1ba4200b0 100644
--- a/substrate/frame/revive/src/weights.rs
+++ b/substrate/frame/revive/src/weights.rs
@@ -18,9 +18,9 @@
 //! Autogenerated weights for `pallet_revive`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
-//! DATE: 2024-12-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2024-12-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `a0d5968554fc`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
+//! HOSTNAME: `4ca2a44ee243`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
 //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024`
 
 // Executed Command:
@@ -74,6 +74,7 @@ pub trait WeightInfo {
 	fn seal_caller_is_root() -> Weight;
 	fn seal_address() -> Weight;
 	fn seal_weight_left() -> Weight;
+	fn seal_ref_time_left() -> Weight;
 	fn seal_balance() -> Weight;
 	fn seal_balance_of() -> Weight;
 	fn seal_get_immutable_data(n: u32, ) -> Weight;
@@ -85,8 +86,8 @@ pub trait WeightInfo {
 	fn seal_block_hash() -> Weight;
 	fn seal_now() -> Weight;
 	fn seal_weight_to_fee() -> Weight;
-	fn seal_call_data_load() -> Weight;
 	fn seal_copy_to_contract(n: u32, ) -> Weight;
+	fn seal_call_data_load() -> Weight;
 	fn seal_call_data_copy(n: u32, ) -> Weight;
 	fn seal_return(n: u32, ) -> Weight;
 	fn seal_terminate(n: u32, ) -> Weight;
@@ -136,8 +137,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `1594`
-		// Minimum execution time: 2_921_000 picoseconds.
-		Weight::from_parts(3_048_000, 1594)
+		// Minimum execution time: 2_729_000 picoseconds.
+		Weight::from_parts(2_919_000, 1594)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -147,10 +148,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `425 + k * (69 ±0)`
 		//  Estimated: `415 + k * (70 ±0)`
-		// Minimum execution time: 16_060_000 picoseconds.
-		Weight::from_parts(3_234_033, 415)
-			// Standard Error: 1_160
-			.saturating_add(Weight::from_parts(1_184_188, 0).saturating_mul(k.into()))
+		// Minimum execution time: 16_062_000 picoseconds.
+		Weight::from_parts(2_790_037, 415)
+			// Standard Error: 1_371
+			.saturating_add(Weight::from_parts(1_187_192, 0).saturating_mul(k.into()))
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into())))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
@@ -172,10 +173,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// The range of component `c` is `[0, 262144]`.
 	fn call_with_code_per_byte(_c: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1536`
-		//  Estimated: `7476`
-		// Minimum execution time: 93_624_000 picoseconds.
-		Weight::from_parts(98_332_129, 7476)
+		//  Measured:  `1465`
+		//  Estimated: `7405`
+		// Minimum execution time: 94_592_000 picoseconds.
+		Weight::from_parts(100_095_688, 7405)
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -198,13 +199,13 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	fn instantiate_with_code(c: u32, i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `416`
-		//  Estimated: `6345`
-		// Minimum execution time: 196_202_000 picoseconds.
-		Weight::from_parts(169_823_092, 6345)
+		//  Estimated: `6348`
+		// Minimum execution time: 205_430_000 picoseconds.
+		Weight::from_parts(190_302_613, 6348)
 			// Standard Error: 10
-			.saturating_add(Weight::from_parts(30, 0).saturating_mul(c.into()))
+			.saturating_add(Weight::from_parts(2, 0).saturating_mul(c.into()))
 			// Standard Error: 10
-			.saturating_add(Weight::from_parts(4_487, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(4_465, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(6_u64))
 	}
@@ -225,12 +226,12 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// The range of component `i` is `[0, 262144]`.
 	fn instantiate(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1296`
-		//  Estimated: `4753`
-		// Minimum execution time: 162_423_000 picoseconds.
-		Weight::from_parts(144_467_590, 4753)
-			// Standard Error: 16
-			.saturating_add(Weight::from_parts(4_405, 0).saturating_mul(i.into()))
+		//  Measured:  `1309`
+		//  Estimated: `4760`
+		// Minimum execution time: 168_842_000 picoseconds.
+		Weight::from_parts(154_652_310, 4760)
+			// Standard Error: 15
+			.saturating_add(Weight::from_parts(4_407, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(4_u64))
 	}
@@ -248,10 +249,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`)
 	fn call() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1536`
-		//  Estimated: `7476`
-		// Minimum execution time: 144_454_000 picoseconds.
-		Weight::from_parts(151_756_000, 7476)
+		//  Measured:  `1465`
+		//  Estimated: `7405`
+		// Minimum execution time: 144_703_000 picoseconds.
+		Weight::from_parts(151_937_000, 7405)
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -266,8 +267,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 50_712_000 picoseconds.
-		Weight::from_parts(52_831_382, 3574)
+		// Minimum execution time: 52_912_000 picoseconds.
+		Weight::from_parts(54_905_094, 3574)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -281,8 +282,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `285`
 		//  Estimated: `3750`
-		// Minimum execution time: 44_441_000 picoseconds.
-		Weight::from_parts(46_242_000, 3750)
+		// Minimum execution time: 46_323_000 picoseconds.
+		Weight::from_parts(47_075_000, 3750)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -294,8 +295,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `529`
 		//  Estimated: `6469`
-		// Minimum execution time: 27_157_000 picoseconds.
-		Weight::from_parts(28_182_000, 6469)
+		// Minimum execution time: 27_120_000 picoseconds.
+		Weight::from_parts(28_635_000, 6469)
 			.saturating_add(T::DbWeight::get().reads(3_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -307,8 +308,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 40_588_000 picoseconds.
-		Weight::from_parts(41_125_000, 3574)
+		// Minimum execution time: 42_489_000 picoseconds.
+		Weight::from_parts(43_230_000, 3574)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -320,8 +321,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `56`
 		//  Estimated: `3521`
-		// Minimum execution time: 31_849_000 picoseconds.
-		Weight::from_parts(32_674_000, 3521)
+		// Minimum execution time: 34_042_000 picoseconds.
+		Weight::from_parts(34_758_000, 3521)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -333,8 +334,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `145`
 		//  Estimated: `3610`
-		// Minimum execution time: 14_510_000 picoseconds.
-		Weight::from_parts(14_986_000, 3610)
+		// Minimum execution time: 14_322_000 picoseconds.
+		Weight::from_parts(14_761_000, 3610)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 	}
 	/// The range of component `r` is `[0, 1600]`.
@@ -342,24 +343,24 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 7_324_000 picoseconds.
-		Weight::from_parts(8_363_388, 0)
-			// Standard Error: 230
-			.saturating_add(Weight::from_parts(170_510, 0).saturating_mul(r.into()))
+		// Minimum execution time: 14_300_000 picoseconds.
+		Weight::from_parts(14_435_272, 0)
+			// Standard Error: 357
+			.saturating_add(Weight::from_parts(151_410, 0).saturating_mul(r.into()))
 	}
 	fn seal_caller() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 275_000 picoseconds.
-		Weight::from_parts(326_000, 0)
+		// Minimum execution time: 315_000 picoseconds.
+		Weight::from_parts(355_000, 0)
 	}
 	fn seal_origin() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 263_000 picoseconds.
-		Weight::from_parts(292_000, 0)
+		// Minimum execution time: 252_000 picoseconds.
+		Weight::from_parts(300_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -367,8 +368,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `306`
 		//  Estimated: `3771`
-		// Minimum execution time: 10_011_000 picoseconds.
-		Weight::from_parts(10_476_000, 3771)
+		// Minimum execution time: 10_073_000 picoseconds.
+		Weight::from_parts(10_791_000, 3771)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
@@ -377,16 +378,16 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `403`
 		//  Estimated: `3868`
-		// Minimum execution time: 11_253_000 picoseconds.
-		Weight::from_parts(11_642_000, 3868)
+		// Minimum execution time: 11_216_000 picoseconds.
+		Weight::from_parts(11_917_000, 3868)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	fn seal_own_code_hash() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(318_000, 0)
+		// Minimum execution time: 269_000 picoseconds.
+		Weight::from_parts(308_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -396,44 +397,51 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `473`
 		//  Estimated: `3938`
-		// Minimum execution time: 14_904_000 picoseconds.
-		Weight::from_parts(15_281_000, 3938)
+		// Minimum execution time: 15_159_000 picoseconds.
+		Weight::from_parts(15_933_000, 3938)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 	}
 	fn seal_caller_is_origin() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 382_000 picoseconds.
-		Weight::from_parts(422_000, 0)
+		// Minimum execution time: 367_000 picoseconds.
+		Weight::from_parts(391_000, 0)
 	}
 	fn seal_caller_is_root() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 258_000 picoseconds.
-		Weight::from_parts(310_000, 0)
+		// Minimum execution time: 294_000 picoseconds.
+		Weight::from_parts(331_000, 0)
 	}
 	fn seal_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 283_000 picoseconds.
-		Weight::from_parts(315_000, 0)
+		// Minimum execution time: 275_000 picoseconds.
+		Weight::from_parts(318_000, 0)
 	}
 	fn seal_weight_left() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 637_000 picoseconds.
-		Weight::from_parts(726_000, 0)
+		// Minimum execution time: 660_000 picoseconds.
+		Weight::from_parts(697_000, 0)
+	}
+	fn seal_ref_time_left() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 288_000 picoseconds.
+		Weight::from_parts(306_000, 0)
 	}
 	fn seal_balance() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `103`
+		//  Measured:  `140`
 		//  Estimated: `0`
-		// Minimum execution time: 4_649_000 picoseconds.
-		Weight::from_parts(4_860_000, 0)
+		// Minimum execution time: 5_577_000 picoseconds.
+		Weight::from_parts(5_918_000, 0)
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -443,8 +451,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `264`
 		//  Estimated: `3729`
-		// Minimum execution time: 9_053_000 picoseconds.
-		Weight::from_parts(9_480_000, 3729)
+		// Minimum execution time: 9_264_000 picoseconds.
+		Weight::from_parts(9_589_000, 3729)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 	}
 	/// Storage: `Revive::ImmutableDataOf` (r:1 w:0)
@@ -454,10 +462,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `238 + n * (1 ±0)`
 		//  Estimated: `3703 + n * (1 ±0)`
-		// Minimum execution time: 5_991_000 picoseconds.
-		Weight::from_parts(6_760_389, 3703)
-			// Standard Error: 5
-			.saturating_add(Weight::from_parts(627, 0).saturating_mul(n.into()))
+		// Minimum execution time: 6_082_000 picoseconds.
+		Weight::from_parts(6_789_222, 3703)
+			// Standard Error: 4
+			.saturating_add(Weight::from_parts(670, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -468,39 +476,39 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_062_000 picoseconds.
-		Weight::from_parts(2_277_051, 0)
+		// Minimum execution time: 1_950_000 picoseconds.
+		Weight::from_parts(2_244_232, 0)
 			// Standard Error: 2
-			.saturating_add(Weight::from_parts(530, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(574, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
 	fn seal_value_transferred() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 267_000 picoseconds.
-		Weight::from_parts(299_000, 0)
+		// Minimum execution time: 254_000 picoseconds.
+		Weight::from_parts(304_000, 0)
 	}
 	fn seal_minimum_balance() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 263_000 picoseconds.
-		Weight::from_parts(318_000, 0)
+		// Minimum execution time: 251_000 picoseconds.
+		Weight::from_parts(292_000, 0)
 	}
 	fn seal_call_data_size() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 264_000 picoseconds.
-		Weight::from_parts(303_000, 0)
+		// Minimum execution time: 262_000 picoseconds.
+		Weight::from_parts(288_000, 0)
 	}
 	fn seal_block_number() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 267_000 picoseconds.
-		Weight::from_parts(296_000, 0)
+		// Minimum execution time: 269_000 picoseconds.
+		Weight::from_parts(302_000, 0)
 	}
 	/// Storage: `System::BlockHash` (r:1 w:0)
 	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `Measured`)
@@ -508,60 +516,60 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `30`
 		//  Estimated: `3495`
-		// Minimum execution time: 3_622_000 picoseconds.
-		Weight::from_parts(3_794_000, 3495)
+		// Minimum execution time: 3_690_000 picoseconds.
+		Weight::from_parts(3_791_000, 3495)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	fn seal_now() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(298_000, 0)
+		// Minimum execution time: 261_000 picoseconds.
+		Weight::from_parts(307_000, 0)
 	}
 	fn seal_weight_to_fee() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_340_000 picoseconds.
-		Weight::from_parts(1_483_000, 0)
+		// Minimum execution time: 1_417_000 picoseconds.
+		Weight::from_parts(1_547_000, 0)
 	}
-	fn seal_call_data_load() -> Weight {
+	/// The range of component `n` is `[0, 262140]`.
+	fn seal_copy_to_contract(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(295_000, 0)
+		// Minimum execution time: 364_000 picoseconds.
+		Weight::from_parts(566_499, 0)
+			// Standard Error: 0
+			.saturating_add(Weight::from_parts(237, 0).saturating_mul(n.into()))
 	}
-	/// The range of component `n` is `[0, 262140]`.
-	fn seal_copy_to_contract(n: u32, ) -> Weight {
+	fn seal_call_data_load() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 369_000 picoseconds.
-		Weight::from_parts(544_048, 0)
-			// Standard Error: 0
-			.saturating_add(Weight::from_parts(200, 0).saturating_mul(n.into()))
+		// Minimum execution time: 279_000 picoseconds.
+		Weight::from_parts(305_000, 0)
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_call_data_copy(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(123_748, 0)
+		// Minimum execution time: 265_000 picoseconds.
+		Weight::from_parts(359_300, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(114, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(148, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262140]`.
 	fn seal_return(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 291_000 picoseconds.
-		Weight::from_parts(846_264, 0)
+		// Minimum execution time: 278_000 picoseconds.
+		Weight::from_parts(474_421, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(200, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(237, 0).saturating_mul(n.into()))
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -577,11 +585,11 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	fn seal_terminate(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `324 + n * (88 ±0)`
-		//  Estimated: `3791 + n * (2563 ±0)`
-		// Minimum execution time: 22_494_000 picoseconds.
-		Weight::from_parts(23_028_153, 3791)
-			// Standard Error: 12_407
-			.saturating_add(Weight::from_parts(4_238_442, 0).saturating_mul(n.into()))
+		//  Estimated: `3790 + n * (2563 ±0)`
+		// Minimum execution time: 23_182_000 picoseconds.
+		Weight::from_parts(23_833_588, 3790)
+			// Standard Error: 12_448
+			.saturating_add(Weight::from_parts(4_277_757, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(3_u64))
 			.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
 			.saturating_add(T::DbWeight::get().writes(4_u64))
@@ -594,22 +602,22 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 4_383_000 picoseconds.
-		Weight::from_parts(4_364_292, 0)
-			// Standard Error: 2_775
-			.saturating_add(Weight::from_parts(210_189, 0).saturating_mul(t.into()))
-			// Standard Error: 24
-			.saturating_add(Weight::from_parts(952, 0).saturating_mul(n.into()))
+		// Minimum execution time: 4_433_000 picoseconds.
+		Weight::from_parts(4_321_363, 0)
+			// Standard Error: 2_536
+			.saturating_add(Weight::from_parts(207_597, 0).saturating_mul(t.into()))
+			// Standard Error: 22
+			.saturating_add(Weight::from_parts(957, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `i` is `[0, 262144]`.
 	fn seal_debug_message(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 328_000 picoseconds.
-		Weight::from_parts(393_925, 0)
+		// Minimum execution time: 353_000 picoseconds.
+		Weight::from_parts(78_798, 0)
 			// Standard Error: 1
-			.saturating_add(Weight::from_parts(725, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(762, 0).saturating_mul(i.into()))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
 	/// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`)
@@ -617,8 +625,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 7_649_000 picoseconds.
-		Weight::from_parts(8_025_000, 744)
+		// Minimum execution time: 7_701_000 picoseconds.
+		Weight::from_parts(8_043_000, 744)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -627,8 +635,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 43_439_000 picoseconds.
-		Weight::from_parts(44_296_000, 10754)
+		// Minimum execution time: 42_961_000 picoseconds.
+		Weight::from_parts(44_719_000, 10754)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -637,8 +645,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 8_919_000 picoseconds.
-		Weight::from_parts(9_392_000, 744)
+		// Minimum execution time: 8_575_000 picoseconds.
+		Weight::from_parts(9_239_000, 744)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -648,8 +656,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 45_032_000 picoseconds.
-		Weight::from_parts(46_050_000, 10754)
+		// Minimum execution time: 43_585_000 picoseconds.
+		Weight::from_parts(45_719_000, 10754)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -661,12 +669,12 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + o * (1 ±0)`
 		//  Estimated: `247 + o * (1 ±0)`
-		// Minimum execution time: 9_272_000 picoseconds.
-		Weight::from_parts(10_022_838, 247)
-			// Standard Error: 43
-			.saturating_add(Weight::from_parts(513, 0).saturating_mul(n.into()))
-			// Standard Error: 43
-			.saturating_add(Weight::from_parts(625, 0).saturating_mul(o.into()))
+		// Minimum execution time: 9_147_000 picoseconds.
+		Weight::from_parts(9_851_872, 247)
+			// Standard Error: 40
+			.saturating_add(Weight::from_parts(222, 0).saturating_mul(n.into()))
+			// Standard Error: 40
+			.saturating_add(Weight::from_parts(411, 0).saturating_mul(o.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(o.into()))
@@ -678,10 +686,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_885_000 picoseconds.
-		Weight::from_parts(9_785_932, 247)
+		// Minimum execution time: 8_859_000 picoseconds.
+		Weight::from_parts(9_633_190, 247)
 			// Standard Error: 55
-			.saturating_add(Weight::from_parts(612, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(995, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
@@ -693,10 +701,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_440_000 picoseconds.
-		Weight::from_parts(9_453_769, 247)
-			// Standard Error: 62
-			.saturating_add(Weight::from_parts(1_529, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_270_000 picoseconds.
+		Weight::from_parts(9_208_849, 247)
+			// Standard Error: 67
+			.saturating_add(Weight::from_parts(1_686, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -707,10 +715,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_212_000 picoseconds.
-		Weight::from_parts(8_880_676, 247)
-			// Standard Error: 54
-			.saturating_add(Weight::from_parts(673, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_002_000 picoseconds.
+		Weight::from_parts(8_695_892, 247)
+			// Standard Error: 48
+			.saturating_add(Weight::from_parts(721, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -721,10 +729,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 9_491_000 picoseconds.
-		Weight::from_parts(10_313_570, 247)
-			// Standard Error: 65
-			.saturating_add(Weight::from_parts(1_681, 0).saturating_mul(n.into()))
+		// Minimum execution time: 9_204_000 picoseconds.
+		Weight::from_parts(10_176_756, 247)
+			// Standard Error: 57
+			.saturating_add(Weight::from_parts(1_550, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
@@ -733,36 +741,36 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_530_000 picoseconds.
-		Weight::from_parts(1_642_000, 0)
+		// Minimum execution time: 1_518_000 picoseconds.
+		Weight::from_parts(1_578_000, 0)
 	}
 	fn set_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_851_000 picoseconds.
-		Weight::from_parts(1_999_000, 0)
+		// Minimum execution time: 1_846_000 picoseconds.
+		Weight::from_parts(1_996_000, 0)
 	}
 	fn get_transient_storage_empty() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_429_000 picoseconds.
-		Weight::from_parts(1_527_000, 0)
+		// Minimum execution time: 1_442_000 picoseconds.
+		Weight::from_parts(1_562_000, 0)
 	}
 	fn get_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_689_000 picoseconds.
-		Weight::from_parts(1_772_000, 0)
+		// Minimum execution time: 1_602_000 picoseconds.
+		Weight::from_parts(1_730_000, 0)
 	}
 	fn rollback_transient_storage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_049_000 picoseconds.
-		Weight::from_parts(1_153_000, 0)
+		// Minimum execution time: 1_096_000 picoseconds.
+		Weight::from_parts(1_176_000, 0)
 	}
 	/// The range of component `n` is `[0, 512]`.
 	/// The range of component `o` is `[0, 512]`.
@@ -770,52 +778,52 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_338_000 picoseconds.
-		Weight::from_parts(2_514_685, 0)
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(299, 0).saturating_mul(n.into()))
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(403, 0).saturating_mul(o.into()))
+		// Minimum execution time: 2_328_000 picoseconds.
+		Weight::from_parts(2_470_198, 0)
+			// Standard Error: 14
+			.saturating_add(Weight::from_parts(256, 0).saturating_mul(n.into()))
+			// Standard Error: 14
+			.saturating_add(Weight::from_parts(441, 0).saturating_mul(o.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_clear_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_045_000 picoseconds.
-		Weight::from_parts(2_409_843, 0)
-			// Standard Error: 16
-			.saturating_add(Weight::from_parts(350, 0).saturating_mul(n.into()))
+		// Minimum execution time: 2_037_000 picoseconds.
+		Weight::from_parts(2_439_061, 0)
+			// Standard Error: 17
+			.saturating_add(Weight::from_parts(303, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_get_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_891_000 picoseconds.
-		Weight::from_parts(2_117_702, 0)
+		// Minimum execution time: 1_900_000 picoseconds.
+		Weight::from_parts(2_095_135, 0)
 			// Standard Error: 12
-			.saturating_add(Weight::from_parts(289, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(310, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_contains_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_786_000 picoseconds.
-		Weight::from_parts(1_949_290, 0)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(232, 0).saturating_mul(n.into()))
+		// Minimum execution time: 1_772_000 picoseconds.
+		Weight::from_parts(1_964_542, 0)
+			// Standard Error: 16
+			.saturating_add(Weight::from_parts(298, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_take_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_465_000 picoseconds.
-		Weight::from_parts(2_712_107, 0)
-			// Standard Error: 14
-			.saturating_add(Weight::from_parts(79, 0).saturating_mul(n.into()))
+		// Minimum execution time: 2_555_000 picoseconds.
+		Weight::from_parts(2_864_143, 0)
+			// Standard Error: 22
+			.saturating_add(Weight::from_parts(45, 0).saturating_mul(n.into()))
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -829,20 +837,18 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`)
 	/// The range of component `t` is `[0, 1]`.
 	/// The range of component `i` is `[0, 262144]`.
-	fn seal_call(t: u32, i: u32, ) -> Weight {
-		// Proof Size summary in bytes:
-		//  Measured:  `1294 + t * (243 ±0)`
-		//  Estimated: `4759 + t * (2501 ±0)`
-		// Minimum execution time: 41_377_000 picoseconds.
-		Weight::from_parts(43_024_676, 4759)
-			// Standard Error: 44_099
-			.saturating_add(Weight::from_parts(1_689_315, 0).saturating_mul(t.into()))
-			// Standard Error: 0
-			.saturating_add(Weight::from_parts(2, 0).saturating_mul(i.into()))
+	fn seal_call(t: u32, _i: u32, ) -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `1292 + t * (280 ±0)`
+		//  Estimated: `4757 + t * (2518 ±0)`
+		// Minimum execution time: 40_760_000 picoseconds.
+		Weight::from_parts(45_131_001, 4757)
+			// Standard Error: 302_594
+			.saturating_add(Weight::from_parts(2_769_232, 0).saturating_mul(t.into()))
 			.saturating_add(T::DbWeight::get().reads(4_u64))
 			.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(t.into())))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
-			.saturating_add(Weight::from_parts(0, 2501).saturating_mul(t.into()))
+			.saturating_add(Weight::from_parts(0, 2518).saturating_mul(t.into()))
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -854,8 +860,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `1237`
 		//  Estimated: `4702`
-		// Minimum execution time: 36_324_000 picoseconds.
-		Weight::from_parts(37_657_000, 4702)
+		// Minimum execution time: 36_975_000 picoseconds.
+		Weight::from_parts(38_368_000, 4702)
 			.saturating_add(T::DbWeight::get().reads(3_u64))
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
@@ -869,12 +875,12 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// The range of component `i` is `[0, 262144]`.
 	fn seal_instantiate(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1273`
-		//  Estimated: `4736`
-		// Minimum execution time: 117_657_000 picoseconds.
-		Weight::from_parts(110_177_403, 4736)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(4_097, 0).saturating_mul(i.into()))
+		//  Measured:  `1310`
+		//  Estimated: `4769`
+		// Minimum execution time: 122_553_000 picoseconds.
+		Weight::from_parts(117_325_822, 4769)
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(4_147, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(4_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -883,64 +889,64 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 650_000 picoseconds.
-		Weight::from_parts(4_208_007, 0)
+		// Minimum execution time: 657_000 picoseconds.
+		Weight::from_parts(3_531_259, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_396, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_428, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_hash_keccak_256(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_101_000 picoseconds.
-		Weight::from_parts(4_521_803, 0)
+		// Minimum execution time: 1_072_000 picoseconds.
+		Weight::from_parts(5_487_006, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(3_609, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(3_634, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_hash_blake2_256(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 654_000 picoseconds.
-		Weight::from_parts(3_060_461, 0)
+		// Minimum execution time: 638_000 picoseconds.
+		Weight::from_parts(3_097_177, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_531, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_551, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_hash_blake2_128(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 628_000 picoseconds.
-		Weight::from_parts(3_784_567, 0)
+		// Minimum execution time: 682_000 picoseconds.
+		Weight::from_parts(2_963_774, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_526, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_561, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 261889]`.
 	fn seal_sr25519_verify(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 42_892_000 picoseconds.
-		Weight::from_parts(25_002_714, 0)
-			// Standard Error: 12
-			.saturating_add(Weight::from_parts(5_252, 0).saturating_mul(n.into()))
+		// Minimum execution time: 42_791_000 picoseconds.
+		Weight::from_parts(27_471_391, 0)
+			// Standard Error: 13
+			.saturating_add(Weight::from_parts(5_246, 0).saturating_mul(n.into()))
 	}
 	fn seal_ecdsa_recover() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 46_990_000 picoseconds.
-		Weight::from_parts(48_960_000, 0)
+		// Minimum execution time: 46_565_000 picoseconds.
+		Weight::from_parts(48_251_000, 0)
 	}
 	fn seal_ecdsa_to_eth_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 12_870_000 picoseconds.
-		Weight::from_parts(13_062_000, 0)
+		// Minimum execution time: 12_562_000 picoseconds.
+		Weight::from_parts(12_664_000, 0)
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
@@ -948,8 +954,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `300`
 		//  Estimated: `3765`
-		// Minimum execution time: 17_810_000 picoseconds.
-		Weight::from_parts(18_667_000, 3765)
+		// Minimum execution time: 18_527_000 picoseconds.
+		Weight::from_parts(19_134_000, 3765)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -959,8 +965,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3803`
-		// Minimum execution time: 13_762_000 picoseconds.
-		Weight::from_parts(14_526_000, 3803)
+		// Minimum execution time: 13_843_000 picoseconds.
+		Weight::from_parts(14_750_000, 3803)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -970,8 +976,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3561`
-		// Minimum execution time: 12_753_000 picoseconds.
-		Weight::from_parts(13_199_000, 3561)
+		// Minimum execution time: 13_013_000 picoseconds.
+		Weight::from_parts(13_612_000, 3561)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -980,10 +986,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 9_060_000 picoseconds.
-		Weight::from_parts(10_131_024, 0)
-			// Standard Error: 72
-			.saturating_add(Weight::from_parts(71_842, 0).saturating_mul(r.into()))
+		// Minimum execution time: 15_182_000 picoseconds.
+		Weight::from_parts(16_987_060, 0)
+			// Standard Error: 105
+			.saturating_add(Weight::from_parts(72_086, 0).saturating_mul(r.into()))
 	}
 }
 
@@ -995,8 +1001,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `1594`
-		// Minimum execution time: 2_921_000 picoseconds.
-		Weight::from_parts(3_048_000, 1594)
+		// Minimum execution time: 2_729_000 picoseconds.
+		Weight::from_parts(2_919_000, 1594)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -1006,10 +1012,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `425 + k * (69 ±0)`
 		//  Estimated: `415 + k * (70 ±0)`
-		// Minimum execution time: 16_060_000 picoseconds.
-		Weight::from_parts(3_234_033, 415)
-			// Standard Error: 1_160
-			.saturating_add(Weight::from_parts(1_184_188, 0).saturating_mul(k.into()))
+		// Minimum execution time: 16_062_000 picoseconds.
+		Weight::from_parts(2_790_037, 415)
+			// Standard Error: 1_371
+			.saturating_add(Weight::from_parts(1_187_192, 0).saturating_mul(k.into()))
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(k.into())))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
@@ -1031,10 +1037,10 @@ impl WeightInfo for () {
 	/// The range of component `c` is `[0, 262144]`.
 	fn call_with_code_per_byte(_c: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1536`
-		//  Estimated: `7476`
-		// Minimum execution time: 93_624_000 picoseconds.
-		Weight::from_parts(98_332_129, 7476)
+		//  Measured:  `1465`
+		//  Estimated: `7405`
+		// Minimum execution time: 94_592_000 picoseconds.
+		Weight::from_parts(100_095_688, 7405)
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1057,13 +1063,13 @@ impl WeightInfo for () {
 	fn instantiate_with_code(c: u32, i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `416`
-		//  Estimated: `6345`
-		// Minimum execution time: 196_202_000 picoseconds.
-		Weight::from_parts(169_823_092, 6345)
+		//  Estimated: `6348`
+		// Minimum execution time: 205_430_000 picoseconds.
+		Weight::from_parts(190_302_613, 6348)
 			// Standard Error: 10
-			.saturating_add(Weight::from_parts(30, 0).saturating_mul(c.into()))
+			.saturating_add(Weight::from_parts(2, 0).saturating_mul(c.into()))
 			// Standard Error: 10
-			.saturating_add(Weight::from_parts(4_487, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(4_465, 0).saturating_mul(i.into()))
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(6_u64))
 	}
@@ -1084,12 +1090,12 @@ impl WeightInfo for () {
 	/// The range of component `i` is `[0, 262144]`.
 	fn instantiate(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1296`
-		//  Estimated: `4753`
-		// Minimum execution time: 162_423_000 picoseconds.
-		Weight::from_parts(144_467_590, 4753)
-			// Standard Error: 16
-			.saturating_add(Weight::from_parts(4_405, 0).saturating_mul(i.into()))
+		//  Measured:  `1309`
+		//  Estimated: `4760`
+		// Minimum execution time: 168_842_000 picoseconds.
+		Weight::from_parts(154_652_310, 4760)
+			// Standard Error: 15
+			.saturating_add(Weight::from_parts(4_407, 0).saturating_mul(i.into()))
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(4_u64))
 	}
@@ -1107,10 +1113,10 @@ impl WeightInfo for () {
 	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`)
 	fn call() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1536`
-		//  Estimated: `7476`
-		// Minimum execution time: 144_454_000 picoseconds.
-		Weight::from_parts(151_756_000, 7476)
+		//  Measured:  `1465`
+		//  Estimated: `7405`
+		// Minimum execution time: 144_703_000 picoseconds.
+		Weight::from_parts(151_937_000, 7405)
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1125,8 +1131,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 50_712_000 picoseconds.
-		Weight::from_parts(52_831_382, 3574)
+		// Minimum execution time: 52_912_000 picoseconds.
+		Weight::from_parts(54_905_094, 3574)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1140,8 +1146,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `285`
 		//  Estimated: `3750`
-		// Minimum execution time: 44_441_000 picoseconds.
-		Weight::from_parts(46_242_000, 3750)
+		// Minimum execution time: 46_323_000 picoseconds.
+		Weight::from_parts(47_075_000, 3750)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1153,8 +1159,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `529`
 		//  Estimated: `6469`
-		// Minimum execution time: 27_157_000 picoseconds.
-		Weight::from_parts(28_182_000, 6469)
+		// Minimum execution time: 27_120_000 picoseconds.
+		Weight::from_parts(28_635_000, 6469)
 			.saturating_add(RocksDbWeight::get().reads(3_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1166,8 +1172,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 40_588_000 picoseconds.
-		Weight::from_parts(41_125_000, 3574)
+		// Minimum execution time: 42_489_000 picoseconds.
+		Weight::from_parts(43_230_000, 3574)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1179,8 +1185,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `56`
 		//  Estimated: `3521`
-		// Minimum execution time: 31_849_000 picoseconds.
-		Weight::from_parts(32_674_000, 3521)
+		// Minimum execution time: 34_042_000 picoseconds.
+		Weight::from_parts(34_758_000, 3521)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1192,8 +1198,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `145`
 		//  Estimated: `3610`
-		// Minimum execution time: 14_510_000 picoseconds.
-		Weight::from_parts(14_986_000, 3610)
+		// Minimum execution time: 14_322_000 picoseconds.
+		Weight::from_parts(14_761_000, 3610)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 	}
 	/// The range of component `r` is `[0, 1600]`.
@@ -1201,24 +1207,24 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 7_324_000 picoseconds.
-		Weight::from_parts(8_363_388, 0)
-			// Standard Error: 230
-			.saturating_add(Weight::from_parts(170_510, 0).saturating_mul(r.into()))
+		// Minimum execution time: 14_300_000 picoseconds.
+		Weight::from_parts(14_435_272, 0)
+			// Standard Error: 357
+			.saturating_add(Weight::from_parts(151_410, 0).saturating_mul(r.into()))
 	}
 	fn seal_caller() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 275_000 picoseconds.
-		Weight::from_parts(326_000, 0)
+		// Minimum execution time: 315_000 picoseconds.
+		Weight::from_parts(355_000, 0)
 	}
 	fn seal_origin() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 263_000 picoseconds.
-		Weight::from_parts(292_000, 0)
+		// Minimum execution time: 252_000 picoseconds.
+		Weight::from_parts(300_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -1226,8 +1232,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `306`
 		//  Estimated: `3771`
-		// Minimum execution time: 10_011_000 picoseconds.
-		Weight::from_parts(10_476_000, 3771)
+		// Minimum execution time: 10_073_000 picoseconds.
+		Weight::from_parts(10_791_000, 3771)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
@@ -1236,16 +1242,16 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `403`
 		//  Estimated: `3868`
-		// Minimum execution time: 11_253_000 picoseconds.
-		Weight::from_parts(11_642_000, 3868)
+		// Minimum execution time: 11_216_000 picoseconds.
+		Weight::from_parts(11_917_000, 3868)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	fn seal_own_code_hash() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(318_000, 0)
+		// Minimum execution time: 269_000 picoseconds.
+		Weight::from_parts(308_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -1255,44 +1261,51 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `473`
 		//  Estimated: `3938`
-		// Minimum execution time: 14_904_000 picoseconds.
-		Weight::from_parts(15_281_000, 3938)
+		// Minimum execution time: 15_159_000 picoseconds.
+		Weight::from_parts(15_933_000, 3938)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 	}
 	fn seal_caller_is_origin() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 382_000 picoseconds.
-		Weight::from_parts(422_000, 0)
+		// Minimum execution time: 367_000 picoseconds.
+		Weight::from_parts(391_000, 0)
 	}
 	fn seal_caller_is_root() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 258_000 picoseconds.
-		Weight::from_parts(310_000, 0)
+		// Minimum execution time: 294_000 picoseconds.
+		Weight::from_parts(331_000, 0)
 	}
 	fn seal_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 283_000 picoseconds.
-		Weight::from_parts(315_000, 0)
+		// Minimum execution time: 275_000 picoseconds.
+		Weight::from_parts(318_000, 0)
 	}
 	fn seal_weight_left() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 637_000 picoseconds.
-		Weight::from_parts(726_000, 0)
+		// Minimum execution time: 660_000 picoseconds.
+		Weight::from_parts(697_000, 0)
+	}
+	fn seal_ref_time_left() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 288_000 picoseconds.
+		Weight::from_parts(306_000, 0)
 	}
 	fn seal_balance() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `103`
+		//  Measured:  `140`
 		//  Estimated: `0`
-		// Minimum execution time: 4_649_000 picoseconds.
-		Weight::from_parts(4_860_000, 0)
+		// Minimum execution time: 5_577_000 picoseconds.
+		Weight::from_parts(5_918_000, 0)
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -1302,8 +1315,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `264`
 		//  Estimated: `3729`
-		// Minimum execution time: 9_053_000 picoseconds.
-		Weight::from_parts(9_480_000, 3729)
+		// Minimum execution time: 9_264_000 picoseconds.
+		Weight::from_parts(9_589_000, 3729)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 	}
 	/// Storage: `Revive::ImmutableDataOf` (r:1 w:0)
@@ -1313,10 +1326,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `238 + n * (1 ±0)`
 		//  Estimated: `3703 + n * (1 ±0)`
-		// Minimum execution time: 5_991_000 picoseconds.
-		Weight::from_parts(6_760_389, 3703)
-			// Standard Error: 5
-			.saturating_add(Weight::from_parts(627, 0).saturating_mul(n.into()))
+		// Minimum execution time: 6_082_000 picoseconds.
+		Weight::from_parts(6_789_222, 3703)
+			// Standard Error: 4
+			.saturating_add(Weight::from_parts(670, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -1327,39 +1340,39 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_062_000 picoseconds.
-		Weight::from_parts(2_277_051, 0)
+		// Minimum execution time: 1_950_000 picoseconds.
+		Weight::from_parts(2_244_232, 0)
 			// Standard Error: 2
-			.saturating_add(Weight::from_parts(530, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(574, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
 	fn seal_value_transferred() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 267_000 picoseconds.
-		Weight::from_parts(299_000, 0)
+		// Minimum execution time: 254_000 picoseconds.
+		Weight::from_parts(304_000, 0)
 	}
 	fn seal_minimum_balance() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 263_000 picoseconds.
-		Weight::from_parts(318_000, 0)
+		// Minimum execution time: 251_000 picoseconds.
+		Weight::from_parts(292_000, 0)
 	}
 	fn seal_call_data_size() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 264_000 picoseconds.
-		Weight::from_parts(303_000, 0)
+		// Minimum execution time: 262_000 picoseconds.
+		Weight::from_parts(288_000, 0)
 	}
 	fn seal_block_number() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 267_000 picoseconds.
-		Weight::from_parts(296_000, 0)
+		// Minimum execution time: 269_000 picoseconds.
+		Weight::from_parts(302_000, 0)
 	}
 	/// Storage: `System::BlockHash` (r:1 w:0)
 	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `Measured`)
@@ -1367,60 +1380,60 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `30`
 		//  Estimated: `3495`
-		// Minimum execution time: 3_622_000 picoseconds.
-		Weight::from_parts(3_794_000, 3495)
+		// Minimum execution time: 3_690_000 picoseconds.
+		Weight::from_parts(3_791_000, 3495)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	fn seal_now() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(298_000, 0)
+		// Minimum execution time: 261_000 picoseconds.
+		Weight::from_parts(307_000, 0)
 	}
 	fn seal_weight_to_fee() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_340_000 picoseconds.
-		Weight::from_parts(1_483_000, 0)
+		// Minimum execution time: 1_417_000 picoseconds.
+		Weight::from_parts(1_547_000, 0)
 	}
-	fn seal_call_data_load() -> Weight {
+	/// The range of component `n` is `[0, 262140]`.
+	fn seal_copy_to_contract(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(295_000, 0)
+		// Minimum execution time: 364_000 picoseconds.
+		Weight::from_parts(566_499, 0)
+			// Standard Error: 0
+			.saturating_add(Weight::from_parts(237, 0).saturating_mul(n.into()))
 	}
-	/// The range of component `n` is `[0, 262140]`.
-	fn seal_copy_to_contract(n: u32, ) -> Weight {
+	fn seal_call_data_load() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 369_000 picoseconds.
-		Weight::from_parts(544_048, 0)
-			// Standard Error: 0
-			.saturating_add(Weight::from_parts(200, 0).saturating_mul(n.into()))
+		// Minimum execution time: 279_000 picoseconds.
+		Weight::from_parts(305_000, 0)
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_call_data_copy(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 244_000 picoseconds.
-		Weight::from_parts(123_748, 0)
+		// Minimum execution time: 265_000 picoseconds.
+		Weight::from_parts(359_300, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(114, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(148, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262140]`.
 	fn seal_return(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 291_000 picoseconds.
-		Weight::from_parts(846_264, 0)
+		// Minimum execution time: 278_000 picoseconds.
+		Weight::from_parts(474_421, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(200, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(237, 0).saturating_mul(n.into()))
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -1436,11 +1449,11 @@ impl WeightInfo for () {
 	fn seal_terminate(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `324 + n * (88 ±0)`
-		//  Estimated: `3791 + n * (2563 ±0)`
-		// Minimum execution time: 22_494_000 picoseconds.
-		Weight::from_parts(23_028_153, 3791)
-			// Standard Error: 12_407
-			.saturating_add(Weight::from_parts(4_238_442, 0).saturating_mul(n.into()))
+		//  Estimated: `3790 + n * (2563 ±0)`
+		// Minimum execution time: 23_182_000 picoseconds.
+		Weight::from_parts(23_833_588, 3790)
+			// Standard Error: 12_448
+			.saturating_add(Weight::from_parts(4_277_757, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(3_u64))
 			.saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(n.into())))
 			.saturating_add(RocksDbWeight::get().writes(4_u64))
@@ -1453,22 +1466,22 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 4_383_000 picoseconds.
-		Weight::from_parts(4_364_292, 0)
-			// Standard Error: 2_775
-			.saturating_add(Weight::from_parts(210_189, 0).saturating_mul(t.into()))
-			// Standard Error: 24
-			.saturating_add(Weight::from_parts(952, 0).saturating_mul(n.into()))
+		// Minimum execution time: 4_433_000 picoseconds.
+		Weight::from_parts(4_321_363, 0)
+			// Standard Error: 2_536
+			.saturating_add(Weight::from_parts(207_597, 0).saturating_mul(t.into()))
+			// Standard Error: 22
+			.saturating_add(Weight::from_parts(957, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `i` is `[0, 262144]`.
 	fn seal_debug_message(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 328_000 picoseconds.
-		Weight::from_parts(393_925, 0)
+		// Minimum execution time: 353_000 picoseconds.
+		Weight::from_parts(78_798, 0)
 			// Standard Error: 1
-			.saturating_add(Weight::from_parts(725, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(762, 0).saturating_mul(i.into()))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
 	/// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`)
@@ -1476,8 +1489,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 7_649_000 picoseconds.
-		Weight::from_parts(8_025_000, 744)
+		// Minimum execution time: 7_701_000 picoseconds.
+		Weight::from_parts(8_043_000, 744)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -1486,8 +1499,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 43_439_000 picoseconds.
-		Weight::from_parts(44_296_000, 10754)
+		// Minimum execution time: 42_961_000 picoseconds.
+		Weight::from_parts(44_719_000, 10754)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -1496,8 +1509,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 8_919_000 picoseconds.
-		Weight::from_parts(9_392_000, 744)
+		// Minimum execution time: 8_575_000 picoseconds.
+		Weight::from_parts(9_239_000, 744)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1507,8 +1520,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 45_032_000 picoseconds.
-		Weight::from_parts(46_050_000, 10754)
+		// Minimum execution time: 43_585_000 picoseconds.
+		Weight::from_parts(45_719_000, 10754)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1520,12 +1533,12 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + o * (1 ±0)`
 		//  Estimated: `247 + o * (1 ±0)`
-		// Minimum execution time: 9_272_000 picoseconds.
-		Weight::from_parts(10_022_838, 247)
-			// Standard Error: 43
-			.saturating_add(Weight::from_parts(513, 0).saturating_mul(n.into()))
-			// Standard Error: 43
-			.saturating_add(Weight::from_parts(625, 0).saturating_mul(o.into()))
+		// Minimum execution time: 9_147_000 picoseconds.
+		Weight::from_parts(9_851_872, 247)
+			// Standard Error: 40
+			.saturating_add(Weight::from_parts(222, 0).saturating_mul(n.into()))
+			// Standard Error: 40
+			.saturating_add(Weight::from_parts(411, 0).saturating_mul(o.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(o.into()))
@@ -1537,10 +1550,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_885_000 picoseconds.
-		Weight::from_parts(9_785_932, 247)
+		// Minimum execution time: 8_859_000 picoseconds.
+		Weight::from_parts(9_633_190, 247)
 			// Standard Error: 55
-			.saturating_add(Weight::from_parts(612, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(995, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
@@ -1552,10 +1565,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_440_000 picoseconds.
-		Weight::from_parts(9_453_769, 247)
-			// Standard Error: 62
-			.saturating_add(Weight::from_parts(1_529, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_270_000 picoseconds.
+		Weight::from_parts(9_208_849, 247)
+			// Standard Error: 67
+			.saturating_add(Weight::from_parts(1_686, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -1566,10 +1579,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_212_000 picoseconds.
-		Weight::from_parts(8_880_676, 247)
-			// Standard Error: 54
-			.saturating_add(Weight::from_parts(673, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_002_000 picoseconds.
+		Weight::from_parts(8_695_892, 247)
+			// Standard Error: 48
+			.saturating_add(Weight::from_parts(721, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -1580,10 +1593,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 9_491_000 picoseconds.
-		Weight::from_parts(10_313_570, 247)
-			// Standard Error: 65
-			.saturating_add(Weight::from_parts(1_681, 0).saturating_mul(n.into()))
+		// Minimum execution time: 9_204_000 picoseconds.
+		Weight::from_parts(10_176_756, 247)
+			// Standard Error: 57
+			.saturating_add(Weight::from_parts(1_550, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
@@ -1592,36 +1605,36 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_530_000 picoseconds.
-		Weight::from_parts(1_642_000, 0)
+		// Minimum execution time: 1_518_000 picoseconds.
+		Weight::from_parts(1_578_000, 0)
 	}
 	fn set_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_851_000 picoseconds.
-		Weight::from_parts(1_999_000, 0)
+		// Minimum execution time: 1_846_000 picoseconds.
+		Weight::from_parts(1_996_000, 0)
 	}
 	fn get_transient_storage_empty() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_429_000 picoseconds.
-		Weight::from_parts(1_527_000, 0)
+		// Minimum execution time: 1_442_000 picoseconds.
+		Weight::from_parts(1_562_000, 0)
 	}
 	fn get_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_689_000 picoseconds.
-		Weight::from_parts(1_772_000, 0)
+		// Minimum execution time: 1_602_000 picoseconds.
+		Weight::from_parts(1_730_000, 0)
 	}
 	fn rollback_transient_storage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_049_000 picoseconds.
-		Weight::from_parts(1_153_000, 0)
+		// Minimum execution time: 1_096_000 picoseconds.
+		Weight::from_parts(1_176_000, 0)
 	}
 	/// The range of component `n` is `[0, 512]`.
 	/// The range of component `o` is `[0, 512]`.
@@ -1629,52 +1642,52 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_338_000 picoseconds.
-		Weight::from_parts(2_514_685, 0)
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(299, 0).saturating_mul(n.into()))
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(403, 0).saturating_mul(o.into()))
+		// Minimum execution time: 2_328_000 picoseconds.
+		Weight::from_parts(2_470_198, 0)
+			// Standard Error: 14
+			.saturating_add(Weight::from_parts(256, 0).saturating_mul(n.into()))
+			// Standard Error: 14
+			.saturating_add(Weight::from_parts(441, 0).saturating_mul(o.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_clear_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_045_000 picoseconds.
-		Weight::from_parts(2_409_843, 0)
-			// Standard Error: 16
-			.saturating_add(Weight::from_parts(350, 0).saturating_mul(n.into()))
+		// Minimum execution time: 2_037_000 picoseconds.
+		Weight::from_parts(2_439_061, 0)
+			// Standard Error: 17
+			.saturating_add(Weight::from_parts(303, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_get_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_891_000 picoseconds.
-		Weight::from_parts(2_117_702, 0)
+		// Minimum execution time: 1_900_000 picoseconds.
+		Weight::from_parts(2_095_135, 0)
 			// Standard Error: 12
-			.saturating_add(Weight::from_parts(289, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(310, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_contains_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_786_000 picoseconds.
-		Weight::from_parts(1_949_290, 0)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(232, 0).saturating_mul(n.into()))
+		// Minimum execution time: 1_772_000 picoseconds.
+		Weight::from_parts(1_964_542, 0)
+			// Standard Error: 16
+			.saturating_add(Weight::from_parts(298, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 512]`.
 	fn seal_take_transient_storage(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_465_000 picoseconds.
-		Weight::from_parts(2_712_107, 0)
-			// Standard Error: 14
-			.saturating_add(Weight::from_parts(79, 0).saturating_mul(n.into()))
+		// Minimum execution time: 2_555_000 picoseconds.
+		Weight::from_parts(2_864_143, 0)
+			// Standard Error: 22
+			.saturating_add(Weight::from_parts(45, 0).saturating_mul(n.into()))
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -1688,20 +1701,18 @@ impl WeightInfo for () {
 	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `Measured`)
 	/// The range of component `t` is `[0, 1]`.
 	/// The range of component `i` is `[0, 262144]`.
-	fn seal_call(t: u32, i: u32, ) -> Weight {
-		// Proof Size summary in bytes:
-		//  Measured:  `1294 + t * (243 ±0)`
-		//  Estimated: `4759 + t * (2501 ±0)`
-		// Minimum execution time: 41_377_000 picoseconds.
-		Weight::from_parts(43_024_676, 4759)
-			// Standard Error: 44_099
-			.saturating_add(Weight::from_parts(1_689_315, 0).saturating_mul(t.into()))
-			// Standard Error: 0
-			.saturating_add(Weight::from_parts(2, 0).saturating_mul(i.into()))
+	fn seal_call(t: u32, _i: u32, ) -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `1292 + t * (280 ±0)`
+		//  Estimated: `4757 + t * (2518 ±0)`
+		// Minimum execution time: 40_760_000 picoseconds.
+		Weight::from_parts(45_131_001, 4757)
+			// Standard Error: 302_594
+			.saturating_add(Weight::from_parts(2_769_232, 0).saturating_mul(t.into()))
 			.saturating_add(RocksDbWeight::get().reads(4_u64))
 			.saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(t.into())))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
-			.saturating_add(Weight::from_parts(0, 2501).saturating_mul(t.into()))
+			.saturating_add(Weight::from_parts(0, 2518).saturating_mul(t.into()))
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -1713,8 +1724,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `1237`
 		//  Estimated: `4702`
-		// Minimum execution time: 36_324_000 picoseconds.
-		Weight::from_parts(37_657_000, 4702)
+		// Minimum execution time: 36_975_000 picoseconds.
+		Weight::from_parts(38_368_000, 4702)
 			.saturating_add(RocksDbWeight::get().reads(3_u64))
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
@@ -1728,12 +1739,12 @@ impl WeightInfo for () {
 	/// The range of component `i` is `[0, 262144]`.
 	fn seal_instantiate(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1273`
-		//  Estimated: `4736`
-		// Minimum execution time: 117_657_000 picoseconds.
-		Weight::from_parts(110_177_403, 4736)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(4_097, 0).saturating_mul(i.into()))
+		//  Measured:  `1310`
+		//  Estimated: `4769`
+		// Minimum execution time: 122_553_000 picoseconds.
+		Weight::from_parts(117_325_822, 4769)
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(4_147, 0).saturating_mul(i.into()))
 			.saturating_add(RocksDbWeight::get().reads(4_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1742,64 +1753,64 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 650_000 picoseconds.
-		Weight::from_parts(4_208_007, 0)
+		// Minimum execution time: 657_000 picoseconds.
+		Weight::from_parts(3_531_259, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_396, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_428, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_hash_keccak_256(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_101_000 picoseconds.
-		Weight::from_parts(4_521_803, 0)
+		// Minimum execution time: 1_072_000 picoseconds.
+		Weight::from_parts(5_487_006, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(3_609, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(3_634, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_hash_blake2_256(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 654_000 picoseconds.
-		Weight::from_parts(3_060_461, 0)
+		// Minimum execution time: 638_000 picoseconds.
+		Weight::from_parts(3_097_177, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_531, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_551, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 262144]`.
 	fn seal_hash_blake2_128(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 628_000 picoseconds.
-		Weight::from_parts(3_784_567, 0)
+		// Minimum execution time: 682_000 picoseconds.
+		Weight::from_parts(2_963_774, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_526, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_561, 0).saturating_mul(n.into()))
 	}
 	/// The range of component `n` is `[0, 261889]`.
 	fn seal_sr25519_verify(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 42_892_000 picoseconds.
-		Weight::from_parts(25_002_714, 0)
-			// Standard Error: 12
-			.saturating_add(Weight::from_parts(5_252, 0).saturating_mul(n.into()))
+		// Minimum execution time: 42_791_000 picoseconds.
+		Weight::from_parts(27_471_391, 0)
+			// Standard Error: 13
+			.saturating_add(Weight::from_parts(5_246, 0).saturating_mul(n.into()))
 	}
 	fn seal_ecdsa_recover() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 46_990_000 picoseconds.
-		Weight::from_parts(48_960_000, 0)
+		// Minimum execution time: 46_565_000 picoseconds.
+		Weight::from_parts(48_251_000, 0)
 	}
 	fn seal_ecdsa_to_eth_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 12_870_000 picoseconds.
-		Weight::from_parts(13_062_000, 0)
+		// Minimum execution time: 12_562_000 picoseconds.
+		Weight::from_parts(12_664_000, 0)
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
@@ -1807,8 +1818,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `300`
 		//  Estimated: `3765`
-		// Minimum execution time: 17_810_000 picoseconds.
-		Weight::from_parts(18_667_000, 3765)
+		// Minimum execution time: 18_527_000 picoseconds.
+		Weight::from_parts(19_134_000, 3765)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1818,8 +1829,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3803`
-		// Minimum execution time: 13_762_000 picoseconds.
-		Weight::from_parts(14_526_000, 3803)
+		// Minimum execution time: 13_843_000 picoseconds.
+		Weight::from_parts(14_750_000, 3803)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1829,8 +1840,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3561`
-		// Minimum execution time: 12_753_000 picoseconds.
-		Weight::from_parts(13_199_000, 3561)
+		// Minimum execution time: 13_013_000 picoseconds.
+		Weight::from_parts(13_612_000, 3561)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1839,9 +1850,9 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 9_060_000 picoseconds.
-		Weight::from_parts(10_131_024, 0)
-			// Standard Error: 72
-			.saturating_add(Weight::from_parts(71_842, 0).saturating_mul(r.into()))
+		// Minimum execution time: 15_182_000 picoseconds.
+		Weight::from_parts(16_987_060, 0)
+			// Standard Error: 105
+			.saturating_add(Weight::from_parts(72_086, 0).saturating_mul(r.into()))
 	}
 }
diff --git a/substrate/frame/revive/uapi/src/host.rs b/substrate/frame/revive/uapi/src/host.rs
index 505ec0a82f07310ad82816c2fc154861ad92b6ba..2214563faf02265986ac193b2fcf6e7749e7db4c 100644
--- a/substrate/frame/revive/uapi/src/host.rs
+++ b/substrate/frame/revive/uapi/src/host.rs
@@ -398,6 +398,9 @@ pub trait HostFn: private::Sealed {
 	/// - `offset`: Byte offset into the returned data
 	fn return_data_copy(output: &mut &mut [u8], offset: u32);
 
+	/// Returns the amount of ref_time left.
+	fn ref_time_left() -> u64;
+
 	/// Stores the current block number of the current contract into the supplied buffer.
 	///
 	/// # Parameters
diff --git a/substrate/frame/revive/uapi/src/host/riscv64.rs b/substrate/frame/revive/uapi/src/host/riscv64.rs
index 40de12b25f3633cc1a999c31a62b130e0c9b213d..a73a13ed1af50b11b4079edc8beedb8ff5a339ed 100644
--- a/substrate/frame/revive/uapi/src/host/riscv64.rs
+++ b/substrate/frame/revive/uapi/src/host/riscv64.rs
@@ -76,6 +76,7 @@ mod sys {
 		pub fn address(out_ptr: *mut u8);
 		pub fn weight_to_fee(ref_time: u64, proof_size: u64, out_ptr: *mut u8);
 		pub fn weight_left(out_ptr: *mut u8, out_len_ptr: *mut u32);
+		pub fn ref_time_left() -> u64;
 		pub fn get_immutable_data(out_ptr: *mut u8, out_len_ptr: *mut u32);
 		pub fn set_immutable_data(ptr: *const u8, len: u32);
 		pub fn balance(out_ptr: *mut u8);
@@ -440,6 +441,10 @@ impl HostFn for HostFnImpl {
 		extract_from_slice(output, output_len as usize);
 	}
 
+	fn ref_time_left() -> u64 {
+		unsafe { sys::ref_time_left() }
+	}
+
 	#[cfg(feature = "unstable-api")]
 	fn block_hash(block_number_ptr: &[u8; 32], output: &mut [u8; 32]) {
 		unsafe { sys::block_hash(block_number_ptr.as_ptr(), output.as_mut_ptr()) };