git.delta.rocks / unique-network / refs/commits / 0b95edb08466

difftreelog

Buildable Opal, Quartz and Unique runtimes.

Ilja Khabarov2022-08-23parent: #ce442c5.patch.diff
in: master

4 files changed

modifiedruntime/common/construct_runtime/mod.rsdiffbeforeafterboth
42 Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,42 Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,
43 Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,43 Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,
44 Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,44 Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,
45 #[runtimes(opal)]
45 XTokens: orml_xtokens = 38,46 XTokens: orml_xtokens = 38,
46 Tokens: orml_tokens = 39,47 Tokens: orml_tokens = 39,
47 // Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,48 // Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,
modifiedruntime/quartz/src/xcm_config.rsdiffbeforeafterboth
32 v1::{BodyId, Junction::*, Junctions::*, MultiLocation, NetworkId},32 v1::{BodyId, Junction::*, Junctions::*, MultiLocation, NetworkId},
33};33};
34use xcm_builder::{34use xcm_builder::{
35 AllowKnownQueryResponses, AllowSubscriptionsFrom,
35 AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom,36 AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom,
36 EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, LocationInverter, ParentAsSuperuser,37 EnsureXcmOrigin, FixedWeightBounds, FungiblesAdapter, LocationInverter, ParentAsSuperuser,
37 ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,38 ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,
47 constants::{MAXIMUM_BLOCK_WEIGHT, UNIQUE},48 constants::{MAXIMUM_BLOCK_WEIGHT, UNIQUE},
48 types::{AccountId, Balance},49 types::{AccountId, Balance},
49};50};
5051use pallet_foreing_assets::{
52 AssetIds, AssetIdMapping, XcmForeignAssetIdMapping, CurrencyId, NativeCurrency,
53 UsingAnyCurrencyComponents, TryAsForeing, ForeignAssetId,
54};
51use crate::{55use crate::{
52 Balances, Call, DmpQueue, Event, Origin, ParachainInfo,56 Balances, Call, DmpQueue, Event, Origin, ParachainInfo,
53 ParachainSystem, PolkadotXcm, Runtime, XcmpQueue,57 ParachainSystem, PolkadotXcm, Runtime, XcmpQueue,
56use crate::runtime_common::config::pallets::TreasuryAccountId;60use crate::runtime_common::config::pallets::TreasuryAccountId;
57use crate::runtime_common::config::xcm::*;61use crate::runtime_common::config::xcm::*;
58use crate::*;62use crate::*;
63use xcm::opaque::latest::prelude::{ DepositReserveAsset, DepositAsset, TransferAsset, TransferReserveAsset };
5964
60// Signed version of balance65// Signed version of balance
61pub type Amount = i128;66pub type Amount = i128;
94 }99 }
95}100}
101
102pub fn get_allowed_locations() -> Vec<MultiLocation> {
103 vec![
104 // Self location
105 MultiLocation { parents: 0, interior: Here },
106 // Parent location
107 MultiLocation { parents: 1, interior: Here },
108 // Karura/Acala location
109 MultiLocation { parents: 1, interior: X1(Parachain(2000)) },
110 // Moonriver location
111 MultiLocation { parents: 1, interior: X1(Parachain(2023)) },
112 // Self parachain address
113 MultiLocation { parents: 1, interior: X1(Parachain(ParachainInfo::get().into())) },
114 ]
115}
116
117// Allow xcm exchange only with locations in list
118pub struct DenyExchangeWithUnknownLocation;
119impl ShouldExecute for DenyExchangeWithUnknownLocation {
120 fn should_execute<Call>(
121 origin: &MultiLocation,
122 message: &mut Xcm<Call>,
123 _max_weight: Weight,
124 _weight_credit: &mut Weight,
125 ) -> Result<(), ()> {
126
127 // Check if deposit or transfer belongs to allowed parachains
128 let mut allowed = get_allowed_locations().contains(origin);
129
130 message.0.iter().for_each(|inst| {
131 match inst {
132 DepositReserveAsset { dest: dst, .. } => { allowed |= get_allowed_locations().contains(dst); }
133 TransferReserveAsset { dest: dst, .. } => { allowed |= get_allowed_locations().contains(dst); }
134 _ => {}
135 }
136 });
137
138 if allowed {
139 return Ok(());
140 }
141
142 log::warn!(
143 target: "xcm::barrier",
144 "Unexpected deposit or transfer location"
145 );
146 // Deny
147 Err(())
148 }
149}
96150
97pub type Barrier = DenyThenTry<151pub type Barrier = DenyThenTry<
98 DenyExchangeWithUnknownLocation,152 DenyExchangeWithUnknownLocation,
108 ),162 ),
109>;163>;
164
165impl orml_tokens::Config for Runtime {
166 type Event = Event;
167 type Balance = Balance;
168 type Amount = Amount;
169 type CurrencyId = CurrencyId;
170 type WeightInfo = ();
171 type ExistentialDeposits = ExistentialDeposits;
172 type OnDust = orml_tokens::TransferDust<Runtime, TreasuryAccountId>;
173 type MaxLocks = MaxLocks;
174 type MaxReserves = MaxReserves;
175 // TODO: Add all module accounts
176 type DustRemovalWhitelist = DustRemovalWhitelist;
177 /// The id type for named reserves.
178 type ReserveIdentifier = ();
179 type OnNewTokenAccount = ();
180 type OnKilledTokenAccount = ();
181}
182
183/*
184impl orml_xtokens::Config for Runtime {
185 type Event = Event;
186 type Balance = Balance;
187 type CurrencyId = AssetIds;
188 type CurrencyIdConvert = CurrencyIdConvert;
189 type AccountIdToMultiLocation = AccountIdToMultiLocation;
190 type SelfLocation = SelfLocation;
191 type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
192 type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;
193 type BaseXcmWeight = BaseXcmWeight;
194 type LocationInverter = LocationInverter<Ancestry>;
195 type MaxAssetsForTransfer = MaxAssetsForTransfer;
196 type MinXcmFee = ParachainMinFee;
197 type MultiLocationsFilter = Everything;
198 type ReserveProvider = AbsoluteReserveProvider;
199}
200 */
201
202parameter_type_with_key! {
203 pub ExistentialDeposits: |currency_id: CurrencyId| -> Balance {
204 match currency_id {
205 CurrencyId::NativeAssetId(symbol) => match symbol {
206 NativeCurrency::Here => 0,
207 NativeCurrency::Parent=> 0,
208 },
209 _ => 100_000
210 }
211 };
212}
213
214pub struct DustRemovalWhitelist;
215impl Contains<AccountId> for DustRemovalWhitelist {
216 fn contains(a: &AccountId) -> bool {
217 get_all_module_accounts().contains(a)
218 }
219}
220
221/*
222pub struct CurrencyIdConvert;
223impl Convert<AssetIds, Option<MultiLocation>> for CurrencyIdConvert {
224 fn convert(id: AssetIds) -> Option<MultiLocation> {
225 match id {
226 AssetIds::NativeAssetId(NativeCurrency::Here) => Some(MultiLocation::new(
227 1,
228 X1(Parachain(ParachainInfo::get().into())),
229 )),
230 AssetIds::NativeAssetId(NativeCurrency::Parent) => Some(MultiLocation::parent()),
231 AssetIds::ForeignAssetId(foreign_asset_id) => {
232 XcmForeignAssetIdMapping::<Runtime>::get_multi_location(foreign_asset_id)
233 }
234 }
235 }
236}
237impl Convert<MultiLocation, Option<CurrencyId>> for CurrencyIdConvert {
238 fn convert(location: MultiLocation) -> Option<CurrencyId> {
239 if location == MultiLocation::here()
240 || location == MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())))
241 {
242 return Some(AssetIds::NativeAssetId(NativeCurrency::Here));
243 }
244
245 if location == MultiLocation::parent() {
246 return Some(AssetIds::NativeAssetId(NativeCurrency::Parent));
247 }
248
249 if let Some(currency_id) =
250 XcmForeignAssetIdMapping::<Runtime>::get_currency_id(location.clone())
251 {
252 return Some(currency_id);
253 }
254
255 None
256 }
257}
258
259 */
260
261
262parameter_types! {
263 pub const BaseXcmWeight: Weight = 100_000_000; // TODO: recheck this
264 pub const MaxAssetsForTransfer: usize = 2;
265}
266
267parameter_types! {
268 pub const RelayLocation: MultiLocation = MultiLocation::parent();
269 pub const RelayNetwork: NetworkId = NetworkId::Polkadot;
270 pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();
271 pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();
272 pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));
273}
274
275parameter_type_with_key! {
276 pub ParachainMinFee: |_location: MultiLocation| -> Option<u128> {
277 Some(100_000_000)
278 };
279}
280
281pub fn get_all_module_accounts() -> Vec<AccountId> {
282 vec![TreasuryModuleId::get().into_account_truncating()]
283}
284
285pub struct AccountIdToMultiLocation;
286impl Convert<AccountId, MultiLocation> for AccountIdToMultiLocation {
287 fn convert(account: AccountId) -> MultiLocation {
288 X1(AccountId32 {
289 network: NetworkId::Any,
290 id: account.into(),
291 })
292 .into()
293 }
294}
295
modifiedruntime/unique/src/lib.rsdiffbeforeafterboth
35#[path = "../../common/mod.rs"]35#[path = "../../common/mod.rs"]
36mod runtime_common;36mod runtime_common;
37
38pub mod xcm_config;
3739
38pub use runtime_common::*;40pub use runtime_common::*;
3941
modifiedruntime/unique/src/xcm_config.rsdiffbeforeafterboth

no changes