mirror of https://github.com/lukechilds/docs.git
moxiegirl
6 years ago
43 changed files with 1481 additions and 323 deletions
@ -0,0 +1,4 @@ |
|||||
|
# Docs |
||||
|
|
||||
|
- [Dependencies](/docs/dependencies.md) |
||||
|
- [Pixels to REM Units](/docs/px-rem.md) |
@ -0,0 +1,80 @@ |
|||||
|
# Dependencies |
||||
|
|
||||
|
### ReactJS |
||||
|
|
||||
|
ReactJS is a "declarative, efficient, and flexible JavaScript library for building user interfaces." |
||||
|
|
||||
|
- "**Just the UI**: Lots of people use React as the V in MVC. Since React makes no assumptions about the rest of your technology stack, it's easy to try it out on a small feature in an existing project." |
||||
|
- "**Virtual DOM**: React uses a virtual DOM diff implementation for ultra-high performance. It can also render on the server using Node.js — no heavy browser DOM required." |
||||
|
- "**Data flow**: React implements one-way reactive data flow which reduces boilerplate and is easier to reason about than traditional data binding." |
||||
|
|
||||
|
The ReactJS files are all located within `/app/js`, structured in the following manner: |
||||
|
|
||||
|
``` |
||||
|
/components |
||||
|
- Footer.js (Simple, static footer component rendered on all pages.) |
||||
|
- Header.js (Simple, static header component rendered on all pages.) |
||||
|
/pages |
||||
|
- HomePage.js (Example home page, serving as the default route.) |
||||
|
- NotFoundPage.js (Displayed any time the user requests a non-existent route.) |
||||
|
- SearchPage.js (Example search page to demonstrate navigation and individual pages.) |
||||
|
/utils |
||||
|
- APIUtils.js (General wrappers for API interaction via Superagent.) |
||||
|
- AuthAPI.js (Example functions for user authorization via a remote API.) |
||||
|
App.js (The main container component, rendered to the DOM and then responsible for rendering all pages.) |
||||
|
index.js (The main javascript file watched by Browserify, responsible for requiring the app and running the router.) |
||||
|
Routes.js (Defines the routing structure, along with each individual route path and handler.) |
||||
|
``` |
||||
|
|
||||
|
Each module you add to your project should be placed in the appropriate directory, and required in the necessary files. Once required, they will be automatically detected and compiled by Browserify (discussed later). |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### RefluxJS |
||||
|
|
||||
|
RefluxJS is a "simple library for unidirectional dataflow architecture inspired by ReactJS Flux." |
||||
|
|
||||
|
"The pattern is composed of actions and data stores, where actions initiate new data to pass through data stores before coming back to the view components again. If a view component has an event that needs to make a change in the application's data stores, they need to do so by signalling to the stores through the actions available." |
||||
|
|
||||
|
The RefluxJS files are also all locationed within `/app/js`, structured in the following manner: |
||||
|
|
||||
|
``` |
||||
|
/actions |
||||
|
- CurrentUserActions.js (Possible actions relevant to the current user. i.e. `checkAuth`, `login`, and `logout`.) |
||||
|
/stores |
||||
|
- CurrentUserStore.js (Responsible for storing the current user data, while listening to any `CurrentUserActions`.) |
||||
|
``` |
||||
|
|
||||
|
Each action or store you add to your project should be placed in the appropriate directory, and required in the necessary files. The necessary logic to trigger actions and listen to stores should also be added. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### React Router |
||||
|
|
||||
|
React Router is a "complete routing library for React." It uses the JSX syntax to easily define route URLs and handlers, providing an easy-to-understand architecture and thus makes it easy to add new pages and routes. |
||||
|
|
||||
|
The relevant files are all located within `/app/js`, structured in the following manner: |
||||
|
|
||||
|
``` |
||||
|
/pages (Each individual page to handle the defined routes and be rendered inside the app.) |
||||
|
App.js (The main component which is rendered to the DOM and responsible for rendering the current page.) |
||||
|
index.js (The main javascript file watched by Browserify, requiring the app and running the router.) |
||||
|
Routes.js (Defines the routing structure, along with each individual route path and handler.) |
||||
|
``` |
||||
|
|
||||
|
Any pages added to your project should be placed within the `app/js/pages` directory, and be required and assigned to a route inside `Routes.js`. If more complex nesting is required, any page can have a new `RouteHandler` as a child component. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### SASS |
||||
|
|
||||
|
SASS, standing for 'Syntactically Awesome Style Sheets', is a CSS extension language adding things like extending, variables, and mixins to the language. This boilerplate provides a barebones file structure for your styles, with explicit imports into `app/styles/main.scss`. A Gulp task (discussed later) is provided for compilation and minification of the stylesheets based on this file. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### Webpack |
||||
|
|
||||
|
Webpack bundles all of our code and assets and organizes any manipulation to |
||||
|
them with modules like `babel`. It also handles hot reloading in development, |
||||
|
and minification in production. You can find the configuration for it in |
||||
|
`webpack.config.js` in the root directory. |
@ -0,0 +1,46 @@ |
|||||
|
# Blockstack Human Interface Design Guide |
||||
|
|
||||
|
Blockstack is a progressive open source platform that values user experience and usercentric design. As a result of this passion we have developed design elements and recommendations to assist developers building on Blockstack to quickly and easily provide an optimal and consistent user experience. |
||||
|
|
||||
|
## Status Bar |
||||
|
The reasoning behind the Blockstack browser status bar is to provide users with an intuitive way to navigate back to their home screen and possibly other useful information. |
||||
|
|
||||
|
What we have discovered in building these new decentralized applications was that, if the developer is left with creating their own home screen button they will place it in a consistent position than it's application peers. |
||||
|
|
||||
|
The other secondary objective of the Blockstack browser status bar is to provide developers with a quick and easy way to implement this global standard. It is imperative that developers can quickly and easily grab a small snippet of code, paste it into their application and deploy. |
||||
|
|
||||
|
### Positioning & sizing |
||||
|
The Blockstack browser status bar is a appears along the upper edge of the screen with a full width. `width: 100%;`. And height of `height: 38px;`. |
||||
|
|
||||
|
Although the developer may choose to utilize either the `status-bar-light`, `status-bar status-bar-dark`, `status-bar status-bar-transparent-light` or `status-bar status-bar-transparent-dark` status bar, we highly recommend leaving the top 38px the space required for future information that may appear in the status bar. |
||||
|
|
||||
|
### Fonts |
||||
|
Size: Status Bar font size is 12px `font-size: 12px;`. The font is small as some elements are placed in the highest real estate regions of the Document Object Model (DOM). |
||||
|
Font-family: other than symbols, the font-family for the status bar is |
||||
|
``` |
||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; |
||||
|
``` |
||||
|
|
||||
|
_NOTE: Further research on this has revealed a strong case for going with a traditional [web safe font](https://en.wikipedia.org/wiki/Web_typography#Web-safe_fonts) such as **Arial** or even going with a **Helvetica** with a fall-back font of **Arial** would be better than setting the brand type to be a third party typeface that requires installation and/or use of an API._ |
||||
|
|
||||
|
### Symbols |
||||
|
The status bar utilizes symbols from the [Font Awesome](http://fontawesome.io/) desktop/web font. |
||||
|
|
||||
|
#### Current symbols |
||||
|
|
||||
|
| Symbol | Class Name | Cheat Sheet Visual | |
||||
|
| ------------- | ------------- | ------------- | |
||||
|
| **Home screen arrow** | `fa-angle-left []` | <img width="164" alt="screenshot 2017-03-17 16 08 25" src="https://cloud.githubusercontent.com/assets/1711854/24061005/16a01ad2-0b2c-11e7-87ea-969558bf2f5c.png"> | |
||||
|
|
||||
|
Reference: |
||||
|
- http://fontawesome.io/cheatsheet/ |
||||
|
|
||||
|
### Best practices |
||||
|
We highly recommend utilizing one of the 4 status bar options to choose from; |
||||
|
`status-bar status-bar-light` |
||||
|
`status-bar status-bar-dark` |
||||
|
`status-bar status-bar-transparent-light` |
||||
|
`status-bar status-bar-transparent-dark` |
||||
|
|
||||
|
<img width="1148" alt="screenshot 2017-03-23 15 30 25" src="https://cloud.githubusercontent.com/assets/1711854/24266578/a8923dd4-0fdd-11e7-9994-e6a5d564f6a4.png"> |
||||
|
|
@ -0,0 +1,71 @@ |
|||||
|
### The Blockstack Browser |
||||
|
|
||||
|
Blockstack is a new internet for decentralized apps. It reuses the transport layer, and below, of the traditional internet and focuses on decentralizing the application layer (Domain Name System, Public-key Infrastructure, auth protocols, data storage). |
||||
|
|
||||
|
The Blockstack network has been operational for years and the best way to experience it is by using the Blockstack Browser. More specifically, there is a hosted version that quickly gives a preview: |
||||
|
|
||||
|
* Hosted version of the Blockstack application: |
||||
|
* https://browser.blockstack.org |
||||
|
|
||||
|
We recommend that everyone should [download and install the Blockstack Browser](https://blockstack.org/install) for any serious use outside of a quick preview. |
||||
|
|
||||
|
You can think of the Blockstack Browser as a "gateway" to a new internet for decentralized apps. The Blockstack Browser is an application which allows a user to create and manage a decentralized Blockstack identity. This identity is used to authenticate and provide |
||||
|
user-controlled storage to decentralized web applications. |
||||
|
|
||||
|
The user instantiates a private keychain, backed up with a 12-word phrase, and stored in the user's web |
||||
|
browser's `localStorage` encrypted with a user-provided password. This keychain is a master keychain for |
||||
|
generating identity addresses which can own Blockstack names (a decentralized naming protocol implemented |
||||
|
on top of a virtual blockchain -- see [github.com/blockstack/virtualchain](https://github.com/blockstack/virtualchain)). Names in this system are indexed |
||||
|
by the Blockstack core (see [github.com/blockstack/blockstack-core](https://github.com/blockstack/blockstack-core)) |
||||
|
|
||||
|
The Browser supports registering Blockstack names via communication with a local Blockstack Core node. Our |
||||
|
macOS app sets up this system automatically for users. For Windows users and our hosted version of the Browser, |
||||
|
however, we do not currently have support for communicating directly with a local node. However, on these |
||||
|
platforms, you _can_ still construct a private keychain, which can be used to create profiles associated with |
||||
|
identity addresses. These addresses can even have names sent to them, e.g., from Onename (https://www.onename.com) |
||||
|
or another user via the Blockstack core cli (try `$ blockstack transfer foo.id`) |
||||
|
|
||||
|
### Authentication with Applications |
||||
|
|
||||
|
One of the core features of the Blockstack Browser is authenticating with applications using a decentralized |
||||
|
identifier. Users control their own addresses, and validate their login through a cryptographic signature. |
||||
|
In fact, the Blockstack token voucher registration process uses this system (for a detailed walkthrough |
||||
|
of this, see https://www.larrysalibra.com/blog/blockstack-token-sale-voucher-registration-walkthrough/). |
||||
|
In order to associate the cryptographic identities of the Blockstack Browser with (potentially!) real |
||||
|
people, the app supports adding "social proofs" -- a tweet from some account that asserts that the account |
||||
|
is controlled by the same person as the address. For example: |
||||
|
|
||||
|
https://twitter.com/AaronBlankstein/status/918927256738811904 |
||||
|
|
||||
|
Applications can also use this to associate a given login with an account somewhere else. |
||||
|
|
||||
|
### Application Keychains |
||||
|
|
||||
|
One of the really cool things about Blockstack as a user (and developer of applications) is that |
||||
|
users are on-boarded with a hierarchical keychain. The master backup phrase backs-up _all_ of their |
||||
|
identity addresses. But in addition, each application that a user signs into also receives a unique |
||||
|
key, derived from the user's master key. For people familiar with Bitcoin's hierarchical derivation |
||||
|
wallets, this is not so surprising. However, it enables rapid development of many different kinds |
||||
|
of applications in the cryptocurrency space (for example, a simple application wallet for a currency |
||||
|
of your choice -- Larry Salibra demoed a three line receive wallet for Ethereum at the ETC summit: |
||||
|
https://twitter.com/larrysalibra/status/929660024988753921) |
||||
|
|
||||
|
### Authenticating with Storage Providers |
||||
|
|
||||
|
Our user experience currently requires that a user connect to our default storage provider. We host |
||||
|
that storage service, however the system (called Gaia) can be deployed by anyone (see the `hub` directory in |
||||
|
github.com/blockstack/gaia). This system allows authorized _writes_ to a connected storage backend, and then |
||||
|
returns a public URL for servicing reads. By separating the logic for these two paths, we can employ standard |
||||
|
improvements to the read path (e.g., CDNs), while supporting our own protocol for the write path. The storage |
||||
|
system allows users to write to paths they own -- for example, my Blockstack profile is stored at: |
||||
|
|
||||
|
``` |
||||
|
https://gaia.blockstack.org/hub/15GAGiT2j2F1EzZrvjk3B8vBCfwVEzQaZx/0/profile.json |
||||
|
``` |
||||
|
|
||||
|
And my browser can write to this path by signing its request with the public key associated with that |
||||
|
address (for more details on how an ECDSA public key can become an address, check out: https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses) |
||||
|
|
||||
|
We think the [hosted version of the Blockstack Browser](https://browser.blockstack.org) makes it significantly easier for a person to take the first step into the new internet for decentralized apps by allowing them to get started without having to download or install any software. |
||||
|
|
||||
|
[Try it out](https://browser.blockstack.org) and [let us know what you think](https://twitter.com/blockstack)! |
@ -0,0 +1,23 @@ |
|||||
|
Before opening an issue: |
||||
|
|
||||
|
- [Search for duplicate or closed issues](https://github.com/blockstack/blockstack-browser/issues?utf8=%E2%9C%93&q=is%3Aissue) |
||||
|
|
||||
|
When asking general "how to" questions: |
||||
|
|
||||
|
- Please do not open an issue here |
||||
|
- Instead, ask for help on Slack or the [Blockstack Forum](https://forum.blockstack.org) |
||||
|
|
||||
|
When reporting a bug, include as much information as possible including: |
||||
|
|
||||
|
- Operating system and version |
||||
|
- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) |
||||
|
- Blockstack version |
||||
|
- How you installed Blockstack |
||||
|
- Steps to reproduce |
||||
|
- Screenshots or videos |
||||
|
- Logs |
||||
|
|
||||
|
When suggesting a feature, include: |
||||
|
|
||||
|
- As much detail as possible for what we should add and why it's important to Blockstack |
||||
|
- Relevant links to prior art, screenshots, or live demos whenever possible |
@ -0,0 +1,73 @@ |
|||||
|
# Blockstack key delegation |
||||
|
|
||||
|
## Key delegation object |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"version": 1.0, |
||||
|
"name": "name1.id", |
||||
|
"devices": { |
||||
|
"phone": { |
||||
|
"app": "...", |
||||
|
"enc": "...", |
||||
|
"sign": "...", |
||||
|
"index": 0 |
||||
|
}, |
||||
|
"laptop": { |
||||
|
... |
||||
|
}, |
||||
|
"tablet": { |
||||
|
... |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
This JSON object MUST be signed by a quorum n of the m keys that make up the multi-sig |
||||
|
address that owns name1.id. |
||||
|
|
||||
|
* `app` is the public key of the key that signs the app |
||||
|
* `enc` is the public key of the data encryption key |
||||
|
* `sign`: is the public key of the signature key (used to sign the profile) |
||||
|
* `index`: is index of the owner private key on given device |
||||
|
--- |
||||
|
|
||||
|
## App key bundle object |
||||
|
|
||||
|
One per name per device. |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"version": 1.0, |
||||
|
"apps": { |
||||
|
"blog.app": "...", |
||||
|
"todo.app": "..." |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
This JSON object MUST be signed by the `sign` key of the corresponding device |
||||
|
in the key delegation bundle. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## Blockstack Token File |
||||
|
|
||||
|
These are packaged in the token file along with the profile. |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"version": "3.0", |
||||
|
"profile": <profile-jwt>, |
||||
|
"keys": { |
||||
|
"delegation": <key-bundle-jwt>, |
||||
|
"apps": { |
||||
|
"laptop": <app-key-bundle-jwt>, |
||||
|
"phone": <app-key-bundle-jwt> |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
The entire token file is signed by 1 of the `sign` keys in the key delegation bundle. |
@ -0,0 +1,62 @@ |
|||||
|
digraph G { |
||||
|
"M_laptop" -> "44'" |
||||
|
"M_laptop" -> "888'" |
||||
|
"888'" -> "0'" |
||||
|
"0'" -> "0'\nname0.id" |
||||
|
|
||||
|
lapps [label="app'",color = "blue"] |
||||
|
lapp0 [label="twitter.app'",color = "blue"] |
||||
|
lapp1 [label="block.app'",color = "blue"] |
||||
|
enc [label = "enc'",color="blue"] |
||||
|
sign [label = "sign'",color="blue"] |
||||
|
|
||||
|
lnn1 [label="1'\nname1.id", color="brown"] |
||||
|
"0'" -> lnn1 |
||||
|
"0'" -> "2'\nname2.id" |
||||
|
lnn1 -> pnnetc |
||||
|
|
||||
|
|
||||
|
lapps -> lapp0 |
||||
|
lapps -> lapp1 |
||||
|
|
||||
|
p44 [label="44'"] |
||||
|
p888 [label="888'"] |
||||
|
p0 [label="0'"] |
||||
|
pnn0 [label="0'\nname0.id"] |
||||
|
pnn1 [label="1'\nname1.id", color = "brown"] |
||||
|
pnn2 [label="2'\nname2.id"] |
||||
|
|
||||
|
"M_phone" -> p44 |
||||
|
"M_phone" -> p888 |
||||
|
|
||||
|
p888->p0 |
||||
|
p0 -> pnn0 |
||||
|
p0 -> pnn1 |
||||
|
p0 -> pnn2 |
||||
|
|
||||
|
pnn1 -> "sign" |
||||
|
pnn1 -> "enc" |
||||
|
pnn1 -> lapps |
||||
|
|
||||
|
pnnetc [color="blue",label="..."] |
||||
|
|
||||
|
t44 [label="44'"] |
||||
|
t888 [label="888'"] |
||||
|
t0 [label="0'"] |
||||
|
tnn0 [label="0'\nname0.id"] |
||||
|
tnn1 [label="1'\nname1.id", color="brown"] |
||||
|
tnn2 [label="2'\nname2.id"] |
||||
|
|
||||
|
"M_tablet" -> t44 |
||||
|
"M_tablet" -> t888 |
||||
|
|
||||
|
t888->t0 |
||||
|
t0 -> tnn0 |
||||
|
t0 -> tnn1 |
||||
|
t0 -> tnn2 |
||||
|
|
||||
|
tnnetc [color="blue",label="..."] |
||||
|
|
||||
|
tnn1 -> tnnetc |
||||
|
|
||||
|
} |
After Width: | Height: | Size: 57 KiB |
@ -0,0 +1,119 @@ |
|||||
|
# Manually transfer a name from core to the browser |
||||
|
|
||||
|
This guide assumes you have the latest mac app installed (v0.10.0 as of writing), |
||||
|
you've created a new profile in the Profiles app that doesn't have any username |
||||
|
associated with it. |
||||
|
|
||||
|
## Preparation |
||||
|
|
||||
|
You'll need to collect the following information: |
||||
|
|
||||
|
1. Profile address to transfer name to |
||||
|
2. Core API password |
||||
|
|
||||
|
### Profile address |
||||
|
|
||||
|
This is the address that is displayed on a profile that doesn't have a username |
||||
|
associated with it. Copy this address to an easily accessible place. |
||||
|
|
||||
|
### Core API password |
||||
|
|
||||
|
1. Option-Click on the Blockstack icon in your menu bar. |
||||
|
2. Click "Enable Development Mode" |
||||
|
3. Click on the Blockstack icon in your menu bar. |
||||
|
4. Click "Copy Core API Password" |
||||
|
5. Put this in an easily accessible place. |
||||
|
6. Option-Click on the Blockstack icon in your menu bar to disable. |
||||
|
|
||||
|
## Sanity checks |
||||
|
|
||||
|
Going forward, you'll need to enter commands in your Terminal app. If you're |
||||
|
not comfortable doing this, you should ask a friend for help. |
||||
|
|
||||
|
You'll want to replace the strings `INSERT_CORE_PASSWORD_HERE` with the Core API |
||||
|
password you made note of in the previous step. |
||||
|
|
||||
|
### Make sure Core is running |
||||
|
|
||||
|
Let's make sure your Blockstack Core installation is functioning properly and |
||||
|
can reach the Blockstack Core full node it is configured to use. |
||||
|
|
||||
|
Run the following command: |
||||
|
|
||||
|
`/tmp/blockstack-venv/bin/blockstack --debug --config ~/Library/Application\ Support/Blockstack/config/client.ini -y ping` |
||||
|
|
||||
|
You should see output similar to the following: |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"advanced_mode": false, |
||||
|
"cli_version": "0.14.2.0", |
||||
|
"consensus_hash": "eaf32321a1e28843bae74c1fc99c3e98", |
||||
|
"last_block_processed": 469296, |
||||
|
"last_block_seen": 469302, |
||||
|
"server_alive": true, |
||||
|
"server_host": "node.blockstack.org", |
||||
|
"server_port": 6264, |
||||
|
"server_version": "0.14.1.5" |
||||
|
} |
||||
|
``` |
||||
|
The exact block numbers, consensus hash and version numbers will be different. |
||||
|
|
||||
|
### Confirm Core wallet really owns your name |
||||
|
|
||||
|
Next, we'll check to make sure the name you are trying to transfer is really |
||||
|
owned by your Core wallet. |
||||
|
|
||||
|
Run the following command replacing `INSERT_CORE_PASSWORD_HERE` with your |
||||
|
Core API password from earlier: |
||||
|
|
||||
|
`/tmp/blockstack-venv/bin/blockstack --debug --config ~/Library/Application\ Support/Blockstack/config/client.ini -y --api_password INSERT_CORE_PASSWORD_HERE --password INSERT_CORE_PASSWORD_HERE names` |
||||
|
|
||||
|
You should see output similar to the following with the name you'd like to |
||||
|
transfer in the place of `yourname.id`: |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"addresses": [ |
||||
|
{ |
||||
|
"address": "33GcdiK7JxuNX8NCQTvVh58dZEKW2ym7Hp", |
||||
|
"names_owned": ["yourname.id"] |
||||
|
} |
||||
|
], |
||||
|
"names_owned": ["yourname.id"] |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
If the name you'd like to transfer isn't listed, this means your current |
||||
|
Core wallet doesn't own the name and you won't be able to continue. |
||||
|
|
||||
|
## Transferring the name |
||||
|
|
||||
|
Now that we've made sure Blockstack Core is running properly on your computer and |
||||
|
your Core wallet does in fact own the name you'd like to transfer, the final |
||||
|
step is to transfer the name. |
||||
|
|
||||
|
Please double check the address you're transferring it to. There's no way to |
||||
|
recovery your name if you send it to an address you don't control. |
||||
|
|
||||
|
Run the following command replacing `INSERT_CORE_PASSWORD_HERE` with your |
||||
|
Core API password: |
||||
|
|
||||
|
`/tmp/blockstack-venv/bin/blockstack --debug --config ~/Library/Application\ Support/Blockstack/config/client.ini -y --api_password INSERT_CORE_PASSWORD_HERE --password INSERT_CORE_PASSWORD_HERE transfer` |
||||
|
|
||||
|
You will be prompted to enter the address you'd like to transfer the name to. |
||||
|
|
||||
|
If everything succeeds, you'll see a message similar to the following: |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"message": "Name queued for transfer. The process takes ~1 hour. You can check the status with blockstack info.", |
||||
|
"success": true, |
||||
|
"transaction_hash": "fc271325db" |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
You can look up the `transaction_hash` value at https://explorer.blockstack.org |
||||
|
to make sure the transaction has been broadcast to the Bitcoin network. |
||||
|
|
||||
|
It will take a couple hours for the name to appear in your Profiles app. |
@ -0,0 +1,84 @@ |
|||||
|
# Pixels to REM Chart |
||||
|
|
||||
|
``` |
||||
|
1px 0.0625rem |
||||
|
2px 0.125rem |
||||
|
3px 0.1875rem |
||||
|
4px 0.25rem |
||||
|
5px 0.3125rem |
||||
|
6px 0.375rem |
||||
|
7px 0.4375rem |
||||
|
8px 0.5rem |
||||
|
9px 0.5625rem |
||||
|
10px 0.625rem |
||||
|
11px 0.6875rem |
||||
|
12px 0.75rem |
||||
|
13px 0.8125rem |
||||
|
14px 0.875rem |
||||
|
15px 0.9375rem |
||||
|
16px 1rem |
||||
|
17px 1.0625rem |
||||
|
18px 1.125rem |
||||
|
19px 1.1875rem |
||||
|
20px 1.25rem |
||||
|
21px 1.3125rem |
||||
|
22px 1.375rem |
||||
|
23px 1.4375rem |
||||
|
24px 1.5rem |
||||
|
25px 1.5625rem |
||||
|
26px 1.625rem |
||||
|
27px 1.6875rem |
||||
|
28px 1.75rem |
||||
|
29px 1.8125rem |
||||
|
30px 1.875rem |
||||
|
31px 1.9375rem |
||||
|
32px 2rem |
||||
|
32px 2.0625rem |
||||
|
34px 2.125rem |
||||
|
35px 2.1875rem |
||||
|
36px 2.25rem |
||||
|
37px 2.3125rem |
||||
|
38px 2.375rem |
||||
|
39px 2.4375rem |
||||
|
40px 2.5rem |
||||
|
41px 2.5625rem |
||||
|
42px 2.625rem |
||||
|
43px 2.6875rem |
||||
|
44px 2.75rem |
||||
|
45px 2.8125rem |
||||
|
46px 2.875rem |
||||
|
47px 2.9375rem |
||||
|
48px 3rem |
||||
|
49px 3.0625rem |
||||
|
50px 3.125rem |
||||
|
51px 3.1875rem |
||||
|
52px 3.25rem |
||||
|
53px 3.3125rem |
||||
|
54px 3.375rem |
||||
|
55px 3.4375rem |
||||
|
56px 3.5rem |
||||
|
57px 3.5625rem |
||||
|
58px 3.625rem |
||||
|
59px 3.6875rem |
||||
|
60px 3.75rem |
||||
|
61px 3.813rem |
||||
|
62px 3.875rem |
||||
|
63px 3.938rem |
||||
|
64px 4rem |
||||
|
65px 4.063rem |
||||
|
66px 4.125rem |
||||
|
67px 4.188rem |
||||
|
68px 4.25rem |
||||
|
69px 4.313rem |
||||
|
70px 4.375rem |
||||
|
71px 4.438rem |
||||
|
72px 4.5rem |
||||
|
73px 4.563rem |
||||
|
74px 4.625rem |
||||
|
75px 4.688rem |
||||
|
76px 4.75rem |
||||
|
77px 4.813rem |
||||
|
78px 4.875rem |
||||
|
79px 4.938rem |
||||
|
80px 5rem |
||||
|
``` |
@ -0,0 +1,44 @@ |
|||||
|
# Browser release checklist |
||||
|
|
||||
|
- [ ] `git flow release start 0.27.0` where 0.27.0 is the version of the release (make sure the version prefix `v` is set for git flow) |
||||
|
- [ ] `git flow release publish` (optional, shares release branch) |
||||
|
- [ ] update version in `/package.json` |
||||
|
- [ ] update version and build number in xcode |
||||
|
- [ ] commit version changes |
||||
|
- [ ] Exit locally running Blockstack & stop any regtest instances & kill any `npm run dev` instances |
||||
|
- [ ] `npm run mac-release` |
||||
|
- [ ] Rename .dmg file to `Blockstack-for-macOS-v0.27.0.dmg` |
||||
|
- [ ] `git flow release finish 0.27.0` |
||||
|
- [ ] on `develop` branch `git push origin develop` |
||||
|
- [ ] `git push origin --tags` |
||||
|
- [ ] `git checkout master` |
||||
|
- [ ] Create a branch of master so that we give CircleCI a chance to run tests successfully `git checkout -b master-test` |
||||
|
- [ ] `git push origin master-test` |
||||
|
- [ ] After CircleCI tests on `master-test` pass, `git checkout master` |
||||
|
- [ ] `git push origin master` |
||||
|
- [ ] `git branch -d master-test` |
||||
|
- [ ] `git push origin :master-test` |
||||
|
|
||||
|
- [ ] tag blockstack/packaging `cd packaging; git checkout master; git tag v0.27.0` |
||||
|
- [ ] build Linux and Windows installers: `make windows; make linux-launcher` |
||||
|
- [ ] Enter blockstack/packaging `cd packaging; git checkout master` |
||||
|
- [ ] build Linux installer: `BUILD_TAG=v0.14.0 make linux-launcher` |
||||
|
- [ ] Confirm docker images successfully pull: `./dist/linux-launcher/launcher pull` |
||||
|
- [ ] Update `latest` image for browser on quay: `docker tag quay.io/blockstack/blockstack-browser:v0.23.0 quay.io/blockstack/blockstack-browser:latest` |
||||
|
- [ ] Update `latest-browser` on quay: `docker tag quay.io/blockstack/blockstack-core:v0.23.0-browser quay.io/blockstack/blockstack-core:latest-browser` |
||||
|
- [ ] Push docker tags `docker push quay.io/blockstack/blockstack-core:latest-browser` |
||||
|
- [ ] ... `docker push quay.io/blockstack/blockstack-browser:latest` |
||||
|
- [ ] Build Windows installer: https://github.com/kantai/blockstack-windows (Aaron should merge this into blockstack-browser) |
||||
|
- [ ] Sign Windows installer: `osslsigncode -certs "X509/IntermediateCA.crt" -certs "X509/ssl_certificate.crt" -key sign.key -n "Blockstack Browser" -i "https://blockstack.org" -t "http://timestamp.verisign.com/scripts/timstamp.dll" -in BlockstackSetup.msi -out blockstack-browser-signed.msi` |
||||
|
- [ ] Draft a new release on github: https://github.com/blockstack/blockstack-browser/releases/new |
||||
|
- [ ] Enter the tag (eg. `v0.27.0`) the tag box and as the name of the release. |
||||
|
- [ ] Enter release notes |
||||
|
- [ ] Rename files to format `Blockstack-for-<platform>-v0.27.0<.extension>` |
||||
|
- [ ] Upload the `.dmg` file generated earlier |
||||
|
- [ ] Upload Linux launcher |
||||
|
- [ ] Upload Windows installer |
||||
|
- [ ] After verifying tests, push new version to update server. |
||||
|
- [ ] Update blockstack.org with direct links to install files https://github.com/blockstack/blockstack.org/blob/master/app/js/config.js |
||||
|
- [ ] Create a pull request from master into deploy/browser.blockstack.org https://github.com/blockstack/blockstack-browser/compare/deploy/browser.blockstack.org...master?expand=1 |
||||
|
- [ ] Test netlify deploy preview of pull request from above and add review to pull request. (Performed by a colleague not running this release) |
||||
|
- [ ] When pull request to deploy/browser.blockstack.org is approved, merge pull request |
@ -0,0 +1,37 @@ |
|||||
|
{ |
||||
|
"$schema": "http://json-schema.org/draft-04/schema#", |
||||
|
"title": "Blockstack Token File", |
||||
|
"description": "A file containing Blockstack profile & key delegation JWTs", |
||||
|
"type": "object", |
||||
|
"properties": { |
||||
|
"version": { |
||||
|
"description": "The unique identifier for a product", |
||||
|
"type": "number", |
||||
|
"minimum": 0 |
||||
|
}, |
||||
|
"profile": { |
||||
|
"description": "User profile", |
||||
|
"type": "object", |
||||
|
"properties": { |
||||
|
"header": { |
||||
|
|
||||
|
}, |
||||
|
"payload": { |
||||
|
"type": "object", |
||||
|
"properties": { |
||||
|
|
||||
|
} |
||||
|
}, |
||||
|
"signature": { |
||||
|
|
||||
|
} |
||||
|
}, |
||||
|
"required": ["header", "payload", "signature"] |
||||
|
}, |
||||
|
"keys": { |
||||
|
"type": "object", |
||||
|
"minimum": 1 |
||||
|
} |
||||
|
}, |
||||
|
"required": ["version", "profile", "keys"] |
||||
|
} |
@ -0,0 +1,515 @@ |
|||||
|
<!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>Creating a Namespace | Blockstack</title> |
||||
|
<meta name="generator" content="Jekyll v3.8.3" /> |
||||
|
<meta property="og:title" content="Creating a Namespace" /> |
||||
|
<meta name="author" content="Blockstack" /> |
||||
|
<meta property="og:locale" content="en_US" /> |
||||
|
<meta name="description" content="Creating a Namespace" /> |
||||
|
<meta property="og:description" content="Creating a Namespace" /> |
||||
|
<link rel="canonical" href="https://zbabystack.netlify.com/core/naming/creationhowto.html" /> |
||||
|
<meta property="og:url" content="https://zbabystack.netlify.com/core/naming/creationhowto.html" /> |
||||
|
<meta property="og:site_name" content="Blockstack" /> |
||||
|
<meta property="og:type" content="article" /> |
||||
|
<meta property="article:published_time" content="2018-09-08T19:24:57-07:00" /> |
||||
|
<script type="application/ld+json"> |
||||
|
{"description":"Creating a Namespace","author":{"@type":"Person","name":"Blockstack"},"@type":"BlogPosting","url":"https://zbabystack.netlify.com/core/naming/creationhowto.html","headline":"Creating a Namespace","dateModified":"2018-09-08T19:24:57-07:00","datePublished":"2018-09-08T19:24:57-07:00","mainEntityOfPage":{"@type":"WebPage","@id":"https://zbabystack.netlify.com/core/naming/creationhowto.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=""><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">Create and Launch 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="uk-active"><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>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=""><a href="/core/naming/did.html">Decentralized Identifiers (DIDs)</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">Creating a Namespace</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-08T19:24:57-07:00" itemprop="datePublished"> |
||||
|
|
||||
|
|
||||
|
|
||||
|
<a "target="_blank" href="https://github.com/blockstack/blockstack-core/blob/master/docs/creationhowto.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 8, 2018 |
||||
|
</time> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<div class="article-content"> |
||||
|
|
||||
|
<p>There are four steps to creating a namespace:</p> |
||||
|
|
||||
|
<ol> |
||||
|
<li> |
||||
|
<p><strong>Send a <code class="highlighter-rouge">NAMESPACE_PREORDER</code> transaction</strong> (<a href="https://www.blocktrail.com/BTC/tx/5f00b8e609821edd6f3369ee4ee86e03ea34b890e242236cdb66ef6c9c6a1b28">live example</a>). |
||||
|
This is the first step. This registers the <em>salted hash</em> of the namespace with BNS nodes, and burns the |
||||
|
requisite amount of cryptocurrency. In addition, it proves to the |
||||
|
BNS nodes that user has honored the BNS consensus rules by including |
||||
|
a recent <em>consensus hash</em> in the transaction |
||||
|
(see the section on <a href="#bns-forks">BNS forks</a> for details).</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p><strong>Send a <code class="highlighter-rouge">NAMESPACE_REVEAL</code> transaction</strong> (<a href="https://www.blocktrail.com/BTC/tx/ab54b1c1dd5332dc86b24ca2f88b8ca0068485edf0c322416d104c5b84133a32">live example</a>). |
||||
|
This is the second step. This reveals the salt and the namespace ID (pairing it with its |
||||
|
<code class="highlighter-rouge">NAMESPACE_PREORDER</code>), it reveals how long names last in this namespace before |
||||
|
they expire or must be renewed, and it sets a <em>price function</em> for the namespace |
||||
|
that determines how cheap or expensive names its will be. The price function takes |
||||
|
a name in this namespace as input, and outputs the amount of cryptocurrency the |
||||
|
name will cost (i.e. by examining how long the name is, and whether or not it |
||||
|
has any vowels or non-alphabet characters). The namespace creator |
||||
|
has the option to collect name registration fees for the first year of the |
||||
|
namespace’s existence by setting a <em>namespace creator address</em>.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p><strong>Seed the namespace with <code class="highlighter-rouge">NAME_IMPORT</code> transactions</strong> (<a href="https://www.blocktrail.com/BTC/tx/c698ac4b4a61c90b2c93dababde867dea359f971e2efcf415c37c9a4d9c4f312">live example</a>). |
||||
|
Once the namespace has been revealed, the user has the option to populate it with a set of |
||||
|
names. Each imported name is given both an owner and some off-chain state. |
||||
|
This step is optional—namespace creators are not required to import names.</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p><strong>Send a <code class="highlighter-rouge">NAMESPACE_READY</code> transaction</strong> (<a href="https://www.blocktrail.com/BTC/tx/2bf9a97e3081886f96c4def36d99a677059fafdbd6bdb6d626c0608a1e286032">live example</a>). |
||||
|
This is the final step of the process. It <em>launches</em> the namespace, which makes it available to the |
||||
|
public. Once a namespace is ready, anyone can register a name in it if they |
||||
|
pay the appropriate amount of cryptocurrency (according to the price funtion |
||||
|
revealed in step 2).</p> |
||||
|
</li> |
||||
|
</ol> |
||||
|
|
||||
|
<p>The reason for the <code class="highlighter-rouge">NAMESPACE_PREORDER/NAMESPACE_REVEAL</code> pairing is to prevent |
||||
|
frontrunning. The BNS consensus rules require a <code class="highlighter-rouge">NAMESPACE_REVEAL</code> to be |
||||
|
paired with a previous <code class="highlighter-rouge">NAMESPACE_PREORDER</code> sent within the past 24 hours. |
||||
|
If it did not do this, then a malicious actor could watch the blockchain network |
||||
|
and race a victim to claim a namespace.</p> |
||||
|
|
||||
|
<p>Namespaces are created on a first-come first-serve basis. If two people try to |
||||
|
create the same namespace, the one that successfully confirms both the |
||||
|
<code class="highlighter-rouge">NAMESPACE_PREORDER</code> and <code class="highlighter-rouge">NAMESPACE_REVEAL</code> wins. The fee burned in the |
||||
|
<code class="highlighter-rouge">NAMESPACE_PREORDER</code> is spent either way.</p> |
||||
|
|
||||
|
<p>Once the user issues the <code class="highlighter-rouge">NAMESPACE_PREORDER</code> and <code class="highlighter-rouge">NAMESPACE_REVEAL</code>, they have |
||||
|
1 year before they must send the <code class="highlighter-rouge">NAMESPACE_READY</code> transaction. If they do not |
||||
|
do this, then the namespace they created disappears (along with all the names |
||||
|
they imported).</p> |
||||
|
|
||||
|
<p>Developers wanting to create their own namespaces should read the <a href="namespace_creation.md">namespace |
||||
|
creation</a> document. It is highly recommended that |
||||
|
developers follow this tutorial closely, given the large amount of |
||||
|
cryptocurrency at stake.</p> |
||||
|
|
||||
|
<div class="share uk-text-center"> |
||||
|
<a href="https://twitter.com/intent/tweet?text=Creating a Namespace&url=https://zbabystack.netlify.com/core/naming/creationhowto.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%2Fcreationhowto.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> |
Loading…
Reference in new issue