snowbridge_pallet_outbound_queue_v2/
send_message_impl.rsuse super::*;
use bridge_hub_common::AggregateMessageOrigin;
use codec::Encode;
use frame_support::{
ensure,
traits::{EnqueueMessage, Get},
};
use snowbridge_outbound_queue_primitives::{
v2::{Message, SendMessage},
SendError, SendMessageFeeProvider,
};
use sp_core::H256;
use sp_runtime::BoundedVec;
impl<T> SendMessage for Pallet<T>
where
T: Config,
{
type Ticket = Message;
fn validate(message: &Message) -> Result<Self::Ticket, SendError> {
let payload = message.encode();
ensure!(
payload.len() < T::MaxMessagePayloadSize::get() as usize,
SendError::MessageTooLarge
);
Ok(message.clone())
}
fn deliver(ticket: Self::Ticket) -> Result<H256, SendError> {
let origin = AggregateMessageOrigin::SnowbridgeV2(ticket.origin);
let message =
BoundedVec::try_from(ticket.encode()).map_err(|_| SendError::MessageTooLarge)?;
T::MessageQueue::enqueue_message(message.as_bounded_slice(), origin);
Self::deposit_event(Event::MessageQueued { message: ticket.clone() });
Ok(ticket.id)
}
}
impl<T: Config> SendMessageFeeProvider for Pallet<T> {
type Balance = T::Balance;
fn local_fee() -> Self::Balance {
Self::calculate_local_fee()
}
}