mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-19 19:15:41 +00:00
FRAME: Allow message ID to be mutated in ProcessMessage (#14183)
This commit is contained in:
@@ -142,7 +142,7 @@ mod benchmarks {
|
|||||||
// Check that it was processed.
|
// Check that it was processed.
|
||||||
assert_last_event::<T>(
|
assert_last_event::<T>(
|
||||||
Event::Processed {
|
Event::Processed {
|
||||||
hash: T::Hashing::hash(&msg),
|
id: sp_io::hashing::blake2_256(&msg),
|
||||||
origin: 0.into(),
|
origin: 0.into(),
|
||||||
weight_used: 1.into_weight(),
|
weight_used: 1.into_weight(),
|
||||||
success: true,
|
success: true,
|
||||||
@@ -227,7 +227,7 @@ mod benchmarks {
|
|||||||
|
|
||||||
assert_last_event::<T>(
|
assert_last_event::<T>(
|
||||||
Event::Processed {
|
Event::Processed {
|
||||||
hash: T::Hashing::hash(&((msgs - 1) as u32).encode()),
|
id: sp_io::hashing::blake2_256(&((msgs - 1) as u32).encode()),
|
||||||
origin: 0.into(),
|
origin: 0.into(),
|
||||||
weight_used: Weight::from_parts(1, 1),
|
weight_used: Weight::from_parts(1, 1),
|
||||||
success: true,
|
success: true,
|
||||||
@@ -264,7 +264,7 @@ mod benchmarks {
|
|||||||
|
|
||||||
assert_last_event::<T>(
|
assert_last_event::<T>(
|
||||||
Event::Processed {
|
Event::Processed {
|
||||||
hash: T::Hashing::hash(&((msgs - 1) as u32).encode()),
|
id: sp_io::hashing::blake2_256(&((msgs - 1) as u32).encode()),
|
||||||
origin: 0.into(),
|
origin: 0.into(),
|
||||||
weight_used: Weight::from_parts(1, 1),
|
weight_used: Weight::from_parts(1, 1),
|
||||||
success: true,
|
success: true,
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ pub use pallet::*;
|
|||||||
use scale_info::TypeInfo;
|
use scale_info::TypeInfo;
|
||||||
use sp_arithmetic::traits::{BaseArithmetic, Unsigned};
|
use sp_arithmetic::traits::{BaseArithmetic, Unsigned};
|
||||||
use sp_runtime::{
|
use sp_runtime::{
|
||||||
traits::{Hash, One, Zero},
|
traits::{One, Zero},
|
||||||
SaturatedConversion, Saturating,
|
SaturatedConversion, Saturating,
|
||||||
};
|
};
|
||||||
use sp_std::{fmt::Debug, ops::Deref, prelude::*, vec};
|
use sp_std::{fmt::Debug, ops::Deref, prelude::*, vec};
|
||||||
@@ -499,16 +499,13 @@ pub mod pallet {
|
|||||||
#[pallet::event]
|
#[pallet::event]
|
||||||
#[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> {
|
||||||
/// Message discarded due to an inability to decode the item. Usually caused by state
|
|
||||||
/// corruption.
|
|
||||||
Discarded { hash: T::Hash },
|
|
||||||
/// Message discarded due to an error in the `MessageProcessor` (usually a format error).
|
/// Message discarded due to an error in the `MessageProcessor` (usually a format error).
|
||||||
ProcessingFailed { hash: T::Hash, origin: MessageOriginOf<T>, error: ProcessMessageError },
|
ProcessingFailed { id: [u8; 32], origin: MessageOriginOf<T>, error: ProcessMessageError },
|
||||||
/// Message is processed.
|
/// Message is processed.
|
||||||
Processed { hash: T::Hash, origin: MessageOriginOf<T>, weight_used: Weight, success: bool },
|
Processed { id: [u8; 32], origin: MessageOriginOf<T>, weight_used: Weight, success: bool },
|
||||||
/// Message placed in overweight queue.
|
/// Message placed in overweight queue.
|
||||||
OverweightEnqueued {
|
OverweightEnqueued {
|
||||||
hash: T::Hash,
|
id: [u8; 32],
|
||||||
origin: MessageOriginOf<T>,
|
origin: MessageOriginOf<T>,
|
||||||
page_index: PageIndex,
|
page_index: PageIndex,
|
||||||
message_index: T::Size,
|
message_index: T::Size,
|
||||||
@@ -1147,15 +1144,16 @@ impl<T: Config> Pallet<T> {
|
|||||||
meter: &mut WeightMeter,
|
meter: &mut WeightMeter,
|
||||||
overweight_limit: Weight,
|
overweight_limit: Weight,
|
||||||
) -> MessageExecutionStatus {
|
) -> MessageExecutionStatus {
|
||||||
let hash = T::Hashing::hash(message);
|
let hash = sp_io::hashing::blake2_256(message);
|
||||||
use ProcessMessageError::*;
|
use ProcessMessageError::*;
|
||||||
let prev_consumed = meter.consumed;
|
let prev_consumed = meter.consumed;
|
||||||
|
let mut id = hash;
|
||||||
|
|
||||||
match T::MessageProcessor::process_message(message, origin.clone(), meter) {
|
match T::MessageProcessor::process_message(message, origin.clone(), meter, &mut id) {
|
||||||
Err(Overweight(w)) if w.any_gt(overweight_limit) => {
|
Err(Overweight(w)) if w.any_gt(overweight_limit) => {
|
||||||
// Permanently overweight.
|
// Permanently overweight.
|
||||||
Self::deposit_event(Event::<T>::OverweightEnqueued {
|
Self::deposit_event(Event::<T>::OverweightEnqueued {
|
||||||
hash,
|
id,
|
||||||
origin,
|
origin,
|
||||||
page_index,
|
page_index,
|
||||||
message_index,
|
message_index,
|
||||||
@@ -1173,13 +1171,13 @@ impl<T: Config> Pallet<T> {
|
|||||||
},
|
},
|
||||||
Err(error @ BadFormat | error @ Corrupt | error @ Unsupported) => {
|
Err(error @ BadFormat | error @ Corrupt | error @ Unsupported) => {
|
||||||
// Permanent error - drop
|
// Permanent error - drop
|
||||||
Self::deposit_event(Event::<T>::ProcessingFailed { hash, origin, error });
|
Self::deposit_event(Event::<T>::ProcessingFailed { id, origin, error });
|
||||||
MessageExecutionStatus::Unprocessable { permanent: true }
|
MessageExecutionStatus::Unprocessable { permanent: true }
|
||||||
},
|
},
|
||||||
Ok(success) => {
|
Ok(success) => {
|
||||||
// Success
|
// Success
|
||||||
let weight_used = meter.consumed.saturating_sub(prev_consumed);
|
let weight_used = meter.consumed.saturating_sub(prev_consumed);
|
||||||
Self::deposit_event(Event::<T>::Processed { hash, origin, weight_used, success });
|
Self::deposit_event(Event::<T>::Processed { id, origin, weight_used, success });
|
||||||
MessageExecutionStatus::Processed
|
MessageExecutionStatus::Processed
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ impl ProcessMessage for RecordingMessageProcessor {
|
|||||||
message: &[u8],
|
message: &[u8],
|
||||||
origin: Self::Origin,
|
origin: Self::Origin,
|
||||||
meter: &mut WeightMeter,
|
meter: &mut WeightMeter,
|
||||||
|
_id: &mut [u8; 32],
|
||||||
) -> Result<bool, ProcessMessageError> {
|
) -> Result<bool, ProcessMessageError> {
|
||||||
processing_message(message, &origin)?;
|
processing_message(message, &origin)?;
|
||||||
|
|
||||||
@@ -239,6 +240,7 @@ impl ProcessMessage for CountingMessageProcessor {
|
|||||||
message: &[u8],
|
message: &[u8],
|
||||||
origin: Self::Origin,
|
origin: Self::Origin,
|
||||||
meter: &mut WeightMeter,
|
meter: &mut WeightMeter,
|
||||||
|
_id: &mut [u8; 32],
|
||||||
) -> Result<bool, ProcessMessageError> {
|
) -> Result<bool, ProcessMessageError> {
|
||||||
if let Err(e) = processing_message(message, &origin) {
|
if let Err(e) = processing_message(message, &origin) {
|
||||||
NumMessagesErrored::set(NumMessagesErrored::get() + 1);
|
NumMessagesErrored::set(NumMessagesErrored::get() + 1);
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ where
|
|||||||
_message: &[u8],
|
_message: &[u8],
|
||||||
_origin: Self::Origin,
|
_origin: Self::Origin,
|
||||||
meter: &mut WeightMeter,
|
meter: &mut WeightMeter,
|
||||||
|
_id: &mut [u8; 32],
|
||||||
) -> Result<bool, ProcessMessageError> {
|
) -> Result<bool, ProcessMessageError> {
|
||||||
let required = Weight::from_parts(REQUIRED_WEIGHT, REQUIRED_WEIGHT);
|
let required = Weight::from_parts(REQUIRED_WEIGHT, REQUIRED_WEIGHT);
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ use crate::{mock::*, *};
|
|||||||
|
|
||||||
use frame_support::{assert_noop, assert_ok, assert_storage_noop, StorageNoopGuard};
|
use frame_support::{assert_noop, assert_ok, assert_storage_noop, StorageNoopGuard};
|
||||||
use rand::{rngs::StdRng, Rng, SeedableRng};
|
use rand::{rngs::StdRng, Rng, SeedableRng};
|
||||||
|
use sp_core::blake2_256;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn mocked_weight_works() {
|
fn mocked_weight_works() {
|
||||||
@@ -178,7 +179,7 @@ fn service_queues_failing_messages_works() {
|
|||||||
assert_eq!(MessageQueue::service_queues(1.into_weight()), 1.into_weight());
|
assert_eq!(MessageQueue::service_queues(1.into_weight()), 1.into_weight());
|
||||||
assert_last_event::<Test>(
|
assert_last_event::<Test>(
|
||||||
Event::ProcessingFailed {
|
Event::ProcessingFailed {
|
||||||
hash: <Test as frame_system::Config>::Hashing::hash(b"badformat"),
|
id: blake2_256(b"badformat"),
|
||||||
origin: MessageOrigin::Here,
|
origin: MessageOrigin::Here,
|
||||||
error: ProcessMessageError::BadFormat,
|
error: ProcessMessageError::BadFormat,
|
||||||
}
|
}
|
||||||
@@ -187,7 +188,7 @@ fn service_queues_failing_messages_works() {
|
|||||||
assert_eq!(MessageQueue::service_queues(1.into_weight()), 1.into_weight());
|
assert_eq!(MessageQueue::service_queues(1.into_weight()), 1.into_weight());
|
||||||
assert_last_event::<Test>(
|
assert_last_event::<Test>(
|
||||||
Event::ProcessingFailed {
|
Event::ProcessingFailed {
|
||||||
hash: <Test as frame_system::Config>::Hashing::hash(b"corrupt"),
|
id: blake2_256(b"corrupt"),
|
||||||
origin: MessageOrigin::Here,
|
origin: MessageOrigin::Here,
|
||||||
error: ProcessMessageError::Corrupt,
|
error: ProcessMessageError::Corrupt,
|
||||||
}
|
}
|
||||||
@@ -196,7 +197,7 @@ fn service_queues_failing_messages_works() {
|
|||||||
assert_eq!(MessageQueue::service_queues(1.into_weight()), 1.into_weight());
|
assert_eq!(MessageQueue::service_queues(1.into_weight()), 1.into_weight());
|
||||||
assert_last_event::<Test>(
|
assert_last_event::<Test>(
|
||||||
Event::ProcessingFailed {
|
Event::ProcessingFailed {
|
||||||
hash: <Test as frame_system::Config>::Hashing::hash(b"unsupported"),
|
id: blake2_256(b"unsupported"),
|
||||||
origin: MessageOrigin::Here,
|
origin: MessageOrigin::Here,
|
||||||
error: ProcessMessageError::Unsupported,
|
error: ProcessMessageError::Unsupported,
|
||||||
}
|
}
|
||||||
@@ -677,7 +678,7 @@ fn service_page_item_skips_perm_overweight_message() {
|
|||||||
assert_eq!(weight.consumed, 2.into_weight());
|
assert_eq!(weight.consumed, 2.into_weight());
|
||||||
assert_last_event::<Test>(
|
assert_last_event::<Test>(
|
||||||
Event::OverweightEnqueued {
|
Event::OverweightEnqueued {
|
||||||
hash: <Test as frame_system::Config>::Hashing::hash(b"TooMuch"),
|
id: blake2_256(b"TooMuch"),
|
||||||
origin: MessageOrigin::Here,
|
origin: MessageOrigin::Here,
|
||||||
message_index: 0,
|
message_index: 0,
|
||||||
page_index: 0,
|
page_index: 0,
|
||||||
@@ -1050,7 +1051,7 @@ fn execute_overweight_works() {
|
|||||||
assert_eq!(QueueChanges::take(), vec![(origin, 1, 8)]);
|
assert_eq!(QueueChanges::take(), vec![(origin, 1, 8)]);
|
||||||
assert_last_event::<Test>(
|
assert_last_event::<Test>(
|
||||||
Event::OverweightEnqueued {
|
Event::OverweightEnqueued {
|
||||||
hash: <Test as frame_system::Config>::Hashing::hash(b"weight=6"),
|
id: blake2_256(b"weight=6"),
|
||||||
origin: MessageOrigin::Here,
|
origin: MessageOrigin::Here,
|
||||||
message_index: 0,
|
message_index: 0,
|
||||||
page_index: 0,
|
page_index: 0,
|
||||||
@@ -1105,7 +1106,7 @@ fn permanently_overweight_book_unknits() {
|
|||||||
assert_eq!(MessageQueue::service_queues(8.into_weight()), 4.into_weight());
|
assert_eq!(MessageQueue::service_queues(8.into_weight()), 4.into_weight());
|
||||||
assert_last_event::<Test>(
|
assert_last_event::<Test>(
|
||||||
Event::OverweightEnqueued {
|
Event::OverweightEnqueued {
|
||||||
hash: <Test as frame_system::Config>::Hashing::hash(b"weight=9"),
|
id: blake2_256(b"weight=9"),
|
||||||
origin: Here,
|
origin: Here,
|
||||||
message_index: 0,
|
message_index: 0,
|
||||||
page_index: 0,
|
page_index: 0,
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ pub trait ProcessMessage {
|
|||||||
message: &[u8],
|
message: &[u8],
|
||||||
origin: Self::Origin,
|
origin: Self::Origin,
|
||||||
meter: &mut WeightMeter,
|
meter: &mut WeightMeter,
|
||||||
|
id: &mut [u8; 32],
|
||||||
) -> Result<bool, ProcessMessageError>;
|
) -> Result<bool, ProcessMessageError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user