Skip to content
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

[Identity] Decouple usernames from identities #5554

Merged
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
288d351
WIP username refactor
georgepisaltu Aug 23, 2024
06f8472
Minor fixes
georgepisaltu Aug 26, 2024
ebdd61d
Fix test compilation
georgepisaltu Aug 26, 2024
e42fb1b
Fix a couple of tests
georgepisaltu Aug 26, 2024
cfa7406
All tests pass
georgepisaltu Aug 26, 2024
7d351ae
Add tests related to username deletion
georgepisaltu Aug 27, 2024
5119afe
Fix tests for accepting usernames
georgepisaltu Aug 27, 2024
6b64952
Add the rest of unit tests
georgepisaltu Aug 27, 2024
083b168
Fix benches for new changes to usernames
georgepisaltu Aug 28, 2024
6269619
Add initial migration code
georgepisaltu Aug 28, 2024
8e326af
Finish writing migration code
georgepisaltu Aug 29, 2024
4b3ee47
Add benchmarked weight for migration steps
georgepisaltu Aug 29, 2024
987fc4e
WIP fix test
georgepisaltu Aug 29, 2024
831c556
WIP some other stuff
georgepisaltu Aug 30, 2024
f28afed
WIP test almost fixed
georgepisaltu Aug 30, 2024
34611fb
Fix first part of migration
georgepisaltu Aug 30, 2024
ac22ee8
Fix compilation fail
georgepisaltu Aug 30, 2024
717439a
Fix tests
georgepisaltu Aug 30, 2024
2736a05
Finish migration
georgepisaltu Aug 30, 2024
db04e86
Get rid of benchmarks
georgepisaltu Sep 2, 2024
040cd62
Some renames
georgepisaltu Sep 2, 2024
36b474e
Update docs
georgepisaltu Sep 2, 2024
c33ff74
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Sep 2, 2024
7c5193a
Small refactoring
georgepisaltu Sep 4, 2024
3c0beaa
Change unbinding username to store expiry
georgepisaltu Sep 4, 2024
494b521
Fix various configs
georgepisaltu Sep 4, 2024
f697ad8
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Sep 4, 2024
0d6fdd7
Fix `IdentityVerifier` impls
georgepisaltu Sep 4, 2024
ec16e56
Update readme
georgepisaltu Sep 5, 2024
7dec7be
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Sep 5, 2024
4cf38d1
Fix compilation in identity migrator
georgepisaltu Sep 5, 2024
23c353b
Reintroduce benchmarks for migration
georgepisaltu Sep 10, 2024
1035f6f
Refactor storage alias types
georgepisaltu Sep 10, 2024
448c034
Add dummy weights
georgepisaltu Sep 10, 2024
0acaffd
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Sep 10, 2024
35bcc68
Small refactor
georgepisaltu Sep 11, 2024
54c67b6
Add prdoc
georgepisaltu Sep 11, 2024
7a33cd4
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Sep 11, 2024
7a9d48c
Enable migration
georgepisaltu Sep 11, 2024
4acddb0
Fix compilation
georgepisaltu Sep 11, 2024
a49211e
Manually set the storage version
georgepisaltu Sep 11, 2024
e44d6d2
Fix bench compile
georgepisaltu Sep 11, 2024
bb0153c
Actually enable MBMs for omitted runtimes
georgepisaltu Sep 12, 2024
b39175f
Merge branch 'master' into identity-username-refactor
Ank4n Sep 13, 2024
af85fc7
Remove obsolete dangling username call
georgepisaltu Sep 12, 2024
7fe2d82
Update docs
georgepisaltu Sep 16, 2024
c3d22fe
Truncate keys
georgepisaltu Sep 16, 2024
112d870
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Sep 26, 2024
a11ef4a
Add try runtime checks
georgepisaltu Sep 30, 2024
976e0ff
Fix docs
georgepisaltu Sep 30, 2024
a3ed0b1
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Sep 30, 2024
f31fdd6
Merge remote-tracking branch 'upstream/master' into identity-username…
georgepisaltu Oct 29, 2024
ae07a64
Update prdoc
georgepisaltu Oct 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions cumulus/parachains/runtimes/people/people-rococo/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ pallet-authorship = { workspace = true }
pallet-balances = { workspace = true }
pallet-identity = { workspace = true }
pallet-message-queue = { workspace = true }
pallet-migrations = { workspace = true }
pallet-multisig = { workspace = true }
pallet-proxy = { workspace = true }
pallet-session = { workspace = true }
Expand Down Expand Up @@ -104,6 +105,7 @@ std = [
"pallet-collator-selection/std",
"pallet-identity/std",
"pallet-message-queue/std",
"pallet-migrations/std",
"pallet-multisig/std",
"pallet-proxy/std",
"pallet-session/std",
Expand Down Expand Up @@ -154,6 +156,7 @@ runtime-benchmarks = [
"pallet-collator-selection/runtime-benchmarks",
"pallet-identity/runtime-benchmarks",
"pallet-message-queue/runtime-benchmarks",
"pallet-migrations/runtime-benchmarks",
"pallet-multisig/runtime-benchmarks",
"pallet-proxy/runtime-benchmarks",
"pallet-timestamp/runtime-benchmarks",
Expand Down Expand Up @@ -184,6 +187,7 @@ try-runtime = [
"pallet-collator-selection/try-runtime",
"pallet-identity/try-runtime",
"pallet-message-queue/try-runtime",
"pallet-migrations/try-runtime",
"pallet-multisig/try-runtime",
"pallet-proxy/try-runtime",
"pallet-session/try-runtime",
Expand Down
24 changes: 24 additions & 0 deletions cumulus/parachains/runtimes/people/people-rococo/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ impl frame_system::Config for Runtime {
type SS58Prefix = SS58Prefix;
type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;
type MaxConsumers = ConstU32<16>;
type MultiBlockMigrator = MultiBlockMigrations;
}

impl pallet_timestamp::Config for Runtime {
Expand Down Expand Up @@ -531,6 +532,25 @@ impl identity_migrator::Config for Runtime {
type WeightInfo = weights::polkadot_runtime_common_identity_migrator::WeightInfo<Runtime>;
}

parameter_types! {
pub MbmServiceWeight: Weight = Perbill::from_percent(80) * RuntimeBlockWeights::get().max_block;
}

impl pallet_migrations::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
#[cfg(not(feature = "runtime-benchmarks"))]
type Migrations = pallet_identity::migration::v2::LazyMigrationV1ToV2<Runtime>;
// Benchmarks need mocked migrations to guarantee that they succeed.
#[cfg(feature = "runtime-benchmarks")]
type Migrations = pallet_migrations::mock_helpers::MockedMigrations;
type CursorMaxLen = ConstU32<65_536>;
type IdentifierMaxLen = ConstU32<256>;
type MigrationStatusHandler = ();
type FailedMigrationHandler = frame_support::migrations::FreezeChainOnFailedMigration;
type MaxServiceWeight = MbmServiceWeight;
type WeightInfo = weights::pallet_migrations::WeightInfo<Runtime>;
}
gui1117 marked this conversation as resolved.
Show resolved Hide resolved

// Create the runtime by composing the FRAME pallets that were previously configured.
construct_runtime!(
pub enum Runtime
Expand Down Expand Up @@ -566,6 +586,9 @@ construct_runtime!(
// The main stage.
Identity: pallet_identity = 50,

// Migrations pallet
MultiBlockMigrations: pallet_migrations = 98,

// To migrate deposits
IdentityMigrator: identity_migrator = 248,
}
Expand All @@ -584,6 +607,7 @@ mod benches {
[pallet_session, SessionBench::<Runtime>]
[pallet_utility, Utility]
[pallet_timestamp, Timestamp]
[pallet_migrations, MultiBlockMigrations]
// Polkadot
[polkadot_runtime_common::identity_migrator, IdentityMigrator]
// Cumulus
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ parameter_types! {
// 17 | Min size without `IdentityInfo` (accounted for in byte deposit)
pub const BasicDeposit: Balance = deposit(1, 17);
pub const ByteDeposit: Balance = deposit(0, 1);
pub const UsernameDeposit: Balance = deposit(0, 32);
pub const SubAccountDeposit: Balance = deposit(1, 53);
pub RelayTreasuryAccount: AccountId =
parachains_common::TREASURY_PALLET_ID.into_account_truncating();
Expand All @@ -46,6 +47,7 @@ impl pallet_identity::Config for Runtime {
type Currency = Balances;
type BasicDeposit = BasicDeposit;
type ByteDeposit = ByteDeposit;
type UsernameDeposit = UsernameDeposit;
type SubAccountDeposit = SubAccountDeposit;
type MaxSubAccounts = ConstU32<100>;
type IdentityInformation = IdentityInfo;
Expand All @@ -57,6 +59,7 @@ impl pallet_identity::Config for Runtime {
type SigningPublicKey = <Signature as Verify>::Signer;
type UsernameAuthorityOrigin = EnsureRoot<Self::AccountId>;
type PendingUsernameExpiration = ConstU32<{ 7 * DAYS }>;
type UsernameGracePeriod = ConstU32<{ 3 * DAYS }>;
type MaxSuffixLength = ConstU32<7>;
type MaxUsernameLength = ConstU32<32>;
type WeightInfo = weights::pallet_identity::WeightInfo<Runtime>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ pub mod pallet_balances;
pub mod pallet_collator_selection;
pub mod pallet_identity;
pub mod pallet_message_queue;
pub mod pallet_migrations;
pub mod pallet_multisig;
pub mod pallet_proxy;
pub mod pallet_session;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
/// Proof: `Identity::AccountOfUsername` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Identity::IdentityOf` (r:1 w:1)
/// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`)
fn set_username_for() -> Weight {
fn set_username_for(_p: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `80`
// Estimated: `11037`
Expand Down Expand Up @@ -368,7 +368,7 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
}
/// Storage: `Identity::PendingUsernames` (r:1 w:1)
/// Proof: `Identity::PendingUsernames` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
fn remove_expired_approval() -> Weight {
fn remove_expired_approval(_p: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `106`
// Estimated: `3542`
Expand All @@ -392,18 +392,31 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
.saturating_add(T::DbWeight::get().reads(2))
.saturating_add(T::DbWeight::get().writes(1))
}
/// Storage: `Identity::AccountOfUsername` (r:1 w:1)
/// Proof: `Identity::AccountOfUsername` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Identity::IdentityOf` (r:1 w:0)
/// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`)
fn remove_dangling_username() -> Weight {
// Proof Size summary in bytes:
// Measured: `126`
// Estimated: `11037`
// Minimum execution time: 15_997_000 picoseconds.
Weight::from_parts(15_997_000, 0)
.saturating_add(Weight::from_parts(0, 11037))
.saturating_add(T::DbWeight::get().reads(2))
.saturating_add(T::DbWeight::get().writes(1))
fn unbind_username() -> Weight {
Weight::zero()
}
fn remove_username() -> Weight {
Weight::zero()
}
fn kill_username(_p: u32, ) -> Weight {
Weight::zero()
}
fn migration_v2_authority_step() -> Weight {
Weight::zero()
}
fn migration_v2_username_step() -> Weight {
Weight::zero()
}
fn migration_v2_identity_step() -> Weight {
Weight::zero()
}
fn migration_v2_pending_username_step() -> Weight {
Weight::zero()
}
fn migration_v2_cleanup_authority_step() -> Weight {
Weight::zero()
}
fn migration_v2_cleanup_username_step() -> Weight {
Weight::zero()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
// 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.

// Need to rerun!

#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
#![allow(missing_docs)]

use frame_support::{traits::Get, weights::Weight};
use core::marker::PhantomData;

/// Weight functions for `pallet_migrations`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_migrations::WeightInfo for WeightInfo<T> {
/// Storage: `MultiBlockMigrations::Cursor` (r:1 w:1)
/// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`)
/// Storage: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Proof: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
fn onboard_new_mbms() -> Weight {
// Proof Size summary in bytes:
// Measured: `276`
// Estimated: `67035`
// Minimum execution time: 7_762_000 picoseconds.
Weight::from_parts(8_100_000, 67035)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `MultiBlockMigrations::Cursor` (r:1 w:0)
/// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`)
fn progress_mbms_none() -> Weight {
// Proof Size summary in bytes:
// Measured: `142`
// Estimated: `67035`
// Minimum execution time: 2_077_000 picoseconds.
Weight::from_parts(2_138_000, 67035)
.saturating_add(T::DbWeight::get().reads(1_u64))
}
/// Storage: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Proof: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Storage: `MultiBlockMigrations::Cursor` (r:0 w:1)
/// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`)
fn exec_migration_completed() -> Weight {
// Proof Size summary in bytes:
// Measured: `134`
// Estimated: `3599`
// Minimum execution time: 5_868_000 picoseconds.
Weight::from_parts(6_143_000, 3599)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Proof: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Storage: `MultiBlockMigrations::Historic` (r:1 w:0)
/// Proof: `MultiBlockMigrations::Historic` (`max_values`: None, `max_size`: Some(266), added: 2741, mode: `MaxEncodedLen`)
fn exec_migration_skipped_historic() -> Weight {
// Proof Size summary in bytes:
// Measured: `330`
// Estimated: `3795`
// Minimum execution time: 10_283_000 picoseconds.
Weight::from_parts(10_964_000, 3795)
.saturating_add(T::DbWeight::get().reads(2_u64))
}
/// Storage: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Proof: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Storage: `MultiBlockMigrations::Historic` (r:1 w:0)
/// Proof: `MultiBlockMigrations::Historic` (`max_values`: None, `max_size`: Some(266), added: 2741, mode: `MaxEncodedLen`)
fn exec_migration_advance() -> Weight {
// Proof Size summary in bytes:
// Measured: `276`
// Estimated: `3741`
// Minimum execution time: 9_900_000 picoseconds.
Weight::from_parts(10_396_000, 3741)
.saturating_add(T::DbWeight::get().reads(2_u64))
}
/// Storage: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Proof: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Storage: `MultiBlockMigrations::Historic` (r:1 w:1)
/// Proof: `MultiBlockMigrations::Historic` (`max_values`: None, `max_size`: Some(266), added: 2741, mode: `MaxEncodedLen`)
fn exec_migration_complete() -> Weight {
// Proof Size summary in bytes:
// Measured: `276`
// Estimated: `3741`
// Minimum execution time: 11_411_000 picoseconds.
Weight::from_parts(11_956_000, 3741)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Proof: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Storage: `MultiBlockMigrations::Historic` (r:1 w:0)
/// Proof: `MultiBlockMigrations::Historic` (`max_values`: None, `max_size`: Some(266), added: 2741, mode: `MaxEncodedLen`)
/// Storage: `MultiBlockMigrations::Cursor` (r:0 w:1)
/// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`)
fn exec_migration_fail() -> Weight {
// Proof Size summary in bytes:
// Measured: `276`
// Estimated: `3741`
// Minimum execution time: 12_398_000 picoseconds.
Weight::from_parts(12_910_000, 3741)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
fn on_init_loop() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 166_000 picoseconds.
Weight::from_parts(193_000, 0)
}
/// Storage: `MultiBlockMigrations::Cursor` (r:0 w:1)
/// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`)
fn force_set_cursor() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 2_686_000 picoseconds.
Weight::from_parts(2_859_000, 0)
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `MultiBlockMigrations::Cursor` (r:0 w:1)
/// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`)
fn force_set_active_cursor() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 3_070_000 picoseconds.
Weight::from_parts(3_250_000, 0)
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `MultiBlockMigrations::Cursor` (r:1 w:0)
/// Proof: `MultiBlockMigrations::Cursor` (`max_values`: Some(1), `max_size`: Some(65550), added: 66045, mode: `MaxEncodedLen`)
/// Storage: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
/// Proof: UNKNOWN KEY `0x583359fe0e84d953a9dd84e8addb08a5` (r:1 w:0)
fn force_onboard_mbms() -> Weight {
// Proof Size summary in bytes:
// Measured: `251`
// Estimated: `67035`
// Minimum execution time: 5_901_000 picoseconds.
Weight::from_parts(6_320_000, 67035)
.saturating_add(T::DbWeight::get().reads(2_u64))
}
/// Storage: `MultiBlockMigrations::Historic` (r:256 w:256)
/// Proof: `MultiBlockMigrations::Historic` (`max_values`: None, `max_size`: Some(266), added: 2741, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 256]`.
fn clear_historic(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1122 + n * (271 ±0)`
// Estimated: `3834 + n * (2740 ±0)`
// Minimum execution time: 15_952_000 picoseconds.
Weight::from_parts(14_358_665, 3834)
// Standard Error: 3_358
.saturating_add(Weight::from_parts(1_323_674, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2740).saturating_mul(n.into()))
}
}
Loading
Loading