(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024019632
(43)【公開日】2024-02-09
(54)【発明の名称】ブロックチェーンネットワークにおいて大規模分散メモリプールを管理するためのコンピュータ実装されたシステム及び方法
(51)【国際特許分類】
G06F 16/27 20190101AFI20240202BHJP
【FI】
G06F16/27
【審査請求】有
【請求項の数】11
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023214345
(22)【出願日】2023-12-20
(62)【分割の表示】P 2021206728の分割
【原出願日】2018-07-16
(31)【優先権主張番号】1711879.5
(32)【優先日】2017-07-24
(33)【優先権主張国・地域又は機関】GB
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】コヴァチ,アレグザンドラ
(72)【発明者】
【氏名】デステファニス,ジュゼッペ
(72)【発明者】
【氏名】マデオ,シモーネ
(72)【発明者】
【氏名】モティリンスキ,パトリック
(72)【発明者】
【氏名】ヴィンセント,ステファヌ
(57)【要約】
【課題】 ブロックチェーンネットワーク内に実装される、コンピュータ実装された方法を提供する。
【解決手段】 検証ノードは、複数のトランザクションを有する新たにマイニングされたブロックに関するデータを受信し、また、分散メモリプールに対して、該複数のトランザクションを分散メモリプールから削除する削除要求を送信する。分散メモリプールを格納するノードは、複数のトランザクションを格納し、該複数のトランザクションは、ブロックチェーンのブロックへとマイニングされるのを待っている分散メモリプールの少なくとも一部を形成する。当該コンピュータ実装された方法は更に、ブロックチェーンネットワークの検証ノードからの削除要求を受信し、該削除要求は、新たにマイニングされたブロックに含められた1つ以上のトランザクションを特定し、該削除要求は、前記1つ以上のトランザクションが分散メモリプールから削除されるべきことを指し示す。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ブロックチェーンネットワークのノード用のコンピュータ実装された方法であって、
複数のトランザクションを有する新たにマイニングされたブロックに関するデータを受信し、
トランザクションを分散メモリプール内で再び利用可能にするために、復帰要求を前記分散メモリプールに送信する、
ことを有するコンピュータ実装された方法。
【請求項2】
前記復帰要求はブロックチェーン再編成の後に送信される、
請求項1に記載のコンピュータ実装された方法。
【請求項3】
前記トランザクションは、指定数の固有の復帰要求が前記分散メモリプールに提供された後に再び利用可能にされる、請求項1又は2に記載のコンピュータ実装された方法。
【請求項4】
固有の復帰要求の前記指定数は、前記トランザクションの検証を担うバリデータの数、トランザクションの可逆的剪定をトリガーするのに必要なバリデータの最低数、及びトランザクションの物理的剪定をトリガーするのに必要なバリデータの最低数の関数である、請求項3に記載のコンピュータ実装された方法。
【請求項5】
トランザクションに、該トランザクションに対して復帰要求が受信されたときに、前記分散メモリプールから除去されるものとしてのマーキングを解除する、
ことを更に有する請求項1乃至4のいずれか一項に記載のコンピュータ実装された方法。
【請求項6】
トランザクションに、該トランザクションに対して閾値数の復帰要求が受信されたときに、前記分散メモリプールから除去されるものとしてのマーキングを解除する、
ことを更に有する請求項1乃至5のいずれか一項に記載のコンピュータ実装された方法。
【請求項7】
前記閾値数の復帰要求が、前記ブロックチェーンネットワーク内の、閾値数の、異なる検証ノードから来ることが要求される、
請求項6に記載のコンピュータ実装された方法。
【請求項8】
前記分散メモリプールからのトランザクションの剪定は、
手動剪定、
トランザクション期限切れ、及び
前記分散メモリプール内のトランザクションに関してメモリ制限に達したこと、
のうちの1つ以上によって起動される、
請求項1乃至7のいずれか一項に記載のコンピュータ実装された方法。
【請求項9】
コンピュータ実行可能命令を有したコンピュータ読み取り可能記憶媒体であって、前記コンピュータ実行可能命令は、実行されるときに、請求項1乃至8のいずれか一項に記載の方法を実行するように1つ以上のプロセッサを構成する、コンピュータ読み取り可能記憶媒体。
【請求項10】
インタフェース装置と、
前記インタフェース装置に結合された1つ以上のプロセッサと、
前記1つ以上のプロセッサに結合されたメモリであり、当該メモリはコンピュータ実行可能命令を格納しており、該コンピュータ実行可能命令は、実行されるときに、請求項1乃至8のいずれか一項に記載の方法を実行するように前記1つ以上のプロセッサを構成する、メモリと、
を有するエレクトロニクス装置。
【請求項11】
ブロックチェーンネットワークのノードであって、請求項1乃至8のいずれか一項に記載の方法を実行するように構成されたノード。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書は、概して、ブロックチェーンネットワークのノードにおける実装に適したコンピュータ実装された方法及びシステムに関する。多数のトランザクション及び大きいトランザクションブロックを扱うための改良されたブロックチェーンノード構造、ネットワークアーキテクチャ、及びプロトコルが記述される。本発明は、以下に限られないが、特にビットコイン(Bitcoin)ブロックチェーンとの使用に適する。
【背景技術】
【0002】
本文書おいて、我々は、用語‘ブロックチェーン’を、全ての形態の電子的な、コンピュータベースの、分散型台帳を含むように使用する。これらは、以下に限られないが、ブロックチェーン及びトランザクションチェーンの技術、許可された及び許可されていない台帳、共有台帳、並びにこれらの変形を含む。ブロックチェーン技術の最も広く知られている用途はビットコイン台帳であるが、他のブロックチェーン実装も提案及び開発されている。ここでは、便宜及び説明のために、ビットコインを参照することがあるが、留意されたいことには、本発明は、ビットコインブロックチェーンとの使用に限定されず、それに代わるブロックチェーン実装及びプロトコルも本発明の範囲内にある。
【0003】
ブロックチェーンは、トランザクション及び他の情報からなる複数のブロックで構成されるコンピュータベースの非中央集権的な分散システムとして実装されるコンセンサスベースの電子台帳である。ビットコインの場合、各トランザクションは、ブロックチェーンシステムにおける参加者間でのデジタル資産の管理の移転を符号化するデータ構造であり、少なくとも1つのインプットと少なくとも1つのアウトプットとを含む。各ブロックが、そのブロックが一緒にチェーン化される先行ブロックのハッシュを含むことで、その開始以前にそのブロックチェーンに書き込まれた全てのトランザクションの恒久的で変更不可能な記録を作り出す。トランザクションは、それらのインプット及びアウトプットに埋め込まれるスクリプトとして知られた小プログラムを含み、それらが、トランザクションのアウトプットが誰によってどのようにアクセスされ得るかを指定する。ビットコインプラットフォーム上では、これらのスクリプトは、スタックベースのスクリプト言語を使用して書かれる。
【0004】
トランザクションがブロックチェーンに書き込まれるには、そのトランザクションが“検証済み”でなければならない。幾つかのネットワークノードがマイナー(採掘者)として働いて、各トランザクションが有効であることを保証するための作業を実行し、無効なトランザクションはネットワークから拒絶される。例えば、ノードにインストールされているソフトウェアクライアントが、未使用トランザクションアウトプット(unspent transaction outputs;UTXO)を参照するトランザクションに対してこの検証作業を実行する。検証は、そのロッキング及びアンロッキングスクリプトを実行することによって実行され得る。ロッキング及びアンロッキングスクリプトの実行がTRUEに評価され、且つ特定の他の条件が満たされる場合、トランザクションは有効であり、トランザクションがブロックチェーンに書き込まれることができる。従って、トランザクションがブロックチェーンに書き込まれるには、そのトランザクションが、i)そのトランザクションを受け取るノードによって検証され(そのトランザクションが検証された場合に、そのノードがそれをネットワーク内の他のノードに中継する)、ii)マイナーによって構築された新しいブロックに追加され、そして、iii)マイニングされ、すなわち、過去のトランザクションの公開台帳に追加されなければならない。ブロックチェーンに十分な数のブロックが追加されてトランザクションを実質的に不可逆にしたとき、トランザクションは承認されたとみなされる。
【0005】
ブロックチェーン技術は、暗号通貨実装の使用に関して最も広く知られているが、デジタル起業家は、新しいシステムを実装しようと、ビットコインが基づく暗号セキュリティシステムと、ブロックチェーンに格納されることが可能なデータとの双方の使用を探求し始めている。ブロックチェーンが、暗号通貨建ての支払いに全く限定されない自動化されたタスク及びプロセスに使用されることができれば、非常に有利であろう。そのようなソリューションは、ブロックチェーンの利点(例えば、イベントの恒久的な改ざん防止記録、分散処理など)を活用することができながら、それらの用途においていっそう融通のきくものとなる。
【0006】
1つの研究分野は、“スマート契約”の実装のためのブロックチェーンの使用である。それらは、機械読み取り可能な契約又は合意の条件の履行を自動化するように設計されるコンピュータプログラムである。自然言語で書かれていた伝統的な契約書とは異なり、スマート契約は、結果を生成するためにインプットを処理し得るルールを有する機械実行可能プログラムであり、そして、それらの結果に応じてアクションを実行させ得る。
【0007】
ブロックチェーン関連で関心ある他の1つの分野は、ブロックチェーンを介して実世界のエンティティを表現して移転するための‘トークン’(又は‘カラードコイン’)の使用である。潜在的に機密又は秘密のアイテムを、識別可能な意味又は値を持たないトークンによって表現することができる。トークンは、故に、実世界のアイテムがブロックチェーンから参照されることを可能にする識別子として機能する。
【発明の概要】
【0008】
例えばビットコインといったブロックチェーン技術の未来は、少なくとも部分的に、毎秒発行されるトランザクションの量を増加させることができる新アーキテクチャの提案を当てにしている。そのような新アーキテクチャに対する1つの要求は、ブロックサイズ制限についての現在の限界を取り除くことである。そのシナリオにおいて、1つの技術的問題は、大きいブロックのデータをどのように管理し、そして、非常に大きいブロックチェーンのストレージをどのように管理するのかである。他の1つの技術的問題は、ブロックへとマイニングされてブロックチェーンに組み込まれるのを待っているトランザクションのプールをどのように管理するのかである。ローカルなメモリプールでは十分なストレージ能力を提供することができず、それ故に、分散メモリプール(distributed memory pools;DMPs)に関する新しいモデルを設計する必要がある。トランザクションがブロックチェーンに含められた後には、そのような分散メモリプールからそれらトランザクションを除去することが望ましい。しかしながら、他の1つの技術的問題は、分散メモリプール内で問題となるデータ不一致を生じさせることなく、分散メモリプールからのトランザクションの除去をどのように安全に管理するのかである。更に他の1つの技術的問題は、分散メモリプールに格納されたデータを分断させようとする攻撃に対するセキュリティをも向上させながら、データ不一致の問題をどのように緩和するのかである。
【0009】
本発明の特定の実施形態の1つの狙いは、ここに記載される技術的解決策を提供することによって、これらの技術的問題に対処することである。特に、本明細書は、分散メモリプール内でのデータ不一致の問題を緩和しながら、分散メモリプールが剪定(プルーニング)されることを可能にするような、ブロックチェーンネットワークにおける検証ノードと分散メモリプールノードとの間での通信及びデータ管理のためのプロトコルを記述する。従って、本発明は、ブロックチェーンネットワークの分散性を維持しながらその容量を増加させることによって技術的に貢献する。
【0010】
ブロックチェーンネットワークのノード用のコンピュータ実装された方法が記述され、当該コンピュータ実装された方法は、
複数のトランザクションを格納し、該複数のトランザクションは、ブロックチェーンのブロックへとマイニングされるのを待っている分散メモリプールの少なくとも一部を形成し、
ブロックチェーンネットワークの検証ノードからの削除要求を受信し、削除要求は、新たにマイニングされたブロックに含められた1つ以上のトランザクションを特定し、削除要求は、該1つ以上のトランザクションが分散メモリプールから削除されるべきことを指し示す、
ことを有する。
【0011】
上述の方法は、検証ノードが分散メモリプールと通信することで、ブロックチェーンに組み込まれており、それ故に、分散メモリプールから除去されることができるトランザクションを除去することを可能にする。1つ以上のトランザクションが分散メモリプールから削除されるべきことを指し示す明示的な削除要求の送信/受信は、トランザクションがマイニングされたことの単なる通知とは異なる。従来技術の構成では、マイニングされたトランザクションは、トランザクションが承認されるのに十分なブロックが上にマイニングされたことになるまで、メモリプールから除去されない。従って、メモリプールは、必要とされそうにもない多数のトランザクションを、それらがブロックチェーンにマイニングされた後にかなりの量の時間にわたって含んでいる。さらに、マイナーが、特定の削除要求プロトコルに従わずに、一定期間の時間後にトランザクションを自動的に削除するとすれば、それは特定の状況においてデータ不一致につながり得る。本発明は、これらの問題を認識して対処する。
【0012】
当該方法は更に、トランザクションに、該トランザクションに対して第1閾値数の削除要求が受信されたときに、分散メモリプールから除去されるものとしてマーキングすることを含み得る。当該方法はまた、トランザクションを、該トランザクションに対して第2閾値数の削除要求が受信されたときに、分散メモリプールから物理的に除去することを含み得る。第2閾値は第1閾値よりも大きい。さらに、第1閾値数の削除要求及び第2閾値数の削除要求が、ブロックチェーンネットワーク内の、閾値数の、異なる検証ノードから来ることが要求される。これらの特徴は、分散メモリプール内でトランザクションが除去されるものとしてマーキングされることに関するコンセンサスのレベルと、トランザクションが分散メモリプールから物理的に除去される前での更なるコンセンサスのレベルとを必要とする。これは、データ不一致の問題が緩和するとともに、分散メモリプールに格納されたデータを分断させようとする攻撃に対するセキュリティを向上させる。トランザクションは実効的に、利用可能、除去される、及び物理的に除去されるという、分散メモリプールに対する3つの状態を有する。除去されるものとしてマーキングされたトランザクションは、必要とされる場合に、分散メモリプール内で再び利用可能であるように復帰されることができる。物理的に削除されるトランザクションは、システムの構成に応じて、復帰可能でないことがある。
【0013】
トランザクションは、削除要求を受信してから、該トランザクションに対する更なるデータ要求が受信されることなく、閾値時間だけ経過した後にのみ、分散メモリプールから物理的に除去され得る。例えば、閾値時間は、分散メモリプールからの削除が要求されているトランザクションがブロックチェーンに組み込まれた後に、少なくとも1、2、3、4、5、6、又はそれより多くのブロックがブロックチェーンに組み込まれることに相当するとし得る。また、トランザクションは、削除要求を受信してから、該トランザクションに対する更なるデータ要求が受信されることなく経過した時間の降順で、分散メモリプールから物理的に除去されてもよい。当該コンピュータ実装された方法はまた、トランザクションに、該トランザクションが先行して除去されたトランザクションに依存するときに、分散メモリプールから除去されるものとしてマーキングし得る。これらの特徴は、データ不一致の問題を緩和することの更なる助けとなるとともに、分散メモリプールに格納されたデータを分断させようとする攻撃に対するセキュリティを更に向上させる。
【0014】
削除要求は、分散メモリプールに関連付けられた新たな削除要求データベースに格納されることができる。そのトランザクションを検証しなかったバリデータから受信された削除要求は破棄され得る。トランザクションは、チェックバリデータオプションがイネーブルされている場合にのみ破棄され得る。分散メモリプールから除去されるものとして既にマーキングされたトランザクションに対するデータ要求の数もモニタすることができる。このようなシステムを用いることで、分散メモリプールからの除去のためにマーキングされたトランザクションに対して閾値数のデータ要求が受信された後に、トランザクションは、分散メモリプールへの復帰の候補としてマーキングされ得る。トランザクションは、該トランザクションに対して復帰要求が受信されたときに、又は該トランザクションに対して閾値数の復帰要求が受信されたときに、分散メモリプールから除去されるものとしてのマーキングを解除され得る。閾値数の復帰要求が、ブロックチェーンネットワーク内の、閾値数の、異なる検証ノードから来ることを要求することができる。分散メモリプールから除去されたトランザクションに対する問い合わせに応答して、トランザクションが分散メモリプールから除去されたことを指し示すメッセージが送信され得る。また、このようなメッセージは、トランザクションが分散メモリプールから除去されたことを指し示すとともに、除去された該メッセージに対して受信された削除メッセージの数を指し示すこともできる。やはり、これらの特徴は、データ不一致の問題を緩和することの更なる助けとなるとともに、分散メモリプールに格納されたデータを分断させようとする攻撃に対するセキュリティを更に向上させる。
【0015】
分散メモリプール管理のためのプロトコルの上述の特徴は、ブロックチェーンネットワーク内の分散メモリプールストレージノードの視点から記述されている。ブロックチェーンネットワーク内の検証ノードの視点から、
複数のトランザクションを有する新たにマイニングされたブロックに関するデータを受信し、
分散メモリプールに、前記複数のトランザクションを当該分散メモリプールから削除する削除要求を送信する、
ことを有するコンピュータ実装された方法が提供される。
【0016】
削除要求は、好ましくは、コンセンサスプロトコルに影響を及ぼし得る不正な複製の流布を回避するために、ナンス及び/又はタイムスタンプを含むべきである。削除要求はまた、好ましくは、検証ノードの秘密鍵で署名される。
【0017】
ノードは、自身が検証したトランザクションの記録を記憶し、自身が以前に検証したトランザクションに関してのみ削除要求を送信することができる。削除要求は、チェックバリデータオプションがイネーブルされているときにのみ、ノードが以前に検証したトランザクションに関して送信され得る。また、トランザクションを分散メモリプール内で再び利用可能にするために復帰要求が、例えば、ブロックチェーン再編成の後に、システム内でのデータ一貫性を保持するために送信され得る。
【0018】
前記削除要求は、
マイニングされたブロックの受信、
ブロックチェーン再編成、及び
二重支払い又はその他の形態のトランザクションコンフリクト、
のうちの1つ以上によって起動されることができる。
【0019】
分散メモリプールからのトランザクションの剪定は、
手動剪定、
トランザクション期限切れ、及び
前記分散メモリプール内のトランザクションに関してメモリ制限に達したこと、
のうちの1つ以上によって起動されることができる。
【0020】
本発明の実施形態は、多様な形態で提供されることができる。例えば、コンピュータ実行可能命令を有したコンピュータ読み取り可能記憶媒体を提供することができ、該コンピュータ実行可能命令は、実行されるときに、ここに記載の方法を実行するように1つ以上のプロセッサを構成する。インタフェース装置と、該インタフェース装置に結合された1つ以上のプロセッサと、該1つ以上のプロセッサに結合されたメモリであり、当該メモリはコンピュータ実行可能命令を格納しており、該コンピュータ実行可能命令は、実行されるときに、ここに記載の方法を実行するように上記1つ以上のプロセッサを構成する、メモリと、を有するエレクトロニクス装置も提供することができる。より更には、ここに記載の方法を実行するように構成された、ブロックチェーンネットワークのノードを提供することができる。
【図面の簡単な説明】
【0021】
本発明のこれら及び他の態様が、ここに記載される実施形態を参照して解明されて明らかになる。以下、本発明の実施形態が、単なる例として、以下を含む添付の図面を参照して説明される。
【
図2】ユーザがトランザクションを提起した時点からそれがブロックチェーン上で終了するまでのステップを例示する動作図に関して、ビットコインネットワークの改良アーキテクチャを示している。
【
図3】メンプール(mempool)内で承認を待っているトランザクションの合計サイズの一例を示すグラフである。
【
図4】内部中央集権的ストレージ機関にリンクされた複数のノードを示している。
【
図5】各ノードが分散メンプール及び分散ストレージ機関の双方の一部である構成を例示している。
【
図6】新しいノード構造がビットコインネットワークにどのように適合するかを例示しており、検証ノードがストレージプールのメンバーであり、それらプールが共に非中央集権的な分散ビットコインネットワークを有するネットワーク構成を示している。
【
図8】現行プロトコルへの変更を構成する新しいマークルツリー構造を例示している。
【
図9】ブルームフィルタを作成する際のワークフローを示している。
【
図10】可逆ブルームフィルタ(IBF)及び可逆ブルームルックアップテーブル(IBLT)にトランザクションがどのようにエンコードされるかを例示するワークフローを示している。
【
図11】バリデータノードv及びメンプールノードsを含むメンプールクラスタを例示している。
【
図12】新たにマイニングされたブロックに関する更新を受信するバリデータノードv
n(0≦n<N)を示しており、ブロックを検証した後、バリデータが、発行されたトランザクションに関するDELETE(削除)要求を分散メモリプール(DMP)に送信し、各メンプールノードsm(0≦m<M)が、S
DBテーブル上の格納要求及びR
DBテーブル上の除去要求を追跡する。
【
図13】トランザクションidiの状態図を示しており、バリデータから受信したメッセージのタイプ(すなわち、STORE、REMOVE、REVERT)と数(例えば、N、N*、N**)に応じて、トランザクションは、状態を、Available、Removed、又はPhysically Removeに変化させることができる。
【発明を実施するための形態】
【0022】
ブロックチェーンネットワークノードのタイプ
ブロックチェーンネットワークは、招待なしで又は他メンバーの同意なしで、誰でも参加し得るピアツーピアオープンメンバーシップネットワークとして記述され得る。その下でブロックチェーンネットワークが動作するブロックチェーンプロトコルのインスタンスを走らせている分散エレクトロニクス装置は、ブロックチェーンネットワークに参加することができる。そのような分散エレクトロニクス装置は、ノードとして参照され得る。ブロックチェーンプロトコルは、例えば、ビットコインプロトコル又は他の暗号通貨とし得る。
【0023】
ブロックチェーンプロトコルを走らせ、ブロックチェーンネットワークのノードを形成するエレクトロニクス装置は、例えば、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバ、コンピュータファームなどのコンピュータ、スマートフォンなどのモバイル装置、スマートウォッチなどのウェアラブルコンピュータ、又は他のエレクトロニクス装置を含め、様々なタイプのものとし得る。
【0024】
ブロックチェーンネットワークのノードは、有線及び無線通信技術を含み得る好適な通信技術を使用して互いに結合される。多くの場合、ブロックチェーンネットワークは、少なくとも部分的にインターネット上で実装され、ノードのうち一部は、地理的に分散した場所に位置し得る。
【0025】
現在、ノードは、複数のブロックにグループ化されて該複数のブロックの各々がチェーン内の先行ブロックのハッシュが含んだブロックチェーン上の全てのトランザクションのグローバル台帳を維持している。グローバル台帳は分散台帳であり、各ノードが、グローバル台帳の完全なコピー又は部分的なコピーを格納し得る。グローバル台帳に影響を与えるノードによるトランザクションが他のノードによって検証されることで、グローバル台帳の妥当性が維持される。例えばビットコインプロトコルを使用するものなど、ブロックチェーンネットワークを実装して動作させることの詳細は、当業者によって理解されることになる。
【0026】
各トランザクションは典型的に、1つ以上のインプットと1つ以上のアウトプットとを有する。インプット及びアウトプットに埋め込まれるスクリプトが、トランザクションのアウトプットが誰によってどのようにアクセスされ得るかを指定する。トランザクションのアウトプットは、トランザクションの結果として値が転送されるアドレスとし得る。そして、その値が、未使用トランザクションアウトプット(UTXO)として、その出力アドレスに関連付けられる。その後、後続のトランザクションが、その値を使用する又はばらまくために、そのアドレスをインプットとして参照し得る。
【0027】
ノードは、それらの機能に応じて、異なるタイプ又はカテゴリのものであるとし得る。提案されていることには、ウォレット、マイニング、フルブロックチェーンメンテナンス、及びネットワークルーティングノードという、ノードに関連付けられる4つの基本機能が存在する。これらの機能のバリエーションが存在してもよい。ノードは、それらの機能のうちの2つ以上を有していてもよい。例えば、“フルノード”は、4つの全ての機能を提供する。従って、軽量なノードは、例えばデジタルウォレットにて実装され得るとともに、ウォレット及びネットワークルーティングの機能のみを果たし得る。デジタルウォレットは、ブロックチェーン全体を格納するのではなく、ブロックを照会するときにインデックスとしての役割を果たし得るものであるブロックヘッダを追跡し得る。ノードは、例えばTCP/IP(通信制御プロトコル)などのコネクション指向のプロトコルを用いて、互いに通信する。
【0028】
マーチャントノード(ここでは時々、“M-node”(“Mノード”)として参照する)といった、更なるタイプ又はカテゴリのノードが提供されてもよい。Mノードは、トランザクションの高速伝搬に焦点を当てるように設計される。それらは、ブロックチェーン全体を格納してもよいし、しなくてもよく、また、マイニング機能は実行しない。その意味で、それらは軽量なノード又はウォレットに類似するが、それらは、トランザクションの高速伝搬を可能にするという追加の機能を含む。Mノードの動作上の焦点は、特に他のMノードへの、未承認トランザクションの迅速な検証及び伝搬であり、それら他のMノードから、それら未承認トランザクションがブロックチェーンネットワーク内の他のノードへと迅速に押し出される。この機能を容易にするために、Mノードは、さもなければ管理プロトコル下のノードに対して許可され得るものであるいっそう多くの着信コネクション及び特には発信コネクションを許可される。
【0029】
これらMノードは集合的に、マーチャントネットワーク(又は“M-net”(“Mネット”))として参照されることがある。用語“マーチャント”は、“特化された”を意味するとして解釈されてもよい。Mノードは、ブロックチェーンネットワークに統合され得る。各Mノードは、それがMノードの機能を実行できることを保証することになる一定のハードウェア能力及びパフォーマンス能力を満たした、ブロックチェーンネットワーク上の特化されたノードである。すなわち、Mネットは、ブロックチェーンネットワーク内であちこちに分散されたサブネットワークと見なされ得る。(1つ以上の)Mノードが、1つ以上の専用の機能又はサービスを実行するように構成及び設定され得る。
【0030】
Mネットが信頼性をもって動作して、ある一定のセキュリティレベルでサービスを提供することができるためには、MノードがMネット全体の良好な通覧を維持する必要があり、従って、効率的なルーティングプロトコルが整備されている必要がある。Mノードが開始トランザクションを受信するたびに、そのMモードはそのトランザクションを、幾つかの他のMノードと他のノードとにブロードキャストする必要がある。Mネットの文脈において、これは、複数巡回セールスマン問題(multiple traveling salesman problem;MTSP)に対する解を見つけるということになる。この問題に取り組むソリューションは多すぎるほどあり、それらのうちのいずれか1つがMネットで採用され得る。Mノードは各々、何らかの最新の形態のルーティング最適化を走らせる。
【0031】
一部の実装において、Mネットは、非中央集権的なIPマルチキャストタイプのネットワークとして実装される。すなわち、ブロックチェーンネットワークへの着信トランザクションの高速拡散を可能にするために、マルチキャストを用いて、トランザクションがMネット中に迅速にブロードキャストされることを保証することができ、全てのMノードが、次いで、ブロックチェーンネットワーク内の他のノードにトランザクションを転送することに集中することを可能にする。
【0032】
マルチキャストネットワークアーキテクチャは、情報を受け取ることに関心のあるノードの各々に対するデータ重複なしで、宛先ノードのグループに向けたデータの同時配給ができることを可能にする。ノードがマルチキャスト送信を受信することを望む場合、そのノードは、マルチキャストグループに参加し(登録フェーズ)、その後、マルチキャストグループ上で送信される全てのデータを受信できることになる。IPマルチキャストは、どれだけ多くの受信者が存在するかについての予備知識を必要としないことによって、より大きな受信者集団に拡大することができ、パケットを1回だけ送信することを送信元に要求することによって、ネットワークインフラストラクチャが効率的に使用される。マルチキャストネットワークの性質のため、多数の他のノードとの同時通信に起因して、(TCPのような)コネクション指向のプロトコルの使用は実用的でない。従って、コネクションレスプロトコルが使用される。
【0033】
例えばビットコインなどの一部のブロックチェーンネットワークは、ノード間通信にTCPを使用している。TCPを用いて送られるデータパケットは、順序付けの目的で使用される関連シーケンス番号を有する。これに加えて、TCPプロトコルは、コネクションを確立する時とコネクションを終了させる時との双方で、3方向ハンドシェイク手順を伴う。TCP上で送られるパケットは関連するオーバーヘッドを伴い、それらはシーケンス番号を付随し、また、3方向ハンドシェイクプロトコルが存在する。コネクションを確立する際には128-136バイトが送信されているが、コネクションを閉じることは160バイトをかける。従って、パケット伝送におけるハンドシェイクは、最大で296バイトをかける。さらに、ノードが新たなトランザクションを受信するとき、そのノードは他のノードに、トランザクションのハッシュを含むインベントリメッセージ(INV)を通知する。INVメッセージを受信するノードは、そのトランザクションのハッシュが以前に見たことがあるものであるかをチェックし、そうでない場合、そのノードはGETDATAメッセージを送信することによって、そのトランザクションを要求することになる。ノードAからノードBにトランザクションを伝送するのに必要な時間は、T1=verification+TCP(inv+getdata+tx)であり、ここで、TCP()は、TCPハンドシェイク手順によって導入されるオーバーヘッドを時間に関して示す。
【0034】
Mノードは、他のノードとの通信のためにTCPを使用するように構成されることができ、これは、ビットコインのような既存のプロトコルによって強制されている。しかしながら、それらは、MノードからMノードへの通信のために、あるいは、より好適には、マルチキャストの状況においてMノードから複数のMノードへの通信のために、ユーザデータグラムプロトコル(User Datagram Protocol;UDP)のようなコネクションレスプロトコルを使用してもよい。TCPとは異なり、UDPはハンドシェイクプロトコルを伴わず、故に、Mノードはより迅速にトランザクションを伝搬することができる。これはまた、実際のトランザクションを一度も送ることなく、繰り返しのINVメッセージを送ることによって、悪意のあるノードが他のノードを結びつけることを回避することができる。
【0035】
UDPの軽量性は、ある一定のトレードオフと関連付けられる。存在するエラーチェックが少なく、また、エラー回復は存在しない。一部の実装において、UDPのこれらの制約は、アプリケーション層の機能としてエラー回復、順序付け、及び再送信を実装することを通じて、アプリケーションレベルで克服されることができる。アプリケーションレベルにエラーチェックを置くことは、ネットワークからオーバーヘッドを取り除く。
【0036】
一状況例において、ブロックチェーンネットワーク上の通常のノードが、例えばマーチャントベースの支払いなどの、Mネットを介して処理されることを望むトランザクションを生成する。そのノードは、そのトランザクションをMノードに送信し、そして、そのMモードがマルチキャストを用いてそれを他のMノードにブロードキャストしてもよいし、あるいは、そのノードがMノードのIPマルチキャストアドレスを知っている場合には、そのトランザクションを直接的に複数のMノードに送信してもよい。一部の例では、Mネットの全てのMノードが単一のマルチキャストアドレスのメンバーであり、故に、そのアドレスに送信される全てのトランザクションが全てのMノードによって受信されるが、一部のケースでは、Mネットに関連付けられた2つ以上のマルチキャストアドレスが存在することがあり、受信したMノードが、そのトランザクションをMネット全体に伝搬させるために他のマルチキャストアドレスへのトランザクションの更なるブロードキャストが必要であるかを、ルーティング情報から評価し得る。
【0037】
マルチキャストは、新たなトランザクションの全てのMノードへ高速な初期伝搬を確実にするのを支援するが、マルチキャストソリューションは、高まるトランザクションスループットに由来するブロックチェーンネットワークのスケーラビリティ問題に必ずしも対応しない。典型的に、ネットワーク内の各ノードが、自身が見た、マイナーがプローフオブワーク(proof-of-work)を完了することによってブロックチェーンに組み込まれることが未だ済んでいない未承認のトランザクション、を含むメンプール(mempool)を維持している。支払処理での使用から生じるトランザクションの数における大きい成長は、各メンプールに格納するトランザクションの量を増加させる。従って、Mネット内のノードは、ほぼ同時に新たなトランザクションを受信することができるものの、それらは、大きくて速く変化するメンプールに関するストレージ能力制限を有し得る。
【0038】
この問題に対処するために、Mノードは、マルチキャストを使用することに代わるものとして、分散ハッシュテーブル(Distributed Hash Table;DHT)によって実装された共有メンプールを使用し得る。
【0039】
500バイトなるトランザクション(TX)の平均サイズと、~104TX/sなるトランザクションレートとを仮定すると、Mネットは、1日当たり~400GBの着信データを受信することになり得る。この全てのデータが、未承認トランザクションのメンプールに可変量の時間にわたって保存される必要がある。従って、Mネットは、かなりのストレージと、データを高速に格納する能力とを必要とする。個々のMノード各々に過大な要求を課さないために、Mノードは、DHTに頼った共有メモリを実装する。各Mノードに全ての着信TXをそれ自身のメンプールに保持させる代わりに、各Mノードが、全体のうちの特定の割合と、残りの部分のハッシュ及び関連するキー値のみを保存する。
【0040】
DHTは、ノード間でのキーセットのメンバーシップ分割を可能にするとともに、与えられたキーの所有者にのみ効率的で最適化されたやり方でメッセージを送信することができる非中央集権的な分散システムのクラスである。ネットワークの各ノードを、ハッシュテーブルの配列のセルとして見ることができる。DHTは、多数のノードを管理するために設計されており、新たなノードがネットワークに参加できること、及び共有データの完全性を損なうことなく古いノードが離脱及び故障できることを可能にする。DHTは、非中央集権化(中央権限もなければ中央調整もない)、スケーラビリティ(何百万ものノードでシステムが効率的な挙動を有する)、及びフォールトトレランス(システムは信頼性があり、ネットワークに対して参加及び離脱したり故障したりするノードを管理することができる)を保証する。ネットワークの各ノードは、少数の他のノードのみと接触したままであればよく、従って、データの変化又は新ピースの存在下でネットワークが過負荷にならない。
【0041】
同じ概念が、ブロックチェーン上の全ての未使用アウトプットのセットを含むデータベースであるUTXOデータベースに適用され得る。UTXOデータベースは、ノードのセット間でコンテンツを共有するためにDHTを用いて構築され得る。
【0042】
Mネット用の共有メンプールを実装するのに使用され得る数多くの可能なDHTアーキテクチャ及びプロトコルが存在している。1つの例はPastry(TM)であるが、他にも数多く存在する。Pastry(TM)は、分散システム上で情報を保管及び移転することができるオーバレイネットワークを維持するために設計されたプロトコルである。Pastry(TM)ネットワーク内の各ノードは、128ビットの識別子を割り当てられ、それを用いて、(0から2128-1までの範囲の)円形のノードID空間内でのノード位置が指し示される。IDは、ノードがネットワークに参加するときにランダムに割り当てられる。各ノードが、ルーティングテーブル、近隣(ネイバーフッド)セット、及びリーフセットを維持する。
【0043】
ロバストなDHTをサイズ決定する際に考慮すべき1つのファクタは、ネットワーク全体の堅牢性及び信頼性を保証するために必要とされるレプリカの数である。既に述べたように、複数のノードがネットワークに対して参加及び離脱することができ、このことが、データの可用性に影響を与えるべきでない。トランザクションAを格納しているノードがネットワークを離脱する場合、ネットワークの別の部分でトランザクションAを見つける必要がある。例えばビットコインのような既存のブロックチェーンネットワークでは、ネットワークが、ネットワーク内の全ノードの数に等しい数のブロックチェーンレプリカ(平均で5000レプリカ)を有するが、このことがスケーラビリティに影響を及ぼす。
【0044】
Mネットの一構成では、全てのMノードでメンプールが完全に複製されるわけではなく、代わりにDHTによって実装される。信頼性を提供するために、DHTは、幾らかの重複を有するように実装されることができ、すなわち、各トランザクションデータアイテムが、全てのMノードではないが、2つ以上のMノードに複製される。一例として、DHTは、最小で2個のレプリカを指定するように実装され得る。これは、ある確率で2つのノードが任意の所与の1時間以内で同時にダウンすることをもたらし、該確率は、ノード間の完全なる独立性を仮定して、(1/(24×365))2=130×10-8となる。
【0045】
新たなトランザクションを分散メンプールに格納するプロセスは、故に、DHTを用いて分散メンプールが実装される以下のステップを有し得る。そのプロセスは、ノードがMノードにトランザクションを送信することを含む。Mノードが、実装に応じてトランザクション又はトランザクションIDをハッシュして、キー値を取得する。キー値は、トランザクションが格納されるべきMノード又は複数のMノード(複製データの場合)を指し示す。次いで、Mノードがトランザクションを分散メンプールに格納し、これは、キー値とMネット内のMノードの割当てIDとに基づいて、トランザクションが格納されるべき正しい(1つ以上の)Mノードにトランザクションをルーティングすることを含む。Mノードは、関与するDHTプロトコルに応じてアクナリッジメントを受信し得る。Mノードが通常ノードから新たなトランザクションを受信するとき、Mノードはトランザクションの真正性を検証するために特定の検証演算を実行し得る。
【0046】
トランザクションがハッシュされることで、トランザクションのキーが生成され得る。キーは、DHT内のどこにトランザクションが格納されるべきかを指し示すことができ、それは、現在のMノード以外のノードであり得る。Mノードは、次いで、そのトランザクションが動作中のDHT内に既にあるかを評価する。各Mノードが、Mネットを構成するMノードの間でのキー空間の分割に基づいて、格納されたトランザクションの一部を有する。一部の構成において、キー空間は、参加しているMノードの間で分割される。分割は、ネットワークの弾力性のために複製を生じさせるように重複を伴い得る。例えばPastry(TM)を使用するなどの一部の実装では、各Mノードに固有のキー又はID番号が割り当てられ、トランザクションは、トランザクションのキー値に対する近接性に基づいて、Mノード又は複数のMノード(複製が望まれる場合)に格納され得る。Mノードは、トランザクションの格納部分をローカルに有し得るとともに、残りの部分のハッシュ又はキー値を有し得る。従って、Mノードは、動作中にローカルデータに基づいて、新たなトランザクションがDHT内にあるかを評価することができ得る。
【0047】
そのトランザクションがDHT内にない場合、Mノードは、動作中に、そのキー値に基づいて、トランザクションをDHTに格納する。一般的な意味において、これは、put(k,tx)演算の形態をとることができ、ここで、kはキー値であり、txはトランザクションである。適用可能なDHTルーティングプロトコルが、トランザクションが適切な(1つ以上の)Mノードに送られて、それに格納されることを保証する。DHTは、選択された実装に応じて、分散ハッシュテーブルに関する様々なプロトコルに従って動作し得る。Mネットにトランザクションを格納するためのDHTの使用は、全てのMノードにトランザクションをルーティングするためのMネット内でのINV/GETDATAメッセージの使用を回避する。
【0048】
動作において、Mノードは、この例では、ブロックチェーンネットワークの通常のトランザクション転送プロトコルに従って、ブロックチェーンネットワーク内の通常ノードにトランザクションを送信し得る。例えば、通常ノードへの通信は、ノード間コネクションのためにTCPを使用し得る。
【0049】
一構成において、Mノードは、プロセッサ、ネットワークインタフェース、及びメモリを含む。Mノードは、ネットワーク接続性と、ここに記載される機能を実行するのに十分なプロセッシングリソース及びメモリリソースとを有する任意の好適なコンピューティングハードウェアを用いて実装され得る。Mノードは、ここに記載される機能を実装するためのプロセッサ実行可能命令を含み得る。一部のケースにおいて、プロセッサ実行可能命令はブロックチェーンマーチャントノードアプリケーションとして参照され得るが、理解されることには、これらの命令は、ハードウェア及びオペレーティングシステムに応じて、1つ以上のモジュール、アプリケーション、スクリプト、又は他のプログラミング構造にて実装され得る。プロセッサは、マルチコアプロセッサ及び/又は複数のプロセッサを含み得る。
【0050】
メモリは、そのDHTキー値すなわちMノードIDに部分的に基づいたDHTベースのメンプールの割当て部分を含むデータを格納する。この実装例では、メモリは更に、ルーティングテーブル、近隣セット、リーフセットを格納する。ルーティングテーブルは、Mネット内の特定のルーティング宛先のリストを含み、ノードがデータのパケットを受信するとき、そのノードは、そのデータをどこに送信すべきかを知るためにルーティングテーブルを参照する。ルーティングテーブルはまた、各宛先がそのMノードからどれだけ離れているかについての情報を含み得る。近隣セットは、例えば近接性メトリック(ピングレイテンシ)に基づいた近いMノードに関する情報を含む。リーフセットは、数値的に近いMノードを含む。Mノード同士が数値的に近いとは、それらのキー値(ノードID)が数値的に近い場合である。メモリは、以下で更に説明されるように、Mノード評判(レピュテーション)テーブルを更に含む。
【0051】
スケーラビリティを提供するために、DHTを使用してメンプールを実装することに加えて、M-netは、ノードがMネットに参加することを可能にする。新たなノードは、その参加要求をMノードのうちの1つに向けることができるよう、既にMネットの一部である少なくとも1つのMノードのアドレスを持つ必要がある。Mノードは、新たなノードに照会することを伴い得るものである特定の検証アクションを実行し得る。例えば、Mネットは、Mノードに対して規定した、Mネットに参加することに関連した一組の最低基準を有し得る。例示として、その基準は、利用可能な最低プロセッシングリソース、又は利用可能な最低空きメモリ、又は接続性要件を含み得る。
【0052】
新たなノードを検証するために実行される何らかの検証演算をMノードが完了したと仮定して、Mノードは、次いで、DHTの動作を支配する何らかのDHTプロトコルに従って、joinrequest()をDHTに転送する。次いで、DHTが新たなノードと通信して、それに、ルーティングテーブル、キー値(ノードID)、及び該新たなノードがMネット上の新たなMノードとして機能することを可能にするその他のデータを提供する。
【0053】
理解されることには、ノードがMネットに参加することができる容易さは、悪意あるノードがネットワークに参加してしまい得るという脆弱性を生み出す。潜在的な悪意あるノードを特定して隔離するために、一構成は、ノード挙動ランキングを追跡及び更新するために使用されるMノード評判テーブルをMノードが格納することを提供する。新たなノードがネットワークに参加するとき、ノードIDフィールドによって示されるように、そのノードがMノード評判テーブルに追加され得る。このテーブルは、一部の実装において、参加時間を更に含み得る。このテーブルは更に、そのMノードに関するスコア又は評価を含む。
【0054】
スコアは、特定の挙動メトリックに基づいて上下に調整され得る。例えば、Mノードがトランザクションの転送に失敗したり、ある期間にわたってサイレントのままであったり、トランザクションではないと判定されるトラフィックでMネットを溢れさせたり、又はこれら以外で否定的挙動に携わったりする場合、そのランキングは低下又は減少させられ得る。ノードのスコアが予め設定された最低値を下回ると、そのノードはMネットから排除され得る。
【0055】
特定のMノードで維持管理されるMノード評判テーブルは、Mネット全体ではなく、その近隣者のスコアを追跡することに限られてもよい。従って、新たなMノードが時点tにネットワークに参加する時には、その近隣者のMノード評判テーブルは、新たなノードについて如何なる情報も含んでいないが、時点tから、それらは、ノードレジスタテーブルに情報を格納して、新たなノードの評判を築き始める。例えば、新たなノードがサイレントノードである場合、すなわち、それがネットワーク上で受け取る情報を転送しない場合、全ての隣接者が、この挙動をそれらそれぞれのMノード評判テーブルに記録し始め、例えば、新たなノードのIDに否定的な値を割り当てる。ある特定の時間t+nの後に、新たなノードに気付いている全てのノードのMノード評判テーブルが否定的な値を含んでいる場合、それらのノードは、新たなノードを隔離してそれをネットワークから追放することを決定し得る。
【0056】
Mネットの分散メンプール内のトランザクションは、承認される前に、すなわち、ブロックチェーンに追加されるブロックに組み込まれて承認される前に、かなりの期間待つことがある。ブロックが“承認された”と見なされるのは、その上でブロックチェーンに十分な数の後続ブロックが追加され、その結果、異なる分岐すなわちフォークに変えるためにチェーンの成長を逆転させてそのブロックを除去することが計算的に実現困難になったときである。
【0057】
メンプールのサイズ及び柔軟性とトランザクションの量とのために、所与のトランザクションが、ビットコインのような一部のブロックチェーン実装においてよりも長きにわたって承認されないことがあり得る。従来のビットコイン実装では、トランザクションは、それがブロックへと組み込まれるとすぐにメンプールから除去される。これは、ブロックが最終的にオーファンブロックになった場合に、ブロック内の全てのトランザクションがネットワーク上で再送されることを意味する。これは、実現困難であったり、高速トランザクションネットワークの場合に特定のトランザクションを承認するのに長い遅延を生じさせたりし得る。
【0058】
従って、一部の実装において、メンプールは、トランザクションが組み込まれたブロックの承認の数、すなわち、トランザクションが組み込まれたブロックに続いてブロックチェーンに追加されたブロックの数を追跡し得る。所定数の承認が行われた後にのみ、メンプールからトランザクションが削除される。この所定数は、4、5、6、7、又は所与の実装での任意の好適数とし得る。メンプールのデータエントリは、トランザクションIDフィールド、トランザクションフィールド、及び承認数(number of confirmations;NoC)フィールドを含むように構造化され得る。他の一実装では、NoCを追跡するのではなく、メンプールデータエントリが単にブロック番号を記録してもよい。ブロック番号から、ブロックチェーンの現在のブロック番号に基づいて、何回の承認が行われたかを算定することができる。
【0059】
必要数の承認が行われると、メンプールから安全にトランザクションが削除され得る。斯くして、オーファンブロックの場合のトランザクションロスが存在せず、トランザクションは、必要数の承認の後に永久に除去されることになる。
【0060】
本明細書の以下の部分で記述されるソリューションは、先述のような高速検証ノードの改良タイプを利用する。新しいフルノード構成が記述され、それは実効的に、大規模ストレージ能力と改良された動作プロトコルとで強化されたMノード検証アーキテクチャである。Mノードとストレージノードが一緒になって、新しいフルノードのコアを構成する。新しいノード構造が、必要な技術的要件及び技術的ソリューションを含めて、詳細に記述され、持続可能なインセンティブモデルが提供される。
【0061】
ブロックサイズとストレージ要件
現行のブロックサイズは1Mbである。現在、ブロックは、所謂マジックナンバー(常に同じ値)、実際のブロックサイズを指し示す値、所謂ブロックヘッダ、ブロックに含まれるトランザクションの数、そして最後に実際のトランザクションのリストを含むフィールドで構成されている。後者は常にコインベースの取引から始まり、それはブロックをマイニングすることに対する報酬を含む取引である。
図1にブロックの全体構造を示す。
【0062】
ブロックヘッダは:
1.バージョン番号(4バイト)
2.先行ブロックヘッダのハッシュ(32バイト)
3.マークルルートハッシュ(32バイト)
4.時間(4バイト)
5.ターゲット閾値(nBits-4バイトとしてエンコード)
6.ナンス(4バイト)
を含む。
【0063】
現在、ブロックはおよそ2000のトランザクションを含み、およそ10分ごとにブロックがマイニングされている(10分というブロック時間は、最初の承認時間とチェーン分裂で無駄になる時間との間の妥協として設定されたものである)。これは、毎秒7トランザクションという理論上の最大値に対し、毎秒およそ3.5トランザクションというトランザクションレートを提供する。対照的に、VISAは毎秒およそ10000トランザクションというレートで動作し、毎秒50000+のトランザクションに達することができる。
【0064】
明らかなことには、競争力のある決済システムを作り出すためには、現在の制約を何らかの方法で迂回することが必要となる。10分というブロック時間は十分に確立されているので、ブロックサイズ、ひいては、ブロックチェーン自体への変更を検討することが必須である。本明細書にて、例えば毎秒およそ50000トランザクションを扱うことができるであろうスケーラブルなソリューションが記述される。
【0065】
現行ブロックサイズへの増分、又は更には制限の完全なる除去が、多く議論され、時々、論争を巻き起こす話題となっている。現行サイズを保つこと及びそれを増加させることの双方が大きい利益とトレードオフとを有するので、どちらの側にも強い議論があるようである。
【0066】
トランザクションレートrを仮定して、必要なブロックサイズを計算することができる。以下では、(平均)10分のブロック時間を仮定する。従って、T(r)をブロック当たりのトランザクションの数とすると、
【数1】
となる。s
Txが平均トランザクションサイズであるとすると、ブロックサイズB(r,s
Tx)は
【数2】
として表されることができる。従って、r=50000Txs/s=500バイトである状況を考えると、手早く簡単に算出できる計算により、
【数3】
となる。
【0067】
これは、代わって、O(10
6)Gb/年というストレージ要件につながる。とても明らかなことには、このサイズのブロックでは、ブロック伝搬とストレージとの双方に対して僅かに異なるアプローチが必要である。以下の表1は、トランザクションレート、平均トランザクションサイズ、ブロックサイズ、及び必要な月次及び年次のストレージ空間の量の間の関係を示している。
【表1】
【0068】
新しいビットコインネットワーク
ビットコインネットワークに関して我々が提案するアーキテクチャを
図2に示す。これは、ユーザがトランザクションを提起した時点からそれがブロックチェーン上で終了するまでのステップを示す動作図を示している。
【0069】
特別な複数の検証ノード(分散ハッシュテーブルDHTによってそれらの間で共有メモリを維持管理する)がトランザクションを受信し、それらを検証し、そして、それらをメンプールに割り当てるシステムが提供される。そして、それら検証ノードは、有効なトランザクションハッシュのリストを提供することであるそれらのサービスをマイナーに提供する。マイナーが、それらのハッシュに基づいてプレブロック(ブロックスケルトン)を組み立て、ハッシュパズルを解くことを試みる。パズルの解が見つかったとき、勝ったマイナーがブロックスケルトンを検証ノードに送り返す。これらは、ブロックを検証し、それが格納されることを保証する。当初、検証ノードがそれら自身でブロックを格納することが可能であり且つ適当であろう。ブロックサイズが最終的に、サイズにおける特定の閾値を超えると、検証ノードは、a)それら自身のストレージ能力を拡張する、又はb)特殊化されたストレージノードに格納をアウトソーシングする、のいずれかを行うことになる。これら2つのアーキテクチャが、本明細書中で後述される。
【0070】
新しいフルノード
O(10)GBオーダーのブロックサイズでは、ブロックチェーンの全体像をホストするためのストレージ容量を提供することをPCタイプのノードに頼ることは、もはや実現可能でないように思われる。それに代えて、O(1)PB又はそれより多くのストレージを提供する施設が必要となる(表1参照)。その場合、ネットワークの分散され、非中央集権的で、ノートラストな性質を保持しながら、新たなブロックを収容するシステムを作り出すことが難題となる。
【0071】
2つのタイプのフルノード構造と、それら2つのタイプの組み合わせとが考えられる。
【0072】
1. 付随したペタバイトストレージラックを備えた検証ノード
2. 現行のビットコインネットワークそれ自体とよく似た、内部非中央集権的な分散ピア・ツー・ピア(P2P)単一ノードネットワークに基づいた、付随したストレージプールを備えた検証ノード
3. 1と2との組み合わせ。
【0073】
提案するソリューションは、今日のビットコインネットワーク上で動作している所謂フルノードに似たノードを導入することによって、常時、ブロックチェーンの分散された非中央集権的な記録を保つという問題を解決しようと試みるが、対照的に、ブロックのサイズ及びトランザクションの数の成長とともにスケーリングする能力を有する。
【0074】
この違いは、純粋に構造的なハードウェア関連の問題に限られない。書き込み時に動作する家庭用PCベースのフルノードとは対照的に、ここで提案する新しいノードは、特殊化されたノードとなる。それらは、相当量の投資を必要とすることになり、故に、インセンティブが非常に異なることになる。スケーラブルなパラダイムでは、Mノード(検証ノード)と新しいフルノード(検証及びストレージの組み合わせノード)との双方が、それらのサービスの補償を期待していることになる。
【0075】
範囲内の対極にて、我々は、大部分が個々のノードで構成される非中央集権的な分散ストレージソリューションを有する。良い例は、Storj(Wilkinson等、2016年)、Sia(NebulousLabs)及びMaidSafe(maidsafe)である。Storjの場合、その機能は、参加者がストレージ空間を提供することに対して報酬を得ることに基づく。
【0076】
述べたように、ペタバイト(Pb)ラックとピア・ツー・ピア(P2P)ストレージシステムとの双方からなるものであるスーパーノードを想定することも可能である。
【0077】
ビットコインエコシステムは、非中央集権的なやり方で分布されたブロックチェーン全体の複数のレプリカの存在に大きく頼っているので、全てのフルノードが補償されることが重要であることが明らかになる。これは、基本的に勝者が全賞金を獲得するゲームであるマイニングとは大きく異なる。マイナーは、公開ブロックチェーンに行き着くために自身の(勝った)ブロックを当てすることになるので、フルノードを格納することに報いることがマイナーの利益となる。
【0078】
スーパーノードとして機能するプールへとノードがグループをなす。ブロックチェーンの分散性を維持するために、ある一定数(≧100)のそのようなスーパーノードが存在しなければならない。スーパーノード同士は、接続されるが、重複はしない。
【0079】
技術的要件
述べたように、新しいフルノードを議論する際に検討すべき2つの全体的に異なるアーキテクチャが存在する(表2参照)。
【0080】
新しいフルノードは、2つのタイプのストレージ:
1) メンプール用のランダムアクセスメモリ(RAM)のような分散ハッシュテーブル(DHT)メモリ/ストレージ、
2) ブロックチェーン用の永続的なテープ/ディスクのようなストレージ、
を維持管理する必要がある。
【0081】
述べたように、トランザクションレートr=50000Tx/sでは、ブロックがO(10)Gbになると期待され、これは、~365×24×6×15Gb=7.9・105Gb=0.8Pb/年という年間ストレージ要求を意味する(表1参照)。
【0082】
表2は、現行のフルノードと将来のフルノードとの間の比較を示している。
【表2】
【0083】
同時に、ラック/クラスタはメンプールを維持管理する必要がある。これは、素早いブロック復元を可能にすることになる。メンプールの必要サイズは、算定するのがより困難である。現在、およそ1メガバイト(~1Mb)のブロックサイズ及び毎秒およそ4トランザクション(~4Tx/s)で、メンプール内で待っているトランザクションの合計サイズは、2とおよそ70メガバイト(~70Mb)との間で振動する。
図3は、承認のためにメンプールで待機しているトランザクションの合計サイズを示すグラフである。
【0084】
示したように、我々は、大量のデータを格納することが可能な2つの根本的に異なる構造、及びそれらの組み合わせを想定している。それら2つの構造を
図4及び
図5に示す。
図4は、内部中央集権的なストレージ機関へのアクセスを持つ複数のノードを有する構成を示している。
図5は、各ノードが分散メンプール及び分散ストレージ機関の双方の一部である構成を例示している。
図4に示すアーキテクチャは、幾つかの検証ノードを所有して維持管理する大きめのエンティティに適していると思われ、それら検証ノードの全てが該エンティティ自身のストレージ機関へのアクセスを有する。対照的に、
図5に示すアーキテクチャは、完全に非中央集権的である。これは、共有された分散ストレージプールに参加することを望む例えば十分なストレージ容量を持つ家庭所有のPCなどの個々のノードに好適なソリューションである。これに使用される根底をなすストレージ技術は既に存在している(例えば、Storj、Sia、MaidSafe)。
【0085】
新しいフルノードがビットコインネットワークにどのように適合するかを可視化する1つの方法が、検証ノードがストレージプールのメンバーであるネットワーク構成を示した
図6に示されている。これらのプールが一緒になって、非中央集権的な分散ビットコインネットワークを有する。
【0086】
フルノード動作
大きいブロックのシナリオでは、単に空間要求のためではなく、別の状況に直面する。メンプールは、ブロックの等価量、すなわち、およそ15ギガバイト(~15Gb)、好ましくは、次にマイニングされるブロックの等価量を受け入れることができるべきである。これが、対処される必要のあるオーバーヘッドとも組み合わされる。
【0087】
1)メンプールは、他の検証ノードと同期する必要がある。これは、可逆ブルームルックアップテーブル(Invertible Bloom filter Lookup Table;IBLT)を交換することを伴う(Michael T. Goodrich,2011)
2)IBLTは精査される必要があり、欠落トランザクション(Tx)が検索される
3)追加で検索されたTxは検証される必要がある
4)マイナー又は他のフルノードから受信したブロックスケルトンに基づくブロックの組み立て。
【0088】
新しいフルノードは、最新のメンプールを保つ。それは、マイナー並びに他の検証ノード及び新フルノードと交換したIBLTによってそれを行う。
【0089】
マイナーは、
1. ナンスn
2. IBLT
3. コインベーストランザクション
で構成されるブロックスケルトン(タプル)を送信する。
【0090】
これに基づいて、新しいフルノードは、(特定のルールセットに従って)トランザクションを然るべく順序付け、新たにマイニングされたブロックを組み立てる。新しいフルノードは、次いで、それら自身のストレージにブロックを格納することと、他の新しいフルノードにスケルトンを伝搬させることとに進む。プロトコルについては、より詳細に本明細書中で後述する。
【0091】
インセンティブ
特定の構成の1つの重要な特徴は、新しいノード構造及びサービスの提供を奨励するインセンティブをシステムに組み込むことである。ブロックチェーンを格納することに伴うかなりのコストのため、インセンティブが必要となる。
図7は、新しいフルノードの機能を示している。新しいフルノードは、主に以下の2つのタイプのサービスに対して報酬を受ける:
1)検証済みトランザクションのリストを編集し、マイニングの準備を整える。そして、トランザクションのハッシュ値(マークルルート)が、リストを選択してブロックをマイニングするマイナーに送られる;
2)勝ったマイナーが、マイニングしたブロックのスケルトンを幾つかの新しいフルノードに送信する。スケルトンは、以下を含むものであるコインベーストランザクションを含む:
a. マイニング報酬
b. 検証済みリストを提供するための支払いメカニズムとして使用されるコミットメントスキームの一部である秘密
c. ブロックチェーン上のブロックのブロック検証及び/又は保管に対する支払い。
【0092】
[トランザクション]検証ノードは、手数料システムによってトランザクションの検証に対して支払われることになる。受信する側の検証ノード/新しいフルノードは、以下のうちの1つ以上に対して報酬を受けることになる:
1)検証済みトランザクション(Tx)ハッシュのリストをマイナーに提供すること(上記b.参照)
2)ブロックスケルトンからブロックを組み立て直すこと(“定額”料金)
3)ブロックのサイズ(“1MBストレージ”単位の支払)。
【0093】
インセンティブは、100ブロックの承認時間T100にある:
1)マイナーは、報酬を要求するためにt~T100にわたって待つ必要がある
2)検証ノードは、ブロック内のTxを検証することについての料金を受け取る前に、t~T100にわたって待つ必要がある
3)新しいフルノードは、ブロック組み立て料金及びサイズ依存ストレージ支払を受け取る前に、t~T100にわたって待つ必要がある。
【0094】
従って、100ブロック承認時間が、マイナーがスケルトンブロック(支払いを含む)を、ある範囲の新しいフルノードに伝搬させるのに必要なインセンティブを与えることになり、新しいフルノードは、スケルトンブロックを他の新しいフルノードに伝搬させるインセンティブを受けることになる。
【0095】
また、指摘しておくべきことには、マイナーは、ブロックに含めることを望む(トランザクションの)リストを自由に選択できる。従って、我々は、マイナーがコミットメントトランザクションから選択してそれらによって購入することができる検証済みトランザクションのリストを編集することによって検証ノードが競争し合うことで構成されるマーケットを想定している。
【0096】
マイニング再訪
ビットコインエコシステムは、マイニングのプロセスに頼っている。マイナーが、トランザクション(Tx)をメンプール(又は、ここで想定しているように、特殊化された検証ノード)から集め、それらをブロックへと編成し、ハッシュパズルを解く解(ナンス)を見つけることを試みる。ブロックヘッダが、ブロックチェーン上の先行ブロックのハッシュと、トランザクションのマークルツリーのルートと、マイナーによって含められるナンスとを含む。パズルを解くことは、先行ブロックハッシュ及びマークルルートと連結されたナンス(繰り返し選択される)の二重SHA256ハッシュを計算し、それがいわゆる難易度ターゲットよりも小さいかをチェックすることからなる。それが下回る場合には、パズルは解かれており、上回る場合には、複数のナンスにわたってのイテレーションが続く。これは、新しいパラダイムにおいても変わらないままである。課題を課すのは、巨大化されたブロックサイズと、マイニングされたブロックのネットワークにわたる配信である。Gbサイズのブロックでは、ブロック全体をネットワーク上でブロードキャストすることは必ずしも実現可能でないことになる。
【0097】
その代わりに、我々は、以下のステップに従うソリューションを提案する:
1. マイナーが、検証/Mノード及び/又は新しいフルノードから、検証済みトランザクションのリストを受け取る
2. マイナー自身が、Txハッシュ値の自身のメンプールを運用してもよいし、運用しなくてもよく、それは特定の順序付け規則に従う。そのような順序付けの例は、[https://www.cryptocoinsnews.com/bitcoin-in-bloom-how-iblts-allow-bitcoin-scale/]にて与えられている
3. マイナーが、ナンスnを決定することによってハッシュパズルを解く
4. 次に、ハッシュツリー(マークルツリー、ここではHTとして参照する)が計算され、格納されたツリーのルートが計算される(次のセクションを参照)
5. Txのこのリストを用いて、IBLTが作成される。IBLTは、2つのセット(例えば、メンプール)間の内容の差を計算するため、及び2つのセットを調整するために使用されることができる
6. タプル{n;IBLT;コインベースTx;HTルート}が検証/Mノードにブロードキャストされる
7. 新しいフルノードが、メンプールのDHT及びブロックチェーンのストレージを運用する
8. プールが、タプル{n;IBLT;コインベースTx;HTルート}に基づいてブロックを組み立てなおし、a)それら自身でブロックを格納することによって、又はb)特殊化されたストレージノード上に格納することのいずれかによって、ブロックをブロックチェーン上に記録する。
【0098】
マイナー間のレースの回避
マイナーは、幾つかの検証ノードで構成されるマーケットから、検証済みトランザクションのリストを選択できることになる。特に断りのない限り、マイナーは自身の潜在的収益を最大化するリストを選択すると仮定するのが公正である。注意深い読者は、このことが、マイナーが主に同じノードから同じリストを選ぶことにつながり得る、と指摘するかもしれない。これは、ひいては、何人かのマイナーが同じブロックをマイニングしようとして、互いにレースする状況になる。これは、ハッシュ力が最も大きい(一人以上の)マイナーに有利に働くであろう。
【0099】
我々は、ブロックヘッダに追加のフィールドを付加することを提案する。このフィールドは、各マイナーによって選択された乱数を含む。これは、各マイナーが異なる開始点から始めることを保証し、従って、そのブロックを解くことが単にハッシュ力に行き着くことを防止することになる。これは、ひいては、マイナーが、同様であるが個々に選んだ僅かに異なるブロックをマイニングする傾向がある現在の状況を模倣することになる。
【0100】
プロトコル
ここで、新しいフルノードを動作させるために必要なプロトコルを説明する。
【0101】
提案するシステムが機能するために、関与するノード(バリデータ、マイナー、新しいフルノード)のメンプールは、トランザクションに関する順序付け規則に従うべきである。ここで、我々は、Gavin Andresenによって提案された正準(カノニカル)順序付けを使用することを提案する。そこでは、順序付けはブロック内のトランザクションのリストに関係していたが、ここでは、我々は、全ての検証ノード及び新しいフルノードがそれらのメンプールに同じ規則を使用するという考えを提示する。
【0102】
その規則は、以下のように要約されることができる:
1)トランザクションを先行トランザクションハッシュに対して昇順に並べ替える
2)ソート済みリストから、後のトランザクションに依存しない最初のトランザクションを追加する。
【0103】
先に見たように、ブロックは所謂マークルルートハッシュが含む。それは、コインベーストランザクションを含む全てのトランザクションをハッシュし、その後、マークルルートハッシュに到達するまで、ハッシュの連結をハッシュすることによって生成される。明らかになることには、マイナーがコインベーストランザクションを生成しているという事実がなければ、検証ノードはマークルツリー全体、及び故に、マークルルートとそれに対応するハッシュとを計算することができる。
【0104】
ここで、我々は、ある手順によって以下のようにして計算されるマークルツリーを提案する:
検証ノードが、リトルマークルルート(Little Merkle Root)を計算する。この手順は、幾つかの例外:
1)コインベーストランザクションは省略される
2)所謂コミットメントトランザクションが含まれる
3)マイナーは、コインベーストランザクションを生成し、それをリトルマークルルートハッシュと連結し、それがマークルルートハッシュを生み出す
を除いて、標準的なマークルルートを計算する場合と同じである。
【0105】
これを、新しいマークルツリー構造を例示する
図8に示す。なお、これは、現行プロトコルへの変更を構成する。
【0106】
ブロックヘッダの変更
述べたように、我々は、マイナーによって選択された乱数を含む追加フィールドをブロックヘッダに追加することを提案する。従って、ハッシュパズルを解くことは、以下のように変化する:
【数4】
我々は、故に、マイニングされた新たなブロックのブロックヘッダが、乱数を含む追加フィールドで強化されることを提案する。ブロックヘッダは、以下を含むことになる:
1.バージョン番号(4バイト)
2.先行ブロックヘッダのハッシュ(32バイト)
3.マークルルートハッシュ(32バイト)
4.時間(4バイト)
5.ターゲット閾値(nBits-4バイトとしてエンコード)
6.ナンス(4バイト)
7.乱数(4バイト)。
【0107】
検証→マイナー
検証ノード:
・ 要求を受けて、検証ノード(新しいフルノードであってもよいし、そうでなくてもよい)は、マイニングされるべき検証済みトランザクションのリストを用意する;
・ 検証ノードは、コミットメントトランザクションを作成する;
・ コミットメントトランザクションを含めて、所謂リトルマークルルート(前のサブセクションを参照)が計算される;
・ 検証ノードは、2つのIBLT:
1)ブロック内の全てのトランザクションについて(IBLT1)、及び
2)ブロック内の全ての対応するTxIDについて(IBLT2)
を用意する;
・ 検証ノードは、マイナーに:
1)リトルマークルルート
2)IBLT1
3)IBLT2(オプション-マイナーが自身のTxID/メンプールで動作する場合のみ)
4)先行ブロックハッシュ
5)以上のもののハッシュチェックサム
を送信する。
【0108】
マイナー:
・ 検証ノードからのデータの受信を受けて、マイナーはコインベーストランザクションを作成することに進む。コインベーストランザクションは、マイニングに対する報酬と、マイニングしたブロックを送りたい新しいフルノードのブロック検証/ストレージに対する報酬とを含む。さらに、コインベーストランザクションは、コミットメントトランザクション内の秘密と合致する秘密を有する出力フィールドを含む;
・ マイナーは、検証ノードから受信したリトルマークルルートを使用し、マークルルートハッシュを作成するために、それをコインベーストランザクションと結合する;
・ マイナーは、もはや、ハッシュパズルを解き始めるのに必要な全ての情報を有する;
・ 先述の線に沿ってマイニングが進む。
【0109】
マイナー→新しいフルノード
マイナー:
・ ブロックがマイニングされると、マイナーはリストの新しいフルノードに、以下:
・ ナンス(パズルの解)n
・ コインベーストランザクション
・ ブロックヘッダ
・ マークルルート
・ リトルマークルルート
・ IBLT1
・ IBLT2(オプション)
・ ハッシュチェックサム
を送信する。
【0110】
新しいフルノード:
・ 適切な報酬がコインベーストランザクション内にあるかをチェックする;
・ ノードは、チェックサム(ハッシュ)を計算することによって、受信データが一貫していることをチェックする;
・ ノードは、IBLT1を用いて、ブロック内のトランザクションがメンプールに存在することを承認する;
・ IBLT1を用いてメンプールにクエリし、ノードはブロックを組み立てる。次いで、ブロックが格納される(新しいフルノード及びストレージについてのセクションを参照);
・ マイナーから受信したデータが、他の新しいフルノードにブロードキャストされる。
【0111】
カスタマイズされたトランザクションリスト
我々は、検証済みトランザクションのマーケットがマイナーのニーズに適応することとなる状況を想定している。マイナーは、自身の可能性を最大化するリストを選ぶ傾向にあり、検証しているMノードは、そのような傾向を捕えている。
【0112】
マイナーが2つ以上のリストからのトランザクションを結合することによって自身のブロックをカスタマイズすることを望むかもしれない場合が存在し得る。2つのIBLT間の差を計算することによって、2つのセット間の設定調整を行うことが可能である。マイナーは、次いで、差を含むIBLTを提供元のノードのうちの1つに送り返し、斯くして、双方のリストの全てのトランザクションを含むリストを作成するのに必要な情報を取り出す。
【0113】
マイナーが幾つかのリストに基づいてそれ自身のリストを編集することを望む場合、更なる難題が導入されると思われる。ここで、我々は、様々な点について手短に述べる。
【0114】
マイナーが様々な検証ノードからのリストを組み合わせるとした場合、マークルルートをどのように結合すべきかが不明である。ここで、我々は、以下を提案する:
個々のリトルマークルルートのビッグリトルマークルルートを構築し、そして、
ビッグリトルマークルルートをコインベーストランザクションと結合する。
【0115】
追加費用は、リスト/ブロックに追加されるトランザクションの量に比例しない。それら様々なメンプールはかなり重複していると仮定するのが公正であるから、リストを結合することは、異なるリストからの(相対的に言って)少数のトランザクションを追加することになる。しかし、リストを結合するために、マイナーは、各検証ノードから(コミットメントトランザクションによって)リスト全体を“購入”しなければならないことになる。これがマイナーにとって有益なアプローチとなるかは、現時点では不明である。
【0116】
幾つかの検証ノードからのリストを結合することは、マイナーと提供元の検証ノードの各々との間でのコミットメントを必要とする。マイナーによるこのシステムの濫用を想像することができる。現在のところ、全てのコミットメントトランザクションがブロックになるというルール/プロトコルは存在しない。1つの可能性は、検証ノードが、各ブロックをチェックし、自身のトランザクションを含むブロックを拒否し得るというものである。
【0117】
ノードの構造と動作の概要
今日のビットコインネットワークは、計算上の労力の点で、重度にマイニングを中心にしている。トランザクション量が大幅に増加すると、これは必ずしも実現可能になるとは限らない。本明細書に記述されるソリューションは、様々な作業を、然るべく特殊化されたノードに委ねることにつながり、マイナー自身もよりいっそう特殊化されたものとなる。検証済みトランザクションのリストを編集すること、ブロックスケルトンに基づいてブロックを再構築すること、及び保管することは、全て、かなりのリソースを必要とすることになる機能である。従って、ビットコインネットワークの構造が変化し、また、それにと共にインセンティブも変化すると予想される。我々は、本明細書中でそれらの問題を詳細に記述している。
【0118】
本明細書にて紹介される要素は、以下を含む:
・ ここでは新しいフルノード又はスーパーノードと呼んでいる新しいタイプのノード構造であり、これは、検証Mノードに対する拡張であってもよいし、そうでなくてもよい:
・ ノードが、検証ノードからマイナーへ及びマイナーから新しいフルノードへの双方でのGbサイズのブロックのブロードキャストを効果的に可能にするプロトコルで動作する;
・ ブロックチェーンを格納するための2つの全体的ストレージ構造であり、これは、提案する新しいフルノードの一部であってもよいし、そうでなくてもよい;
・ 検証済みトランザクションのプレブロックリストのマーケットの創造と、マイニング後のブロック組み立て及び保管とを可能にするインセンティブモデル;
・ それ自身のメンプールを維持管理する必要からマイナーを解放する新しいマークルツリー構造;
・ マイニングの行為が純粋にハッシュ力に基づくレースになることを回避するための、マイナーによって選択される乱数を有した、ブロックヘッダ内の追加フィールドの追加;
・ 検証が、特別なコミットメントトランザクションを用いて報酬を受ける。
【0119】
一実装によれば、ブロックチェーンネットワークのノード用のコンピュータ実装された法が提供され、当該コンピュータ実装された方法は、
複数の検証済みトランザクションに対応するマイニングされたデータをブロックチェーンネットワークから受信し、
前記マイニングされたデータに基づいてブロックを組み立て、そして、
組み立てたブロックをブロックチェーン上の格納用のストレージエンティティに送信する、
ことを有する。
【0120】
このような方法は、マイナーが大きいブロックを構築して格納し且つそのようなブロックをブロックチェーンネットワーク上に送信することを必要とせずに、ストレージエンティティ上に格納される大きいブロックをノードが構築することを可能にする。さらには、このアーキテクチャは、大きく且つますます成長していくブロックチェーンを格納することに専用の大規模ストレージエンティティの使用を可能にする。
【0121】
コンピュータ実装された方法は更に、
ブロックチェーンネットワークからトランザクションを受信し、
ブロックチェーンネットワークから受信したトランザクションを検証し、
ブロックチェーンネットワーク内の他のノードと共に、検証済みトランザクションの分散された非中央集権的なストレージを維持管理し、そして、
前記検証済みトランザクションに対応するデータを、検証済みトランザクションのリストを有するデータをマイニングするために、ブロックチェーンネットワークに配信する、
ことを有し得る。各リストが、ブロックへとマイニングされる検証済みトランザクションの完全なリストを提供することができる。
【0122】
このような方法は、ブロックチェーンネットワーク内の他のノードと共に、検証済みトランザクションの分散された非中央集権的なストレージを保持しながら、マイナーが検証機能を実行する必要を効果的に取り除く。さらに、この方法は、トランザクション検証ノードが、検証済みトランザクションに対応するデータを用意して、マイニングのためにブロックチェーンネットワークに配信することにより、マイナーにサービスを提供することを可能にする。例えば、この方法は、検証済みトランザクションのリストが用意されて配信されることを可能にする。
【0123】
ブロックチェーンネットワーク内の他のトランザクション検証ノードと共に検証済みトランザクションの分散された非中央集権的なストレージを維持管理するステップは、非中央集権的で分散的なやり方で検証済みトランザクションの最新リストを維持するために、ブロックチェーンネットワーク上のトランザクション検証ノードを同期化させることを有し得る。例えば、検証ノードは、可逆ブルームフィルタルックアップテーブルを交換することによって同期されることができる。検証済みトランザクションはまた、検証済みトランザクションの分散された非中央集権的なストレージを維持するために、ブロックチェーンネットワーク内のトランザクション検証ノードにまたがって共通の順序付けシステムが使用されるように、定められた順序にソートされることができる。例えば、正準順序付けシステムを使用して、検証済みトランザクションの分散された非中央集権的なストレージを維持管理することができる。分かっていることには、これは、ネットワークにわたるトランザクションデータが一貫した方法で維持管理されることを保証しながら、非中央集権的な分散ストレージを保持することの、特に効率的なやり方である。
【0124】
検証済みトランザクションに対応するデータをマイニングのためにブロックチェーンネットワークに配信するステップは、検証済みトランザクションのリストに対応するデータ(例えば、検証済みトランザクションのリストに対応する可逆ブルームルックアップテーブル及び付随データなどであり、検証済みトランザクションはブロックに含まれる)を用意することを含み得る。さらに、検証済みトランザクションに対応するデータをマイニングのためのブロックチェーンネットワークに配信するステップは、検証済みトランザクションのリストに対応するデータをマイナーに提供することの代わりに、デジタル資産に関するコミットメントトランザクションを作成することを含むことができる。例えば、コミットメントトランザクションを含めて、ハッシュ(マークル)ツリー、パトリシア(Patricia)ツリー、又は他のタイプの基数ツリーを計算することができる。
【0125】
検証済みトランザクションに対応するデータが配信され、そして、例えばハッシュパズルといった関連する暗号パズルを解くことによってマイニングされた後、マイナーによって直接的にブロックチェーン上に格納されるのではなく、マイニングされたデータがトランザクション検証ノードに送り返される。このマイニングされたデータは、次いで、(大きい)ブロックへと組み立てられることができ、そして、大量のデータの格納用に特に構成されたストレージエンティティ上、及び/又は分散ストレージシステム上で格納されることができる。先述したように、これは、マイナーが大きいブロックを構築して格納し且つそのようなブロックをブロックチェーンネットワーク上に送信することを必要とせずに、ストレージエンティティ上に格納される大きいブロックを検証ノードが構築することを可能にする。さらには、このアーキテクチャは、大きく且つますます成長していくブロックチェーンを格納することに専用の大規模ストレージエンティティの使用を可能にする。
【0126】
ブロックチェーンネットワークから受信されるマイニングされたデータは、検証済みトランザクションに対応するブロックヘッダを含むことができる。マイニングされたデータはまた、マイニングされたデータに基づいてブロックを組み立てる及び/又は格納することの代わりに、デジタル資産に関するトランザクションを含むことができる。さらに、この方法は、デジタル資産を受信することに先立って、最小ブロック数に関連付けられた期間tにわたって待つことの要求を含むことができる。これは、検証ノードを提供するためのインセンティブスキームを提供する。何故なら、提供者は、検証済みトランザクションのリスト(例えば、可逆ブルームルックアップテーブルの形態)をマイニングのために及び/又はブロックチェーン上にマイニングされたブロックを格納するために提供したことに対する報酬を受けることになるからである。デジタル資産を受け取ること前に最低期間を要求することは、マイナーがある範囲のノードにスケルトンブロック(支払いを含む)を伝搬させることのインセンティブを与え、また、ノードは、他のノードにスケルトンブロックを伝搬させるインセンティブを与えられることになる。
【0127】
マイニングされたデータに基づいてブロックを組み立てるステップは、例えば、少なくとも2、4、6、8、10、50、100、500、1000、又は10000メガバイトのサイズを持つ各ブロックを用いて大きいブロックを組み立てることを伴うことができる。上限は時間とともに大きくなることになるが、1ペタバイトという公称上限値が指定されてもよい。各ブロックは、例えば、少なくとも5000、10000、5000000、1000000、5000000、又は1000000トランザクションを有し得る。上限は時間とともに大きくなることになるが、ブロック当たり1012トランザクションという公称上限値が指定されてもよい。先に示したように、ここに記載される方法、ノード、及びブロックチェーンネットワークアーキテクチャは、マイナーが多数のトランザクションを構築及び記憶することを必要とせずに、大きいブロックが構築されてストレージエンティティ上に格納されることを可能にする。これは、大幅に上昇されたトランザクションレートをシステムが取り扱うことを可能にする。
【0128】
ここに記載される方法では、ブロックが、マイナーによって提供される乱数を含んだブロックヘッダを含むように変更され得る。すなわち、トランザクション検証ノードが、解かれたトランザクションをブロックチェーンネットワークから受信するときに、マイナーによって提供される乱数を含んだブロックヘッダを含むブロックを処理するように構成され得る。これは、ブロックヘッダへの変更を構成し、それによって、マイナーは、ブロックヘッダに挿入される数字を選択するかランダムに生成するかすることができる。これは、同じトランザクションリストが多数のマイナーによって選ばれるときであっても、マイナーが同じブロックをマイニングしようとして競い合うことがないことを確保する助けとなる。
【0129】
上述の大きいブロックのデータを格納するストレージエンティティは、ブロックチェーンネットワーク上の複数のトランザクション検証ノード間で共有されることができ、それら複数のトランザクション検証ノードは、ブロックチェーンネットワーク上のスーパーノードを形成し、共有ストレージエンティティは、共通のストレージノード、分散ストレージ、又はこれら2つの組み合わせのいずれかである。このアーキテクチャは、ブロックチェーンネットワーク上のスーパーノードの形成につながるとともに、ブロックチェーンを格納してブロックチェーンネットワークにサービス提供する専用ストレージ機関の提供を可能にする。
【0130】
以上に鑑み、ブロックチェーンネットワークのスーパーノードも提供され、スーパーノードは:
先述のような複数の検証ノードと、
ブロックチェーンを格納する共有ストレージエンティティと、
を有し、
共有ストレージエンティティは、共通のストレージノード、分散ストレージ、又はこれら2つの組み合わせのいずれかであり、
複数の検証ノードによって組み立てられたブロックが、共有ストレージエンティティに送信されてその上に格納され、それにより、共有ストレージエンティティがブロックチェーンを維持管理する。
【0131】
このアーキテクチャは、ここに記載される方法及び構成の狙いであるトランザクションレートにおける望ましい上昇を達成するのに必要とされる大きいブロックサイズを取り扱うことに、よりいっそう適している。例えば、共有ストレージエンティティは、少なくとも100ギガバイトの記憶容量、より好ましくは少なくとも1、10、100、又は1000テラバイトの記憶容量を有するように構成され得る。上限は時間とともに大きくなることになるが、106テラバイト又は更には106ヨタバイトという公称上限値が指定されてもよい。
【0132】
全体的なネットワークアーキテクチャに関して、複数のこのようなスーパーノードを有するブロックチェーンネットワークを提供することができる。スーパーノードは、ブロックチェーンネットワーク上で接続されることができ(しかし、重複しない)、各スーパーノードの共有ストレージエンティティが、ブロックチェーンのコピーを格納するように構成される。スーパーノードは実効的に、スーパーノードとして機能するプールを形成するノードのグループを有する。ブロックチェーンの分散性を維持するために、有利には、ある一定数(例えば、少なくとも10、50、100、又は1000であり、そしてオプションで100,000,000未満)のこのようなスーパーノードが存在すべきである。
【0133】
ブルームフィルタ及びIBLT
このセクションで、我々は、所謂ブルームフィルタの特性、及び可逆ブルームルックアップテーブルと呼ばれるそれらの拡張をまとめる。
【0134】
その最も単純な形態において、ブルームフィルタは配列である。その配列は、M及びkという、それに関連付けられた2つのパラメータを有する。Mは、配列におけるビット数であり、kは、異なるハッシュ関数H
kの数であり、
【数5】
となる。ここで、S
16は、その上でハッシュ関数が動作する16進文字列の空間である。トランザクションT
X0が、それに関してブルームフィルタが作成されたセットに属するかを決定するために、我々は、H
1(T
X0)...H
k(T
X0)を計算し、その後、対応するビットが配列内で1に設定されているかをチェックする必要がある。
図9は、ブルームフィルタを作成する際のワークフローを示している。
【0135】
1つ以上がそうでない場合、間違いなくT
X0はクエリされたセット内にないことになる。しかしながら、ブルームフィルタは偽陽性を許容する。これは、ハッシュ関数がビットを1に変化させる確率が、p=1/[配列のサイズ]=1/Mであることに因る。従って、いわゆる
【数6】
で、所与のハッシュ関数によってはビットが1に設定されない。
【0136】
従って、k個のハッシュ関数が存在する場合、所与のビットが1に設定されない確率は、
【数7】
である。nこの要素を挿入する必要がある場合、これは、
【数8】
となる。
【0137】
ブルームフィルタの1つの明白な欠点は、それが特定の順序を追跡したり維持したりしないことである。すぐに明らかになることには、フィルタリング対象であるアイテムの索引付けを維持することを望むのであれば、フィルタの機能を拡張する必要がある。これこそが、可逆ブルームフィルタ(Invertible Bloom Filters;IBFs)及び可逆ブルームルックアップテーブル(Invertible Bloom filter Lookup Tables;IBLTs)が登場するとことである。
【0138】
配列のビットをアクティブにするだけであることに代えて、キーのXORサム、ハッシュ値(以前のような)、及び全体カウンタがIBFの各フィールドに格納される。この手順を、IBF/IBLTにトランザクションがどのようにエンコードされるのかを例示するワークフローを示す
図10に例示する。
【0139】
アプリケーション
それぞれメンプールm1及びm2を維持管理する2つのノードN1及びN2を有すると仮定する。各メンプールが、16進文字列S16の母集団からの要素を含む。さらに、Andresenによって提案され且つ本明細書中で前に概説したような順序付け規則にメンプールが従うと仮定する。
【0140】
ここで、N1がm1をN2に送信し、N2は今や、2つの方法にてセット調整にアプローチすることができる。
【0141】
1)Δm=m2-m1によってセット差を計算する((David Eppstein,2011),(Michael T.Goodrich,2011)を参照);
2)m2内のトランザクション上で反復して、それらがN2のメンプール内に存在するかをチェックする。
【0142】
我々は、IBLTを少なくとも2つの目的で使用することができることを理解している:
1)ノードに、それらが既に自身のメンプール内に有するトランザクションに基づいて、マイニングされたブロックを組み立てさせるとともに、それらが有していないものを特定して取り出す助けとする;
2)異なるノードに属するメンプール間で一定レベルの同期を維持する。
【0143】
分散メンプールの剪定(プルーニング)
上述のように、例えばビットコインといったブロックチェーン技術の未来は、少なくとも部分的に、毎秒発行されるトランザクションの量を増加させることができる新アーキテクチャの提案を当てにしている。そのような新アーキテクチャに対する1つの要求は、ブロックサイズ制限についての現在の限界を取り除くことである。このシナリオにおいて、ローカルなメモリプールでは十分なストレージ能力を提供することができず、それ故に、分散メモリプール(DMPs)に関する新しいモデルを設計する必要がある。分散メモリプールの管理のための改良アーキテクチャは、以下の特徴を提供する:
分散メモリプールに格納されたトランザクションの有効性に関するグローバルコンセンサス;
格納された情報の一貫性及び完全性;
高速な読み出し及び書き込み処理;及び
分散メモリプールにおけるルーティング及びストレージ攻撃に対するセキュリティ機構。
【0144】
トランザクションが新たにマイニングされたブロックに含められると、DMP内の対応するコピーは、もはや保存される必要がないかもしれない。このセクションにおいて、我々は、DMPからのトランザクションの安全な除去のためのプロトコルを提供することによって、以前のアーキテクチャを拡張する。
【0145】
我々は、提供されるDMPアーキテクチャ及び分散ハッシュテーブル(DHT)演算の概要を提示する。我々はまた、DMP内のトランザクションの剪定に関する分散コンセンサスに至るための新しい機構を導入する。さらに、DMP内でのデータ不一致を解決するための複数の異なるポリシーが提示され、それらポリシーは:
トランザクションは、削除されるものとしてマーキングされ得るが、依然としてメンプールノードにローカルに保存され得る;
同じトランザクションは、あるメンプールノードで削除されるものとしてマーキングされ得るが、依然として別のメンプールノードで利用可能であり得る;
ブロックチェーン再編成が、以前にメンプールから削除されたトランザクションの保管を必要とし得る。
【0146】
現行のビットコインネットワークにおける個々のノードは、分散メモリプール(DMP)を提供するノードのクラスタとして見ることができる。提案するDMPは、誠実なノード間の個々の信頼関係から構成されたネットワークに展開される分散ハッシュテーブル(DHT)構造を当てにする。ノードのコネクションセットが、ルーティング情報とアプリケーションレベル情報の双方の集合上に構築される。トラスト証明の発行又は保管に中央機関が関与することはなく、各ノードが、それ自身の信頼できるピアの記録を維持管理する。
【0147】
悪意あるエンティティは、何らかの形態の攻撃を行うためには、ネットワークに参加する必要がある。例えば、シビル攻撃は、システムを損ねるために、多数の偽識別子の作成に焦点を当てている[John R.Douceur,The Sybil Attack,First International Workshop on Peer-to-Peer Systems,Springer-Verlag,London,2002]。ネットワークに接続されたシビルノードが、正規のルーティングクエリを遮り又は遅延させ、間違ったルーティング情報を流布させ得る。ここに記載されるDHTルーティングプロトコルは、略線形(サブリニア)時間及び空間複雑性を有し、以下の仮定に基づく:
ノードは、誠実なノードと悪意あるノードとを区別することができない;
誠実なノードの大多数が、他の誠実なノードへのいっそう多くのコネクションを持つ;及び
各ノードが、キー空間のパーティションに関する情報を保管する責任を持つ。
【0148】
DHTプロトコルは、2つの主要な関数を提供する:
各DHTノードでルーティングテーブルを構築しキーを挿入するために、UPDATE()が使用される;及び
キーkによって表されるターゲットのキー値レコードを見つけるために、DHTノードxによってGET(x,k)が使用される。
【0149】
各DHTノードxは、通常、公開鍵Pxと現在のIPアドレスaddrxによって識別される。この情報が、レコードsignx(Px,addrx)と安全にリンクされ、ここで、signx()は、対応する秘密鍵での署名を表す。そして、ノードIDが、署名されたレコードを使用してDHTに格納される。ノードが場所を変える又は新しいIPアドレスを受け取るとき、新しいレコード[Px,addrx]がDHTに格納されなければならない。悪意あるノードが、誤ったキー-値ペアを挿入することがある。GETメソッドが、返されたキー-値レコード内の署名を検証する責任を持つ。
【0150】
データルーティングネットワークは、無向グラフによって表されることができる。悪意あるエッジが悪意あるノードを誠実なノードに接続し、誠実なエッジが2つの誠実なノードを接続する。任意数のシビル識別子を作成することは、悪意あるエンティティにとって計算的に手頃であり得るが、悪意あるエッジを作成することは、シビル管理の識別子のうちの1つへの信頼できるリンクを確立するために、誠実なノードを説得する必要がある。誠実領域を2つに分割するスパースカット(sparse cut)存在しなければ、誠実なノードで始まる短いランダムウォークは、誠実なノードで終わる可能性が高い。
【0151】
ノードのルーティングテーブルは、ネットワーク内で独立したランダムウォークを開始することによって構築されることができる。ノードは、各ウォークの受信ノードから1つ以上のランダムなキー-値レコードを収集する。このルーティング情報はルックアップ中に使用され、ローカルテーブルがそのキーを含んでいない場合、ルックアップメッセージがノードのセットにマルチキャストされる。1つ以上の受信ノードが、クエリさせたキー-値レコードをローカルに格納している可能性が高い。他のノードのテーブルに対する直接的な要求は送信されない。従って、悪意あるノードは、リモートテーブル内の誤ったエントリの数を恣意的に増やすことができない。
【0152】
悪意あるノードが所望のアウトプットを力ずくで見付けて、2つの誠実キーの間に誤ったキーを挿入することを防止するために、キーは、例えばハッシュといった確定関数を用いて共有空間に格納されることはない。従って、2つのキー間の距離を測定する機能は規定されないことになる。各ノードxが、キー空間全体にIDが一様に分散された、他のノードへのポインタを含む長距離ルーティングテーブルを構築する。ポインタは、ランダムウォークを開始し、終了ノードからランダムIDを収集することによって格納される。近距離ルーティングテーブルは、キー-値レコードを含む。これらのキーは、予め定められた順序付けに従って、ノードのIDに最も近く従ったものである。
【0153】
このルーティング構造は、(a)ノード障害を管理することができ、すなわち、ルーティングテーブルにおける冗長性が、キー値を取り出すための代替パスを提供し;(b)キー変更を管理することができ、すなわち、キーの追加又は削除は、キーの分布とDHT空間内の長距離ポインタの分布との間の不整合につながり;及び(c)ネットワーク接続の変化を管理することができ、すなわち、信頼されるコネクションの追加又は削除は、スパースカットが誠実ネットワークを分けておらず且つエンドポイントが悪意あるものになっていない限り、ルーティング性能に影響を与えない。新しい鍵の同期及び可用性が、周期的なUPDATE呼び出しによって提供される。
【0154】
信頼されるコネクションの概念は、DHT基盤において安全性及び完全性を提供するための基本である。ネットワーク内に新たなエッジを作成することには、2つの異なる機構が関与し得る。
【0155】
主観的コネクションは、例えば、グローバル又はローカルなよく知っているエンティティについての友好、契約、及び信頼といった、ピア間の社会的又は専門的な関係上に築かれる。例えば、非営利組織、研究機関、政府機関、及び特定の協定に署名した民間企業は、信頼できるコネクションであることができる。
【0156】
推移的コネクションは、ネットワーク上のランダムパスの数を増加させるための論理特性及び信頼度に基づく。ホップ・バイ・ホップ・ウォークにおけるランダム性の増加は、悪意あるノードが悪意あるエッジの脆弱性を利用することをいっそう困難にする。他のノード間の信頼されるコネクションを認識するために、署名されたメッセージをピア間で交換することができる。ノードは、ランダムウォークで個々のホップを選択する確率を調整するために、又は新たな推移的コネクションを初期化するために、その信頼されるコネクションに異なる重みを割り当てることを決定し得る。全てのノードがそれ自身の重みを担う。誠実なノードは、それらのコネクションの重みを、それらのピアのルーティング挙動に従って調整することになり、ノードは、その短距離ルーティングテーブル内にキーがフォールインすることになる場合に、有効なキー-値レコードを提供できないとし得る。従って、新たなランダムウォークが弱いエッジを通過することが防止され、悪意あるノードの影響が時間とともに減少することになる。
【0157】
DMP機能は、特殊化されたビットコインノードのクラスタによって提供される。クラスタ内で、検証ノードが新たな着信トランザクションを収集及び検証する一方で、メンプールノードが検証済みトランザクションを永続的に記憶することを担う。
図11は、複数の検証ノードvと複数のメンプールノードsとを有するメンプールクラスタの設計を示している。これら2つのタイプのノードの機能は、同一の物理的エンティティによって提供されてもよいし、異なるエンティティに埋め込まれてもよい。
【0158】
DMPは、検証済みトランザクションの保管及び検索という2つの基本的動作を提供する。トランザクションtiが与えられと、識別子id(ti)をidi=H(ti)として割り当てることができ、ここで、Hはハッシュ関数を表す。この識別子が、DMPにおいてキーとして使用されることになる。特定のマルチキャストアドレスを使用して、トランザクションをクラスタ内の複数のバリデータから受信することができる。次いで、各バリデータが独立にトランザクションを検証する。しかしながら、基礎をなすDHT構造は、キークラスタリング攻撃を防止するために、キー空間にトランザクションIDを埋め込まない。従って、トランザクションはDMP内のランダムノードに格納されることができる。所与のトランザクション又は所与のグループのトランザクションに対して、バリデータノードはR STOREメッセージ要求をランダムメンプールノードに送信することができ、ここで、Rはデータ複製係数である。
【0159】
N個のバリデータが独立にトランザクションtiを検証すると仮定する。各バリデータvが、VDBと呼ばれるローカルデータベースを維持管理する。このデータベースの各エントリが、トランザクションidiの識別子と検証についてのバイナリデシジョンとを含む。各バリデータが、ローカルな決定に従ってSTORE(ti,idi)又はREJECT(idi)メッセージをDMPに送信することになる。
【0160】
各メンプールノードsは、N/2+1個のSTOREメッセージを受信した場合にのみtiを格納する。あるいは、ノードは、最初のSTOREメッセージを受信するとすぐに、定足数に達するのに必要なN/2個の更なるSTOREメッセージの受信のためのタイマーを起動する。十分なコンファメーションを受信することなくタイムアウトを越える場合、そのトランザクションは破棄される。各メンプールノードsmはまた、tiについて、受信したコンファメーションの数Ni,m>N/2+1を保持する。
【0161】
検証済みトランザクションtiの検索は、メッセージQUERY(idi)のブロードキャストを必要とする。tiの格納を担っているメンプールノードが、メッセージDATA(ti)をクエリノードに送信することになる。tiを格納するのにM個のメンプールノードが必要とされる場合には、格納されたトランザクションが一貫したものであるとみなすために、少なくともM/2+1個のDATAメッセージがクエリノードによって受信されるべきである。さらに、クエリノードは、VDBに格納された情報に従ってtiの有効性を評価するために、VALIDITY_REQ(ti)メッセージを用いてN/2+1個のランダムバリデータにインターロゲートし得る。
【0162】
ますます増加するトランザクション活動の管理用のスケーラブルなアーキテクチャは、大量のデータとともに動作するストレージインフラストラクチャを必要とする。例えば、10K txn/sのトランザクションレートで1KBのトランザクション平均サイズは、月当たりのブロックで~27TBのストレージを必要とする。
【0163】
Mネットクラスタ内で、2つの異なるストレージアーキテクチャ(又はそれらの組み合わせ)が提案される。第1のアーキテクチャは、中央集権的なストレージ機関へのアクセスをそれら全てが有する幾つか検証ノードを所有及び維持する大きめのエンティティに好適である。対照的に、完全に非中央集権的にされたアーキテクチャは、共用の分散ストレージプールに参加することを望む、十分なストレージ容量を備えた個々のノードに好適である。
【0164】
以下では、我々は、トランザクション依存関係を表すために、以下の用語を使用する:
トランザクションは、親と呼ぶ先行トランザクションのアウトプットを使用することができる;
トランザクションは、子と呼ぶ後続トランザクションに対するアウトプットを作成することができる。
【0165】
トランザクション依存関係、又はトランザクションのチェーンを作成して、子が親の前に付加されることを必要とする複雑なトランザクションワークフローを表し得る[Bitcoin Core ソースコード URL:https://github.com/bitcoin/bitcoin]。トランザクションのチェーンがネットワークを横切って伝送されるとき、データ到着順序がデータ送信順序と一致しないことがある。その場合、未知の親トランザクションを参照するトランザクションを格納するために、受信側のノードによってオーファントランザクションプールが使用される。親が分かると、親によって作成されたUTXOを参照する何れのオーファンも、オーファンプールから解放され、再帰的に再検証される。そして、トランザクションのチェーン全体が、正しい順序で再構築されてトランザクションプールに含められる。従って、新たなトランザクションがメンプールに追加されるときには、メンプール内の子はいない。何故なら、そのような子はオーファンになるからである。
【0166】
サービス妨害攻撃を防ぐために、メモリに格納されるオーファントランザクションの数には制限がある。プール内のオーファントランザクションの数が、許された最大数を超えると、プールサイズが限度内に戻るまで、ランダムに選択されたオーファントランザクションがプールから排除される。
【0167】
ローカルメモリプールは、ノード視点のブロックチェーンと一致するトランザクションのセットが含む。トランザクションは、以下の理由のうちの1つに起因してローカルメンプールから削除されることができる:
マイニングされたブロックでのトランザクション公開、新たなブロックが検証されると、そのトランザクションはメンプールから削除される;
ブロックチェーン再編成(reorg)。ブロックがブロックチェーンから切り離される場合、それのトランザクションが移し戻される;
ブロック内トランザクションとの衝突(二重支払い)。新たなブロックが検証されると、そのブロック内のトランザクションと衝突する全てのトランザクションが、それらに依存するものを加えて、メンプールから除去される。
【0168】
また、ローカルメンプールの構成に応じて、以下の更なるケースが考えられる:
手動剪定;
期限切れ;及び
ローカルメモリサイズ制限。
【0169】
トランザクションとその子とを削除するとき、実際の削除を実行する前に、トランザクションの完全なセットが計算されなければならない。さもなければ、メンプールが、親を検索することが不可能な不一致状態になってしまい得る。除去されるようにマーキングされた所与のトランザクションの全ての先祖が更新される必要がある。従って、チェーン内の中間トランザクションは、全ての関連するトランザクションの全ての状態が更新されるまで除去されることができない。
【0170】
reorgの場合、新たなトランザクションはメンプール内の子を有することがあり、一貫性のない状態を引き起こし得る。何故なら、切り離されたブロックに由来するトランザクションの子孫トランザクションが存在し得るからである。この場合、メンプール内のブロック内トランザクションのブロック外の子孫がチェックされなければならない。Bitcoin Coreでは、関数UpdateForDescendantsが、メンプールに追加された個々のトランザクションの子孫を更新するために使用され、また、メンプール内に子トランザクションを有し得る[Bitcoin Coreソースコード URL:https://github.com/bitcoin/bitcoin]。
【0171】
先述したように、勝ったマイナーはブロックスケルトンを検証ノードに送り返す。ブロックスケルトンは、ナンス、可逆ブルームフィルタルックアップテーブル(IBLT)、及びコインベーストランザクションで構成される。これに基づいて、検証ノードは:
1. 特定のルールセットに従ってトランザクションを順序付け;
2. 新たにマイニングされたブロックを組み立て;
3. そのブロックをそれら自身のストレージに格納することを進め;
4. スケルトンを他の新しいフルノードに伝搬させる、
ことができる。
【0172】
従って、検証ノードは新しく公開されたトランザクションに気付く。各バリデータノードは、独立に、トランザクションIDのリストを含む削除メッセージをDMPに送信する。バリデータは、以前に検証したトランザクションに対してのみ削除要求を送信し得る(check_validator_sendがイネーブル)。この情報はデータベースVDB(Validator database)に格納される。このモデルによれば、メンプールノードは、そのトランザクションを検証しなかったバリデータから受信した削除要求を破棄し得る(check_validator_rcvがイネーブル)。この情報はデータベースSDB(Storage database)に格納される。これら2つのcheck_validator_sendオプション及びcheck_validator_rcvオプションは、ハードコードされてもよいし、独立に設定可能であってもよい。削除メッセージは、バリデータの秘密鍵で署名される。メッセージは、コンセンサスプロトコルに影響を及ぼし得る不正な複製の流布を回避するために、ナンス又はタイムスタンプを含まなければならない。
【0173】
図12は、新たにマイニングされたブロックに関する更新を受け取るバリデータノードv
n(0≦n<N)を示している。ブロックを検証した後、バリデータは、公開されたトランザクションに関するDELETE要求をDMPに送信する。各メンプールノードs
m(0≦m<M)が、S
DBテーブル上の格納要求及びR
DBテーブル上の除去要求を追跡する。
図12に示すように、格納されたトランザクション各々に対する削除要求を追跡するために、新しいテーブルR
DB(Removal database)が各メンプールノードによって使用される。メンプールノードm<Mについてのバリデータn<Nからのトランザクションt
iに対する削除要求を与えられると、ローカルR
DB(m)テーブルはブールr
mn値を含むことになる。例えば、N=100であり、且つ各メンプールノードが10分毎に10Mトランザクションを3日間保存することができる場合、R
DB(m)のサイズは、100・10
7・3・24・6=432GBが境界となる。なお、この数字は、過去3日間にローカルに保存された全てのトランザクションが承認されておらず、且つ各テーブルエントリに1バイトが必要とされるという、殆ど起こりにくいワーストケースシナリオを表している。少なくとも1桁又は2桁小さい大きさのテーブルサイズ(例えば、~4GB)の方が、より現実的なシナリオを表す可能性が高い。しかしながら、メンプールノードに要求される高いストレージ能力のため、我々は、ローカルテーブルの最大サイズに制約は課さない。
【0174】
NMAX>Nを、クラスタにSTORE又はDELETEメッセージを送信し得るバリデータの最大数とする。選択された分散アーキテクチャに応じて、NMAXは、ネットワーク内のバリデータの総数に一致することもあるし、特定のDMPクラスタのサイズに比例することもある。DMPクラスタのサイズは、メンプールノードの数及び/又はローカルに格納され得るトランザクションの総量によって与えられる。
【0175】
我々は、クラスタ内のローカルメンプールノードsmに格納されているトランザクションtiが除去されるべきかを決定するための何らかの基準を導入する:
少なくともN*<NMAXのバリデータがDELETE要求を送信する。バリデータは実際には、check_validator_send及びcheck_validator_rcvの設定に応じたN*に寄与し得る。一方又は双方のオプションが設定される場合、我々はN*≒N(近似)を課し得る。いずれのオプションも設定されない場合には、可能な限り高いコンセンサスを達成するために、我々はN*>Nを推奨する。
【0176】
tiは、以前に除去されたトランザクションtjに依存する。双方のトランザクションがsmに格納されたものであり、且つtjが安全に除去された場合、tiも安全に除去されることができる(トランザクションの除去に関するコンセンサスに達した場合、従属トランザクションは無効とみなされるにちがいなく、除去されるものとしてマーキングされる)。他のメンプールノードへの信号伝達は必要とされない。
【0177】
我々は、DMPが特定のサービス妨害攻撃を防ぐために単一のメンプールノードにトランザクションのチェーンを格納することを強制しない。従って、メンプールノードは、チェーン内の個々のトランザクションの状態のために、一貫性のない状態にあることがある。これは、トランザクションチェーンに関連するデータを要求するビットコインノードが、DMPへの特定のクエリ要求によって不一致について学習する限り、問題を表すものではない。例えば、ビットコインノードはトランザクションtiについてDMPに尋ねる。このトランザクションは、第2のトランザクションtjに依存する。第2のトランザクションについてDMPにクエリした後、ノードは、tjがもはや格納されていないことを発見する。従って、DMP内の一部のメンプールノードになおも格納されているとしても、tiを利用できないものと考えるのがノードの責任である。長期的な不一致が、恒久的な剪定によって解決されることになる。
【0178】
コンセンサスに達した場合、トランザクションtiは、除去されるものとしてローカルにマーキングされる。しかしながら、セキュリティ上の理由から、トランザクションは物理的に除去されないとし得る。我々は、いつトランザクションがsmから物理的に削除されるべきかを決定するための2つの基準を導入する:
少なくともN**≧N*のバリデータがDELETE要求を送信する。N**の値は、剪定コンセンサスが完全に安全であると考えるのに十分な高さであるべきである;
最後のDELETE要求が受信されてから、ΔTi>ΔT*の長さの時間が経過しているとともに、tiに対する更なるデータ要求は転送されていない。ΔT*の値は、reorgイベントの確率が無視できると考えるのに十分な高さであるべきである。6ブロック承認ルールによれば、トランザクションは、新たにマイニングされたブロック内でのその公開からおおよそ1時間後に、ネットワークによって受け入れられたと、安全にみなされることができる。
【0179】
しかしながら、smのメモリ制約に応じて、上の基準が満たされていなくても、tiが除去されてもよい。トランザクションは、ΔTiの降順でソートされて、恒久的削除のために選択され得る。チェーンに属し且つsmに格納されている複数のトランザクションが同時に削除されなければならない。トランザクションチェーンの剪定についてのバリデータへの通知は必要とされない。トランザクションチェーンに関するデータを必要とするビットコインノードは、DMPへの特定のクエリ要求によって不一致を学習する。
【0180】
メンプールノードは、除去されるものとして既にマーキングされているトランザクションに対するデータ要求を収集し得る。個々のトランザクションに対する複数のデータ要求を受信することは、異なる意味を持ち得る:
無用なデータを保持するサービス妨害攻撃;
ブロックチェーンreorg、及びトランザクションをDMPに転送し返す必要性。
【0181】
要求が正当でないこともあるので、メンプールノードは、これらのデータ要求の結果として何のアクションも取らない。データ要求カウンタを使用して、除去されるトランザクションを復帰の候補としてマーキングし得る。これらの候補は、物理的な剪定に関してなおも検討され得る。物理的な剪定に対して優先ポリシーが実装されている場合、復帰に関する候補トランザクションには、より低い優先度が割り当てられ得る。
【0182】
除去されるとしてマークされているが、なおもローカルに保存されているトランザクションは、バリデータからのREVERT(復帰)メッセージが受信された場合にのみ、復帰されることができる。バリデータは、チェーンreorgが行われる場合に、DMPに信号伝達することを担う。メンプールノードは、トランザクションを再び利用可能にするために、ある一定数の固有のREVERTメッセージを収集する必要がある。我々はN、N*、及び/又はN**パラメータの関数としてのメッセージ数を推奨する。例えば、REVERTメッセージの最低数は、NとN*の間の平均値に等しいとし得る。
【0183】
表3は、剪定プロトコルによって使用される設定可能パラメータをまとめている。
【表3】
【0184】
トランザクションを管理するプロトコルは、以下のメッセージを含む:
RECEIVED(ti) 新たな未検証トランザクションtiが受信されたときにトリガーされるバリデータのコールバック;
STORE(ti,idi) 有効なトランザクションti及びキーidiを格納するためのバリデータの要求;
STORE(idi) 有効なトランザクションキーidiを格納するためのバリデータの最適化された要求;
QUERY(idi) キーidiを有するトランザクションに関する一般ノードの要求;
DATA(ti) トランザクションtiのクエリ要求に対するメンプールノードの応答;
VALIDITY_REQ(ti) トランザクションtiの有効性をダブルチェックするための一般ノードの要求;
VALIDITY_ACK(ti) トランザクションtiに関する有効性要求に対するバリデータの回答。
【0185】
ここに提示される拡張は、以下の更なるメッセージを必要とする:
REMOVE(idi) idiによって特定されるトランザクションを除去するためのバリデータの要求;
REVERT(idi) チェーンreorg後に、idiによって特定されるトランザクションを復帰させるためのバリデータの要求;
REMOVED(idi) idiによって特定される除去されるトランザクションに関するクエリ要求に対するメンプールノードの回答。情報がなおも利用可能である場合、このメッセージは、idiによって特定されるトランザクションに関してメンプールノードによって受信されたREMOVEメッセージの数を含み得る。
【0186】
バリデータの要求に応じた、idiによって特定されるトランザクションの完全な状態図を
図13に示す。バリデータから受信されるメッセージのタイプ(すなわち、STORE、REMOVE、REVERT)及び数(例えば、N、N
*、N
**)に応じて、トランザクションは状態を、Available(利用可能)、Removed(除去される)、又はPhysically Removed(物理的に除去される)に変化させることができる。トランザクション状態“物理的に除去される”は復帰されることができない。しかしながら、ローカルファイルシステム及びオペレーティングシステムによって提供される機能に応じて、データがなおも復元され得ることがある。
【0187】
なお、上述の実施形態は、本発明を限定するものではなく、例示するものであり、当業者は、添付の請求項によって規定される本発明の範囲から逸脱することなく、数多くの代わりの実施形態を設計することができる。例えば、理解されるべきことには、トランザクションはビットコインを転送することができるが、ユーザは、それに代えて、例えば情報、契約、及びトークンなどの他の資源を、ここに記載された方法及びシステムを用いて交換し得る。トークンは、そのトークンに関連付けられたスマート契約に従った資産又は資源を表し、そのトークンの管理がその資産又は資源の管理を可能にする。スマート契約それ自体は、ブロックチェーン外に格納されてもよく、あるいは、1つ以上のトランザクションの内部に格納されてもよい。
【0188】
請求項において、括弧内に置かれた如何なる符号も、請求項を限定するものと解釈されるべきでない。用語“有している”及び“有する”並びにこれらに類するものは、いずれかの請求項又は明細書全体に列挙されたもの以外の要素又はステップの存在を除外するものではない。本明細書において、“有する”は“含む又はからなる”を意味し、“有している”は“含んでいる又はからなっている”を意味する。単数形での要素の参照は、それらの要素の複数形での参照を除外するものではなく、その逆もまた然りである。本発明は、幾つかの別個の要素を有するハードウェアによって、また、適切にプログラムされたコンピュータによって実装され得る。幾つかの手段を列挙するデバイスクレームにおいて、それらの手段のうちの幾つかが、同一のハードウェアアイテムによって具現化されてもよい。特定の複数の手段が相互に異なる従属請求項に記載されているという単なる事実は、それらの手段の組み合わせが有利に使用され得ないということを指し示すものではない。
【0189】
参考文献
- An Integrated World. (n.d.) https://www.anintegratedworld.com/whats-in-a-block/から検索
- David Eppstein, M. T. (2011). What's the Difference? Efficient Set Reconciliation without Prior Context. ACM.
- maidsafe. (n.d.). github.com:https://github.com/maidsafe/Whitepapersから検索
- Michael T. Goodrich, M. M. (2011). Invertible Bloom Lookup Tables. Communication, Control, and Computing (Allerton), 2011 49th Annual Allerton Conference on.
- NebulousLabs. (n.d.). github.com:https://github.com/NebulousLabs/Siaから検索
- O(1) Block Propagation. (n.d.). github.com:https://gist.github.com/gavinandresen/e20c3b5a1d4b97f79ac2から検索
- Wikipedia. (n.d.). https://en.wikipedia.org/wiki/Distributed_hash_tableから検索
- Wilkinson et al. (2016, December 15). https://storj.io/storj.pdfから検索
- John R. Douceur. The Sybil Attack. First International Workshop on Peer-to-Peer Systems. Springer-Verlag, London, UK, 2002
- Bitcoin Core source code. URL: https://github.com/bitcoin/bitcoin
【外国語明細書】