mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 14:31:02 +00:00
[xcm-emulator] Chains generic over Network & Integration tests restructure (#2092)
Closes: - #1383 - Declared chains can be now be imported and reused in a different crate. - Chain declaration are now generic over a generic type `N` (the Network) - #1389 - Solved #1383, chains and networks declarations can be restructure to avoid having to compile all chains when running integrations tests where are not needed. - Chains are now declared on its own crate (removed from `integration-tests-common`) - Networks are now declared on its own crate (removed from `integration-tests-common`) - Integration tests will import only the relevant Network crate - `integration-tests-common` is renamed to `emulated-integration-tests-common` All this is necessary to be able to implement what is described here: https://github.com/paritytech/roadmap/issues/56#issuecomment-1777010553 --------- Co-authored-by: command-bot <>
This commit is contained in:
@@ -13,361 +13,161 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
pub mod constants;
|
||||
pub mod impls;
|
||||
pub mod macros;
|
||||
pub mod xcm_helpers;
|
||||
|
||||
use constants::{
|
||||
accounts::{ALICE, BOB},
|
||||
asset_hub_rococo, asset_hub_westend, asset_hub_wococo, bridge_hub_rococo, bridge_hub_westend,
|
||||
penpal, rococo, westend,
|
||||
};
|
||||
use impls::{RococoWococoMessageHandler, WococoRococoMessageHandler};
|
||||
pub use paste;
|
||||
pub use xcm_emulator;
|
||||
|
||||
// Substrate
|
||||
use frame_support::traits::OnInitialize;
|
||||
pub use pallet_balances;
|
||||
pub use pallet_message_queue;
|
||||
|
||||
// Cumulus
|
||||
pub use cumulus_pallet_xcmp_queue;
|
||||
pub use xcm_emulator::Chain;
|
||||
use xcm_emulator::{
|
||||
decl_test_bridges, decl_test_networks, decl_test_parachains, decl_test_relay_chains,
|
||||
decl_test_sender_receiver_accounts_parameter_types, DefaultParaMessageProcessor,
|
||||
DefaultRelayMessageProcessor, Parachain, TestExt,
|
||||
use grandpa::AuthorityId as GrandpaId;
|
||||
use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
|
||||
use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
|
||||
use sp_consensus_babe::AuthorityId as BabeId;
|
||||
use sp_core::{sr25519, storage::Storage, Pair, Public};
|
||||
use sp_runtime::{
|
||||
traits::{IdentifyAccount, Verify},
|
||||
BuildStorage, MultiSignature,
|
||||
};
|
||||
|
||||
// Polkadot
|
||||
pub use pallet_xcm;
|
||||
pub use xcm::prelude::{AccountId32, WeightLimit};
|
||||
// Polakdot
|
||||
use parachains_common::BlockNumber;
|
||||
use polkadot_runtime_parachains::configuration::HostConfiguration;
|
||||
use xcm;
|
||||
|
||||
decl_test_relay_chains! {
|
||||
#[api_version(8)]
|
||||
pub struct Westend {
|
||||
genesis = westend::genesis(),
|
||||
on_init = (),
|
||||
runtime = westend_runtime,
|
||||
core = {
|
||||
MessageProcessor: DefaultRelayMessageProcessor<Westend>,
|
||||
SovereignAccountOf: westend_runtime::xcm_config::LocationConverter, //TODO: rename to SovereignAccountOf,
|
||||
},
|
||||
pallets = {
|
||||
XcmPallet: westend_runtime::XcmPallet,
|
||||
Sudo: westend_runtime::Sudo,
|
||||
Balances: westend_runtime::Balances,
|
||||
Treasury: westend_runtime::Treasury,
|
||||
AssetRate: westend_runtime::AssetRate,
|
||||
}
|
||||
},
|
||||
#[api_version(8)]
|
||||
pub struct Rococo {
|
||||
genesis = rococo::genesis(),
|
||||
on_init = (),
|
||||
runtime = rococo_runtime,
|
||||
core = {
|
||||
MessageProcessor: DefaultRelayMessageProcessor<Rococo>,
|
||||
SovereignAccountOf: rococo_runtime::xcm_config::LocationConverter, //TODO: rename to SovereignAccountOf,
|
||||
},
|
||||
pallets = {
|
||||
XcmPallet: rococo_runtime::XcmPallet,
|
||||
Sudo: rococo_runtime::Sudo,
|
||||
Balances: rococo_runtime::Balances,
|
||||
Hrmp: rococo_runtime::Hrmp,
|
||||
}
|
||||
},
|
||||
#[api_version(8)]
|
||||
pub struct Wococo {
|
||||
genesis = rococo::genesis(),
|
||||
on_init = (),
|
||||
runtime = rococo_runtime,
|
||||
core = {
|
||||
MessageProcessor: DefaultRelayMessageProcessor<Wococo>,
|
||||
SovereignAccountOf: rococo_runtime::xcm_config::LocationConverter, //TODO: rename to SovereignAccountOf,
|
||||
},
|
||||
pallets = {
|
||||
XcmPallet: rococo_runtime::XcmPallet,
|
||||
Sudo: rococo_runtime::Sudo,
|
||||
Balances: rococo_runtime::Balances,
|
||||
}
|
||||
// Cumulus
|
||||
use parachains_common::{AccountId, AssetHubPolkadotAuraId, AuraId};
|
||||
use polkadot_primitives::{AssignmentId, ValidatorId};
|
||||
use polkadot_service::chain_spec::get_authority_keys_from_seed_no_beefy;
|
||||
|
||||
pub const XCM_V2: u32 = 2;
|
||||
pub const XCM_V3: u32 = 3;
|
||||
pub const REF_TIME_THRESHOLD: u64 = 33;
|
||||
pub const PROOF_SIZE_THRESHOLD: u64 = 33;
|
||||
|
||||
/// The default XCM version to set in genesis config.
|
||||
pub const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION;
|
||||
|
||||
type AccountPublic = <MultiSignature as Verify>::Signer;
|
||||
|
||||
/// Helper function to generate a crypto pair from seed
|
||||
pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
|
||||
TPublic::Pair::from_string(&format!("//{}", seed), None)
|
||||
.expect("static values are valid; qed")
|
||||
.public()
|
||||
}
|
||||
|
||||
/// Helper function to generate an account ID from seed.
|
||||
pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
|
||||
where
|
||||
AccountPublic: From<<TPublic::Pair as Pair>::Public>,
|
||||
{
|
||||
AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
|
||||
}
|
||||
|
||||
pub fn get_host_config() -> HostConfiguration<BlockNumber> {
|
||||
HostConfiguration {
|
||||
max_upward_queue_count: 10,
|
||||
max_upward_queue_size: 51200,
|
||||
max_upward_message_size: 51200,
|
||||
max_upward_message_num_per_candidate: 10,
|
||||
max_downward_message_size: 51200,
|
||||
hrmp_sender_deposit: 0,
|
||||
hrmp_recipient_deposit: 0,
|
||||
hrmp_channel_max_capacity: 1000,
|
||||
hrmp_channel_max_message_size: 102400,
|
||||
hrmp_channel_max_total_size: 102400,
|
||||
hrmp_max_parachain_outbound_channels: 30,
|
||||
hrmp_max_parachain_inbound_channels: 30,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
decl_test_parachains! {
|
||||
// Westend Parachains
|
||||
pub struct AssetHubWestend {
|
||||
genesis = asset_hub_westend::genesis(),
|
||||
on_init = {
|
||||
asset_hub_westend_runtime::AuraExt::on_initialize(1);
|
||||
},
|
||||
runtime = asset_hub_westend_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: asset_hub_westend_runtime::XcmpQueue,
|
||||
LocationToAccountId: asset_hub_westend_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: asset_hub_westend_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<AssetHubWestend>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: asset_hub_westend_runtime::PolkadotXcm,
|
||||
Balances: asset_hub_westend_runtime::Balances,
|
||||
Assets: asset_hub_westend_runtime::Assets,
|
||||
ForeignAssets: asset_hub_westend_runtime::ForeignAssets,
|
||||
PoolAssets: asset_hub_westend_runtime::PoolAssets,
|
||||
AssetConversion: asset_hub_westend_runtime::AssetConversion,
|
||||
}
|
||||
},
|
||||
pub struct BridgeHubWestend {
|
||||
genesis = bridge_hub_westend::genesis(),
|
||||
on_init = {
|
||||
bridge_hub_westend_runtime::AuraExt::on_initialize(1);
|
||||
},
|
||||
runtime = bridge_hub_westend_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: bridge_hub_westend_runtime::XcmpQueue,
|
||||
LocationToAccountId: bridge_hub_westend_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: bridge_hub_westend_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<BridgeHubWestend>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: bridge_hub_westend_runtime::PolkadotXcm,
|
||||
Balances: bridge_hub_westend_runtime::Balances,
|
||||
}
|
||||
},
|
||||
pub struct PenpalWestendA {
|
||||
genesis = penpal::genesis(penpal::PARA_ID_A),
|
||||
on_init = {
|
||||
penpal_runtime::AuraExt::on_initialize(1);
|
||||
},
|
||||
runtime = penpal_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: penpal_runtime::XcmpQueue,
|
||||
LocationToAccountId: penpal_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: penpal_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<PenpalWestendA>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: penpal_runtime::PolkadotXcm,
|
||||
Assets: penpal_runtime::Assets,
|
||||
Balances: penpal_runtime::Balances,
|
||||
}
|
||||
},
|
||||
// Rococo Parachains
|
||||
pub struct BridgeHubRococo {
|
||||
genesis = bridge_hub_rococo::genesis(),
|
||||
on_init = {
|
||||
bridge_hub_rococo_runtime::AuraExt::on_initialize(1);
|
||||
},
|
||||
runtime = bridge_hub_rococo_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: bridge_hub_rococo_runtime::XcmpQueue,
|
||||
LocationToAccountId: bridge_hub_rococo_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: bridge_hub_rococo_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<BridgeHubRococo>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: bridge_hub_rococo_runtime::PolkadotXcm,
|
||||
Balances: bridge_hub_rococo_runtime::Balances,
|
||||
}
|
||||
},
|
||||
// AssetHubRococo
|
||||
pub struct AssetHubRococo {
|
||||
genesis = asset_hub_rococo::genesis(),
|
||||
on_init = {
|
||||
asset_hub_rococo_runtime::AuraExt::on_initialize(1);
|
||||
},
|
||||
runtime = asset_hub_rococo_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: asset_hub_rococo_runtime::XcmpQueue,
|
||||
LocationToAccountId: asset_hub_rococo_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: asset_hub_rococo_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<AssetHubRococo>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: asset_hub_rococo_runtime::PolkadotXcm,
|
||||
Assets: asset_hub_rococo_runtime::Assets,
|
||||
ForeignAssets: asset_hub_rococo_runtime::ForeignAssets,
|
||||
PoolAssets: asset_hub_rococo_runtime::PoolAssets,
|
||||
AssetConversion: asset_hub_rococo_runtime::AssetConversion,
|
||||
Balances: asset_hub_rococo_runtime::Balances,
|
||||
}
|
||||
},
|
||||
pub struct PenpalRococoA {
|
||||
genesis = penpal::genesis(penpal::PARA_ID_A),
|
||||
on_init = {
|
||||
penpal_runtime::AuraExt::on_initialize(1);
|
||||
},
|
||||
runtime = penpal_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: penpal_runtime::XcmpQueue,
|
||||
LocationToAccountId: penpal_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: penpal_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<PenpalRococoA>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: penpal_runtime::PolkadotXcm,
|
||||
Assets: penpal_runtime::Assets,
|
||||
}
|
||||
},
|
||||
pub struct PenpalRococoB {
|
||||
genesis = penpal::genesis(penpal::PARA_ID_B),
|
||||
on_init = {
|
||||
penpal_runtime::AuraExt::on_initialize(1);
|
||||
},
|
||||
runtime = penpal_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: penpal_runtime::XcmpQueue,
|
||||
LocationToAccountId: penpal_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: penpal_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<PenpalRococoB>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: penpal_runtime::PolkadotXcm,
|
||||
Assets: penpal_runtime::Assets,
|
||||
}
|
||||
},
|
||||
// Wococo Parachains
|
||||
pub struct BridgeHubWococo {
|
||||
genesis = bridge_hub_rococo::genesis(),
|
||||
on_init = {
|
||||
bridge_hub_rococo_runtime::AuraExt::on_initialize(1);
|
||||
// TODO: manage to set_wococo_flavor with `set_storage`
|
||||
},
|
||||
runtime = bridge_hub_rococo_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: bridge_hub_rococo_runtime::XcmpQueue,
|
||||
LocationToAccountId: bridge_hub_rococo_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: bridge_hub_rococo_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<BridgeHubWococo>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: bridge_hub_rococo_runtime::PolkadotXcm,
|
||||
}
|
||||
},
|
||||
pub struct AssetHubWococo {
|
||||
genesis = asset_hub_wococo::genesis(),
|
||||
on_init = {
|
||||
asset_hub_rococo_runtime::AuraExt::on_initialize(1);
|
||||
// TODO: manage to set_wococo_flavor with `set_storage`
|
||||
},
|
||||
runtime = asset_hub_rococo_runtime,
|
||||
core = {
|
||||
XcmpMessageHandler: asset_hub_rococo_runtime::XcmpQueue,
|
||||
LocationToAccountId: asset_hub_rococo_runtime::xcm_config::LocationToAccountId,
|
||||
ParachainInfo: asset_hub_rococo_runtime::ParachainInfo,
|
||||
MessageProcessor: DefaultParaMessageProcessor<AssetHubWococo>,
|
||||
},
|
||||
pallets = {
|
||||
PolkadotXcm: asset_hub_rococo_runtime::PolkadotXcm,
|
||||
Assets: asset_hub_rococo_runtime::Assets,
|
||||
ForeignAssets: asset_hub_rococo_runtime::ForeignAssets,
|
||||
PoolAssets: asset_hub_rococo_runtime::PoolAssets,
|
||||
AssetConversion: asset_hub_rococo_runtime::AssetConversion,
|
||||
Balances: asset_hub_rococo_runtime::Balances,
|
||||
}
|
||||
/// Helper function used in tests to build the genesis storage using given RuntimeGenesisConfig and
|
||||
/// code Used in `legacy_vs_json_check` submods to verify storage building with JSON patch against
|
||||
/// building with RuntimeGenesisConfig struct.
|
||||
pub fn build_genesis_storage_legacy(builder: &dyn BuildStorage, code: &[u8]) -> Storage {
|
||||
let mut storage = builder.build_storage().unwrap();
|
||||
storage
|
||||
.top
|
||||
.insert(sp_core::storage::well_known_keys::CODE.to_vec(), code.into());
|
||||
storage
|
||||
}
|
||||
|
||||
pub mod accounts {
|
||||
use super::*;
|
||||
pub const ALICE: &str = "Alice";
|
||||
pub const BOB: &str = "Bob";
|
||||
pub const CHARLIE: &str = "Charlie";
|
||||
pub const DAVE: &str = "Dave";
|
||||
pub const EVE: &str = "Eve";
|
||||
pub const FERDIE: &str = "Ferdei";
|
||||
pub const ALICE_STASH: &str = "Alice//stash";
|
||||
pub const BOB_STASH: &str = "Bob//stash";
|
||||
pub const CHARLIE_STASH: &str = "Charlie//stash";
|
||||
pub const DAVE_STASH: &str = "Dave//stash";
|
||||
pub const EVE_STASH: &str = "Eve//stash";
|
||||
pub const FERDIE_STASH: &str = "Ferdie//stash";
|
||||
pub const FERDIE_BEEFY: &str = "Ferdie//stash";
|
||||
|
||||
pub fn init_balances() -> Vec<AccountId> {
|
||||
vec![
|
||||
get_account_id_from_seed::<sr25519::Public>(ALICE),
|
||||
get_account_id_from_seed::<sr25519::Public>(BOB),
|
||||
get_account_id_from_seed::<sr25519::Public>(CHARLIE),
|
||||
get_account_id_from_seed::<sr25519::Public>(DAVE),
|
||||
get_account_id_from_seed::<sr25519::Public>(EVE),
|
||||
get_account_id_from_seed::<sr25519::Public>(FERDIE),
|
||||
get_account_id_from_seed::<sr25519::Public>(ALICE_STASH),
|
||||
get_account_id_from_seed::<sr25519::Public>(BOB_STASH),
|
||||
get_account_id_from_seed::<sr25519::Public>(CHARLIE_STASH),
|
||||
get_account_id_from_seed::<sr25519::Public>(DAVE_STASH),
|
||||
get_account_id_from_seed::<sr25519::Public>(EVE_STASH),
|
||||
get_account_id_from_seed::<sr25519::Public>(FERDIE_STASH),
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
decl_test_networks! {
|
||||
pub struct WestendMockNet {
|
||||
relay_chain = Westend,
|
||||
parachains = vec![
|
||||
AssetHubWestend,
|
||||
BridgeHubWestend,
|
||||
PenpalWestendA,
|
||||
],
|
||||
bridge = ()
|
||||
},
|
||||
pub struct RococoMockNet {
|
||||
relay_chain = Rococo,
|
||||
parachains = vec![
|
||||
AssetHubRococo,
|
||||
BridgeHubRococo,
|
||||
PenpalRococoA,
|
||||
PenpalRococoB,
|
||||
],
|
||||
bridge = RococoWococoMockBridge
|
||||
},
|
||||
pub struct WococoMockNet {
|
||||
relay_chain = Wococo,
|
||||
parachains = vec![
|
||||
AssetHubWococo,
|
||||
BridgeHubWococo,
|
||||
],
|
||||
bridge = WococoRococoMockBridge
|
||||
pub mod collators {
|
||||
use super::*;
|
||||
|
||||
pub fn invulnerables_asset_hub_polkadot() -> Vec<(AccountId, AssetHubPolkadotAuraId)> {
|
||||
vec![
|
||||
(
|
||||
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
||||
get_from_seed::<AssetHubPolkadotAuraId>("Alice"),
|
||||
),
|
||||
(
|
||||
get_account_id_from_seed::<sr25519::Public>("Bob"),
|
||||
get_from_seed::<AssetHubPolkadotAuraId>("Bob"),
|
||||
),
|
||||
]
|
||||
}
|
||||
|
||||
pub fn invulnerables() -> Vec<(AccountId, AuraId)> {
|
||||
vec![
|
||||
(
|
||||
get_account_id_from_seed::<sr25519::Public>("Alice"),
|
||||
get_from_seed::<AuraId>("Alice"),
|
||||
),
|
||||
(get_account_id_from_seed::<sr25519::Public>("Bob"), get_from_seed::<AuraId>("Bob")),
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
decl_test_bridges! {
|
||||
pub struct RococoWococoMockBridge {
|
||||
source = BridgeHubRococo,
|
||||
target = BridgeHubWococo,
|
||||
handler = RococoWococoMessageHandler
|
||||
},
|
||||
pub struct WococoRococoMockBridge {
|
||||
source = BridgeHubWococo,
|
||||
target = BridgeHubRococo,
|
||||
handler = WococoRococoMessageHandler
|
||||
pub mod validators {
|
||||
use super::*;
|
||||
|
||||
pub fn initial_authorities() -> Vec<(
|
||||
AccountId,
|
||||
AccountId,
|
||||
BabeId,
|
||||
GrandpaId,
|
||||
ImOnlineId,
|
||||
ValidatorId,
|
||||
AssignmentId,
|
||||
AuthorityDiscoveryId,
|
||||
)> {
|
||||
vec![get_authority_keys_from_seed_no_beefy("Alice")]
|
||||
}
|
||||
}
|
||||
|
||||
// Westend implementation
|
||||
impl_accounts_helpers_for_relay_chain!(Westend);
|
||||
impl_assert_events_helpers_for_relay_chain!(Westend);
|
||||
impl_send_transact_helpers_for_relay_chain!(Westend);
|
||||
|
||||
// Rococo implementation
|
||||
impl_accounts_helpers_for_relay_chain!(Rococo);
|
||||
impl_assert_events_helpers_for_relay_chain!(Rococo);
|
||||
impl_hrmp_channels_helpers_for_relay_chain!(Rococo);
|
||||
impl_send_transact_helpers_for_relay_chain!(Rococo);
|
||||
|
||||
// Wococo implementation
|
||||
impl_accounts_helpers_for_relay_chain!(Wococo);
|
||||
impl_assert_events_helpers_for_relay_chain!(Wococo);
|
||||
impl_send_transact_helpers_for_relay_chain!(Wococo);
|
||||
|
||||
// AssetHubWestend implementation
|
||||
impl_accounts_helpers_for_parachain!(AssetHubWestend);
|
||||
impl_assets_helpers_for_parachain!(AssetHubWestend, Westend);
|
||||
impl_assert_events_helpers_for_parachain!(AssetHubWestend);
|
||||
|
||||
// AssetHubRococo implementation
|
||||
impl_accounts_helpers_for_parachain!(AssetHubRococo);
|
||||
impl_assets_helpers_for_parachain!(AssetHubRococo, Rococo);
|
||||
impl_assert_events_helpers_for_parachain!(AssetHubRococo);
|
||||
|
||||
// PenpalWestendA implementation
|
||||
impl_assert_events_helpers_for_parachain!(PenpalWestendA);
|
||||
|
||||
// BridgeHubWestend implementation
|
||||
impl_accounts_helpers_for_parachain!(BridgeHubWestend);
|
||||
impl_assert_events_helpers_for_parachain!(BridgeHubWestend);
|
||||
|
||||
// BridgeHubRococo implementation
|
||||
impl_accounts_helpers_for_parachain!(BridgeHubRococo);
|
||||
impl_assert_events_helpers_for_parachain!(BridgeHubRococo);
|
||||
|
||||
// PenpalRococo implementations
|
||||
impl_assert_events_helpers_for_parachain!(PenpalRococoA);
|
||||
impl_assert_events_helpers_for_parachain!(PenpalRococoB);
|
||||
|
||||
decl_test_sender_receiver_accounts_parameter_types! {
|
||||
// Relays
|
||||
Westend { sender: ALICE, receiver: BOB },
|
||||
Rococo { sender: ALICE, receiver: BOB },
|
||||
Wococo { sender: ALICE, receiver: BOB },
|
||||
// Asset Hubs
|
||||
AssetHubWestend { sender: ALICE, receiver: BOB },
|
||||
AssetHubRococo { sender: ALICE, receiver: BOB },
|
||||
AssetHubWococo { sender: ALICE, receiver: BOB },
|
||||
// Bridged Hubs
|
||||
BridgeHubRococo { sender: ALICE, receiver: BOB },
|
||||
BridgeHubWococo { sender: ALICE, receiver: BOB },
|
||||
BridgeHubWestend { sender: ALICE, receiver: BOB },
|
||||
// Penpals
|
||||
PenpalWestendA { sender: ALICE, receiver: BOB },
|
||||
PenpalRococoA { sender: ALICE, receiver: BOB },
|
||||
PenpalRococoB { sender: ALICE, receiver: BOB }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user