referrerpolicy=no-referrer-when-downgrade

snowbridge_pallet_outbound_queue/
benchmarking.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
3use super::*;
4
5use bridge_hub_common::AggregateMessageOrigin;
6use codec::Encode;
7use frame_benchmarking::v2::*;
8use snowbridge_core::ChannelId;
9use snowbridge_outbound_queue_primitives::v1::{Command, Initializer};
10use sp_core::{H160, H256};
11
12#[allow(unused_imports)]
13use crate::Pallet as OutboundQueue;
14
15#[benchmarks(
16	where
17		<T as Config>::MaxMessagePayloadSize: Get<u32>,
18)]
19mod benchmarks {
20	use super::*;
21
22	/// Benchmark for processing a message.
23	#[benchmark]
24	fn do_process_message() -> Result<(), BenchmarkError> {
25		let enqueued_message = QueuedMessage {
26			id: H256::zero(),
27			channel_id: ChannelId::from([1; 32]),
28			command: Command::Upgrade {
29				impl_address: H160::zero(),
30				impl_code_hash: H256::zero(),
31				initializer: Some(Initializer {
32					params: [7u8; 256].into_iter().collect(),
33					maximum_required_gas: 200_000,
34				}),
35			},
36		};
37		let origin = AggregateMessageOrigin::Snowbridge([1; 32].into());
38		let encoded_enqueued_message = enqueued_message.encode();
39
40		#[block]
41		{
42			let _ = OutboundQueue::<T>::do_process_message(origin, &encoded_enqueued_message);
43		}
44
45		assert_eq!(MessageLeaves::<T>::decode_len().unwrap(), 1);
46
47		Ok(())
48	}
49
50	/// Benchmark for producing final messages commitment
51	#[benchmark]
52	fn commit() -> Result<(), BenchmarkError> {
53		// Assume worst case, where `MaxMessagesPerBlock` messages need to be committed.
54		for i in 0..T::MaxMessagesPerBlock::get() {
55			let leaf_data: [u8; 1] = [i as u8];
56			let leaf = <T as Config>::Hashing::hash(&leaf_data);
57			MessageLeaves::<T>::append(leaf);
58		}
59
60		#[block]
61		{
62			OutboundQueue::<T>::commit();
63		}
64
65		Ok(())
66	}
67
68	/// Benchmark for producing commitment for a single message
69	#[benchmark]
70	fn commit_single() -> Result<(), BenchmarkError> {
71		let leaf = <T as Config>::Hashing::hash(&[100; 1]);
72		MessageLeaves::<T>::append(leaf);
73
74		#[block]
75		{
76			OutboundQueue::<T>::commit();
77		}
78
79		Ok(())
80	}
81
82	impl_benchmark_test_suite!(OutboundQueue, crate::mock::new_tester(), crate::mock::Test,);
83}