本稿について
本稿では、The ZILLIQA Technical Whitepaper Version0.1の「V. Network Layer」の日本語訳を掲載します。プログラム的な構造体や変数を主に意図して記載されている語(プログラムの自体で記述されている語)に関しては日本語ではなく英語のまま記載します。
原文はこちらになります。
スポンサードサーチ
5. ネットワークレイヤ(続き)
B. パブリックチャネル
DSノードは、トランザクションに関するシャーディングロジック(セクション5のDで説明)だけでなくアイデンティティ、DSノードの接続情報、各シャード内のノード一覧などを含む然るべき情報をパブリックチャネルに公表する。パブリックチャネルは無与信であり、全てのノードが利用できるものと見なされる。ZILLIQAの実装においては、ブロードキャストプリミティブがこのようなパブリックチャネルを実装する。
受け取り用のトランザクションを送信したいと思っているZILLIQAブロックチェーンのユーザは、シャーディングについての情報をチェックしてシャードに自身のトランザクションを処理してもらうことができる。パブリックチャネル上に公表される情報は、あらゆるノードやユーザが検証できるDSノードの2/3以上が署名していることが期待される。
C. ZILLIQAの新規参入ノード
新しいノードがネットワークに参加するにあたって、DSノードになるためにPoW1を解こうとしたりシャードのメンバになるためにPoW2を解ことうとしたりすることができる。この目的を達成するために、ノードはPoW1やPoW2に必要な乱数性についての情報をブロックチェーンから入手する必要がある。乱数性の情報を入手すると、新しいノードはその解をDSコミティに送信できる。
D. トランザクションシャーディングと処理
セクション5のAで説明したように、ネットワークシャーディングはそれぞれが並列にトランザクションを処理することのできるシャードを生成する。このセクションでは、どのようにトランザクションがシャードに割り当てられて処理されるかを説明する。説明のため、Aーn→Bを送信者のアカウントAから受信者のアカウントBへのnZILのトランザクションを表すものとする。
1)トランザクションの割当
Aーn→Bの例のようなトランザクションは全て一つのシャードによって処理される。0からℓ - 1のℓ個のシャードが存在すると仮定すると、トランザクションは送信者のアドレスの、つまりこの例ではアカウントAのアドレスの右端ビット⌊log2ℓ⌋ + 1個で定められるシャードに割り当てられる。アカウントアドレスは160ビットの整数であるので、ℓの上界は⌊log2ℓ⌋ + 1 ≤ 160である。しかし、実際にはℓは100より小さい。
割り当てられるシャードが定まるとトランザクションは当該シャードのいくつかのノードに多重送信され、さらにそのノードはトランザクションをブロードキャストする。トランザクションが割り当てられたシャードのリーダーまで届くと、リーダーはそのトランザクションをTX-Blockに取り込んでコンセンサスプロトコルを実行する。
二重支払い(あるいはリプレイアタック)は各トランザクションにあるnonceを使って簡単に検出できる。各トランザクションは送信者のアカウントから送信されたトランザクションの数をカウントしてるnonceを持っていることを思い出してほしい。トランザクションがトランザクションブロックチェーン内に取り込まれると、nonceはアカウントのステートで更新され、それによってグローバルのstateで更新される。グローバルのstateにおけるnonceの現在値と等しいかそれより小さいnonce値を持つトランザクションはマイナーにより拒否される。
送信者のアカウントのアドレスに基づくシャーディングトランザクションにより、送信者からのトランザクションは全て同一シャードで処理されることからシャードのメンバーがネーティブに二重支払いを検知できるようになる。
2)トランザクションの処理
コミティ内の全てのノードはトランザクションを提案できる。これらのトランザクションは、どのトランザクションの集合が次のTX-Blockを形成するかについてコンセンサスプロトコルを実行するためにリーダーに送信される。各シャー度が提案するブロックはマイクロブロック(micro block)と呼ばれ(てタイプマーカー0x00で識別され)る。マイクロブロックには、そのシャードの2/3より多くのノードによるEC-Schnorrマルチシグが含まれる。また、リーダーは署名者の公開鍵を特定するビットマップBを作る。シャードのi番目のメンバーがTX-Blockのヘッダに署名したのであれば、B[i] = 1である。シャードがTX-Blockについてのコンセンサスを形成すると、シャードのリーダーはそのTX-Blockのheaderとsignatureを一部のDSノードに多重送信する。DSノードはDSコミティ内でブロードキャストして、DSコミティのリーダーに届く。TX-Blockのdata部分を非同期的にノードに送ることができる。
DSコミティはシャードから送られてきた全てのブロックを集約し、別ラウンドのコンセンサスプロトコルを実行してファイナルブロック(the final block)に合意する。ファイナルブロックはタイプマーカー0x01で識別されるTX-Blockである。ファイナルブロックには、DSコミティのn0*2/3個より多くのノードによるEC-Schnorrマルチシグが含まれる。また、DSコミティのリーダーは署名者の公開鍵を特定するビットマップBを作る。DSコミティのi番目のメンバーがTX-Blockのヘッダに署名したのであれば、B[i] = 1である。ファイナルブロックのheaderとsignatureは各シャード内でいくつかのノードに多重送信される。DSノードは、実際のTX-Blockのdataは送信しない。
各シャード内ではファイナルブロックを処理するために以下のステップをとる。
- シャード内の各ノードはDSノードの公開鍵を用いてEC-Schnorrマルチシグを検証する。署名がビットマップが示すn0*2/3個の公開鍵に対して有効であれば、ノードは次のチェックを行う。
- ファイナルブロックのheaderに含まれる各トランザクションハッシュについて、ノードは対応するトランザクションの中身が有効であるか否かをチェックする。対応するトランザクションがそのノードが所属するシャードにより提案されたものであれば、トランザクションデータのハッシュとファイナルブロックのheaderに含まれているハッシュとを比較する。トランザクションが別のシャードにより提案されたものであれば、トランザクションデータは非同期的にシャードを横断して共有される。
- トランザクションデータが利用可能になると、ファイナルブロックのdata部分が再構成されてTX-Blockはローカルのトランザクションブロックチェーンに追加される。アカウントのステートとグローバルのstateはそれに従って更新される。
- トランザクションの中身が利用不可である場合、ノードはアカウントのローカルビューで当該トランザクションの送信者のアカウントを一時的に無効化するので、ローカルのトランザクションの中身とグローバルのstateとを同期できるまでこのアカウントに関連するその他全ての保留中のトランザクションも拒否される。このような拒否されたトランザクションは、送信ノードが再試行する必要がある。
(ZILLIQAホワイトペーパー日本語訳5 ←← 前)|(次 →→ ZILLIQAホワイトペーパー日本語訳7)
免責
邦訳には誤りがある場合がございます。予めご承知おき下さい。
確実な情報を知るためには冒頭に示した原文をご参照くださいますようお願いいたします。