Blockstack Naming Service (BNS)

What is BNS


BNS は制御の中央点の依存なしにオフチェーンに名前を結合するネットワークシステムである。パブリックブロックチェーン内にそのコントロールプレーンメッセージのログを組み込みことで実現している。各 BNS ピアは特別に作られたトランザクションに索引付けをすることで各名前の状態を決定する。そうすることで、各ピアは独立して同じグローバルな名前状態を計算できる。

BNS における名前は3つの性質を持っている。

BNS ノード複製された名前データベースを実装する。各 BNS ノードは他の全てのノードと同期を取っているため、どのノードにクエリを投げても同じである。BNS ノードを使用すると、名前の所有者は最大 40Kb のオフチェーン状態を自分の名前にバインドできる。これは、Atlas ネットワークを介してすべての BNS ノードに複製される。

BNS ノードは基盤となるブロックチェーン(Blockstack は Bitcoin を使用している、過去は Namecoin を使用していた)から名前データベースログを抽出する。BNS はブロックチェーンを使用して、システムの共有「ground truth」を確立する。2つのノードがブロックチェーンの同じビューを持っている限り、それらは同じデータベースを構築する。

BNS による開発者への最大の影響は、名前状態の読み込みは早く安いが、名前状態の書き込みは遅く高価である。なぜなら名前の登録や修正は1つあるいは複数のトランザクションを基盤のブロックチェーンに送信する必要があり、BNS ノードが十分な確認されるまでそれらを処理することができないからである。ユーザや開発者は BNS トランザクションを送信するために必要となる暗号通貨を獲得し消費する必要がある。

Motivation behind naming services


名前に真実を求めているのはどんなものなのでしょうか?BNS では、名前はグローバルでユニークであり、人間的な意味を持ち、強力に所有されているものとしている。従来の名前解決を用いたサービスではこのうち2つのみを保証している。

BNS 名は3つ全ての性質を持っており、あらゆる種類のネットワークアプリケーションを構築するのに強力なツールとなる。BNS では以下のようなものが可能である。

Organization of BNS


BNS 名はグローバルな名前階層で組織されている。命名に関連するこの階層には3つの層がある。

これらの名前オブジェクト間の類似点と相違点をまとめた特徴比較マトリックスを以下に示す。

特徴 名前空間 BNS 名 BNS サブドメイン
グローバルにユニーク X X X
人間的意味がある X X X
秘密鍵によって所有される X X
誰でも作れる X X [1]
所有者が更新できる X [1]
オンチェーンで状態がホストされている X X
オフチェーンで状態がホストされている X X
コンセンサスルールによって行動が制御される X X
有効期限がある可能性がある X

[1] BNS 名所有者はそのトランザクションをブロードキャストする必要がある

Understand the Architecture


開発者が知っておくべき部分が3つある。

BNS ノードは BNS インデクサーと BNS API から成る。概略図は以下のように成る。

上図は BNS 構造を表している。クライアントは名前解決し、ブロックチェーントランザクションを発行するために BNS API モジュールと会話する。API モジュールは インデクサーモジュールと会話し、クライアントに名前解決のための安定した Web アクセス可能なインターフェースを与える。インデクサーモジュールはブロックチェーンのピアを通してブロックチェーンを読む。

現在の、Stacks Blockchain は API モジュールとインデクサーを分けられたデーモン(blockstack api , blockstack-api)として実装している。BNS インデクサーはブロックチェーンコンセンサスルールとネットワークポロトコルを実装しており、主な責任は全ての名前の状態を構築し複製することである。それ自身のパブリックな API はない。

BNS API モジュールはユーザと開発者に RESTful インターフェースを通して名前解決することを可能にする。名前解決は平凡な curl もしくは wget によって実現される。BNS アプリケーションは名前解決のために BNS API モジュールを使うべきである。API は安定しておらず、API モジュール以外の他のプロセスが消費することを意図していないため、BNS インデクサに直接話しかけることを試みるべきではない。

名前を登録して管理するには、ブロックチェーントランザクションを生成して送信する必要があり、BNSクライアントを実行する必要がある。我々は2つのリファレンス BNS クライアントを提供する。

新たな開発者は Blockstack Browser を使用することを推奨する。

Understand Namespaces


名前空間は中にある名前についていくつかの性質を制御する。

これが書かれた時点では、はるかに大きな BNS 名前空間は .id である。.id 名前空間内の名前はユーザ識別子を解決するためのものである。.id の短い名前は長い名前よりも高価であり、2年ごとにそれらの所有者によって更新されなければならない。名前登録料は特定の人物に払われるのではなく、代わりに「ブラックホール」に送られて使い物にならないようになっている(ID スクワッターを抑止する意図がある)。

DNS とは異なり、誰でも名前空間を作りそのその性質をセットすることができる。名前空間は先着順で作成され、その後は永遠に存続する。

しかし、無料で名前空間を作ることはできない。作成者は作成時に暗号通貨を燃やす(ブラックホールに送る)必要がある。短い名前空間の名前であるほど、より多くの暗号通貨が必要である(短い名前の方が価値が高い)。名前空間には最大 19 文字使うことができ、使用可能な文字は a-z , 0-9 , - , _ である。

Naming system feature comparison


この章では、Blockstack と他の命名システムの比較を説明する。

Blockstack vs DNS

Blockstack と DNS はどちらも命名システムを実装しているが、基本的に異なる方法である。Blockstack はホスト名を IP アドレスに解決するために使うことができるが、これはデフォルトのユースケースではない。BNS はユーザ名をユーザデータに解決する分散化 LDAP システムのように振る舞う。

DNS と BNS は異なる問題を解決する一方で、いくつかの専門用語やシリアライズフォーマットを共有している。しかし、これだけが共通点であり、根本的に意味が異なることを認識しておくことが重要である。

詳細は Blockstack vs DNS を参照してください。

Blockstack vs Namecoin

Namecoin もまたブロックチェーン上の分散型命名サービスである。実際に Blockstack の初期版は Namecoin 上で構築されていた。しかし、Namecoin の Bitcoin との合併マイニングが定期的に一人の採掘者の事実上の管理下に置かれていることが判明した。これにより、Blockstack の基盤となるブロックチェーン(現在は Bitcoin)が安全でないと判断された場合、システムをより安全なブロックチェーンに移行できるように、ブロックチェーン間で移植できるようにシステムを再設計することになった。

Blockstack vs ENS

ENS もまたブロックチェーン上の分散型命名システムであるが、Ethereum 上のスマートコントラクトとして実装されている。BNS と同様に、ENS は名前をオフチェーン状態に解決することを目的としている(例:ENS 名はハッシュに解決する)。さらに、ENS は、チューリング完全なオンチェーンリゾルバを用いて、名前をプログラム的に制御することを目指している。

BNS は ENS とはブロックチェーンとの関係について基本的な違いがある。ENS はできる限りオンチェーンロジックを使うようにしているが、BNS はできるかぎりブロックチェーンの使用を少なくしようとしている。BNS は名前操作のためのデータベースログを保存するためにブロックチェーンを使用する。BNS 名前状態と BNS サブドメインは Atlas ネットワークに完全にオフチェーンで存在している。これは、個別のブロックチェーン故障を生き残るためにブロックチェーンからブロックチェーンに移植することを可能にし、BNS 開発者はブロックチェーンの許可を得ることなくコンセンサスルールを更新することを可能にする。

Summary feature comparison

BNS と他の命名システムとの違いを以下の表にまとめる。

Feature BNS ENS DNS Namecoin
グローバルにユニークな名前 X X X X
人間が読める名前 X X X X
強く所有している名前 X X X
名前を数えることができる X X
登録時間 1-2 時間 ~1 週間 ~1 日 1-2 時間
サブドメイン登録時間 1 時間 即座 ~ 1 時間 即座 ~ 1 時間 即座 ~ 1 時間
誰でも TLD/名前空間 が作れる X [1] [1]
TLD/名前空間 所有者は登録料を得る X X
TLD/名前空間は初期名でシードすることができる X X
ブロックチェーンをまたいで移植性がある X N/A
オフチェーン名前 X N/A
オフチェーン名前状態 X X N/A
名前の来歴 X X X
DID サポート X
チューリング完全な名前空間ルール X X
参加することによるマイナーの報酬 [1] N/A X

[1] より高レベルでのアプリケーションのサポートが必要。これらのシステムはプロトコルレベルでの名前空間/TLDの存在を認識していない。

[2] Stacks Blockchain 名前の名前空間に pay-to-namespace-creator アドレスがセットされていない時に登録料を支払うために基盤となるブロックチェーンとーくんを破壊する。これは、ブロックチェーン・マイナーの持ちものを少しだけ価値のあるものにする効果がある。