• joe petrowski's avatar
    Unique Usernames in Identity Pallet (#2651) · d1f678c0
    joe petrowski authored
    
    
    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: default avatarLiam Aharon <[email protected]>
    Co-authored-by: default avatarGonçalo Pestana <[email protected]>
    Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
    Co-authored-by: default avatarDónal Murray <[email protected]>
    d1f678c0