mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 12:17:58 +00:00
Unique Usernames in Identity Pallet (#2651)
This PR allows _username authorities_ to issue unique usernames that correspond with an account. It also provides two-way lookup, that is from `AccountId` to a single, "primary" `Username` (alongside `Registration`) and multiple unique `Username`s to an `AccountId`. Key features: - Username Authorities added (and removed) via privileged origin. - Authorities have a `suffix` and an `allocation`. They can grant up to `allocation` usernames. Their `suffix` will be appended to the usernames that they issue. A suffix may be up to 7 characters long. - Users can ask an authority to grant them a username. This will take the form `myusername.suffix`. The entire name (including suffix) must be less than or equal to 32 alphanumeric characters. - Users can approve a username for themselves in one of two ways (that is, authorities cannot grant them arbitrarily): - Pre-sign the entire username (including suffix) with a secret key that corresponds to their `AccountId` (for keyed accounts, obviously); or - Accept the username after it has been granted by an authority (it will be queued until accepted) (for non-keyed accounts like pure proxies or multisigs). - The system does not require any funds or deposits. Users without an identity will be given a default one (presumably all fields set to `None`). If they update this info, they will need to place the normal storage deposit. - If a user does not have any username, their first one will be set as `Primary`, and their `AccountId` will map to that one. If they get subsequent usernames, they can choose which one to be their primary via `set_primary_username`. - There are some state cleanup functions to remove expired usernames that have not been accepted and dangling usernames whose owners have called `clear_identity`. TODO: - [x] Add migration to runtimes - [x] Probably do off-chain migration into People Chain genesis - [x] Address a few TODO questions in code (please review) --------- Co-authored-by: Liam Aharon <liam.aharon@hotmail.com> Co-authored-by: Gonçalo Pestana <g6pestana@gmail.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Dónal Murray <donal.murray@parity.io>
This commit is contained in:
@@ -64,7 +64,7 @@ impl IdentityVerifier<AccountId> for AllianceIdentityVerifier {
|
||||
fn has_good_judgement(who: &AccountId) -> bool {
|
||||
use pallet_identity::Judgement;
|
||||
crate::Identity::identity(who)
|
||||
.map(|registration| registration.judgements)
|
||||
.map(|(registration, _)| registration.judgements)
|
||||
.map_or(false, |judgements| {
|
||||
judgements
|
||||
.iter()
|
||||
|
||||
@@ -1500,6 +1500,12 @@ impl pallet_identity::Config for Runtime {
|
||||
type Slashed = Treasury;
|
||||
type ForceOrigin = EnsureRootOrHalfCouncil;
|
||||
type RegistrarOrigin = EnsureRootOrHalfCouncil;
|
||||
type OffchainSignature = Signature;
|
||||
type SigningPublicKey = <Signature as traits::Verify>::Signer;
|
||||
type UsernameAuthorityOrigin = EnsureRoot<Self::AccountId>;
|
||||
type PendingUsernameExpiration = ConstU32<{ 7 * DAYS }>;
|
||||
type MaxSuffixLength = ConstU32<7>;
|
||||
type MaxUsernameLength = ConstU32<32>;
|
||||
type WeightInfo = pallet_identity::weights::SubstrateWeight<Runtime>;
|
||||
}
|
||||
|
||||
@@ -2208,6 +2214,9 @@ pub type Executive = frame_executive::Executive<
|
||||
Migrations,
|
||||
>;
|
||||
|
||||
// We don't have a limit in the Relay Chain.
|
||||
const IDENTITY_MIGRATION_KEY_LIMIT: u64 = u64::MAX;
|
||||
|
||||
// All migrations executed on runtime upgrade as a nested tuple of types implementing
|
||||
// `OnRuntimeUpgrade`. Note: These are examples and do not need to be run directly
|
||||
// after the genesis block.
|
||||
@@ -2215,6 +2224,7 @@ type Migrations = (
|
||||
pallet_nomination_pools::migration::versioned::V6ToV7<Runtime>,
|
||||
pallet_alliance::migration::Migration<Runtime>,
|
||||
pallet_contracts::Migration<Runtime>,
|
||||
pallet_identity::migration::versioned::V0ToV1<Runtime, IDENTITY_MIGRATION_KEY_LIMIT>,
|
||||
);
|
||||
|
||||
type EventRecord = frame_system::EventRecord<
|
||||
|
||||
Reference in New Issue
Block a user