mirror of https://github.com/lukechilds/docs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
678 lines
26 KiB
678 lines
26 KiB
<!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>Blockstack Naming Service (BNS) | Blockstack</title>
|
|
<meta name="generator" content="Jekyll v3.8.3" />
|
|
<meta property="og:title" content="Blockstack Naming Service (BNS)" />
|
|
<meta name="author" content="Blockstack" />
|
|
<meta property="og:locale" content="en_US" />
|
|
<meta name="description" content="Blockstack Naming Service (BNS)" />
|
|
<meta property="og:description" content="Blockstack Naming Service (BNS)" />
|
|
<link rel="canonical" href="https://zbabystack.netlify.com/core/naming/introduction.html" />
|
|
<meta property="og:url" content="https://zbabystack.netlify.com/core/naming/introduction.html" />
|
|
<meta property="og:site_name" content="Blockstack" />
|
|
<meta property="og:type" content="article" />
|
|
<meta property="article:published_time" content="2018-09-10T15:46:41-07:00" />
|
|
<script type="application/ld+json">
|
|
{"description":"Blockstack Naming Service (BNS)","author":{"@type":"Person","name":"Blockstack"},"@type":"BlogPosting","url":"https://zbabystack.netlify.com/core/naming/introduction.html","headline":"Blockstack Naming Service (BNS)","dateModified":"2018-09-10T15:46:41-07:00","datePublished":"2018-09-10T15:46:41-07:00","mainEntityOfPage":{"@type":"WebPage","@id":"https://zbabystack.netlify.com/core/naming/introduction.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/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://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>
|
|
|
|
|
|
<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="uk-active"><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_creation.html">Create and Launch a Namespace</a></li>
|
|
|
|
|
|
<!-- -->
|
|
|
|
<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>
|
|
|
|
|
|
<!-- -->
|
|
|
|
<li class=""><a href="/core/naming/openbazaar.html">How to link your OpenBazaar GUID to your Blockstack ID</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=""><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>Forks and Dids</h5>
|
|
<ul class="uk-nav uk-nav-default doc-nav">
|
|
|
|
|
|
<!-- -->
|
|
|
|
<li class=""><a href="/core/naming/forks.html">BNS Forks</a></li>
|
|
|
|
|
|
<!-- -->
|
|
|
|
<li class=""><a href="/core/naming/did.html">Decentralized Identifiers (DIDs)</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 class="uk-article">
|
|
|
|
<h1 class="uk-article-title">Blockstack Naming Service (BNS)</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-10T15:46:41-07:00" itemprop="datePublished">
|
|
|
|
|
|
|
|
<a "target="_blank" href="https://github.com/blockstack/blockstack-core/blob/master/docs/introduction.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 10, 2018
|
|
</time>
|
|
|
|
</div>
|
|
|
|
<div class="article-content">
|
|
|
|
<p class="no_toc">This document gives an overview of how the Blockstack Naming Service work. This
|
|
section introduces you to BNS and explains the following concepts:</p>
|
|
|
|
<ul id="markdown-toc">
|
|
<li><a href="#what-is-bns" id="markdown-toc-what-is-bns">What is BNS</a></li>
|
|
<li><a href="#motivation-behind-naming-services" id="markdown-toc-motivation-behind-naming-services">Motivation behind naming services</a></li>
|
|
<li><a href="#organization-of-bns" id="markdown-toc-organization-of-bns">Organization of BNS</a></li>
|
|
</ul>
|
|
|
|
<p>The (<a href="https://github.com/blockstack/blockstack-core">Blockstack Core</a>)
|
|
repository is the reference implementation of the Blockstack Naming Service.</p>
|
|
|
|
<h2 id="what-is-bns">What is BNS</h2>
|
|
|
|
<p>The Blockstack Naming Service (BNS) is a network system that binds names
|
|
to off-chain state without relying on any central points of control.
|
|
It does so by embedding a log of its control-plane messages within a public blockchain, like Bitcoin.</p>
|
|
|
|
<p>Each BNS peer determines the state of each name by indexing these specially-crafted
|
|
transactions. In doing so, each peer independently calculates the same global
|
|
name state.</p>
|
|
|
|
<p>Names in BNS have three properties:</p>
|
|
|
|
<ul>
|
|
<li><strong>Names are globally unique.</strong> The protocol does not allow name collisions, and all
|
|
well-behaved nodes resolve a given name to the same state.</li>
|
|
<li><strong>Names are human-meaningful.</strong> Each name is chosen by its creator.</li>
|
|
<li><strong>Names are strongly-owned.</strong> Only the name’s owner can change the state it
|
|
resolves to. Specifically, a name is owned by one or more ECDSA private keys.</li>
|
|
</ul>
|
|
|
|
<p>Internally, a BNS node implements a replicated name database. Each BNS node keeps itself
|
|
synchronized to all of the other ones in the world, so queries on one BNS node
|
|
will be the same on other nodes. BNS nodes allow a name’s owner to bind
|
|
up to 40Kb of off-chain state to their name, which will be replicated to all
|
|
BNS nodes via the <a href="atlas_network.md">Atlas network</a>.</p>
|
|
|
|
<p>BNS nodes extract the name database log from an underlying blockchain (Blockstack
|
|
Core currently uses Bitcoin, and had used Namecoin in the past).
|
|
BNS uses the blockchain to establish a shared “ground truth” for the system: as long as
|
|
two nodes have the same view of the blockchain, then they will build up the same
|
|
database.</p>
|
|
|
|
<p>The biggest consequence for developers is that in BNS, reading name state is
|
|
fast and cheap but writing name state is slow and expensive. This is because
|
|
registering and modifying names requires one or more transactions to be sent to
|
|
the underlying blockchain, and BNS nodes will not process them until they are
|
|
sufficiently confirmed. Users and developers need to acquire and spend
|
|
the requisite cryptocurrency (i.e. Bitcoin) to send BNS transactions.</p>
|
|
|
|
<h2 id="motivation-behind-naming-services">Motivation behind naming services</h2>
|
|
|
|
<p>We rely on naming systems in everyday life, and they play a critical
|
|
role in many different applications. For example, when you look up a
|
|
friend on social media, you are using the platform’s naming service to resolve
|
|
their name to their profile. When you look up a website, you are using the
|
|
Domain Name Service to
|
|
resolve the hostname to its host’s IP address. When you check out a Git branch, you
|
|
are using your Git client to resolve the branch name to a commit hash.
|
|
When you look up someone’s PGP key on a keyserver, you are resolving
|
|
their key ID to their public key.</p>
|
|
|
|
<p>What kinds of things do we want to be true about names? In BNS, names are
|
|
globally unique, names are human-meaningful, and names are strongly-owned.
|
|
However, if you look at these examples, you’ll see that each of them only
|
|
guarantees <em>two</em> of these properties. This limits how useful they can be.</p>
|
|
|
|
<ul>
|
|
<li>In DNS and social media, names are globally unique and human-readable, but not
|
|
strongly-owned. The system operator has the
|
|
final say as to what each names resolves to.
|
|
<ul>
|
|
<li><strong>Problem</strong>: Clients must trust the system to make the right
|
|
choice in what a given name resolves to. This includes trusting that
|
|
no one but the system administrators can make these changes.</li>
|
|
</ul>
|
|
</li>
|
|
<li>In Git, branch names are human-meaningful
|
|
and strongly-owned, but not globally unique. Two different Git nodes may resolve the same
|
|
branch name to different unrelated repository states.
|
|
<ul>
|
|
<li><strong>Problem</strong>: Since names can refer to conflicting state, developers
|
|
have to figure out some other mechanism to resolve ambiguities. In Git’s
|
|
case, the user has to manually intervene.</li>
|
|
</ul>
|
|
</li>
|
|
<li>In PGP, names are key IDs. They are
|
|
are globally unique and cryptographically owned, but not human-readable. PGP
|
|
key IDs are derived from the keys they reference.
|
|
<ul>
|
|
<li><strong>Problem</strong>: These names are difficult for most users to
|
|
remember since they do not carry semantic information relating to their use in the system.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>BNS names have all three properties, and none of these problems. This makes it a
|
|
powerful tool for building all kinds of network applications. With BNS, we
|
|
can do the following and more:</p>
|
|
|
|
<ul>
|
|
<li>Build domain name services where hostnames can’t be hijacked.</li>
|
|
<li>Build social media platforms where user names can’t be stolen by phishers.</li>
|
|
<li>Build version control systems where repository branches do not conflict.</li>
|
|
<li>Build public-key infrastructure where it’s easy for users to discover and
|
|
remember each other’s keys.</li>
|
|
</ul>
|
|
|
|
<h1 id="organization-of-bns">Organization of BNS</h1>
|
|
|
|
<p>BNS names are organized into a global name hierarchy. There are three different
|
|
layers in this hierarchy related to naming:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p><strong>Namespaces</strong>. These are the top-level names in the hierarchy. An analogy
|
|
to BNS namespaces are DNS top-level domains. Existing BNS namespaces include
|
|
<code class="highlighter-rouge">.id</code>, <code class="highlighter-rouge">.podcast</code>, and <code class="highlighter-rouge">.helloworld</code>. All other names belong to exactly one
|
|
namespace. Anyone can create a namespace, but in order for the namespace
|
|
to be persisted, it must be <em>launched</em> so that anyone can register names in it.
|
|
Namespaces are not owned by their creators.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>BNS names</strong>. These are names whose records are stored directly on the
|
|
blockchain. The ownership and state of these names are controlled by sending
|
|
blockchain transactions. Example names include <code class="highlighter-rouge">verified.podcast</code> and
|
|
<code class="highlighter-rouge">muneeb.id</code>. Anyone can create a BNS name, as long as the namespace that
|
|
contains it exists already. The state for BNS names is usually stored in the <a href="atlas_network.md">Atlas
|
|
network</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>BNS subdomains</strong>. These are names whose records are stored off-chain,
|
|
but are collectively anchored to the blockchain. The ownership and state for
|
|
these names lives within the <a href="atlas_network.md">Atlas network</a>. While BNS
|
|
subdomains are owned by separate private keys, a BNS name owner must
|
|
broadcast their subdomain state. Example subdomains include <code class="highlighter-rouge">jude.personal.id</code>
|
|
and <code class="highlighter-rouge">podsaveamerica.verified.podcast</code>. Unlike BNS namespaces and names, the
|
|
state of BNS subdomains is <em>not</em> part of the blockchain consensus rules.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>A feature comparison matrix summarizing the similarities and differences
|
|
between these name objects is presented below:</p>
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th><strong>Namespaces</strong></th>
|
|
<th><strong>BNS names</strong></th>
|
|
<th><strong>BNS Subdomains</strong></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Globally unique</td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Human-meaningful</td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Owned by a private key</td>
|
|
<td> </td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Anyone can create</td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
<td>[1]</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Owner can update</td>
|
|
<td> </td>
|
|
<td>X</td>
|
|
<td>[1]</td>
|
|
</tr>
|
|
<tr>
|
|
<td>State hosted on-chain</td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
<td> </td>
|
|
</tr>
|
|
<tr>
|
|
<td>State hosted off-chain</td>
|
|
<td> </td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Behavior controlled by consensus rules</td>
|
|
<td>X</td>
|
|
<td>X</td>
|
|
<td> </td>
|
|
</tr>
|
|
<tr>
|
|
<td>May have an expiration date</td>
|
|
<td> </td>
|
|
<td>X</td>
|
|
<td> </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>[1] Requires the cooperation of a BNS name owner to broadcast its transactions</p>
|
|
|
|
<div class="share uk-text-center">
|
|
<a href="https://twitter.com/intent/tweet?text=Blockstack Naming Service (BNS)&url=https://zbabystack.netlify.com/core/naming/introduction.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%2Fintroduction.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">© 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'}
|
|
};
|
|
</script>
|
|
<script src="https://cdn.sitesearch360.com/sitesearch360-v11.min.js" async></script>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|
|
|