-
Notifications
You must be signed in to change notification settings - Fork 48
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
Decentralized profile #56
Comments
I prefer we use I don't think we should encourage them to add existing social media. Consider this is an entirely new universe. We may instead ask them to add their keybase, *iov address, etc. There is another question always in my head. Should we link a single profile to different addresses of a user? Can this profile represent the identity of the same user on @terencesflam do you have any comments on the use cases of user profile? |
Replaced
While proposing this solution I was not thinking about encouraging them to link their socials. Instead, linking such information could be seen as an additional proof of ownership of such accounts. I avoided using Keybase as you told me there has already been some impersonating there. However, if you think it's better I'm more than willing to delete the social links and replace them with other more specific stuff.
I think this will be solved using the IBC accounts which will provide a chain to retain control of an account while making it available for use to other chains too. If not using this, we can simply add a new field called
This can be done from explorers and other chains. I don't think it's strictly related to us as we cannot change how other chains work. |
Yes, seems the
With the decentralized profile, explorers and other dapps can choose to get the profile or setup their own structure. For validators, they can use the |
Second implementation proposalAfter all the above discussion and having studied how IBC connects the chains between one another, I've thought to what it might be a better implementation. TypesThe
In order to satisfy these requests, I've thought about the following // Account represents a generic account on Desmos, containing the information of a single user
type Account struct {
Name string `json:"name,omitempty"`
Surname string `json:"surname,omitempty"`
Moniker string `json:"moniker,omitempty"`
Bio string `json:"bio,omitempty"`
Pictures *Pictures `json:"pictures,omitempty"`
VerifiedServices []ServiceLink `json:"verified_services,omitempty"` // List of all the trusted services linked to this profile
ChainLinks []ChainLink `json:"chain_links,omitempty"` // List of all the other chain accounts linked to this profile
}
// Pictures contains the data of a user profile's related pictures
type Pictures struct {
Profile string `json:"profile,omitempty"`
Cover string `json:"cover,omitempty"`
}
// ServiceLink represents the data that have been used to connect a verifiable trusted service
type ServiceLink struct {
Name string `json:"service_name"` // Name of the trusted service (e.g. keybase)
Credential string `json"service_credential"` // Credential to be used to verify the user (eg. the Keybase identity)
Proof string `json:"service_proof"` // Proof to verify the user (e.g. the
}
// ChainLink represents the data that have been used to prove an external chain account is owned by this user
type ChainLink struct {
Name string `json:"chain_name"` // Name of the chain on which the tx has been performed (eg. cosmoshub-3)
TxHash string `json:"tx_hash"` // Hex representation of the tx hash used to verify the ownership
} Services and Chains listingIn order to properly support services and chain verification, we should also store on-chain a list of services and chains that we recognize as valid and for which we define a proper verification procedure. Such procedures will be used inside CLI commands execution. CLI commandsThe following CLI commands should be implemented: Add a service.By specifying the name of a supported service and the proper credential and proof, the CLI commands performs the actions needed to execute the verification properly. For example, the following procedure might be adopted to verify Keybase:
If the decoding works, we can make sure the user controls that account and so we can safely store it on chain. Add a chainTo make things easier, we can initially support only Cosmos-based chains. Once IBC is out, we can swap the implementation to use that instead. A possible procedure for this would be the following:
If the verification is successful, we store the chain as a verified chain inside the user's profile, saving the transaction hash. ConclusionsThis is just an example implementation that we might want to have as the first version of integration towards third party services. Please @kwunyeung and @bragaz let me know what do you think about this. |
Seems good to me. |
@bragaz the verifications can all be made off-chain, without the need of a middle layer application, simply using Go's HTTP client. |
Superseded by #192 |
Context
As a social network enabling blockchain, one core feature that we should have is the possibility for users to create their very own decentralized profile.
In the current era of social networks, profile are most of the time made of the following user data:
Also, a part from these privacy-related stuff, people can often also set
Personally, I would avoid putting any privacy-related information on-chain as this can lead to leak of data and spam/scam actions.
For this reason, I propose to create a profile that contains only the following information:
On the other hand, I would exclude the following data:
Also, as other social networks already exist, I propose to allow the users to connect such socials to our profile, saving a list of social network connections.
Implementation proposal
Based on the considerations written above, the implementation I propose is defined by the following structures:
Social links constraints
As we live in a world where catfishing and identity stealing is increasing over time, I suggest we adopt a series of precautions about other social network connections.
Restricting accepted social networks
I would suggest we create a system inside which we do not accept all social networks to be linked to Desmos but, instead, only a subset of the existing ones. This is due to prevent hardly-verifiable social networks to be linked, which would cause possible identities steals.
The list should be done on-chain and managed thought an on-chain governance. The following actions should be supported:
Specifying the authenticity controls
For each future supported social network, there should be a document defining properly how the authenticity of a connection to such social network can be proven. This document should be approved by the overall community before the social network itself is marked as fully supported on Desmos.
The text was updated successfully, but these errors were encountered: