diff --git a/prdoc/pr_6835.prdoc b/prdoc/pr_6835.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..73d1a81e761c2d215c7a3f06a91c9a19c99b28d8
--- /dev/null
+++ b/prdoc/pr_6835.prdoc
@@ -0,0 +1,12 @@
+title: '[pallet-revive] implement the call data load API'
+doc:
+- audience: Runtime Dev
+  description: |-
+    This PR implements the call data load API akin to [how it works on ethereum](https://www.evm.codes/?fork=cancun#35).
+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/call_data_load.rs b/substrate/frame/revive/fixtures/contracts/call_data_load.rs
new file mode 100644
index 0000000000000000000000000000000000000000..d3df9433f5d104eaa99813062e7b7808bb8b920d
--- /dev/null
+++ b/substrate/frame/revive/fixtures/contracts/call_data_load.rs
@@ -0,0 +1,44 @@
+// 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.
+
+//! This uses the call data load API to first the first input byte.
+//! This single input byte is used as the offset for a second call
+//! to the call data load API.
+//! The output of the second API call is returned.
+
+#![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() {}
+
+#[no_mangle]
+#[polkavm_derive::polkavm_export]
+pub extern "C" fn call() {
+	let mut buf = [0; 32];
+	api::call_data_load(&mut buf, 0);
+
+	let offset = buf[31] as u32;
+	let mut buf = [0; 32];
+	api::call_data_load(&mut buf, offset);
+
+	api::return_value(ReturnFlags::empty(), &buf);
+}
diff --git a/substrate/frame/revive/src/benchmarking/mod.rs b/substrate/frame/revive/src/benchmarking/mod.rs
index ebdea86758248d8c45a94c8595fbac94a642bc52..94fac13d78e8cbab58f5d20705452fc59a8c452b 100644
--- a/substrate/frame/revive/src/benchmarking/mod.rs
+++ b/substrate/frame/revive/src/benchmarking/mod.rs
@@ -838,6 +838,21 @@ mod benchmarks {
 		assert_eq!(U256::from_little_endian(&memory[..]), runtime.ext().get_weight_price(weight));
 	}
 
+	#[benchmark(pov_mode = Measured)]
+	fn seal_call_data_load() {
+		let mut setup = CallSetup::<T>::default();
+		let (mut ext, _) = setup.ext();
+		let mut runtime = crate::wasm::Runtime::new(&mut ext, vec![42u8; 32]);
+		let mut memory = memory!(vec![0u8; 32],);
+		let result;
+		#[block]
+		{
+			result = runtime.bench_call_data_load(memory.as_mut_slice(), 0, 0);
+		}
+		assert_ok!(result);
+		assert_eq!(&memory[..], &vec![42u8; 32]);
+	}
+
 	#[benchmark(pov_mode = Measured)]
 	fn seal_input(n: Linear<0, { limits::code::BLOB_BYTES - 4 }>) {
 		let mut setup = CallSetup::<T>::default();
diff --git a/substrate/frame/revive/src/tests.rs b/substrate/frame/revive/src/tests.rs
index a000de1491fa1b2659ddda95a2d888bc79b66ac3..b3cd591e4d0ccbb5a90a7344609d6265a2757e0d 100644
--- a/substrate/frame/revive/src/tests.rs
+++ b/substrate/frame/revive/src/tests.rs
@@ -4407,6 +4407,48 @@ fn chain_id_works() {
 	});
 }
 
+#[test]
+fn call_data_load_api_works() {
+	let (code, _) = compile_module("call_data_load").unwrap();
+
+	ExtBuilder::default().existential_deposit(100).build().execute_with(|| {
+		let _ = <Test as Config>::Currency::set_balance(&ALICE, 1_000_000);
+
+		// Create fixture: Constructor does nothing
+		let Contract { addr, .. } =
+			builder::bare_instantiate(Code::Upload(code)).build_and_unwrap_contract();
+
+		// Call the contract: It reads a byte for the offset and then returns
+		// what call data load returned using this byte as the offset.
+		let input = (3u8, U256::max_value(), U256::max_value()).encode();
+		let received = builder::bare_call(addr).data(input).build().result.unwrap();
+		assert_eq!(received.flags, ReturnFlags::empty());
+		assert_eq!(U256::from_little_endian(&received.data), U256::max_value());
+
+		// Edge case
+		let input = (2u8, U256::from(255).to_big_endian()).encode();
+		let received = builder::bare_call(addr).data(input).build().result.unwrap();
+		assert_eq!(received.flags, ReturnFlags::empty());
+		assert_eq!(U256::from_little_endian(&received.data), U256::from(65280));
+
+		// Edge case
+		let received = builder::bare_call(addr).data(vec![1]).build().result.unwrap();
+		assert_eq!(received.flags, ReturnFlags::empty());
+		assert_eq!(U256::from_little_endian(&received.data), U256::zero());
+
+		// OOB case
+		let input = (42u8).encode();
+		let received = builder::bare_call(addr).data(input).build().result.unwrap();
+		assert_eq!(received.flags, ReturnFlags::empty());
+		assert_eq!(U256::from_little_endian(&received.data), U256::zero());
+
+		// No calldata should return the zero value
+		let received = builder::bare_call(addr).build().result.unwrap();
+		assert_eq!(received.flags, ReturnFlags::empty());
+		assert_eq!(U256::from_little_endian(&received.data), U256::zero());
+	});
+}
+
 #[test]
 fn return_data_api_works() {
 	let (code_return_data_api, _) = compile_module("return_data_api").unwrap();
diff --git a/substrate/frame/revive/src/wasm/runtime.rs b/substrate/frame/revive/src/wasm/runtime.rs
index 8d54b7fd0ddf4abbdc376c69655ebe54bcf5877f..0d03771224b5ca9fe36455155f9be33870532d1a 100644
--- a/substrate/frame/revive/src/wasm/runtime.rs
+++ b/substrate/frame/revive/src/wasm/runtime.rs
@@ -267,6 +267,8 @@ pub enum RuntimeCosts {
 	CopyFromContract(u32),
 	/// Weight charged for copying data to the sandbox.
 	CopyToContract(u32),
+	/// Weight of calling `seal_call_data_load``.
+	CallDataLoad,
 	/// Weight of calling `seal_caller`.
 	Caller,
 	/// Weight of calling `seal_origin`.
@@ -429,6 +431,7 @@ impl<T: Config> Token<T> for RuntimeCosts {
 			HostFn => cost_args!(noop_host_fn, 1),
 			CopyToContract(len) => T::WeightInfo::seal_input(len),
 			CopyFromContract(len) => T::WeightInfo::seal_return(len),
+			CallDataLoad => T::WeightInfo::seal_call_data_load(),
 			Caller => T::WeightInfo::seal_caller(),
 			Origin => T::WeightInfo::seal_origin(),
 			IsContract => T::WeightInfo::seal_is_contract(),
@@ -1319,6 +1322,37 @@ pub mod env {
 		}
 	}
 
+	/// Stores the U256 value at given call input `offset` into the supplied buffer.
+	/// See [`pallet_revive_uapi::HostFn::call_data_load`].
+	#[stable]
+	fn call_data_load(
+		&mut self,
+		memory: &mut M,
+		out_ptr: u32,
+		offset: u32,
+	) -> Result<(), TrapReason> {
+		self.charge_gas(RuntimeCosts::CallDataLoad)?;
+
+		let Some(input) = self.input_data.as_ref() else {
+			return Err(Error::<E::T>::InputForwarded.into());
+		};
+
+		let mut data = [0; 32];
+		let start = offset as usize;
+		let data = if start >= input.len() {
+			data // Any index is valid to request; OOB offsets return zero.
+		} else {
+			let end = start.saturating_add(32).min(input.len());
+			data[..end - start].copy_from_slice(&input[start..end]);
+			data.reverse();
+			data // Solidity expects right-padded data
+		};
+
+		self.write_fixed_sandbox_output(memory, out_ptr, &data, false, already_charged)?;
+
+		Ok(())
+	}
+
 	/// Cease contract execution and save a data buffer as a result of the execution.
 	/// See [`pallet_revive_uapi::HostFn::return_value`].
 	#[stable]
diff --git a/substrate/frame/revive/src/weights.rs b/substrate/frame/revive/src/weights.rs
index 96654432a5cce7b5e514036a820b79d82f8495ef..e9178287f8f962d9122c6a6f9fa96c3d6e4e48bf 100644
--- a/substrate/frame/revive/src/weights.rs
+++ b/substrate/frame/revive/src/weights.rs
@@ -18,28 +18,28 @@
 //! Autogenerated weights for `pallet_revive`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
-//! DATE: 2024-11-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2024-12-11, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `runner-wiukf8gn-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
+//! HOSTNAME: `9fd11f1b2ec3`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
 //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024`
 
 // Executed Command:
-// ./target/production/substrate-node
+// target/production/substrate-node
 // benchmark
 // pallet
+// --extrinsic=*
 // --chain=dev
+// --pallet=pallet_revive
+// --header=/__w/polkadot-sdk/polkadot-sdk/substrate/HEADER-APACHE2
+// --output=/__w/polkadot-sdk/polkadot-sdk/substrate/frame/revive/src/weights.rs
+// --wasm-execution=compiled
 // --steps=50
 // --repeat=20
-// --pallet=pallet_revive
+// --heap-pages=4096
+// --template=substrate/.maintain/frame-weight-template.hbs
 // --no-storage-info
-// --no-median-slopes
 // --no-min-squares
-// --extrinsic=*
-// --wasm-execution=compiled
-// --heap-pages=4096
-// --output=./substrate/frame/revive/src/weights.rs
-// --header=./substrate/HEADER-APACHE2
-// --template=./substrate/.maintain/frame-weight-template.hbs
+// --no-median-slopes
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
@@ -84,6 +84,7 @@ 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_input(n: u32, ) -> Weight;
 	fn seal_return(n: u32, ) -> Weight;
 	fn seal_terminate(n: u32, ) -> Weight;
@@ -133,8 +134,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `1594`
-		// Minimum execution time: 2_818_000 picoseconds.
-		Weight::from_parts(3_058_000, 1594)
+		// Minimum execution time: 2_874_000 picoseconds.
+		Weight::from_parts(3_131_000, 1594)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -144,10 +145,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: 15_916_000 picoseconds.
-		Weight::from_parts(16_132_000, 415)
-			// Standard Error: 1_482
-			.saturating_add(Weight::from_parts(1_185_583, 0).saturating_mul(k.into()))
+		// Minimum execution time: 16_079_000 picoseconds.
+		Weight::from_parts(5_747_743, 415)
+			// Standard Error: 1_130
+			.saturating_add(Weight::from_parts(1_181_775, 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))
@@ -169,10 +170,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:  `1502`
-		//  Estimated: `7442`
-		// Minimum execution time: 88_115_000 picoseconds.
-		Weight::from_parts(92_075_651, 7442)
+		//  Measured:  `1536`
+		//  Estimated: `7476`
+		// Minimum execution time: 94_513_000 picoseconds.
+		Weight::from_parts(99_111_938, 7476)
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -194,14 +195,14 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// The range of component `i` is `[0, 262144]`.
 	fn instantiate_with_code(c: u32, i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `403`
-		//  Estimated: `6326`
-		// Minimum execution time: 188_274_000 picoseconds.
-		Weight::from_parts(157_773_869, 6326)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(16, 0).saturating_mul(c.into()))
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(4_464, 0).saturating_mul(i.into()))
+		//  Measured:  `416`
+		//  Estimated: `6345`
+		// Minimum execution time: 195_917_000 picoseconds.
+		Weight::from_parts(175_835_928, 6345)
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(10, 0).saturating_mul(c.into()))
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(4_554, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(6_u64))
 	}
@@ -223,11 +224,11 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	fn instantiate(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `1296`
-		//  Estimated: `4739`
-		// Minimum execution time: 158_616_000 picoseconds.
-		Weight::from_parts(134_329_076, 4739)
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(4_358, 0).saturating_mul(i.into()))
+		//  Estimated: `4753`
+		// Minimum execution time: 162_583_000 picoseconds.
+		Weight::from_parts(143_621_658, 4753)
+			// Standard Error: 16
+			.saturating_add(Weight::from_parts(4_499, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(4_u64))
 	}
@@ -245,10 +246,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:  `1502`
-		//  Estimated: `7442`
-		// Minimum execution time: 134_935_000 picoseconds.
-		Weight::from_parts(141_040_000, 7442)
+		//  Measured:  `1536`
+		//  Estimated: `7476`
+		// Minimum execution time: 145_642_000 picoseconds.
+		Weight::from_parts(152_866_000, 7476)
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -263,8 +264,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 51_026_000 picoseconds.
-		Weight::from_parts(53_309_143, 3574)
+		// Minimum execution time: 51_664_000 picoseconds.
+		Weight::from_parts(53_863_257, 3574)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -278,8 +279,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `285`
 		//  Estimated: `3750`
-		// Minimum execution time: 44_338_000 picoseconds.
-		Weight::from_parts(45_398_000, 3750)
+		// Minimum execution time: 44_879_000 picoseconds.
+		Weight::from_parts(46_401_000, 3750)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -291,8 +292,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `529`
 		//  Estimated: `6469`
-		// Minimum execution time: 26_420_000 picoseconds.
-		Weight::from_parts(27_141_000, 6469)
+		// Minimum execution time: 27_833_000 picoseconds.
+		Weight::from_parts(29_013_000, 6469)
 			.saturating_add(T::DbWeight::get().reads(3_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -304,8 +305,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 39_735_000 picoseconds.
-		Weight::from_parts(41_260_000, 3574)
+		// Minimum execution time: 40_611_000 picoseconds.
+		Weight::from_parts(41_336_000, 3574)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -317,8 +318,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `56`
 		//  Estimated: `3521`
-		// Minimum execution time: 32_059_000 picoseconds.
-		Weight::from_parts(32_776_000, 3521)
+		// Minimum execution time: 32_576_000 picoseconds.
+		Weight::from_parts(33_300_000, 3521)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
@@ -330,8 +331,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `145`
 		//  Estimated: `3610`
-		// Minimum execution time: 13_553_000 picoseconds.
-		Weight::from_parts(14_121_000, 3610)
+		// Minimum execution time: 13_978_000 picoseconds.
+		Weight::from_parts(14_573_000, 3610)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 	}
 	/// The range of component `r` is `[0, 1600]`.
@@ -339,24 +340,24 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 6_392_000 picoseconds.
-		Weight::from_parts(7_692_248, 0)
-			// Standard Error: 105
-			.saturating_add(Weight::from_parts(180_036, 0).saturating_mul(r.into()))
+		// Minimum execution time: 6_877_000 picoseconds.
+		Weight::from_parts(8_471_206, 0)
+			// Standard Error: 226
+			.saturating_add(Weight::from_parts(165_314, 0).saturating_mul(r.into()))
 	}
 	fn seal_caller() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 287_000 picoseconds.
-		Weight::from_parts(317_000, 0)
+		// Minimum execution time: 290_000 picoseconds.
+		Weight::from_parts(345_000, 0)
 	}
 	fn seal_origin() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 235_000 picoseconds.
-		Weight::from_parts(288_000, 0)
+		// Minimum execution time: 243_000 picoseconds.
+		Weight::from_parts(303_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -364,8 +365,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `306`
 		//  Estimated: `3771`
-		// Minimum execution time: 10_101_000 picoseconds.
-		Weight::from_parts(10_420_000, 3771)
+		// Minimum execution time: 10_441_000 picoseconds.
+		Weight::from_parts(10_812_000, 3771)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
@@ -374,16 +375,16 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `403`
 		//  Estimated: `3868`
-		// Minimum execution time: 11_422_000 picoseconds.
-		Weight::from_parts(11_829_000, 3868)
+		// Minimum execution time: 11_403_000 picoseconds.
+		Weight::from_parts(11_913_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: 247_000 picoseconds.
-		Weight::from_parts(282_000, 0)
+		// Minimum execution time: 259_000 picoseconds.
+		Weight::from_parts(306_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -393,44 +394,44 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `473`
 		//  Estimated: `3938`
-		// Minimum execution time: 14_856_000 picoseconds.
-		Weight::from_parts(15_528_000, 3938)
+		// Minimum execution time: 14_887_000 picoseconds.
+		Weight::from_parts(15_625_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: 303_000 picoseconds.
-		Weight::from_parts(361_000, 0)
+		// Minimum execution time: 315_000 picoseconds.
+		Weight::from_parts(389_000, 0)
 	}
 	fn seal_caller_is_root() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 253_000 picoseconds.
-		Weight::from_parts(287_000, 0)
+		// Minimum execution time: 294_000 picoseconds.
+		Weight::from_parts(322_000, 0)
 	}
 	fn seal_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 231_000 picoseconds.
-		Weight::from_parts(263_000, 0)
+		// Minimum execution time: 239_000 picoseconds.
+		Weight::from_parts(299_000, 0)
 	}
 	fn seal_weight_left() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
 		// Minimum execution time: 628_000 picoseconds.
-		Weight::from_parts(697_000, 0)
+		Weight::from_parts(703_000, 0)
 	}
 	fn seal_balance() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `103`
 		//  Estimated: `0`
-		// Minimum execution time: 4_531_000 picoseconds.
-		Weight::from_parts(4_726_000, 0)
+		// Minimum execution time: 4_816_000 picoseconds.
+		Weight::from_parts(5_078_000, 0)
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -440,8 +441,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `264`
 		//  Estimated: `3729`
-		// Minimum execution time: 8_787_000 picoseconds.
-		Weight::from_parts(9_175_000, 3729)
+		// Minimum execution time: 8_965_000 picoseconds.
+		Weight::from_parts(9_533_000, 3729)
 			.saturating_add(T::DbWeight::get().reads(2_u64))
 	}
 	/// Storage: `Revive::ImmutableDataOf` (r:1 w:0)
@@ -451,10 +452,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_760_000 picoseconds.
-		Weight::from_parts(6_591_336, 3703)
+		// Minimum execution time: 6_174_000 picoseconds.
+		Weight::from_parts(6_755_842, 3703)
 			// Standard Error: 4
-			.saturating_add(Weight::from_parts(628, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(699, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -465,32 +466,32 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_971_000 picoseconds.
-		Weight::from_parts(2_206_252, 0)
-			// Standard Error: 3
-			.saturating_add(Weight::from_parts(529, 0).saturating_mul(n.into()))
+		// Minimum execution time: 1_977_000 picoseconds.
+		Weight::from_parts(2_175_653, 0)
+			// Standard Error: 2
+			.saturating_add(Weight::from_parts(633, 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: 246_000 picoseconds.
-		Weight::from_parts(279_000, 0)
+		// Minimum execution time: 259_000 picoseconds.
+		Weight::from_parts(298_000, 0)
 	}
 	fn seal_minimum_balance() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 223_000 picoseconds.
-		Weight::from_parts(274_000, 0)
+		// Minimum execution time: 277_000 picoseconds.
+		Weight::from_parts(330_000, 0)
 	}
 	fn seal_block_number() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 213_000 picoseconds.
-		Weight::from_parts(270_000, 0)
+		// Minimum execution time: 260_000 picoseconds.
+		Weight::from_parts(295_000, 0)
 	}
 	/// Storage: `System::BlockHash` (r:1 w:0)
 	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `Measured`)
@@ -498,43 +499,50 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `30`
 		//  Estimated: `3495`
-		// Minimum execution time: 3_502_000 picoseconds.
-		Weight::from_parts(3_777_000, 3495)
+		// Minimum execution time: 3_607_000 picoseconds.
+		Weight::from_parts(3_760_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: 232_000 picoseconds.
-		Weight::from_parts(277_000, 0)
+		// Minimum execution time: 271_000 picoseconds.
+		Weight::from_parts(299_000, 0)
 	}
 	fn seal_weight_to_fee() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_293_000 picoseconds.
-		Weight::from_parts(1_426_000, 0)
+		// Minimum execution time: 1_320_000 picoseconds.
+		Weight::from_parts(1_406_000, 0)
+	}
+	fn seal_call_data_load() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 250_000 picoseconds.
+		Weight::from_parts(285_000, 0)
 	}
 	/// The range of component `n` is `[0, 262140]`.
 	fn seal_input(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 449_000 picoseconds.
-		Weight::from_parts(446_268, 0)
+		// Minimum execution time: 411_000 picoseconds.
+		Weight::from_parts(514_738, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(113, 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: 244_000 picoseconds.
-		Weight::from_parts(612_733, 0)
+		// Minimum execution time: 282_000 picoseconds.
+		Weight::from_parts(463_520, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(200, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(295, 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`)
@@ -550,11 +558,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: `3789 + n * (2563 ±0)`
-		// Minimum execution time: 21_822_000 picoseconds.
-		Weight::from_parts(22_468_601, 3789)
-			// Standard Error: 7_303
-			.saturating_add(Weight::from_parts(4_138_073, 0).saturating_mul(n.into()))
+		//  Estimated: `3791 + n * (2563 ±0)`
+		// Minimum execution time: 22_960_000 picoseconds.
+		Weight::from_parts(23_432_764, 3791)
+			// Standard Error: 12_030
+			.saturating_add(Weight::from_parts(4_292_055, 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))
@@ -567,22 +575,22 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 4_127_000 picoseconds.
-		Weight::from_parts(4_043_097, 0)
-			// Standard Error: 3_136
-			.saturating_add(Weight::from_parts(209_603, 0).saturating_mul(t.into()))
-			// Standard Error: 28
-			.saturating_add(Weight::from_parts(988, 0).saturating_mul(n.into()))
+		// Minimum execution time: 4_346_000 picoseconds.
+		Weight::from_parts(4_208_327, 0)
+			// Standard Error: 2_509
+			.saturating_add(Weight::from_parts(194_145, 0).saturating_mul(t.into()))
+			// Standard Error: 22
+			.saturating_add(Weight::from_parts(1_084, 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: 276_000 picoseconds.
-		Weight::from_parts(1_111_301, 0)
+		// Minimum execution time: 360_000 picoseconds.
+		Weight::from_parts(374_000, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(706, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(816, 0).saturating_mul(i.into()))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
 	/// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`)
@@ -590,8 +598,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 7_869_000 picoseconds.
-		Weight::from_parts(8_190_000, 744)
+		// Minimum execution time: 8_066_000 picoseconds.
+		Weight::from_parts(8_425_000, 744)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -600,8 +608,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 42_793_000 picoseconds.
-		Weight::from_parts(43_861_000, 10754)
+		// Minimum execution time: 43_707_000 picoseconds.
+		Weight::from_parts(44_613_000, 10754)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -610,8 +618,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 8_753_000 picoseconds.
-		Weight::from_parts(9_235_000, 744)
+		// Minimum execution time: 9_101_000 picoseconds.
+		Weight::from_parts(9_425_000, 744)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -621,8 +629,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 44_446_000 picoseconds.
-		Weight::from_parts(45_586_000, 10754)
+		// Minimum execution time: 45_990_000 picoseconds.
+		Weight::from_parts(46_945_000, 10754)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -634,12 +642,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_214_000 picoseconds.
-		Weight::from_parts(9_888_060, 247)
-			// Standard Error: 41
-			.saturating_add(Weight::from_parts(151, 0).saturating_mul(n.into()))
-			// Standard Error: 41
-			.saturating_add(Weight::from_parts(315, 0).saturating_mul(o.into()))
+		// Minimum execution time: 9_229_000 picoseconds.
+		Weight::from_parts(10_039_961, 247)
+			// Standard Error: 39
+			.saturating_add(Weight::from_parts(359, 0).saturating_mul(n.into()))
+			// Standard Error: 39
+			.saturating_add(Weight::from_parts(424, 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()))
@@ -651,10 +659,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_647_000 picoseconds.
-		Weight::from_parts(9_553_009, 247)
-			// Standard Error: 48
-			.saturating_add(Weight::from_parts(651, 0).saturating_mul(n.into()))
+		// Minimum execution time: 9_038_000 picoseconds.
+		Weight::from_parts(9_855_448, 247)
+			// Standard Error: 55
+			.saturating_add(Weight::from_parts(544, 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()))
@@ -666,10 +674,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_457_000 picoseconds.
-		Weight::from_parts(9_199_745, 247)
-			// Standard Error: 59
-			.saturating_add(Weight::from_parts(1_562, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_533_000 picoseconds.
+		Weight::from_parts(9_485_405, 247)
+			// Standard Error: 60
+			.saturating_add(Weight::from_parts(1_436, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -680,10 +688,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_025_000 picoseconds.
-		Weight::from_parts(8_700_911, 247)
-			// Standard Error: 49
-			.saturating_add(Weight::from_parts(635, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_300_000 picoseconds.
+		Weight::from_parts(8_914_778, 247)
+			// Standard Error: 46
+			.saturating_add(Weight::from_parts(774, 0).saturating_mul(n.into()))
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -694,10 +702,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_346_000 picoseconds.
-		Weight::from_parts(10_297_284, 247)
-			// Standard Error: 62
-			.saturating_add(Weight::from_parts(1_396, 0).saturating_mul(n.into()))
+		// Minimum execution time: 9_384_000 picoseconds.
+		Weight::from_parts(10_500_656, 247)
+			// Standard Error: 64
+			.saturating_add(Weight::from_parts(1_400, 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()))
@@ -706,36 +714,36 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_428_000 picoseconds.
-		Weight::from_parts(1_517_000, 0)
+		// Minimum execution time: 1_478_000 picoseconds.
+		Weight::from_parts(1_625_000, 0)
 	}
 	fn set_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_868_000 picoseconds.
-		Weight::from_parts(1_942_000, 0)
+		// Minimum execution time: 1_842_000 picoseconds.
+		Weight::from_parts(1_969_000, 0)
 	}
 	fn get_transient_storage_empty() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_403_000 picoseconds.
-		Weight::from_parts(1_539_000, 0)
+		// Minimum execution time: 1_437_000 picoseconds.
+		Weight::from_parts(1_557_000, 0)
 	}
 	fn get_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_676_000 picoseconds.
-		Weight::from_parts(1_760_000, 0)
+		// Minimum execution time: 1_600_000 picoseconds.
+		Weight::from_parts(1_679_000, 0)
 	}
 	fn rollback_transient_storage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_119_000 picoseconds.
-		Weight::from_parts(1_205_000, 0)
+		// Minimum execution time: 1_114_000 picoseconds.
+		Weight::from_parts(1_191_000, 0)
 	}
 	/// The range of component `n` is `[0, 512]`.
 	/// The range of component `o` is `[0, 512]`.
@@ -743,50 +751,50 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_146_000 picoseconds.
-		Weight::from_parts(2_315_339, 0)
-			// Standard Error: 13
-			.saturating_add(Weight::from_parts(327, 0).saturating_mul(n.into()))
-			// Standard Error: 13
-			.saturating_add(Weight::from_parts(366, 0).saturating_mul(o.into()))
+		// Minimum execution time: 2_326_000 picoseconds.
+		Weight::from_parts(2_451_799, 0)
+			// Standard Error: 12
+			.saturating_add(Weight::from_parts(391, 0).saturating_mul(n.into()))
+			// Standard Error: 12
+			.saturating_add(Weight::from_parts(361, 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: 1_950_000 picoseconds.
-		Weight::from_parts(2_271_073, 0)
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(373, 0).saturating_mul(n.into()))
+		// Minimum execution time: 1_951_000 picoseconds.
+		Weight::from_parts(2_353_245, 0)
+			// Standard Error: 16
+			.saturating_add(Weight::from_parts(369, 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_839_000 picoseconds.
-		Weight::from_parts(2_049_659, 0)
+		// Minimum execution time: 1_822_000 picoseconds.
+		Weight::from_parts(2_059_181, 0)
 			// Standard Error: 14
-			.saturating_add(Weight::from_parts(291, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(398, 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_716_000 picoseconds.
-		Weight::from_parts(1_893_932, 0)
+		// Minimum execution time: 1_697_000 picoseconds.
+		Weight::from_parts(1_905_887, 0)
 			// Standard Error: 12
-			.saturating_add(Weight::from_parts(172, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(215, 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_448_000 picoseconds.
-		Weight::from_parts(2_676_764, 0)
+		// Minimum execution time: 2_533_000 picoseconds.
+		Weight::from_parts(2_759_660, 0)
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -802,30 +810,32 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	/// The range of component `i` is `[0, 262144]`.
 	fn seal_call(t: u32, i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1294 + t * (242 ±0)`
+		//  Measured:  `1294 + t * (243 ±0)`
 		//  Estimated: `4759 + t * (2501 ±0)`
-		// Minimum execution time: 39_786_000 picoseconds.
-		Weight::from_parts(41_175_457, 4759)
-			// Standard Error: 45_251
-			.saturating_add(Weight::from_parts(2_375_617, 0).saturating_mul(t.into()))
+		// Minimum execution time: 43_295_000 picoseconds.
+		Weight::from_parts(44_592_141, 4759)
+			// Standard Error: 60_598
+			.saturating_add(Weight::from_parts(1_458_798, 0).saturating_mul(t.into()))
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(2, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(3, 0).saturating_mul(i.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()))
 	}
+	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
+	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:0)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
 	/// Storage: `Revive::PristineCode` (r:1 w:0)
 	/// Proof: `Revive::PristineCode` (`max_values`: None, `max_size`: Some(262180), added: 264655, mode: `Measured`)
 	fn seal_delegate_call() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1064`
-		//  Estimated: `4529`
-		// Minimum execution time: 29_762_000 picoseconds.
-		Weight::from_parts(31_345_000, 4529)
-			.saturating_add(T::DbWeight::get().reads(2_u64))
+		//  Measured:  `1237`
+		//  Estimated: `4702`
+		// Minimum execution time: 37_787_000 picoseconds.
+		Weight::from_parts(38_510_000, 4702)
+			.saturating_add(T::DbWeight::get().reads(3_u64))
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
@@ -838,12 +848,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:  `1310`
-		//  Estimated: `4748`
-		// Minimum execution time: 117_791_000 picoseconds.
-		Weight::from_parts(105_413_907, 4748)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(4_038, 0).saturating_mul(i.into()))
+		//  Measured:  `1273`
+		//  Estimated: `4736`
+		// Minimum execution time: 121_346_000 picoseconds.
+		Weight::from_parts(115_747_843, 4736)
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(4_189, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(4_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
@@ -852,64 +862,64 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 638_000 picoseconds.
-		Weight::from_parts(4_703_710, 0)
+		// Minimum execution time: 696_000 picoseconds.
+		Weight::from_parts(3_319_775, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_349, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_500, 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_085_000 picoseconds.
-		Weight::from_parts(3_630_716, 0)
+		// Minimum execution time: 1_070_000 picoseconds.
+		Weight::from_parts(4_463_019, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(3_567, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(3_689, 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: 643_000 picoseconds.
-		Weight::from_parts(3_733_026, 0)
+		// Minimum execution time: 617_000 picoseconds.
+		Weight::from_parts(3_175_243, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_492, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_617, 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: 653_000 picoseconds.
-		Weight::from_parts(4_627_285, 0)
+		// Minimum execution time: 616_000 picoseconds.
+		Weight::from_parts(3_420_409, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_478, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_623, 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: 45_786_000 picoseconds.
-		Weight::from_parts(36_383_470, 0)
-			// Standard Error: 10
-			.saturating_add(Weight::from_parts(5_396, 0).saturating_mul(n.into()))
+		// Minimum execution time: 45_562_000 picoseconds.
+		Weight::from_parts(34_462_046, 0)
+			// Standard Error: 11
+			.saturating_add(Weight::from_parts(5_259, 0).saturating_mul(n.into()))
 	}
 	fn seal_ecdsa_recover() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 48_140_000 picoseconds.
-		Weight::from_parts(49_720_000, 0)
+		// Minimum execution time: 49_472_000 picoseconds.
+		Weight::from_parts(50_517_000, 0)
 	}
 	fn seal_ecdsa_to_eth_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 12_565_000 picoseconds.
-		Weight::from_parts(12_704_000, 0)
+		// Minimum execution time: 12_716_000 picoseconds.
+		Weight::from_parts(12_812_000, 0)
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
@@ -917,8 +927,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `300`
 		//  Estimated: `3765`
-		// Minimum execution time: 17_208_000 picoseconds.
-		Weight::from_parts(18_307_000, 3765)
+		// Minimum execution time: 17_891_000 picoseconds.
+		Weight::from_parts(18_833_000, 3765)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -928,8 +938,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3803`
-		// Minimum execution time: 13_686_000 picoseconds.
-		Weight::from_parts(14_186_000, 3803)
+		// Minimum execution time: 14_523_000 picoseconds.
+		Weight::from_parts(14_812_000, 3803)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -939,8 +949,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3561`
-		// Minimum execution time: 12_381_000 picoseconds.
-		Weight::from_parts(13_208_000, 3561)
+		// Minimum execution time: 13_114_000 picoseconds.
+		Weight::from_parts(13_567_000, 3561)
 			.saturating_add(T::DbWeight::get().reads(1_u64))
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
@@ -949,10 +959,10 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 8_118_000 picoseconds.
-		Weight::from_parts(9_813_514, 0)
-			// Standard Error: 40
-			.saturating_add(Weight::from_parts(71_154, 0).saturating_mul(r.into()))
+		// Minimum execution time: 8_717_000 picoseconds.
+		Weight::from_parts(9_983_815, 0)
+			// Standard Error: 115
+			.saturating_add(Weight::from_parts(72_253, 0).saturating_mul(r.into()))
 	}
 }
 
@@ -964,8 +974,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `1594`
-		// Minimum execution time: 2_818_000 picoseconds.
-		Weight::from_parts(3_058_000, 1594)
+		// Minimum execution time: 2_874_000 picoseconds.
+		Weight::from_parts(3_131_000, 1594)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -975,10 +985,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `425 + k * (69 ±0)`
 		//  Estimated: `415 + k * (70 ±0)`
-		// Minimum execution time: 15_916_000 picoseconds.
-		Weight::from_parts(16_132_000, 415)
-			// Standard Error: 1_482
-			.saturating_add(Weight::from_parts(1_185_583, 0).saturating_mul(k.into()))
+		// Minimum execution time: 16_079_000 picoseconds.
+		Weight::from_parts(5_747_743, 415)
+			// Standard Error: 1_130
+			.saturating_add(Weight::from_parts(1_181_775, 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))
@@ -1000,10 +1010,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:  `1502`
-		//  Estimated: `7442`
-		// Minimum execution time: 88_115_000 picoseconds.
-		Weight::from_parts(92_075_651, 7442)
+		//  Measured:  `1536`
+		//  Estimated: `7476`
+		// Minimum execution time: 94_513_000 picoseconds.
+		Weight::from_parts(99_111_938, 7476)
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1025,14 +1035,14 @@ impl WeightInfo for () {
 	/// The range of component `i` is `[0, 262144]`.
 	fn instantiate_with_code(c: u32, i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `403`
-		//  Estimated: `6326`
-		// Minimum execution time: 188_274_000 picoseconds.
-		Weight::from_parts(157_773_869, 6326)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(16, 0).saturating_mul(c.into()))
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(4_464, 0).saturating_mul(i.into()))
+		//  Measured:  `416`
+		//  Estimated: `6345`
+		// Minimum execution time: 195_917_000 picoseconds.
+		Weight::from_parts(175_835_928, 6345)
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(10, 0).saturating_mul(c.into()))
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(4_554, 0).saturating_mul(i.into()))
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(6_u64))
 	}
@@ -1054,11 +1064,11 @@ impl WeightInfo for () {
 	fn instantiate(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `1296`
-		//  Estimated: `4739`
-		// Minimum execution time: 158_616_000 picoseconds.
-		Weight::from_parts(134_329_076, 4739)
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(4_358, 0).saturating_mul(i.into()))
+		//  Estimated: `4753`
+		// Minimum execution time: 162_583_000 picoseconds.
+		Weight::from_parts(143_621_658, 4753)
+			// Standard Error: 16
+			.saturating_add(Weight::from_parts(4_499, 0).saturating_mul(i.into()))
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(4_u64))
 	}
@@ -1076,10 +1086,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:  `1502`
-		//  Estimated: `7442`
-		// Minimum execution time: 134_935_000 picoseconds.
-		Weight::from_parts(141_040_000, 7442)
+		//  Measured:  `1536`
+		//  Estimated: `7476`
+		// Minimum execution time: 145_642_000 picoseconds.
+		Weight::from_parts(152_866_000, 7476)
 			.saturating_add(RocksDbWeight::get().reads(7_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1094,8 +1104,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 51_026_000 picoseconds.
-		Weight::from_parts(53_309_143, 3574)
+		// Minimum execution time: 51_664_000 picoseconds.
+		Weight::from_parts(53_863_257, 3574)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1109,8 +1119,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `285`
 		//  Estimated: `3750`
-		// Minimum execution time: 44_338_000 picoseconds.
-		Weight::from_parts(45_398_000, 3750)
+		// Minimum execution time: 44_879_000 picoseconds.
+		Weight::from_parts(46_401_000, 3750)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1122,8 +1132,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `529`
 		//  Estimated: `6469`
-		// Minimum execution time: 26_420_000 picoseconds.
-		Weight::from_parts(27_141_000, 6469)
+		// Minimum execution time: 27_833_000 picoseconds.
+		Weight::from_parts(29_013_000, 6469)
 			.saturating_add(RocksDbWeight::get().reads(3_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1135,8 +1145,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `109`
 		//  Estimated: `3574`
-		// Minimum execution time: 39_735_000 picoseconds.
-		Weight::from_parts(41_260_000, 3574)
+		// Minimum execution time: 40_611_000 picoseconds.
+		Weight::from_parts(41_336_000, 3574)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1148,8 +1158,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `56`
 		//  Estimated: `3521`
-		// Minimum execution time: 32_059_000 picoseconds.
-		Weight::from_parts(32_776_000, 3521)
+		// Minimum execution time: 32_576_000 picoseconds.
+		Weight::from_parts(33_300_000, 3521)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(2_u64))
 	}
@@ -1161,8 +1171,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `145`
 		//  Estimated: `3610`
-		// Minimum execution time: 13_553_000 picoseconds.
-		Weight::from_parts(14_121_000, 3610)
+		// Minimum execution time: 13_978_000 picoseconds.
+		Weight::from_parts(14_573_000, 3610)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 	}
 	/// The range of component `r` is `[0, 1600]`.
@@ -1170,24 +1180,24 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 6_392_000 picoseconds.
-		Weight::from_parts(7_692_248, 0)
-			// Standard Error: 105
-			.saturating_add(Weight::from_parts(180_036, 0).saturating_mul(r.into()))
+		// Minimum execution time: 6_877_000 picoseconds.
+		Weight::from_parts(8_471_206, 0)
+			// Standard Error: 226
+			.saturating_add(Weight::from_parts(165_314, 0).saturating_mul(r.into()))
 	}
 	fn seal_caller() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 287_000 picoseconds.
-		Weight::from_parts(317_000, 0)
+		// Minimum execution time: 290_000 picoseconds.
+		Weight::from_parts(345_000, 0)
 	}
 	fn seal_origin() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 235_000 picoseconds.
-		Weight::from_parts(288_000, 0)
+		// Minimum execution time: 243_000 picoseconds.
+		Weight::from_parts(303_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -1195,8 +1205,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `306`
 		//  Estimated: `3771`
-		// Minimum execution time: 10_101_000 picoseconds.
-		Weight::from_parts(10_420_000, 3771)
+		// Minimum execution time: 10_441_000 picoseconds.
+		Weight::from_parts(10_812_000, 3771)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
@@ -1205,16 +1215,16 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `403`
 		//  Estimated: `3868`
-		// Minimum execution time: 11_422_000 picoseconds.
-		Weight::from_parts(11_829_000, 3868)
+		// Minimum execution time: 11_403_000 picoseconds.
+		Weight::from_parts(11_913_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: 247_000 picoseconds.
-		Weight::from_parts(282_000, 0)
+		// Minimum execution time: 259_000 picoseconds.
+		Weight::from_parts(306_000, 0)
 	}
 	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
 	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
@@ -1224,44 +1234,44 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `473`
 		//  Estimated: `3938`
-		// Minimum execution time: 14_856_000 picoseconds.
-		Weight::from_parts(15_528_000, 3938)
+		// Minimum execution time: 14_887_000 picoseconds.
+		Weight::from_parts(15_625_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: 303_000 picoseconds.
-		Weight::from_parts(361_000, 0)
+		// Minimum execution time: 315_000 picoseconds.
+		Weight::from_parts(389_000, 0)
 	}
 	fn seal_caller_is_root() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 253_000 picoseconds.
-		Weight::from_parts(287_000, 0)
+		// Minimum execution time: 294_000 picoseconds.
+		Weight::from_parts(322_000, 0)
 	}
 	fn seal_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 231_000 picoseconds.
-		Weight::from_parts(263_000, 0)
+		// Minimum execution time: 239_000 picoseconds.
+		Weight::from_parts(299_000, 0)
 	}
 	fn seal_weight_left() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
 		// Minimum execution time: 628_000 picoseconds.
-		Weight::from_parts(697_000, 0)
+		Weight::from_parts(703_000, 0)
 	}
 	fn seal_balance() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `103`
 		//  Estimated: `0`
-		// Minimum execution time: 4_531_000 picoseconds.
-		Weight::from_parts(4_726_000, 0)
+		// Minimum execution time: 4_816_000 picoseconds.
+		Weight::from_parts(5_078_000, 0)
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -1271,8 +1281,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `264`
 		//  Estimated: `3729`
-		// Minimum execution time: 8_787_000 picoseconds.
-		Weight::from_parts(9_175_000, 3729)
+		// Minimum execution time: 8_965_000 picoseconds.
+		Weight::from_parts(9_533_000, 3729)
 			.saturating_add(RocksDbWeight::get().reads(2_u64))
 	}
 	/// Storage: `Revive::ImmutableDataOf` (r:1 w:0)
@@ -1282,10 +1292,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `238 + n * (1 ±0)`
 		//  Estimated: `3703 + n * (1 ±0)`
-		// Minimum execution time: 5_760_000 picoseconds.
-		Weight::from_parts(6_591_336, 3703)
+		// Minimum execution time: 6_174_000 picoseconds.
+		Weight::from_parts(6_755_842, 3703)
 			// Standard Error: 4
-			.saturating_add(Weight::from_parts(628, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(699, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -1296,32 +1306,32 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_971_000 picoseconds.
-		Weight::from_parts(2_206_252, 0)
-			// Standard Error: 3
-			.saturating_add(Weight::from_parts(529, 0).saturating_mul(n.into()))
+		// Minimum execution time: 1_977_000 picoseconds.
+		Weight::from_parts(2_175_653, 0)
+			// Standard Error: 2
+			.saturating_add(Weight::from_parts(633, 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: 246_000 picoseconds.
-		Weight::from_parts(279_000, 0)
+		// Minimum execution time: 259_000 picoseconds.
+		Weight::from_parts(298_000, 0)
 	}
 	fn seal_minimum_balance() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 223_000 picoseconds.
-		Weight::from_parts(274_000, 0)
+		// Minimum execution time: 277_000 picoseconds.
+		Weight::from_parts(330_000, 0)
 	}
 	fn seal_block_number() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 213_000 picoseconds.
-		Weight::from_parts(270_000, 0)
+		// Minimum execution time: 260_000 picoseconds.
+		Weight::from_parts(295_000, 0)
 	}
 	/// Storage: `System::BlockHash` (r:1 w:0)
 	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `Measured`)
@@ -1329,43 +1339,50 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `30`
 		//  Estimated: `3495`
-		// Minimum execution time: 3_502_000 picoseconds.
-		Weight::from_parts(3_777_000, 3495)
+		// Minimum execution time: 3_607_000 picoseconds.
+		Weight::from_parts(3_760_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: 232_000 picoseconds.
-		Weight::from_parts(277_000, 0)
+		// Minimum execution time: 271_000 picoseconds.
+		Weight::from_parts(299_000, 0)
 	}
 	fn seal_weight_to_fee() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_293_000 picoseconds.
-		Weight::from_parts(1_426_000, 0)
+		// Minimum execution time: 1_320_000 picoseconds.
+		Weight::from_parts(1_406_000, 0)
+	}
+	fn seal_call_data_load() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 250_000 picoseconds.
+		Weight::from_parts(285_000, 0)
 	}
 	/// The range of component `n` is `[0, 262140]`.
 	fn seal_input(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 449_000 picoseconds.
-		Weight::from_parts(446_268, 0)
+		// Minimum execution time: 411_000 picoseconds.
+		Weight::from_parts(514_738, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(113, 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: 244_000 picoseconds.
-		Weight::from_parts(612_733, 0)
+		// Minimum execution time: 282_000 picoseconds.
+		Weight::from_parts(463_520, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(200, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(295, 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`)
@@ -1381,11 +1398,11 @@ impl WeightInfo for () {
 	fn seal_terminate(n: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `324 + n * (88 ±0)`
-		//  Estimated: `3789 + n * (2563 ±0)`
-		// Minimum execution time: 21_822_000 picoseconds.
-		Weight::from_parts(22_468_601, 3789)
-			// Standard Error: 7_303
-			.saturating_add(Weight::from_parts(4_138_073, 0).saturating_mul(n.into()))
+		//  Estimated: `3791 + n * (2563 ±0)`
+		// Minimum execution time: 22_960_000 picoseconds.
+		Weight::from_parts(23_432_764, 3791)
+			// Standard Error: 12_030
+			.saturating_add(Weight::from_parts(4_292_055, 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))
@@ -1398,22 +1415,22 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 4_127_000 picoseconds.
-		Weight::from_parts(4_043_097, 0)
-			// Standard Error: 3_136
-			.saturating_add(Weight::from_parts(209_603, 0).saturating_mul(t.into()))
-			// Standard Error: 28
-			.saturating_add(Weight::from_parts(988, 0).saturating_mul(n.into()))
+		// Minimum execution time: 4_346_000 picoseconds.
+		Weight::from_parts(4_208_327, 0)
+			// Standard Error: 2_509
+			.saturating_add(Weight::from_parts(194_145, 0).saturating_mul(t.into()))
+			// Standard Error: 22
+			.saturating_add(Weight::from_parts(1_084, 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: 276_000 picoseconds.
-		Weight::from_parts(1_111_301, 0)
+		// Minimum execution time: 360_000 picoseconds.
+		Weight::from_parts(374_000, 0)
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(706, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(816, 0).saturating_mul(i.into()))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
 	/// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`)
@@ -1421,8 +1438,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 7_869_000 picoseconds.
-		Weight::from_parts(8_190_000, 744)
+		// Minimum execution time: 8_066_000 picoseconds.
+		Weight::from_parts(8_425_000, 744)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -1431,8 +1448,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 42_793_000 picoseconds.
-		Weight::from_parts(43_861_000, 10754)
+		// Minimum execution time: 43_707_000 picoseconds.
+		Weight::from_parts(44_613_000, 10754)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 	}
 	/// Storage: `Skipped::Metadata` (r:0 w:0)
@@ -1441,8 +1458,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `744`
 		//  Estimated: `744`
-		// Minimum execution time: 8_753_000 picoseconds.
-		Weight::from_parts(9_235_000, 744)
+		// Minimum execution time: 9_101_000 picoseconds.
+		Weight::from_parts(9_425_000, 744)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1452,8 +1469,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `10754`
 		//  Estimated: `10754`
-		// Minimum execution time: 44_446_000 picoseconds.
-		Weight::from_parts(45_586_000, 10754)
+		// Minimum execution time: 45_990_000 picoseconds.
+		Weight::from_parts(46_945_000, 10754)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1465,12 +1482,12 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + o * (1 ±0)`
 		//  Estimated: `247 + o * (1 ±0)`
-		// Minimum execution time: 9_214_000 picoseconds.
-		Weight::from_parts(9_888_060, 247)
-			// Standard Error: 41
-			.saturating_add(Weight::from_parts(151, 0).saturating_mul(n.into()))
-			// Standard Error: 41
-			.saturating_add(Weight::from_parts(315, 0).saturating_mul(o.into()))
+		// Minimum execution time: 9_229_000 picoseconds.
+		Weight::from_parts(10_039_961, 247)
+			// Standard Error: 39
+			.saturating_add(Weight::from_parts(359, 0).saturating_mul(n.into()))
+			// Standard Error: 39
+			.saturating_add(Weight::from_parts(424, 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()))
@@ -1482,10 +1499,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_647_000 picoseconds.
-		Weight::from_parts(9_553_009, 247)
-			// Standard Error: 48
-			.saturating_add(Weight::from_parts(651, 0).saturating_mul(n.into()))
+		// Minimum execution time: 9_038_000 picoseconds.
+		Weight::from_parts(9_855_448, 247)
+			// Standard Error: 55
+			.saturating_add(Weight::from_parts(544, 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()))
@@ -1497,10 +1514,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_457_000 picoseconds.
-		Weight::from_parts(9_199_745, 247)
-			// Standard Error: 59
-			.saturating_add(Weight::from_parts(1_562, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_533_000 picoseconds.
+		Weight::from_parts(9_485_405, 247)
+			// Standard Error: 60
+			.saturating_add(Weight::from_parts(1_436, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -1511,10 +1528,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 8_025_000 picoseconds.
-		Weight::from_parts(8_700_911, 247)
-			// Standard Error: 49
-			.saturating_add(Weight::from_parts(635, 0).saturating_mul(n.into()))
+		// Minimum execution time: 8_300_000 picoseconds.
+		Weight::from_parts(8_914_778, 247)
+			// Standard Error: 46
+			.saturating_add(Weight::from_parts(774, 0).saturating_mul(n.into()))
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into()))
 	}
@@ -1525,10 +1542,10 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `248 + n * (1 ±0)`
 		//  Estimated: `247 + n * (1 ±0)`
-		// Minimum execution time: 9_346_000 picoseconds.
-		Weight::from_parts(10_297_284, 247)
-			// Standard Error: 62
-			.saturating_add(Weight::from_parts(1_396, 0).saturating_mul(n.into()))
+		// Minimum execution time: 9_384_000 picoseconds.
+		Weight::from_parts(10_500_656, 247)
+			// Standard Error: 64
+			.saturating_add(Weight::from_parts(1_400, 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()))
@@ -1537,36 +1554,36 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_428_000 picoseconds.
-		Weight::from_parts(1_517_000, 0)
+		// Minimum execution time: 1_478_000 picoseconds.
+		Weight::from_parts(1_625_000, 0)
 	}
 	fn set_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_868_000 picoseconds.
-		Weight::from_parts(1_942_000, 0)
+		// Minimum execution time: 1_842_000 picoseconds.
+		Weight::from_parts(1_969_000, 0)
 	}
 	fn get_transient_storage_empty() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_403_000 picoseconds.
-		Weight::from_parts(1_539_000, 0)
+		// Minimum execution time: 1_437_000 picoseconds.
+		Weight::from_parts(1_557_000, 0)
 	}
 	fn get_transient_storage_full() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_676_000 picoseconds.
-		Weight::from_parts(1_760_000, 0)
+		// Minimum execution time: 1_600_000 picoseconds.
+		Weight::from_parts(1_679_000, 0)
 	}
 	fn rollback_transient_storage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 1_119_000 picoseconds.
-		Weight::from_parts(1_205_000, 0)
+		// Minimum execution time: 1_114_000 picoseconds.
+		Weight::from_parts(1_191_000, 0)
 	}
 	/// The range of component `n` is `[0, 512]`.
 	/// The range of component `o` is `[0, 512]`.
@@ -1574,50 +1591,50 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_146_000 picoseconds.
-		Weight::from_parts(2_315_339, 0)
-			// Standard Error: 13
-			.saturating_add(Weight::from_parts(327, 0).saturating_mul(n.into()))
-			// Standard Error: 13
-			.saturating_add(Weight::from_parts(366, 0).saturating_mul(o.into()))
+		// Minimum execution time: 2_326_000 picoseconds.
+		Weight::from_parts(2_451_799, 0)
+			// Standard Error: 12
+			.saturating_add(Weight::from_parts(391, 0).saturating_mul(n.into()))
+			// Standard Error: 12
+			.saturating_add(Weight::from_parts(361, 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: 1_950_000 picoseconds.
-		Weight::from_parts(2_271_073, 0)
-			// Standard Error: 15
-			.saturating_add(Weight::from_parts(373, 0).saturating_mul(n.into()))
+		// Minimum execution time: 1_951_000 picoseconds.
+		Weight::from_parts(2_353_245, 0)
+			// Standard Error: 16
+			.saturating_add(Weight::from_parts(369, 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_839_000 picoseconds.
-		Weight::from_parts(2_049_659, 0)
+		// Minimum execution time: 1_822_000 picoseconds.
+		Weight::from_parts(2_059_181, 0)
 			// Standard Error: 14
-			.saturating_add(Weight::from_parts(291, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(398, 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_716_000 picoseconds.
-		Weight::from_parts(1_893_932, 0)
+		// Minimum execution time: 1_697_000 picoseconds.
+		Weight::from_parts(1_905_887, 0)
 			// Standard Error: 12
-			.saturating_add(Weight::from_parts(172, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(215, 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_448_000 picoseconds.
-		Weight::from_parts(2_676_764, 0)
+		// Minimum execution time: 2_533_000 picoseconds.
+		Weight::from_parts(2_759_660, 0)
 	}
 	/// Storage: `Revive::AddressSuffix` (r:1 w:0)
 	/// Proof: `Revive::AddressSuffix` (`max_values`: None, `max_size`: Some(32), added: 2507, mode: `Measured`)
@@ -1633,30 +1650,32 @@ impl WeightInfo for () {
 	/// The range of component `i` is `[0, 262144]`.
 	fn seal_call(t: u32, i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1294 + t * (242 ±0)`
+		//  Measured:  `1294 + t * (243 ±0)`
 		//  Estimated: `4759 + t * (2501 ±0)`
-		// Minimum execution time: 39_786_000 picoseconds.
-		Weight::from_parts(41_175_457, 4759)
-			// Standard Error: 45_251
-			.saturating_add(Weight::from_parts(2_375_617, 0).saturating_mul(t.into()))
+		// Minimum execution time: 43_295_000 picoseconds.
+		Weight::from_parts(44_592_141, 4759)
+			// Standard Error: 60_598
+			.saturating_add(Weight::from_parts(1_458_798, 0).saturating_mul(t.into()))
 			// Standard Error: 0
-			.saturating_add(Weight::from_parts(2, 0).saturating_mul(i.into()))
+			.saturating_add(Weight::from_parts(3, 0).saturating_mul(i.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()))
 	}
+	/// Storage: `Revive::ContractInfoOf` (r:1 w:0)
+	/// Proof: `Revive::ContractInfoOf` (`max_values`: None, `max_size`: Some(1779), added: 4254, mode: `Measured`)
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:0)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
 	/// Storage: `Revive::PristineCode` (r:1 w:0)
 	/// Proof: `Revive::PristineCode` (`max_values`: None, `max_size`: Some(262180), added: 264655, mode: `Measured`)
 	fn seal_delegate_call() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1064`
-		//  Estimated: `4529`
-		// Minimum execution time: 29_762_000 picoseconds.
-		Weight::from_parts(31_345_000, 4529)
-			.saturating_add(RocksDbWeight::get().reads(2_u64))
+		//  Measured:  `1237`
+		//  Estimated: `4702`
+		// Minimum execution time: 37_787_000 picoseconds.
+		Weight::from_parts(38_510_000, 4702)
+			.saturating_add(RocksDbWeight::get().reads(3_u64))
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
@@ -1669,12 +1688,12 @@ impl WeightInfo for () {
 	/// The range of component `i` is `[0, 262144]`.
 	fn seal_instantiate(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `1310`
-		//  Estimated: `4748`
-		// Minimum execution time: 117_791_000 picoseconds.
-		Weight::from_parts(105_413_907, 4748)
-			// Standard Error: 11
-			.saturating_add(Weight::from_parts(4_038, 0).saturating_mul(i.into()))
+		//  Measured:  `1273`
+		//  Estimated: `4736`
+		// Minimum execution time: 121_346_000 picoseconds.
+		Weight::from_parts(115_747_843, 4736)
+			// Standard Error: 10
+			.saturating_add(Weight::from_parts(4_189, 0).saturating_mul(i.into()))
 			.saturating_add(RocksDbWeight::get().reads(4_u64))
 			.saturating_add(RocksDbWeight::get().writes(3_u64))
 	}
@@ -1683,64 +1702,64 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 638_000 picoseconds.
-		Weight::from_parts(4_703_710, 0)
+		// Minimum execution time: 696_000 picoseconds.
+		Weight::from_parts(3_319_775, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_349, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_500, 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_085_000 picoseconds.
-		Weight::from_parts(3_630_716, 0)
+		// Minimum execution time: 1_070_000 picoseconds.
+		Weight::from_parts(4_463_019, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(3_567, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(3_689, 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: 643_000 picoseconds.
-		Weight::from_parts(3_733_026, 0)
+		// Minimum execution time: 617_000 picoseconds.
+		Weight::from_parts(3_175_243, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_492, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_617, 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: 653_000 picoseconds.
-		Weight::from_parts(4_627_285, 0)
+		// Minimum execution time: 616_000 picoseconds.
+		Weight::from_parts(3_420_409, 0)
 			// Standard Error: 3
-			.saturating_add(Weight::from_parts(1_478, 0).saturating_mul(n.into()))
+			.saturating_add(Weight::from_parts(1_623, 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: 45_786_000 picoseconds.
-		Weight::from_parts(36_383_470, 0)
-			// Standard Error: 10
-			.saturating_add(Weight::from_parts(5_396, 0).saturating_mul(n.into()))
+		// Minimum execution time: 45_562_000 picoseconds.
+		Weight::from_parts(34_462_046, 0)
+			// Standard Error: 11
+			.saturating_add(Weight::from_parts(5_259, 0).saturating_mul(n.into()))
 	}
 	fn seal_ecdsa_recover() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 48_140_000 picoseconds.
-		Weight::from_parts(49_720_000, 0)
+		// Minimum execution time: 49_472_000 picoseconds.
+		Weight::from_parts(50_517_000, 0)
 	}
 	fn seal_ecdsa_to_eth_address() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 12_565_000 picoseconds.
-		Weight::from_parts(12_704_000, 0)
+		// Minimum execution time: 12_716_000 picoseconds.
+		Weight::from_parts(12_812_000, 0)
 	}
 	/// Storage: `Revive::CodeInfoOf` (r:1 w:1)
 	/// Proof: `Revive::CodeInfoOf` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `Measured`)
@@ -1748,8 +1767,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `300`
 		//  Estimated: `3765`
-		// Minimum execution time: 17_208_000 picoseconds.
-		Weight::from_parts(18_307_000, 3765)
+		// Minimum execution time: 17_891_000 picoseconds.
+		Weight::from_parts(18_833_000, 3765)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1759,8 +1778,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3803`
-		// Minimum execution time: 13_686_000 picoseconds.
-		Weight::from_parts(14_186_000, 3803)
+		// Minimum execution time: 14_523_000 picoseconds.
+		Weight::from_parts(14_812_000, 3803)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1770,8 +1789,8 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `338`
 		//  Estimated: `3561`
-		// Minimum execution time: 12_381_000 picoseconds.
-		Weight::from_parts(13_208_000, 3561)
+		// Minimum execution time: 13_114_000 picoseconds.
+		Weight::from_parts(13_567_000, 3561)
 			.saturating_add(RocksDbWeight::get().reads(1_u64))
 			.saturating_add(RocksDbWeight::get().writes(1_u64))
 	}
@@ -1780,9 +1799,9 @@ impl WeightInfo for () {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 8_118_000 picoseconds.
-		Weight::from_parts(9_813_514, 0)
-			// Standard Error: 40
-			.saturating_add(Weight::from_parts(71_154, 0).saturating_mul(r.into()))
+		// Minimum execution time: 8_717_000 picoseconds.
+		Weight::from_parts(9_983_815, 0)
+			// Standard Error: 115
+			.saturating_add(Weight::from_parts(72_253, 0).saturating_mul(r.into()))
 	}
 }
diff --git a/substrate/frame/revive/uapi/src/host.rs b/substrate/frame/revive/uapi/src/host.rs
index 400a128793636785f9ab55b256901b3f041903b9..c6b9ef9d4fa2ceb3d0914578b0b5f1cd8909f4a7 100644
--- a/substrate/frame/revive/uapi/src/host.rs
+++ b/substrate/frame/revive/uapi/src/host.rs
@@ -436,6 +436,21 @@ pub trait HostFn: private::Sealed {
 	/// - `output`: A reference to the output data buffer to write the input data.
 	fn input(output: &mut &mut [u8]);
 
+	/// Stores the U256 value at given `offset` from the input passed by the caller
+	/// into the supplied buffer.
+	///
+	/// # Note
+	/// - If `offset` is out of bounds, a value of zero will be returned.
+	/// - If `offset` is in bounds but there is not enough call data, the available data
+	/// is right-padded in order to fill a whole U256 value.
+	/// - The data written to `output` is a little endian U256 integer value.
+	///
+	/// # Parameters
+	///
+	/// - `output`: A reference to the fixed output data buffer to write the value.
+	/// - `offset`: The offset (index) into the call data.
+	fn call_data_load(output: &mut [u8; 32], offset: u32);
+
 	/// Instantiate a contract with the specified code hash.
 	///
 	/// This function creates an account and executes the constructor defined in the code specified
diff --git a/substrate/frame/revive/uapi/src/host/riscv64.rs b/substrate/frame/revive/uapi/src/host/riscv64.rs
index b76320718a6953e7cd59f4bfefd04973ded6023f..a208fef7055ad2af6e1c329fa7d288a05e7adaf1 100644
--- a/substrate/frame/revive/uapi/src/host/riscv64.rs
+++ b/substrate/frame/revive/uapi/src/host/riscv64.rs
@@ -63,6 +63,7 @@ mod sys {
 		pub fn instantiate(ptr: *const u8) -> ReturnCode;
 		pub fn terminate(beneficiary_ptr: *const u8);
 		pub fn input(out_ptr: *mut u8, out_len_ptr: *mut u32);
+		pub fn call_data_load(out_ptr: *mut u8, offset: u32);
 		pub fn seal_return(flags: u32, data_ptr: *const u8, data_len: u32);
 		pub fn caller(out_ptr: *mut u8);
 		pub fn origin(out_ptr: *mut u8);
@@ -449,6 +450,10 @@ impl HostFn for HostFnImpl {
 		extract_from_slice(output, output_len as usize);
 	}
 
+	fn call_data_load(out_ptr: &mut [u8; 32], offset: u32) {
+		unsafe { sys::call_data_load(out_ptr.as_mut_ptr(), offset) };
+	}
+
 	fn return_value(flags: ReturnFlags, return_value: &[u8]) -> ! {
 		unsafe { sys::seal_return(flags.bits(), return_value.as_ptr(), return_value.len() as u32) }
 		panic!("seal_return does not return");