pub mod teyrchain; pub mod relay_chain; use pezsp_runtime::BuildStorage; use pezsp_tracing; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; use xcm_simulator::{decl_test_network, decl_test_teyrchain, decl_test_relay_chain, TestExt}; pub const PARA_ALICE: [u8; 20] = [1u8; 20]; pub const ALICE: pezsp_runtime::AccountId32 = pezsp_runtime::AccountId32::new([1u8; 32]); pub const INITIAL_BALANCE: u128 = 1_000_000_000; decl_test_teyrchain! { pub struct ParaA { Runtime = teyrchain::Runtime, XcmpMessageHandler = teyrchain::MsgQueue, DmpMessageHandler = teyrchain::MsgQueue, new_ext = para_ext(1), } } decl_test_teyrchain! { pub struct ParaB { Runtime = teyrchain::Runtime, XcmpMessageHandler = teyrchain::MsgQueue, DmpMessageHandler = teyrchain::MsgQueue, new_ext = para_ext(2), } } decl_test_relay_chain! { pub struct Relay { Runtime = relay_chain::Runtime, RuntimeCall = relay_chain::RuntimeCall, RuntimeEvent = relay_chain::RuntimeEvent, XcmConfig = relay_chain::XcmConfig, MessageQueue = relay_chain::MessageQueue, System = relay_chain::System, new_ext = relay_ext(), } } decl_test_network! { pub struct MockNet { relay_chain = Relay, teyrchains = vec![ (1, ParaA), (2, ParaB), ], } } pub fn parent_account_id() -> teyrchain::AccountId { let location = (Parent,); teyrchain::location_converter::LocationConverter::convert_location(&location.into()).unwrap() } pub fn child_account_id(para: u32) -> relay_chain::AccountId { let location = (TeyrChain(para),); relay_chain::location_converter::LocationConverter::convert_location(&location.into()).unwrap() } pub fn child_account_account_id(para: u32, who: pezsp_runtime::AccountId32) -> relay_chain::AccountId { let location = (TeyrChain(para), AccountId32 { network: None, id: who.into() }); relay_chain::location_converter::LocationConverter::convert_location(&location.into()).unwrap() } pub fn sibling_account_account_id(para: u32, who: pezsp_runtime::AccountId32) -> teyrchain::AccountId { let location = (Parent, TeyrChain(para), AccountId32 { network: None, id: who.into() }); teyrchain::location_converter::LocationConverter::convert_location(&location.into()).unwrap() } pub fn parent_account_account_id(who: pezsp_runtime::AccountId32) -> teyrchain::AccountId { let location = (Parent, AccountId32 { network: None, id: who.into() }); teyrchain::location_converter::LocationConverter::convert_location(&location.into()).unwrap() } pub fn para_ext(para_id: u32) -> pezsp_io::TestExternalities { use teyrchain::{MsgQueue, Runtime, System}; let mut t = pezframe_system::GenesisConfig::::default().build_storage().unwrap(); pezpallet_balances::GenesisConfig:: { balances: vec![ (PARA_ALICE.into(), INITIAL_BALANCE), (parent_account_id(), INITIAL_BALANCE), ], ..Default::default() } .assimilate_storage(&mut t) .unwrap(); let mut ext = pezsp_io::TestExternalities::new(t); ext.execute_with(|| { pezsp_tracing::try_init_simple(); System::set_block_number(1); MsgQueue::set_para_id(para_id.into()); }); ext } pub fn relay_ext() -> pezsp_io::TestExternalities { use relay_chain::{Runtime, System}; let mut t = pezframe_system::GenesisConfig::::default().build_storage().unwrap(); pezpallet_balances::GenesisConfig:: { balances: vec![ (ALICE, INITIAL_BALANCE), (child_account_id(1), INITIAL_BALANCE), (child_account_id(2), INITIAL_BALANCE), ], ..Default::default() } .assimilate_storage(&mut t) .unwrap(); let mut ext = pezsp_io::TestExternalities::new(t); ext.execute_with(|| { System::set_block_number(1); }); ext } pub type RelayChainPezpalletXcm = pezpallet_xcm::Pezpallet; pub type TeyrChainPezpalletXcm = pezpallet_xcm::Pezpallet;