<!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 > Resolve a name | Blockstack< / title >
< meta name = "generator" content = "Jekyll v3.8.3" / >
< meta property = "og:title" content = "Resolve a name" / >
< meta name = "author" content = "Blockstack" / >
< meta property = "og:locale" content = "en_US" / >
< meta name = "description" content = "Resolve a name" / >
< meta property = "og:description" content = "Resolve a name" / >
< link rel = "canonical" href = "https://docs.blockstack.org/core/naming/resolving.html" / >
< meta property = "og:url" content = "https://docs.blockstack.org/core/naming/resolving.html" / >
< meta property = "og:site_name" content = "Blockstack" / >
< meta property = "og:type" content = "article" / >
< meta property = "article:published_time" content = "2018-09-14T08:59:34-07:00" / >
< script type = "application/ld+json" >
{"description":"Resolve a name","author":{"@type":"Person","name":"Blockstack"},"@type":"BlogPosting","url":"https://docs.blockstack.org/core/naming/resolving.html","headline":"Resolve a name","dateModified":"2018-09-14T08:59:34-07:00","datePublished":"2018-09-14T08:59:34-07:00","mainEntityOfPage":{"@type":"WebPage","@id":"https://docs.blockstack.org/core/naming/resolving.html"},"@context":"http://schema.org"}< / script >
<!-- End Jekyll SEO tag -->
<!-- <meta property="og:image" content="https://docs.blockstack.org/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/touch-icon.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://docs.blockstack.org/assets/posts/logo.png" alt="Docs"></a> -->
< a class = "uk-navbar-item uk-logo" href = "/" > < img src = "/assets/posts/logo.png" alt = "Docs" >
< svg style = "width:141.602;height:11.487px" viewBox = "0 0 141.602 11.487" enable-background = "new 0 0 141.602 11.487" > < path fill = "#000000" d = "M5.471,7.791c0,0.511-0.16,0.875-0.488,1.111C4.631,9.158,4.097,9.287,3.398,9.287H2.387V6.456h1.011 C5 . 256 , 6 . 456 , 5 . 471 , 7 . 219 , 5 . 471 , 7 . 791z M4 . 554 , 4 . 223C4 . 29 , 4 . 448 , 3 . 82 , 4 . 562 , 3 . 16 , 4 . 562H2 . 387V2 . 2h0 . 821 c0 . 611 , 0 , 1 . 066 , 0 . 094 , 1 . 352 , 0 . 279C4 . 81 , 2 . 641 , 4 . 933 , 2 . 907 , 4 . 933 , 3 . 292C4 . 933 , 3 . 704 , 4 . 809 , 4 . 008 , 4 . 554 , 4 . 223z M6 . 004 , 5 . 338 c0 . 325-0 . 181 , 0 . 59-0 . 418 , 0 . 79-0 . 709c0 . 327-0 . 476 , 0 . 493-1 . 001 , 0 . 493-1 . 562c0-0 . 53-0 . 105-0 . 989-0 . 313-1 . 362 c-0 . 208-0 . 374-0 . 5-0 . 677-0 . 867-0 . 9C5 . 754 , 0 . 59 , 5 . 333 , 0 . 432 , 4 . 855 , 0 . 335C4 . 391 , 0 . 24 , 3 . 879 , 0 . 192 , 3 . 334 , 0 . 192h-3 . 06 C0 . 123 , 0 . 192 , 0 , 0 . 317 , 0 , 0 . 471v10 . 545c0 , 0 . 154 , 0 . 123 , 0 . 278 , 0 . 274 , 0 . 278h3 . 315c0 . 591 , 0 , 1 . 143-0 . 065 , 1 . 645-0 . 194 c0 . 513-0 . 132 , 0 . 966-0 . 339 , 1 . 345-0 . 615c0 . 388-0 . 283 , 0 . 694-0 . 641 , 0 . 91-1 . 067C7 . 702 , 8 . 992 , 7 . 811 , 8 . 488 , 7 . 811 , 7 . 92 c0-0 . 78-0 . 226-1 . 413-0 . 672-1 . 879C6 . 847 , 5 . 737 , 6 . 467 , 5 . 502 , 6 . 004 , 5 . 338z M22 . 197 , 9 . 158h-4 . 595V0 . 471c0-0 . 153-0 . 123-0 . 278-0 . 274-0 . 278 h-1 . 824c-0 . 151 , 0-0 . 273 , 0 . 125-0 . 273 , 0 . 278v10 . 545c0 , 0 . 154 , 0 . 122 , 0 . 278 , 0 . 273 , 0 . 278h6 . 693c0 . 151 , 0 , 0 . 274-0 . 124 , 0 . 274-0 . 278v-1 . 58 C22 . 47 , 9 . 282 , 22 . 348 , 9 . 158 , 22 . 197 , 9 . 158z M35 . 076 , 5 . 695c0 , 0 . 567-0 . 051 , 1 . 086-0 . 151 , 1 . 543c-0 . 1 , 0 . 45-0 . 24 , 0 . 836-0 . 416 , 1 . 149 c-0 . 167 , 0 . 299-0 . 37 , 0 . 53-0 . 603 , 0 . 688c-0 . 461 , 0 . 312-1 . 061 , 0 . 3-1 . 505-0 . 001c-0 . 233-0 . 157-0 . 436-0 . 389-0 . 604-0 . 688 c-0 . 175-0 . 313-0 . 312-0 . 699-0 . 407-1 . 146c-0 . 096-0 . 458-0 . 144-0 . 978-0 . 144-1 . 546c0-1 . 126 , 0 . 187-2 . 013 , 0 . 556-2 . 638 c0 . 346-0 . 587 , 0 . 791-0 . 873 , 1 . 36-0 . 873c0 . 568 , 0 , 1 . 012 , 0 . 285 , 1 . 359 , 0 . 873C34 . 889 , 3 . 682 , 35 . 076 , 4 . 569 , 35 . 076 , 5 . 695z M36 . 319 , 1 . 541 c-0 . 378-0 . 494-0 . 844-0 . 879-1 . 381-1 . 144c-1 . 076-0 . 529-2 . 477-0 . 529-3 . 553 , 0c-0 . 538 , 0 . 265-1 . 003 , 0 . 65-1 . 381 , 1 . 144 c-0 . 373 , 0 . 487-0 . 669 , 1 . 09-0 . 879 , 1 . 792c-0 . 208 , 0 . 696-0 . 313 , 1 . 49-0 . 313 , 2 . 362c0 , 0 . 882 , 0 . 105 , 1 . 685 , 0 . 313 , 2 . 386 c0 . 21 , 0 . 706 , 0 . 504 , 1 . 318 , 0 . 876 , 1 . 821c0 . 378 , 0 . 511 , 0 . 844 , 0 . 908 , 1 . 382 , 1 . 179c0 . 538 , 0 . 27 , 1 . 136 , 0 . 407 , 1 . 779 , 0 . 407 c0 . 642 , 0 , 1 . 24-0 . 137 , 1 . 778-0 . 408c0 . 538-0 . 27 , 1 . 003-0 . 667 , 1 . 382-1 . 178c0 . 372-0 . 503 , 0 . 667-1 . 115 , 0 . 876-1 . 821 c0 . 208-0 . 7 , 0 . 314-1 . 502 , 0 . 314-2 . 386c0-0 . 873-0 . 105-1 . 667-0 . 314-2 . 363C36 . 988 , 2 . 631 , 36 . 692 , 2 . 028 , 36 . 319 , 1 . 541z M51 . 29 , 8 . 346 c-0 . 052-0 . 058-0 . 125-0 . 092-0 . 203-0 . 092c-0 . 077 , 0-0 . 151 , 0 . 033-0 . 203 , 0 . 092c-0 . 273 , 0 . 308-0 . 566 , 0 . 549-0 . 871 , 0 . 715 c-0 . 602 , 0 . 33-1 . 469 , 0 . 308-2 . 099 , 0 . 002c-0 . 326-0 . 159-0 . 608-0 . 387-0 . 841-0 . 681c-0 . 236-0 . 299-0 . 423-0 . 675-0 . 554-1 . 116 c-0 . 134-0 . 45-0 . 203-0 . 968-0 . 203-1 . 539c0-0 . 56 , 0 . 068-1 . 07 , 0 . 203-1 . 515c0 . 132-0 . 437 , 0 . 316-0 . 81 , 0 . 548-1 . 111 c0 . 227-0 . 293 , 0 . 504-0 . 522 , 0 . 825-0 . 68c0 . 614-0 . 302 , 1 . 45-0 . 317 , 2 . 02-0 . 032c0 . 283 , 0 . 142 , 0 . 543 , 0 . 333 , 0 . 775 , 0 . 568 c0 . 054 , 0 . 054 , 0 . 147 , 0 . 088 , 0 . 2 , 0 . 081c0 . 075-0 . 002 , 0 . 146-0 . 036 , 0 . 196-0 . 092l1 . 03-1 . 161c0 . 098-0 . 11 , 0 . 094-0 . 278-0 . 01-0 . 383 c-0 . 355-0 . 361-0 . 799-0 . 687-1 . 317-0 . 968c-1 . 105-0 . 597-2 . 643-0 . 547-3 . 841-0 . 044c-0 . 621 , 0 . 262-1 . 165 , 0 . 648-1 . 618 , 1 . 149 c-0 . 451 , 0 . 498-0 . 809 , 1 . 113-1 . 064 , 1 . 827c-0 . 253 , 0 . 71-0 . 381 , 1 . 521-0 . 381 , 2 . 408c0 , 0 . 899 , 0 . 128 , 1 . 712 , 0 . 381 , 2 . 417 c0 . 255 , 0 . 709 , 0 . 614 , 1 . 317 , 1 . 066 , 1 . 805c0 . 454 , 0 . 489 , 0 . 993 , 0 . 865 , 1 . 603 , 1 . 115c0 . 607 , 0 . 249 , 1 . 268 , 0 . 374 , 1 . 966 , 0 . 374 c0 . 695 , 0 , 1 . 333-0 . 142 , 1 . 897-0 . 423c0 . 559-0 . 279 , 1 . 068-0 . 684 , 1 . 513-1 . 204c0 . 09-0 . 106 , 0 . 089-0 . 264-0 . 004-0 . 368L51 . 29 , 8 . 346z M64 . 109 , 4 . 608l3 . 075-3 . 966c0 . 065-0 . 083 , 0 . 077-0 . 198 , 0 . 031-0 . 293c-0 . 045-0 . 096-0 . 141-0 . 157-0 . 245-0 . 157h-2 . 046 c-0 . 084 , 0-0 . 163 , 0 . 039-0 . 215 , 0 . 106l-3 . 254 , 4 . 218V0 . 47c0-0 . 153-0 . 123-0 . 277-0 . 274-0 . 277h-1 . 855c-0 . 151 , 0-0 . 274 , 0 . 124-0 . 274 , 0 . 277 v10 . 546c0 , 0 . 153 , 0 . 122 , 0 . 278 , 0 . 274 , 0 . 278h1 . 855c0 . 151 , 0 , 0 . 274-0 . 125 , 0 . 274-0 . 278V8 . 034l1 . 185-1 . 483l2 . 392 , 4 . 594 c0 . 048 , 0 . 091 , 0 . 141 , 0 . 148 , 0 . 242 , 0 . 148h2 . 046c0 . 097 , 0 , 0 . 186-0 . 052 , 0 . 236-0 . 138c0 . 049-0 . 085 , 0 . 05-0 . 19 , 0 . 003-0 . 276L64 . 109 , 4 . 608z M81 . 006 , 6 . 088c-0 . 218-0 . 244-0 . 478-0 . 462-0 . 773-0 . 647c-0 . 286-0 . 179-0 . 606-0 . 339-0 . 94-0 . 47l-1 . 368-0 . 598 c-0 . 235-0 . 097-0 . 461-0 . 189-0 . 679-0 . 276c-0 . 196-0 . 079-0 . 371-0 . 169-0 . 516-0 . 27c-0 . 134-0 . 092-0 . 24-0 . 197-0 . 315-0 . 311 c-0 . 065-0 . 099-0 . 097-0 . 22-0 . 097-0 . 369c0-0 . 297 , 0 . 112-0 . 514 , 0 . 351-0 . 683c0 . 263-0 . 187 , 0 . 64-0 . 281 , 1 . 12-0 . 281 c0 . 437 , 0 , 0 . 833 , 0 . 074 , 1 . 179 , 0 . 22c0 . 355 , 0 . 151 , 0 . 702 , 0 . 36 , 1 . 03 , 0 . 623c0 . 116 , 0 . 094 , 0 . 287 , 0 . 074 , 0 . 381-0 . 044l0 . 952-1 . 193 c0 . 091-0 . 114 , 0 . 079-0 . 279-0 . 026-0 . 38c-0 . 456-0 . 429-0 . 993-0 . 775-1 . 597-1 . 028c-1 . 11
< / 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 >
< 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 >
<!-- -->
< li class = "" > < a href = "/core/naming/comparison.html" > Naming system feature comparison< / a > < / li >
< / ul >
< h5 > Tutorials & Cookbooks< / h5 >
< ul class = "uk-nav uk-nav-default doc-nav" >
<!-- -->
< li class = "" > < a href = "/core/naming/tutorial_subdomains.html" > Subdomain Design and Implementation< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/naming/search.html" > How to build a Profile Search Index< / 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/creationhowto.html" > Creating a Namespace< / a > < / li >
<!-- -->
< li class = "uk-active" > < 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 >
<!-- -->
< li class = "" > < a href = "/core/naming/forks.html" > BNS Forks< / a > < / li >
< / ul >
< h5 > Atlas< / h5 >
< ul class = "uk-nav uk-nav-default doc-nav" >
<!-- -->
< li class = "" > < a href = "/core/atlas/overview.html" > Overview of the Atlas network< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/atlas/howitworks.html" > How Atlas Works< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/atlas/howtouse.html" > How to Use the Atlas Network< / a > < / li >
< / ul >
< h5 > Reference< / h5 >
< ul class = "uk-nav uk-nav-default doc-nav" >
<!-- -->
< li class = "" > < a href = "/common/javascript_ref.html" > Blockstack Javascript Reference< / a > < / li >
<!-- -->
< li class = "" > < a href = "/common/core_ref.html" > Blockstack CORE API< / a > < / li >
<!-- -->
< li class = "" > < a href = "/core/faq_technical.html" > Blockstack Technical FAQ< / a > < / li >
< / ul >
<!-- -->
< / div >
< / div >
< div class = "uk-width-1-1 uk-width-expand@m" >
< article markdown = "span" class = "uk-article" >
< h1 class = "uk-article-title" > Resolve a name< / 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-09-14T08:59:34-07:00" itemprop = "datePublished" >
< a " target = "_blank" href = "https://github.com/blockstack/blockstack-core/blob/master/docs/resolving.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 > Sep 14, 2018
< / time >
< / div >
< div markdown = "span" class = "article-content" >
< p class = "no_toc" > This section explains resolving BNS names and provides instructions for methods
you can use to accomplish namespace resolution.< / p >
< ul id = "markdown-toc" >
< li > < a href = "#understand-resolution" id = "markdown-toc-understand-resolution" > Understand resolution< / a > < / li >
< li > < a href = "#look-up-a-names-public-key-and-zone-file-reference" id = "markdown-toc-look-up-a-names-public-key-and-zone-file-reference" > Look up a name’s public key and zone file (reference)< / a > < / li >
< li > < a href = "#list-all-names-the-node-knows-about-reference" id = "markdown-toc-list-all-names-the-node-knows-about-reference" > List all names the node knows about (reference)< / a > < / li >
< li > < a href = "#look-up-the-history-of-states-a-name-was-in-reference" id = "markdown-toc-look-up-the-history-of-states-a-name-was-in-reference" > Look up the history of states a name was in (reference)< / a > < / li >
< li > < a href = "#look-up-the-list-of-names-owned-by-a-given-public-key-hash-reference" id = "markdown-toc-look-up-the-list-of-names-owned-by-a-given-public-key-hash-reference" > Look up the list of names owned by a given public key hash (reference)< / a > < / li >
< / ul >
< h2 id = "understand-resolution" > Understand resolution< / h2 >
< p > BNS names are bound to both public keys and to about 40Kb of off-chain state.
The off-chain state is encoded as a < a href = "https://en.wikipedia.org/wiki/Zone_file" > DNS zone file< / a > ,
which contains routing information for discovering the user’s Blockstack data
(such as their profile and app data, which are hosted in the < a href = "https://github.com/blockstack/gaia" > Gaia storage
system< / a > ).< / p >
< p > The blockchain is not used to store this information directly. Instead, the
blockchain stores the < em > public key hash< / em > and the < em > zone file hash< / em > . When
indexing the blockchain, each BNS node builds a database with
three columns: all the on-chain BNS names that have been registered, each
name’s public key hash, and each name’s zone file’s hash.
In addition, each BNS node maintains the < em > transaction history< / em > of each name.
A developer can resolve a name to any configuration it was in at any prior
point in time.< / p >
< p > Below is an example name table pulled from a live BNS node:< / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Public key hash< / th >
< th > Zone File Hash< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > < code class = "highlighter-rouge" > ryan.id< / code > < / td >
< td > < code class = "highlighter-rouge" > 15BcxePn59Y6mYD2fRLCLCaaHScefqW2No< / code > < / td >
< td > < code class = "highlighter-rouge" > a455954b3e38685e487efa41480beeb315f4ec65< / code > < / td >
< / tr >
< tr >
< td > < code class = "highlighter-rouge" > muneeb.id< / code > < / td >
< td > < code class = "highlighter-rouge" > 1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs< / code > < / td >
< td > < code class = "highlighter-rouge" > 37aecf837c6ae9bdc9dbd98a268f263dacd00361< / code > < / td >
< / tr >
< tr >
< td > < code class = "highlighter-rouge" > jude.id< / code > < / td >
< td > < code class = "highlighter-rouge" > 16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg< / code > < / td >
< td > < code class = "highlighter-rouge" > b6e99200125e70d634b17fe61ce55b09881bfafd< / code > < / td >
< / tr >
< tr >
< td > < code class = "highlighter-rouge" > verified.podcast< / code > < / td >
< td > < code class = "highlighter-rouge" > 1MwPD6dH4fE3gQ9mCov81L1DEQWT7E85qH< / code > < / td >
< td > < code class = "highlighter-rouge" > 6701ce856620d4f2f57cd23b166089759ef6eabd< / code > < / td >
< / tr >
< tr >
< td > < code class = "highlighter-rouge" > cicero.res_publica.id< / code > < / td >
< td > < code class = "highlighter-rouge" > 1EtE77Aa5AA8etzF2irk56vvkS4v7rZ7PE< / code > < / td >
< td > < code class = "highlighter-rouge" > 7e4ac75f9d79ba9d5d284fac19617497433b832d< / code > < / td >
< / tr >
< tr >
< td > < code class = "highlighter-rouge" > podsaveamerica.verified.podcast< / code > < / td >
< td > < code class = "highlighter-rouge" > 1MwPD6dH4fE3gQ9mCov81L1DEQWT7E85qH< / code > < / td >
< td > < code class = "highlighter-rouge" > 0d6f090db8945aa0e60759f9c866b17645893a95< / code > < / td >
< / tr >
< / tbody >
< / table >
< p > In practice, the zone file hash is the < code class = "highlighter-rouge" > RIPEMD160< / code > hash of the < code class = "highlighter-rouge" > SHA256< / code > hash of
the zone file, and the public key is the < code class = "highlighter-rouge" > base58check< / code > -encoded < code class = "highlighter-rouge" > RIPEMD160< / code > hash
of the double-< code class = "highlighter-rouge" > SHA256< / code > hash of the ECDSA public key (i.e. a Bitcoin address).< / p >
< p > The BNS consensus rules ensure that
a BNS name can only be registered if it is not already taken, and that only the
user who owns the name’s private key can change its public key hash or zone file
hash. This means that a name’s public key and zone file can be stored anywhere,
since they can be authenticated using the hashes discovered by indexing the
blockchain under the BNS consensus rules.< / p >
< p > BNS nodes implement a decentralized storage system for zone files called the
< a href = "/core/atlas/overview.html" > Atlas network< / a > . In this system, BNS nodes eagerly replicate
all the zone files they know about to one another, so that eventually every BNS
node has a full replica of all zone files.< / p >
< p > The public keys for names are stored off-chain in < a href = "https://github.com/blockstack/gaia" > Gaia< / a > .
The user controls where their public keys are hosted using the zone file
contents (if they are hosted online anywhere at all).< / p >
< p > Developers can query this table via the BNS API. The API offers routes
to do the following:< / p >
< h2 id = "look-up-a-names-public-key-and-zone-file-reference" > Look up a name’s public key and zone file (< a href = "https://core.blockstack.org/#name-querying-get-name-info" > reference< / a > )< / h2 >
< div class = "language-bash highlighter-rouge" > < pre class = "highlight" > < code > < span class = "gp" > $ < / span > curl https://core.blockstack.org/v1/names/muneeb.id
< span class = "o" > {< / span >
< span class = "s2" > "address"< / span > : < span class = "s2" > "1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs"< / span > ,
< span class = "s2" > "blockchain"< / span > : < span class = "s2" > "bitcoin"< / span > ,
< span class = "s2" > "expire_block"< / span > : 599266,
< span class = "s2" > "last_txid"< / span > : < span class = "s2" > "7e16e8688ca0413a398bbaf16ad4b10d3c9439555fc140f58e5ab4e50793c476"< / span > ,
< span class = "s2" > "status"< / span > : < span class = "s2" > "registered"< / span > ,
< span class = "s2" > "zonefile"< / span > : < span class = "s2" > "< / span > < span class = "nv" > $ORIGIN< / span > < span class = "s2" > muneeb.id< / span > < span class = "se" > \n< / span > < span class = "nv" > $TTL< / span > < span class = "s2" > 3600< / span > < span class = "se" > \n< / span > < span class = "s2" > _http._tcp URI 10 1 < / span > < span class = "se" > \"< / span > < span class = "s2" > https://gaia.blockstack.org/hub/1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs/0/profile.json< / span > < span class = "se" > \"\n< / span > < span class = "s2" > "< / span > ,
< span class = "s2" > "zonefile_hash"< / span > : < span class = "s2" > "37aecf837c6ae9bdc9dbd98a268f263dacd00361"< / span >
< span class = "o" > }< / span >
< / code > < / pre >
< / div >
< p > Note that the < code class = "highlighter-rouge" > zonefile< / code > field is given with the off-chain data that hashes
to the < code class = "highlighter-rouge" > zonefile_hash< / code > field.< / p >
< h2 id = "list-all-names-the-node-knows-about-reference" > List all names the node knows about (< a href = "https://core.blockstack.org/#name-querying-get-all-names" > reference< / a > )< / h2 >
< div class = "language-bash highlighter-rouge" > < pre class = "highlight" > < code > < span class = "gp" > $ < / span > curl https://core.blockstack.org/v1/names?page< span class = "o" > =< / span > 0
< span class = "o" > [< / span >
< span class = "s2" > "judecn.id"< / span > ,
< span class = "s2" > "3.id"< / span > ,
< span class = "s2" > "4.id"< / span > ,
< span class = "s2" > "8.id"< / span > ,
< span class = "s2" > "e.id"< / span > ,
< span class = "s2" > "h.id"< / span > ,
< span class = "s2" > "5.id"< / span > ,
< span class = "s2" > "9.id"< / span > ,
< span class = "s2" > "i.id"< / span > ,
< span class = "s2" > "l.id"< / span > ,
< span class = "s2" > "p.id"< / span > ,
< span class = "s2" > "w.id"< / span > ,
< span class = "s2" > "ba.id"< / span > ,
< span class = "s2" > "df.id"< / span > ,
...
< span class = "o" > ]< / span >
< / code > < / pre >
< / div >
< p > Each page returns 100 names. While no specific ordering is mandated by the
protocol, the reference implementation orders names by their order of creation
in the blockchain.< / p >
< h2 id = "look-up-the-history-of-states-a-name-was-in-reference" > Look up the history of states a name was in (< a href = "https://core.blockstack.org/#name-querying-name-history" > reference< / a > )< / h2 >
< div class = "language-bash highlighter-rouge" > < pre class = "highlight" > < code > < span class = "gp" > $ < / span > curl https://core.blockstack.org/v1/names/patrickstanley.id/history
< span class = "o" > {< / span >
< span class = "s2" > "445838"< / span > : < span class = "o" > [< / span >
< span class = "o" > {< / span >
< span class = "s2" > "address"< / span > : < span class = "s2" > "1occgbip7tFDXX9MvzQhcnTUUjcVX2dYK"< / span > ,
< span class = "s2" > "block_number"< / span > : 445838,
< span class = "s2" > "burn_address"< / span > : < span class = "s2" > "1111111111111111111114oLvT2"< / span > ,
< span class = "s2" > "consensus_hash"< / span > : < span class = "s2" > "7b696b6f4060b792d41912068944d73b"< / span > ,
< span class = "s2" > "op"< / span > : < span class = "s2" > "?"< / span > ,
< span class = "s2" > "op_fee"< / span > : 25000,
< span class = "s2" > "opcode"< / span > : < span class = "s2" > "NAME_PREORDER"< / span > ,
< span class = "s2" > "preorder_hash"< / span > : < span class = "s2" > "26bf7874706ac761afdd403ed6b3b9578fb01a34"< / span > ,
< span class = "s2" > "sender"< / span > : < span class = "s2" > "76a91408d0dd44c1f0a3a4f0957ae95901929d7d66d55788ac"< / span > ,
< span class = "s2" > "sender_pubkey"< / span > : < span class = "s2" > "039a8948d339ecbff44cf426cb85d90fce876f1658d385cdc47f007f279be626ea"< / span > ,
< span class = "s2" > "txid"< / span > : < span class = "s2" > "6730ae09574d5935ffabe3dd63a9341ea54fafae62fde36c27738e9ee9c4e889"< / span > ,
< span class = "s2" > "vtxindex"< / span > : 40
< span class = "o" > }< / span >
< span class = "o" > ]< / span > ,
< span class = "s2" > "445851"< / span > : < span class = "o" > [< / span >
< span class = "o" > {< / span >
< span class = "s2" > "address"< / span > : < span class = "s2" > "17CbHgTgBG3kLedXNneEKBkCTgW2fyrnUD"< / span > ,
< span class = "s2" > "block_number"< / span > : 445838,
< span class = "s2" > "consensus_hash"< / span > : null,
< span class = "s2" > "first_registered"< / span > : 445851,
< span class = "s2" > "importer"< / span > : null,
< span class = "s2" > "importer_address"< / span > : null,
< span class = "s2" > "last_creation_op"< / span > : < span class = "s2" > "?"< / span > ,
< span class = "s2" > "last_renewed"< / span > : 445851,
< span class = "s2" > "name"< / span > : < span class = "s2" > "patrickstanley.id"< / span > ,
< span class = "s2" > "name_hash128"< / span > : < span class = "s2" > "683a3e1ee5f0296833c56e481cf41b77"< / span > ,
< span class = "s2" > "namespace_block_number"< / span > : 373601,
< span class = "s2" > "namespace_id"< / span > : < span class = "s2" > "id"< / span > ,
< span class = "s2" > "op"< / span > : < span class = "s2" > ":"< / span > ,
< span class = "s2" > "op_fee"< / span > : 25000,
< span class = "s2" > "opcode"< / span > : < span class = "s2" > "NAME_REGISTRATION"< / span > ,
< span class = "s2" > "preorder_block_number"< / span > : 445838,
< span class = "s2" > "preorder_hash"< / span > : < span class = "s2" > "26bf7874706ac761afdd403ed6b3b9578fb01a34"< / span > ,
< span class = "s2" > "revoked"< / span > : < span class = "nb" > false< / span > ,
< span class = "s2" > "sender"< / span > : < span class = "s2" > "76a9144401f3be5311585ea519c1cb471a8dc7b02fd6ee88ac"< / span > ,
< span class = "s2" > "sender_pubkey"< / span > : < span class = "s2" > "039a8948d339ecbff44cf426cb85d90fce876f1658d385cdc47f007f279be626ea"< / span > ,
< span class = "s2" > "transfer_send_block_id"< / span > : null,
< span class = "s2" > "txid"< / span > : < span class = "s2" > "55b8b42fc3e3d23cbc0f07d38edae6a451dfc512b770fd7903725f9e465b2925"< / span > ,
< span class = "s2" > "value_hash"< / span > : null,
< span class = "s2" > "vtxindex"< / span > : 54
< span class = "o" > }< / span >
< span class = "o" > ]< / span > ,
< span class = "s2" > "445873"< / span > : < span class = "o" > [< / span >
< span class = "o" > {< / span >
< span class = "s2" > "address"< / span > : < span class = "s2" > "17CbHgTgBG3kLedXNneEKBkCTgW2fyrnUD"< / span > ,
< span class = "s2" > "block_number"< / span > : 445838,
< span class = "s2" > "consensus_hash"< / span > : < span class = "s2" > "18b8d69f0182b89ccb1aa536f83be18a"< / span > ,
< span class = "s2" > "first_registered"< / span > : 445851,
< span class = "s2" > "importer"< / span > : null,
< span class = "s2" > "importer_address"< / span > : null,
< span class = "s2" > "last_creation_op"< / span > : < span class = "s2" > "?"< / span > ,
< span class = "s2" > "last_renewed"< / span > : 445851,
< span class = "s2" > "name"< / span > : < span class = "s2" > "patrickstanley.id"< / span > ,
< span class = "s2" > "name_hash128"< / span > : < span class = "s2" > "683a3e1ee5f0296833c56e481cf41b77"< / span > ,
< span class = "s2" > "namespace_block_number"< / span > : 373601,
< span class = "s2" > "namespace_id"< / span > : < span class = "s2" > "id"< / span > ,
< span class = "s2" > "op"< / span > : < span class = "s2" > "+"< / span > ,
< span class = "s2" > "op_fee"< / span > : 25000,
< span class = "s2" > "opcode"< / span > : < span class = "s2" > "NAME_UPDATE"< / span > ,
< span class = "s2" > "preorder_block_number"< / span > : 445838,
< span class = "s2" > "preorder_hash"< / span > : < span class = "s2" > "26bf7874706ac761afdd403ed6b3b9578fb01a34"< / span > ,
< span class = "s2" > "revoked"< / span > : < span class = "nb" > false< / span > ,
< span class = "s2" > "sender"< / span > : < span class = "s2" > "76a9144401f3be5311585ea519c1cb471a8dc7b02fd6ee88ac"< / span > ,
< span class = "s2" > "sender_pubkey"< / span > : < span class = "s2" > "039a8948d339ecbff44cf426cb85d90fce876f1658d385cdc47f007f279be626ea"< / span > ,
< span class = "s2" > "transfer_send_block_id"< / span > : null,
< span class = "s2" > "txid"< / span > : < span class = "s2" > "dc478659fc684a1a6e1e09901971e82de11f4dfe2b32a656700bf9a3b6030719"< / span > ,
< span class = "s2" > "value_hash"< / span > : < span class = "s2" > "02af0ef21161ad06b0923106f40b994b9e4c1614"< / span > ,
< span class = "s2" > "vtxindex"< / span > : 95
< span class = "o" > }< / span >
< span class = "o" > ]< / span > ,
< span class = "s2" > "445884"< / span > : < span class = "o" > [< / span >
< span class = "o" > {< / span >
< span class = "s2" > "address"< / span > : < span class = "s2" > "1GZqrVbamkaE6YNveJFWK6cDrCy6bXyS6b"< / span > ,
< span class = "s2" > "block_number"< / span > : 445838,
< span class = "s2" > "consensus_hash"< / span > : < span class = "s2" > "18b8d69f0182b89ccb1aa536f83be18a"< / span > ,
< span class = "s2" > "first_registered"< / span > : 445851,
< span class = "s2" > "importer"< / span > : null,
< span class = "s2" > "importer_address"< / span > : null,
< span class = "s2" > "last_creation_op"< / span > : < span class = "s2" > "?"< / span > ,
< span class = "s2" > "last_renewed"< / span > : 445851,
< span class = "s2" > "name"< / span > : < span class = "s2" > "patrickstanley.id"< / span > ,
< span class = "s2" > "name_hash128"< / span > : < span class = "s2" > "683a3e1ee5f0296833c56e481cf41b77"< / span > ,
< span class = "s2" > "namespace_block_number"< / span > : 373601,
< span class = "s2" > "namespace_id"< / span > : < span class = "s2" > "id"< / span > ,
< span class = "s2" > "op"< / span > : < span class = "s2" > "> > "< / span > ,
< span class = "s2" > "op_fee"< / span > : 25000,
< span class = "s2" > "opcode"< / span > : < span class = "s2" > "NAME_TRANSFER"< / span > ,
< span class = "s2" > "preorder_block_number"< / span > : 445838,
< span class = "s2" > "preorder_hash"< / span > : < span class = "s2" > "26bf7874706ac761afdd403ed6b3b9578fb01a34"< / span > ,
< span class = "s2" > "revoked"< / span > : < span class = "nb" > false< / span > ,
< span class = "s2" > "sender"< / span > : < span class = "s2" > "76a914aabffa6dd90d731d3a349f009323bb312483c15088ac"< / span > ,
< span class = "s2" > "sender_pubkey"< / span > : null,
< span class = "s2" > "transfer_send_block_id"< / span > : 445875,
< span class = "s2" > "txid"< / span > : < span class = "s2" > "7a0a3bb7d39b89c3638abc369c85b5c028d0a55d7804ba1953ff19b0125f3c24"< / span > ,
< span class = "s2" > "value_hash"< / span > : < span class = "s2" > "02af0ef21161ad06b0923106f40b994b9e4c1614"< / span > ,
< span class = "s2" > "vtxindex"< / span > : 16
< span class = "o" > }< / span >
< span class = "o" > ]< / span >
< span class = "o" > }< / span >
< / code > < / pre >
< / div >
< p > All of the above information is extracted from the blockchain. Each top-level
field encodes the states the name transitioned to at the given block height (e.g.
445838, 445851, 445873, adn 445884). At each block height, the name’s zone file
hashes are returned in the order they were discovered in the blockchain.< / p >
< p > Each name state contains a lot of ancillary data that is used internally by
other API calls and client libraries. The relevant fields for this document’s
scope are:< / p >
< ul >
< li > < code class = "highlighter-rouge" > address< / code > : This is the base58check-encoded public key hash.< / li >
< li > < code class = "highlighter-rouge" > name< / code > : This is the name queried.< / li >
< li > < code class = "highlighter-rouge" > value_hash< / code > : This is the zone file hash.< / li >
< li > < code class = "highlighter-rouge" > opcode< / code > : This is the type of transaction that was processed.< / li >
< li > < code class = "highlighter-rouge" > txid< / code > : This is the transaction ID in the underlying blockchain.< / li >
< / ul >
< p > The name’s < em > entire< / em > history is returned. This includes the history of the name
under its previous owner, if the name expired and was reregistered.< / p >
< h2 id = "look-up-the-list-of-names-owned-by-a-given-public-key-hash-reference" > Look up the list of names owned by a given public key hash (< a href = "https://core.blockstack.org/#name-querying-get-names-owned-by-address" > reference< / a > )< / h2 >
< div class = "language-bash highlighter-rouge" > < pre class = "highlight" > < code > < span class = "gp" > $ < / span > curl https://core.blockstack.org/v1/addresses/bitcoin/16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg
< span class = "o" > {< / span >
< span class = "s2" > "names"< / span > : < span class = "o" > [< / span >
< span class = "s2" > "judecn.id"< / span > ,
< span class = "s2" > "patrickstanley1.id"< / span > ,
< span class = "s2" > "abcdefgh123456.id"< / span > ,
< span class = "s2" > "duckduckgo_tor.id"< / span > ,
< span class = "s2" > "jude.id"< / span > ,
< span class = "s2" > "blockstacknewyear2017.id"< / span > ,
< span class = "s2" > "jude.statism.id"< / span >
< span class = "o" > ]< / span >
< span class = "o" > }< / span >
< / code > < / pre >
< / div >
< p > Note that this API endpoint includes names and
< a href = "#bns-subdomains" > subdomains< / a > .< / p >
< div class = "share uk-text-center" >
< a href = "https://twitter.com/intent/tweet?text=Resolve a name&url=https://docs.blockstack.org/core/naming/resolving.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%2Fdocs.blockstack.org%2Fcore%2Fnaming%2Fresolving.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://docs.blockstack.org/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" > © 2018 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'
},
results: {
embedConfig: undefined, // {'url':undefined,'contentBlock':'.page-content-body'}, // if url is given the page will change to that URL and look for the content block there to insert the results
fullScreenConfig: undefined, // {trigger: '#ss360-search-trigger', caption: 'Search this site'}, trigger is the CSS selector to the element that starts the search full screen overlay and searchCaption the caption on the full screen search page
caption: 'Found #COUNT# search results for \"#QUERY#\"', // the caption of the search results
group: true, // whether results should be grouped if content groups are available
filters: undefined,
num: 96, // the maximum number of search results to be shown
highlightQueryTerms: true, // whether to highlight the query terms in search results
moreResultsButton: "Show more results", // HTML for the more results button, all results will be shown if this is null
noResultsText: 'Sorry, we have not found any matches for your query.', // the text to show when there are no results
queryCorrectionText: 'Did you mean "#CORRECTION#"?',
searchQueryParamName: 'ss360Query', // the name of the search query parameter
linksOpenNewTab: false, // should clicking on the result links open a new tab/window?
showSearchBoxLayover: true, //whether to show search box in search result layover
moreResultsPagingSize: 12, // the number of new results to show each time the more results button is pressed (max: 24)
orderByRelevanceText: "Relevance" // the text to be shown in order select box to describe 'order by relevance' option
},
suggestions: {
show: true, // whether to show search suggestions
maxQuerySuggestions: 3, // the maximum number of query suggestions
querySuggestionHeadline: undefined, // the headline of the query suggestions, leave blank if no headline should be shown
emptyQuerySuggestions: undefined,
showImages: false, // show images in search suggestions
num: 6, // the maximum number of search suggestions to be shown
minChars: 3, // minimum number of characters before the suggestions shows, default: 3,
maxWidth: 'auto', // the maximum width of the suggest box, default: as wide as the input box, at least 275px
throttleTime: 300, // the number of milliseconds before the suggest is triggered after finished input, default: 300ms
extraHtml: undefined, // extra HTML code that is shown in each search suggest, you can even show values of datapoints here,
highlight: true, // whether matched words should be highlighted, default: true
}
};
< / script >
< script src = "https://cdn.sitesearch360.com/sitesearch360-v11.min.js" async > < / script >
< / body >
< / html >