IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エヌチェーン ホールディングス リミテッドの特許一覧

特許7165148ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム
<>
  • 特許-ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム 図1
  • 特許-ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム 図2
  • 特許-ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム 図3
  • 特許-ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム 図4
  • 特許-ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム 図5
  • 特許-ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム 図6
  • 特許-ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-25
(45)【発行日】2022-11-02
(54)【発明の名称】ブロックチェーンネットワークにおける整合性のある分散型メモリプールのための方法及びシステム
(51)【国際特許分類】
   H04L 45/7453 20220101AFI20221026BHJP
【FI】
H04L45/7453
【請求項の数】 20
(21)【出願番号】P 2019568716
(86)(22)【出願日】2018-06-19
(65)【公表番号】
(43)【公表日】2020-08-20
(86)【国際出願番号】 IB2018054502
(87)【国際公開番号】W WO2018234988
(87)【国際公開日】2018-12-27
【審査請求日】2021-05-21
(31)【優先権主張番号】1709845.0
(32)【優先日】2017-06-20
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ホールディングス リミテッド
【氏名又は名称原語表記】NCHAIN HOLDINGS LIMITED
【住所又は居所原語表記】Fitzgerald House, 44 Church Street, St. John’s, Antigua and Barbuda (AG)
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】デステファニス,ジュゼッペ
(72)【発明者】
【氏名】マデオ,シモーネ
(72)【発明者】
【氏名】モティリンスキ,パトリック
(72)【発明者】
【氏名】ヴィンセント,ステファヌ
【審査官】宮島 郁美
(56)【参考文献】
【文献】特開2009-020757(JP,A)
【文献】米国特許出願公開第2010/0268820(US,A1)
【文献】欧州特許出願公開第02230799(EP,A1)
【文献】中国特許出願公開第109639582(CN,A)
【文献】複数DHTを対象とした自立型動的負荷分散方式の検討,信学技法,2007年,第109-114頁
(58)【調査した分野】(Int.Cl.,DB名)
H04L12/00-13/18,41/00-69/40
(57)【特許請求の範囲】
【請求項1】
分散型ハッシュテーブル(DHT)を実装する分散型メモリプールネットワーク(DMP)のメモリプールノードにおいて、前記メモリプールノードのルーティング情報を更新するための要求を受信するステップと、
前記DHTのキー空間内で一式のランダムウォークを初期化するステップであり、前記一式のランダムウォークは、前記メモリプールノードにより記憶される一式のキー・値のレコードを生成するために使用される、ステップと、
長距離テーブルタイプの第2のテーブルに記憶された第1の識別情報に少なくとも部分的に基づいて、第1のテーブル内の第1のレコードを生成するステップと、
前記一式のランダムウォークのうち第1のランダムウォークを少なくとも実行することにより、前記長距離テーブルタイプの第3のテーブル内の第2のレコードを生成するステップであり、前記第2のレコードは、第2の識別情報と、前記第2の識別情報に関連するアドレスとを含む、ステップと、
前記DMPネットワークの第2のメモリプールノードにより維持されるテーブルからレコードを少なくとも取得することにより、短距離テーブルタイプの第4のテーブル内の第3のレコードを生成するステップと
を含むコンピュータ実施方法。
【請求項2】
前記メモリプールノードにおいて、キーに関連する値の要求を受信するステップと、
前記長距離テーブルタイプの第5のテーブルから、前記第5のテーブルに含まれる少なくともいくつかの他の識別情報に対する第3の識別情報を選択するステップと、
前記第3のテーブルがメンバーである一式の長距離テーブルのうち長距離テーブルの特定の反復を選択するステップと、
前記長距離テーブルの前記特定の反復から、前記第3の識別情報と前記キーとの間の範囲内でポインタを選択するステップと、
前記ポインタに関連する第3のメモリプールノードにクエリを送信するステップと
を更に含む、請求項1に記載のコンピュータ実施方法。
【請求項3】
ルーティング情報を更新するための前記要求は、複数の反復で実行される更新操作の一部である、請求項2に記載のコンピュータ実施方法。
【請求項4】
更新操作は、反復の数が完了した後に終了し、前記反復の数は、DHTプロトコルにより定義される、請求項2又は3に記載のコンピュータ実施方法。
【請求項5】
前記メモリプールノードにおいて、一式の他のメモリプールノードとの一式の信頼された接続を作成するステップを更に含む、請求項1乃至4のうちいずれか1項に記載のコンピュータ実施方法。
【請求項6】
前記第2のテーブル内の前記第2のレコードは擬似ランダムに選択される、請求項2乃至5のうちいずれか1項に記載のコンピュータ実施方法。
【請求項7】
IDテーブル内の前記第1のレコードは、前記一式のランダムウォークを初期化する間に生成された情報から選択される、請求項2乃至6のうちいずれか1項に記載のコンピュータ実施方法。
【請求項8】
前記長距離テーブルの前記特定の反復から、前記第3の識別情報と前記キーとの間の範囲内で前記ポインタを選択するステップはランダムに実行される、請求項に記載のコンピュータ実施方法。
【請求項9】
前記メモリプールノードのルーティング情報を更新するための前記要求は、新たなメモリプールノードのインスタンス化の結果である、請求項2乃至8のうちいずれか1項に記載のコンピュータ実施方法。
【請求項10】
前記一式の信頼された接続は変更される、請求項2乃至9のうちいずれか1項に記載のコンピュータ実施方法。
【請求項11】
前記メモリプールノードのルーティング情報を更新するための前記要求は、少なくとも1つのメモリプールノードが故障した結果である、請求項2乃至10のうちいずれか1項に記載のコンピュータ実施方法。
【請求項12】
前記メモリプールノードのルーティング情報を更新するための前記要求は、前記DMPに関連する一式のキーを変更した結果である、請求項2乃至11のうちいずれか1項に記載のコンピュータ実施方法。
【請求項13】
前記メモリプールノードのルーティング情報を更新するための前記要求は、前記一式の信頼された接続を変更した結果である、請求項2乃至12のうちいずれか1項に記載のコンピュータ実施方法。
【請求項14】
前記DMPは、一式のバリデータノードから複数の記憶要求を取得する、請求項2乃至13のうちいずれか1項に記載のコンピュータ実施方法。
【請求項15】
前記メモリプールノードは、一式の他のメモリプールノードへの一式の接続に関連する一式の重みを維持する、請求項2乃至14のうちいずれか1項に記載のコンピュータ実施方法。
【請求項16】
前記メモリプールノードは、少なくとも1つのメモリプールノードが有効なキー・値のレコードを提供できなかった結果として、前記一式の重みのうち重みを更新する、請求項2乃至15のうちいずれか1項に記載のコンピュータ実施方法。
【請求項17】
前記DMPの前記メモリプールノードは、前記第4のテーブルに含まれる一式の値に対して前記DMPの複数のメモリプールノードの間でコンセンサスを提供するためのコンセンサスプロトコルを実装する、請求項2乃至16のうちいずれか1項に記載のコンピュータ実施方法。
【請求項18】
前記メモリプールノードは、前記DMPの少なくとも1つの他のメモリプールノードにも記憶される第2の値を記憶する、請求項2乃至17のうちいずれか1項に記載のコンピュータ実施方法。
【請求項19】
プロセッサと、メモリとを含むシステムであって、
前記メモリは、前記プロセッサによる実行の結果として、前記システムに請求項1乃至18のうちいずれか1項に記載のコンピュータ実施方法を実行させる実行可能命令を含む、システム。
【請求項20】
プロセッサによる実行の結果として、コンピュータシステムに請求項1乃至18のうちいずれか1項に記載のコンピュータ実施方法を少なくとも実行させる実行可能命令を記憶した非一時的なコンピュータ読み取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、コンピュータに基づく記憶及び転送技術に関する。本発明はまた、分散型ハッシュテーブルに関し、より詳細には、共有情報の記憶及び検索のためのセキュリティ及び整合性を改善するための方法及びデバイスに関する。本発明は、ブロックチェーンアプリケーション及びブロックチェーンで実装された転送における使用に特に適しているが、これらに限定されない。本発明はまた、より高速な読み取り及び書き込み操作を可能にすることによる、ブロックチェーンネットワークを介した動作速度の改善に関し、例えば、分散型メモリプールにおいて、ルーティング及びストレージ攻撃のような攻撃及び/又は悪意のある活動を防止又は低減することによる、ブロックチェーンで実装されたシステムのためのセキュリティメカニズムの改善に関する。
【背景技術】
【0002】
この文献では、全ての形式の電子的なコンピュータに基づく分散型の台帳を含む「ブロックチェーン(blockchain)」という用語を使用する。これらは、コンセンサスに基づくブロックチェーン及びトランザクションチェーン技術、プライベート型(permissioned)及びパブリック型(un-permissioned)台帳、共有台帳、及びこれらの変形を含む。ブロックチェーン技術の最も広く知られているアプリケーションはビットコイン台帳であるが、他のブロックチェーンの実装も提案されて開発されている。ここでは、便宜上及び説明上の目的でビットコインが参照されることがあるが、本発明は、ビットコインブロックチェーンでの使用に限定されず、代替のブロックチェーンの実装及びプロトコルも、本発明の範囲内に入る点に留意すべきである。
【0003】
ブロックチェーン技術は、暗号通貨の実装の使用で最も広く知られているが、デジタル起業家は、新たなシステムを実装するために、ビットコインが基づく暗号セキュリティシステムと、ブロックチェーンに記憶できるデータとの双方の使用を検討し始めている。ブロックチェーンが、暗号通貨の領域に限定されない自動化タスク及びプロセスに使用できれば、非常に有利である。このような解決策は、これらのアプリケーションにおける用途をより広くしつつ、ブロックチェーンの利点(例えば、イベントの永続的な改ざん防止記録、分散型処理等)を利用できる。
【0004】
ブロックチェーンは、結果としてブロックチェーントランザクションで構成される、ブロックで構成されるコンピュータに基づく非集中的な分散型システムとして実装されるピアツーピアの電子台帳である。各ブロックチェーントランザクションは、ブロックチェーンシステム内の参加者の間のデジタル資産又はレコードチェーンの制御の移転を符号化するデータ構造であり、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各ブロックは、前のブロックのハッシュを含み、それにより、ブロックチェーンの開始以降にブロックチェーンに書き込まれた全てのブロックチェーントランザクションの永続的で修正不可能なレコードを作成するように、ブロックが一緒につながれる。ブロックチェーントランザクションは、ブロックチェーントランザクションのインプット及びアウトプットに埋め込まれたスクリプトとして知られる小さいプログラムを含み、これは、ブロックチェーントランザクションのアウトプットがどのように誰によってアクセスできるかを指定する。ビットコインプラットフォームでは、これらのスクリプトはスタックに基づくスクリプト言語を使用して記述される。
【0005】
ブロックチェーントランザクションがブロックチェーンに書き込まれるために、これは「承認され(validated)」なければならない。ネットワークノード(マイナー)は、各ブロックチェーントランザクションが有効であることを確保するために作業を実行し、無効なブロックチェーントランザクションはネットワークから拒否される。ノードにインストールされたソフトウェアクライアントは、ロック及びロック解除スクリプトを実行することにより、未使用ブロックチェーントランザクション(unspent blockchain transaction, UTXO)に対してこの承認動作を実行する。ロック及びロック解除スクリプトの実行がTRUEに評価された場合、ブロックチェーントランザクションは有効であり、ブロックチェーントランザクションはブロックチェーンに書き込まれる。したがって、ブロックチェーントランザクションがブロックチェーンに書き込まれるために、これは、i)ブロックチェーントランザクションを受信した最初のノードにより承認されなければならず、ブロックチェーントランザクションが承認された場合、ノードはそれをネットワーク内の他のノードに中継し、ii)マイナーにより構築された新たなブロックに追加されなければならず、且つ、iii)マイニングされなければならず、すなわち、過去のブロックチェーントランザクションの公開台帳に追加されなければならない。
【0006】
新たなブロックチェーントランザクションを受信したネットワークノードは、迅速にそのブロックチェーントランザクションをネットワーク内の他のノードにプッシュしようとする。新たなブロックチェーントランザクションを他のノードに送信する前に、それが「承認され(validated)」、これは、ブロックチェーントランザクションが該当するブロックチェーンプロトコルに従って適切なブロックチェーントランザクションの基本的な要件を満たすことを確保するために、一式の基準に対してチェックされることを意味する。
【0007】
ブロックチェーントランザクションがブロックチェーンに書き込まれるために、ブロックチェーントランザクションを収集してこれらをブロックに形成するように設計されたノード(「マイナー(miner)」)によりブロックに組み込まれる。次いで、マイナーはノードに関して「プルーフオブワーク(proof of work)」を完成させることを試みる。ブロックチェーンネットワークを通じてマイナーは、ブロックチェーントランザクションのブロック組み立てる最初の者になるために競争し、そのブロックの関連するプルーフオブワークを競争する。成功したマイナーは、その確認済みのブロックをブロックチェーンに追加し、ブロックがネットワークを通じて伝搬され、それにより、ブロックチェーンのコピーを維持する他のノードがレコードを更新できる。ブロックを受信したこれらのノードはまた、プロトコルの正式な要件に準拠することを確保するために、そのブロック及びその中の全てのブロックチェーントランザクションを「承認(validate)」する。
【0008】
ブロックチェーンの実装に関連するボトルネックの1つは、ブロックチェーントランザクションのブロックを確認し、ブロックチェーントランザクションのブロックをブロックチェーンに追加することを生じるプルーフオブワークをマイナーが完成させるのを待機することに関連する遅延である。ビットコインシステムを例として使用すると、システムは、設計上、ブロックが確認されてブロックチェーンに追加されるのに約10分を要する。一方、未確認のブロックチェーントランザクションは、ネットワーク内の各ノードに維持されるもののほぼ完全なコピーをメモリプール(ここでは「mempool」と呼ばれる)に蓄積される。ビットコインアーキテクチャの分析は、10分のブロック確認スループットで、システムが、典型的なブロックチェーントランザクション及びブロックのサイズと、これらの蓄積された未確認のブロックチェーントランザクションが新たなブロックに組み込まれることができる速度とに基づいて、毎秒約3の新たな未確認のブロックチェーントランザクションのトランザクションスループットを処理できることを示している。
【0009】
ビットコインのようなブロックチェーンに基づくネットワークを使用して、広く一般の暗号的に安全な交換の使用を可能にするか或いは促進することが有利である。このような交換は、例えば、クレジットカード取引のような支払処理に関係してもよいが、本発明は、金融志向のアプリケーションに限定されない。しかし、毎秒約3のトランザクションスループットは、現在毎秒約50,000のトランザクション量で動作するこのような電子決済を処理するには不十分である。したがって、大量のトランザクションを処理するブロックチェーンの能力を現在制限している速度及びスケーラビリティの制約に対する解決策を見つけることが望ましい。
【発明の概要】
【0010】
このような解決策が現在考えられている。したがって、本発明によれば、添付の特許請求の範囲に定義される方法及び装置が提供される。
【0011】
本発明によれば、以下により詳細に説明するように、分散型ハッシュテーブル(distributed hash table, DHT)の機能を実装するように設計されたメモリプールノード(分散型メモリプール又はDMP)のネットワークを通じて、ブロックチェーントランザクション又は他のデータの高速伝搬(記憶及び検索を含む)を可能にする方法及びデバイスが提供されてもよい。DHTを実装するDMPは、マーチャントネットワーク又は他のネットワークのようなネットワーク(例えば、DMPネットワーク)上に分散された複数のメモリプールノードを含んでもよい。いくつかの実施形態では、DMPネットワークは、キー及び値を含むレコードとしてデータを記憶する。
【0012】
以下により詳細に説明するように、メモリプールノードは、いずれかの参加メモリプールノードが特定のキーに関連する値を効率的に検索できる(キー、値)のペアの記憶及び検索を提供する分散型システムを形成する。いくつかの実施形態では、メモリプールノードはまた、ルーティング情報を決定してメモリプールノードの間の経路及び/又は接続を確立する責任を負う。(キー、値)のペアの「値(value)」として記憶されたデータは、本開示に記載されるように、ブロックチェーントランザクションを含むコンピュータシステムにより記憶できるいずれかのデータを含んでもよい。
【0013】
更なる態様又は代替の態様では、本開示は、ブロックチェーントランザクションのDHTを実装するために使用される相互接続されたノードのネットワーク上で、ブロックチェーントランザクションの高速分配を促進するためのメモリプールネットワークノードを記載し、これらのサブセットは、オーバーレイネットワークにより相互接続されたメモリプールネットワークノードである。以下、「メモリプールネットワークノード(mempool network node)」という用語は、便宜上のみのため、「メモリプールノード(mempool node)」という用語と互換的に使用されてもよい。
【0014】
したがって、本発明によれば、添付の特許請求の範囲に定義されるコンピュータ実施方法(及び対応するシステム)が提供されてもよい。
【0015】
当該方法は、メモリプールノードを使用してDHTを実装するための方法として記載されてもよい。コンピュータ実装方法は、分散型ハッシュテーブル(distributed hash table, DHT)を実装する分散型メモリプールネットワーク(distributed mempool network, DMP)のメモリプールノードにおいて、メモリプールノードのルーティング情報を更新するための要求を受信するステップと、DHTのキー空間内で一式のランダムウォーク(random walk)を初期化するステップであり、一式のランダムウォークは、メモリプールノードにより記憶される一式のキー・値のレコードを生成するために使用される、ステップと、長距離テーブルタイプ(long-distance table type)の第2のテーブルに記憶された第1の識別情報に少なくとも部分的に基づいて、第1のテーブル内の第1のレコードを生成するステップと、一式のランダムウォークのうち第1のランダムウォークを少なくとも実行することにより、長距離テーブルタイプの第3のテーブル内の第2のレコードを生成するステップであり、第2のレコードは、第2の識別情報と、第2の識別情報に関連するアドレスとを含む、ステップと、DMPネットワークの第2のメモリプールノードにより維持されるテーブルからレコードを少なくとも取得することにより、短距離テーブルタイプ(short-distance table type)の第4のテーブル内の第3のレコードを生成するステップとを含む。
【0016】
本発明のこれらの態様及び他の態様は、ここに記載の実施形態から明らかであり、実施形態を参照して説明される。次に、本発明の実施形態について、添付の図面を参照して単なる例示として説明する。
【図面の簡単な説明】
【0017】
図1】実施形態によるメモリプールノードのオーバーレイネットワークを有するノードの例示的なネットワークを示す。
図2】実施形態によるDHTを実装するメモリプールノードの例示的ネットワークを示す。
図3】実施形態によるDMPネットワークのメモリプールノードのルーティング情報を更新するための動作を実装するメモリプールノードの例示的なネットワークを示す。
図4】実施形態によるDMPネットワークの検索操作を実装するメモリプールノードの例示的なネットワークを示す。
図5】実施形態によるDMPネットワークのメモリプールノードのルーティング情報を更新するための例示的なプロセスのフローチャートを示す。
図6】実施形態によるDMPネットワークのメモリプールノードから情報を検索するための例示的なプロセスのフローチャートを示す。
図7】様々な実施形態が実装され得る例示的な環境の図を示す。
【発明を実施するための形態】
【0018】
まず、図1に参照が行われ、図1は、ここでブロックチェーンネットワーク100と呼ばれてもよいブロックチェーンに関連する例示的なネットワークをブロック図形式で示す。ブロックチェーンネットワーク100は、ピアツーピアのオープンメンバーシップネットワークであり、招待なしに及び/又は他のメンバーからの同意なしに誰でも参加してもよい。ブロックチェーンネットワーク100が動作するブロックチェーンプロトコルのインスタンスを実行する分散型電子デバイスは、ブロックチェーンネットワーク100に参加してもよい。このような分散型電子デバイスは、ノード102と呼ばれてもよい。ブロックチェーンプロトコルは、例えば、ビットコインプロトコル又は他の暗号通貨でもよい。更に他の実施形態では、ブロックチェーンネットワーク100は、例えば、図2に関してより詳細に説明するDHTプロトコルのインスタンスを実行する記憶ネットワークでもよい。
【0019】
ブロックチェーンプロトコルを実行し且つブロックチェーンネットワーク100のノード102を形成する電子デバイスは、例えば、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、サーバのようなコンピュータ、スマートフォンのようなモバイルデバイス、スマートウォッチのようなウェアラブルコンピュータ、又は他の電子デバイスを含み、様々なタイプのものでもよい。
【0020】
ブロックチェーンネットワーク100のノード102は、有線及び無線通信技術を含んでもよい適切な通信技術を使用して互いに結合される。多くの場合、ブロックチェーンネットワーク100は、インターネット上に少なくとも部分的に実装され、ノード102のいくつかは、地理的に分散した位置に位置してもよい。
【0021】
ノード102は、それぞれがチェーン内の前のブロックのハッシュを含むブロックにグループ化された、ブロックチェーン上の全てのブロックチェーントランザクションのグローバル台帳を維持する。グローバル台帳は、分散型台帳であり、各ノード102は、グローバル台帳の完全なコピー又は部分的なコピーを記憶してもよい。グローバル台帳に影響を与えるノード102によるブロックチェーントランザクションは、グローバル台帳の有効性が維持されるように、他のノード102により検証される。ビットコインプロトコルを使用するもののようなブロックチェーンネットワークの実装及び動作の詳細は、当業者により認識される。
【0022】
各ブロックチェーントランザクションは、典型的には、1つ以上のインプット及び1つ以上のアウトプットを有する。インプット及びアウトプットに埋め込まれたスクリプトは、ブロックチェーントランザクションのアウトプットがどのように誰によってアクセスできるかを指定する。ブロックチェーントランザクションのアウトプットは、ブロックチェーントランザクションの結果として値が転送されるアドレスでもよい。次いで、この値は、未使用ブロックチェーントランザクションアウトプット(unspent blockchain transaction output, UTXO)として、そのアウトプットアドレスに関連付けられる。次いで、後続のブロックチェーントランザクションは、その値をロック解除するために、インプットとしてそのアドレスを参照してもよい。
【0023】
ノード102は、その機能に依存して、異なるタイプ又はカテゴリのものでもよい。ノード102に関連する4つの基本的な機能、すなわち、ウォレット、マイニング、フルブロックチェーン維持及びネットワークルーティングが存在することが示唆されている。これらの機能の変形が存在してもよい。ノード102は、1つより多くの機能を有してもよい。例えば、「フルノード(full node)」は、全ての4つの機能を提供する。軽量ノードは、例えば、デジタルウォレットに実装されてもよく、ウォレット及びネットワークルーティング機能のみを特徴としてもよい。デジタルウォレットは、完全なブロックチェーンを記憶するのではなく、ブロックヘッダを追跡してもよく、ブロックヘッダは、ブロックを照会するときのインデックスとして機能する。ノード102は、TCP/IP(伝送制御プロトコル)のようなコネクション指向プロトコルを使用して互いに通信する。メモリプールノード104は、様々な実施形態では、ブロックチェーンネットワークのメンバーではなく、ビットコイン/ブロックチェーンプロトコルを実装する責任を負わない。
【0024】
本出願は、ノードの更なるタイプ又はカテゴリ、すなわち、メモリプールノード104を提案及び記載する。様々な実施形態では、メモリプールノード104は、ブロックチェーントランザクションの高速伝搬及び検索を提供する。このような実施形態において、メモリプールノード104は、完全なブロックチェーンを記憶せず、マイニング機能を実行しない。その意味で、これらは軽量ノード又はウォレットに類似しているが、これらは、ブロックチェーントランザクションの高速伝搬及び検索を可能にするための更なる機能を含む。メモリプールノード104の動作上の焦点は、DMPネットワークにより実装されたDHTに記憶されたデータの伝搬及び検索であり、特にブロックチェーンの実装の場合、未確認のブロックチェーントランザクションを他のメモリプールノード104に伝搬することであり、そこから未確認のブロックチェーントランザクションがブロックチェーンネットワーク100内の他のノード102に迅速にプッシュされる。
【0025】
メモリプールノード104は、DMP106と総称される。様々な実施形態では、メモリプールノード104及びDMP106は、本開示に記載されるように、マーチャントネットワークの一部として実装される。図示のように、例示を容易にするために、図1における物理的に別個のネットワークとして、メモリプールノード104がブロックチェーンネットワーク100に統合されてもよい。すなわち、DMP106は、ブロックチェーンネットワーク100内でサブネットワークと考えられてもよく、ブロックチェーンネットワーク100を通じて分散される。メモリプールノード104は、1つ以上の専用機能又はサービスを実行してもよい。
【0026】
DMP106が確実に動作し、特定のセキュリティレベルでサービスを提供できるようにするために、メモリプールノード104は、DMP106の良好な概観を維持する必要があり、したがって、効率的なルーティングプロトコルが配置される必要がある。以下により詳細に説明するように、メモリプールノード104が更新を受信するか或いは要求を受け取る毎に、メモリプールノード104は、他のノード102と同様に、情報をいくつかの他のメモリプールノード104にブロードキャストする必要があってもよい。DMP106に関して、これは、複数巡回セールスマン問題(multiple traveling salesman problem, MTSP)に対する解決策を見つけることに相当する。この問題に取り組む複数の解決策が存在し、そのいずれか1つがDMP106で使用されてもよい。メモリプールノード104はそれぞれ、何らかの最新の形式でルーティング最適化を実行する。
【0027】
いくつかの実装では、DMP106は、非集中的なIPマルチキャストタイプのネットワークとして実装される。
【0028】
1つの例示的な状況において、ブロックチェーンネットワーク100上の通常のノード102は、DMP106により記憶されるべきブロックチェーントランザクションを生成する。これは、ブロックチェーントランザクションをメモリプールノード104に送信してもよく、次いで、メモリプールノード104はこれを他のメモリプールノード104にブロードキャストするか、或いは、メモリプールノード104のIPアドレスを知っている場合には、ブロックチェーントランザクションを複数のメモリプールノード104に直接送信してもよい。いくつかの例では、DMP106の全てのメモリプールノード104は、単一のアドレスのメンバーであり、したがって、そのアドレスに送信された全てのブロックチェーントランザクションは、全てのメモリプールノード104により受信される。しかし、いくつかの場合、DMP106に関連する1つより多くのアドレスが存在してもよく、受信メモリプールノード104は、ルーティング情報から、ブロックチェーントランザクションの他のアドレスへの更なるブロードキャストが、ブロックチェーントランザクションを完全なDMP106に伝搬するために必要であるか否かを評価してもよい。
【0029】
ネットワーク100内の各ノード102は、典型的には、認識されており且つプルーフオブワークを完成させるマイナーによりブロックチェーンにまだ組み込まれていない未確認のブロックチェーントランザクションを含む別個のメモリプールを維持する。支払処理での使用から生じるブロックチェーントランザクションの数のかなりの増加は、各メモリプールに記憶するブロックチェーントランザクションの量を増加させる。したがって、DMP106内のノードは、ほぼ同時に新たなブロックチェーントランザクションを受信できるが、それらは、大量の迅速に変化するメモリプールに関して記憶能力の制限を有し得る。
【0030】
この問題に対処するために、本出願は、メモリプールノード104がDMP106により実装された共有メモリプールを使用することを提案する。
【0031】
500バイトのブロックチェーントランザクション(transaction, TX)の平均サイズ及び~10TX/sのトランザクションレートを仮定すると、DMP106は、~400GBの毎日の入来データを受信する可能性がある。このデータは、未確認のブロックチェーントランザクションのメモリプールに可変量の時間だけ記憶される。したがって、DMP106は、データを高速に記憶するためのかなりのストレージ及び能力を必要とする。それぞれの個々のメモリプールノード104に多すぎる要件を課さないために、メモリプールノード104は、共有メモリプール、例えば、DMP106を実装する。各メモリプールノード104に全ての入来TXを自分のメモリプールに保持させる代わりに、各メモリプールノード104は、全体の特定の部分のみを記憶し、残りの部分の関連するキー・値をハッシュする。
【0032】
DMPは、ノードの間のキーセットのメンバーシップ分割を可能にし且つ効率的で最適化された方式でメッセージを所与のキーの所有者にのみ送信できる非集中的な分散型システムの一種である。ネットワークの各ノードはハッシュテーブルの配列のセルとして見なされることができる。DMPは、複数のノードを管理するように設計され、新たなノードがネットワークに参加する可能性を可能にし、古いノードが共有データの完全性を損なうことなく離脱及びクラッシュする可能性を可能にする。DMPは、非集中化(中央権限も中央調整も存在しない)、スケーラビリティ(システムが何百万ものノードで効率的な動作を有する)、及び耐障害性(システムは信頼性があり、ネットワークに参加及び離脱するノード又はクラッシュするノードを管理できる)を確保する。ネットワークの各ノードは、少数の他のノードとのみ連絡を取り合い続けてもよく、それにより、データの変化又は新たなデータの存在の際に、ネットワークは過負荷にならない。
【0033】
同じ概念は、UTXOデータベース、すなわち、ブロックチェーン上の一式の全ての未使用のアウトプットを含むデータベースに適用されてもよい。UTXOデータベースは、一式のノードの間でコンテンツを共有するために、DHTを実装するDMPを使用して構築されてもよい。
【0034】
以下により詳細に記載されるDHTプロトコルは、上記の問題に対する解決策を提供する。具体的には、DHTプロトコルは、メモリプールノード104に記憶されたブロックチェーントランザクションの有効性、記憶されたデータの整合性及び完全性についてのグローバルなコンセンサスを提供し、高速伝搬及び検索動作を提供し、メモリプールノード104におけるルーティング及びストレージ攻撃を防止する。
【0035】
ロバストなDHTの大きさを決定する際に考慮すべき1つの要因は、全体のネットワークのロバスト性と信頼性を確保するために必要なレプリカの数である。上記のように、ノードは、ネットワークに参加及び離脱でき、この事実は、データの可用性に影響を与えるべきではない。ブロックチェーントランザクションAを記憶するノードがネットワークから離脱する場合、ネットワークの別の部分でブロックチェーントランザクションAを見つけることが必要になる。例えば、ビットコインのような既存のブロックチェーンネットワークでは、ネットワークは、ネットワーク内の全ノードの数に等しいブロックチェーンレプリカの数(平均で5000個のレプリカ)を有するが、この事実はスケーラビリティに影響する。
【0036】
現在提案されているDMP106では、メモリプールは、各メモリプールノード104で完全に複製されず、代わりにDMP106によって実装される。信頼性を提供するために、DMP106は、いくつかの重複を有するように実装されてもよく、すなわち、各ブロックチェーントランザクションデータ項目は、全てのメモリプールノード104ではないが、1つより多くのメモリプールノード104で複製される。例として、DMPは、最小数の2つのレプリカを指定するように実装されてもよい。これは、ノードの間の完全な独立性を仮定して、2つのノードがいずれか所与の時間に同時に停止する確率が
【0037】
【数1】
であることを生じる。
【0038】
図2は、実施形態に従ってバリデータノード208(例えば、図1に関連して示されるノード102のうち1つのようなノード)及びメモリプールノード204を含む例示的なブロックチェーンネットワーク200を図の形式で示す。様々な実施形態では、特定のブロックチェーントランザクション(Ti)202は、1つ以上のバリデータノード208により処理され、1つ以上のメモリプールノード204にTi202を記憶させる。ブロックチェーントランザクションTi202は、上記のようなブロックチェーントランザクションを含んでもよい。しかし、トランザクション情報の記憶は、本開示に記載のDHTプロトコルの一実施形態に過ぎない。本開示に記載のプロトコルは、DMP内の記憶に適したいずれかのデータのための整合性のある安全な記憶及び検索のために使用できる。
【0039】
バリデータノード208は、入来するTi202の承認のための様々な基準を適用してもよい。例えば、バリデータノード208を実行する計算リソースにより提供される計算並列処理及び/又はTi202の順序付け要件に依存して、新たなブロックチェーントランザクションは、任意のサイズを有する完全なバッチが承認のためにスケジュールされる前にバッファされてもよい。さらに、バリデータノード208は、ブロックチェーントランザクションのフォーマット又はメモリプールノード204に向けられた他の要求を承認する責任を負ってもよい。更に他の実施形態では、バリデータノード208は、Ti202が1つ以上の他のコンピュータシステムにより承認されたか否か(例えば、ブロックチェーンプロトコルに少なくとも部分的に基づいて承認されたか否か)を決定する。
【0040】
メモリプールノード204は、検索動作のような様々な動作を可能にする非集中的な記憶サービスを提供し、動作「lookup(k)」は、キー「k」に関連するデータを返す。さらに、メモリプールノード204は、DMP106を実装するために、DHTプロトコルに従ってピアツーピアシステムを実装する。DMP106は、メモリプールノード204とキーとの双方のための共通の識別子空間(例えば、キー空間又はハッシュ関数の全ての可能な結果の集合)を提供し、各キーkはメモリプールノード204に記憶され、kに最も近い識別子は距離関数に従う。以下でより詳細に説明するように、キーは、決定論的関数(例えば、ハッシュ関数)を使用して共有空間に記憶されない。様々な実施形態では、これは、ブルートフォース攻撃を実行する悪意のあるノードが、悪意のあるキーが2つのキーの間にあることになることを生じるアウトプットを生成する効果を防止又は低減し得る。
【0041】
いくつかの実施形態では、kに関連する特定のメモリプールノードを見つけるために、メモリプールノード204は、距離関数に従って識別子がkに近い他のピアに検索要求を転送する。さらに、メモリプールノード204は、他のメモリプールノード204のサブセットへのリンクを維持してもよい。図6に関して以下により詳細に説明するように、検索要求は、kに関連するメモリプールノードが見つかるまで、或いはこの開示で提示されるルーティングプロトコルに従って要求されたキーにより近い識別子を有するノードが見つからなくなるまで、メモリプールノード204により転送される。
【0042】
DMP106では、キーは、潜在的に非常に多数のメモリプールノード104に分散される。様々な実施形態では、各メモリプールノード204は、他のメモリプールノード204のサブセット(例えば、ネットワークアドレス、キー情報、物理的位置等)を識別できる情報を含み、それにより、検索は、要求されたキーに責任を負うメモリプールノード204に決定論的にルーティングできる。DMP106のメンバーシップのこの限られた視野は、より大きいスケーラビリティをシステムに提供し得る。
【0043】
DMP106は、本開示に記載のDHTプロトコルを使用して実装される。DHTプロトコルは、様々な実施形態では、2つの動作、すなわち、1)記憶動作及び2)検索動作を提供する。ブロックチェーントランザクションTiが与えられた場合、識別子id(Ti)は、idi=H(Ti)のように割り当てられることができ、Hはハッシュ関数を表す。様々な実施形態では、識別子(idi)は、DMP106におけるキーとして使用される。さらに、上記のように、ブロックチェーントランザクションが複数のバリデータノード208から受信できるように、特定のアドレスが使用されてもよい。次いで、各バリデータノード208は、ブロックチェーントランザクションTiを独立して検証してもよい。
【0044】
図2に示すように、各バリデータノード208は、ローカルデータベース214を維持する。図2に示す実施形態では、ローカルデータベース214のエントリは、ブロックチェーントランザクションの識別子idiと、Tiに対して実行される承認動作のためのバイナリ判定、例えば、拒否のための「0」及び受け入れのための「1」、又は受け入れのための「Y」若しくは拒否のための「N」を含む。この情報は、承認又は検索クエリへの高速な応答のために使用されてもよい。いくつかの実施形態では、複数のバリデータノード208は、Tiを独立して検証し、次いで、複数のバリデータノード208は、Tiを検証した結果に少なくとも部分的に基づいて、記憶(Ti,idi)要求又は拒否(idi)要求をDMP106に送信する。これらの実施形態では、記憶メッセージは、Tiをidiに関連するメモリプールノード204に記憶させ、拒否メッセージは、メモリプールノード204にidiを含む要求を拒否させる。さらに、メモリプールノード204は、N/2+1の記憶(Ti,idi)要求が受信された場合にのみ、Tiを記憶してもよく、Nはバリデータノード208の数である。
【0045】
更に他の実施形態では、拒否メッセージは使用されず、メモリプールノード204が第1の記憶(Ti,idi)を受信するとすぐに、メモリプールノード204は、N/2個より多くの記憶メッセージを受信するためのタイマを起動する。このような実施形態では、タイムアウトを超えて十分な記憶メッセージが受信されない場合、ブロックチェーントランザクションは破棄される。さらに、各メモリプールノード204は、Tiについて受信された記憶メッセージの数をN/2+1よりも多く維持してもよい。これらのメカニズムは、定足数(quorum)要件を維持するため、及び/又は定足数の間で合意に達したことを確保するために使用されてもよい。いくつかの実施形態では、メモリプールノード204は、所与のブロックチェーントランザクションについてバリデータノード208から受信した承認の数を記憶するために使用されるデータベース210又は他のデータ構造を維持する。
【0046】
本開示に記載のDHTプロトコルの様々な実装では、承認済みのブロックチェーントランザクションTiの検索は、idiを含むメッセージのブロードキャストが少なくとも1つのメモリプールノード204に送信されることを必要とする。idiの記憶に責任を負う特定のメモリプールノードは、idiに関連するデータを含むメッセージをクエリノードに送信する。この実装では、Tiを記憶するためにM個のメモリプールノードが必要である場合、記憶されたブロックチェーントランザクションが整合性があると考えられるために、idiに関連するデータを含む少なくともM/2+1個のメッセージがクエリノードにより受信される。さらに、クエリノードは、バリデータノード208のローカルデータベース214に記憶された情報に従ってTiの有効性を決定するために、N/2+1個のランダムなバリデータノード208に問い合わせてもよい。
【0047】
図3に関して以下により詳細に説明するように、DMP106のキー・値のペアは、メモリプールノード204により維持されるテーブル210に記憶されてもよい。テーブル210は、上記の別個の機能のような、DHTプロトコルに関連する情報を含んでもよい。バリデータノード208及びメモリプールノード204は、図2において別個のエンティティとして示されているが、様々な実施形態では、1つ以上のメモリプールノード204及び/又はバリデータノード208は、コンピュータシステムのような同じエンティティにより実行されてもよい。例えば、図1に関して上記に記載したように、マーチャントノードはブロックチェーンプロトコルの複数の構成要素を実行する。更に他の実施形態では、DMP206は、バリデータノード208なしで実装される。このような実施形態の一例では、Ti202は、承認動作の実行なしに、メモリプールノード204により直接記憶される。他の例では、メモリプールノード204自体が、Ti202を処理する前に承認動作を実行してもよい。
【0048】
図3は、DMPネットワークの一式のメモリプールノードのルーティング情報への更新の例示的な実施形態300を図の形式で示す。図3に示す例示的な実施形態300は、新たなメモリプールノードSx304と、既存のメモリプールノードSy308と、他の既存のメモリプールノードSz306とを示す。上記のように、DHTプロトコルは、メモリプールノードの間の個々の信頼関係で構成されたネットワークに依存する。特定のメモリプールノード(例えば、Sx)のための一式の接続は、ルーティング情報とアプリケーションレベル情報との双方の集合に少なくとも部分的に基づいて生成されてもよい。様々な実施形態では、中央権限は、信頼証明書のリリース又は記憶に関与しない。このような実施形態では、各メモリプールノードは、メモリプールノードに対して信頼されるピアのレコードを維持する。様々な他の実施形態では、メモリプールノードSx304は、例えば、更新手順の間に新たなメモリプールノードとはならない。
【0049】
ネットワーク(例えば、DMP106)内のメモリプールノードの数nが与えられた場合、メモリプールノード当たりのルーティングテーブルレコードの数rは、
【0050】
【数2】
に従って大きさが決定(又はスケール変更)されてもよい。
【0051】
上記のように、DHTプロトコルは、2つの機能及び/又は操作、すなわち、更新操作及びゲット操作を定義する。様々な実施形態では、更新操作は、ルーティングテーブルを構築し、各メモリプールノードにおいてキーを挿入するために使用される。図4に関して以下により詳細に説明するように、ゲット操作は、キーkにより表されるターゲットキー・値のペア(例えば、DHT内のレコード)を見つけるために、特定のノード(例えば、Sx)により使用される。
【0052】
様々な実施形態では、特定のメモリプールノード(例えば、Sx)は、公開鍵により識別される。例えば、メモリプールノードSx304の識別情報は、公開鍵Px及びSx304の現在のIPアドレスaddrxにより表され、これらは、Signx(Px,addrx)により定義される以下のレコードを使用することにより安全にリンクされ、Signx()は、Sx304に関連する秘密鍵を使用して生成された署名を表す。次いで、ノード識別情報は、署名されたレコードを使用してDMPに記憶されてもよい。いくつかの実施形態では、メッセージをピアSy308に送信するために、メモリプールノードSx304は、識別子Pyを使用してDMPに問い合わせる。次いで、メモリプールノードSx304は、Sy308の公開鍵Pyを使用してクエリに応じて返されたいずれかのレコード(例えば、(Py,addry))の署名を検証する。メモリプールノードSx304が情報を検証すると、Sx304は、メッセージをSy308のaddryに直接送信する。このような実施形態では、メモリプールノードが位置を変更するか或いは新たなネットワークアドレスを受信したとき、新たなレコードが生成され、DMPに記憶される。
【0053】
DHTプロトコルは、上記のゲット操作が、更新操作とゲット操作との双方に対する悪意のある活動にもかかわらず、(他のプロトコルと比較して)正しい値を返す可能性が高い場合、シビル攻撃に対してロバストであると考えられてもよい。様々な実施形態では、DHTプロトコルは、シビル攻撃又は他の攻撃の有効性を低減するための以下の特性を有する。ルーティングテーブル情報は、多数の偽ノードにより生成される過負荷のような問題を回避するために、空間の複雑性を低減するように最小化される。新たなノードは、ピアから情報を収集することにより、自分のルーティング情報を生成し、それにより、偽情報を繰り返し送信する悪意のあるノードの影響を低減する。キー空間は、クラスタリング攻撃を回避するために決定論的ではない。
【0054】
DMP内のデータルーティングは、無向グラフにより表されることができる。いくつかの実施形態では、悪意のあるエッジの数gと、メモリプールノードの数nが与えられた場合、特性g<<n(gはnよりはるかに小さい)は、DMP106の動作ネットワークを保証する。攻撃者は任意の数の悪意のあるノードを作成する可能性があるが、悪意のあるノードがメモリプールノードとのエッジ(例えば、ネットワーク接続又は関係)を作成することは困難になり得る。例えば、メモリプールノードから始まるランダムウォークは、悪意のあるノードではなく、他のメモリプールノードで終わる可能性が高い。しかし、開始のメモリプールノードは、悪意のあるノードからどの返信メッセージが発生したかを決定できない可能性があるので、メッセージの真実性に対する仮定が行われなくてもよい。これらの特性は、Haifeng Yu et al. SybilLimit: A Near-Optimal Social Network Defense Against Sybil Attacks, IEEE/ACM Transactions on Networking, vol. 18, no. 3 (2010)及びF. R. K. Chung Spectral Graph Theory Conference Board of the Mathematical Sciences, no. 92 (1994)に記載されており、各引例が個別に且つ具体的に参照により組み込まれるように示されており且つ本開示においてその全体が記載されている場合と同じ程度に、参照により本明細書に組み込まれる。
【0055】
図3により示すように、Sx304は、ランダムウォーク332を実行することによりルーティング情報を生成してもよい。実施形態では、Sx304のルーティングテーブルは、DMP内で長さwのr個の独立したランダムウォークを開始することにより生成される。長さwのr個の独立したランダムウォークが生成されてもよく、ランダムウォークから取り出された情報は、テーブルTab_RND(Sx)316に記憶される。これらのランダムウォークを使用して、Sx304は、各ランダムウォークの受信側のメモリプールノードから1つ以上のランダムなキー・値のレコードを収集してもよい。次いで、この情報は、テーブルTab_DIST(Sx,i)312に記憶されてもよく、iは、ルーティング反復を表す。
【0056】
以下に詳細に説明するように、このルーティング情報は、ゲット(get)のような検索操作の間に使用される。Sx304のローカル・テーブルのTab_CLOSE(Sx,i)314テーブルがキーを含まない場合、検索メッセージは、Sx304のルーティングテーブル(例えば、Tab_DIST(Sx,i)312)のr個のノードに送信される。rの値に依存して、1つ以上のメモリプールノードが、問い合わされたキー・値のレコードをローカルに(例えば、特定のノードのTab_CLOSEテーブルに)記憶する可能性がある。さらに、プロトコルはrn、rd又はrcを定義してもよく、rnはTab_RND(Sx)316の要素の数であり、rdはTab_DIST(Sx,i)312の要素の数であり、rcはTab_CLOSE(Sx,i)314の要素の数である。様々な実施形態では、値rn、rd又はrcはrと同じでもよい。
【0057】
様々な実施形態では、ルーティング情報は、複数のランダムウォークを実行することによりのみ生成される。さらに、異なるメモリプールノードの間の異なる数のエッジのため、ランダムウォーク分布は均衡が取れていてもよい。したがって、各物理的なメモリプールノードが複数のエッジに従って自分を複製する場合、システムに記憶されるキーの総数はmKであり、mは公正なエッジの数であり、Kはメモリプールノード毎に記憶されるキーの数であり、独立したランダムウォークの数はO(√mK)に従って大きさが決定される。
【0058】
いくつかの実施形態では、キーのためのグローバルな円形辞書式順序(global circular lexicographical ordering)が使用される。例えば、いずれかのインデックスa<i<bが与えられた場合、キーkiは2つのノードxa及びxbの間の空間の一部に位置する。上記のように、悪意のあるノードが望ましいアウトプットをブルートフォースして2つの公正なキーの間に誤ったキーを挿入することを防止するために、キーは、決定論的な関数(例えば、ハッシュ関数)を使用して共有キー空間に記憶されない。
【0059】
図3に示すように、ノードSx304は、キー空間上で均一に分散された識別情報を有する他のメモリプールノードへのr個のポインタを含む長距離ルーティングテーブルTab_DIST(Sx,i)312を生成する。このような実施形態において、ポインタは、r個のランダムウォークを開始し、終了メモリプールノードからランダムな識別情報を収集することにより記憶される。短距離ルーティングテーブルTab_CLOSE(Sx,i)314は、r個のキー・値のレコードを含む。これらのキーは辞書式順序でSx304の識別情報に続いて最も近いものである。
【0060】
このルーティングモデルによれば、各ノードは、ランダムなキーを選択するためにランダムウォークを使用し、それにより、キー空間上のポインタの均一な分布を提供する。さらに、クラスタリング攻撃は、このルーティングモデルを再帰的に拡張することにより防止され得る。様々な実施形態では、所与の反復iにおいて、各メモリプールノードは、前の第(i-1)の長距離テーブル336(例えば、Tab_DIST(Sx,i-1))からランダムなエントリを選択し、Tab_ID(Sx)310に記憶する識別情報を選択するためにそのポインタを使用する。α度の再帰は、各メモリプールノードがα個の位置に存在し、キー空間におけるα個の異なる識別情報のための短距離テーブルを収集することを確保してもよい。したがって、再帰の程度は、O(logmK)に従って大きさが決定できる。
【0061】
図3に示すように、更新操作は2つの段階で構成される。第1の段階の間に、ノードSx304は、Tab_RND(Sx)316に記憶されるべきキー・値のレコードの収集のためのランダムウォークを初期化する。第2の段階の間に、更新操作の反復i<αについて、他のルーティングテーブルTab_ID(Sx)310、Tab_DIST(Sx,i)312及びTab_CLOSE(Sx,i)314が生成される。様々な実施形態では、各テーブル内のエントリの数は、特定の数の総エントリに制限されてもよい。図3に戻ると、ルーティング反復の間に、メモリプール識別情報は、現在のルーティング反復に少なくとも部分的に基づいて再帰的に選択されてもよい。
【0062】
さらに、上記のように、Tab_ID(Sx)312レコードは、Sx304の第(i-1)のTAB_DISTテーブル内のレコードからランダムな識別情報を選択することにより作成されてもよい。いくつかの実施形態では、第1のエントリは、Tab_RND(Sx)316テーブルからのランダムなキーである。さらに、実施形態では、Tab_DIST(Sx,i)312レコードは、メモリプールノード334(例えば、ノードSy308)へのランダムウォークを実行し、結果のメモリプールノードのアドレス及びそのTab_IDテーブル320からの第iの識別情報を収集することにより作成される。最後に、Tab_CLOSE(Sx,i)314は、Tab_RND(Sx)316に含まれる情報に少なくとも部分的に基づいて、Tab_RND318のレコードを少なくとも要求することにより生成されてもよく、これらのレコードは、所与の反復iにおいて識別情報に続く少なくとも1つの他のキーに対して辞書式上で近い。
【0063】
様々な実施形態では、ルーティング情報を収集するために必要なクエリは独立しており、特定の識別情報に近いキーの空間内にランダムに分布する。
【0064】
図4は、DHTを実装するDMPのメモリプールノードにより実行されるゲット操作の例示的な実施形態400を図の形式で示す。図4に示す例示的な実施形態400は、DMP内でノードSz406により維持されるターゲットレコードを見つけるために、メモリプールノードSx404が既存のメモリプールノードSy408及びメモリプールノードSz406と連絡することを示す。上記のように、DHTプロトコルは、メモリプールノードの間の個々の信頼関係(例えば、接続)で構成されたネットワークに依存する。特定のメモリプールノード(例えば、Sx)のための一式の接続は、上記のように生成され、キー空間に分散されたメモリプールノードを示す一式のレコードと、メモリプールノードに関連するネットワークアドレスとを含むテーブル(例えば、Tab_DIST412)を含んでもよい。
【0065】
様々な実施形態では、ターゲットレコードの検索は、その短距離ルーティングテーブル418内にターゲットメモリプールノードを有する長距離ルーティングテーブル内のルーティングポインタを見つけることで構成される。図6に関して以下により詳細に説明するように、このプロセスは反復されてもよく、それにより、ゲット操作は、ゲット操作を実行する計算リソースが、その短距離ルーティングテーブル418内のターゲットレコードを有するターゲットメモリプールノードまで、連続的な長距離ルーティングテーブルへの複数のルーティングポインタに従うことを生じる。
【0066】
上記のように、更新操作は、全体のキー空間内のいくつかの長距離ポインタが、ターゲットレコード及び/又はターゲットキーについてのルーティング情報を維持することを確保してもよい。さらに、長距離ポインタの少なくともいくつかは悪意のあるエンティティに関連付けられない可能性がある。図4に示すように、ノードSx404から開始されるキー・値の検索手順(例えば、ゲット操作)は、まず、ルーティングポインタを求めてSx404のTab_DIST412テーブルのスキャンで開始する。ターゲットレコードに到達できない場合(例えば、ルーティングポインタ又は他の情報がTab_DIST412に含まれない場合)、手順を繰り返すためにノードSy308へのランダムウォーク432が実行されてもよい。図4に示すように、ランダムウォーク432は、メモリプールノードの間の実線として示され、他の可能なランダムウォークは、破線により示される。
【0067】
ゲット操作の反復の間に、ノードSy408のTab_DISTテーブル414は、検索されるターゲットレコード(例えば、キー)に対して最も近い識別情報(図4において「id*」として示される)を求めて検索されてもよい。様々な実施形態では、ランダムな反復iが与えられた場合、Tab_DIST(Sy,i)416内のノードSz406へのランダムなポインタが選択される。このような実施形態では、ノードSz406への選択された長距離ポインタは、id*及びkにより与えられる範囲内になければならない。例えば、ノードSz406の識別情報は、以下の条件422、すなわち、id*≦ノードSz406の識別情報≦kを満たさなければならない。
【0068】
次いで、選択されたノード(例えば、図4に示す例におけるノードSz406)が、キーkに関連するレコードについて問い合わされる。レコード424にヒット(k,i)がある場合(例えば、レコードがノードSz406のTab_CLOSEテーブル418の第iのインスタンスにある場合)、ノードSz406は、クエリを送信する責任を負うメモリプールノード、すなわち、図4に示す例におけるノードSy408にレコードを返してもよい。さらに、ノードSy408は、ノードSx404からノードSy408に送信されたクエリに少なくとも部分的に基づいてノードSx404にレコードを返してもよい。例えば、レコードは、レコードを見つけるために取られたのと同じ経路に沿うことに基づいてもよい。レコードにヒットがない場合、ゲット操作を継続し、次の反復を実行してもよい。
【0069】
様々な実施形態では、署名されたメッセージは、他のノードのメモリプールノードの間の信頼された接続を検出するために、DMP内のピア(例えば、ネットワーク内の単一ホップにより接続されたメモリノード)の間で交換される。例えば、ノードSy408及びノードSx404がピアであり(例えば、信頼された接続により結び付けられる)、また、ノードx1、ノードx2及びノードx3がノードSx404のピアである場合、ノードSy408はノードx1、ノードx2及びノードx3への直接の接続を要求する。さらに、セキュリティのレベルを高めるために、ノードx1、ノードx2及びノードx3は、それらの現在の接続を検証するために直接問い合わされてもよい。接続が確認された場合、ノードSy408は、ノードSx404のピアのうち1つ、例えば、ノードx2への新たな接続を作成することを決定してもよい。このような実施形態では、ノードx2が接続要求に肯定的に応答する場合にのみ、新たな接続が許可される。
【0070】
更に他の実施形態では、メモリプールノードは、特定のメモリプールノードの間の信頼された接続に異なる重みβx,iを割り当ててもよい。例えば、ノードSx404は、以下の制約に少なくとも部分的に基づいて、ピアノードx1、ノードx2及びノードx3に重みを割り当ててもよい。
【0071】
【数3】
様々な実施形態では、ピアにおけるより高い信頼性は、より高い重みに対応する。例えば、重みβx,z=2/3を有するノードSy408とβx,y=1/3を有するノードSz406との間では、ノードSy408はより信頼性が高いと考えられ、ノードSy408及びノードSz406は、同じメモリプールノード(例えば、ノードSx404)のピアである。さらに、重みは、ランダムウォークにおいて個々のホップを選択する確率を調整するために、或いは、上記のように、新たな推移接続を初期化するために、使用されてもよい。上記の例に戻ると、βx,y=1/3且つβx,z=2/3である場合、ノードSz406は、ノードSx404から到達するときにノードSy408の2倍の確率を有する。
【0072】
このような実施形態では、各メモリプールノードは、他のメモリプールノードに関連する重み情報を維持することに責任を負う。さらに、ノードSx404に対して、ノードSx404は、少なくとも重み、例えば、重みβx,yを値εだけ減少させ、他の重みのうち少なくとも1つをε/(mx-1)だけ増加させることにより、ピアの重み値を更新してもよい。例えば、ノードSy408が、キーがノードSy408のTab_CLOSEに入る場合に有効なキー・値のレコードを提供しない場合に、ノードSx404は、ピアに関連する重みを低減することを決定してもよい。
【0073】
図5は、実施形態によるDMPのメモリプールノードについてのルーティング情報を生成するための更新操作を実行するための例示的なプロセス500をフローチャート形式で示す。プロセス500の一部又は全部は、実行可能命令及び/又は他のデータで構成された1つ以上のコンピュータシステムの制御下で実行でき、1つ以上のプロセッサ上で併せて実行する実行可能命令として実装できる。実行可能命令及び/又は他のデータは、非一時的なコンピュータ読み取り可能記憶媒体(例えば、磁気媒体、光学媒体又はフラッシュ媒体に永続的に記憶されたコンピュータプログラム)に記憶できる。例示的なプロセス500は、図2に関して説明したDMP206の図2に関連して説明したメモリプールノード204のうち1つのようなメモリプールノードにより実行されてもよい。
【0074】
すなわち、図2に関して説明したメモリプールノード204のうち1つのようなメモリプールノードは、図5に関して説明する更新操作を実行するための例示的なプロセス500を実行してもよい。このようなメモリプールノードは、いずれかの適切な計算デバイス(例えば、データセンタ内のサーバ、クライアント計算デバイス、計算リソースサービスプロバイダの分散型システム内の複数の計算デバイス、又はいずれかの適切な電子クライアントデバイス)で構成されてもよい。さらに、プロセス500は、トリガーイベントに応じて(例えば、新たなメモリプールノードがDMPに参加すること又は既存のメモリプールノードの障害に応じて)、或いは、ルーティング情報を更新するための他の適切な理由のために、周期的に或いは非周期的に実行されてもよい。
【0075】
例示的なプロセス500は、例示的なプロセス500を実行するシステムが、上記のようにDHTプロトコルの更新操作を実行する一連の動作を含む。例示的なプロセス500のステップ502において、システムは、一式の信頼された接続及び一式のキー・値のレコードを受信する。一式の信頼された接続及び一式のキー・値のレコードは、更新操作へのインプットとして受信されてもよい。様々な実施形態では、この情報は省略されてもよく、或いは他の場合にはヌルでもよい(例えば、信頼された接続及び/又はメモリプールノードにより記憶されたキー・値のレコードがなくてもよい)。
【0076】
ステップ504において、システムは、一式のキー・値のレコードのためのランダムウォークを初期化する。上記のように、一式のランダムウォークが初期化されてもよく、これはキー空間内に分散した一式の距離を生成するために使用される。ランダムウォークの生成は、上記のように、更新操作の初期段階の一部でもよい。さらに、ランダムウォークは、ランダム又は擬似ランダムに生成されてもよい。ステップ506において、システムは、次いで、最初/次のルーティング反復iを選択する。上記のように、更新操作は、1からαまでの複数のルーティング反復にわたってルーティング情報を再帰的に生成してもよい。
【0077】
ステップ508において、システムは、Tab_DIST(Sx,i-1)から取得された識別情報に少なくとも部分的に基づいて、Tab_ID(Sx,i)の第iのレコードを生成する。Tab_ID(Sx,i-1)が存在しない実施形態(例えば、新たなメモリプールノードのように、Tab_DISTに1つのテーブルのみが存在する場合)では、ランダムなキーが、システム(例えば、メモリプールノード)へのTab_RNDテーブルの位置から選択される。
【0078】
ステップ510において、システムは、Tab_ID(Sy)テーブルからノードアドレス及び識別情報を含むTab_DIST(Sx,i)レコードを生成する。図3に関して上記に記載したように、ランダムウォークが実行され、アドレス情報が、ランダムウォークを実行した結果として連絡したメモリプールノードから取得される。次いで、メモリプールノードのこの識別情報及びアドレス情報は、Tab-DIST(Sx,i)テーブル内のレコードとして記憶される。
【0079】
ステップ512において、システムは、ランダムウォークを実行した結果として連絡したメモリプールノードのTab_RNDテーブルから取得された情報を含むTab_CLOSE(Sx,i)レコードを生成する。図3に関して上記に記載したように、メモリプールノードは、更新操作の特定の反復のときに、辞書式で識別情報に最も近いTab_RNDの(メモリプールノードに対して)ローカルレコードを送信する。
【0080】
ステップ514において、システムは、更なる反復が残っているか否かを決定する514。例えば、プロセス500は、設定された数の反復を有してもよい。他の例では、プロセス500を実行するシステムは、更新操作の初期化中にステップ504における反復の数を決定する。更に他の例では、システムは、特定の量のルーティング情報が取得されるまで、プロセス500を反復し続けてもよい。反復の数に到達していない場合、システムはステップ506に戻る。反復の数に到達した場合、システムはステップ516に進み、更新操作を完了する。
【0081】
図5に示す例示的なプロセス500において実行される動作のうち1つ以上は、並列を含めて、様々な順序及び組み合わせで実行されてもよい点に留意すべきである。さらに、図5に示す例示的なプロセス500において実行される動作のうち1つ以上は省略されてもよい。
【0082】
図6は、実施形態に従ってDMPネットワークのメモリプールノードのためのキーに関連するデータを取得するために、ゲット操作を実行するための例示的なプロセス600をフローチャート形式で示す。プロセス600の一部又は全部は、実行可能命令及び/又は他のデータで構成された1つ以上のコンピュータシステムの制御下で実行でき、1つ以上のプロセッサ上で併せて実行する実行可能命令として実装できる。実行可能命令及び/又は他のデータは、非一時的なコンピュータ読み取り可能記憶媒体(例えば、磁気媒体、光学媒体又はフラッシュ媒体に永続的に記憶されたコンピュータプログラム)に記憶できる。例示的なプロセス600は、図2に関して説明したDMP206のようなDMPの図2に関連して説明したメモリプールノード204のうち1つのようなメモリプールノードにより実行されてもよい。
【0083】
すなわち、図2に関して説明したメモリプールノード204のうち1つのようなメモリプールノードは、図6に関して説明するゲット操作を実行するための例示的なプロセス600を実行してもよい。このようなメモリプールノードは、いずれかの適切な計算デバイス(例えば、データセンタ内のサーバ、クライアント計算デバイス、計算リソースサービスプロバイダの分散型システム内の複数の計算デバイス、又はいずれかの適切な電子クライアントデバイス)で構成されてもよい。
【0084】
例示的なプロセス600は、例示的なプロセス600を実行するシステムが、上記のようにDHTプロトコルのゲット操作を実行する一連の動作を含む。例示的なプロセス600のステップ602において、システムは、キーkに関連する値の要求を受信する。要求は、DMPネットワークの外部のシステムから、或いはDMPネットワークのメンバーであるメモリプールノードから受信されてもよい。
【0085】
ステップ604において、システムは、キーkに関連する値がテーブルのレコード内にあるか否かを決定するために、テーブルTab_CLOSE内で検索操作を実行する。ステップ606において、レコードがテーブルにある場合、システムはキーに関連する値を返す。しかし、レコードがテーブルTab_CLOSEにない場合、システムはステップ608に進んでもよい。
【0086】
ステップ608において、システムは、Tab_DISTテーブルに含まれるキーkに最も近い識別情報(id*)を決定する。上記のように、距離は、図3に関して上記に説明した更新操作に少なくとも部分的に基づいて決定されてもよい。
【0087】
ステップ610において、システムは反復iを選択してもよい。反復は、ランダム又は擬似ランダムに選択されてもよい。さらに、反復は、上記のように、更新操作の反復中に生成された特定のテーブルを表してもよい。
【0088】
ステップ612において、システムは、zがid*とkとの間にあることに少なくとも部分的に基づいてテーブルTab_DIST(Sx,i)からランダムなポインタzを選択する。上記のように、ポインタは、DHTを実装するDMPネットワークの他のメモリプールノードへのアドレスでもよい。このように、システムは、ゲット操作の連続した反復の間に、特定のメモリプールのテーブルTab_CLOSE内の値を含むキーに関連する特定のメモリプールノードに向かって、キー空間内を移動してもよい。
【0089】
ステップ614において、システムは、ポインタzにおけるメモリプールノードに問い合わせる。様々な実施形態では、クエリは、キーkを含む。さらに、クエリは、要求側に関連するアドレスのような更なる情報を含んでもよい。様々な実施形態では、更なる情報は、キーkに関連しており且つ値を含むメモリプールノードが、値を要求側に関連するアドレスに直接送信することを可能にする。これは、情報がDMPネットワークを通じて同じネットワークパスに沿って返されるので、クエリを送信し且つ場合によっては更なるネットワークトラフィックを回避することに責任を負うメモリプールノードに応答を送信することとは対照的である。
【0090】
したがって、明細書及び図面は、限定的な意味ではなく例示的な意味に考えられるべきである。しかし、特許請求の範囲に記載された本発明のより広い真意及び範囲から逸脱することなく、様々な修正及び変更が行われてもよいことは明らかである。
【0091】
図6に示す例示的なプロセス600において実行される動作のうち1つ以上は、並列を含めて、様々な順序及び組み合わせで実行されてもよい点に留意すべきである。さらに、図6に示す例示的なプロセス600において実行される動作のうち1つ以上は省略されてもよい。様々な実施形態では、プロセス600が実行される反復の最大数が存在し、値が返されない場合、プロセス600は終了する。
【0092】
図7は、本発明の様々な実施形態が実装できる例示的な計算デバイス700を図の形式で示す。図7は、本開示の少なくとも1つの実施形態を実施するために使用され得る例示的な計算デバイス700の単純化された図を示す。様々な実施形態では、例示的な計算デバイス700は、ここに図示及び上記のシステム又は方法のいずれかを実装するために使用されてもよい。例えば、例示的な計算デバイス700は、データサーバ、ウェブサーバ、ポータブル計算デバイス、パーソナルコンピュータ又はいずれかの電子計算デバイスとして使用するように構成されてもよい。図7に示すように、例示的な計算デバイス700は、バスサブシステム704を介して複数の周辺サブシステムと通信するように構成されてもよく且つ動作可能に結合される1つ以上のプロセッサ702を含んでもよい。プロセッサ702は、ここに記載の方法を実装するために利用されてもよい。これらの周辺サブシステムは、メモリサブシステム708及びファイル記憶サブシステム710を含む記憶サブシステム706と、1つ以上のユーザインタフェース入力デバイス712と、1つ以上のユーザインタフェース出力デバイス714と、ネットワークインタフェースサブシステム716とを含んでもよい。このような記憶サブシステム706は、本開示に記載のブロックチェーントランザクション又は動作に関連する情報の一時的な記憶又は長期の記憶のために使用されてもよい。
【0093】
バスサブシステム704は、例示的な計算デバイス700の様々な構成要素及びサブシステムが意図したように互いに通信することを可能にするためのメカニズムを提供してもよい。バスサブシステム704は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実施形態は、複数のバスを利用してもよい。ネットワークインタフェースサブシステム716は、他の計算デバイス及びネットワークへのインタフェースを提供してもよい。ネットワークインタフェースサブシステム716は、他のシステムからデータを受信し、例示的な計算デバイス700から他のシステムにデータを送信するためのインタフェースとして機能してもよい。例えば、ネットワークインタフェースサブシステム716は、ユーザがここに記載のもののような無線ネットワーク又は他のネットワークにデバイスを接続することを可能にしてもよい。バスサブシステム704は、ネットワークインタフェースサブシステム716を介して、本開示に記載のブロックチェーントランザクション又は動作に関連するデータを、1つ以上のプロセッサ702及び/又はシステムの外部の他のエンティティに通信するために利用されてもよい。
【0094】
ユーザインタフェース入力デバイス712は、キーボードのような1つ以上のユーザ入力デバイスと、統合マウス、トラックボール、タッチパッド又はグラフィックスタブレットのようなポインティングデバイスと、スキャナと、バーコードスキャナと、ディスプレイに組み込まれたタッチスクリーンと、音声認識システムのようなオーディオ入力デバイスと、マイクロフォンと、他の種類の入力デバイスとを含んでもよい。一般的に、「入力デバイス」という用語の使用は、情報を計算デバイス700に入力するための全ての可能な種類のデバイス及びメカニズムを含むことを意図している。1つ以上のユーザインタフェース出力デバイス714は、ディスプレイサブシステム、プリンタ、又はオーディオ出力デバイスのような非視覚的ディスプレイを含んでもよい。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)のようなフラットパネルデバイス、発光ダイオード(LED)ディスプレイ、又は投影若しくは他のディスプレイデバイスでもよい。一般的に、「出力デバイス」という用語の使用は、計算デバイス700から情報を出力するための全ての可能な種類のデバイス及びメカニズムを含むことを意図している。1つ以上の出力デバイス714は、例えば、ユーザ相互作用が適切になり得る場合、ここに記載のプロセス及びその変形を実行するアプリケーションとのユーザ相互作用を容易にするために、ユーザインタフェースを提示するために使用されてもよい。
【0095】
記憶サブシステム706は、本開示の少なくとも1つの実施形態の機能を提供し得る基本プログラミング及びデータ構造を記憶するためのコンピュータ読み取り可能記憶媒体を提供してもよい。1つ以上のプロセッサにより実行されたとき、本開示の1つ以上の実施形態の機能を提供し得るアプリケーション(プログラム、コードモジュール、命令)は、記憶サブシステム706に記憶されてもよい。これらのアプリケーションモジュール又は命令は、1つ以上のプロセッサ702により実行されてもよい。記憶サブシステム706は、本開示に従って使用されるデータを記憶するためのリポジトリを更に提供してもよい。記憶サブシステム706は、メモリサブシステム708及びファイル/ディスク記憶サブシステム710を含んでもよい。
【0096】
メモリサブシステム708は、プログラム実行中に命令及びデータを記憶するための主ランダムアクセスメモリ(RAM)718と、固定の命令が記憶され得る読み取り専用メモリ(ROM)720とを含む複数のメモリを含んでもよい。ファイル記憶サブシステム710は、プログラムファイル及びデータファイルのための非一時的な永続的(不揮発性)ストレージを提供してもよく、ハードディスクドライブ、関連する取り外し可能媒体と共にフロッピーディスクドライブ、コンパクトディスク読み取り専用メモリ(CD-ROM)ドライブ、光学ドライブ、取り外し可能媒体カートリッジ及び他の同様の記憶媒体を含んでもよい。
【0097】
例示的な計算デバイス700は、少なくとも1つのローカルクロック724を含んでもよい。ローカルクロック724は、特定の開始日から発生した時刻(tick)の数を表すカウンタでもよく、例示的な計算デバイス700内に一体的に位置してもよい。ローカルクロック724は、特定のクロックパルスにおいて、例示的な計算デバイス700のためのプロセッサ及びそれに含まれるサブシステムの全ての中でデータ転送を同期させるために使用されてもよく、例示的な計算デバイス700とデータセンタ内の他のシステムとの間の同期動作を調整するために使用されてもよい。一実施形態では、ローカルクロック724は原子クロックである。他の実施形態では、ローカルクロックは、プログラム可能な間隔のタイマである。
【0098】
例示的な計算デバイス700は、ポータブルコンピュータデバイス、タブレットコンピュータ、ワークステーション、又はここに記載のいずれかの他のデバイスを含む、様々な種類のものでもよい。さらに、例示的な計算デバイス700は、1つ以上のポート726(例えば、USB、ヘッドフォンジャック、ライトニングコネクタ等)を通じて例示的な計算デバイス700に接続され得る他のデバイスを含んでもよい。例示的な計算デバイス700に接続され得るデバイスは、光ファイバコネクタを受け入れるように構成された複数のポートを含んでもよい。したがって、例示的な計算デバイス700に接続され得るデバイスは、光信号を電気信号に変換するように構成されてもよく、電気信号は、処理のために当該デバイスを例示的な計算デバイス700に接続するポートを通じて送信されてもよい。コンピュータ及びネットワークの絶えず変化する性質のため、図7に示す例示的な計算デバイス700の説明は、デバイスの実施形態を説明する目的のための特定の例としてのみ意図されている。図7に示すシステムよりも多くの構成要素又は少ない構成要素を有する多くの他の構成が可能である。
【0099】
本発明の1つ以上の実施形態は、改善したブロックチェーン実装方法及びシステムを提供するものとして記載され得る。ブロックチェーンネットワークを介して、より高速な読み取り及び書き込み操作を可能にすることにより、改善した動作速度を提供し得る。また、例えば、分散型メモリプール内でルーティング攻撃及びストレージ攻撃のような攻撃又は悪意のある活動を防止するという点で、ブロックチェーン実装システムのための改善したセキュリティも提供し得る。したがって、本発明は、より安全なブロックチェーン解決策を提供し得る。また、分散型メモリプールに記憶されたブロックチェーントランザクションの有効性のネットワーク全体のコンセンサスを確保するためのメカニズムを提供し、したがって、ネットワークの全体性能、信頼性及びセキュリティを向上させ得る。また、改善したアーキテクチャを提供し、ブロックチェーンシステムのための改善した記憶リソース及び能力も提供する。本発明の他の利点も提供され得る。
【0100】
開示の実施形態を説明する文脈において、別段の規定がない限り、「命令(instructions)」が通常では支援なしに実行しない動作(例えば、データの送信、計算等)を実行する実行可能命令(コード、アプリケーション、エージェント等とも呼ばれる)に関する表現の使用は、命令が機械により実行されることを意味し、それにより、機械に指定された動作を実行させる点に留意すべきである。
【0101】
上記の実施形態は、本発明を限定するものではなく例示するものであり、当業者は、添付の特許請求の範囲により定義される本発明の範囲から逸脱することなく、多くの代替実施形態を設計できる点に留意すべきである。特許請求の範囲において、括弧内に付したいずれかの参照符号は、特許請求の範囲を限定するものと解釈されるべきではない。「含む(comprising)」及び「含む(comprises)」等の用語は、全体としていずれかの請求項又は明細書に列挙されたもの以外の要素又はステップの存在を除外しない。本明細書において、「含む(comprises)」とは、「含む(includes)又はからなる(consists of)」を意味し、「含む(comprising)」とは、「含む(comprising)又はからなる(consisting of)」を意味する。要素の単数形の参照は、このような要素の複数形の参照を除外するものではなく、逆も同様である。本発明は、いくつかの別個の要素を含むハードウェアにより、且つ、適切にプログラムされたコンピュータにより実装されてもよい。いくつかの手段を列挙するデバイスの請求項において、これらの手段のいくつかは、1つの同じハードウェアアイテムにより具体化されてもよい。特定の手段が相互に異なる従属項に記載されているという単なる事実は、これらの手段の組み合わせが有利に利用できないことを示すものではない。
図1
図2
図3
図4
図5
図6
図7