mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-10 04:07:59 +00:00
3a459e8fcf
* Fixes * Undiener * Undiener * Undiener * Lockfile * Changes for send returning hash * Include message ID as params to execute_xcm * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Companion fixes * Formatting * Fixes * Formatting * Bump * Bump * Fixes * Formatting * Make the price of UMP/XCMP message sending configurable * cargo fmt * Remove InvertLocation * Formatting * Use ConstantPrice from polkadot-runtime-common * Fix naming * cargo fmt * Fixes * Fixes * Fixes * Add CallDispatcher * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Remove unused import * Remove unused import * XCMv3 fixes (#1710) * Fixes XCMv3 related Fixes XCMv3 (removed query_holding) Fixes XCMv3 - should use _depositable_count? Fixes XCMv3 - removed TrustedReserve Fixes - missing weights for statemine/statemint/westmint [DO-NOT-CHERRY-PICK] tmp return query_holding to aviod conficts to master Fixes - missing functions for pallet_xcm_benchmarks::generic::Config Fixes for XCMv3 benchmarking Fix xcm - removed query_holding * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm westmint assets pallet_xcm_benchmarks::generic * Fix imports * Avoid consuming XCM message for NotApplicable scenario (#1787) * Avoid consuming message for NotApplicable scenario * Avoid consuming message for NotApplicable scenario tests * Add 10 message processing limit to DMP queue * Add 10 message limit to XCMP queue * Always increment the message_processed count whenever a message is processed * Fix formatting * Set an upper limit to the overweight message DMP queue * Add upper limit to XCMP overweight message queue * Fix for missing weight for `fn unpaid_execution()` * Fix - usage of `messages_processed` * Fixes * Fixes * Fixes * cargo fmt * Fixes * Fixes * Fixes * Fixes * Remove unused import * Fixes for gav-xcm-v3 (#1835) * Fix for FungiblesAdapter - trait changes: Contains -> AssetChecking * Fix for missing weight for `fn unpaid_execution()` * Used NonLocalMint for all NonZeroIssuance * Fix * Fixes * Fixes * Fixes * Fixes * Fixes * Fix tests * Fixes * Add SafeCallFilter * Add missing config items * Add TODO * Use () as the PriceForParentDelivery * Fixes * Fixes * Fixes * Fixes * Update transact_origin to transact_origin_and_runtime_call * Add ReachableDest config item to XCM pallet * Update SafeCallFilter to allow remark_with_event in runtime benchmarks * cargo fmt * Update substrate * Fix worst_case_holding * Fix DMQ queue unit tests * Remove unused label * cargo fmt * Actually process incoming XCMs * Fixes * Fixes * Fixes * Fixes - return back Weightless * Added measured benchmarks for `pallet_xcm` (#1968) * Fix Fix Fix * Fix * Fixes for transact benchmark * Fixes add pallet_xcm to benchmarks * Revert remark_with_event * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::generic * Fixes * TMP * Fix for reserve_asset_deposited * ".git/.scripts/bench-bot.sh" pallet statemine assets pallet_xcm * Fix * ".git/.scripts/bench-bot.sh" pallet statemint assets pallet_xcm * Fix * ".git/.scripts/bench-bot.sh" pallet westmint assets pallet_xcm * Fix westmint * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::generic * Fix * ".git/.scripts/bench-bot.sh" xcm westmint assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" pallet collectives-polkadot collectives pallet_xcm * Fix for collectives * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_xcm * ".git/.scripts/bench-bot.sh" pallet bridge-hub-rococo bridge-hubs pallet_xcm * Fixes for bridge-hubs * Fixes - return back Weightless * Fix - removed MigrateToTrackInactive for contracts-rococo Co-authored-by: command-bot <> * cargo fmt * Fix benchmarks * Bko gav xcm v3 (#1993) * Fix * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm westmint assets pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm statemine assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm statemint assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm westmint assets pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" pallet statemine assets pallet_xcm * ".git/.scripts/bench-bot.sh" pallet westmint assets pallet_xcm * ".git/.scripts/bench-bot.sh" pallet statemint assets pallet_xcm * ".git/.scripts/bench-bot.sh" pallet collectives-polkadot collectives pallet_xcm * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_xcm * ".git/.scripts/bench-bot.sh" pallet bridge-hub-rococo bridge-hubs pallet_xcm Co-authored-by: command-bot <> * Change AllowUnpaidExecutionFrom to be explicit * xcm-v3 benchmarks, weights, fixes for bridge-hubs (#2035) * Dumy weights to get compile * Change UniversalLocation according to https://github.com/paritytech/polkadot/pull/4097 (Location Inversion Removed) * Fix bridge-hubs weights * ".git/.scripts/bench-bot.sh" pallet statemine assets pallet_xcm * ".git/.scripts/bench-bot.sh" pallet statemint assets pallet_xcm * ".git/.scripts/bench-bot.sh" pallet collectives-polkadot collectives pallet_xcm * ".git/.scripts/bench-bot.sh" pallet westmint assets pallet_xcm * ".git/.scripts/bench-bot.sh" xcm bridge-hub-kusama bridge-hubs pallet_xcm_benchmarks::generic * ".git/.scripts/bench-bot.sh" xcm bridge-hub-kusama bridge-hubs pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" pallet bridge-hub-kusama bridge-hubs pallet_xcm * ".git/.scripts/bench-bot.sh" pallet bridge-hub-rococo bridge-hubs pallet_xcm * ".git/.scripts/bench-bot.sh" xcm bridge-hub-rococo bridge-hubs pallet_xcm_benchmarks::fungible * ".git/.scripts/bench-bot.sh" xcm bridge-hub-rococo bridge-hubs pallet_xcm_benchmarks::generic * Change NetworkId to Option<NetworkId> Co-authored-by: command-bot <> Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> * Add event for showing the hash of an UMP sent message (#1228) * Add UpwardMessageSent event in parachain-system * additional fixes * Message Id * Fix errors from merge * fmt * more fmt * Remove todo * more formatting * Fixes * Fixes * Fixes * Fixes * Allow explicit unpaid executions from the relay chains for system parachains (#2060) * Allow explicit unpaid executions from the relay chains for system parachains * Put origin-filtering barriers into WithComputedOrigin * Use ConstU32<8> * Small nits * formatting * cargo fmt * Allow receiving XCMs from any relay chain plurality * Fixes * update lockfile for {"polkadot", "substrate"} * Update polkadot * Add runtime-benchmarks feature Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> Co-authored-by: Branislav Kontur <bkontur@gmail.com> Co-authored-by: girazoki <gorka.irazoki@gmail.com> Co-authored-by: parity-processbot <>
193 lines
6.3 KiB
Rust
193 lines
6.3 KiB
Rust
// Copyright 2020-2021 Parity Technologies (UK) Ltd.
|
|
// This file is part of Cumulus.
|
|
|
|
// Cumulus is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Cumulus is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Pallet for stuff specific to parachains' usage of XCM. Right now that's just the origin
|
|
//! used by parachains when receiving `Transact` messages from other parachains or the Relay chain
|
|
//! which must be natively represented.
|
|
|
|
#![cfg_attr(not(feature = "std"), no_std)]
|
|
|
|
use codec::{Decode, DecodeLimit, Encode};
|
|
use cumulus_primitives_core::{
|
|
relay_chain::BlockNumber as RelayBlockNumber, DmpMessageHandler, ParaId,
|
|
};
|
|
use frame_support::dispatch::Weight;
|
|
pub use pallet::*;
|
|
use scale_info::TypeInfo;
|
|
use sp_runtime::{traits::BadOrigin, RuntimeDebug};
|
|
use sp_std::{convert::TryFrom, prelude::*};
|
|
use xcm::{
|
|
latest::{ExecuteXcm, Outcome, Parent, Xcm},
|
|
VersionedXcm, MAX_XCM_DECODE_DEPTH,
|
|
};
|
|
|
|
#[frame_support::pallet]
|
|
pub mod pallet {
|
|
use super::*;
|
|
use frame_support::pallet_prelude::*;
|
|
use frame_system::pallet_prelude::*;
|
|
|
|
#[pallet::pallet]
|
|
#[pallet::generate_store(pub(super) trait Store)]
|
|
pub struct Pallet<T>(_);
|
|
|
|
/// The module configuration trait.
|
|
#[pallet::config]
|
|
pub trait Config: frame_system::Config {
|
|
/// The overarching event type.
|
|
type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
|
|
|
|
type XcmExecutor: ExecuteXcm<Self::RuntimeCall>;
|
|
}
|
|
|
|
#[pallet::error]
|
|
pub enum Error<T> {}
|
|
|
|
#[pallet::hooks]
|
|
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {}
|
|
|
|
#[pallet::call]
|
|
impl<T: Config> Pallet<T> {}
|
|
|
|
#[pallet::event]
|
|
#[pallet::generate_deposit(pub(super) fn deposit_event)]
|
|
pub enum Event<T: Config> {
|
|
/// Downward message is invalid XCM.
|
|
/// \[ id \]
|
|
InvalidFormat([u8; 32]),
|
|
/// Downward message is unsupported version of XCM.
|
|
/// \[ id \]
|
|
UnsupportedVersion([u8; 32]),
|
|
/// Downward message executed with the given outcome.
|
|
/// \[ id, outcome \]
|
|
ExecutedDownward([u8; 32], Outcome),
|
|
}
|
|
|
|
/// Origin for the parachains module.
|
|
#[derive(PartialEq, Eq, Clone, Encode, Decode, TypeInfo, RuntimeDebug, MaxEncodedLen)]
|
|
#[pallet::origin]
|
|
pub enum Origin {
|
|
/// It comes from the (parent) relay chain.
|
|
Relay,
|
|
/// It comes from a (sibling) parachain.
|
|
SiblingParachain(ParaId),
|
|
}
|
|
|
|
impl From<ParaId> for Origin {
|
|
fn from(id: ParaId) -> Origin {
|
|
Origin::SiblingParachain(id)
|
|
}
|
|
}
|
|
impl From<u32> for Origin {
|
|
fn from(id: u32) -> Origin {
|
|
Origin::SiblingParachain(id.into())
|
|
}
|
|
}
|
|
}
|
|
|
|
/// For an incoming downward message, this just adapts an XCM executor and executes DMP messages
|
|
/// immediately. Their origin is asserted to be the Parent location.
|
|
///
|
|
/// The weight `limit` is only respected as the maximum for an individual message.
|
|
///
|
|
/// Because this largely ignores the given weight limit, it probably isn't good for most production
|
|
/// uses. Use DmpQueue pallet for a more robust design.
|
|
pub struct UnlimitedDmpExecution<T>(sp_std::marker::PhantomData<T>);
|
|
impl<T: Config> DmpMessageHandler for UnlimitedDmpExecution<T> {
|
|
fn handle_dmp_messages(
|
|
iter: impl Iterator<Item = (RelayBlockNumber, Vec<u8>)>,
|
|
limit: Weight,
|
|
) -> Weight {
|
|
let mut used = Weight::zero();
|
|
for (_sent_at, data) in iter {
|
|
let id = sp_io::hashing::blake2_256(&data[..]);
|
|
let msg = VersionedXcm::<T::RuntimeCall>::decode_all_with_depth_limit(
|
|
MAX_XCM_DECODE_DEPTH,
|
|
&mut data.as_slice(),
|
|
)
|
|
.map(Xcm::<T::RuntimeCall>::try_from);
|
|
match msg {
|
|
Err(_) => Pallet::<T>::deposit_event(Event::InvalidFormat(id)),
|
|
Ok(Err(())) => Pallet::<T>::deposit_event(Event::UnsupportedVersion(id)),
|
|
Ok(Ok(x)) => {
|
|
let outcome = T::XcmExecutor::execute_xcm(Parent, x, id, limit);
|
|
used = used.saturating_add(outcome.weight_used());
|
|
Pallet::<T>::deposit_event(Event::ExecutedDownward(id, outcome));
|
|
},
|
|
}
|
|
}
|
|
used
|
|
}
|
|
}
|
|
|
|
/// For an incoming downward message, this just adapts an XCM executor and executes DMP messages
|
|
/// immediately. Their origin is asserted to be the Parent location.
|
|
///
|
|
/// This respects the given weight limit and silently drops messages if they would break it. It
|
|
/// probably isn't good for most production uses. Use DmpQueue pallet for a more robust design.
|
|
pub struct LimitAndDropDmpExecution<T>(sp_std::marker::PhantomData<T>);
|
|
impl<T: Config> DmpMessageHandler for LimitAndDropDmpExecution<T> {
|
|
fn handle_dmp_messages(
|
|
iter: impl Iterator<Item = (RelayBlockNumber, Vec<u8>)>,
|
|
limit: Weight,
|
|
) -> Weight {
|
|
let mut used = Weight::zero();
|
|
for (_sent_at, data) in iter {
|
|
let id = sp_io::hashing::blake2_256(&data[..]);
|
|
let msg = VersionedXcm::<T::RuntimeCall>::decode_all_with_depth_limit(
|
|
MAX_XCM_DECODE_DEPTH,
|
|
&mut data.as_slice(),
|
|
)
|
|
.map(Xcm::<T::RuntimeCall>::try_from);
|
|
match msg {
|
|
Err(_) => Pallet::<T>::deposit_event(Event::InvalidFormat(id)),
|
|
Ok(Err(())) => Pallet::<T>::deposit_event(Event::UnsupportedVersion(id)),
|
|
Ok(Ok(x)) => {
|
|
let weight_limit = limit.saturating_sub(used);
|
|
let outcome = T::XcmExecutor::execute_xcm(Parent, x, id, weight_limit);
|
|
used = used.saturating_add(outcome.weight_used());
|
|
Pallet::<T>::deposit_event(Event::ExecutedDownward(id, outcome));
|
|
},
|
|
}
|
|
}
|
|
used
|
|
}
|
|
}
|
|
|
|
/// Ensure that the origin `o` represents a sibling parachain.
|
|
/// Returns `Ok` with the parachain ID of the sibling or an `Err` otherwise.
|
|
pub fn ensure_sibling_para<OuterOrigin>(o: OuterOrigin) -> Result<ParaId, BadOrigin>
|
|
where
|
|
OuterOrigin: Into<Result<Origin, OuterOrigin>>,
|
|
{
|
|
match o.into() {
|
|
Ok(Origin::SiblingParachain(id)) => Ok(id),
|
|
_ => Err(BadOrigin),
|
|
}
|
|
}
|
|
|
|
/// Ensure that the origin `o` represents is the relay chain.
|
|
/// Returns `Ok` if it does or an `Err` otherwise.
|
|
pub fn ensure_relay<OuterOrigin>(o: OuterOrigin) -> Result<(), BadOrigin>
|
|
where
|
|
OuterOrigin: Into<Result<Origin, OuterOrigin>>,
|
|
{
|
|
match o.into() {
|
|
Ok(Origin::Relay) => Ok(()),
|
|
_ => Err(BadOrigin),
|
|
}
|
|
}
|