Add event with XCM executor outcome, which includes weight fee (#1286)

* Add event with XCM executor outcome, which includes weight fee

* Show weight used in processed messages

* remove added event

* named events

* message_id for message_hash

* Update pallets/xcmp-queue/src/lib.rs

Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com>
This commit is contained in:
girazoki
2022-06-20 15:49:28 +02:00
committed by GitHub
parent 4e3ccd56e2
commit 1579a8a3a4
+26 -15
View File
@@ -148,7 +148,7 @@ pub mod pallet {
let used = Self::handle_xcm_message(sender, sent_at, xcm, weight_limit) let used = Self::handle_xcm_message(sender, sent_at, xcm, weight_limit)
.map_err(|_| Error::<T>::WeightOverLimit)?; .map_err(|_| Error::<T>::WeightOverLimit)?;
Overweight::<T>::remove(index); Overweight::<T>::remove(index);
Self::deposit_event(Event::OverweightServiced(index, used)); Self::deposit_event(Event::OverweightServiced { index, used });
Ok(Some(used.saturating_add(1_000_000)).into()) Ok(Some(used.saturating_add(1_000_000)).into())
} }
@@ -263,21 +263,26 @@ pub mod pallet {
#[pallet::generate_deposit(pub(super) fn deposit_event)] #[pallet::generate_deposit(pub(super) fn deposit_event)]
pub enum Event<T: Config> { pub enum Event<T: Config> {
/// Some XCM was executed ok. /// Some XCM was executed ok.
Success(Option<T::Hash>), Success { message_hash: Option<T::Hash>, weight: Weight },
/// Some XCM failed. /// Some XCM failed.
Fail(Option<T::Hash>, XcmError), Fail { message_hash: Option<T::Hash>, error: XcmError, weight: Weight },
/// Bad XCM version used. /// Bad XCM version used.
BadVersion(Option<T::Hash>), BadVersion { message_hash: Option<T::Hash> },
/// Bad XCM format used. /// Bad XCM format used.
BadFormat(Option<T::Hash>), BadFormat { message_hash: Option<T::Hash> },
/// An upward message was sent to the relay chain. /// An upward message was sent to the relay chain.
UpwardMessageSent(Option<T::Hash>), UpwardMessageSent { message_hash: Option<T::Hash> },
/// An HRMP message was sent to a sibling parachain. /// An HRMP message was sent to a sibling parachain.
XcmpMessageSent(Option<T::Hash>), XcmpMessageSent { message_hash: Option<T::Hash> },
/// An XCM exceeded the individual message weight budget. /// An XCM exceeded the individual message weight budget.
OverweightEnqueued(ParaId, RelayBlockNumber, OverweightIndex, Weight), OverweightEnqueued {
sender: ParaId,
sent_at: RelayBlockNumber,
index: OverweightIndex,
required: Weight,
},
/// An XCM from the overweight queue was executed with the given actual weight used. /// An XCM from the overweight queue was executed with the given actual weight used.
OverweightServiced(OverweightIndex, Weight), OverweightServiced { index: OverweightIndex, used: Weight },
} }
#[pallet::error] #[pallet::error]
@@ -599,15 +604,20 @@ impl<T: Config> Pallet<T> {
let (result, event) = match Xcm::<T::Call>::try_from(xcm) { let (result, event) = match Xcm::<T::Call>::try_from(xcm) {
Ok(xcm) => { Ok(xcm) => {
let location = (1, Parachain(sender.into())); let location = (1, Parachain(sender.into()));
match T::XcmExecutor::execute_xcm(location, xcm, max_weight) { match T::XcmExecutor::execute_xcm(location, xcm, max_weight) {
Outcome::Error(e) => (Err(e), Event::Fail(Some(hash), e)), Outcome::Error(e) =>
Outcome::Complete(w) => (Ok(w), Event::Success(Some(hash))), (Err(e), Event::Fail { message_hash: Some(hash), error: e, weight: 0 }),
Outcome::Complete(w) =>
(Ok(w), Event::Success { message_hash: Some(hash), weight: w }),
// As far as the caller is concerned, this was dispatched without error, so // As far as the caller is concerned, this was dispatched without error, so
// we just report the weight used. // we just report the weight used.
Outcome::Incomplete(w, e) => (Ok(w), Event::Fail(Some(hash), e)), Outcome::Incomplete(w, e) =>
(Ok(w), Event::Fail { message_hash: Some(hash), error: e, weight: w }),
} }
}, },
Err(()) => (Err(XcmError::UnhandledXcmVersion), Event::BadVersion(Some(hash))), Err(()) =>
(Err(XcmError::UnhandledXcmVersion), Event::BadVersion { message_hash: Some(hash) }),
}; };
Self::deposit_event(event); Self::deposit_event(event);
result result
@@ -644,7 +654,8 @@ impl<T: Config> Pallet<T> {
.saturating_sub(remaining_fragments.len()); .saturating_sub(remaining_fragments.len());
let overweight_xcm = last_remaining_fragments[..msg_len].to_vec(); let overweight_xcm = last_remaining_fragments[..msg_len].to_vec();
let index = Self::stash_overweight(sender, sent_at, overweight_xcm); let index = Self::stash_overweight(sender, sent_at, overweight_xcm);
let e = Event::OverweightEnqueued(sender, sent_at, index, required); let e =
Event::OverweightEnqueued { sender, sent_at, index, required };
Self::deposit_event(e); Self::deposit_event(e);
}, },
Err(XcmError::WeightLimitReached(required)) Err(XcmError::WeightLimitReached(required))
@@ -1098,7 +1109,7 @@ impl<T: Config> SendXcm for Pallet<T> {
versioned_xcm, versioned_xcm,
) )
.map_err(|e| SendError::Transport(<&'static str>::from(e)))?; .map_err(|e| SendError::Transport(<&'static str>::from(e)))?;
Self::deposit_event(Event::XcmpMessageSent(Some(hash))); Self::deposit_event(Event::XcmpMessageSent { message_hash: Some(hash) });
Ok(()) Ok(())
}, },
// Anything else is unhandled. This includes a message this is meant for us. // Anything else is unhandled. This includes a message this is meant for us.