...@@ -62,7 +62,9 @@ pub mod executor_params; ...@@ -62,7 +62,9 @@ pub mod executor_params;
pub mod slashing; pub mod slashing;
pub use async_backing::AsyncBackingParams; pub use async_backing::AsyncBackingParams;
pub use executor_params::{ExecutorParam, ExecutorParamError, ExecutorParams, ExecutorParamsHash}; pub use executor_params::{
ExecutorParam, ExecutorParamError, ExecutorParams, ExecutorParamsHash, ExecutorParamsPrepHash,
};
mod metrics; mod metrics;
pub use metrics::{ pub use metrics::{
......
...@@ -866,7 +866,7 @@ mod tests { ...@@ -866,7 +866,7 @@ mod tests {
use sp_core::H256; use sp_core::H256;
use std::{cell::RefCell, collections::BTreeMap, sync::Arc}; use std::{cell::RefCell, collections::BTreeMap, sync::Arc};
// The testing primitives are very useful for avoiding having to work with signatures // The testing primitives are very useful for avoiding having to work with signatures
// or public keys. `u64` is used as the `AccountId` and no `Signature`s are requried. // or public keys. `u64` is used as the `AccountId` and no `Signature`s are required.
use crate::{ use crate::{
crowdloan, crowdloan,
mock::TestRegistrar, mock::TestRegistrar,
......
...@@ -39,7 +39,7 @@ use primitives::{ ...@@ -39,7 +39,7 @@ use primitives::{
MAX_CODE_SIZE, MAX_CODE_SIZE,
}; };
use runtime_parachains::{ use runtime_parachains::{
configuration, origin, paras, shared, Origin as ParaOrigin, ParaLifecycle, configuration, dmp, origin, paras, shared, Origin as ParaOrigin, ParaLifecycle,
}; };
use sp_core::H256; use sp_core::H256;
use sp_io::TestExternalities; use sp_io::TestExternalities;
...@@ -84,6 +84,7 @@ frame_support::construct_runtime!( ...@@ -84,6 +84,7 @@ frame_support::construct_runtime!(
Paras: paras, Paras: paras,
ParasShared: shared, ParasShared: shared,
ParachainsOrigin: origin, ParachainsOrigin: origin,
Dmp: dmp,
// Para Onboarding Pallets // Para Onboarding Pallets
Registrar: paras_registrar, Registrar: paras_registrar,
...@@ -201,6 +202,8 @@ impl shared::Config for Test { ...@@ -201,6 +202,8 @@ impl shared::Config for Test {
type DisabledValidators = (); type DisabledValidators = ();
} }
impl dmp::Config for Test {}
impl origin::Config for Test {} impl origin::Config for Test {}
parameter_types! { parameter_types! {
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>. // along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
//! Common runtime code for Polkadot and Kusama. //! Common runtime code for the Relay Chain, e.g. Rococo, Westend, Polkadot, Kusama ...
#![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), no_std)]
......
...@@ -412,7 +412,7 @@ pub mod pallet { ...@@ -412,7 +412,7 @@ pub mod pallet {
/// validators have reported on the validity of the code, the code will either be enacted /// validators have reported on the validity of the code, the code will either be enacted
/// or the upgrade will be rejected. If the code will be enacted, the current code of the /// or the upgrade will be rejected. If the code will be enacted, the current code of the
/// parachain will be overwritten directly. This means that any PoV will be checked by this /// parachain will be overwritten directly. This means that any PoV will be checked by this
/// new code. The parachain itself will not be informed explictely that the validation code /// new code. The parachain itself will not be informed explicitly that the validation code
/// has changed. /// has changed.
/// ///
/// Can be called by Root, the parachain, or the parachain manager if the parachain is /// Can be called by Root, the parachain, or the parachain manager if the parachain is
......
...@@ -119,7 +119,9 @@ where ...@@ -119,7 +119,9 @@ where
let config = configuration::ActiveConfig::<T>::get(); let config = configuration::ActiveConfig::<T>::get();
let para = id.into(); let para = id.into();
let price = P::price_for_delivery(para, &xcm); let price = P::price_for_delivery(para, &xcm);
let blob = W::wrap_version(&d, xcm).map_err(|()| DestinationUnsupported)?.encode(); let versioned_xcm = W::wrap_version(&d, xcm).map_err(|()| DestinationUnsupported)?;
versioned_xcm.validate_xcm_nesting().map_err(|()| ExceedsMaxMessageSize)?;
let blob = versioned_xcm.encode();
dmp::Pallet::<T>::can_queue_downward_message(&config, &para, &blob) dmp::Pallet::<T>::can_queue_downward_message(&config, &para, &blob)
.map_err(Into::<SendError>::into)?; .map_err(Into::<SendError>::into)?;
...@@ -236,9 +238,11 @@ impl EnsureForParachain for () { ...@@ -236,9 +238,11 @@ impl EnsureForParachain for () {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use frame_support::parameter_types; use crate::integration_tests::new_test_ext;
use frame_support::{assert_ok, parameter_types};
use runtime_parachains::FeeTracker; use runtime_parachains::FeeTracker;
use sp_runtime::FixedU128; use sp_runtime::FixedU128;
use xcm::MAX_XCM_DECODE_DEPTH;
parameter_types! { parameter_types! {
pub const BaseDeliveryFee: u128 = 300_000_000; pub const BaseDeliveryFee: u128 = 300_000_000;
...@@ -297,4 +301,40 @@ mod tests { ...@@ -297,4 +301,40 @@ mod tests {
(FeeAssetId::get(), result).into() (FeeAssetId::get(), result).into()
); );
} }
#[test]
fn child_parachain_router_validate_nested_xcm_works() {
let dest = Parachain(5555);
type Router = ChildParachainRouter<
crate::integration_tests::Test,
(),
NoPriceForMessageDelivery<ParaId>,
>;
// Message that is not too deeply nested:
let mut good = Xcm(vec![ClearOrigin]);
for _ in 0..MAX_XCM_DECODE_DEPTH - 1 {
good = Xcm(vec![SetAppendix(good)]);
}
new_test_ext().execute_with(|| {
configuration::ActiveConfig::<crate::integration_tests::Test>::mutate(|c| {
c.max_downward_message_size = u32::MAX;
});
// Check that the good message is validated:
assert_ok!(<Router as SendXcm>::validate(
&mut Some(dest.into()),
&mut Some(good.clone())
));
// Nesting the message one more time should reject it:
let bad = Xcm(vec![SetAppendix(good)]);
assert_eq!(
Err(ExceedsMaxMessageSize),
<Router as SendXcm>::validate(&mut Some(dest.into()), &mut Some(bad))
);
});
}
} }
...@@ -222,7 +222,7 @@ mod v_coretime { ...@@ -222,7 +222,7 @@ mod v_coretime {
mask: CoreMask::complete(), mask: CoreMask::complete(),
assignment: CoreAssignment::Task(p.into()), assignment: CoreAssignment::Task(p.into()),
}]); }]);
mk_coretime_call(crate::coretime::CoretimeCalls::Reserve(schedule)) mk_coretime_call::<T>(crate::coretime::CoretimeCalls::Reserve(schedule))
}); });
let leases = lease_holding.into_iter().filter_map(|p| { let leases = lease_holding.into_iter().filter_map(|p| {
...@@ -243,14 +243,14 @@ mod v_coretime { ...@@ -243,14 +243,14 @@ mod v_coretime {
let round_up = if valid_until % TIME_SLICE_PERIOD > 0 { 1 } else { 0 }; let round_up = if valid_until % TIME_SLICE_PERIOD > 0 { 1 } else { 0 };
let time_slice = valid_until / TIME_SLICE_PERIOD + TIME_SLICE_PERIOD * round_up; let time_slice = valid_until / TIME_SLICE_PERIOD + TIME_SLICE_PERIOD * round_up;
log::trace!(target: "coretime-migration", "Sending of lease holding para {:?}, valid_until: {:?}, time_slice: {:?}", p, valid_until, time_slice); log::trace!(target: "coretime-migration", "Sending of lease holding para {:?}, valid_until: {:?}, time_slice: {:?}", p, valid_until, time_slice);
Some(mk_coretime_call(crate::coretime::CoretimeCalls::SetLease(p.into(), time_slice))) Some(mk_coretime_call::<T>(crate::coretime::CoretimeCalls::SetLease(p.into(), time_slice)))
}); });
let core_count: u16 = configuration::ActiveConfig::<T>::get() let core_count: u16 = configuration::ActiveConfig::<T>::get()
.scheduler_params .scheduler_params
.num_cores .num_cores
.saturated_into(); .saturated_into();
let set_core_count = iter::once(mk_coretime_call( let set_core_count = iter::once(mk_coretime_call::<T>(
crate::coretime::CoretimeCalls::NotifyCoreCount(core_count), crate::coretime::CoretimeCalls::NotifyCoreCount(core_count),
)); ));
...@@ -261,7 +261,7 @@ mod v_coretime { ...@@ -261,7 +261,7 @@ mod v_coretime {
}]); }]);
// Reserved cores will come before lease cores, so cores will change their assignments // Reserved cores will come before lease cores, so cores will change their assignments
// when coretime chain sends us their assign_core calls -> Good test. // when coretime chain sends us their assign_core calls -> Good test.
mk_coretime_call(crate::coretime::CoretimeCalls::Reserve(schedule)) mk_coretime_call::<T>(crate::coretime::CoretimeCalls::Reserve(schedule))
}); });
let message_content = iter::once(Instruction::UnpaidExecution { let message_content = iter::once(Instruction::UnpaidExecution {
......
...@@ -110,6 +110,11 @@ pub mod pallet { ...@@ -110,6 +110,11 @@ pub mod pallet {
/// Something that provides the weight of this pallet. /// Something that provides the weight of this pallet.
type WeightInfo: WeightInfo; type WeightInfo: WeightInfo;
type SendXcm: SendXcm; type SendXcm: SendXcm;
/// Maximum weight for any XCM transact call that should be executed on the coretime chain.
///
/// Basically should be `max_weight(set_leases, reserve, notify_core_count)`.
type MaxXcmTransactWeight: Get<Weight>;
} }
#[pallet::event] #[pallet::event]
...@@ -225,7 +230,7 @@ impl<T: Config> Pallet<T> { ...@@ -225,7 +230,7 @@ impl<T: Config> Pallet<T> {
weight_limit: WeightLimit::Unlimited, weight_limit: WeightLimit::Unlimited,
check_origin: None, check_origin: None,
}, },
mk_coretime_call(crate::coretime::CoretimeCalls::NotifyCoreCount(core_count)), mk_coretime_call::<T>(crate::coretime::CoretimeCalls::NotifyCoreCount(core_count)),
]); ]);
if let Err(err) = send_xcm::<T::SendXcm>( if let Err(err) = send_xcm::<T::SendXcm>(
Location::new(0, [Junction::Parachain(T::BrokerId::get())]), Location::new(0, [Junction::Parachain(T::BrokerId::get())]),
...@@ -244,7 +249,7 @@ impl<T: Config> Pallet<T> { ...@@ -244,7 +249,7 @@ impl<T: Config> Pallet<T> {
weight_limit: WeightLimit::Unlimited, weight_limit: WeightLimit::Unlimited,
check_origin: None, check_origin: None,
}, },
mk_coretime_call(crate::coretime::CoretimeCalls::SwapLeases(one, other)), mk_coretime_call::<T>(crate::coretime::CoretimeCalls::SwapLeases(one, other)),
]); ]);
if let Err(err) = send_xcm::<T::SendXcm>( if let Err(err) = send_xcm::<T::SendXcm>(
Location::new(0, [Junction::Parachain(T::BrokerId::get())]), Location::new(0, [Junction::Parachain(T::BrokerId::get())]),
...@@ -261,12 +266,10 @@ impl<T: Config> OnNewSession<BlockNumberFor<T>> for Pallet<T> { ...@@ -261,12 +266,10 @@ impl<T: Config> OnNewSession<BlockNumberFor<T>> for Pallet<T> {
} }
} }
fn mk_coretime_call(call: crate::coretime::CoretimeCalls) -> Instruction<()> { fn mk_coretime_call<T: Config>(call: crate::coretime::CoretimeCalls) -> Instruction<()> {
Instruction::Transact { Instruction::Transact {
origin_kind: OriginKind::Superuser, origin_kind: OriginKind::Superuser,
// Largest call is set_lease with 1526 byte: require_weight_at_most: T::MaxXcmTransactWeight::get(),
// Longest call is reserve() with 31_000_000
require_weight_at_most: Weight::from_parts(170_000_000, 20_000),
call: BrokerRuntimePallets::Broker(call).encode().into(), call: BrokerRuntimePallets::Broker(call).encode().into(),
} }
} }
...@@ -64,7 +64,7 @@ use sp_runtime::{ ...@@ -64,7 +64,7 @@ use sp_runtime::{
KeyTypeId, Perbill, KeyTypeId, Perbill,
}; };
use sp_session::{GetSessionNumber, GetValidatorCount}; use sp_session::{GetSessionNumber, GetValidatorCount};
use sp_staking::offence::{DisableStrategy, Kind, Offence, OffenceError, ReportOffence}; use sp_staking::offence::{Kind, Offence, OffenceError, ReportOffence};
use sp_std::{ use sp_std::{
collections::{btree_map::Entry, btree_set::BTreeSet}, collections::{btree_map::Entry, btree_set::BTreeSet},
prelude::*, prelude::*,
...@@ -134,15 +134,6 @@ where ...@@ -134,15 +134,6 @@ where
self.time_slot.clone() self.time_slot.clone()
} }
fn disable_strategy(&self) -> DisableStrategy {
match self.kind {
SlashingOffenceKind::ForInvalid => DisableStrategy::Always,
// in the future we might change it based on number of disputes initiated:
// <https://github.com/paritytech/polkadot/issues/5946>
SlashingOffenceKind::AgainstValid => DisableStrategy::Never,
}
}
fn slash_fraction(&self, _offenders: u32) -> Perbill { fn slash_fraction(&self, _offenders: u32) -> Perbill {
self.slash_fraction self.slash_fraction
} }
......
...@@ -245,7 +245,7 @@ pub enum AggregateMessageOrigin { ...@@ -245,7 +245,7 @@ pub enum AggregateMessageOrigin {
/// Identifies a UMP queue inside the `MessageQueue` pallet. /// Identifies a UMP queue inside the `MessageQueue` pallet.
/// ///
/// It is written in verbose form since future variants like `Here` and `Bridged` are already /// It is written in verbose form since future variants like `Here` and `Bridged` are already
/// forseeable. /// foreseeable.
#[derive(Encode, Decode, Clone, MaxEncodedLen, Eq, PartialEq, RuntimeDebug, TypeInfo)] #[derive(Encode, Decode, Clone, MaxEncodedLen, Eq, PartialEq, RuntimeDebug, TypeInfo)]
pub enum UmpQueueId { pub enum UmpQueueId {
/// The message originated from this parachain. /// The message originated from this parachain.
......
...@@ -387,6 +387,7 @@ impl assigner_coretime::Config for Test {} ...@@ -387,6 +387,7 @@ impl assigner_coretime::Config for Test {}
parameter_types! { parameter_types! {
pub const BrokerId: u32 = 10u32; pub const BrokerId: u32 = 10u32;
pub MaxXcmTransactWeight: Weight = Weight::from_parts(10_000_000, 10_000);
} }
impl coretime::Config for Test { impl coretime::Config for Test {
...@@ -396,6 +397,7 @@ impl coretime::Config for Test { ...@@ -396,6 +397,7 @@ impl coretime::Config for Test {
type BrokerId = BrokerId; type BrokerId = BrokerId;
type WeightInfo = crate::coretime::TestWeightInfo; type WeightInfo = crate::coretime::TestWeightInfo;
type SendXcm = DummyXcmSender; type SendXcm = DummyXcmSender;
type MaxXcmTransactWeight = MaxXcmTransactWeight;
} }
pub struct DummyXcmSender; pub struct DummyXcmSender;
......
...@@ -641,7 +641,7 @@ pub mod pallet { ...@@ -641,7 +641,7 @@ pub mod pallet {
/// ///
/// This is only used at genesis or by root. /// This is only used at genesis or by root.
/// ///
/// TODO: Remove once coretime is the standard accross all chains. /// TODO: Remove once coretime is the standard across all chains.
type AssignCoretime: AssignCoretime; type AssignCoretime: AssignCoretime;
} }
......
...@@ -1099,7 +1099,7 @@ fn limit_and_sanitize_disputes< ...@@ -1099,7 +1099,7 @@ fn limit_and_sanitize_disputes<
} }
// Helper function for filtering candidates which don't pass the given predicate. When/if the first // Helper function for filtering candidates which don't pass the given predicate. When/if the first
// candidate which failes the predicate is found, all the other candidates that follow are dropped. // candidate which failed the predicate is found, all the other candidates that follow are dropped.
fn retain_candidates< fn retain_candidates<
T: inclusion::Config + paras::Config + inclusion::Config, T: inclusion::Config + paras::Config + inclusion::Config,
F: FnMut(ParaId, &mut C) -> bool, F: FnMut(ParaId, &mut C) -> bool,
......
...@@ -16,18 +16,11 @@ ...@@ -16,18 +16,11 @@
#[cfg(feature = "std")] #[cfg(feature = "std")]
fn main() { fn main() {
substrate_wasm_builder::WasmBuilder::new() substrate_wasm_builder::WasmBuilder::build_using_defaults();
.with_current_project()
.import_memory()
.export_heap_base()
.build();
substrate_wasm_builder::WasmBuilder::new() substrate_wasm_builder::WasmBuilder::init_with_defaults()
.with_current_project()
.set_file_name("fast_runtime_binary.rs") .set_file_name("fast_runtime_binary.rs")
.enable_feature("fast-runtime") .enable_feature("fast-runtime")
.import_memory()
.export_heap_base()
.build(); .build();
} }
......
...@@ -167,16 +167,11 @@ where ...@@ -167,16 +167,11 @@ where
}, },
]); ]);
let encoded_versioned_xcm =
VersionedXcm::V4(program).encode().try_into().map_err(|error| {
log::error!(target: "runtime::on_reap_identity", "XCM too large, error: {:?}", error);
pallet_xcm::Error::<Runtime>::XcmTooLarge
})?;
// send // send
let _ = <pallet_xcm::Pallet<Runtime>>::send_blob( let _ = <pallet_xcm::Pallet<Runtime>>::send(
RawOrigin::Root.into(), RawOrigin::Root.into(),
Box::new(VersionedLocation::V4(destination)), Box::new(VersionedLocation::V4(destination)),
encoded_versioned_xcm, Box::new(VersionedXcm::V4(program)),
)?; )?;
Ok(()) Ok(())
} }
......
...@@ -1058,6 +1058,7 @@ impl parachains_scheduler::Config for Runtime { ...@@ -1058,6 +1058,7 @@ impl parachains_scheduler::Config for Runtime {
parameter_types! { parameter_types! {
pub const BrokerId: u32 = BROKER_ID; pub const BrokerId: u32 = BROKER_ID;
pub MaxXcmTransactWeight: Weight = Weight::from_parts(200_000_000, 20_000);
} }
impl coretime::Config for Runtime { impl coretime::Config for Runtime {
...@@ -1067,6 +1068,7 @@ impl coretime::Config for Runtime { ...@@ -1067,6 +1068,7 @@ impl coretime::Config for Runtime {
type BrokerId = BrokerId; type BrokerId = BrokerId;
type WeightInfo = weights::runtime_parachains_coretime::WeightInfo<Runtime>; type WeightInfo = weights::runtime_parachains_coretime::WeightInfo<Runtime>;
type SendXcm = crate::xcm_config::XcmRouter; type SendXcm = crate::xcm_config::XcmRouter;
type MaxXcmTransactWeight = MaxXcmTransactWeight;
} }
parameter_types! { parameter_types! {
......
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
//! Autogenerated weights for `pallet_xcm` //! Autogenerated weights for `pallet_xcm`
//! //!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
//! DATE: 2024-03-21, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! DATE: 2024-02-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000` //! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `runner-h2rr8wx7-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz` //! HOSTNAME: `runner-bn-ce5rx-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("rococo-dev")`, DB CACHE: 1024 //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("rococo-dev")`, DB CACHE: 1024
// Executed Command: // Executed Command:
...@@ -60,26 +60,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -60,26 +60,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `180` // Measured: `180`
// Estimated: `3645` // Estimated: `3645`
// Minimum execution time: 24_724_000 picoseconds. // Minimum execution time: 25_043_000 picoseconds.
Weight::from_parts(25_615_000, 0) Weight::from_parts(25_682_000, 0)
.saturating_add(Weight::from_parts(0, 3645))
.saturating_add(T::DbWeight::get().reads(4))
.saturating_add(T::DbWeight::get().writes(2))
}
/// Storage: `Dmp::DeliveryFeeFactor` (r:1 w:0)
/// Proof: `Dmp::DeliveryFeeFactor` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `XcmPallet::SupportedVersion` (r:1 w:0)
/// Proof: `XcmPallet::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Dmp::DownwardMessageQueues` (r:1 w:1)
/// Proof: `Dmp::DownwardMessageQueues` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Dmp::DownwardMessageQueueHeads` (r:1 w:1)
/// Proof: `Dmp::DownwardMessageQueueHeads` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn send_blob() -> Weight {
// Proof Size summary in bytes:
// Measured: `180`
// Estimated: `3645`
// Minimum execution time: 24_709_000 picoseconds.
Weight::from_parts(25_326_000, 0)
.saturating_add(Weight::from_parts(0, 3645)) .saturating_add(Weight::from_parts(0, 3645))
.saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads(4))
.saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes(2))
...@@ -98,8 +80,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -98,8 +80,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `180` // Measured: `180`
// Estimated: `3645` // Estimated: `3645`
// Minimum execution time: 106_600_000 picoseconds. // Minimum execution time: 107_570_000 picoseconds.
Weight::from_parts(110_781_000, 0) Weight::from_parts(109_878_000, 0)
.saturating_add(Weight::from_parts(0, 3645)) .saturating_add(Weight::from_parts(0, 3645))
.saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes(3))
...@@ -118,8 +100,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -118,8 +100,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `232` // Measured: `232`
// Estimated: `3697` // Estimated: `3697`
// Minimum execution time: 103_030_000 picoseconds. // Minimum execution time: 106_341_000 picoseconds.
Weight::from_parts(106_018_000, 0) Weight::from_parts(109_135_000, 0)
.saturating_add(Weight::from_parts(0, 3697)) .saturating_add(Weight::from_parts(0, 3697))
.saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes(3))
...@@ -138,8 +120,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -138,8 +120,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `180` // Measured: `180`
// Estimated: `3645` // Estimated: `3645`
// Minimum execution time: 107_017_000 picoseconds. // Minimum execution time: 108_372_000 picoseconds.
Weight::from_parts(109_214_000, 0) Weight::from_parts(112_890_000, 0)
.saturating_add(Weight::from_parts(0, 3645)) .saturating_add(Weight::from_parts(0, 3645))
.saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes(3))
...@@ -148,16 +130,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -148,16 +130,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `0` // Measured: `0`
// Estimated: `0` // Estimated: `0`
// Minimum execution time: 6_864_000 picoseconds. // Minimum execution time: 6_957_000 picoseconds.
Weight::from_parts(7_135_000, 0) Weight::from_parts(7_417_000, 0)
.saturating_add(Weight::from_parts(0, 0))
}
fn execute_blob() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 6_955_000 picoseconds.
Weight::from_parts(7_165_000, 0)
.saturating_add(Weight::from_parts(0, 0)) .saturating_add(Weight::from_parts(0, 0))
} }
/// Storage: `XcmPallet::SupportedVersion` (r:0 w:1) /// Storage: `XcmPallet::SupportedVersion` (r:0 w:1)
...@@ -166,8 +140,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -166,8 +140,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `0` // Measured: `0`
// Estimated: `0` // Estimated: `0`
// Minimum execution time: 6_827_000 picoseconds. // Minimum execution time: 7_053_000 picoseconds.
Weight::from_parts(7_211_000, 0) Weight::from_parts(7_462_000, 0)
.saturating_add(Weight::from_parts(0, 0)) .saturating_add(Weight::from_parts(0, 0))
.saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes(1))
} }
...@@ -175,8 +149,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -175,8 +149,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `0` // Measured: `0`
// Estimated: `0` // Estimated: `0`
// Minimum execution time: 1_788_000 picoseconds. // Minimum execution time: 1_918_000 picoseconds.
Weight::from_parts(2_021_000, 0) Weight::from_parts(2_037_000, 0)
.saturating_add(Weight::from_parts(0, 0)) .saturating_add(Weight::from_parts(0, 0))
} }
/// Storage: `XcmPallet::VersionNotifiers` (r:1 w:1) /// Storage: `XcmPallet::VersionNotifiers` (r:1 w:1)
...@@ -197,8 +171,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -197,8 +171,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `180` // Measured: `180`
// Estimated: `3645` // Estimated: `3645`
// Minimum execution time: 30_627_000 picoseconds. // Minimum execution time: 30_417_000 picoseconds.
Weight::from_parts(31_350_000, 0) Weight::from_parts(31_191_000, 0)
.saturating_add(Weight::from_parts(0, 3645)) .saturating_add(Weight::from_parts(0, 3645))
.saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().reads(6))
.saturating_add(T::DbWeight::get().writes(5)) .saturating_add(T::DbWeight::get().writes(5))
...@@ -219,8 +193,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -219,8 +193,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `360` // Measured: `360`
// Estimated: `3825` // Estimated: `3825`
// Minimum execution time: 36_688_000 picoseconds. // Minimum execution time: 36_666_000 picoseconds.
Weight::from_parts(37_345_000, 0) Weight::from_parts(37_779_000, 0)
.saturating_add(Weight::from_parts(0, 3825)) .saturating_add(Weight::from_parts(0, 3825))
.saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes(4))
...@@ -231,8 +205,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -231,8 +205,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `0` // Measured: `0`
// Estimated: `0` // Estimated: `0`
// Minimum execution time: 1_829_000 picoseconds. // Minimum execution time: 1_869_000 picoseconds.
Weight::from_parts(1_986_000, 0) Weight::from_parts(2_003_000, 0)
.saturating_add(Weight::from_parts(0, 0)) .saturating_add(Weight::from_parts(0, 0))
.saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes(1))
} }
...@@ -242,8 +216,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -242,8 +216,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `22` // Measured: `22`
// Estimated: `13387` // Estimated: `13387`
// Minimum execution time: 16_104_000 picoseconds. // Minimum execution time: 16_188_000 picoseconds.
Weight::from_parts(16_464_000, 0) Weight::from_parts(16_435_000, 0)
.saturating_add(Weight::from_parts(0, 13387)) .saturating_add(Weight::from_parts(0, 13387))
.saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes(2))
...@@ -254,8 +228,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -254,8 +228,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `26` // Measured: `26`
// Estimated: `13391` // Estimated: `13391`
// Minimum execution time: 16_267_000 picoseconds. // Minimum execution time: 16_431_000 picoseconds.
Weight::from_parts(16_675_000, 0) Weight::from_parts(16_935_000, 0)
.saturating_add(Weight::from_parts(0, 13391)) .saturating_add(Weight::from_parts(0, 13391))
.saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes(2))
...@@ -266,8 +240,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -266,8 +240,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `40` // Measured: `40`
// Estimated: `15880` // Estimated: `15880`
// Minimum execution time: 18_487_000 picoseconds. // Minimum execution time: 18_460_000 picoseconds.
Weight::from_parts(19_102_000, 0) Weight::from_parts(18_885_000, 0)
.saturating_add(Weight::from_parts(0, 15880)) .saturating_add(Weight::from_parts(0, 15880))
.saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().reads(6))
} }
...@@ -285,8 +259,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -285,8 +259,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `216` // Measured: `216`
// Estimated: `6156` // Estimated: `6156`
// Minimum execution time: 29_603_000 picoseconds. // Minimum execution time: 29_623_000 picoseconds.
Weight::from_parts(31_002_000, 0) Weight::from_parts(30_661_000, 0)
.saturating_add(Weight::from_parts(0, 6156)) .saturating_add(Weight::from_parts(0, 6156))
.saturating_add(T::DbWeight::get().reads(6)) .saturating_add(T::DbWeight::get().reads(6))
.saturating_add(T::DbWeight::get().writes(3)) .saturating_add(T::DbWeight::get().writes(3))
...@@ -297,8 +271,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -297,8 +271,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `69` // Measured: `69`
// Estimated: `10959` // Estimated: `10959`
// Minimum execution time: 12_183_000 picoseconds. // Minimum execution time: 12_043_000 picoseconds.
Weight::from_parts(12_587_000, 0) Weight::from_parts(12_360_000, 0)
.saturating_add(Weight::from_parts(0, 10959)) .saturating_add(Weight::from_parts(0, 10959))
.saturating_add(T::DbWeight::get().reads(4)) .saturating_add(T::DbWeight::get().reads(4))
} }
...@@ -308,8 +282,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -308,8 +282,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `33` // Measured: `33`
// Estimated: `13398` // Estimated: `13398`
// Minimum execution time: 16_372_000 picoseconds. // Minimum execution time: 16_511_000 picoseconds.
Weight::from_parts(16_967_000, 0) Weight::from_parts(17_011_000, 0)
.saturating_add(Weight::from_parts(0, 13398)) .saturating_add(Weight::from_parts(0, 13398))
.saturating_add(T::DbWeight::get().reads(5)) .saturating_add(T::DbWeight::get().reads(5))
.saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes(2))
...@@ -328,8 +302,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -328,8 +302,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `216` // Measured: `216`
// Estimated: `13581` // Estimated: `13581`
// Minimum execution time: 38_904_000 picoseconds. // Minimum execution time: 39_041_000 picoseconds.
Weight::from_parts(39_983_000, 0) Weight::from_parts(39_883_000, 0)
.saturating_add(Weight::from_parts(0, 13581)) .saturating_add(Weight::from_parts(0, 13581))
.saturating_add(T::DbWeight::get().reads(9)) .saturating_add(T::DbWeight::get().reads(9))
.saturating_add(T::DbWeight::get().writes(4)) .saturating_add(T::DbWeight::get().writes(4))
...@@ -342,8 +316,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -342,8 +316,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `0` // Measured: `0`
// Estimated: `1485` // Estimated: `1485`
// Minimum execution time: 2_067_000 picoseconds. // Minimum execution time: 2_030_000 picoseconds.
Weight::from_parts(2_195_000, 0) Weight::from_parts(2_150_000, 0)
.saturating_add(Weight::from_parts(0, 1485)) .saturating_add(Weight::from_parts(0, 1485))
.saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads(1))
.saturating_add(T::DbWeight::get().writes(2)) .saturating_add(T::DbWeight::get().writes(2))
...@@ -354,8 +328,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -354,8 +328,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `7576` // Measured: `7576`
// Estimated: `11041` // Estimated: `11041`
// Minimum execution time: 23_982_000 picoseconds. // Minimum execution time: 22_615_000 picoseconds.
Weight::from_parts(24_409_000, 0) Weight::from_parts(23_008_000, 0)
.saturating_add(Weight::from_parts(0, 11041)) .saturating_add(Weight::from_parts(0, 11041))
.saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads(1))
.saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes(1))
...@@ -366,8 +340,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> { ...@@ -366,8 +340,8 @@ impl<T: frame_system::Config> pallet_xcm::WeightInfo for WeightInfo<T> {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `23` // Measured: `23`
// Estimated: `3488` // Estimated: `3488`
// Minimum execution time: 33_430_000 picoseconds. // Minimum execution time: 34_438_000 picoseconds.
Weight::from_parts(34_433_000, 0) Weight::from_parts(35_514_000, 0)
.saturating_add(Weight::from_parts(0, 3488)) .saturating_add(Weight::from_parts(0, 3488))
.saturating_add(T::DbWeight::get().reads(1)) .saturating_add(T::DbWeight::get().reads(1))
.saturating_add(T::DbWeight::get().writes(1)) .saturating_add(T::DbWeight::get().writes(1))
......
...@@ -11,14 +11,10 @@ license.workspace = true ...@@ -11,14 +11,10 @@ license.workspace = true
workspace = true workspace = true
[dependencies] [dependencies]
bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] }
parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive"] } parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive"] }
log = { workspace = true } log = { workspace = true }
rustc-hex = { version = "2.1.0", default-features = false }
scale-info = { version = "2.11.1", default-features = false, features = ["derive"] } scale-info = { version = "2.11.1", default-features = false, features = ["derive"] }
serde = { workspace = true } serde = { workspace = true }
serde_derive = { optional = true, workspace = true }
smallvec = "1.8.0"
authority-discovery-primitives = { package = "sp-authority-discovery", path = "../../../substrate/primitives/authority-discovery", default-features = false } authority-discovery-primitives = { package = "sp-authority-discovery", path = "../../../substrate/primitives/authority-discovery", default-features = false }
babe-primitives = { package = "sp-consensus-babe", path = "../../../substrate/primitives/consensus/babe", default-features = false } babe-primitives = { package = "sp-consensus-babe", path = "../../../substrate/primitives/consensus/babe", default-features = false }
...@@ -63,7 +59,6 @@ pallet-vesting = { path = "../../../substrate/frame/vesting", default-features = ...@@ -63,7 +59,6 @@ pallet-vesting = { path = "../../../substrate/frame/vesting", default-features =
runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false }
primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false }
pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false } pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false }
polkadot-parachain-primitives = { path = "../../parachain", default-features = false }
polkadot-runtime-parachains = { path = "../parachains", default-features = false } polkadot-runtime-parachains = { path = "../parachains", default-features = false }
xcm-builder = { package = "staging-xcm-builder", path = "../../xcm/xcm-builder", default-features = false } xcm-builder = { package = "staging-xcm-builder", path = "../../xcm/xcm-builder", default-features = false }
xcm-executor = { package = "staging-xcm-executor", path = "../../xcm/xcm-executor", default-features = false } xcm-executor = { package = "staging-xcm-executor", path = "../../xcm/xcm-executor", default-features = false }
...@@ -92,7 +87,6 @@ std = [ ...@@ -92,7 +87,6 @@ std = [
"authority-discovery-primitives/std", "authority-discovery-primitives/std",
"babe-primitives/std", "babe-primitives/std",
"beefy-primitives/std", "beefy-primitives/std",
"bitvec/std",
"block-builder-api/std", "block-builder-api/std",
"frame-election-provider-support/std", "frame-election-provider-support/std",
"frame-executive/std", "frame-executive/std",
...@@ -118,14 +112,11 @@ std = [ ...@@ -118,14 +112,11 @@ std = [
"pallet-vesting/std", "pallet-vesting/std",
"pallet-xcm/std", "pallet-xcm/std",
"parity-scale-codec/std", "parity-scale-codec/std",
"polkadot-parachain-primitives/std",
"polkadot-runtime-parachains/std", "polkadot-runtime-parachains/std",
"primitives/std", "primitives/std",
"runtime-common/std", "runtime-common/std",
"rustc-hex/std",
"scale-info/std", "scale-info/std",
"serde/std", "serde/std",
"serde_derive",
"sp-api/std", "sp-api/std",
"sp-core/std", "sp-core/std",
"sp-genesis-builder/std", "sp-genesis-builder/std",
...@@ -157,7 +148,6 @@ runtime-benchmarks = [ ...@@ -157,7 +148,6 @@ runtime-benchmarks = [
"pallet-timestamp/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks",
"pallet-vesting/runtime-benchmarks", "pallet-vesting/runtime-benchmarks",
"pallet-xcm/runtime-benchmarks", "pallet-xcm/runtime-benchmarks",
"polkadot-parachain-primitives/runtime-benchmarks",
"polkadot-runtime-parachains/runtime-benchmarks", "polkadot-runtime-parachains/runtime-benchmarks",
"primitives/runtime-benchmarks", "primitives/runtime-benchmarks",
"runtime-common/runtime-benchmarks", "runtime-common/runtime-benchmarks",
......
...@@ -17,9 +17,5 @@ ...@@ -17,9 +17,5 @@
use substrate_wasm_builder::WasmBuilder; use substrate_wasm_builder::WasmBuilder;
fn main() { fn main() {
WasmBuilder::new() WasmBuilder::build_using_defaults();
.with_current_project()
.import_memory()
.export_heap_base()
.build()
} }
...@@ -14,18 +14,12 @@ smallvec = "1.8.0" ...@@ -14,18 +14,12 @@ smallvec = "1.8.0"
frame-support = { path = "../../../../substrate/frame/support", default-features = false } frame-support = { path = "../../../../substrate/frame/support", default-features = false }
primitives = { package = "polkadot-primitives", path = "../../../primitives", default-features = false } primitives = { package = "polkadot-primitives", path = "../../../primitives", default-features = false }
runtime-common = { package = "polkadot-runtime-common", path = "../../common", default-features = false }
sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false } sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
sp-weights = { path = "../../../../substrate/primitives/weights", default-features = false }
sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
[features] [features]
default = ["std"] default = ["std"]
std = [ std = [
"frame-support/std", "frame-support/std",
"primitives/std", "primitives/std",
"runtime-common/std",
"sp-core/std",
"sp-runtime/std", "sp-runtime/std",
"sp-weights/std",
] ]