-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
kusama: General Admin to send Location mapping #383
Changes from 3 commits
ad92061
dc0391f
c544bc2
c5dc122
8b4d0a7
2a586a5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
// Copyright (C) Parity Technologies (UK) Ltd. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
use crate::*; | ||
use frame_support::sp_runtime::traits::Dispatchable; | ||
use kusama_runtime::governance::pallet_custom_origins::Origin::GeneralAdmin as GeneralAdminOrigin; | ||
|
||
#[test] | ||
fn general_admin_add_registrar() { | ||
let registrar: AccountId = [1; 32].into(); | ||
Kusama::execute_with(|| { | ||
type Runtime = <Kusama as Chain>::Runtime; | ||
type RuntimeCall = <Kusama as Chain>::RuntimeCall; | ||
type RuntimeEvent = <Kusama as Chain>::RuntimeEvent; | ||
type RuntimeOrigin = <Kusama as Chain>::RuntimeOrigin; | ||
type PeopleCall = <PeopleKusama as Chain>::RuntimeCall; | ||
type PeopleRuntime = <PeopleKusama as Chain>::Runtime; | ||
|
||
let add_registrar_call = | ||
PeopleCall::Identity(pallet_identity::Call::<PeopleRuntime>::add_registrar { | ||
account: registrar.into(), | ||
}); | ||
|
||
let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::<Runtime>::send { | ||
dest: bx!(VersionedLocation::V4(Location::new(0, [Parachain(1004)]))), | ||
message: bx!(VersionedXcm::V4(Xcm(vec![ | ||
UnpaidExecution { weight_limit: Unlimited, check_origin: None }, | ||
Transact { | ||
origin_kind: OriginKind::Xcm, | ||
require_weight_at_most: Weight::from_parts(5_000_000_000, 500_000), | ||
call: add_registrar_call.encode().into(), | ||
} | ||
]))), | ||
}); | ||
|
||
let general_admin: RuntimeOrigin = GeneralAdminOrigin.into(); | ||
|
||
assert_ok!(xcm_message.dispatch(general_admin)); | ||
|
||
assert_expected_events!( | ||
Kusama, | ||
vec![ | ||
RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {}, | ||
] | ||
); | ||
}); | ||
|
||
PeopleKusama::execute_with(|| { | ||
type RuntimeEvent = <PeopleKusama as Chain>::RuntimeEvent; | ||
|
||
assert_expected_events!( | ||
PeopleKusama, | ||
vec![ | ||
RuntimeEvent::Identity(pallet_identity::Event::RegistrarAdded { .. }) => {}, | ||
RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {}, | ||
] | ||
); | ||
}); | ||
} | ||
|
||
#[test] | ||
fn relay_root_add_registrar() { | ||
let registrar: AccountId = [1; 32].into(); | ||
Kusama::execute_with(|| { | ||
type Runtime = <Kusama as Chain>::Runtime; | ||
type RuntimeCall = <Kusama as Chain>::RuntimeCall; | ||
type RuntimeEvent = <Kusama as Chain>::RuntimeEvent; | ||
type RuntimeOrigin = <Kusama as Chain>::RuntimeOrigin; | ||
type PeopleCall = <PeopleKusama as Chain>::RuntimeCall; | ||
type PeopleRuntime = <PeopleKusama as Chain>::Runtime; | ||
|
||
let add_registrar_call = | ||
PeopleCall::Identity(pallet_identity::Call::<PeopleRuntime>::add_registrar { | ||
account: registrar.into(), | ||
}); | ||
|
||
let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::<Runtime>::send { | ||
dest: bx!(VersionedLocation::V4(Location::new(0, [Parachain(1004)]))), | ||
message: bx!(VersionedXcm::V4(Xcm(vec![ | ||
UnpaidExecution { weight_limit: Unlimited, check_origin: None }, | ||
Transact { | ||
origin_kind: OriginKind::Superuser, | ||
require_weight_at_most: Weight::from_parts(5_000_000_000, 500_000), | ||
call: add_registrar_call.encode().into(), | ||
} | ||
]))), | ||
}); | ||
|
||
let root: RuntimeOrigin = RuntimeOrigin::root(); | ||
|
||
assert_ok!(xcm_message.dispatch(root)); | ||
|
||
assert_expected_events!( | ||
Kusama, | ||
vec![ | ||
RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {}, | ||
] | ||
); | ||
}); | ||
|
||
PeopleKusama::execute_with(|| { | ||
type RuntimeEvent = <PeopleKusama as Chain>::RuntimeEvent; | ||
|
||
assert_expected_events!( | ||
PeopleKusama, | ||
vec![ | ||
RuntimeEvent::Identity(pallet_identity::Event::RegistrarAdded { .. }) => {}, | ||
RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {}, | ||
] | ||
); | ||
}); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
// Copyright (C) Parity Technologies (UK) Ltd. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
use crate::*; | ||
use frame_support::sp_runtime::traits::Dispatchable; | ||
use polkadot_runtime::governance::pallet_custom_origins::Origin::GeneralAdmin as GeneralAdminOrigin; | ||
|
||
#[test] | ||
fn general_admin_add_registrar() { | ||
let registrar: AccountId = [1; 32].into(); | ||
Polkadot::execute_with(|| { | ||
type Runtime = <Polkadot as Chain>::Runtime; | ||
type RuntimeCall = <Polkadot as Chain>::RuntimeCall; | ||
type RuntimeEvent = <Polkadot as Chain>::RuntimeEvent; | ||
type RuntimeOrigin = <Polkadot as Chain>::RuntimeOrigin; | ||
type PeopleCall = <PeoplePolkadot as Chain>::RuntimeCall; | ||
type PeopleRuntime = <PeoplePolkadot as Chain>::Runtime; | ||
|
||
let add_registrar_call = | ||
PeopleCall::Identity(pallet_identity::Call::<PeopleRuntime>::add_registrar { | ||
account: registrar.into(), | ||
}); | ||
|
||
let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::<Runtime>::send { | ||
dest: bx!(VersionedLocation::V4(Location::new(0, [Parachain(1004)]))), | ||
message: bx!(VersionedXcm::V4(Xcm(vec![ | ||
UnpaidExecution { weight_limit: Unlimited, check_origin: None }, | ||
Transact { | ||
origin_kind: OriginKind::Xcm, | ||
require_weight_at_most: Weight::from_parts(5_000_000_000, 500_000), | ||
call: add_registrar_call.encode().into(), | ||
} | ||
]))), | ||
}); | ||
|
||
let general_admin: RuntimeOrigin = GeneralAdminOrigin.into(); | ||
|
||
assert_ok!(xcm_message.dispatch(general_admin)); | ||
|
||
assert_expected_events!( | ||
Polkadot, | ||
vec![ | ||
RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {}, | ||
] | ||
); | ||
}); | ||
|
||
PeoplePolkadot::execute_with(|| { | ||
type RuntimeEvent = <PeoplePolkadot as Chain>::RuntimeEvent; | ||
|
||
assert_expected_events!( | ||
PeoplePolkadot, | ||
vec![ | ||
RuntimeEvent::Identity(pallet_identity::Event::RegistrarAdded { .. }) => {}, | ||
RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {}, | ||
] | ||
); | ||
}); | ||
} | ||
|
||
#[test] | ||
fn relay_root_add_registrar() { | ||
let registrar: AccountId = [1; 32].into(); | ||
Polkadot::execute_with(|| { | ||
type Runtime = <Polkadot as Chain>::Runtime; | ||
type RuntimeCall = <Polkadot as Chain>::RuntimeCall; | ||
type RuntimeEvent = <Polkadot as Chain>::RuntimeEvent; | ||
type RuntimeOrigin = <Polkadot as Chain>::RuntimeOrigin; | ||
type PeopleCall = <PeoplePolkadot as Chain>::RuntimeCall; | ||
type PeopleRuntime = <PeoplePolkadot as Chain>::Runtime; | ||
|
||
let add_registrar_call = | ||
PeopleCall::Identity(pallet_identity::Call::<PeopleRuntime>::add_registrar { | ||
account: registrar.into(), | ||
}); | ||
|
||
let xcm_message = RuntimeCall::XcmPallet(pallet_xcm::Call::<Runtime>::send { | ||
dest: bx!(VersionedLocation::V4(Location::new(0, [Parachain(1004)]))), | ||
message: bx!(VersionedXcm::V4(Xcm(vec![ | ||
UnpaidExecution { weight_limit: Unlimited, check_origin: None }, | ||
Transact { | ||
origin_kind: OriginKind::Superuser, | ||
require_weight_at_most: Weight::from_parts(5_000_000_000, 500_000), | ||
call: add_registrar_call.encode().into(), | ||
} | ||
]))), | ||
}); | ||
|
||
let root: RuntimeOrigin = RuntimeOrigin::root(); | ||
|
||
assert_ok!(xcm_message.dispatch(root)); | ||
|
||
assert_expected_events!( | ||
Polkadot, | ||
vec![ | ||
RuntimeEvent::XcmPallet(pallet_xcm::Event::Sent { .. }) => {}, | ||
] | ||
); | ||
}); | ||
|
||
PeoplePolkadot::execute_with(|| { | ||
type RuntimeEvent = <PeoplePolkadot as Chain>::RuntimeEvent; | ||
|
||
assert_expected_events!( | ||
PeoplePolkadot, | ||
vec![ | ||
RuntimeEvent::Identity(pallet_identity::Event::RegistrarAdded { .. }) => {}, | ||
RuntimeEvent::MessageQueue(pallet_message_queue::Event::Processed { success: true, .. }) => {}, | ||
] | ||
); | ||
}); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,9 +17,9 @@ | |
//! XCM configurations for the Kusama runtime. | ||
|
||
use super::{ | ||
parachains_origin, AccountId, AllPalletsWithSystem, Balances, Dmp, Fellows, ParaId, Runtime, | ||
RuntimeCall, RuntimeEvent, RuntimeOrigin, StakingAdmin, TransactionByteFee, Treasury, | ||
WeightToFee, XcmPallet, | ||
parachains_origin, AccountId, AllPalletsWithSystem, Balances, Dmp, Fellows, GeneralAdmin, | ||
ParaId, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, StakingAdmin, TransactionByteFee, | ||
Treasury, WeightToFee, XcmPallet, | ||
}; | ||
use frame_support::{ | ||
parameter_types, | ||
|
@@ -234,6 +234,8 @@ parameter_types! { | |
pub const StakingAdminBodyId: BodyId = BodyId::Defense; | ||
// Fellows pluralistic body. | ||
pub const FellowsBodyId: BodyId = BodyId::Technical; | ||
// `GeneralAdmin` pluralistic body. | ||
pub const GeneralAdminBodyId: BodyId = BodyId::Administration; | ||
} | ||
|
||
/// Type to convert an `Origin` type value into a `Location` value which represents an interior | ||
|
@@ -250,9 +252,15 @@ pub type StakingAdminToPlurality = | |
/// Type to convert the Fellows origin to a Plurality `Location` value. | ||
pub type FellowsToPlurality = OriginToPluralityVoice<RuntimeOrigin, Fellows, FellowsBodyId>; | ||
|
||
/// Type to convert the `GeneralAdmin` origin to a Plurality `Location` value. | ||
pub type GeneralAdminToPlurality = | ||
OriginToPluralityVoice<RuntimeOrigin, GeneralAdmin, GeneralAdminBodyId>; | ||
|
||
/// Type to convert a pallet `Origin` type value into a `Location` value which represents an | ||
/// interior location of this chain for a destination chain. | ||
pub type LocalPalletOrSignedOriginToLocation = ( | ||
// GeneralAdmin origin to be used in XCM as a corresponding Plurality `Location` value. | ||
GeneralAdminToPlurality, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. orthogonal to this PR, but quick Q: Kusama is also missing There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I do not see a use case for it now. In Polkadot we need it to manage Fellowship Treasury on Collectives. |
||
// StakingAdmin origin to be used in XCM as a corresponding Plurality `Location` value. | ||
StakingAdminToPlurality, | ||
// Fellows origin to be used in XCM as a corresponding Plurality `Location` value. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit:
Deduplicate
general_admin_add_registrar
andrelay_root_add_registrar
tests code since they do the same thing with same result, just using different origins.Keep both tests, that just call helper fn with different origins.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I left one test function
relay_commands_add_registrar
with a loop over two origins.I personally do not like function abstraction when there is no clear (semantic) abstraction. This is often the case for tests. Frequently, we just move duplicated code into a function with a long name, which makes tests harder to read and maintain. I prefer copy-pasting over poor abstraction. Additionally, such abstractions introduce a variety of different styles to the codebase. I also prefer consistency in code style. A test framework is usually helpful in maintaining this consistency. For example, in my case, a data provider for a test function could be used.