diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/tests/tests.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/tests/tests.rs index 390ac449f8cc..2f90651ab754 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/tests/tests.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/tests/tests.rs @@ -137,6 +137,7 @@ mod bridge_hub_westend_tests { use bridge_common_config::{ BridgeGrandpaWestendInstance, BridgeParachainWestendInstance, DeliveryRewardInBalance, }; + use bridge_hub_test_utils::test_cases::from_parachain; use bridge_to_westend_config::{ BridgeHubWestendChainId, BridgeHubWestendLocation, WestendGlobalConsensusNetwork, WithBridgeHubWestendMessageBridge, WithBridgeHubWestendMessagesInstance, @@ -146,6 +147,16 @@ mod bridge_hub_westend_tests { // Para id of sibling chain used in tests. pub const SIBLING_PARACHAIN_ID: u32 = 1000; + // Runtime from tests PoV + type RuntimeTestsAdapter = from_parachain::WithRemoteParachainHelperAdapter< + Runtime, + AllPalletsWithoutSystem, + BridgeGrandpaWestendInstance, + BridgeParachainWestendInstance, + WithBridgeHubWestendMessagesInstance, + WithBridgeHubWestendMessageBridge, + >; + #[test] fn initialize_bridge_by_governance_works() { // for RococoBulletin finality @@ -259,15 +270,7 @@ mod bridge_hub_westend_tests { #[test] fn relayed_incoming_message_works() { // from Westend - bridge_hub_test_utils::test_cases::from_parachain::relayed_incoming_message_works::< - Runtime, - AllPalletsWithoutSystem, - ParachainSystem, - BridgeGrandpaWestendInstance, - BridgeParachainWestendInstance, - WithBridgeHubWestendMessagesInstance, - WithBridgeHubWestendMessageBridge, - >( + from_parachain::relayed_incoming_message_works::( collator_session_keys(), bp_bridge_hub_rococo::BRIDGE_HUB_ROCOCO_PARACHAIN_ID, bp_bridge_hub_westend::BRIDGE_HUB_WESTEND_PARACHAIN_ID, @@ -283,16 +286,7 @@ mod bridge_hub_westend_tests { #[test] pub fn complex_relay_extrinsic_works() { // for Westend - bridge_hub_test_utils::test_cases::from_parachain::complex_relay_extrinsic_works::< - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - ParachainSystem, - BridgeGrandpaWestendInstance, - BridgeParachainWestendInstance, - WithBridgeHubWestendMessagesInstance, - WithBridgeHubWestendMessageBridge, - >( + from_parachain::complex_relay_extrinsic_works::( collator_session_keys(), bp_bridge_hub_rococo::BRIDGE_HUB_ROCOCO_PARACHAIN_ID, bp_bridge_hub_westend::BRIDGE_HUB_WESTEND_PARACHAIN_ID, @@ -325,16 +319,9 @@ mod bridge_hub_westend_tests { #[test] pub fn can_calculate_fee_for_complex_message_delivery_transaction() { - let estimated = bridge_hub_test_utils::test_cases::from_parachain::can_calculate_fee_for_complex_message_delivery_transaction::< - Runtime, - BridgeGrandpaWestendInstance, - BridgeParachainWestendInstance, - WithBridgeHubWestendMessagesInstance, - WithBridgeHubWestendMessageBridge, - >( - collator_session_keys(), - construct_and_estimate_extrinsic_fee - ); + let estimated = from_parachain::can_calculate_fee_for_complex_message_delivery_transaction::< + RuntimeTestsAdapter, + >(collator_session_keys(), construct_and_estimate_extrinsic_fee); // check if estimated value is sane let max_expected = bp_bridge_hub_rococo::BridgeHubRococoBaseDeliveryFeeInRocs::get(); @@ -348,16 +335,10 @@ mod bridge_hub_westend_tests { #[test] pub fn can_calculate_fee_for_complex_message_confirmation_transaction() { - let estimated = bridge_hub_test_utils::test_cases::from_parachain::can_calculate_fee_for_complex_message_confirmation_transaction::< - Runtime, - BridgeGrandpaWestendInstance, - BridgeParachainWestendInstance, - WithBridgeHubWestendMessagesInstance, - WithBridgeHubWestendMessageBridge, - >( - collator_session_keys(), - construct_and_estimate_extrinsic_fee - ); + let estimated = + from_parachain::can_calculate_fee_for_complex_message_confirmation_transaction::< + RuntimeTestsAdapter, + >(collator_session_keys(), construct_and_estimate_extrinsic_fee); // check if estimated value is sane let max_expected = bp_bridge_hub_rococo::BridgeHubRococoBaseConfirmationFeeInRocs::get(); diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/tests/tests.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/tests/tests.rs index 9a7f13f14c31..0e58b7b408eb 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/tests/tests.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/tests/tests.rs @@ -18,6 +18,7 @@ use bp_polkadot_core::Signature; use bridge_common_config::{DeliveryRewardInBalance, RequiredStakeForStakeAndSlash}; +use bridge_hub_test_utils::test_cases::from_parachain; use bridge_hub_westend_runtime::{ bridge_common_config, bridge_to_rococo_config, xcm_config::{RelayNetwork, WestendLocation, XcmConfig}, @@ -43,6 +44,16 @@ use xcm::latest::prelude::*; // Para id of sibling chain used in tests. pub const SIBLING_PARACHAIN_ID: u32 = 1000; +// Runtime from tests PoV +type RuntimeTestsAdapter = from_parachain::WithRemoteParachainHelperAdapter< + Runtime, + AllPalletsWithoutSystem, + BridgeGrandpaRococoInstance, + BridgeParachainRococoInstance, + WithBridgeHubRococoMessagesInstance, + WithBridgeHubRococoMessageBridge, +>; + parameter_types! { pub CheckingAccount: AccountId = PolkadotXcm::check_account(); } @@ -239,15 +250,7 @@ fn message_dispatch_routing_works() { #[test] fn relayed_incoming_message_works() { - bridge_hub_test_utils::test_cases::from_parachain::relayed_incoming_message_works::< - Runtime, - AllPalletsWithoutSystem, - ParachainSystem, - BridgeGrandpaRococoInstance, - BridgeParachainRococoInstance, - WithBridgeHubRococoMessagesInstance, - WithBridgeHubRococoMessageBridge, - >( + from_parachain::relayed_incoming_message_works::( collator_session_keys(), bp_bridge_hub_westend::BRIDGE_HUB_WESTEND_PARACHAIN_ID, bp_bridge_hub_rococo::BRIDGE_HUB_ROCOCO_PARACHAIN_ID, @@ -262,16 +265,7 @@ fn relayed_incoming_message_works() { #[test] pub fn complex_relay_extrinsic_works() { - bridge_hub_test_utils::test_cases::from_parachain::complex_relay_extrinsic_works::< - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - ParachainSystem, - BridgeGrandpaRococoInstance, - BridgeParachainRococoInstance, - WithBridgeHubRococoMessagesInstance, - WithBridgeHubRococoMessageBridge, - >( + from_parachain::complex_relay_extrinsic_works::( collator_session_keys(), bp_bridge_hub_westend::BRIDGE_HUB_WESTEND_PARACHAIN_ID, bp_bridge_hub_rococo::BRIDGE_HUB_ROCOCO_PARACHAIN_ID, @@ -304,16 +298,9 @@ pub fn can_calculate_weight_for_paid_export_message_with_reserve_transfer() { #[test] pub fn can_calculate_fee_for_complex_message_delivery_transaction() { - let estimated = bridge_hub_test_utils::test_cases::from_parachain::can_calculate_fee_for_complex_message_delivery_transaction::< - Runtime, - BridgeGrandpaRococoInstance, - BridgeParachainRococoInstance, - WithBridgeHubRococoMessagesInstance, - WithBridgeHubRococoMessageBridge, - >( - collator_session_keys(), - construct_and_estimate_extrinsic_fee - ); + let estimated = from_parachain::can_calculate_fee_for_complex_message_delivery_transaction::< + RuntimeTestsAdapter, + >(collator_session_keys(), construct_and_estimate_extrinsic_fee); // check if estimated value is sane let max_expected = bp_bridge_hub_westend::BridgeHubWestendBaseDeliveryFeeInWnds::get(); @@ -327,16 +314,9 @@ pub fn can_calculate_fee_for_complex_message_delivery_transaction() { #[test] pub fn can_calculate_fee_for_complex_message_confirmation_transaction() { - let estimated = bridge_hub_test_utils::test_cases::from_parachain::can_calculate_fee_for_complex_message_confirmation_transaction::< - Runtime, - BridgeGrandpaRococoInstance, - BridgeParachainRococoInstance, - WithBridgeHubRococoMessagesInstance, - WithBridgeHubRococoMessageBridge, - >( - collator_session_keys(), - construct_and_estimate_extrinsic_fee - ); + let estimated = from_parachain::can_calculate_fee_for_complex_message_confirmation_transaction::< + RuntimeTestsAdapter, + >(collator_session_keys(), construct_and_estimate_extrinsic_fee); // check if estimated value is sane let max_expected = bp_bridge_hub_westend::BridgeHubWestendBaseConfirmationFeeInWnds::get(); diff --git a/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_grandpa_chain.rs b/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_grandpa_chain.rs index e6407e60989e..8d4e6a034a7e 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_grandpa_chain.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_grandpa_chain.rs @@ -49,9 +49,9 @@ use xcm::latest::prelude::*; /// Helper trait to test bridges with remote GRANDPA chain. /// -/// This is only used to decrease amount of lines, dedicated to bounds +/// This is only used to decrease amount of lines, dedicated to bounds. pub trait WithRemoteGrandpaChainHelper { - /// This chaiin runtime. + /// This chain runtime. type Runtime: BasicParachainRuntime + cumulus_pallet_xcmp_queue::Config + BridgeGrandpaConfig< @@ -74,7 +74,7 @@ pub trait WithRemoteGrandpaChainHelper { type MB: MessageBridge; } -/// Adapter struct that implements `WithRemoteGrandpaChainHelper` +/// Adapter struct that implements [`WithRemoteGrandpaChainHelper`]. pub struct WithRemoteGrandpaChainHelperAdapter( sp_std::marker::PhantomData<(Runtime, AllPalletsWithoutSystem, GPI, MPI, MB)>, ); diff --git a/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_parachain.rs b/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_parachain.rs index dff71d23df87..fa1049cc6ec4 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_parachain.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_cases/from_parachain.rs @@ -22,43 +22,102 @@ use crate::{ test_data, }; +use bp_header_chain::ChainWithGrandpa; use bp_messages::{ source_chain::TargetHeaderChain, target_chain::SourceHeaderChain, LaneId, UnrewardedRelayersState, }; use bp_polkadot_core::parachains::ParaHash; use bp_relayers::{RewardsAccountOwner, RewardsAccountParams}; -use bp_runtime::{Parachain, UnderlyingChainOf}; +use bp_runtime::{HashOf, Parachain, UnderlyingChainOf}; use bridge_runtime_common::{ messages::{ source::FromBridgedChainMessagesDeliveryProof, target::FromBridgedChainMessagesProof, - BridgedChain as MessageBridgedChain, MessageBridge, + BridgedChain as MessageBridgedChain, MessageBridge, ThisChain as MessageThisChain, }, messages_xcm_extension::XcmAsPlainPayload, }; -use frame_support::traits::{Get, OnFinalize, OnInitialize, OriginTrait}; +use frame_support::traits::{Get, OnFinalize, OnInitialize}; use frame_system::pallet_prelude::BlockNumberFor; -use pallet_bridge_parachains::{RelayBlockHash, RelayBlockNumber}; +use pallet_bridge_grandpa::{Call as BridgeGrandpaCall, Config as BridgeGrandpaConfig}; +use pallet_bridge_messages::{Call as BridgeMessagesCall, Config as BridgeMessagesConfig}; +use pallet_bridge_parachains::{ + Call as BridgeParachainsCall, Config as BridgeParachainsConfig, RelayBlockHash, + RelayBlockNumber, +}; use parachains_runtimes_test_utils::{ - AccountIdOf, BasicParachainRuntime, CollatorSessionKeys, ValidatorIdOf, + AccountIdOf, BasicParachainRuntime, CollatorSessionKeys, RuntimeCallOf, }; use sp_keyring::AccountKeyring::*; use sp_runtime::{traits::Header as HeaderT, AccountId32}; use xcm::latest::prelude::*; +/// Helper trait to test bridges with remote parachain. +/// +/// This is only used to decrease amount of lines, dedicated to bounds. +pub trait WithRemoteParachainHelper { + /// This chain runtime. + type Runtime: BasicParachainRuntime + + cumulus_pallet_xcmp_queue::Config + + BridgeGrandpaConfig + + BridgeParachainsConfig + + BridgeMessagesConfig< + Self::MPI, + InboundPayload = XcmAsPlainPayload, + InboundRelayer = bp_runtime::AccountIdOf>, + OutboundPayload = XcmAsPlainPayload, + > + pallet_bridge_relayers::Config; + /// All pallets of this chain, excluding system pallet. + type AllPalletsWithoutSystem: OnInitialize> + + OnFinalize>; + /// Instance of the `pallet-bridge-grandpa`, used to bridge with remote relay chain. + type GPI: 'static; + /// Instance of the `pallet-bridge-parachains`, used to bridge with remote parachain. + type PPI: 'static; + /// Instance of the `pallet-bridge-messages`, used to bridge with remote parachain. + type MPI: 'static; + /// Messages bridge definition. + type MB: MessageBridge; +} + +/// Adapter struct that implements `WithRemoteParachainHelper`. +pub struct WithRemoteParachainHelperAdapter( + sp_std::marker::PhantomData<(Runtime, AllPalletsWithoutSystem, GPI, PPI, MPI, MB)>, +); + +impl WithRemoteParachainHelper + for WithRemoteParachainHelperAdapter +where + Runtime: BasicParachainRuntime + + cumulus_pallet_xcmp_queue::Config + + BridgeGrandpaConfig + + BridgeParachainsConfig + + BridgeMessagesConfig< + MPI, + InboundPayload = XcmAsPlainPayload, + InboundRelayer = bp_runtime::AccountIdOf>, + OutboundPayload = XcmAsPlainPayload, + > + pallet_bridge_relayers::Config, + AllPalletsWithoutSystem: + OnInitialize> + OnFinalize>, + GPI: 'static, + PPI: 'static, + MPI: 'static, + MB: MessageBridge, +{ + type Runtime = Runtime; + type AllPalletsWithoutSystem = AllPalletsWithoutSystem; + type GPI = GPI; + type PPI = PPI; + type MPI = MPI; + type MB = MB; +} + /// Test-case makes sure that Runtime can dispatch XCM messages submitted by relayer, /// with proofs (finality, para heads, message) independently submitted. /// Also verifies relayer transaction signed extensions work as intended. -pub fn relayed_incoming_message_works< - Runtime, - AllPalletsWithoutSystem, - HrmpChannelOpener, - GPI, - PPI, - MPI, - MB, ->( - collator_session_key: CollatorSessionKeys, +pub fn relayed_incoming_message_works( + collator_session_key: CollatorSessionKeys, runtime_para_id: u32, bridged_para_id: u32, bridged_chain_id: bp_runtime::ChainId, @@ -68,46 +127,30 @@ pub fn relayed_incoming_message_works< prepare_configuration: impl Fn(), construct_and_apply_extrinsic: fn( sp_keyring::AccountKeyring, - ::RuntimeCall, + ::RuntimeCall, ) -> sp_runtime::DispatchOutcome, ) where - Runtime: BasicParachainRuntime - + cumulus_pallet_xcmp_queue::Config - + cumulus_pallet_parachain_system::Config - + pallet_bridge_grandpa::Config - + pallet_bridge_parachains::Config - + pallet_bridge_messages::Config - + pallet_bridge_relayers::Config, - AllPalletsWithoutSystem: - OnInitialize> + OnFinalize>, - GPI: 'static, - PPI: 'static, - MPI: 'static, - MB: MessageBridge, - ::BridgedChain: Send + Sync + 'static, - ::ThisChain: Send + Sync + 'static, - UnderlyingChainOf>: bp_runtime::Chain + Parachain, - HrmpChannelOpener: frame_support::inherent::ProvideInherent< - Call = cumulus_pallet_parachain_system::Call, - >, - ValidatorIdOf: From>, - >::SourceHeaderChain: - SourceHeaderChain>, - >::BridgedChain: - bp_runtime::Chain, - ParaHash: From< - <>::BridgedChain as bp_runtime::Chain>::Hash, - >, - ::AccountId: - Into<<::RuntimeOrigin as OriginTrait>::AccountId>, - ::AccountId: From, - AccountIdOf: From, - >::InboundRelayer: From, - ::RuntimeCall: From> - + From> - + From>, + RuntimeHelper: WithRemoteParachainHelper, + AccountIdOf: From, + RuntimeCallOf: From> + + From> + + From>, + UnderlyingChainOf>: + bp_runtime::Chain + Parachain, + >::BridgedChain: + bp_runtime::Chain + ChainWithGrandpa, + >::SourceHeaderChain: + SourceHeaderChain< + MessagesProof = FromBridgedChainMessagesProof< + HashOf>, + >, + >, { - helpers::relayed_incoming_message_works::( + helpers::relayed_incoming_message_works::< + RuntimeHelper::Runtime, + RuntimeHelper::AllPalletsWithoutSystem, + RuntimeHelper::MPI, + >( collator_session_key, runtime_para_id, sibling_parachain_id, @@ -124,8 +167,8 @@ pub fn relayed_incoming_message_works< prepare_configuration(); // start with bridged relay chain block#0 - helpers::initialize_bridge_grandpa_pallet::( - test_data::initialization_data::(0), + helpers::initialize_bridge_grandpa_pallet::( + test_data::initialization_data::(0), ); // generate bridged relay chain finality, parachain heads and message proofs, @@ -138,8 +181,8 @@ pub fn relayed_incoming_message_works< para_heads_proof, message_proof, ) = test_data::from_parachain::make_complex_relayer_delivery_proofs::< - >::BridgedChain, - MB, + >::BridgedChain, + RuntimeHelper::MB, (), >( lane_id, @@ -156,30 +199,38 @@ pub fn relayed_incoming_message_works< let relay_chain_header_number = *relay_chain_header.number(); vec![ ( - pallet_bridge_grandpa::Call::::submit_finality_proof { + BridgeGrandpaCall::::submit_finality_proof { finality_target: Box::new(relay_chain_header), justification: grandpa_justification, }.into(), - helpers::VerifySubmitGrandpaFinalityProofOutcome::::expect_best_header_hash(relay_chain_header_hash), + helpers::VerifySubmitGrandpaFinalityProofOutcome::::expect_best_header_hash( + relay_chain_header_hash, + ), ), ( - pallet_bridge_parachains::Call::::submit_parachain_heads { + BridgeParachainsCall::::submit_parachain_heads { at_relay_block: (relay_chain_header_number, relay_chain_header_hash), parachains: parachain_heads, parachain_heads_proof: para_heads_proof, }.into(), - helpers::VerifySubmitParachainHeaderProofOutcome::::expect_best_header_hash(bridged_para_id, parachain_head_hash), + helpers::VerifySubmitParachainHeaderProofOutcome::::expect_best_header_hash( + bridged_para_id, + parachain_head_hash, + ), ), ( - pallet_bridge_messages::Call::::receive_messages_proof { + BridgeMessagesCall::::receive_messages_proof { relayer_id_at_bridged_chain, proof: message_proof, messages_count: 1, dispatch_weight: Weight::from_parts(1000000000, 0), }.into(), Box::new(( - helpers::VerifySubmitMessagesProofOutcome::::expect_last_delivered_nonce(lane_id, 1), - helpers::VerifyRelayerRewarded::::expect_relayer_reward( + helpers::VerifySubmitMessagesProofOutcome::::expect_last_delivered_nonce( + lane_id, + 1, + ), + helpers::VerifyRelayerRewarded::::expect_relayer_reward( relayer_id_at_this_chain, RewardsAccountParams::new( lane_id, @@ -197,17 +248,8 @@ pub fn relayed_incoming_message_works< /// Test-case makes sure that Runtime can dispatch XCM messages submitted by relayer, /// with proofs (finality, para heads, message) batched together in signed extrinsic. /// Also verifies relayer transaction signed extensions work as intended. -pub fn complex_relay_extrinsic_works< - Runtime, - AllPalletsWithoutSystem, - XcmConfig, - HrmpChannelOpener, - GPI, - PPI, - MPI, - MB, ->( - collator_session_key: CollatorSessionKeys, +pub fn complex_relay_extrinsic_works( + collator_session_key: CollatorSessionKeys, runtime_para_id: u32, bridged_para_id: u32, sibling_parachain_id: u32, @@ -217,48 +259,33 @@ pub fn complex_relay_extrinsic_works< prepare_configuration: impl Fn(), construct_and_apply_extrinsic: fn( sp_keyring::AccountKeyring, - ::RuntimeCall, + ::RuntimeCall, ) -> sp_runtime::DispatchOutcome, ) where - Runtime: BasicParachainRuntime - + cumulus_pallet_xcmp_queue::Config - + cumulus_pallet_parachain_system::Config - + pallet_bridge_grandpa::Config - + pallet_bridge_parachains::Config - + pallet_bridge_messages::Config - + pallet_bridge_relayers::Config - + pallet_utility::Config, - AllPalletsWithoutSystem: - OnInitialize> + OnFinalize>, - GPI: 'static, - PPI: 'static, - MPI: 'static, - MB: MessageBridge, - ::BridgedChain: Send + Sync + 'static, - ::ThisChain: Send + Sync + 'static, - UnderlyingChainOf>: bp_runtime::Chain + Parachain, - HrmpChannelOpener: frame_support::inherent::ProvideInherent< - Call = cumulus_pallet_parachain_system::Call, - >, - ValidatorIdOf: From>, - >::SourceHeaderChain: - SourceHeaderChain>, - >::BridgedChain: - bp_runtime::Chain, - ParaHash: From< - <>::BridgedChain as bp_runtime::Chain>::Hash, - >, - ::AccountId: - Into<<::RuntimeOrigin as OriginTrait>::AccountId>, - ::AccountId: From, - AccountIdOf: From, - >::InboundRelayer: From, - ::RuntimeCall: From> - + From> - + From>, - ::RuntimeCall: From>, + RuntimeHelper: WithRemoteParachainHelper, + RuntimeHelper::Runtime: + pallet_utility::Config>, + AccountIdOf: From, + RuntimeCallOf: From> + + From> + + From> + + From>, + UnderlyingChainOf>: + bp_runtime::Chain + Parachain, + >::BridgedChain: + bp_runtime::Chain + ChainWithGrandpa, + >::SourceHeaderChain: + SourceHeaderChain< + MessagesProof = FromBridgedChainMessagesProof< + HashOf>, + >, + >, { - helpers::relayed_incoming_message_works::( + helpers::relayed_incoming_message_works::< + RuntimeHelper::Runtime, + RuntimeHelper::AllPalletsWithoutSystem, + RuntimeHelper::MPI, + >( collator_session_key, runtime_para_id, sibling_parachain_id, @@ -275,8 +302,8 @@ pub fn complex_relay_extrinsic_works< prepare_configuration(); // start with bridged relay chain block#0 - helpers::initialize_bridge_grandpa_pallet::( - test_data::initialization_data::(0), + helpers::initialize_bridge_grandpa_pallet::( + test_data::initialization_data::(0), ); // generate bridged relay chain finality, parachain heads and message proofs, @@ -289,8 +316,8 @@ pub fn complex_relay_extrinsic_works< para_heads_proof, message_proof, ) = test_data::from_parachain::make_complex_relayer_delivery_proofs::< - >::BridgedChain, - MB, + >::BridgedChain, + RuntimeHelper::MB, (), >( lane_id, @@ -306,30 +333,40 @@ pub fn complex_relay_extrinsic_works< let relay_chain_header_hash = relay_chain_header.hash(); let relay_chain_header_number = *relay_chain_header.number(); vec![( - pallet_utility::Call::::batch_all { + pallet_utility::Call::::batch_all { calls: vec![ - pallet_bridge_grandpa::Call::::submit_finality_proof { + BridgeGrandpaCall::::submit_finality_proof { finality_target: Box::new(relay_chain_header), justification: grandpa_justification, }.into(), - pallet_bridge_parachains::Call::::submit_parachain_heads { + BridgeParachainsCall::::submit_parachain_heads { at_relay_block: (relay_chain_header_number, relay_chain_header_hash), parachains: parachain_heads, parachain_heads_proof: para_heads_proof, }.into(), - pallet_bridge_messages::Call::::receive_messages_proof { + BridgeMessagesCall::::receive_messages_proof { relayer_id_at_bridged_chain, proof: message_proof, messages_count: 1, dispatch_weight: Weight::from_parts(1000000000, 0), }.into(), ], - }.into(), + } + .into(), Box::new(( - helpers::VerifySubmitGrandpaFinalityProofOutcome::::expect_best_header_hash(relay_chain_header_hash), - helpers::VerifySubmitParachainHeaderProofOutcome::::expect_best_header_hash(bridged_para_id, parachain_head_hash), - helpers::VerifySubmitMessagesProofOutcome::::expect_last_delivered_nonce(lane_id, 1), - helpers::VerifyRelayerRewarded::::expect_relayer_reward( + helpers::VerifySubmitGrandpaFinalityProofOutcome::< + RuntimeHelper::Runtime, + RuntimeHelper::GPI, + >::expect_best_header_hash(relay_chain_header_hash), + helpers::VerifySubmitParachainHeaderProofOutcome::< + RuntimeHelper::Runtime, + RuntimeHelper::PPI, + >::expect_best_header_hash(bridged_para_id, parachain_head_hash), + helpers::VerifySubmitMessagesProofOutcome::< + RuntimeHelper::Runtime, + RuntimeHelper::MPI, + >::expect_last_delivered_nonce(lane_id, 1), + helpers::VerifyRelayerRewarded::::expect_relayer_reward( relayer_id_at_this_chain, RewardsAccountParams::new( lane_id, @@ -345,45 +382,29 @@ pub fn complex_relay_extrinsic_works< /// Estimates transaction fee for default message delivery transaction (batched with required /// proofs) from bridged parachain. -pub fn can_calculate_fee_for_complex_message_delivery_transaction( - collator_session_key: CollatorSessionKeys, - compute_extrinsic_fee: fn(pallet_utility::Call::) -> u128, +pub fn can_calculate_fee_for_complex_message_delivery_transaction( + collator_session_key: CollatorSessionKeys, + compute_extrinsic_fee: fn(pallet_utility::Call) -> u128, ) -> u128 where - Runtime: frame_system::Config - + pallet_balances::Config - + pallet_session::Config - + pallet_xcm::Config - + parachain_info::Config - + pallet_collator_selection::Config - + cumulus_pallet_parachain_system::Config - + pallet_bridge_grandpa::Config - + pallet_bridge_parachains::Config - + pallet_bridge_messages::Config - + pallet_utility::Config, - GPI: 'static, - PPI: 'static, - MPI: 'static, - MB: MessageBridge, - ::BridgedChain: Send + Sync + 'static, - ::ThisChain: Send + Sync + 'static, - UnderlyingChainOf>: bp_runtime::Chain + Parachain, - ValidatorIdOf: From>, - <>::SourceHeaderChain as SourceHeaderChain>::MessagesProof: - From>, - >::BridgedChain: bp_runtime::Chain, - ParaHash: From<<>::BridgedChain as bp_runtime::Chain>::Hash>, - ::AccountId: - Into<<::RuntimeOrigin as OriginTrait>::AccountId>, - ::AccountId: From, - AccountIdOf: From, - >::InboundRelayer: From, - ::RuntimeCall: - From> - + From> - + From>, + RuntimeHelper: WithRemoteParachainHelper, + RuntimeHelper::Runtime: + pallet_utility::Config>, + RuntimeCallOf: From> + + From> + + From>, + UnderlyingChainOf>: + bp_runtime::Chain + Parachain, + >::BridgedChain: + bp_runtime::Chain + ChainWithGrandpa, + >::SourceHeaderChain: + SourceHeaderChain< + MessagesProof = FromBridgedChainMessagesProof< + HashOf>, + >, + >, { - run_test::(collator_session_key, 1000, vec![], || { + run_test::(collator_session_key, 1000, vec![], || { // generate bridged relay chain finality, parachain heads and message proofs, // to be submitted by relayer to this chain. // @@ -398,8 +419,8 @@ where para_heads_proof, message_proof, ) = test_data::from_parachain::make_complex_relayer_delivery_proofs::< - >::BridgedChain, - MB, + >::BridgedChain, + RuntimeHelper::MB, (), >( LaneId::default(), @@ -414,17 +435,18 @@ where // generate batch call that provides finality for bridged relay and parachains + message // proof let batch = test_data::from_parachain::make_complex_relayer_delivery_batch::< - Runtime, - GPI, - PPI, - MPI, + RuntimeHelper::Runtime, + RuntimeHelper::GPI, + RuntimeHelper::PPI, + RuntimeHelper::MPI, + _, >( relay_chain_header, grandpa_justification, parachain_heads, para_heads_proof, message_proof, - Dave.public().into(), + helpers::relayer_id_at_bridged_chain::(), ); let estimated_fee = compute_extrinsic_fee(batch); @@ -432,7 +454,7 @@ where target: "bridges::estimate", "Estimate fee: {:?} for single message delivery for runtime: {:?}", estimated_fee, - Runtime::Version::get(), + ::Version::get(), ); estimated_fee @@ -441,50 +463,34 @@ where /// Estimates transaction fee for default message confirmation transaction (batched with required /// proofs) from bridged parachain. -pub fn can_calculate_fee_for_complex_message_confirmation_transaction( - collator_session_key: CollatorSessionKeys, - compute_extrinsic_fee: fn(pallet_utility::Call::) -> u128, +pub fn can_calculate_fee_for_complex_message_confirmation_transaction( + collator_session_key: CollatorSessionKeys, + compute_extrinsic_fee: fn(pallet_utility::Call) -> u128, ) -> u128 where - Runtime: frame_system::Config - + pallet_balances::Config - + pallet_session::Config - + pallet_xcm::Config - + parachain_info::Config - + pallet_collator_selection::Config - + cumulus_pallet_parachain_system::Config - + pallet_bridge_grandpa::Config - + pallet_bridge_parachains::Config - + pallet_bridge_messages::Config - + pallet_utility::Config, - GPI: 'static, - PPI: 'static, - MPI: 'static, - MB: MessageBridge, - ::BridgedChain: Send + Sync + 'static, - ::ThisChain: Send + Sync + 'static, - <::ThisChain as bp_runtime::Chain>::AccountId: From, - UnderlyingChainOf>: bp_runtime::Chain + Parachain, - ValidatorIdOf: From>, - <>::SourceHeaderChain as SourceHeaderChain>::MessagesProof: - From>, - >::BridgedChain: bp_runtime::Chain, - ParaHash: From<<>::BridgedChain as bp_runtime::Chain>::Hash>, - ::AccountId: - Into<<::RuntimeOrigin as OriginTrait>::AccountId>, - ::AccountId: From, - AccountIdOf: From, - >::InboundRelayer: From, - <>::TargetHeaderChain as TargetHeaderChain< + RuntimeHelper: WithRemoteParachainHelper, + AccountIdOf: From, + RuntimeHelper::Runtime: + pallet_utility::Config>, + MessageThisChain: + bp_runtime::Chain>, + RuntimeCallOf: From> + + From> + + From>, + UnderlyingChainOf>: + bp_runtime::Chain + Parachain, + >::BridgedChain: + bp_runtime::Chain + ChainWithGrandpa, + >::TargetHeaderChain: + TargetHeaderChain< XcmAsPlainPayload, - Runtime::AccountId, - >>::MessagesDeliveryProof: From>, - ::RuntimeCall: - From> - + From> - + From>, + AccountIdOf, + MessagesDeliveryProof = FromBridgedChainMessagesDeliveryProof< + HashOf>>, + >, + >, { - run_test::(collator_session_key, 1000, vec![], || { + run_test::(collator_session_key, 1000, vec![], || { // generate bridged relay chain finality, parachain heads and message proofs, // to be submitted by relayer to this chain. let unrewarded_relayers = UnrewardedRelayersState { @@ -500,18 +506,25 @@ where para_heads_proof, message_delivery_proof, ) = test_data::from_parachain::make_complex_relayer_confirmation_proofs::< - >::BridgedChain, - MB, + >::BridgedChain, + RuntimeHelper::MB, (), - >(LaneId::default(), 1, 5, 1_000, Alice.public().into(), unrewarded_relayers.clone()); + >( + LaneId::default(), + 1, + 5, + 1_000, + AccountId32::from(Alice.public()).into(), + unrewarded_relayers.clone(), + ); // generate batch call that provides finality for bridged relay and parachains + message // proof let batch = test_data::from_parachain::make_complex_relayer_confirmation_batch::< - Runtime, - GPI, - PPI, - MPI, + RuntimeHelper::Runtime, + RuntimeHelper::GPI, + RuntimeHelper::PPI, + RuntimeHelper::MPI, >( relay_chain_header, grandpa_justification, @@ -526,7 +539,7 @@ where target: "bridges::estimate", "Estimate fee: {:?} for single message confirmation for runtime: {:?}", estimated_fee, - Runtime::Version::get(), + ::Version::get(), ); estimated_fee diff --git a/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_data/from_parachain.rs b/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_data/from_parachain.rs index 7ac10aa9e730..932ba2312399 100644 --- a/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_data/from_parachain.rs +++ b/cumulus/parachains/runtimes/bridge-hubs/test-utils/src/test_data/from_parachain.rs @@ -22,12 +22,14 @@ use bp_messages::{ source_chain::TargetHeaderChain, target_chain::SourceHeaderChain, LaneId, UnrewardedRelayersState, Weight, }; -use bp_runtime::{BlockNumberOf, HeaderOf, Parachain, StorageProofSize, UnderlyingChainOf}; +use bp_runtime::{ + AccountIdOf, BlockNumberOf, HeaderOf, Parachain, StorageProofSize, UnderlyingChainOf, +}; use bp_test_utils::prepare_parachain_heads_proof; use bridge_runtime_common::{ messages::{ source::FromBridgedChainMessagesDeliveryProof, target::FromBridgedChainMessagesProof, - BridgedChain as MessageBridgedChain, MessageBridge, + BridgedChain as MessageBridgedChain, MessageBridge, ThisChain as MessageThisChain, }, messages_generation::{ encode_all_messages, encode_lane_data, prepare_message_delivery_storage_proof, @@ -38,7 +40,7 @@ use bridge_runtime_common::{ use codec::Encode; use pallet_bridge_grandpa::BridgedHeader; use pallet_bridge_parachains::{RelayBlockHash, RelayBlockNumber}; -use sp_runtime::{traits::Header as HeaderT, AccountId32}; +use sp_runtime::traits::Header as HeaderT; use xcm::latest::prelude::*; use bp_header_chain::{justification::GrandpaJustification, ChainWithGrandpa}; @@ -47,17 +49,21 @@ use bp_polkadot_core::parachains::{ParaHash, ParaHead, ParaHeadsProof, ParaId}; use sp_runtime::SaturatedConversion; /// Prepare a batch call with relay finality proof, parachain head proof and message proof. -pub fn make_complex_relayer_delivery_batch( +pub fn make_complex_relayer_delivery_batch( relay_chain_header: BridgedHeader, grandpa_justification: GrandpaJustification>, parachain_heads: Vec<(ParaId, ParaHash)>, para_heads_proof: ParaHeadsProof, message_proof: FromBridgedChainMessagesProof, - relayer_id_at_bridged_chain: AccountId32, + relayer_id_at_bridged_chain: InboundRelayer, ) -> pallet_utility::Call where Runtime:pallet_bridge_grandpa::Config + pallet_bridge_parachains::Config - + pallet_bridge_messages::Config + + pallet_bridge_messages::Config< + MPI, + InboundPayload = XcmAsPlainPayload, + InboundRelayer = InboundRelayer, + > + pallet_utility::Config, GPI: 'static, PPI: 'static, @@ -66,7 +72,6 @@ pub fn make_complex_relayer_delivery_batch( <>::BridgedChain as bp_runtime::Chain>::Hash: From, <>::SourceHeaderChain as SourceHeaderChain>::MessagesProof: From>, - >::InboundRelayer: From, ::RuntimeCall: From> + From> @@ -117,10 +122,11 @@ where MPI: 'static, >::BridgedChain: bp_runtime::Chain + ChainWithGrandpa, - <>::TargetHeaderChain as TargetHeaderChain< + >::TargetHeaderChain: TargetHeaderChain< XcmAsPlainPayload, Runtime::AccountId, - >>::MessagesDeliveryProof: From>, + MessagesDeliveryProof = FromBridgedChainMessagesDeliveryProof, + >, ::RuntimeCall: From> + From> + From>, @@ -141,7 +147,7 @@ where }; let submit_message_delivery_proof = pallet_bridge_messages::Call::::receive_messages_delivery_proof { - proof: message_delivery_proof.into(), + proof: message_delivery_proof, relayers_state, }; pallet_utility::Call::::batch_all { @@ -174,8 +180,6 @@ where BridgedRelayChain: bp_runtime::Chain + ChainWithGrandpa, MB: MessageBridge, - ::BridgedChain: Send + Sync + 'static, - ::ThisChain: Send + Sync + 'static, UnderlyingChainOf>: bp_runtime::Chain + Parachain, { let message_payload = prepare_inbound_xcm(xcm_message, message_destination); @@ -223,7 +227,7 @@ pub fn make_complex_relayer_confirmation_proofs>, relayers_state: UnrewardedRelayersState, ) -> ( HeaderOf, @@ -237,9 +241,6 @@ where BridgedRelayChain: bp_runtime::Chain + ChainWithGrandpa, MB: MessageBridge, - ::BridgedChain: Send + Sync + 'static, - ::ThisChain: Send + Sync + 'static, - <::ThisChain as bp_runtime::Chain>::AccountId: From, UnderlyingChainOf>: bp_runtime::Chain + Parachain, { // prepare para storage proof containing message delivery proof