-
Notifications
You must be signed in to change notification settings - Fork 4
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
new username & avatar spec #42
base: master
Are you sure you want to change the base?
Conversation
- A user MUST be able to set a local username for a profile | ||
- A local username MUST be visible only to the user who set it | ||
- If profile has a local set username set then it MUST show the original user name (e.g if the local username is 'intimitating guy' and the original username is 'Jotaro' then `intimiating guy (Jotaro)`) | ||
- If a profile has a registered ENS username, then it MUST end in .eth |
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.
how does this work with stateofus domains vs ens domains?
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.
@iurimatias stateofus domains are displayed as [ENS name].stateofus.eth
ENS domains from elsewhere should be displayed as [ENS name].eth
|
||
## Functional Requirements | ||
|
||
**Profile Emblems:** |
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.
what is the 'default' state, for a new profile, is it just no emblems?
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.
Yes, no emblems. See
from https://www.figma.com/file/IPpvkpDWabBKJTeo6bFop0/Kuba%E2%8E%9CDesktop?node-id=1837%3A335126
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.
|
||
**Profile avatar** | ||
|
||
- If a profile does not have a profile photo set it MUST use a 2 letter avatar |
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.
what determines those 2 letters?
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.
@iurimatias the user - those two letters are always the first two letters of the username the user enters
@John-44 when should profiles show the public key? in the design sometimes they show sometimes not, but it's unclear why ----- reply ----- The designs are supposed to show the public key being displayed for all users who don't have ENS usernames. Also the designs are supposed to show the identicon ring being displayed around the avatar for all users who don't have ENS usernames. e.g. if a user's identicon ring is being displayed, the user's chat public key fragment should also be displayed, and visa versa If you can see any inconsistencies in this figma https://www.figma.com/file/IPpvkpDWabBKJTeo6bFop0/Kuba%E2%8E%9CDesktop?node-id=1837%3A335126 please ping me a screenshot of the inconsistency so we can fix the inconsistencies in the design. We've scrubbed the design a few times to try to make sure it's fully consistent in this respect. |
content/raw/chat/username_avatar.md
Outdated
|
||
**Profile Emblems:** | ||
|
||
- If a profile is a mutual contact then it MUST display a mutual contact emblem (e.g a profile icon) and it MUST NOT display other emblems. |
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.
This is slightly incorrect, a mutual contact can also display the untrustworthy emblem. This is the only scenario where a contact can display two emblems
content/raw/chat/username_avatar.md
Outdated
|
||
## Motivation | ||
|
||
Users need a mechanism to identity themselves to other users that is easy to use and at the same time somewhat resistant to impersonation attacks. At the time of writing Status uses deterministic 3 word usernames and ENS usernames. Unfortunatly 3 word usernames have shown to be quite confusing for new users as they are used to set their own usernames in any chat app. |
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.
More background context on the problems these design changes are aiming to solve is documented here https://docs.google.com/document/d/1d5zdPR2_Jn2EZmKNQVNsc7sUoLk4DXPN7Gch3CnYkaE/edit
2daeb4f
to
6e66c99
Compare
content/raw/chat/username_avatar.md
Outdated
@@ -0,0 +1,132 @@ | |||
--- | |||
title: "username & profile spec" |
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.
Should use upper case letter as well
title: "username & profile spec" | |
title: "Username & profile spec" |
content/raw/chat/username_avatar.md
Outdated
## Motivation | ||
|
||
Users need a mechanism to identity themselves to other users that is easy to use and at the same time somewhat resistant to impersonation attacks. At the time of writing Status uses deterministic 3 word usernames and ENS usernames. Unfortunately 3 word usernames have shown to be quite confusing for new users as they are used to set their own usernames in any chat app. | ||
Here we introduce support for users to set their own display name and introduce at least 3 mechaniscs to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile, the second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier, the third mechanism involves preventing duplicate displaynames from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verifcation Spec. |
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.
Here we introduce support for users to set their own display name and introduce at least 3 mechaniscs to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile, the second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier, the third mechanism involves preventing duplicate displaynames from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verifcation Spec. | |
Here we introduce support for users to set their own display name and introduce at least 3 mechanics to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile. The second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier. The third mechanism involves preventing duplicate display names from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verification Spec. |
Generally, is this spec purely about user names within communities or globally? Because only the third mechanism mentions communities explicitly. We should set this expectation straight from the beginning.
Also shouldn't the identity verification spec be linked here?
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.
sequence of colors around the profile to
sequence of colors around the profile image to
Another thing, should we also say that we display the start and end of the pubkey next to their name?
content/raw/chat/username_avatar.md
Outdated
|
||
- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint) | ||
- display name - A username choosen by the user to be displayed in the chat. | ||
- local username - An alias for a profile choosen by the User. Only visible to the user. |
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.
- local username - An alias for a profile choosen by the User. Only visible to the user. | |
- local username - An alias for a profile (other users or contacts) chosen by the User. Only visible to the user. |
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.
Is this the nickname? IMO, we should refer to it as a nickname if that is the case, since it is way easier to follow.
content/raw/chat/username_avatar.md
Outdated
- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint) | ||
- display name - A username choosen by the user to be displayed in the chat. | ||
- local username - An alias for a profile choosen by the User. Only visible to the user. | ||
- verified identity - A profile that went through the Identity Verification process. See Identity Verification Spec. |
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.
Needs link to spec
content/raw/chat/username_avatar.md
Outdated
|
||
### Setting up a profile | ||
|
||
prequesites: User is on onboarding process or has already set up a profile and has choosen to rename their username. |
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.
prequesites: User is on onboarding process or has already set up a profile and has choosen to rename their username. | |
Prerequisites: User is in onboarding process or has already set up a profile and has chosen to rename her username. |
content/raw/chat/username_avatar.md
Outdated
6. User fills in a new display name | ||
7. Systems adds user to the community | ||
7.1 alternative: System warns user that the display name is already taken in one of the communities the user is part of | ||
7.2 alternative: System warns user that the display name is invalid |
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.
At this point, it's still unclear to me whether the username is only available within communities... What if I'm part of a community that has a user "Alfred" and I also have a contact that happens to have the same username "Alfred"?
Both have never seen a warning because they aren't in the same community, but still I have multiple contacts with the same username.
What if Alfred 1 then tries to join that community and changes his name due to conflict: Do I get notified about that?
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.
Another point, it's impossible to guarantee that we'll always have access to the current name of each member of the communities that we join, so it might be necessary to say that same name scenarios are possible.
See discussion here for more details: https://discord.com/channels/624205794384281629/697843216048717905/943494925645918239
- Display names MUST be at least 5 characters long | ||
- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens | ||
- Display names MUST NOT be longer than 24 characters | ||
- Display names MUST NOT be "3 word names" |
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 think this is redundant, given the 3rd requirement in this list
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.
@PascalPrecht as Richard pointed out, spaces are accepted, so this requirement is so people don't impersonate an old 3 word name.
- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens | ||
- Display names MUST NOT be longer than 24 characters | ||
- Display names MUST NOT be "3 word names" | ||
- Display names MUST NOT end in "_eth" or ".eth" or "-eth" |
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.
Why is this the case though? To prevent impersonation/confusion?
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.
@PascalPrecht it's to avoid people impersonating by faking an ENS name, since ENS names are supposed to be unique
- Display names MUST NOT be longer than 24 characters | ||
- Display names MUST NOT be "3 word names" | ||
- Display names MUST NOT end in "_eth" or ".eth" or "-eth" | ||
- Profiles containing 3 word names as their display name that does not deterministically correspond to their chatkey MUST display a warning icon to indicate that the username is not deterministic |
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.
The rules above already state it that a display name must be composed of alpha numeric characters, underscores and/or hyphens. It won't be possible for users to set a 3 word name then
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.
Designs seem to allow spaces in usernames. So maybe it will be possible
**Profile avatar** | ||
|
||
- If a profile does not have a profile photo set it MUST use a 2 letter avatar | ||
- A 2 letter avatar MUST be the first two letters of the display name |
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.
If no display name is set, then we stick to identicons?
- verified identity - A profile that went through the Identity Verification process. See Identity Verification Spec. | ||
- profile emblem - an icon next to a profile that is used to qualify that profile. | ||
- emoji hash - A deterministic sequence of emojis that uniquely identifies a profile. | ||
- identicon ring - A deterministic sequence of colors around a profile avar that is used to differentiate it from other profiles. |
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.
Should there be an ability to set an nft as profile icon? (I know this is possible in mobile)
- A identicon ring MUST be composed of 5 color segments | ||
- A identicon ring segment MAY be one of 32 distinctive colors | ||
- A identicon ring segment MAY be of different length | ||
- A identicon ring segments total length MUST BE exactly 25px |
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.
25 units not pixels
content/raw/chat/username_avatar.md
Outdated
- Users MUST be able to set a profile photo for their profile | ||
- Profile photos MUST be visible to all users | ||
|
||
- A identicon ring MUST be composed of 5 color segments |
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.
@iurimatias Is this specification due to some technical restriction? Since I understood from figma examples, a ring can have more than 5 colors.
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.
@osmaczko calculated that 10 segments seems to be the optimal number
|
||
- A identicon ring MUST be composed of 5 color segments | ||
- A identicon ring segment MAY be one of 32 distinctive colors | ||
- A identicon ring segment MAY be of different length |
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.
Suggestion: It might be more clarifying if we add the word units
to refer to the length of the segment and as understood from figma, this units length should be from 1 to 5 so, it could be interesting to mention it here, as well. Something like this: A identicon ring segment MAY be of different units length, from 1 to 5 units
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.
We are going to encode 10 bytes of data into identicon ring, which implies: 49 units, 10 segments, 32 colors. A segment can be <1,40> units long (see calculations here: status-im/specs#166)
content/raw/chat/username_avatar.md
Outdated
|
||
- Users MUST be able to set a display name for their own profile | ||
- Display names MUST be at least 5 characters long | ||
- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens |
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.
According to the designs, the display names must allow spaces. Perhaps this could be changed to
- Display names MUST be composed of alphanumeric characters, underscores, and/or hyphens | |
- Display names MUST be composed of alphanumeric characters, underscores, spaces and/or hyphens, but they cannot contain spaces at the beggining or end |
7.1 alternative: System warns user that the display name is already taken in one of the communities the user is part of | ||
7.2 alternative: System warns user that the display name is invalid | ||
|
||
## Functional Requirements |
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.
The specs does not indicate what should happen when an user receives a message from an account that does not have a display name, which could happen when the author of a message has not updated their mobile or desktop app.
What should be displayed then? the three word alias?
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.
Maybe it's a good idea to mention that existing users that update the app to a new version that supports this spec must undergo a process to set their display name before being able to chat
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.
Agree on both points. For backwards compatibility, I'd say it would make sense to display the 3 word name
content/raw/chat/username_avatar.md
Outdated
## Motivation | ||
|
||
Users need a mechanism to identity themselves to other users that is easy to use and at the same time somewhat resistant to impersonation attacks. At the time of writing Status uses deterministic 3 word usernames and ENS usernames. Unfortunately 3 word usernames have shown to be quite confusing for new users as they are used to set their own usernames in any chat app. | ||
Here we introduce support for users to set their own display name and introduce at least 3 mechaniscs to minimize the risk of impersonation attacks. The first mechanism is the use of deterministic sequence of emojis to uniquely identity a profile, the second mechanism is the use of a deterministic sequence of colors around the profile to differentiate it from other profiles which effectively replaces the 3 word usernames and identicons with a similar deterministic identifier, the third mechanism involves preventing duplicate displaynames from joining the same community. There is also an identity verification mechanism that is used to ensure that the user is who they say they are described in the Identity Verifcation Spec. |
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.
sequence of colors around the profile to
sequence of colors around the profile image to
Another thing, should we also say that we display the start and end of the pubkey next to their name?
|
||
## Definitions | ||
|
||
- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint) |
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.
After evaluation, we determined that those 3 word are not unique, rather, they cover about 3 bytes of the pubkey, therefore leaving a lot of margin for conflicts.
content/raw/chat/username_avatar.md
Outdated
|
||
- 3 word usernames - A 3 word username is a deterministic sequence of words that uniquely identifies a profile. see [spec](https://specs.status.im/spec/2#3-word-pseudonym--whisperwaku-key-fingerprint) | ||
- display name - A username choosen by the user to be displayed in the chat. | ||
- local username - An alias for a profile choosen by the User. Only visible to the user. |
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.
Is this the nickname? IMO, we should refer to it as a nickname if that is the case, since it is way easier to follow.
- local username - An alias for a profile choosen by the User. Only visible to the user. | ||
- verified identity - A profile that went through the Identity Verification process. See Identity Verification Spec. | ||
- profile emblem - an icon next to a profile that is used to qualify that profile. | ||
- emoji hash - A deterministic sequence of emojis that uniquely identifies a profile. |
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.
Again, almost impossible to be unique
content/raw/chat/username_avatar.md
Outdated
6. User fills in a new display name | ||
7. Systems adds user to the community | ||
7.1 alternative: System warns user that the display name is already taken in one of the communities the user is part of | ||
7.2 alternative: System warns user that the display name is invalid |
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.
Another point, it's impossible to guarantee that we'll always have access to the current name of each member of the communities that we join, so it might be necessary to say that same name scenarios are possible.
See discussion here for more details: https://discord.com/channels/624205794384281629/697843216048717905/943494925645918239
- A identicon ring segment MAY be one of 32 distinctive colors | ||
- A identicon ring segment MAY be of different length | ||
- A identicon ring segments total length MUST BE exactly 25px | ||
- unless a profile is a mutual contact, it MUST show the identicon ring around the profile avatar |
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.
So when you are mutual contact, we don't show the ring? Wouldn't that become visually annoying to have some with and some without?
content/raw/chat/username_avatar.md
Outdated
|
||
**EmojiHash** | ||
|
||
- An Emoji Hash MUST be a sequence of 12 emojis determined by the profile's chat key |
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.
It's most likely gonna be 16, since 12 is not enough to cover enough bytes
|
||
- An Emoji Hash MUST be a sequence of 12 emojis determined by the profile's chat key | ||
- A profile detailed view MUST show that profiles emoji hash | ||
|
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.
Might be worth mentioning the number of emojis that we support. Say that we only support UTF(?) emojis, to be able to copy them, and not the flags, religious symbols, etc.
content/raw/chat/username_avatar.md
Outdated
|
||
**Usernames in Communities** | ||
|
||
- A community MUST NOT allow duplicate display names |
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.
Again, this seems impossible with the current peer to peer architecture we have. Maybe saying "MUST prevent duplicate display names" would be more fitting
content/raw/chat/username_avatar.md
Outdated
|
||
## Notes | ||
|
||
- This spec implies that identicons & 3 word usernames features are to be removed from the app. |
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.
Maybe worth to add that they should be still supported for backwards compatibility (showing the 3 word names for people still on an old version)
When status-im/specs#166 is accepted and merged, numbers related to emojis and identicon ring should be updated. |
No description provided.