簡単まとめ

【簡単まとめ】DFINITYをFAQから見てみる3(技術編2/5)

更新日:

DFINITY本家のFAQページをもとに、DFINITYについて見ていきます。

これを読むとDFINITYのスケーリングの仕組みについてざっくりと知ることができます。技術編1/5はこちら

要点まとめ

まず、本記事の要点をお伝えします。

  • 閾値リレーとは、BLS閾値署名システムを用いてグループどうし行う乱数リレーである。
  • 乱数とは、グループが作る閾値署名のことである。
  • 乱数(グループの閾値署名)は、次のブロックに対応するグループを選ぶのに使う。
  • グループの閾値署名は、そのグループのメンバー(マイニングクライアント)が前グループの閾値署名に個別に署名した「署名シェア」を必要数集めることで作ることができる。
    • DFINITYネットワークにおいて、グループの大きさは400(400メンバー)であり必要数は51%であるので、201の署名シェアがグループの閾値署名の作成に必要である。
    • BLS閾値署名システムの特徴により、201の署名シェアを集めたのであれば、どんなグループメンバーの部分集合かによらずそこから生成される閾値署名は必ず一意に定まる。
    • 署名シェアの検証は同グループ内の他メンバーが、グループの閾値署名の検証は全てのマイニングクライアントができる。
  • グループ間のリレーで生成される署名はVRF(検証可能なランダム関数)を作る。
  • ブロック高hのグループが、ブロック高h-1の乱数に署名することを「公証(notalization)」と呼ぶ。
    • 「公証」されたブロックのみがブロックチェーンに取り込まれる。また、「公証」されたブロックの後にしか新しいブロックを作ることができない。
    • これにより、ブロックに取り込まれたトランザクションの即時ファイナリティが実現でき、「Selfish Mining」や「Nothing at Stake」問題が解消される。
  • DFINITYでは、閾値リレーのパフォーマンス特性をコンセンサスレイヤ、検証レイヤ、ストレージレイヤに適用することでスケールアップを図る。

次に詳細としてDIFINITY本家による英文FAQページの日本語訳を掲載します。細部を知りたい方は読み進めてください。

スポンサードサーチ

技術的な質問

閾値リレーはどう動く?(How does Threshold Relay work?)

注)技術論文や入門資料集もご確認ください。

概略

マイニングクライアントのネットワークは先述のFAQで説明したように組成されます。閾値リレーは内生のランダムビーコンを生成します。そして、その新しい乱数それぞれがマイニングクライアントのランダムなグループ(1つとは限らない)を定義します。そのグループは、独立に"試行"して「閾値グループ」を形成する可能性があります。各グループの構成は完全にランダムなので、グループは交わったり同じマイニングクライアントが複数のグループに入っていたりすることもあります。DFINITYでは、1グループは400のメンバーで構成されます。グループが定義されると、そのグループのメンバーは配布された鍵生成プロトコルを使ってBLS閾値署名システムをセットアップしようとします。いくつかの固定数のブロック以内にセットアップに成功すると、その公開鍵(そのグループのために生成された「アイデンティティ」)を特別なトランザクションを使ってグローバルブロックチェーン上に登録します。その結果、登録された公開鍵は、それに続くマイニング「エポック」における一連のアクティブグループの部品となります。ネットワークは、予め定義されたいくつかのグループとともに「ジェネシス」(ジェネシスブロック)で始まり、予め定義されたグループのうちの1グループが選ばれていくつかのデフォルト値に対して署名を生成します。これらの署名が乱数です(もし乱数でなかったら、メッセージに付けたグループの署名は予測可能となってしまい閾値署名システムは安全でなくなってしまいます)。このようにして生成された乱数はそれぞれ、ランダムな後任グループを選出するのに利用されます。次に、この後任グループは直前の乱数に署名をして、新しい乱数を生成し、次の後任グループを選出します。このようにグループ間のリレーが際限なく続き、一連の乱数が生成されます。

暗号理論による閾値署名システムでは、最低限必要となるメンバーの協力の上で、グループはメッセージに対して署名を生成することができます。DFINITYネットワークでは、その最低限必要な数は51%に設定されています。閾値署名を生成するために、グループメンバーは一人一人メッセージ(ここでは先任グループの閾値署名とします)に署名し、個別の「署名シェア」を生成してグループの他メンバーにブロードキャストします。グループの閾値署名は、十分な数の署名シェアを連結することで作成することができます。従って、例えばグループの大きさが400の場合、十分な数とは201となり、201のシェアを集めたマイニングクライアントであれば誰でもメッセージに対するグループの署名を作成することができます。グループメンバーは他メンバーの署名シェアを検証することができ、"あらゆる"マイニングクライアントは当該グループの公開鍵を使って署名シェアを連結して作られたグループの閾値署名を検証することができます。BLSスキームの素晴らしいところは、「ユニークであり、なおかつ決定論的である」という性質です。つまり、"どんなグループメンバーの部分集合が必要数の署名シェアを集めたとしても、生成される閾値署名は必ず同じであり、唯一の正しい値を取ることができる"のです。

前述の理由により、生成される一連の乱数は完全に決定論的かつ操作不能なものとなり、グループ間のリレーで生成される署名はVRF(Verifiable Random Function, 検証可能なランダム関数)を作り出します。一連の乱数は参加グループの一団を条件として事前に決まっていますが、新たな乱数はその時点のグループの最低限必要な数の合意が得られた場合にのみ生成されます。逆に言えば、乱数が生成されなかったことでリレーが止まるためには、"正当な"プロセス(マイニングクライアント)の数は閾値(必要数)を下回っていなければならないのです。このようなことが起こる可能性が極めて低くなるように閾値は調整されます。例えば、グループの大きさが400とすると、閾値は201となるので、進行を妨げるには200以上のプロセスが"故障"しなければなりません。仮にネットワークに10000プロセスがいるとして、そのうちの3000が故障したとしても、リレーが止まる確率は10e-17(筆者注:10の-16乗。1/1016)未満です。これは大数の法則のおかげです。"1つ1つのアクターは予測できないかもしれないが、数が増えれば触れるほど全体としての振る舞いはどんどん予測しやすくなる"のです。

このようなシステムはとてつもなく冗長であるだけでなく、非常に効率的でもあるのです。ブロードキャストゴシップネットワークでは、400のメンバーからなるグループはたった20KBほどの通信データをリレーするだけでグループの閾値署名を作ることができてしまうのです。それと同時に、DFINITYが開発に関与しているBLS閾値暗号ライブラリは、最新のハードウェア上で1ミリ秒にも満たないうちに必要なオペレーションを計算できます。

閾値リレーブロックチェーンはどう動く?(How does a Threshold Relay blockchain work?)

注)技術論文や入門資料集もご確認ください。

概略

閾値リレーブロックチェーンは閾値リレーの仕組みをとることで作られる「ブロックチェーン」です。各ブロック高において「フォージャー」(筆者注:1つ1つのマイニングクライアントのこと。PoS型ブロックチェーンでは、いわゆるマイナーのことをフォージャーと呼ぶ場合がある)の優先度リストをランダム性を使って定義し、またその時点のグループに生産されたブロックを「公証」してもらいます。例えば、ブロック高hにおいて、ブロック高h-1で作られた乱数は手当たり次第にネットワーク内のマイニングクライアントプロセスに優先度リストに入るよう命令します。このとき、最初のプロセス(マイニングクライアント)はスロット0に、2番目のプロセスはスロット1に...と入っていきます。ブロック高hのグループのメンバーがそのグループを選んだ先行署名(筆者注:つまりブロック高hのグループを選んだブロック高h-1のグループの署名)を初めて受け取ると、ブロック高hのグループのメンバーは時間制限を決めて動かし始めます(通常、各メンバーは先行グループの署名を同時には受け取らないので、僅かに同期がずれます)。次に、ブロック高hのグループのメンバーはネットワークの現在のブロックタイムが終了するのを待って、その後でマイニングプロセスの優先度リストで生産されるブロックを処理し始めます。

最適化のため、スロット0はブロックタイムの終了後すぐにブロックの生産をすることができます。そして、後続のスロットは少々時間をおいてブロックを生産することができます。スロット自体に重みづけがされており、スロット0のブロックは1点、スロット1のスコアは0.5点などとなります(生産したブロックがチェーンにつながると、スコアと同等の報酬がフォージャーに付与されます)。現時点のグループのメンバーは、以下のルールに従って受け取ったブロックについての署名シェアを作成します。ルール:(i)現時点のグループのメンバーは、より高得点を得たチェーンであることを示すブロックに前回署名していない(ii)現在のブロックは、先行グループによって署名がなされたブロックを参照している(iii)ブロックの中身と所属するグループのローカルの時計に関して、現在のブロックは有効である(iv)現時点のグループのメンバーは、所属するグループの署名を有効なブロックで見ていない。

このように、グループが無事にブロックに署名するまでグループメンバーはブロックに対する署名シェアを作成し続けます。そして署名を受け取るとすぐにグループメンバーは直前の乱数に署名をして次にグループへ渡します(そしてブロックへの署名を停止します)。もちろん実際には、最も優先度の高いスロット0のブロックは通常メンバーのネットワーク入力キューの中でブロックタイムの有効期限まで処理を待ち、それからブロックに署名がされることになるでしょう。別々のスロットからの得点付きのブロックはフォージャーとグループが候補となるチェーンを選択するためにあります。しかし、直前のグループがサインしたブロック上にのみ新しいブロックを作ることができるので収束を加速するのも固定するのもグループの公証なのです。

ブロック公証プロセスは、非常に大きなアドバンテージをもたらします。従来のプルーフオブワーク型やプルーフオブステーク型のブロックチェーンではいつでも遡って新たな分岐チェーンを作ることができますが、閾値リレーチェーンでは正しい時間にブロードキャストされ次の正しいグループに公証を受けたブロックのみを有効なチェーンに取り込みます。これにより、「Selfish Mining」や「Nothing at Stake」などの重大な問題に対処します。これらの問題は、チェーンに取り込まれるブロックが絶対に安全である、または「ファイナライズ」されたとするのに必要なコンファメーションの数を相当増やしてしまいます。対照的に、閾値リレーチェーンでは非常に高い確率で一貫性を持ちます。通常、先頭がスロット0にある一つの候補チェーンしかなく、一度署名がされたらほぼ信頼できます。ファイナリティが数秒で普通にもたらされるのです。

閾値リレーブロックチェーンのアドバンテージは計り知れません。高価なプルーフオブワークのプロセスには頼りません。必要とあれば、セキュリティ特性を弱体化させることなく複数のチェーンを並行稼働させることもできます。閾値リレーブロックチェーンは他のどんなシステムよりはるかに高速にトランザクションをファイナライズし、優れたユーザエクスペリエンスを生み出します。そして、フォージャーには固定のブロックタイムが割り当てられているので、さらに多くのトランザクションを含めることができます(対照的に、プルーフオブワーク型のシステムでは、マイナーは新しいブロックを速くブロードキャストできればできるほどそのブロックのあとにブロックを作れる機会が増えます。その結果、検証の必要がない空のブロックのあとにブロックを作ることや空のブロックを作ること自体を促進してしまっているのです。これが現在Ethereumのブロックの50%が空である理由です)。クライアントがネットワーク内にその時点で存在する一連のグループのマークルルートハッシュを持っていれば、SPVのようなサービスをクライアントに提供することもできます。そうしている間にも、発展するチェーンは常に公証されていて可視化されていなければならないので、セキュリティはもっとありふれたものになります。

DFINITYはどうやってスケールアウトするの?(How does DFINITY scale-out ?)

閾値リレーブロックチェーンそれ自体は「スケールアウト」できませんが、既存システムと比べた場合、パフォーマンス特性は確かに「スケールアップ」効果をもたらします。しかし、DFINITYはその特性を3段階のスケールアウトアーキテクチャに応用します。対応する順番に、コンセンサス、検証、ストレージとなります。コンセンサスレイヤはランダム性を生成する閾値リレーチェーンに関連します。ランダム性は検証レイヤにおいてValidation TreeとValidation Towersを動かします。検証レイヤは、マークル木がデータに役立つように検証に役立つもので、ほぼ無限のスケーラブルなグローバル検証を提供します。また、ランダムビーコンはマイニングクライアントの一団をストレージレイヤのストレージ(ステート)シャード内に定義します。ストレージレイヤでは、独自の閾値リレーチェーンを使って検証レイヤまで通過してきた受領トランザクションとステート遷移結果について早急にコンセンサス形成を行います。その後、最上層の閾値リレーコンセンサスブロックチェーンはValidation Treeから提供されるステートルートを記録します。ステートルートは、ネットワーク内の全ストレージへアンカーをつけています。

トランザクションのブロックについて全く言及がないことにお気づきでしょう。実際にないのです。DFINITYは、何エクサバイトものステートを保存し、1秒間に数百万・数十億のトランザクションを処理することを目的としています。どうしたって限りなく小さな欠片よりもちょっと大きい程度のものを見ることのできるプロセス(筆者注:トランザクションやブロック1つ1つを見るプロセス)はないのです。代わりにDFINITYネットワークが取り組むのは、記録されているステート(ルートハッシュで定義される)が有効なトランザクションを持つアプリケーション上の有効な遷移を通してのみ動いていっているということの確約に焦点化することです。その後で、全データの正確な出どころ、全トランザクションの実行、マイニングクライアント自身が要求する行動のパフォーマンスを、その時点におけるグローバルルートへのマークルパスを使って証明することができます。

ヒストリーチップ:このアーキテクチャとサポートプロトコルはDominic Williamsが2015年早期に考案したもので、その他の技術的なイノベーションとともにサンフランシスコで行われたBitcoin DevsミートアップやロンドンのDevcon1の「コンセンサスへの導入」トークで簡潔に紹介されました(瞬きしていたら見逃しちゃうね!)。

【簡単まとめ】DFINITYをFAQから見てみる2(技術編1/5) ←← 前)|(次 →→ 【簡単まとめ】DFINITYをFAQから見てみる4(技術編3/5)

-簡単まとめ
-, , , , , , , , ,

Copyright© 暗号通貨界隈のメモ書きなど。 , 2019 All Rights Reserved Powered by STINGER.

%d人のブロガーが「いいね」をつけました。