BNS は制御の中央点の依存なしにオフチェーンに名前を結合するネットワークシステムである。パブリックブロックチェーン内にそのコントロールプレーンメッセージのログを組み込みことで実現している。各 BNS ピアは特別に作られたトランザクションに索引付けをすることで各名前の状態を決定する。そうすることで、各ピアは独立して同じグローバルな名前状態を計算できる。
BNS における名前は3つの性質を持っている。
名前はブローバルにユニーク
プロトコルは名前衝突を許さず、全ての正常に動いているノードは与えられた名前を同じ状態に解決する。
名前は人間が読める
各名前は作成者によって選ばれる。
名前は強力に所有されている
その名前の所有者のみがその解決する状態を変更することができる。名前は1つあるいは複数の ECDSA 秘密鍵で所有されている。
BNS ノード複製された名前データベースを実装する。各 BNS ノードは他の全てのノードと同期を取っているため、どのノードにクエリを投げても同じである。BNS ノードを使用すると、名前の所有者は最大 40Kb のオフチェーン状態を自分の名前にバインドできる。これは、Atlas ネットワークを介してすべての BNS ノードに複製される。
BNS ノードは基盤となるブロックチェーン(Blockstack は Bitcoin を使用している、過去は Namecoin を使用していた)から名前データベースログを抽出する。BNS はブロックチェーンを使用して、システムの共有「ground truth」を確立する。2つのノードがブロックチェーンの同じビューを持っている限り、それらは同じデータベースを構築する。
BNS による開発者への最大の影響は、名前状態の読み込みは早く安いが、名前状態の書き込みは遅く高価である。なぜなら名前の登録や修正は1つあるいは複数のトランザクションを基盤のブロックチェーンに送信する必要があり、BNS ノードが十分な確認されるまでそれらを処理することができないからである。ユーザや開発者は BNS トランザクションを送信するために必要となる暗号通貨を獲得し消費する必要がある。
名前に真実を求めているのはどんなものなのでしょうか?BNS では、名前はグローバルでユニークであり、人間的な意味を持ち、強力に所有されているものとしている。従来の名前解決を用いたサービスではこのうち2つのみを保証している。
BNS 名は3つ全ての性質を持っており、あらゆる種類のネットワークアプリケーションを構築するのに強力なツールとなる。BNS では以下のようなものが可能である。
BNS 名はグローバルな名前階層で組織されている。命名に関連するこの階層には3つの層がある。
名前空間
DNS でいうトップレベルドメイン(TLD)のこと。既存の BNS 名前空間は .id
, .podcast
, .helloworld
である。他の全ての名前は1つの名前空間に属しており、誰でも名前空間を作ることができる。しかし、その名前空間を永続的にするためには、誰でも名前を登録できるように始めなければならない。名前空間はそれらの作成者によって所有されない。
BNS 名
これらのレコードはブロックチェーンに直接保存される名前である。これらの名前の所有権と状態はブロックチェーントランザクションを送信することによって管理される。(例:verified.podcast
, muneeb.id
)BNS 名はすでにその名前が存在していない限り誰でも作ることができる。BNS 名は通常 Atlas ネットワークに保存されている。
BNS サブドメイン
レコードがオフチェーンに保存されている名前であるが、まとめてブロックチェーンに固定されている。これらの名前の所有権と状態は Atlas ネットワークにある。(例:podsaveamerica.verified.podcast
, jude.personal.id
)BNS サブドメインは分割された秘密鍵によって所有される一方で、BNS 名所有者は彼らのサブドメイン状態をブロードキャストする必要がある。BNS 名前空間や BNS 名とは異なり、BNS サブドメインはブロックチェーンコンセンサルールの一部ではない。
これらの名前オブジェクト間の類似点と相違点をまとめた特徴比較マトリックスを以下に示す。
特徴 | 名前空間 | BNS 名 | BNS サブドメイン |
---|---|---|---|
グローバルにユニーク | X | X | X |
人間的意味がある | X | X | X |
秘密鍵によって所有される | X | X | |
誰でも作れる | X | X | [1] |
所有者が更新できる | X | [1] | |
オンチェーンで状態がホストされている | X | X | |
オフチェーンで状態がホストされている | X | X | |
コンセンサスルールによって行動が制御される | X | X | |
有効期限がある可能性がある | X |
[1] BNS 名所有者はそのトランザクションをブロードキャストする必要がある
開発者が知っておくべき部分が3つある。
BNS インデクサー
このモジュールはブロックチェーンをクロールし、名前データベースを構築する。BNS インデクサーはプライベートなもしkはセンシティブな状態を含まず、公に展開することができる。
BNS API
このモジュールは開発者に BNS ネットワークと相互作用するための安定した RESTful API を提供する。
BNS クライアント
これらは名前解決するために BNS API モジュールと通信する。名前を登録と修正をするためのトランザクションを作成して送信する。
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
名前の解決、登録、管理するための GUI をユーザや開発者に提供する。BNS と相互接続するための推奨方法である。
Blockstack CLI
名前の解決、登録、管理でのローレベル管理を提供する。 blockstack.js
を使用している新しい CLI は開発中であり、既存の CLI プログラムを置き換える予定である。
新たな開発者は Blockstack Browser を使用することを推奨する。
名前空間は中にある名前についていくつかの性質を制御する。
これが書かれた時点では、はるかに大きな BNS 名前空間は .id
である。.id
名前空間内の名前はユーザ識別子を解決するためのものである。.id
の短い名前は長い名前よりも高価であり、2年ごとにそれらの所有者によって更新されなければならない。名前登録料は特定の人物に払われるのではなく、代わりに「ブラックホール」に送られて使い物にならないようになっている(ID スクワッターを抑止する意図がある)。
DNS とは異なり、誰でも名前空間を作りそのその性質をセットすることができる。名前空間は先着順で作成され、その後は永遠に存続する。
しかし、無料で名前空間を作ることはできない。作成者は作成時に暗号通貨を燃やす(ブラックホールに送る)必要がある。短い名前空間の名前であるほど、より多くの暗号通貨が必要である(短い名前の方が価値が高い)。名前空間には最大 19 文字使うことができ、使用可能な文字は a-z
, 0-9
, -
, _
である。
この章では、Blockstack と他の命名システムの比較を説明する。
Blockstack と DNS はどちらも命名システムを実装しているが、基本的に異なる方法である。Blockstack はホスト名を IP アドレスに解決するために使うことができるが、これはデフォルトのユースケースではない。BNS はユーザ名をユーザデータに解決する分散化 LDAP システムのように振る舞う。
DNS と BNS は異なる問題を解決する一方で、いくつかの専門用語やシリアライズフォーマットを共有している。しかし、これだけが共通点であり、根本的に意味が異なることを認識しておくことが重要である。
ゾーンファイル
Blockstack は各名前の DNS ゾーンファイルを保存する。しかし、BNS ゾーンファイルは DNS ゾーンファイルのような意味はない(フォーマットのみ共通)。標準の Blockstack ゾーンファイルはユーザのアプリケーションデータを示す URI
と TXT
リソースレコードのみを持っている。加えて、Blockstack ID はゾーンファイルの履歴を持っており、履歴ゾーンファイルは Blockstack ID の解決方法を変えることができる(DNS にはそのような概念はない)。高度なユーザはそれらの Blockstack ID のゾーンファイルに A
もしくは AAAA
レコードを追加することが考えられるが、現時点ではどの Blockstack ソフトウェアでも認められていない。
サブドメイン
Blockstack はサブドメインの概念を持っているが、DNS サブドメインとはかなり意味的に異なっている。Blockstack では、サブドメインは Blockstack ID (状態とトランザクション履歴はブロックチェーンに固定されている)であるが、オンチェーン Blockstack ID のゾーンファイル履歴の中に保存されている。DNS サブドメインとは異なり、BNS サブドメインはその所有者があり、ファーストクラスの BNS ネームである。すべてのサブドメインは解決可能であり、サブドメインの所有者のみがサブドメインのレコードを更新することができる。DNS サブドメインと共通なものは名前のフォーマットである。
詳細は Blockstack vs DNS を参照してください。
Namecoin もまたブロックチェーン上の分散型命名サービスである。実際に Blockstack の初期版は Namecoin 上で構築されていた。しかし、Namecoin の Bitcoin との合併マイニングが定期的に一人の採掘者の事実上の管理下に置かれていることが判明した。これにより、Blockstack の基盤となるブロックチェーン(現在は Bitcoin)が安全でないと判断された場合、システムをより安全なブロックチェーンに移行できるように、ブロックチェーン間で移植できるようにシステムを再設計することになった。
ENS もまたブロックチェーン上の分散型命名システムであるが、Ethereum 上のスマートコントラクトとして実装されている。BNS と同様に、ENS は名前をオフチェーン状態に解決することを目的としている(例:ENS 名はハッシュに解決する)。さらに、ENS は、チューリング完全なオンチェーンリゾルバを用いて、名前をプログラム的に制御することを目指している。
BNS は ENS とはブロックチェーンとの関係について基本的な違いがある。ENS はできる限りオンチェーンロジックを使うようにしているが、BNS はできるかぎりブロックチェーンの使用を少なくしようとしている。BNS は名前操作のためのデータベースログを保存するためにブロックチェーンを使用する。BNS 名前状態と BNS サブドメインは Atlas ネットワークに完全にオフチェーンで存在している。これは、個別のブロックチェーン故障を生き残るためにブロックチェーンからブロックチェーンに移植することを可能にし、BNS 開発者はブロックチェーンの許可を得ることなくコンセンサスルールを更新することを可能にする。
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
アドレスがセットされていない時に登録料を支払うために基盤となるブロックチェーンとーくんを破壊する。これは、ブロックチェーン・マイナーの持ちものを少しだけ価値のあるものにする効果がある。