mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 22:11:02 +00:00
Rococo Identity Migration Part 2 + Bug Fix (#2946)
Order: - [x] Start People Chain - [RPC node](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frococo-people-rpc.polkadot.io#/explorer) - [x] Upgrade Rococo Relay (`EnsureRoot` -> `EnsureSigned`) (v1,006,002) - Done [here](https://rococo.subscan.io/extrinsic/0xef07e0f9dbb2b9e829305f132e6ce45d291239286e409177e20895e6687daa6c) - [x] Migrate all identities - Done, see extrinsics from [this account](https://rococo.subscan.io/account/5FyNYrBwndvBttTkGUqGGCRAXtBH4Mh8xELDaxaFywTsjDKb) - [x] Upgrade Rococo People (remove call filter) (v1,006,002) - Authorized [here](https://rococo.subscan.io/extrinsic/0xedf6a80229bd411b7ed8d3a489a767b0f773bed5c49239987a294c293a35b98b) With added: - [x] Upgrade Rococo People to fix `poke_deposit` bug (v1,006,001) - Authorized [here](https://rococo.subscan.io/extrinsic/0xd1dc3cd6e8274bd0196f8d9f13ed09f6e9c76e6a40f9786a1629f4cb22cf948d) Note: It's also possible to remove the Identity Migrator pallet from both the Relay Chain and the parachain at this time. I will leave them in for now to preserve the test cases until we run them on Kusama/Polkadot. We will also want a follow up to remove all Identity-related state from the Relay Chain.
This commit is contained in:
+1
-1
@@ -291,7 +291,7 @@ fn assert_reap_id_relay(total_deposit: Balance, id: &Identity) {
|
|||||||
assert_eq!(reserved_balance, total_deposit);
|
assert_eq!(reserved_balance, total_deposit);
|
||||||
|
|
||||||
assert_ok!(RococoIdentityMigrator::reap_identity(
|
assert_ok!(RococoIdentityMigrator::reap_identity(
|
||||||
RococoOrigin::root(),
|
RococoOrigin::signed(RococoRelaySender::get()),
|
||||||
RococoRelaySender::get()
|
RococoRelaySender::get()
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|||||||
@@ -30,8 +30,7 @@ use frame_support::{
|
|||||||
genesis_builder_helper::{build_config, create_default_config},
|
genesis_builder_helper::{build_config, create_default_config},
|
||||||
parameter_types,
|
parameter_types,
|
||||||
traits::{
|
traits::{
|
||||||
ConstBool, ConstU32, ConstU64, ConstU8, Contains, EitherOfDiverse, EverythingBut,
|
ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Everything, TransformOrigin,
|
||||||
TransformOrigin,
|
|
||||||
},
|
},
|
||||||
weights::{ConstantMultiplier, Weight},
|
weights::{ConstantMultiplier, Weight},
|
||||||
PalletId,
|
PalletId,
|
||||||
@@ -124,7 +123,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|||||||
spec_name: create_runtime_str!("people-rococo"),
|
spec_name: create_runtime_str!("people-rococo"),
|
||||||
impl_name: create_runtime_str!("people-rococo"),
|
impl_name: create_runtime_str!("people-rococo"),
|
||||||
authoring_version: 1,
|
authoring_version: 1,
|
||||||
spec_version: 1_006_000,
|
spec_version: 1_006_002,
|
||||||
impl_version: 0,
|
impl_version: 0,
|
||||||
apis: RUNTIME_API_VERSIONS,
|
apis: RUNTIME_API_VERSIONS,
|
||||||
transaction_version: 0,
|
transaction_version: 0,
|
||||||
@@ -162,16 +161,9 @@ parameter_types! {
|
|||||||
pub const SS58Prefix: u8 = 42;
|
pub const SS58Prefix: u8 = 42;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct IdentityCalls;
|
|
||||||
impl Contains<RuntimeCall> for IdentityCalls {
|
|
||||||
fn contains(c: &RuntimeCall) -> bool {
|
|
||||||
matches!(c, RuntimeCall::Identity(_))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive_impl(frame_system::config_preludes::ParaChainDefaultConfig as frame_system::DefaultConfig)]
|
#[derive_impl(frame_system::config_preludes::ParaChainDefaultConfig as frame_system::DefaultConfig)]
|
||||||
impl frame_system::Config for Runtime {
|
impl frame_system::Config for Runtime {
|
||||||
type BaseCallFilter = EverythingBut<IdentityCalls>;
|
type BaseCallFilter = Everything;
|
||||||
type BlockWeights = RuntimeBlockWeights;
|
type BlockWeights = RuntimeBlockWeights;
|
||||||
type BlockLength = RuntimeBlockLength;
|
type BlockLength = RuntimeBlockLength;
|
||||||
type AccountId = AccountId;
|
type AccountId = AccountId;
|
||||||
|
|||||||
@@ -176,13 +176,17 @@ impl Contains<RuntimeCall> for SafeCallFilter {
|
|||||||
|
|
||||||
matches!(
|
matches!(
|
||||||
call,
|
call,
|
||||||
RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) |
|
RuntimeCall::PolkadotXcm(
|
||||||
RuntimeCall::System(
|
pallet_xcm::Call::force_xcm_version { .. } |
|
||||||
frame_system::Call::set_heap_pages { .. } |
|
pallet_xcm::Call::force_default_xcm_version { .. }
|
||||||
frame_system::Call::set_code { .. } |
|
) | RuntimeCall::System(
|
||||||
frame_system::Call::set_code_without_checks { .. } |
|
frame_system::Call::set_heap_pages { .. } |
|
||||||
frame_system::Call::kill_prefix { .. },
|
frame_system::Call::set_code { .. } |
|
||||||
) | RuntimeCall::ParachainSystem(..) |
|
frame_system::Call::set_code_without_checks { .. } |
|
||||||
|
frame_system::Call::authorize_upgrade { .. } |
|
||||||
|
frame_system::Call::authorize_upgrade_without_checks { .. } |
|
||||||
|
frame_system::Call::kill_prefix { .. },
|
||||||
|
) | RuntimeCall::ParachainSystem(..) |
|
||||||
RuntimeCall::Timestamp(..) |
|
RuntimeCall::Timestamp(..) |
|
||||||
RuntimeCall::Balances(..) |
|
RuntimeCall::Balances(..) |
|
||||||
RuntimeCall::CollatorSelection(
|
RuntimeCall::CollatorSelection(
|
||||||
|
|||||||
@@ -183,13 +183,17 @@ impl Contains<RuntimeCall> for SafeCallFilter {
|
|||||||
|
|
||||||
matches!(
|
matches!(
|
||||||
call,
|
call,
|
||||||
RuntimeCall::PolkadotXcm(pallet_xcm::Call::force_xcm_version { .. }) |
|
RuntimeCall::PolkadotXcm(
|
||||||
RuntimeCall::System(
|
pallet_xcm::Call::force_xcm_version { .. } |
|
||||||
frame_system::Call::set_heap_pages { .. } |
|
pallet_xcm::Call::force_default_xcm_version { .. }
|
||||||
frame_system::Call::set_code { .. } |
|
) | RuntimeCall::System(
|
||||||
frame_system::Call::set_code_without_checks { .. } |
|
frame_system::Call::set_heap_pages { .. } |
|
||||||
frame_system::Call::kill_prefix { .. },
|
frame_system::Call::set_code { .. } |
|
||||||
) | RuntimeCall::ParachainSystem(..) |
|
frame_system::Call::set_code_without_checks { .. } |
|
||||||
|
frame_system::Call::authorize_upgrade { .. } |
|
||||||
|
frame_system::Call::authorize_upgrade_without_checks { .. } |
|
||||||
|
frame_system::Call::kill_prefix { .. },
|
||||||
|
) | RuntimeCall::ParachainSystem(..) |
|
||||||
RuntimeCall::Timestamp(..) |
|
RuntimeCall::Timestamp(..) |
|
||||||
RuntimeCall::Balances(..) |
|
RuntimeCall::Balances(..) |
|
||||||
RuntimeCall::CollatorSelection(
|
RuntimeCall::CollatorSelection(
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ use frame_support::{
|
|||||||
weights::{ConstantMultiplier, WeightMeter},
|
weights::{ConstantMultiplier, WeightMeter},
|
||||||
PalletId,
|
PalletId,
|
||||||
};
|
};
|
||||||
use frame_system::EnsureRoot;
|
use frame_system::{EnsureRoot, EnsureSigned};
|
||||||
use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId};
|
use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId};
|
||||||
use pallet_identity::legacy::IdentityInfo;
|
use pallet_identity::legacy::IdentityInfo;
|
||||||
use pallet_session::historical as session_historical;
|
use pallet_session::historical as session_historical;
|
||||||
@@ -150,7 +150,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|||||||
spec_name: create_runtime_str!("rococo"),
|
spec_name: create_runtime_str!("rococo"),
|
||||||
impl_name: create_runtime_str!("parity-rococo-v2.0"),
|
impl_name: create_runtime_str!("parity-rococo-v2.0"),
|
||||||
authoring_version: 0,
|
authoring_version: 0,
|
||||||
spec_version: 1_006_001,
|
spec_version: 1_006_002,
|
||||||
impl_version: 0,
|
impl_version: 0,
|
||||||
apis: RUNTIME_API_VERSIONS,
|
apis: RUNTIME_API_VERSIONS,
|
||||||
transaction_version: 24,
|
transaction_version: 24,
|
||||||
@@ -1142,8 +1142,7 @@ impl auctions::Config for Runtime {
|
|||||||
|
|
||||||
impl identity_migrator::Config for Runtime {
|
impl identity_migrator::Config for Runtime {
|
||||||
type RuntimeEvent = RuntimeEvent;
|
type RuntimeEvent = RuntimeEvent;
|
||||||
// To be changed to `EnsureSigned` once there is a People Chain to migrate to.
|
type Reaper = EnsureSigned<AccountId>;
|
||||||
type Reaper = EnsureRoot<AccountId>;
|
|
||||||
type ReapIdentityHandler = ToParachainIdentityReaper<Runtime, Self::AccountId>;
|
type ReapIdentityHandler = ToParachainIdentityReaper<Runtime, Self::AccountId>;
|
||||||
type WeightInfo = weights::runtime_common_identity_migrator::WeightInfo<Runtime>;
|
type WeightInfo = weights::runtime_common_identity_migrator::WeightInfo<Runtime>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1395,16 +1395,21 @@ impl<T: Config> Pallet<T> {
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Subs Deposit
|
let new_subs_deposit = if SubsOf::<T>::contains_key(&target) {
|
||||||
let new_subs_deposit = SubsOf::<T>::try_mutate(
|
SubsOf::<T>::try_mutate(
|
||||||
&target,
|
&target,
|
||||||
|(current_subs_deposit, subs_of)| -> Result<BalanceOf<T>, DispatchError> {
|
|(current_subs_deposit, subs_of)| -> Result<BalanceOf<T>, DispatchError> {
|
||||||
let new_subs_deposit = Self::subs_deposit(subs_of.len() as u32);
|
let new_subs_deposit = Self::subs_deposit(subs_of.len() as u32);
|
||||||
Self::rejig_deposit(&target, *current_subs_deposit, new_subs_deposit)?;
|
Self::rejig_deposit(&target, *current_subs_deposit, new_subs_deposit)?;
|
||||||
*current_subs_deposit = new_subs_deposit;
|
*current_subs_deposit = new_subs_deposit;
|
||||||
Ok(new_subs_deposit)
|
Ok(new_subs_deposit)
|
||||||
},
|
},
|
||||||
)?;
|
)?
|
||||||
|
} else {
|
||||||
|
// If the item doesn't exist, there is no "old" deposit, and the new one is zero, so no
|
||||||
|
// need to call rejig, it'd just be zero -> zero.
|
||||||
|
Zero::zero()
|
||||||
|
};
|
||||||
Ok((new_id_deposit, new_subs_deposit))
|
Ok((new_id_deposit, new_subs_deposit))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -952,6 +952,57 @@ fn poke_deposit_works() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn poke_deposit_does_not_insert_new_subs_storage() {
|
||||||
|
new_test_ext().execute_with(|| {
|
||||||
|
let [_, _, _, _, ten, _, _, _] = accounts();
|
||||||
|
let ten_info = infoof_ten();
|
||||||
|
// Set a custom registration with 0 deposit
|
||||||
|
IdentityOf::<Test>::insert::<
|
||||||
|
_,
|
||||||
|
(
|
||||||
|
Registration<u64, MaxRegistrars, IdentityInfo<MaxAdditionalFields>>,
|
||||||
|
Option<Username<Test>>,
|
||||||
|
),
|
||||||
|
>(
|
||||||
|
&ten,
|
||||||
|
(
|
||||||
|
Registration {
|
||||||
|
judgements: Default::default(),
|
||||||
|
deposit: Zero::zero(),
|
||||||
|
info: ten_info.clone(),
|
||||||
|
},
|
||||||
|
None::<Username<Test>>,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
assert!(Identity::identity(ten.clone()).is_some());
|
||||||
|
|
||||||
|
// Balance is free
|
||||||
|
assert_eq!(Balances::free_balance(ten.clone()), 1000);
|
||||||
|
|
||||||
|
// poke
|
||||||
|
assert_ok!(Identity::poke_deposit(&ten));
|
||||||
|
|
||||||
|
// free balance reduced correctly
|
||||||
|
let id_deposit = id_deposit(&ten_info);
|
||||||
|
assert_eq!(Balances::free_balance(ten.clone()), 1000 - id_deposit);
|
||||||
|
// new registration deposit is 10
|
||||||
|
assert_eq!(
|
||||||
|
Identity::identity(&ten),
|
||||||
|
Some((
|
||||||
|
Registration {
|
||||||
|
judgements: Default::default(),
|
||||||
|
deposit: id_deposit,
|
||||||
|
info: infoof_ten()
|
||||||
|
},
|
||||||
|
None
|
||||||
|
))
|
||||||
|
);
|
||||||
|
// No new subs storage item.
|
||||||
|
assert!(!SubsOf::<Test>::contains_key(&ten));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn adding_and_removing_authorities_should_work() {
|
fn adding_and_removing_authorities_should_work() {
|
||||||
new_test_ext().execute_with(|| {
|
new_test_ext().execute_with(|| {
|
||||||
|
|||||||
Reference in New Issue
Block a user