(57)【要約】ブロックチェーンプロトコルに適合するブロックチェーンを実装するノードのネットワーク内のあるノードでブロックを妥当性確認する、コンピュータにより実施される方法。これはビットコインプロトコル又は代替物であってよい。方法は、ブロックに含まれる複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定し、決定に基づいて、複数のトランザクションの中の各トランザクションを２つ以上の並列プロセッサのうちの１つに割り当て、並行して、２つ以上の並列プロセッサによって、複数のトランザクションの中のトランザクションがトランザクションレベルの妥当性確認基準に従うことを確認することを含む。ノードはまた、ブロックがブロックレベルの妥当性確認基準を満足することを決定する。トランザクションがトランザクションレベルの妥当性確認基準に従い且つブロックがブロックレベルの妥当性確認基準に従う場合には、ブロックは妥当と見なされ、ノードはブロックをネットワーク内の１つ以上のピアノードへ転送する。
2020518907.tif 000002
【特許請求の範囲】
【請求項１】
ブロックチェーンプロトコルに適合するブロックチェーンを実装するノードのネットワーク内で、複数のトランザクションを含むブロックを妥当性確認する、コンピュータにより実施される方法であって、
ブロックレベルの妥当性確認基準に前記ブロックが従うことを決定することと、
前記複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定し、該決定に基づいて、
前記複数のトランザクションの中の各トランザクションを２つ以上の並列プロセッサのうちの１つに割り当て、
並行して、前記２つ以上の並列プロセッサによって、前記複数のトランザクションの中の前記トランザクションがトランザクションレベルの妥当性確認基準に従うことを検証することと、
前記トランザクションがトランザクションレベルの妥当性確認基準に従い且つ前記ブロックがブロックレベルの妥当性確認基準に従う場合には、前記ブロックを前記ネットワーク内の１つ以上のピアノードへ転送することと
を有する方法。
【請求項２】
前記トランザクションレベルの妥当性確認基準は、前記ブロックチェーンプロトコルによって規定されるトランザクション特性を有し、
各トランザクションは、妥当と見なされる前記トランザクション特性を持っている必要がある、
請求項１に記載の方法。
【請求項３】
前記ブロックレベルの妥当性確認基準は、前記ブロックチェーンプロトコルによって規定されるブロック特性を有し、
各ブロックは、妥当と見なされる前記ブロック特性を持っている必要がある、
請求項１又は２に記載の方法。
【請求項４】
前記複数のトランザクションの中の各トランザクションを２つ以上の並列プロセッサのうちの１つに割り当てることは、ランダム割り当てスキーム又は決定論的割り当てスキームを用いて前記トランザクションを割り当てることを有する、
請求項１乃至３のうちいずれか一項に記載の方法。
【請求項５】
前記トランザクションを割り当てることは、先着順アルゴリズムを用いて前記２つ以上の並列プロセッサの間で前記トランザクションを割り当てることを有する、
請求項４に記載の方法。
【請求項６】
前記複数のトランザクションの中の各トランザクションを２つ以上の並列プロセッサのうちの１つに割り当てることは、各トランザクションに関連する処理費用を決定し、該処理費用を前記２つ以上の並列プロセッサの間で負荷分散するように前記トランザクションを割り当てることを有する、
請求項１乃至５のうちいずれか一項に記載の方法。
【請求項７】
各トランザクションのための前記処理費用は、当該トランザクションにおけるスクリプト操作の数に基づき、任意に、各トランザクションのための前記処理費用は、スクリプト操作の加重和に更に基づき、各スクリプト操作は、その計算複雑性に基づいた関連した重みを有している、
請求項６に記載の方法。
【請求項８】
前記複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定することは、各未使用トランザクション出力が前記複数のトランザクションにおける入力として一度しか現れないことを決定することを有する、
請求項１乃至７のうちいずれか一項に記載の方法。
【請求項９】
ブロックチェーンを実装するノードのネットワーク内の計算装置であって、ブロックチェーンプロトコルに適合するブロックを妥当性確認するよう構成され、該ブロックが複数のトランザクションを含む、前記計算装置において、
ブロックチェーンを実装するノードのネットワークへのネットワーク接続性を提供し、ブロックチェーンプロトコルに適合する、複数のトランザクションを含むブロックを受け取るネットワークインターフェイスと、
ブロックレベルの妥当性確認基準に前記ブロックが従うことを決定するブロックレベル妥当性確認モジュールと、
前記複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定する入力一意性確認モジュールと、
前記複数のトランザクションの中のトランザクションがトランザクションレベルの妥当性確認基準に従うことを並行して検証する２つ以上の並列プロセッサと、
前記複数のトランザクションの中の前記トランザクションを検証のために前記２つ以上の並列プロセッサの間で割り当てるトランザクション割り当てユニットと
を有し、
前記トランザクションがトランザクションレベルの妥当性確認基準に従い且つ前記ブロックがブロックレベルの妥当性確認基準に従う場合には、前記ネットワークインターフェイスは、前記ブロックを前記ネットワーク内の１つ以上のピアノードへ転送する、
計算装置。
【請求項１０】
前記トランザクションレベルの妥当性確認基準は、前記ブロックチェーンプロトコルによって規定されるトランザクション特性を有し、
各トランザクションは、妥当と見なされる前記トランザクション特性を持っている必要がある、
請求項９に記載の計算装置。
【請求項１１】
前記ブロックレベルの妥当性確認基準は、前記ブロックチェーンプロトコルによって規定されるブロック特性を有し、
各ブロックは、妥当と見なされる前記ブロック特性を持っている必要がある、
請求項９又は１０に記載の計算装置。
【請求項１２】
前記トランザクション割り当てユニットは、ランダム割り当てスキーム又は決定論的割り当てスキームを用いて前記トランザクションを前記２つ以上の並列プロセッサの間で割り当てる
請求項９乃至１１のうちいずれか一項に記載の計算装置。
【請求項１３】
前記トランザクションを割り当てることは、先着順アルゴリズムを用いて前記トランザクションを割り当てることを有する、
請求項１２に記載の計算装置。
【請求項１４】
前記トランザクション割り当てユニットは、各トランザクションに関連する処理費用を決定し、該処理費用を前記２つ以上の並列プロセッサの間で負荷分散するように前記トランザクションを割り当てることによって、前記トランザクションを割り当てる、
請求項９乃至１３のうちいずれか一項に記載の計算装置。
【請求項１５】
各トランザクションのための前記処理費用は、当該トランザクションにおけるスクリプト操作の数に基づき、任意に、各トランザクションのための前記処理費用は、スクリプト操作の加重和に更に基づき、各スクリプト操作は、その計算複雑性に基づいた関連した重みを有している、
請求項１４に記載の計算装置。
【請求項１６】
前記入力一意性確認モジュールは、各未使用トランザクション出力が前記複数のトランザクションにおける入力として一度しか現れないことを決定することによって、前記複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定する、
請求項９乃至１５のうちいずれか一項に記載の計算装置。
【請求項１７】
ブロックチェーンを実装するノードのネットワーク内でプロセッサ実行可能命令を記憶している非一時的なプロセッサ可読媒体であって、
前記命令は、ブロックチェーンプロトコルに適合するブロックを妥当性確認し、該ブロックが複数のトランザクションを含み、
前記命令は、２つ以上のプロセッサに、請求項１乃至８のうちいずれか一項に記載の方法を実行させる、
前記非一時的なプロセッサ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ブロックチェーントランザクションに、より具体的には、ブロックチェーンネットワークにおいてブロックの迅速な妥当性確認及び伝播を可能にする方法及びデバイスに関する。
【背景技術】
【０００２】
本明細書中で、我々は、あらゆる形式の電子的な、コンピュータに基づく分散台帳（distributed  ledgers）を含むよう語「ブロックチェーン」を使用する。それらは、ブロックチェーン及びトランザクションチェーン技術、許可（permissioned）及び無許可（un-permissioned）台帳、共有台帳、並びにこれらの変形を含むが限られない。ブロックチェーン技術の最も広く知られた応用は、他のブロックチェーン実施が提案及び開発されているとはいえ、ビットコイン台帳である。ビットコインが、便宜上、説明のために本明細書で言及され得るが、本発明は、ビットコインブロックチェーンとともに使用することに限られず、代替のブロックチェーン実施及びプロトコルが本発明の適用範囲内にあることが留意されるべきである。
【０００３】
ブロックチェーンは、合意に基づく電子台帳であり、これは、トランザクションから成るブロックで構成された、コンピュータに基づく非中央集権型の分散システムとして実装される。各トランザクション（ＴＸ）は、ブロックチェーンシステム内の参加者間のデジタル資産の制御の移行を符号化するデータ構造であり、少なくとも１つの入力及び少なくとも１つの出力を含む。ブロックチェーンにその始まり以来書き込まれてきた全てのトランザクションの永久的且つ不変な記録を構成するようブロックどうしが連鎖するように、各ブロックは前のブロックのハッシュを含む。トランザクションは、それらの入力及び出力に埋め込まれたスクリプトとして知られている小さいプログラムを含む。スクリプトは、如何にして誰によってトランザクションの出力がアクセスされ得るかを特定する。ビットコインプラットフォームで、それらのスクリプトは、スタックに基づくスクリプト言語を用いて書かれている。
【０００４】
新しいトランザクションを受け取るネットワークノードは、直ちに、そのトランザクションをネットワーク内の他のノードへ押し出そうと試みる。新しいトランザクションを他のノードへ送る前に、それは“妥当性確認”（validated）される。つまり、それは、トランザクションが適用可能なプロトコルに従って適切なトランザクションのための基本要件を満たすことを確かにするために、基準の組に対してチェックされる。
【０００５】
トランザクションがブロックチェーンに書き込まれるために、それはノード（“マイナー”（miner））によってブロックに組み込まれる。マイナーは、トランザクションを収集し、それらをブロックへと形成するよう設計される。マイナーは、次いで、ブロックに対して“プルーフ・オブ・ワーク”（proof  of  work）を完了しようと試みる。複数のマイナーは、ブロックチェーンネットワークにわたって競争して、トランザクションのブロックをアセンブルしそのブロックについての関連するプルーフ・オブ・ワークを完了する最初のものであろうとする。成功したマイナーは、その承認されたブロックをブロックチェーンに加え、ブロックは、ネットワークを通じて伝播される。それにより、ブロックチェーンのコピーを保持する他のノードは、自身の記録を更新することができる。ブロックを受け取るそれらのノードはまた、そのブロックを“妥当性確認”し、それを確かにするその中の全てのトランザクションは、プロトコルの方式要件に従う。例えば、新しいブロックを受け取るノードは、ブロックデータ構造が適用可能なシンタックス規則に従うこと、ブロックが年齢要件に従うタイムスタンプを有していること、ブロックが所定のサイズ制限内にあること、及び他のそのような基準を確かめるようチェックし得る。それはまた、ブロック内のあらゆるトランザクションが妥当であることも確かめる。ビットコインプロトコルに適用可能な基準の例は、ビットコインコア（Bitcoin  Core）クライアント関数CheckBlock及びCheckBlockHeaderにおいて定義される。
【０００６】
トランザクションを妥当性確認するための基準は冗長であることがあり得る。例えば、ビットコインプロトコルで適用可能な条件は、ビットコインリファレンス（Bitcoin  reference）クライアントにおける関数AcceptToMemoryPool、CheckTransaction及びCheckInputsで詳細に見られ得る。
【０００７】
ブロックチェーン実施に付随した潜在的な障害の１つは、ブロック内の全てのトランザクションを妥当性確認することを含め、ノードがブロック妥当性確認を完了するのにかかる時間である。その遅延は、高速な大容量処理のためのブロックチェーンの使用を阻害し邪魔をすることがある。更に、プルーフ・オブ・ワーク（Proof-of-Work，ＰｏＷ）ネットワーク内のマイナーが、それ自体のプルーフ・オブ・ワークを終了する前に、ブロックが完成されたとの通知を受けるとき、そのマイナーは自身の活動を放棄し、次のブロックを構築しようと試みることを始める。従って、遅い妥当性確認は、マイナーがそれらの活動を不必要に続けることを意味する。マイニングは、プロセッサ及びエネルギ集約的な活動であるから、無駄なマイニング労力は、リソースに関して高くつく。
【０００８】
このように、ブロックチェーントランザクションの妥当性確認に付随した技術的問題が存在する。それらは、ブロックを妥当性確認する工程に関わる速度、効率及びリソース要件に関する問題を含む。ブロックの妥当性確認及びその後の伝播は、ネットワーク内のノードによってエネルギ、時間及び労力を必要とし、工程に対する改善は、ネットワーク性能及び速度に関してだけでなく、必要とされるリソースの量に関しても、大いに有益である。ビットコインネットワーク内のブロックのより速い伝播を可能にする改善された方法及びデバイスを提供することが望ましい。
【発明の概要】
【０００９】
従って、本発明によれば、添付の特許請求の範囲で定義される方法及びデバイスが提供される。
【００１０】
本願は、改善されたデバイス及び方法を提供する。方法は、ブロックを妥当性確認する方法であってよい。ブロックは、ブロックチェーントランザクションのブロックであって良い。本発明は、ブロックが妥当であるかそれとも妥当でないかに関するより速い決定を可能にすることができる。より速い妥当性確認は、ブロックがより速くシステム内を伝えられるということで、無駄なリソースの低減をもたらし得る。また、最終的にはコンフリクトに終わり、先立つブロックに取って代わられる競合ブロックを妥当性確認し伝播することに関して無駄にされる時間及びリソースは、少なくなる。本発明は、トランザクションレベルの妥当性確認動作の一部の並列化を可能にすることができる。ブロック内の全てのトランザクションにわたる一意のＵＴＸＯの承認は、並列プロセッサの間の費用のかかる同期化を回避するために、並列化されなくてもよい。
【００１１】
追加的に、又は代替的に、本願は、コンピュータにより実施される方法について記載し得る。それは、妥当性確認方法として記載され得る。それは、ブロックチェーンを実装するノードのネットワーク内でブロックを妥当性確認する方法を有してよい。ブロックチェーンは、ブロックチェーンプロトコルに従うか、又はそれに関連して動作してよい。ブロックは、複数の（ブロックチェーン）トランザクションを有してよい。方法は、ブロックがブロックレベルの妥当性確認基準に従うことを決定することと、複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定し、該決定に基づいて、複数のトランザクションの中の各トランザクションを２つ以上の並列プロセッサのうちの１つに割り当て、並行して、２つ以上の並列プロセッサによって、複数のトランザクションの中のトランザクションがトランザクションレベルの妥当性確認基準に従うことを検証することとを含んでよい。
【００１２】
方法は更に、トランザクションがトランザクションレベルの妥当性確認基準に従い且つブロックがブロックレベルの妥当性確認基準に従う場合に、ブロックをネットワーク内の１つ以上のピアノードへ転送することを含んでよい。
【００１３】
いくつかの実施において、トランザクションレベルの妥当性確認基準は、ブロックチェーンプロトコルによって規定されるトランザクション特性を含み、各トランザクションは、妥当と見なされるトランザクション特性を持っている必要がある。同様に、いくつかの実施において、ブロックレベルの妥当性確認基準は、ブロックチェーンプロトコルによって規定されるブロック特性であり、各ブロックは、妥当と見なされるブロック特性を持っている必要がある。
【００１４】
いくつかの実施において、複数のトランザクションの中の各トランザクションを２つ以上の並列プロセッサのうちの１つに割り当てることは、ランダム割り当てスキーム又は決定論的割り当てスキームを用いてトランザクションを割り当てることを含む。一例において、スキームは、先着順（first-come  first-serve）アルゴリズムを用いて２つ以上の並列プロセッサの間でトランザクションを割り当てることを含む。いくつかの例となる実施では、割り当てることは、各トランザクションに関連する処理費用を決定し、該処理費用を２つ以上の並列プロセッサの間で負荷分散するようにトランザクションを割り当てることを含む。各トランザクションのための処理費用は、そのトランザクションにおけるスクリプト操作の数に基づいてよい。各トランザクションのための処理費用は、スクリプト操作の加重和に更に基づいてよく、各スクリプト操作は、その計算複雑性に基づいた関連した重みを有している。
【００１５】
いくつかの実施において、方法は、各未使用トランザクション出力が複数のトランザクションにおける入力として一度しか現れないことを決定することによって、複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定することを含んでよい。
【００１６】
追加的に、又は代替的に、本願は、ブロックチェーンを実装するノードのネットワーク内の計算装置であって、複数のトランザクションを含む、ブロックチェーンプロトコルに従うブロックを妥当性確認するよう構成された前記計算装置について記載する。計算装置は、ブロックチェーンを実装するノードのネットワークへのネットワーク接続性を提供し、ブロックチェーンプロトコルに適合する、複数のトランザクションを含むブロックを受け取るネットワークインターフェイスと、ブロックがブロックレベルの妥当性確認基準に従うことを決定するブロックレベル妥当性確認モジュールと、複数のトランザクションの夫々における入力として参照される各未使用トランザクション出力が一意であることを逐次決定する入力一意性確認モジュールと、複数のトランザクションの中のトランザクションがトランザクションレベルの妥当性確認基準に従うことを並行して検証する２つ以上の並列プロセッサと、複数のトランザクションの中のトランザクションを検証のために２つ以上の並列プロセッサの間で割り当てるトランザクション割り当てユニットとを含んでよい。トランザクションがトランザクションレベルの妥当性確認基準に従い且つブロックがブロックレベルの妥当性確認基準に従う場合に、ネットワークインターフェイスは、ブロックをネットワーク内の１つ以上のピアノードへ転送する。
【００１７】
追加的に、又は代替的に、本願は、実行される場合に、１つ以上のプロセッサに、本明細書で記載されるプロセス及び／又は動作の１つ以上を実行させるプロセッサ実行可能命令を記憶している非一時的なプロセッサ可読媒体について記載し得る。
【００１８】
本発明の１つの態様又は実施形態に関して記載される如何なる特徴も、１つ以上の他の態様／実施形態に関しても使用され得る。本発明のこれら及び他の態様は、本明細書中で記載される実施形態から明らかであり、それを参照して説明される。本発明の実施形態が、これより、単なる一例として、添付の図面を参照して記載される。
【図面の簡単な説明】
【００１９】
【図１】ノードのブロックチェーンネットワークの例を表す。
【図２】ノードにおけるブロック妥当性確認プロセスの例を図式的に表す。
【図３】ブロック妥当性確認方法の一例をフローチャート形式で示す。
【図４】ブロックチェーンネットワークにおいてブロックを妥当性確認するノードのブロック図を示す。
【発明を実施するための形態】
【００２０】
本願において、語「及び／又は」（and/or）は、必ずしも追加の要素を除外せずに、挙げられている要素のみ、任意のサブコンビネーション、又は全ての要素、のうちのいずれか１つを含む、挙げられている要素の全ての起こり得る組み合わせ及びサブコンビネーションをカバーするよう意図される。
【００２１】
本願において、「〜又は〜の少なくとも１つ」（at  least  one  of  …  or  …）との語句は、必ずしも追加の要素を除外することなしに、且つ、必ずしも全ての要素を必要とせずに、挙げられている要素のみ、任意のサブコンビネーション、又は全ての要素、のうちのいずれか１つを含む、挙げられている要素のうちの任意の１つ以上をカバーするよう意図される。
【００２２】
最初に図１を参照する。図１は、ブロックチェーンに関連するブロックチェーンネットワーク１００の例をブロック図形式で表す。ブロックチェーンネットワークは、招待なしで又は他のメンバーからの同意なしで誰もが参加することができるピア・ツー・ピアの非会員制ネットワークである。ブロックチェーンネットワーク１００が動作するブロックチェーンプロトコルのインスタンスを実行する分散した電子デバイスが、ブロックチェーンネットワーク１００に参加し得る。そのような分散した電子デバイスは、ノード１０２と呼ばれ得る。ブロックチェーンプロトコルは、例えば、ビットコインプロトコル又は他の暗号資産であってよい。
【００２３】
ブロックチェーンプロトコルを実行し、ブロックチェーンネットワーク１００のノード１０２を形成する電子デバイスは、例えば、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータなどのコンピュータ、サーバ、スマートフォンなどのモバイル機器、スマートウォッチなどの装着型コンピュータ、又は他の電子デバイスを含む様々なタイプであってよい。
【００２４】
ブロックチェーンネットワーク１００のノード１０２は、有線及び無線通信技術を含み得る適切な通信技術を用いて互いへ結合される。多くの場合に、ブロックチェーンネットワーク１００は、少なくとも部分的にインターネット上で実装され、個々のノード１０２の一部は、地理的に散開した位置に配置されてよい。
【００２５】
ノード１０２は、ブロックチェーン上の全てのトランザクションの大域的な台帳（global  ledger）を保持する。大域的な台帳は分散台帳（distributed  ledger）であり、各ノード１０２は、大域的な台帳の完全なコピー又は部分的なコピーを保管し得る。大域的な台帳に影響を与えるノード１０２によるトランザクションは、大域的な台帳の妥当性が保たれるように、他のノード１０２によって検証される。ビットコインプロトコルを使用するもののような、ブロックチェーンネットワークを実装し動作させることの詳細は、当業者によって十分に理解される。
【００２６】
各トランザクションは、通常は、１つ以上の入力及び１つ以上の出力を有する。入力及び出力に埋め込まれたスクリプトは、如何にして誰によってトランザクションの出力がアクセスされ得るかを特定する。トランザクションの出力は、トランザクションの結果として値が移される先のアドレスであることができる。その値は、次いで、未使用トランザクション出力としてその出力アドレスと関連付けられる。その後のトランザクションは、次いで、そのアドレスを、その値を使用又は分散するために、入力として参照してよい。
【００２７】
上述されたように、マイニングノード（“マイナー”）は、ブロックチェーンにおいて次のブロックを作る競争に参加する。ブロックをアセンブルするよう、マイナーは、未承認のトランザクションのプール（“メモリプール”（mempool））からトランザクションの組としてブロックを構築する。マイナーは次いで、自身がアセンブルしたブロックに対してプルーフ・オブ・ワークを完了しようと試みる。マイナーが、いずれかの他のマイナーがブロックを生成しそのプルーフ・オブ・ワークを完了することに成功したとの通知を受ける前に、何とかプルーフ・オブ・ワークを完了する場合には、次いで、マイナーは、ブロックをネットワーク上でピアノードへ送ることによってそのブロックを伝播する。それらのノードは、ブロックを妥当性確認し、次いで、それを更に、ネットワーク上で他のノードへ送る。マイナーが、自身のプルーフ・オブ・ワークを終了する前に、他のブロックが完成されたとの通知を受ける場合には、次いで、マイナーは、その活動を放棄し、次のブロックを構築しようと試みることを開始する。
【００２８】
このように、ブロックの迅速な伝播は、マイナー及び妥当性確認するノードのために無駄な労力を回避するのを助ける。より速い妥当性確認、よってブロックの伝播を可能にする解決法を提供することによって、本発明は、向上したネットワーク性能を提供する。それは、必要とされる計算時間及び労力の量とともに、ネットワークによって必要とされるエネルギの量を減らす。それは、リソース及び時間に関してより効率的であるネットワークを提供する。それは、最終的に、改善された（ブロックチェーン）ネットワークを提供する。
【００２９】
ビットコインネットワークのようなブロックチェーンの現在の実施では、ブロックを受け取る各ノードは、ブロックを他のノードへ送る前に、最初にブロックを妥当性確認する。ブロックを妥当性確認するのにかかる時間は、ネットワークを通るブロックの伝播を遅くする。既存のプロトコルの展開を含むブロックチェーンのいくつかの実施は、ネットワーク内の各ノードよりむしろノードの一部のみによるブロック妥当性確認を提供し得る点に留意されたい。しかし、ほとんどのノードでのブロック妥当性確認は、妥当でないブロックがネットワーク内を伝播することを防ぐための任意のブロックチェーン実施の特徴であることが依然としてあり得る。
【００３０】
ブロックを妥当性確認することは、適用可能なブロックチェーンプロトコルによってセットされた所定の基準をブロックが満足することを確かめることを含む。ビットコインプロトコルに適用可能な基準の例は、ビットコインコアクライアント関数CheckBlock及びCheckBlockHeaderにおいて定義される。ブロック自体が所定の基準に従うことを確かめることに加えて、ブロック内の各トランザクションが、トランザクションレベルの基準に従うことを評価されてもよい。一例として、ビットコインプロトコルに適用可能なトランザクションレベルの基準は、AcceptToMemoryPool、CheckTransaction及びCheckInputsで詳細に見られ得る。
【００３１】
ブロックレベルの基準の具体例は、ビットコインプロトコルに基づき、次を含む：
・ブロックデータ構造が構文的に妥当である。  
・ブロックヘッダハッシュが（プルーフ・オブ・ワークを実行する）ターゲットディフィカルティに満たない。  
・ブロックタイムスタンプが（時間エラーを許容する）２時間未来より小さい。  
・ブロックサイズが許容限界内にある。  
・最初のトランザクション（及び最初のみ）がコインベース生成（coinbase  generation）トランザクションである。  
・ブロック内の全てのトランザクションが妥当である。
【００３２】
トランザクションレベルの基準の具体例は、ビットコインプロトコルに基づき、次を含む：
・トランザクションのシンタックス及びデータ構造が正確でなければならない。  
・入力及び出力のいずれのリストも空である。  
・各出力値ｘ及び全ての出力の合計が０＜ｘ＜２１・１０６の範囲内になければならない。  
・入力のどれもｎｕｌｌハッシュを有さない。  
・nLockTimeがINT_MAX以下である。  
・バイト単位のトランザクションサイズが最小値以上且つ最大値未満である。  
・署名動作の回数が署名動作限界に満たない。  
・アンロックスクリプト（unlocking  script）scriptSigがスタックに数字をプッシュすることがしかできず、ロックスクリプト（locking  script）scriptPubkeyが標準（Standard）形式である。  
・各入力について、参照される出力がプール内のいずれかの他のトランザクションに存在する場合には、トランザクションは拒絶されなければならない。  
・各入力について、参照される出力トランザクションがコインベース出力である場合には、それは少なくともCOINBASE_MATURITY(100)承認（confirmation）を有する必要がある。  
・各入力について、参照される出力が存在すべきであり、既に使用されていることはあり得ない。  
・入力値を得るための参照される出力トランザクションを使用して、各入力値及び和が値ｘの許容範囲、すなわち、０＜ｘ＜２１・１０６にあることをチェックする。  
・プール内又はメインブランチにおけるブロック内に一致するトランザクションが存在しなければならない。  
・入力値の和が出力値の和以上でなければならない。  
・トランザクション手数料が空のブロックに入るのに十分でなければならない。  
・各入力についてのアンロックスクリプトが対応する出力に対してロックスクリプトを妥当性確認しなければならない。
【００３３】
所定の基準は、異なるプロトコルでは異なることがあり、所与のプロトコルについては、そのプロトコルに対して変更が行われる場合に、時間とともに変化する可能性があるということで、これらの例となる基準は実例であり、全ての実施形態にとって十分又は必要と解釈されるべきではない。一般に、トランザクションレベルの妥当性確認基準は、適用可能なブロックチェーンプロトコルの下でトランザクションが妥当と見なされるべきである特性を規定したものである。同様に、ブロックレベルの妥当性確認基準は、適用可能なブロックチェーンプロトコルの下でブロックが妥当と見なされるべきである特性を規定したものである。
【００３４】
本願によれば、ネットワークにおいてブロックのより速い伝播を容易にするために、ブロック妥当性確認を加速させる方法及びデバイスが、記載される。
【００３５】
一態様において、本願は、個々のトランザクションのトランザクションレベルの妥当性確認を並行して実行することによってブロックを妥当性確認するよう構造化されたノードについて記載する。しかし、トランザクションレベルの特定の基準は、並行して評価されるべきではない。特に、ＵＴＸＯの一意性は、逐次的に評価されるべきである。従って、ノードは、トランザクションレベルの残りの基準の妥当性確認のために２つの並列プロセッサの組の間でトランザクションを割り当てることより前に、トランザクションの参照される入力（ＵＴＸＯ）の一意性を確認するよう構造化又は配置される。
【００３６】
「プロセッサ」との語は、本明細書中で並列プロセッサの記載に関連して使用される場合に、物理的に相異なるマイクロプロセッサを必ずしも意味せず、プロセッサ機能を独立して且つ並行して実行することができる並列処理リソースを可能にする如何なるハードウェア又はソフトウェア実施も含んでよい。並列プロセッサは、複数のコアを有している１つのプロセッサを含んでよい。いくつかの事例で、並列プロセッサは、複数の別個の処理ユニットを含んでよい。並列プロセッサは、物理メモリを共有してもしなくてもよい。各並列プロセッサは、どんなふうに実施されても、妥当でないトランザクションを識別することに応答して信号を出力することなどのシグナリングのためのソフトウェア又はハードウェアメカニズムを有している。並列プロセッサの実施はまた、割り当てられたトランザクションデータを局所処理のために各々のプロセッサへ転送するよう、ソフトウェア及び／又はハードウェアにおいて、必要なデータ転送メカニズムを提供することを含む。
【００３７】
これより図２を参照すると、図２は、ブロックチェーンネットワークのノードにおけるブロック妥当性確認プロセス２００の簡単な例を図式的に示す。プロセス２００は、ブロックレベルの妥当性確認段階２０２を含み、段階２０２では、入来する新しいブロックがブロックレベルの基準に対して試験される。例となるブロックレベルの基準は上記の通りであり、一般に、ブロック内のトランザクションとは対照的に、ブロック自体に適用される所定のフォーマット要件及び特性又は制限に関係がある。例えば、ブロックサイズ、ブロックヘッダ構造又はコンテンツ、及び同様の基準がある。
【００３８】
プロセス２００は、ＵＴＸＯ一意性確認モジュール２０４を更に含む。モジュール２０４は、新しいブロックにおけるトランザクションへの入力の夫々、すなわち、各ＵＴＸＯが一意であるかどうかを評価する。新しいブロックにおいて入力として１回より多く同じＵＴＸＯが現れる場合には、それは二重支払い（double-spending）の問題の可能性を示し、ＵＴＸＯ一意性基準に違反する。ＵＴＸＯ一意性確認モジュール２０４が、新しいブロック内のトランザクション入力の中で１回よりも多く参照されるＵＴＸＯを識別する場合には、次いでそれは、ブロックが拒絶されるべきであることを示すようエラー信号又は他のインタラプトを出力する。
【００３９】
新しいブロックが拒絶されないとすれば、すなわち、全てのＵＴＸＯが一意であるとすれば、次いで、個々のトランザクションが、トランザクション割り当てユニット２０６によって並列プロセッサ２０８の組の間で割り当てられる。トランザクション割り当てユニット２０６は、ブロック内のトランザクションを個々のプロセッサ２０８の間で分けるための多数の可能な割り当てスキームのうちのいずれか１つを用いてよい。いくつかの場合に、割り当てスキームは、負荷分散（load  balancing）を目的とし得る。割り当ては、処理時間が様々であるジョブの組が、それ自身の処理能力又は出力を夫々が有しているマシン／プロセッサ２０８の組の間で割り当てられる一方で、プロセッサ２０８の間で最長の処理時間の長さを最小にしようと試みる“ジョブショップスケジューリング”（job  shop  scheduling）と見なされ得る。更なる例となる詳細は、以下で与えられる。
【００４０】
個々のプロセッサ２０８は、それらに割り当てられているトランザクションを、トランザクションレベルの妥当性確認基準に対して妥当性確認する。プロセッサ２０８は、それらの間の同期化パラダイムを必要としない。すなわち、それらは、それらが割り当てられているトランザクションが妥当であることを検証することに夫々独立して取り組む。各プロセッサ２０８は、その割り当てられたトランザクションの妥当性を裏付ける結果を出力し、結果は、ブロック内の全てのトランザクションが妥当であることを確認するために加えられる。プロセッサ２０８のうちの１つが不適合なトランザクション、すなわち、妥当でないトランザクションを識別する場合に、次いでそれは、妥当でないトランザクションが存在することを示すよう、インタラプト又は他の信号などの出力を発してよい。そのインタラプト又は信号は他のプロセッサ２０８へ送られてよく、それにより、それらは、それらの各々のトランザクションを試験するのを直ちに中止し、拒絶されるべきブロック内のトランザクションを妥当性確認することで更なるリソースを無駄にすることがないようにすることができる。
【００４１】
ブロックレベルの基準は、例となるプロセス２００では、最初に試験されるものとして示されているが、ブロックレベルの妥当性確認段階２０２は、トランザクションレベルの妥当性確認試験の後で、あるいは、いくつかの場合では、トランザクションレベルの妥当性確認試験と並行して、行われてよいことが理解されるだろう。
【００４２】
これより図３を参照すると、図３は、ブロックチェーンネットワークに置いてブロックを妥当性確認する方法３００の一例をフローチャート形式で示す。ブロックは複数のトランザクションを含み、各トランザクションは１つ以上の入力を参照し、各入力はＵＴＸＯである（コインベース生成トランザクションの場合を除く。）。方法３００は、ブロックチェーンネットワークにおけるあるノード内で適切なハードウェア及びプロセッサ実行可能命令を用いて実施される。
【００４３】
動作３０２で、ノードは新しいブロックを受け取る。新しいブロックは、新しいブロックを生成しプルーフ・オブ・ワークを完了したマイニングノードから受け取られてよい。新しいブロックは、ネットワーク内の他の（非マイニング）ノードから受け取られてもよい。新しいブロックをネットワーク内のいずれかの他のノードへ転送する前に、現在のノードはブロックを妥当性確認する。上述されたように、新しいブロックの妥当性確認は、ブロックがブロックレベルの特定の基準を満足することを確認することと、ブロック内のトランザクションの夫々が妥当であることを確認することとを含む。
【００４４】
動作３０４で、ノードは、新しいブロックがブロックレベルの基準を満足するかどうかを評価する。上述されたように、この動作３０４は、いくつかの実施では方法３００において後で実行されてもよく、いくつかの場合に、他の動作と並行して実行されてもよい。ブロックレベルの基準は、とりわけ、ブロック構造がシンタックス要件を満足すること、タイムスタンプが通貨要件を満たすこと、及びブロックサイズが所定の制限内にあることを確認することを含んでよい。
【００４５】
新しいブロックがこれらのブロックレベルの基準を満足する場合には、次いで動作３０６で、ノードは、個々のトランザクションへの入力が一意であるかどうかを評価する。すなわち、ノードは、入力として参照されるＵＴＸＯのいずれかがブロックにおいて１回よりも多く現れるかどうかを判定する。そうであるならば、ＵＴＸＯは一意ではなく、ブロックは拒絶されるべきである。ＵＴＸＯが一意であるとの決定は、並列処理ユニットの間で計算的に費用のかかる同期化パラダイムを使用しないと、並行して実行され得ない。従って、動作３０６は、逐次的に実行される。
【００４６】
一例となる実施では、トランザクション入力における参照される出力（ＵＴＸＯ）のハッシュテーブルが使用されてよく、各ＵＴＸＯは、偽（false）に初期化されたブール値を有する。二重支払い攻撃は、値が予め真（true）にセットされている所与のハッシュテーブル入力が再び参照される場合に起こる。そのような場合に、ＵＴＸＯは一意ではなく、ブロック全体が妥当でないと見なされ、プロセス３００は中止される。
【００４７】
他の例となる実施では、二分探索木が、例えば、Ｃ＋＋におけるマップ（map）データ構造を通じて、使用されてよい。マップは、特定の順序に従って、キー値及びマッピングされる値の組み合わせによって形成された要素を格納する連想コンテナである。ｎ個のトランザクションを考えると、探索、挿入及び削除時間複雑性は、平均してＯ（ｌｏｇｎ）であり、最悪の場合でＯ（ｎ）である。
【００４８】
新しいブロック内のＵＴＸＯが一意である場合には、次いで動作３０８で、ノードは、トランザクションを並列プロセッサの間で割り当てる。
【００４９】
追加のハッシュテーブルが、ブロック内の他のトランザクションに依存するトランザクションの経過を追うよう、動作３０６の直列処理の間に使用されてよい。１つの実施では、識別子ｉｄｄｅｐ（０から始まる。）が、現在解析されているトランザクションに当てがわれる。トランザクションが他のトランザクションに依存する場合には、それは、それが依存するトランザクションと同じ識別子を与えられることになる。すなわち、２つ以上の依存したトランザクションは同じ識別子を有し、まだ見られている如何なるトランザクションにも依存しない夫々の新しいトランザクションは、逓増的なｉｄｄｅｐ値を有する。依存したトランザクションの各組は、同じ処理ユニットに前もって割り当てられる。例えば、Ｎが並列処理ユニットの数であるとして、ｉｄＣＰＵ＝ｉｄｄｅｐｍｏｄｕｌｏＮ。依存したトランザクションは、例えば、それが依存するトランザクションからの出力である入力を有するものである。
【００５０】
最も簡単な実施では、プロセッサ間のトランザクションの割り当ては、プロセッサ要求及び／又は能力の差にかかわらず、プロセッサの数及びトランザクションの数に基づく。しかし、利用可能なプロセッサの間で処理負荷をより良く平衡にするよう、いくつかの実施では、ノードは、トランザクションの複雑性、特に、各トランザクションを妥当性確認することの複雑性を考慮に入れてもよい。処理負荷の（又はその代理となる）１つのそのような指標は、トランザクションに関わるスクリプト記述動作の数である。すなわち、個々のトランザクションｊを妥当性確認するのに必要な時間は、関連するスクリプト記述動作の数ｃｊに比例すると見なされ得る。例えば、Ｐ２ＰＫＨトランザクションの場合に、ｃｊは、署名スクリプト（入力）における操作の数と、公開キースクリプト（参照される出力）における操作の数との和である。
【００５１】
他の例では、異なる重みが異なるスクリプト操作に割り当てられ得る。例えば、OP_HASH160及びOP_CHECKSIGは、単純なOP_EQUAL操作よりもはるかに複雑である。従って、トランザクションｊの妥当性確認のための全体の費用ｃｊは、そのＭ個の個別的な重み付けされたスクリプト操作ｗｊの和として定義される：
【数１】
2020518907.tif 000003
重みｗｉは、適用可能なブロックチェーンプロトコルによって規定又は定義されたスクリプト記述動作の複雑性に基づきハードコードされてよい。
【００５２】
ノードの計算リソースに対する何らかの形の攻撃を防ぐために、閾値Ｔがセットされ得る。任意のトランザクションｊについて、ｃｊ＞Ｔの場合に、ノードは、ブロックを妥当性確認しないことを決定することができる。Ｔの値は、ヘルツ又は毎秒あたりの命令数で測定される、局所妥当性確認ノードにおける個々の処理ユニットの計算出力に直接比例し得る。
【００５３】
スケジューリングスキームＳは、トランザクション妥当性確認のリスト｛ｃｊ｝，０≦ｊ＜ｎをＣＰＵの間で分配する。この問題は、ジョブショップスケジューリングとして知られており、様々な処理時間のｎ個のジョブ｛Ｊ１，Ｊ２，・・・，Ｊｎ｝は、様々な処理出力を有するＮ個のマシンに対してスケジューリングされる必要があり、一方で、スケジュールＵの全体の長さ（メイクスパン）、すなわち、並列処理が完了するのにかかる時間を最小にしようと試みる。いくつかの実施では、プロセッサ間のトランザクションの割り当ては、ランダム割り当てスキームに従ってよい。いくつかの実施では、割り当ては、決定論的（deterministic）割り当てスキームに従ってよい。
【００５４】
例となる２つのスケジューリングスキームは、次を含む：
・ＦＣＦＳ（先着順サービス（First  Come  First  Served））は、利用可能な処理ユニットにラウンドロビン（round-robin）様式でトランザクションを順次割り当てる。これは、ランダム割り当てスキームの一種である。ブロックの上からｔ番目のトランザクションを考えると、ＩＤｔ  ｍｏｄｕｌｏ  Ｎを有するコアが妥当性確認に関与することになる。このスケジューラは、少なくとも計算的に複雑である。  
・ＬＰＴ（最小処理時間（Longest  Processing  Time））どん欲法（greedy  algorithm）は、より有効な負荷分担解決法を提供し、決定論的割り当てスキームの一例である。ジョブ（トランザクション）は、最初に、それらの各々の処理時間（スクリプト記述動作の数、又は重み付けされたスクリプト記述動作の和に基づく“費用”）によってソートされ、次いで、プロセッサごとの計算負荷を平衡にするように、これまでの最も早い終了時刻を有するマシンに割り当てられ得る。
【００５５】
いくつかの実施で、ＦＣＦＳスキームは、妥当性確認ノードの並列処理の程度Ｎ（例えば、Ｎ又はＮ／２個のトランザクションごとにスクリプトを要求しながらブロックを構築すること）を悪用する悪意のある攻撃を受ける可能性がある。このシナリオを回避するために、本当にランダムなトランザクション妥当性確認割り当てが、余分の費用なしで使用され得る。
【００５６】
ＬＰＴアルゴリズムは、理論的な最適条件Ｕ０に対して次の上限Ｕを達成する：
Ｕ／Ｕ０＝（４／３）−（１／３Ｎ）
マージソート（Mergesort）のようなソートのアルゴリズムは、Ｏ（ｎｌｏｇｎ）の最悪及び平均時間複雑性を特徴とする。しかし、動作３０６のＵＴＸＯ一意性評価は、ｃｊ値をソートしながら実行されてよく、それによって、如何なる余分の計算費用も回避する。
【００５７】
並列プロセッサの間でトランザクションを割り当てると、方法３００は次いで、それらのプロセッサの夫々が、割り当てられたトランザクションの各々の組を独立して妥当性確認することを含む。全ての個別的なトランザクションが妥当と検証されると、次いで、動作３１２によって示されるように、ノードは、ブロックを妥当であるとして受け入れることができる。ブロックを妥当であるとして受け入れること又は指定することは、ブロックチェーンネットワーク上で１つ以上のピアノードへ妥当なブロックを転送することのような、ブロックの妥当性に基づく更なる機能をもたらし得る。いくつかの場合に、それは、現在のノードにローカルで記憶されたブロックチェーンのコピーにブロックを加えることを含んでもよい。
【００５８】
プロセッサのいずれかが、妥当でないトランザクションを検出する場合には、そのプロセッサは妥当性確認方法３００を中止し、動作３１４によって示されるように、ノードはブロックを妥当でないとして拒絶する。
【００５９】
このように、本発明は、先行技術における少なくとも１つの技術的問題に対して１つ以上の技術的解決法を提供する。例えば、既知のブロックチェーン配置は、並列プロセッサ間のトランザクションの割り当てより前に、全てのトランザクションにおける未使用トランザクション出力（ＵＴＸＯ）の妥当性を逐次検証する技術を教示していない。２０１４年１０月８日に公表されたビットコインフォーラムは、例えば、新しいデータ構造（出力セット）を構築し、出力セット構造をチェックすることによって、並列化されたトランザクション検証プロセス内で二重支払いを防ごうと試みることを提案しているように見える（https://bitcointalk.org/index.php?topic=816199.0  [06/10/2017]  “Looking  Into  forking  the  core  wallet  to  use  parallel  computing  to  verify  blocks”）。
【００６０】
これより図４を参照すると、図４は、ノード４００の簡略化された例をブロック図で示す。ノード４００は、複数のプロセッサ４０２を含む。プロセッサ４０２には、１つ以上のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、又は同様のコンピュータ処理装置が含まれ得る。プロセッサ４０２は、マルチコアプロセッサを含んでもよい。
【００６１】
ノード４００はメモリ４０４を更に含む。メモリ４０４には、値、変数、及びいくつかの事例では、プロセッサにより実行可能なプログラム命令を記憶する永久的且つ非一時的なメモリが含まれ得る。ノード４００は、有線又な無線ネットワークにわたってネットワーク接続性を提供するネットワークインターフェイス４０６を更に含む。
【００６２】
ノード４００は、プロセッサ実行可能命令を含むプロセッサ実行可能ブロックチェーンアプリケーション４０８を含む。プロセッサ実行可能命令は、実行される場合に、プロセッサ４０２に、本明細書中で記載される機能又は動作の１つ以上を実行させる。
【００６３】
本明細書中で記載されるデバイス及びプロセス、並びにブロックチェーンノードを構成するために、記載される方法／プロセスを実装するあらゆるモジュール、ルーチン、プロセス、スレッド、アプリケーション、又は他のソフトウェアコンポーネントが、標準のコンピュータプログラミング技術及び言語を用いて実現され得ることが理解されるだろう。本願は、特定のプロセッサ、コンピュータ言語、コンピュータプログラミング仕様、データ構造、他のそのような実施詳細に限定されない。
【００６４】
上記の実施形態は、本発明を制限するのではなく説明しているのであって、当業者は、添付の特許請求の範囲によって定義される本発明の適用範囲から外れることなしに、多くの代替の実施形態を設計することが可能である点が留意されるべきである。特許請求の範囲において、かっこ内の如何なる参照符号も、特許請求の範囲を制限するものとして解釈されるべきではない。語「有する」（comprising及びcomprises）などは、いずれかの請求項又は明細書の全文に挙げられているもの以外の要素又はステップの存在を除外しない。本明細書中、「有する」（comprises）は、「含むか、又は〜から成る」（includes  or  consists  of）を意味し、「有する」（comprising）は、「含むか、又は〜から成る」（including  or  consisting  of）を意味する。要素の単一参照は、そのような要素の複数参照を除外せず、逆もまた同じである。本発明は、いくつかの個別要素を有するハードウェアを用いて、且つ、適切にプログラムされたコンピュータを用いて、実施されてよい。いくつかの手段を列挙している装置クレームでは、それらの手段のうちのいくつかが、ハードウェアの同一アイテムによって具現されてもよい。特定の手段が相互に異なる請求項で挙げられているという単なる事実は、それらの手段の組み合わせが有利に使用され得ないことを示すものではない。
【図１】
2020518907.tif 000004
【図２】
2020518907.tif 000005
【図３】
2020518907.tif 000006
【図４】
2020518907.tif 000007
【国際調査報告】
2020518907.tif 000008
2020518907.tif 000009