referrerpolicy=no-referrer-when-downgrade

penpal_emulated_chain/
lib.rs

1// Copyright (C) Parity Technologies (UK) Ltd.
2// SPDX-License-Identifier: Apache-2.0
3
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// 	http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16pub use penpal_runtime::{self, xcm_config::RelayNetworkId as PenpalRelayNetworkId};
17
18mod genesis;
19pub use genesis::{genesis, PenpalAssetOwner, PenpalSudoAccount, ED, PARA_ID_A, PARA_ID_B};
20
21// Substrate
22use frame_support::traits::OnInitialize;
23use sp_core::Encode;
24
25// Cumulus
26use emulated_integration_tests_common::{
27	impl_accounts_helpers_for_parachain, impl_assert_events_helpers_for_parachain,
28	impl_assets_helpers_for_parachain, impl_foreign_assets_helpers_for_parachain,
29	impl_xcm_helpers_for_parachain,
30	impls::{NetworkId, Parachain},
31	xcm_emulator::decl_test_parachains,
32};
33
34// Polkadot
35use xcm::latest::{ROCOCO_GENESIS_HASH, WESTEND_GENESIS_HASH};
36
37// Penpal Parachain declaration
38decl_test_parachains! {
39	pub struct PenpalA {
40		genesis = genesis(PARA_ID_A),
41		on_init = {
42			penpal_runtime::AuraExt::on_initialize(1);
43			frame_support::assert_ok!(penpal_runtime::System::set_storage(
44				penpal_runtime::RuntimeOrigin::root(),
45				vec![(PenpalRelayNetworkId::key().to_vec(), NetworkId::ByGenesis(ROCOCO_GENESIS_HASH).encode())],
46			));
47		},
48		runtime = penpal_runtime,
49		core = {
50			XcmpMessageHandler: penpal_runtime::XcmpQueue,
51			LocationToAccountId: penpal_runtime::xcm_config::LocationToAccountId,
52			ParachainInfo: penpal_runtime::ParachainInfo,
53			MessageOrigin: cumulus_primitives_core::AggregateMessageOrigin,
54		},
55		pallets = {
56			PolkadotXcm: penpal_runtime::PolkadotXcm,
57			Assets: penpal_runtime::Assets,
58			ForeignAssets: penpal_runtime::ForeignAssets,
59			AssetConversion: penpal_runtime::AssetConversion,
60			Balances: penpal_runtime::Balances,
61		}
62	},
63	pub struct PenpalB {
64		genesis = genesis(PARA_ID_B),
65		on_init = {
66			penpal_runtime::AuraExt::on_initialize(1);
67			frame_support::assert_ok!(penpal_runtime::System::set_storage(
68				penpal_runtime::RuntimeOrigin::root(),
69				vec![(PenpalRelayNetworkId::key().to_vec(), NetworkId::ByGenesis(WESTEND_GENESIS_HASH).encode())],
70			));
71		},
72		runtime = penpal_runtime,
73		core = {
74			XcmpMessageHandler: penpal_runtime::XcmpQueue,
75			LocationToAccountId: penpal_runtime::xcm_config::LocationToAccountId,
76			ParachainInfo: penpal_runtime::ParachainInfo,
77			MessageOrigin: cumulus_primitives_core::AggregateMessageOrigin,
78		},
79		pallets = {
80			PolkadotXcm: penpal_runtime::PolkadotXcm,
81			Assets: penpal_runtime::Assets,
82			ForeignAssets: penpal_runtime::ForeignAssets,
83			AssetConversion: penpal_runtime::AssetConversion,
84			Balances: penpal_runtime::Balances,
85		}
86	},
87}
88
89// Penpal implementation
90impl_accounts_helpers_for_parachain!(PenpalA);
91impl_accounts_helpers_for_parachain!(PenpalB);
92impl_assert_events_helpers_for_parachain!(PenpalA);
93impl_assert_events_helpers_for_parachain!(PenpalB);
94impl_assets_helpers_for_parachain!(PenpalA);
95impl_foreign_assets_helpers_for_parachain!(PenpalA, xcm::latest::Location);
96impl_assets_helpers_for_parachain!(PenpalB);
97impl_foreign_assets_helpers_for_parachain!(PenpalB, xcm::latest::Location);
98impl_xcm_helpers_for_parachain!(PenpalA);
99impl_xcm_helpers_for_parachain!(PenpalB);