referrerpolicy=no-referrer-when-downgrade

snowbridge_pallet_outbound_queue_v2/
send_message_impl.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
3//! Implementation for [`snowbridge_outbound_queue_primitives::v2::SendMessage`]
4use super::*;
5use bridge_hub_common::AggregateMessageOrigin;
6use codec::Encode;
7use frame_support::{
8	ensure,
9	traits::{EnqueueMessage, Get},
10};
11use snowbridge_outbound_queue_primitives::{
12	v2::{Message, SendMessage},
13	SendError,
14};
15use sp_core::H256;
16use sp_runtime::BoundedVec;
17
18impl<T> SendMessage for Pallet<T>
19where
20	T: Config,
21{
22	type Ticket = Message;
23
24	fn validate(message: &Message) -> Result<Self::Ticket, SendError> {
25		// The inner payload should not be too large
26		let payload = message.encode();
27		ensure!(
28			payload.len() < T::MaxMessagePayloadSize::get() as usize,
29			SendError::MessageTooLarge
30		);
31
32		Ok(message.clone())
33	}
34
35	fn deliver(ticket: Self::Ticket) -> Result<H256, SendError> {
36		let origin = AggregateMessageOrigin::SnowbridgeV2(ticket.origin);
37
38		let message =
39			BoundedVec::try_from(ticket.encode()).map_err(|_| SendError::MessageTooLarge)?;
40
41		T::MessageQueue::enqueue_message(message.as_bounded_slice(), origin);
42		Self::deposit_event(Event::MessageQueued { message: ticket.clone() });
43		Ok(ticket.id)
44	}
45}