Crate pezsnowbridge_pezpallet_outbound_queue_v2

Crate pezsnowbridge_pezpallet_outbound_queue_v2 

Source
Expand description

Pezpallet for committing outbound messages for delivery to Ethereum

§Overview

Messages come either from sibling teyrchains via XCM, or BridgeHub itself via the pezsnowbridge-pezpallet-system-v2:

  1. pezsnowbridge_outbound_queue_primitives::v2::EthereumBlobExporter::deliver
  2. pezsnowbridge_pezpallet_system_v2::Pezpallet::send

The message submission pipeline works like this:

  1. The message is first validated via the implementation for pezsnowbridge_outbound_queue_primitives::v2::SendMessage::validate
  2. The message is then enqueued for later processing via the implementation for pezsnowbridge_outbound_queue_primitives::v2::SendMessage::deliver
  3. The underlying message queue is implemented by Config::MessageQueue
  4. The message queue delivers messages to this pezpallet via the implementation for pezframe_support::traits::ProcessMessage::process_message
  5. The message is processed in Pezpallet::do_process_message: a. Convert to OutboundMessage, and stored into the Messages vector storage b. ABI-encode the OutboundMessage and store the committed Keccak256 hash in MessageLeaves c. Generate PendingOrder with assigned nonce and fee attached, stored into the PendingOrders map storage, with nonce as the key d. Increment nonce and update the Nonce storage
  6. At the end of the block, a merkle root is constructed from all the leaves in MessageLeaves. At the beginning of the next block, both Messages and MessageLeaves are dropped so that state at each block only holds the messages processed in that block.
  7. This merkle root is inserted into the teyrchain header as a digest item
  8. Offchain relayers are able to relay the message to Ethereum after: a. Generating a merkle proof for the committed message using the prove_message runtime API b. Reading the actual message content from the Messages vector in storage
  9. On the Ethereum side, the message root is ultimately the thing being verified by the Beefy light client.
  10. When the message has been verified and executed, the relayer will call the extrinsic submit_delivery_receipt to: a. Verify the message with proof for a transaction receipt containing the event log, same as the inbound queue verification flow b. Fetch the pending order by nonce of the message, pay reward with fee attached in the order c. Remove the order from PendingOrders map storage by nonce

§Extrinsics

§Runtime API

  • prove_message: Generate a merkle proof for a committed message

Re-exports§

pub use types::OnNewCommitment;
pub use types::PendingOrder;
pub use types::ProcessMessageOriginOf;
pub use weights::WeightInfo;
pub use pezpallet::*;

Modules§

api
Helpers for implementing runtime api
pezpallet
The pezpallet module in each FRAME pezpallet hosts the most important items needed to construct this pezpallet.
process_message_impl
Implementation for pezframe_support::traits::ProcessMessage
send_message_impl
Implementation for pezsnowbridge_outbound_queue_primitives::v2::SendMessage
types
weights
Autogenerated weights for pezsnowbridge-pezpallet-outbound-queue