Message dispatch support multiple instances (#942)

* message dispatch support multiple instances

* format code

* define millau grandpa instance in rialto
This commit is contained in:
fewensa
2021-04-30 03:11:33 +08:00
committed by Bastian Köcher
parent 7dc564a067
commit 01cede2120
4 changed files with 25 additions and 12 deletions
@@ -214,7 +214,9 @@ impl TargetHeaderChain<ToRialtoMessagePayload, bp_rialto::AccountId> for Rialto
fn verify_messages_delivery_proof( fn verify_messages_delivery_proof(
proof: Self::MessagesDeliveryProof, proof: Self::MessagesDeliveryProof,
) -> Result<(LaneId, InboundLaneData<bp_millau::AccountId>), Self::Error> { ) -> Result<(LaneId, InboundLaneData<bp_millau::AccountId>), Self::Error> {
messages::source::verify_messages_delivery_proof::<WithRialtoMessageBridge, Runtime>(proof) messages::source::verify_messages_delivery_proof::<WithRialtoMessageBridge, Runtime, crate::RialtoGrandpaInstance>(
proof,
)
} }
} }
@@ -231,7 +233,10 @@ impl SourceHeaderChain<bp_rialto::Balance> for Rialto {
proof: Self::MessagesProof, proof: Self::MessagesProof,
messages_count: u32, messages_count: u32,
) -> Result<ProvedMessages<Message<bp_rialto::Balance>>, Self::Error> { ) -> Result<ProvedMessages<Message<bp_rialto::Balance>>, Self::Error> {
messages::target::verify_messages_proof::<WithRialtoMessageBridge, Runtime>(proof, messages_count) messages::target::verify_messages_proof::<WithRialtoMessageBridge, Runtime, crate::RialtoGrandpaInstance>(
proof,
messages_count,
)
} }
} }
+1
View File
@@ -436,6 +436,7 @@ parameter_types! {
pub const HeadersToKeep: u32 = 7 * bp_rialto::DAYS as u32; pub const HeadersToKeep: u32 = 7 * bp_rialto::DAYS as u32;
} }
pub type MillauGrandpaInstance = ();
impl pallet_bridge_grandpa::Config for Runtime { impl pallet_bridge_grandpa::Config for Runtime {
type BridgedChain = bp_millau::Millau; type BridgedChain = bp_millau::Millau;
type MaxRequests = MaxRequests; type MaxRequests = MaxRequests;
@@ -214,7 +214,9 @@ impl TargetHeaderChain<ToMillauMessagePayload, bp_millau::AccountId> for Millau
fn verify_messages_delivery_proof( fn verify_messages_delivery_proof(
proof: Self::MessagesDeliveryProof, proof: Self::MessagesDeliveryProof,
) -> Result<(LaneId, InboundLaneData<bp_rialto::AccountId>), Self::Error> { ) -> Result<(LaneId, InboundLaneData<bp_rialto::AccountId>), Self::Error> {
messages::source::verify_messages_delivery_proof::<WithMillauMessageBridge, Runtime>(proof) messages::source::verify_messages_delivery_proof::<WithMillauMessageBridge, Runtime, crate::MillauGrandpaInstance>(
proof,
)
} }
} }
@@ -231,7 +233,10 @@ impl SourceHeaderChain<bp_millau::Balance> for Millau {
proof: Self::MessagesProof, proof: Self::MessagesProof,
messages_count: u32, messages_count: u32,
) -> Result<ProvedMessages<Message<bp_millau::Balance>>, Self::Error> { ) -> Result<ProvedMessages<Message<bp_millau::Balance>>, Self::Error> {
messages::target::verify_messages_proof::<WithMillauMessageBridge, Runtime>(proof, messages_count) messages::target::verify_messages_proof::<WithMillauMessageBridge, Runtime, crate::MillauGrandpaInstance>(
proof,
messages_count,
)
} }
} }
+10 -8
View File
@@ -352,20 +352,21 @@ pub mod source {
} }
/// Verify proof of This -> Bridged chain messages delivery. /// Verify proof of This -> Bridged chain messages delivery.
pub fn verify_messages_delivery_proof<B: MessageBridge, ThisRuntime>( pub fn verify_messages_delivery_proof<B: MessageBridge, ThisRuntime, GrandpaInstance: 'static>(
proof: FromBridgedChainMessagesDeliveryProof<HashOf<BridgedChain<B>>>, proof: FromBridgedChainMessagesDeliveryProof<HashOf<BridgedChain<B>>>,
) -> Result<ParsedMessagesDeliveryProofFromBridgedChain<B>, &'static str> ) -> Result<ParsedMessagesDeliveryProofFromBridgedChain<B>, &'static str>
where where
ThisRuntime: pallet_bridge_grandpa::Config, ThisRuntime: pallet_bridge_grandpa::Config<GrandpaInstance>,
ThisRuntime: pallet_bridge_messages::Config<MessagesInstanceOf<BridgedChain<B>>>, ThisRuntime: pallet_bridge_messages::Config<MessagesInstanceOf<BridgedChain<B>>>,
HashOf<BridgedChain<B>>: Into<bp_runtime::HashOf<<ThisRuntime as pallet_bridge_grandpa::Config>::BridgedChain>>, HashOf<BridgedChain<B>>:
Into<bp_runtime::HashOf<<ThisRuntime as pallet_bridge_grandpa::Config<GrandpaInstance>>::BridgedChain>>,
{ {
let FromBridgedChainMessagesDeliveryProof { let FromBridgedChainMessagesDeliveryProof {
bridged_header_hash, bridged_header_hash,
storage_proof, storage_proof,
lane, lane,
} = proof; } = proof;
pallet_bridge_grandpa::Pallet::<ThisRuntime>::parse_finalized_storage_proof( pallet_bridge_grandpa::Pallet::<ThisRuntime, GrandpaInstance>::parse_finalized_storage_proof(
bridged_header_hash.into(), bridged_header_hash.into(),
StorageProof::new(storage_proof), StorageProof::new(storage_proof),
|storage| { |storage| {
@@ -504,20 +505,21 @@ pub mod target {
/// The `messages_count` argument verification (sane limits) is supposed to be made /// The `messages_count` argument verification (sane limits) is supposed to be made
/// outside of this function. This function only verifies that the proof declares exactly /// outside of this function. This function only verifies that the proof declares exactly
/// `messages_count` messages. /// `messages_count` messages.
pub fn verify_messages_proof<B: MessageBridge, ThisRuntime>( pub fn verify_messages_proof<B: MessageBridge, ThisRuntime, GrandpaInstance: 'static>(
proof: FromBridgedChainMessagesProof<HashOf<BridgedChain<B>>>, proof: FromBridgedChainMessagesProof<HashOf<BridgedChain<B>>>,
messages_count: u32, messages_count: u32,
) -> Result<ProvedMessages<Message<BalanceOf<BridgedChain<B>>>>, &'static str> ) -> Result<ProvedMessages<Message<BalanceOf<BridgedChain<B>>>>, &'static str>
where where
ThisRuntime: pallet_bridge_grandpa::Config, ThisRuntime: pallet_bridge_grandpa::Config<GrandpaInstance>,
ThisRuntime: pallet_bridge_messages::Config<MessagesInstanceOf<BridgedChain<B>>>, ThisRuntime: pallet_bridge_messages::Config<MessagesInstanceOf<BridgedChain<B>>>,
HashOf<BridgedChain<B>>: Into<bp_runtime::HashOf<<ThisRuntime as pallet_bridge_grandpa::Config>::BridgedChain>>, HashOf<BridgedChain<B>>:
Into<bp_runtime::HashOf<<ThisRuntime as pallet_bridge_grandpa::Config<GrandpaInstance>>::BridgedChain>>,
{ {
verify_messages_proof_with_parser::<B, _, _>( verify_messages_proof_with_parser::<B, _, _>(
proof, proof,
messages_count, messages_count,
|bridged_header_hash, bridged_storage_proof| { |bridged_header_hash, bridged_storage_proof| {
pallet_bridge_grandpa::Pallet::<ThisRuntime>::parse_finalized_storage_proof( pallet_bridge_grandpa::Pallet::<ThisRuntime, GrandpaInstance>::parse_finalized_storage_proof(
bridged_header_hash.into(), bridged_header_hash.into(),
StorageProof::new(bridged_storage_proof), StorageProof::new(bridged_storage_proof),
|storage_adapter| storage_adapter, |storage_adapter| storage_adapter,