OneName
=======
The decentralized identity system built on Bitcoin.
##### Table of Contents
[Introduction](#introduction)
[Profile Explorers](#profile-explorers)
[Viewing Profiles](#viewing-profiles)
[Registering Users](#registering-users)
[Usernames](#usernames)
[Profiles](#profiles)
[Verification](#verification)
[Key-value Entries](#kv-entries)
<a name="introduction"/>
## Introduction
OneName is a protocol for a decentralized identity system (DIS) with a user directory comprised of entries in a decentralized key-value store. OneName currently uses the Namecoin blockchain, but any decentralized key-value store may be used.
Users are added to the OneName directory via an entry into the key-value store, where the *key* is the username and the *value* is the profile data (in JSON format).
The OneName protocol provides formatting specifications for usernames and profiles and defines conventions for OneName profile crawlers/explorers (which read from the key-value store, digest profile data, and display profiles).
Nobody owns or controls OneName and users are in complete control of their data.
With Bitcoin, private keys provide us with complete control over our funds - nobody can move it without our permission. In the same way, OneName private keys provide us with complete control over our identities - no individual or entity can usurp our usernames or modify our public data or control the release of our private data without our permission.
OneName is open source, has a public design, and is for all to take part.
<a name="profile-explorers"/>
## Profile Explorers
OneName profile explorers are systems that read OneName user data from the key-values store and provide an interface for viewing profiles. This is similar to how Bitcoin has block explorers that read data from the blockchain and provide an interface for viewing transaction data. As with bitcoin block explorers, developers are free to crawl the key-value store and set up their own OneName profile explorers.
<a name="viewing-profiles"/>
## Viewing Profiles
Profiles may be viewed on any OneName profile explorer.
### Viewing profiles on a profile explorer
The URL pattern for viewing a profile on a profile explorer:
someonenameexplorer.com/<username>
The URL pattern for viewing a profile as raw JSON data:
someonenameexplorer.com/<username>.json
### Current profile explorers
+ [onename.io](https://www.onename.io)
<a name="registering-users"/>
## Registering Users
To register a user on OneName:
1. choose an available OneName username
2. construct a valid JSON object that adheres to the OneName profile specifications
3. register the username and profile as an entry in the key-value store
<a name="usernames"/>
## Usernames
Usernames may be up to 60 characters long and contain lowercase letters, numbers, and underscores.
**Note:** usernames with ANY uppercase letters will be ignored by OneName crawlers, so make sure to only use lowercase letters when you register a name.
Regex: ^/[a-z0-9_]{1,60}$
### Usernames on Namecoin
Namecoin's key-value store has several namespaces. By convention, key entries that start with "d/" are interpreted as domain names. Likewise, those that start with "u/" are interpreted as OneName usernames.
When registering a username on Namecoin, prepend "u/" to the username and use that as your key in the key-value entry.
Regex: ^u/[a-z0-9_]{1,60}$
Example:
Username: someuser
Key: u/someuser
Full instructions for registering usernames on Namecoin can be found below.
<a name="profiles"/>
## Profiles
User profiles in OneName are collections of attributes that are expressed as JSON objects.
For profiles to be properly read by OneName crawlers and displayed on OneName profile explorers, their fields must adhere to the conventions outlined below.
### Profile Format v0.2
<table class="table table-bordered">
<thead>
<tr>
<th>Field Name</th>
<th>Description</th>
<th>Example(s)</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>The user's name, including his/her given name and family name.</td>
<td>{ "formatted": "John Smith" }</td>
</tr>
<tr>
<td>avatar</td>
<td>A url to an image that serves as the user's avatar.</td>
<td>{ "url": "http://example.com/avatar.jpg"}</td>
</tr>
<tr>
<td>cover</td>
<td>A url to an image that serves as the user's cover photo.</td>
<td>{ "url": "http://example.com/cover.jpg" }</td>
</tr>
<tr>
<td>location</td>
<td>The user's current location.</td>
<td>{ "formatted": "New York, NY" }</td>
</tr>
<tr>
<td>website</td>
<td>The user's website or blog.</td>
<td>"http://example.com"</td>
</tr>
<tr>
<td>bio</td>
<td>The user's biography/self-summary.</td>
<td>"Just a guy with his head in the cloud."</td>
</tr>
<tr>
<td>bitcoin</
This file has been truncated. show original