90fd044766
- snowbridge-pezpallet-* → pezsnowbridge-pezpallet-* (201 refs) - pallet/ directories → pezpallet/ (4 locations) - Fixed pezpallet.rs self-include recursion bug - Fixed sc-chain-spec hardcoded crate name in derive macro - Reverted .pezpallet_by_name() to .pallet_by_name() (subxt API) - Added BizinikiwiConfig type alias for zombienet tests - Deleted obsolete session state files Verified: pezsnowbridge-pezpallet-*, pezpallet-staking, pezpallet-staking-async, pezframe-benchmarking-cli all pass cargo check
51 lines
1.6 KiB
Rust
51 lines
1.6 KiB
Rust
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
|
|
use pezsnowbridge_core::ChannelId;
|
|
use pezsnowbridge_inbound_queue_primitives::Log;
|
|
|
|
use pezsp_core::{RuntimeDebug, H160, H256};
|
|
use pezsp_std::prelude::*;
|
|
|
|
use alloy_core::{primitives::B256, sol, sol_types::SolEvent};
|
|
|
|
sol! {
|
|
event OutboundMessageAccepted(bytes32 indexed channel_id, uint64 nonce, bytes32 indexed message_id, bytes payload);
|
|
}
|
|
|
|
/// An inbound message that has had its outer envelope decoded.
|
|
#[derive(Clone, RuntimeDebug)]
|
|
pub struct Envelope {
|
|
/// The address of the outbound queue on Ethereum that emitted this message as an event log
|
|
pub gateway: H160,
|
|
/// The message Channel
|
|
pub channel_id: ChannelId,
|
|
/// A nonce for enforcing replay protection and ordering.
|
|
pub nonce: u64,
|
|
/// An id for tracing the message on its route (has no role in bridge consensus)
|
|
pub message_id: H256,
|
|
/// The inner payload generated from the source application.
|
|
pub payload: Vec<u8>,
|
|
}
|
|
|
|
#[derive(Copy, Clone, RuntimeDebug)]
|
|
pub struct EnvelopeDecodeError;
|
|
|
|
impl TryFrom<&Log> for Envelope {
|
|
type Error = EnvelopeDecodeError;
|
|
|
|
fn try_from(log: &Log) -> Result<Self, Self::Error> {
|
|
let topics: Vec<B256> = log.topics.iter().map(|x| B256::from_slice(x.as_ref())).collect();
|
|
|
|
let event = OutboundMessageAccepted::decode_raw_log_validate(topics, &log.data)
|
|
.map_err(|_| EnvelopeDecodeError)?;
|
|
|
|
Ok(Self {
|
|
gateway: log.address,
|
|
channel_id: ChannelId::from(event.channel_id.as_ref()),
|
|
nonce: event.nonce,
|
|
message_id: H256::from(event.message_id.as_ref()),
|
|
payload: event.payload.into(),
|
|
})
|
|
}
|
|
}
|