<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
<!-- Begin Jekyll SEO tag v2.5.0 -->
< title > DID Encoding for Subdomains | Blockstack< / title >
< meta name = "generator" content = "Jekyll v3.8.3" / >
< meta property = "og:title" content = "DID Encoding for Subdomains" / >
< meta name = "author" content = "Blockstack" / >
< meta property = "og:locale" content = "en_US" / >
< meta name = "description" content = "DID Encoding for Subdomains" / >
< meta property = "og:description" content = "DID Encoding for Subdomains" / >
< link rel = "canonical" href = "https://zbabystack.netlify.com/core/naming/did.html" / >
< meta property = "og:url" content = "https://zbabystack.netlify.com/core/naming/did.html" / >
< meta property = "og:site_name" content = "Blockstack" / >
< meta property = "og:type" content = "article" / >
< meta property = "article:published_time" content = "2018-08-30T13:25:56-07:00" / >
< script type = "application/ld+json" >
{"description":"DID Encoding for Subdomains","author":{"@type":"Person","name":"Blockstack"},"@type":"BlogPosting","url":"https://zbabystack.netlify.com/core/naming/did.html","headline":"DID Encoding for Subdomains","dateModified":"2018-08-30T13:25:56-07:00","datePublished":"2018-08-30T13:25:56-07:00","mainEntityOfPage":{"@type":"WebPage","@id":"https://zbabystack.netlify.com/core/naming/did.html"},"@context":"http://schema.org"}< / script >
<!-- End Jekyll SEO tag -->
<!-- <meta property="og:image" content="https://zbabystack.netlify.com/assets/posts/logo.png"/> -->
< meta property = "og:image" content = "/assets/posts/logo.png" / >
< link rel = "stylesheet" href = "/assets/css/main.css" >
< link rel = "shortcut icon" type = "image/png" href = "/assets/img/favicon.png" >
< link rel = "alternate" type = "application/rss+xml" title = "Blockstack" href = "/feed.xml" >
< script src = "/assets/js/main.js" > < / script >
< / head >
< body >
< header class = "uk-background-secondary" >
< div data-uk-sticky = "sel-target: .uk-navbar-container; cls-active: uk-navbar-sticky" class = "uk-sticky uk-sticky-fixed" style = "position: fixed; top: 0px; width: 1904px;" >
< nav class = "uk-navbar-container" >
< div class = "uk-container" >
< div data-uk-navbar >
< div class = "uk-navbar-left" >
<!-- <a class="uk - navbar - item uk - logo" href="/"><img src="https://zbabystack.netlify.com/assets/posts/logo.png" alt="Docs"></a> -->
< a class = "uk-navbar-item uk-logo" href = "/" > < img src = "/assets/posts/logo.png" alt = "Docs" > < / a >
< / div >
< div class = "uk-navbar-right" >
< ul class = "uk-navbar-nav uk-visible@m" >
< li > < a href = "https://blockstack.org" target = "_blank" > Blockstack.org< / a > < / li >
< li > < a href = "https://forum.blockstack.org/" target = "_blank" > Forums< / a > < / li >
< li > < a href = "https://github.com/blockstack" target = "_blank" > GitHub< / a > < / li >
< / ul >
< div >
< a class = "uk-navbar-toggle" uk-search-icon href = "#" > < / a >
< div class = "uk-drop uk-background-default uk-border-rounded" uk-drop = "mode: click; pos: left-center; offset: 0" >
< form class = "uk-search uk-search-navbar uk-width-1-1" onsubmit = "return false;" >
< input id = "searchBox" class = "uk-search-input" type = "search" placeholder = "Search..." autofocus >
< / form >
< ul id = "searchBox-results" class = "uk-position-absolute uk-width-1-1 uk-list" > < / ul >
< / div >
< / div >
< script >
SimpleJekyllSearch({
searchInput: document.getElementById('searchBox'),
resultsContainer: document.getElementById('searchBox-results'),
noResultsText: '< li > No results found< / li > ',
searchResultTemplate: '< li > < a href = "{url}" > {title}< / a > < / li > ',
json: '/search.json'
});
< / script >
< a class = "uk-navbar-toggle uk-hidden@m" href = "#offcanvas" data-uk-navbar-toggle-icon data-uk-toggle > < / a >
< / div >
< / div >
< / div >
< / nav >
< / div >
< / header >
< div class = "uk-section" >
< div class = "uk-container" >
< div class = "uk-grid-large" data-uk-grid >
< div class = "sidebar-fixed-width uk-visible@m" >
< div class = "sidebar-docs uk-position-fixed" >
< h5 > Overview< / h5 >
< ul class = "uk-nav uk-nav-default doc-nav" >
<!-- -->
< li class = "" > < a href = "/core/naming/introduction.html" > Blockstack Naming Service (BNS)< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/architecture.html" > Understand the Architecture< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/namespaces.html" > Understand Namespaces< / a > < / li >
< / ul >
< h5 > Tutorials< / h5 >
< ul class = "uk-nav uk-nav-default doc-nav" >
<!-- -->
< li class = "" > < a href = "/core/naming/tutorial_creation.html" > Creating a Namespace< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/tutorial_subdomains.html" > Subdomain Design and Implementation< / a > < / li >
< / ul >
< h5 > How to use BNS< / h5 >
< ul class = "uk-nav uk-nav-default doc-nav" >
<!-- -->
< li class = "" > < a href = "/core/naming/pickname.html" > Choose a name< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/resolving.html" > Resolve a name< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/register.html" > Register a name< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/manage.html" > Manage BNS Names< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/subdomains.html" > BNS Subdomains< / a > < / li >
< / ul >
< h5 > Other topics< / h5 >
< ul class = "uk-nav uk-nav-default doc-nav" >
<!-- -->
< li class = "" > < a href = "/core/naming/forks.html" > BNS Forks< / a > < / li >
<!-- -->
< li class = "uk-active" > < a href = "/core/naming/did.html" > DID Encoding for Subdomains< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/comparison.html" > Naming system feature comparison< / a > < / li >
< / ul >
< / div >
< / div >
< div class = "uk-width-1-1 uk-width-expand@m" >
< article class = "uk-article" >
< h1 class = "uk-article-title" > DID Encoding for Subdomains< / h1 >
< div class = "uk-article-meta uk-margin-top uk-margin-medium-bottom" >
<!-- <img class="avatar avatar - small" alt="Blockstack" width="32" height="32" data - proofer - ignore="true" src="https://avatars2.githubusercontent.com/Blockstack?v=3&s=32" srcset="https://avatars2.githubusercontent.com/Blockstack?v=3&s=32 1x, https://avatars2.githubusercontent.com/Blockstack?v=3&s=64 2x, https://avatars2.githubusercontent.com/Blockstack?v=3&s=96 3x, https://avatars2.githubusercontent.com/Blockstack?v=3&s=128 4x" /> -->
<!-- Written by <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">Blockstack</span></span><br> -->
< time datetime = "2018-08-30T13:25:56-07:00" itemprop = "datePublished" >
< a " target = "_blank" href = "https://github.com/moxiegirl/docs-new/blob/master/_core/naming/did.md" class = "btn btn-default githubEditButton" role = "button" > < span data-uk-icon = "icon: pencil; ratio: 1.2" > < / span > Edit this page on Github< / a >
< span style = "font-family:Wingdings" > w < / span > Aug 30, 2018
< / time >
< / div >
< div class = "article-content" >
< p > Every name and subdomain in BNS has a DID. The encoding is slightly different
for subdomains, so the software can determine which code-path to take.< / p >
< ul >
< li >
< p > For on-chain BNS names, the < code class = "highlighter-rouge" > < span class = "p" > {< / span > < span class = "err" > address< / span > < span class = "p" > }< / span > < / code > is the same as the Bitcoin address
that owns the name. Currently, both version byte 0 and version byte 5
addresses are supported (i.e. addresses starting with < code class = "highlighter-rouge" > 1< / code > or < code class = "highlighter-rouge" > 3< / code > , meaning < code class = "highlighter-rouge" > p2pkh< / code > and
< code class = "highlighter-rouge" > p2sh< / code > addresses).< / p >
< / li >
< li >
< p > For off-chain BNS subdomains, the < code class = "highlighter-rouge" > < span class = "p" > {< / span > < span class = "err" > address< / span > < span class = "p" > }< / span > < / code > has version byte 63 for
subdomains owned by a single private key, and version byte 50 for subdomains
owned by a m-of-n set of private keys. That is, subdomain DID addresses start
with < code class = "highlighter-rouge" > S< / code > or < code class = "highlighter-rouge" > M< / code > , respectively.< / p >
< / li >
< / ul >
< p > The < code class = "highlighter-rouge" > < span class = "p" > {< / span > < span class = "err" > index< / span > < span class = "p" > }< / span > < / code > field for a subdomain’s DID is distinct from the < code class = "highlighter-rouge" > < span class = "p" > {< / span > < span class = "err" > index< / span > < span class = "p" > }< / span > < / code > field
for a BNS name’s DID, even if the same created both names and subdomains.
For example, the name < code class = "highlighter-rouge" > abcdefgh123456.id< / code > has the DID < code class = "highlighter-rouge" > did:stack:v0:16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg-0< / code > ,
because it was the first name created by < code class = "highlighter-rouge" > 16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg< / code > .
However, < code class = "highlighter-rouge" > 16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg< / code > < em > also< / em > created < code class = "highlighter-rouge" > jude.statism.id< / code >
as its first subdomain name. The DID for < code class = "highlighter-rouge" > jude.statism.id< / code > is
< code class = "highlighter-rouge" > did:stack:v0:SSXMcDiCZ7yFSQSUj7mWzmDcdwYhq97p2i-0< / code > . Note that the address
< code class = "highlighter-rouge" > SSXMcDiCZ7yFSQSUj7mWzmDcdwYhq97p2i< / code > encodes the same public key hash as the address
< code class = "highlighter-rouge" > 16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg< / code > (the only difference between these two
strings is that the first is base58check-encoded with version byte 0, and the
second is encoded with version byte 63).< / p >
< p > You can see this play out in practice with the following code snippit:< / p >
< div class = "language-python highlighter-rouge" > < pre class = "highlight" > < code > < span class = "o" > > > > < / span > < span class = "kn" > import< / span > < span class = "nn" > blockstack< / span >
< span class = "o" > > > > < / span > < span class = "n" > blockstack< / span > < span class = "o" > .< / span > < span class = "n" > lib< / span > < span class = "o" > .< / span > < span class = "n" > client< / span > < span class = "o" > .< / span > < span class = "n" > get_name_record< / span > < span class = "p" > (< / span > < span class = "s" > 'jude.statism.id'< / span > < span class = "p" > ,< / span > < span class = "n" > hostport< / span > < span class = "o" > =< / span > < span class = "s" > 'https://node.blockstack.org:6263'< / span > < span class = "p" > )[< / span > < span class = "s" > 'address'< / span > < span class = "p" > ]< / span >
< span class = "s" > u'16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg'< / span >
< span class = "o" > > > > < / span > < span class = "kn" > import< / span > < span class = "nn" > virtualchain< / span >
< span class = "o" > > > > < / span > < span class = "n" > virtualchain< / span > < span class = "o" > .< / span > < span class = "n" > address_reencode< / span > < span class = "p" > (< / span > < span class = "s" > '16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg'< / span > < span class = "p" > ,< / span > < span class = "n" > version_byte< / span > < span class = "o" > =< / span > < span class = "mi" > 63< / span > < span class = "p" > )< / span >
< span class = "s" > 'SSXMcDiCZ7yFSQSUj7mWzmDcdwYhq97p2i'< / span >
< span class = "o" > > > > < / span > < span class = "n" > blockstack< / span > < span class = "o" > .< / span > < span class = "n" > lib< / span > < span class = "o" > .< / span > < span class = "n" > client< / span > < span class = "o" > .< / span > < span class = "n" > resolve_DID< / span > < span class = "p" > (< / span > < span class = "s" > 'did:stack:v0:SSXMcDiCZ7yFSQSUj7mWzmDcdwYhq97p2i-0'< / span > < span class = "p" > ,< / span > < span class = "n" > hostport< / span > < span class = "o" > =< / span > < span class = "s" > 'https://node.blockstack.org:6263'< / span > < span class = "p" > )< / span >
< span class = "p" > {< / span > < span class = "s" > 'public_key'< / span > < span class = "p" > :< / span > < span class = "s" > '020fadbbcea0ff3b05f03195b41cd991d7a0af8bd38559943aec99cbdaf0b22cc8'< / span > < span class = "p" > }< / span >
< / code > < / pre >
< / div >
< div class = "share uk-text-center" >
< a href = "https://twitter.com/intent/tweet?text=DID Encoding for Subdomains&url=https://zbabystack.netlify.com/core/naming/did.html&via=&related=" rel = "nofollow" target = "_blank" title = "Share on Twitter" onclick = "window.open(this.href, 'twitter', 'width=550,height=235');return false;" > < span data-uk-icon = "icon: twitter; ratio: 1.2" > < / span > < / a >
< a class = "uk-margin-small-left" href = "https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fzbabystack.netlify.com%2Fcore%2Fnaming%2Fdid.html" rel = "nofollow" target = "_blank" title = "Share on Facebook" onclick = "window.open(this.href, 'facebook-share','width=580,height=296');return false;" > < span data-uk-icon = "icon: facebook; ratio: 1.2" > < / span > < / a >
< / div >
< / div >
< hr class = "uk-margin-medium" >
< div class = "uk-margin-large-top" >
< h3 > Related Articles< / h3 >
< ul class = "uk-list" >
< / ul >
< / div >
< / article >
< script >
// Table of contents scroll to
UIkit.scroll('#markdown-toc a', {
duration: 400,
offset: 120
});
< / script >
< / div >
< / div >
< / div >
< div id = "offcanvas" data-uk-offcanvas = "flip: true; overlay: true" >
< div class = "uk-offcanvas-bar" >
< button class = "uk-offcanvas-close" type = "button" data-uk-close > < / button >
< ul class = "uk-nav uk-nav-default" >
<!-- <li><a class="uk - logo uk - margin - small - bottom" href="/"><img src="https://zbabystack.netlify.com/assets/posts/logo.png" alt="Docs"></a></li> -->
< li > < a class = "uk-logo uk-margin-small-bottom" href = "/" > < img src = "/assets/posts/logo.png" alt = "Docs" > < / a > < / li >
< li > < a href = "https://blockstack.org" target = "_blank" > Blockstack.org< / a > < / li >
< li > < a href = "https://forum.blockstack.org/" target = "_blank" > Forums< / a > < / li >
< li > < a href = "https://github.com/blockstack" target = "_blank" > GitHub< / a > < / li >
< / ul >
< div class = "uk-margin-small-top uk-text-center uk-text-muted uk-link-muted" >
< div data-uk-grid class = "uk-child-width-auto uk-grid-small uk-flex-center uk-grid" >
< div class = "uk-first-column" >
< a href = "https://twitter.com/" data-uk-icon = "icon: twitter" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< div >
< a href = "https://www.facebook.com/" data-uk-icon = "icon: facebook" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< div >
< a href = "https://www.instagram.com/" data-uk-icon = "icon: instagram" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< div >
< a href = "https://vimeo.com/" data-uk-icon = "icon: vimeo" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< / div >
< / div >
< / div >
< / div >
< footer class = "uk-section uk-text-center uk-text-muted uk-link-muted" >
< div class = "uk-container uk-container-small" >
< div >
< ul class = "uk-subnav uk-flex-center" >
< li > < a href = "https://blockstack.org" target = "_blank" > Blockstack.org< / a > < / li >
< li > < a href = "https://forum.blockstack.org/" target = "_blank" > Forums< / a > < / li >
< li > < a href = "https://github.com/blockstack" target = "_blank" > GitHub< / a > < / li >
< / ul >
< / div >
< div class = "uk-margin-medium" >
< div data-uk-grid class = "uk-child-width-auto uk-grid-small uk-flex-center uk-grid" >
< div class = "uk-first-column" >
< a href = "https://twitter.com/" data-uk-icon = "icon: twitter" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< div >
< a href = "https://www.facebook.com/" data-uk-icon = "icon: facebook" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< div >
< a href = "https://www.instagram.com/" data-uk-icon = "icon: instagram" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< div >
< a href = "https://vimeo.com/" data-uk-icon = "icon: vimeo" class = "uk-icon-link uk-icon" target = "_blank" > < / a >
< / div >
< / div >
< / div >
< div class = "uk-margin-medium uk-text-small copyright" > Blockstack< / div >
< / div >
< / footer >
< script type = "text/javascript" >
/* Create a configuration object */
var ss360Config = {
/* Your site id */
siteId: 'blockstack',
/* A CSS selector that points to your search box */
searchBox: {selector: '#searchBox'}
};
< / script >
< script src = "https://cdn.sitesearch360.com/sitesearch360-v11.min.js" async > < / script >
< / body >
< / html >