(57)【特許請求の範囲】
【請求項１】
並列処理ブロックチェーントランザクションのためのコンピュータ実装方法であって、
ブロックチェーンに追加するための複数の候補トランザクションを取得するステップと、
前記候補トランザクションを１つまたは複数の独立したトランザクショングループにグループ化するステップと、
前記ブロックチェーンの最新ブロックの状態ツリーデータ構造の少なくとも一部分の１つまたは複数の複写を作成するステップと、
前記１つまたは複数の独立したトランザクショングループをそれぞれ前記ブロックチェーンの最新ブロックの前記状態ツリーデータ構造の前記１つまたは複数の複写に関連付けるステップと、
前記独立したトランザクショングループのそれぞれにおける前記候補トランザクションを実行し、それぞれ前記ブロックチェーンの最新ブロックの前記状態ツリーデータ構造の前記関連付けられた複写を更新することによって、並列に、前記１つまたは複数の独立したトランザクショングループを生成するステップと、
前記状態ツリーデータ構造の前記更新された複写をマージすることによって、新たなブロックの新たな状態ルートノードを生成し、前記新たな状態ルートノードに更新を伝搬させるステップと、
を含む、方法。
【請求項２】
前記候補トランザクションを１つまたは複数の独立したトランザクショングループにグループ化するステップが、
それぞれに前記１つまたは複数の独立したトランザクショングループのうちの同じトランザクショングループの下で少なくとも１つの共通のトランザクションアカウントが関与する前記候補トランザクションのうちの２つ以上をグループ化するステップを含む、請求項１に記載の方法。
【請求項３】
前記候補トランザクションを１つまたは複数の独立したトランザクショングループにグループ化するステップが、
前記１つまたは複数の独立したトランザクショングループのうちの異なるトランザクショングループの下で任意の共通のトランザクションアカウントが関与しない前記候補トランザクションのうちの２つ以上をグループ化するステップを含む、請求項１または２に記載の方法。
【請求項４】
前記状態ツリーデータ構造が、最新ブロックに記憶された単一の状態ルートノードと、最新ブロックに記憶されていない複数の中間ノードおよびリーフノードと、を備えるマークルパトリシアツリーを備える、請求項１から３のいずれかに記載の方法。
【請求項５】
前記独立したトランザクショングループのそれぞれにおける前記候補トランザクションを実行し、前記状態ツリーデータ構造の前記関連付けられた複写を更新するステップが、
並列に、前記独立したトランザクショングループのそれぞれにおける前記候補トランザクションを実行し、前記状態ツリーデータ構造の前記関連付けられた複写を更新するステップを含む、請求項１から４のいずれかに記載の方法。
【請求項６】
対応する独立したトランザクショングループにおける前記候補トランザクションを実行するステップが、
対応するトランザクショングループにおける前記候補トランザクションをマルチコアプロセッサによって実行するステップを含む、請求項１から５のいずれかに記載の方法。
【請求項７】
前記状態ツリーデータ構造の前記関連付けられた複写を更新するステップが、
前記状態ツリーデータ構造の前記関連付けられた複写のうちの１つにおけるトランザクションアカウントの残高を更新するステップ、
前記トランザクションアカウントを除去するステップ、または
新たなトランザクションアカウントを追加するステップのうちの少なくとも１つを含む、請求項１から６のいずれかに記載の方法。
【請求項８】
前記状態ツリーデータ構造の前記更新された複写をマージするステップが、
前記状態ツリーデータ構造の前記更新された複写において行われた更新を組み合わせ、組み込むことによって前記ブロックチェーンの最新ブロックの前記状態ツリーデータ構造の前記少なくとも一部分を更新するステップを含む、請求項１から７のいずれかに記載の方法。
【請求項９】
前記新たなブロックを前記ブロックチェーンに追加するステップをさらに備える、請求項１から８のいずれかに記載の方法。
【請求項１０】
並列処理ブロックチェーントランザクションのためのシステムであって、
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサに結合され、請求項１から９のいずれかに記載の方法を実施するために前記１つまたは複数のプロセッサによって実行可能である命令を記憶させた１つまたは複数のコンピュータ可読メモリと、を備える、システム。
【請求項１１】
並列処理ブロックチェーントランザクションのための装置であって、請求項１から９のいずれかに記載の方法を実施するための複数のモジュールを備える、装置。
【請求項１２】
非一時的コンピュータ可読媒体であって、デバイスのプロセッサによって実行されたとき、デバイスに請求項１から９のいずれかに記載の方法を実施させる命令を記憶させた、媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、一般に並列処理ブロックチェーントランザクションのための方法およびデバイスに関する。
【背景技術】
【０００２】
ブロックチェーンは、主要な情報を検証し、信頼を築く、より迅速で安全なやり方を提供するためにインターネットの開放性と暗号の安全性とを組み合わせる。しかし、ブロックチェーントランザクションのソフトウェアおよびハードウェア性能は、様々なパラメータにおいて従来の分散システムに依然として遅れを取っている。現在の技術において、複数のトランザクションを実行するために、状態ツリーは、更新のためにロックされ、更新後にアンロックされ、トランザクションは、更新中は直列に処理される。この直列処理方式はブロックチェーンのＴＰＳ（トランザクション件数：ｔｒａｎｓａｃｔｉｏｎ  ｐｅｒ  ｓｅｃｏｎｄ）性能を制限する。例えば、毎秒７つのビットコイントランザクションしか実行することができない。したがって、より大量のトランザクションに対処するための実行効率などのブロックチェーンシステム性能を改善することが望ましい。
【発明の概要】
【０００３】
本明細書の様々な実施形態は、並列処理ブロックチェーントランザクションのためのシステム、方法、および非一時的コンピュータ可読媒体を含むが、それらに限定されない。
【０００４】
いくつかの実施形態において、並列処理ブロックチェーントランザクションのためのコンピュータ実装方法が、ブロックチェーンに追加するための複数の候補トランザクションを取得するステップと、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップと、ブロックチェーンの最新ブロックのデータ構造の少なくとも一部分の１つまたは複数の複写を作成するステップと、１つまたは複数のトランザクショングループをそれぞれデータ構造の１つまたは複数の複写に関連付けるステップと、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するステップと、ブロックチェーンに追加するべき新たなブロックの新たなデータ構造の少なくとも一部分を取得するために、データ構造の更新された複写をマージするステップと、を含む。
【０００５】
他の実施形態において、１つまたは複数のトランザクショングループは、独立したトランザクショングループである。
【０００６】
さらに他の実施形態において、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップは、それぞれに１つまたは複数のトランザクショングループのうちの同じトランザクショングループの下で少なくとも１つの共通のトランザクションアカウントが関与する候補トランザクションのうちの２つ以上をグループ化するステップを含む。
【０００７】
さらに他の実施形態において、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップは、１つまたは複数のトランザクショングループのうちの異なるトランザクショングループの下で任意の共通のトランザクションアカウントが関与しない候補トランザクションのうちの２つ以上をグループ化するステップを含む。
【０００８】
いくつかの実施形態において、ブロックチェーンは、アカウント／残高モデルに基づいており、データ構造は、最新ブロックに記憶された単一の状態ルートノードと、最新ブロックに記憶されていない複数の中間ノードおよびリーフノードと、を備えるマークルパトリシアツリーを備える。
【０００９】
他の実施形態において、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するステップは、並列に、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するステップを含む。
【００１０】
さらに他の実施形態において、対応するトランザクショングループにおける候補トランザクションを実行するステップは、対応するトランザクショングループにおける候補トランザクションをマルチコアプロセッサによって実行するステップを含む。
【００１１】
さらに他の実施形態において、データ構造の関連付けられた複写を更新するステップは、データ構造の関連付けられた複写のうちの１つにおけるトランザクションアカウントの残高を更新するステップ、トランザクションアカウントを除去するステップ、または新たなトランザクションアカウントを追加するステップのうちの少なくとも１つを含む。
【００１２】
いくつかの実施形態において、データ構造の更新された複写をマージするステップは、データ構造の更新された複写において行われた更新を組み合わせ、組み込むことによってブロックチェーンの最新ブロックのデータ構造の少なくとも一部分を更新するステップを含む。
【００１３】
他の実施形態において、方法は、新たなブロックをブロックチェーンに追加するステップであって、新たなデータ構造の一部分は、新たな状態ルートノードを備え、新たなブロックは、新たな状態ルートノードを備える、追加するステップをさらに含む。
【００１４】
さらに他の実施形態において、並列処理ブロックチェーントランザクションのためのシステムが、１つまたは複数のプロセッサと、１つまたは複数のプロセッサに結合され、前述の実施形態のうちのいずれかの方法を実施するために１つまたは複数のプロセッサによって実行可能である命令を記憶させた１つまたは複数のコンピュータ可読メモリと、を備える。
【００１５】
さらに他の実施形態において、並列処理ブロックチェーントランザクションのための装置が、前述の実施形態のうちのいずれかの方法を実施するための複数のモジュールを備える。
【００１６】
いくつかの実施形態において、非一時的コンピュータ可読媒体が、デバイスのプロセッサによって実行されたとき、デバイスに前述の実施形態のうちのいずれかの方法を実施させる命令を記憶させている。
【００１７】
他の実施形態において、並列処理ブロックチェーントランザクションのためのシステムが、１つまたは複数のプロセッサと、１つまたは複数のプロセッサに結合され、以下を含む動作をシステムに実施させる、１つまたは複数のプロセッサによって実行可能な命令を用いて構成された１つまたは複数の非一時的コンピュータ可読メモリと、を備える。すなわち、ブロックチェーンに追加するための複数の候補トランザクションを取得するステップと、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップと、ブロックチェーンの最新ブロックのデータ構造の少なくとも一部分の１つまたは複数の複写を作成するステップと、１つまたは複数のトランザクショングループをそれぞれデータ構造の１つまたは複数の複写に関連付けるステップと、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するステップと、ブロックチェーンに追加するべき新たなブロックの新たなデータ構造の少なくとも一部分を取得するためにデータ構造の更新された複写をマージするステップと、である。
【００１８】
さらに他の実施形態において、プロセッサは、マルチコアプロセッサを備える。
【００１９】
さらに他の実施形態において、非一時的コンピュータ可読記憶媒体が、以下を含む動作を１つまたは複数のプロセッサに実施させる、１つまたは複数のプロセッサによって実行可能な命令を用いて構成される。すなわち、ブロックチェーンに追加するための複数の候補トランザクションを取得するステップと、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップと、ブロックチェーンの最新ブロックのデータ構造の少なくとも一部分の１つまたは複数の複写を作成するステップと、１つまたは複数のトランザクショングループをそれぞれデータ構造の１つまたは複数の複写に関連付けるステップと、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するステップと、ブロックチェーンに追加するべき新たなブロックの新たなデータ構造の少なくとも一部分を取得するためにデータ構造の更新された複写をマージするステップと、である。
【００２０】
いくつかの実施形態によれば、並列処理ブロックチェーントランザクションのための装置が、ブロックチェーンに追加するための複数の候補トランザクションを取得するための取得モジュールと、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するためのグループ化モジュールと、ブロックチェーンの最新ブロックのデータ構造の少なくとも一部分の１つまたは複数の複写を作成するための作成モジュールと、１つまたは複数のトランザクショングループをそれぞれデータ構造の１つまたは複数の複写に関連付けるための関連付けモジュールと、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するための実行モジュールと、ブロックチェーンに追加するべき新たなブロックの新たなデータ構造の少なくとも一部分を取得するためにデータ構造の更新された複写をマージするためのマージモジュールと、を備える。
【００２１】
本明細書に開示する実施形態は、１つまたは複数の技術的効果を有する。いくつかの実施形態において、コンセンサス検証（マイニング）の後は候補トランザクションのプールを、および実行の前は候補トランザクションを、様々な独立したグループにグループ化することができる。他の実施形態において、候補トランザクションのグループは、状態ツリーの複写を更新するマルチコアプロセッサ（例えば、ＣＰＵ）によって同時に実行することができる。さらに他の実施形態において、状態ツリーデータ構造の複写を作成することによって、候補トランザクションの独立したグループは、データ構造をロックする必要なしに複写において並列に処理することができる。さらに他の実施形態において、すべての独立したグループが更新された後、状態ツリーデータ構造の複写は、新たなブロックの新たなデータ構造を取得するためにマージすることができ、したがって、新たなブロックの効率的なマイニングを実現することができる。いくつかの実施形態において、ＴＰＳおよび他の処理効率測定値などのブロックチェーン性能を顕著に改善することができる。
【００２２】
本明細書に開示するシステム、方法、および非一時的コンピュータ可読媒体のこれらのおよび他の特徴、ならびに動作の方法および構造の関連した要素の機能および部分の組合せおよび製造の経済性は、そのすべてが本明細書の一部を構成し、同じ参照番号が様々な図における対応する部分を指定する、添付の図面を参照して以下の説明および添付の特許請求の範囲を検討することにより、より明らかとなるであろう。しかし、図面は、例示および説明だけのためであり、限定することが意図されていないことを明確に理解されたい。
【図面の簡単な説明】
【００２３】
【図１】様々な実施形態による、並列処理ブロックチェーントランザクションのための例示的なシステムを示す。
【図２】様々な実施形態による、ブロックチェーンおよび対応する状態ツリーの２つの例示的なブロックを示す。
【図３Ａ】様々な実施形態による、並列処理ブロックチェーントランザクションのための例示的な方法の流れ図を示す。
【図３Ｂ】様々な実施形態による、状態ツリーの２つの複写の例示的なマージを示す。
【図４】様々な実施形態による、並列処理ブロックチェーントランザクションのための例示的な方法の流れ図を示す。
【図５】様々な実施形態による、並列処理ブロックチェーントランザクションのための例示的な装置の流れ図を示す。
【図６】本明細書に説明する実施形態のうちのいずれかを実装することができる、例示的なコンピュータシステムのブロック図を示す。
【発明を実施するための形態】
【００２４】
ブロックチェーンは、動作がネットワークにおける様々なノード（例えば、コンピューティングデバイス）によって実施されるので、一般に分散台帳と称される、非集中データベースとみなすことができる。任意の情報は、ブロックチェーンに書き込み、それからセーブまたは読み込むことができる。誰でもサーバをセットアップし、ブロックチェーンネットワークに参加して、ノードとなることができる。任意のノードは、現在のブロックチェーンにブロックを追加するためにハッシュ計算などの複雑な計算を実施することによってブロックチェーンを維持するのに計算能力を提供することができ、追加されたブロックは、様々な種類のデータまたは情報を含むことができる。追加されたブロックのために計算能力を提供したノードは、代用貨幣（例えば、デジタル通貨単位）が報酬として与えられる可能性がある。ブロックチェーンは中心ノードを何も有さないので、各ノードは等しく、ブロックチェーンデータベース全体を保持する。
【００２５】
ノードは、例えば、ブロックチェーンネットワークをサポートし、それを順調に動かし続けるコンピューティングデバイスまたは大型コンピュータシステムである。例示的な「プルーフオブワーク」システムにおいて、フルノードと軽量ノードの２種類のノードがある。フルノードは、ブロックチェーンの完全な複写を保持する。ブロックチェーンネットワーク上のフルノードは、それらが受け取るトランザクションおよびブロックの妥当性を検査し、それらを、トランザクションのコンセンサス検証を提供するために、接続されたピアに中継する。他方、軽量ノードは、ブロックチェーンのほんのわずかだけダウンロードする。例えば、軽量ノードは、デジタル通貨トランザクションに使用される。軽量ノードは、取引したいとき、フルノードと通信する。
【００２６】
この非集中化特性により、管理センタの制御された位置における出現が防止されるのに役立つ場合がある。例えば、ビットコイン／イーサリアムブロックチェーンの維持は、運営領域におけるビットコイン／イーサリアムソフトウェアの通信ノードのネットワークによって実施される。すなわち、従来の意味における銀行、団体、または管理者の代わりに、コンピュータサーバの形態でビットコイン／イーサリアムソフトウェアを実行する複数の仲介人が存在する。これらのコンピュータサーバは、インターネットを介して接続されたネットワークを形成し、誰でも潜在的にネットワークに参加することができる。ネットワークによって対処されるトランザクションは、「ユーザＡがＺビットコイン／イーサをユーザＢに送りたい」形態であることができ、トランザクションは、すぐに利用できるソフトウェアアプリケーションを使用してネットワークに同報通信される。これらの金融トランザクションの妥当性を検査するように作動するビットコイン／イーサリアムサーバとしてのコンピュータサーバの機能は、それらの記録をそれらの台帳の複写に追加し、次いで、ネットワークの他のサーバへのこれらの台帳の追加を同報通信する。本明細書は、例として、ビットコインおよびイーサリアムなどの、１つまたは複数のブロックチェーンまたはデジタル通貨を使用する。本明細書に開示する技術的解決策は、他の種類のブロックチェーンおよびデジタル通貨を使用し、またはそれに適用することができることを当業者は理解されたい。
【００２７】
図１は、様々な実施形態による、様々な開示するステップおよび方法を実施するための例示的なシステム１００を示す。図示するように、ブロックチェーンネットワークが、複数のブロックチェーンノード（例えば、ノード１、ノード２、．．．、およびノードｉ）を備えることができる。ブロックチェーンノードは、サーバ、コンピュータなどに実装することができる。各ブロックチェーンノードは、ＴＣＰ／ＩＰなどの様々な種類の通信方法を介して互いに結合された１つまたは複数の物理的ハードウェアデバイスまたは仮想デバイスに対応することができる。分類により、ブロックチェーンノードは、フルノード、Ｇｅｔｈノード、コンセンサスノードなどを備えることができる。一例において、「プルーフオブワーク」システムの下で、ブロックチェーンノードは、それらのハードウェアまたは計算能力を適用して、ブロックチェーンのブロックを検証し、報酬を受け取るマイナーのデバイスを備えることができる。そのような検証を実施しないブロックチェーンノードは、軽量ノードを備える。別の例において、「プルーフオブステーク／サービス」システムの下で、あるレベルの議決権を有するブロックチェーンノードは、コンセンサス／マスターノードと称する場合があり、それは、非コンセンサスノードとは対照的に、トランザクション検証の責任を負う。コンセンサスノードは、新たなブロックチェーンブロックを生成し、そのブロックチェーンのために、例えば、ブロックチェーンのサービス料を設定する判断をすることができる。コンセンサスノードは、大量の暗号通貨に関連付け、相互に合意した、あるコンセンサスルールに基づいて新たなトランザクションを検証することができる。本明細書において、上記のまたは別のブロックチェーンシステムにおけるフルノード、コンセンサスノード、または他の同等のノードは、ブロックチェーンノードとしてトランザクションを検証することができる。
【００２８】
また、図１に示すように、ユーザＡは、ユーザＡのアカウントにおけるいくらかの資産をユーザＢのアカウントに移転させることによってユーザＢと取引したいと思うことができる。ユーザＡおよびユーザＢは、トランザクションのために適当なブロックチェーンソフトウェア（例えば、暗号通貨ウォレット）がインストールされた対応するデバイスを使用することができる。ユーザＡのデバイスは、受領者ノードＢと称するユーザＢのデバイスとトランザクションを開始するイニシエータノードＡと称することができる。ノードＡは、ノード１との通信を通じてブロックチェーンにアクセスすることができ、ノードＢは、ノード２との通信を通じてブロックチェーンにアクセスすることができる。例えば、ノードＡおよびノードＢは、トランザクションをブロックチェーンに追加することを要求するためにノード１およびノード２を通じてトランザクションをブロックチェーンに提出することができる。ブロックチェーン外では、ノードＡおよびノードＢは、通信（例えば、ノード１および２を経由しない通常のインターネット通信）の他のチャネルを有することができる。いくつかの実施形態において、ノードＡ上のブロックチェーンソフトウェアは、ブロックチェーンノード１のフロントエンドとみなすことができ、ブロックチェーンノード１は、ブロックチェーンソフトウェアのバックエンドを実行する。
【００２９】
図１のノードのそれぞれは、プロセッサ（例えば、マルチコアプロセッサ）と、本明細書に説明する並列処理ブロックチェーントランザクションのための様々なステップをノード（例えば、プロセッサ）に実施させる、プロセッサによって実行可能な命令を用いて構成された非一時的コンピュータ可読記憶媒体と、を備えることができる。各ノードは、他のノードおよび／または他のデバイスと通信するソフトウェア（例えば、トランザクションプログラム）および／またはハードウェア（例えば、電線、無線接続）をインストールすることができる。例えば、ノードＡおよびノードＢなどのユーザデバイスは、暗号通貨ウォレットなどのユーザエンドソフトウェアをインストールすることができ、ブロックチェーンノードは、ブロックチェーントランザクション処理ソフトウェアをインストールすることができる。ノードハードウェアおよびソフトウェアのさらなる詳細は、図６を参照して後で説明する。
【００３０】
ブロックチェーンノードは、それぞれメモリ６０８に結合することができる。いくつかの実施形態において、メモリ６０８は、プールデータベースを記憶することができる。プールデータベースは、分散方式で複数のブロックチェーンノードにアクセス可能であってもよい。例えば、プールデータベースは、それぞれ、ブロックチェーンノードのメモリに記憶させることができる。プールデータベースは、ユーザによって動作されるノードＡおよびＢなどの１つまたは複数のユーザデバイスによって提出された複数のトランザクションを記憶することができる。
【００３１】
いくつかの実施形態において、未確認トランザクションのトランザクション要求を受け取った後、未確認トランザクションは、プールデータベースに記憶させることができる。１つまたは複数のブロックチェーンノードは、未確認トランザクションを検証するためにコンセンサス検証を実施することができる。検証に成功すると、ブロックチェーンノードは、ブロックチェーンに追加するべきトランザクションをパックすることができる。検証が失敗した場合、未確認トランザクションは拒絶される。
【００３２】
トランザクションを検証し、ブロックチェーンに追加することは、「マイニング」と称され、そのような維持管理を行う者には、新たに作成されたビットコイン／イーサおよびトランザクション手数料が報酬として与えられる。例えば、ブロックチェーンノードは、ブロックチェーンネットワークが合意したコンセンサスルールの組に基づいてトランザクションが有効であるかどうかを判定することができる。マイナーは、どの大陸にも位置することができ、各トランザクションを有効として検証し、それをブロックチェーンに追加することによって支払いを処理することができる。そのような検証は、複数のマイナーによって与えられたコンセンサスを介して実現され、体系的な共謀が何もないと仮定する。結局、計算結果が有効であるべきある要件を満たさなければならないので、すべてのデータは一貫しており、すべてのブロックチェーンノードは、ブロックチェーンが一貫していることを確実にするために同期される。したがって、データは、ブロックチェーンノードの分散システムに一貫して記憶させることができる。
【００３３】
マイニングプロセスを通じて、資産移転などのトランザクションは検証され、ネットワークノードによるブロックチェーンの増大するブロックのチェーンに追加される。ブロックチェーン全体を詳しく検討することによって、検証は、例えば、支払い側当事者が移転する資産を利用できるのかどうか、資産が前に使用されたことがあるのかどうか、移転する金額が正しいのかどうかなどを含むことができる。例えば、イニシエータノードなどの送り手によって署名して締結され、結合されたブロックチェーンノードに提出された仮想トランザクションにおいて、結合されたブロックチェーンノードは、ブロックチェーンノードをマイニングするために、提案されたトランザクションをブロックチェーンネットワークに同報通信することができる。マイナーは、トランザクションがブロックチェーン履歴により実行すべき資格があるのかどうかを確認する必要がある。送り手のウォレット残高が既存のブロックチェーン履歴により十分な資金を有する場合、トランザクションは、有効とみなされ、ブロックに追加することができる。検証されると、資産移転は、ブロックチェーンに追加するべき次のブロックに含めることができる。
【００３４】
ブロックはデータベースレコードとほぼ同じである。データを書くたびに、ブロックが作成される。これらのブロックは、リンクされ、暗号を使用して保護されて、相互接続ネットワークとなる。各ブロックは、前のブロックに接続され、それは「ブロックチェーン」という名称の起源でもある。各ブロックは、通常前のブロック、世代時間、および実際のデータの暗号学的ハッシュを含む。例えば、各ブロックは、現在のブロックの特徴量を記録するブロックヘッダと、実際のデータ（例えば、トランザクションデータ）を記録するボディと、の２つの部分を含む。ブロックのチェーンはブロックヘッダを介してリンクされる。各ブロックヘッダは、バージョン、前のブロックハッシュ、マークルルート、タイムスタンプ、難易度ターゲット、およびプルーフオブワークナンス（または略してナンス）などの複数の特徴量を含むことができる。前のブロックハッシュは、前のブロックのアドレスだけでなく、前のブロック内のデータのハッシュも含み、したがって、ブロックチェーンを変更不可能にする。ナンスとは、含まれたとき、指定先行ゼロビット数を有するハッシュを生じさせる数のことである。
【００３５】
マイニングでは、新たなブロックのコンテンツのハッシュは、ブロックチェーンノードによって取られる。ナンス（例えば、ランダムな文字列）は、新たな文字列を取得するためにハッシュに加えられる。新たな文字列は再度ハッシュされる。次いで、最終ハッシュは、難易度ターゲット（例えばレベル）と比較され、最終ハッシュが実際に難易度ターゲット未満であるか否かが判定される。「いいえ」である場合、ナンスは変更され、プロセスが再度繰り返される。「はい」である場合、ブロックがチェーンに追加され、公共台帳が更新され、追加が知らされる。追加の成功に関与したブロックチェーンノードには、例えば、それ自体に報酬トランザクションを追加して新たなブロックにすることによってビットコイン／イーサが報酬として与えられる。さらに、または代替案として、トランザクションイニシエータは、トランザクションを首尾よくマイニングして、新たに追加されたブロックとするブロックチェーンノードに報酬を与えるためにトランザクション手数料を含むことができる。
【００３６】
すなわち、出力「Ｙ」ごとに、ｋが高いｍｉｎエントロピーを有する分散から選択された場合、Ｈ（ｋ｜ｘ）＝Ｙであるように入力ｘを見つけることは実行不可能であり、ここで、ｋはナンスであり、ｘはブロックのハッシュであり、Ｙは難易度ターゲットであり、「｜」は連結を表す。暗号学的ハッシュが本質的にランダムであるために、それらの出力をそれらの入力から予測することはできないという意味において、ナンスを見つけるには１つの周知のやり方だけがある。すなわち、整数を例えば１、次いで２、次いで３などと、順々に試してみることであり、これは総当たり攻撃と呼ばれる場合がある。先行ゼロの数が大きければ大きいほど、必須のナンスＹを見つけるのに要する時間が平均して長くなる。一例において、ビットコインシステムは、先行ゼロの数を絶えず調整し、したがって、ナンスを見つける平均時間は、約１０分である。そのように、コンピューティングハードウェアの処理能力が時間とともに長年にわたって増加するにつれて、ビットコインプロトコルは、マイニングを実装するのに約１０分の持続時間を常に要させるために、より多くの先行ゼロビットを単純に必要とする。
【００３７】
説明したように、ハッシングは、ブロックチェーンにとって重要な要石である。ハッシュアルゴリズムは、任意の長さのメッセージを固定長のメッセージダイジェストに圧縮する機能として理解することができる。より一般的に使用されるのはＭＤ５およびＳＨＡである。いくつかの実施形態において、ブロックチェーンのハッシュ長は２５６ビットであり、それは元のコンテンツが何であるかにかかわらず、２５６ビットの２進数が最後に計算されることを意味する。また、元のコンテンツが異なる限り、対応するハッシュが一意であることを保証することができる。例えば、文字列「１２３」のハッシュは、ａ８ｆｄｃ２０５ａ９ｆ１９ｃｃ１ｃ７５０７ａ６０ｃ４ｆ０１ｂ１３ｄ１１ｄ７ｆｄ０（１６進数）であり、それは２値に変換されたとき２５６ビットを有し、「１２３」だけがこのハッシュを有する。ブロックチェーンにおけるハッシュアルゴリズムは、不可逆であり、すなわち、前進計算が容易であり（「１２３」からａ８ｆｄｃ２０５ａ９ｆ１９ｃｃ１ｃ７５０７ａ６０ｃ４ｆ０１ｂ１ｃ７５０７ａ６０ｃ４ｆ０１ｂ１３ｄ１１ｄ７ｆｄ０への）、すべてのコンピューティング資源が使い尽くされた場合、逆計算を行うことができない。したがって、ブロックチェーンの各ブロックのハッシュは一意である。
【００３８】
さらに、ブロックのコンテンツが変化した場合、そのハッシュは変化する。ブロックおよびハッシュは、１対１対応にあり、各ブロックのハッシュは、具体的にブロックヘッダに対して計算される。すなわち、ブロックヘッダの特徴量は、接続されて、長い文字列を形成し、次いで、ハッシュが文字列に対して計算される。例えば、「Ｈａｓｈ＝ＳＨＡ２５６（ブロックヘッダ）」は、ブロックハッシュ計算式であり、ＳＨＡ２５６は、ブロックヘッダに適用されるブロックチェーンハッシュアルゴリズムである。ハッシュは、ブロックボディではなく、ブロックヘッダによって一意に決定さる。上述のように、ブロックヘッダは、現在のブロックのハッシュおよび前のブロックのハッシュを含む、たくさんのコンテンツを含む。これは現在のブロックのコンテンツが変化した場合、または前のブロックのハッシュが変化した場合、それにより、現在のブロックにおけるハッシュが変化することを意味する。ハッカーがブロックを変更した場合、ブロックのハッシュが変化する。後のブロックが変更されたブロックに接続するために、ハッカーは、すべての後続のブロックを次々に変更しなければならない。何故なら、次のブロックが前のブロックのハッシュを含んでいなければならないからである。そうでない場合、変更されたブロックは、ブロックチェーンから取り外される。設計上の理由により、ハッシュ計算は、時間がかかり、ハッカーがネットワーク全体の計算能力の５１％超を使いこなさない限り、短時間に複数のブロックを変更することはほとんど不可能である。したがって、ブロックチェーンは、それ自体の信頼性を保証し、いったんデータが書かれると、それを改ざんすることができない。
【００３９】
マイナーは、新たなブロックに対してハッシュ（すなわち、適格な署名または解答）を見つけると、この署名をすべての他のマイナー（ブロックチェーンノード）に同報通信する。次に、他のマイナーは、それらの番になってその解答が送り手のブロックの問題に対応するかどうかを検証する（すなわち、ハッシュ入力が実際に結果としてその署名となっているかどうかを判定する）。解答が有効である場合、他のマイナーは解答を確認し、新たなブロックをブロックチェーンに追加することができることに合意する。したがって、新たなブロックのコンセンサスが得られる。これは「プルーフオブワーク」とも呼ばれる。コンセンサスが得られたブロックは、次にブロックチェーンに追加することができ、その署名とともに、ネットワーク上のすべてのブロックチェーンノードに同報通信される。ブロックチェーンノードは、ブロックを受け入れ、ブロック内のトランザクションがその時点の現在のウォレット残高（トランザクション履歴）に正しく対応する限り、それをそれらのトランザクションデータにセーブする。このブロックに加えて新たなブロックが追加されるごとに、その追加はまたそれの前のブロックの別の「確認」とみなされる。例えば、トランザクションがブロック５０２に含まれる場合、ブロックチェーンは長さが５０７ブロックであり、それはトランザクションが５つの確認（ブロック５０７から５０２に対応する）を有することを意味する。トランザクションが有する確認がより多ければ多いほど、攻撃者にとっては改変することがより困難になる。
【００４０】
図示するように、ブロックチェーンは、共有状態を有する、暗号学的に安全なトランザクショナルシングルトンマシンである。「暗号学的に安全な」とは、デジタル通貨の作成が、破るのが途方もなく困難である複雑な数学アルゴリズムによって確保されることを示す可能性がある。それらはシステムを欺くこと（例えば、偽のトランザクションを作成し、トランザクションを消去するなど）をほぼ不可能にする。「トランザクショナルシングルトンマシン」とは、システムにおいて作成されたすべてのトランザクションに関与するマシンの単一の標準インスタンスがあることを示す可能性がある。言い換えれば、あらゆる人が信じる単一のグローバル真実がある。「共有状態を有する」とは、このマシンに記憶された状態が共有され、あらゆる人に開放されていることを示す可能性がある。ビットコインおよびイーサリアムは、両方とも、ブロックチェーンパラダイムを実装するが、ブロックチェーントランザクションの文脈で以下に論じる異なるモデルに基づく。説明するモデルは、単に例示的に過ぎず、開示するシステムおよびモデルは、他のモデルに基づいて実装することができる。
【００４１】
いくつかの実施形態において、ある資産をユーザＢに移転するために、ユーザＡは、ブロックチェーンノードを通じてトランザクションに関する情報を含む記録を構築することができる。トランザクションの主題は、例えば、通貨、代用貨幣、デジタル通貨、コントラクト、証書、医療記録、顧客詳細、株、債権、株主資本またはデジタル形態で説明することができる任意の他の資産を含むことができる。記録はユーザＡの署名鍵（秘密鍵）を用いて署名することができ、ユーザＡの公開検証鍵およびユーザＢの公開検証鍵を含む。新たなブロックにおいて同じ時間窓で行われた他の記録にバンドルされた記録は、フルノードに同報通信することができる。記録を受け取り次第、フルノードは、ブロックチェーンシステムにおいてかつて行われたすべてのトランザクションの台帳に記録を組み込むことに取り組むことができ、上記のマイニングプロセスを通じて新たなブロックを前に受け入れたブロックチェーンに追加し、新たなブロックをネットワークのコンセンサスルールに対して妥当性を検査する。
【００４２】
ビットコインは、ＵＴＸＯ（未使用トランザクション出力）モデルに基づいている。ＵＴＸＯの下で、資産は使用されなかったブロックチェーントランザクションの出力によって表され、それは新たなトランザクションにおいて入力として使用することができる。出力は、各トランザクションに対する入力以上でもよい。例えば、移転すべきユーザＡの資産は、ＵＴＸＯの形態でもよい。資産を使用する（取引する）ために、ユーザＡは、秘密鍵を用いて署名して締結しなければならない。ビットコインは、ＵＴＸＯモデルを使用するデジタル通貨の例である。有効なブロックチェーントランザクションの場合、未使用出力は、さらにトランザクションを実施するのに使用することができる。いくつかの実施形態において、二重支払いおよび詐欺を防止するために、未使用の出力だけを他のトランザクションに使用することができる。この理由から、ブロックチェーン上の入力は、トランザクションが行われたとき削除されるが、同時に、ＵＴＸＯの形態で出力が作成される。これらの未使用のトランザクション出力を今後のトランザクションのために使用することができる（秘密鍵の所持人、例えば、デジタル通貨ウォレットを有する人によって）。
【００４３】
イーサリアムは、アカウント／残高モデル（またはアカウントベースのトランザクションモデルと称される）に基づいており、それは各アカウントの残高をグローバル状態として追跡する。トランザクションにおいて、アカウントの残高は、それが、使用するトランザクション金額以上であることを確実にするために確認される。アカウント／残高モデルがイーサリアムにおいてどのように働くのかを示す例が提供される。すなわち、
【００４４】
１．アリスがマイニングを通じて５イーサを獲得する。アリスが５イーサを有することがシステムに記録される。
【００４５】
２．アリスは、ボブに１イーサを与えたいと思い、したがって、システムがまず１イーサをアリスのアカウントから差し引き、したがって、アリスが今は４イーサを有する。
【００４６】
３．次いで、システムは、ボブのアカウントを１イーサだけ増加させる。システムはボブが最初に２イーサを有することを知っており、したがって、ボブの残高は３イーサに増加される。
【００４７】
イーサリアムブロックチェーンは、トランザクションベースの状態マシンとみなすことができる。コンピュータ科学において、状態マシンとは、一連の入力を読み取り、それらの入力に基づいて、新たな状態に移行するものを表す。アカウント／残高モデルの下で、ブロックチェーン（例えば、イーサリアムブロックチェーン）は、ブロックチェーンのまったく最初のブロック（ジェネシスブロック）に対応する「ジェネシス状態」から寿命が開始する。この時点（ブロック０におけるジェネシス状態）から、トランザクション、コントラクト、およびマイニングなどの活動がブロックチェーンの「状態」を絶えず変化させる。例えば、トランザクションが実行されたとき、このジェネシス状態は、より多くのトランザクションが実行されたときなど、状態１に、次いで、状態２に移行する。イーサリアムの状態は、「ブロック」にグループ化された数百万のトランザクションを有する。ブロックは、一連のトランザクションを含み、各ブロックは、前に説明したように、その前のブロックと一緒にチェーンでつながれる。１つの状態から次の状態への移行を生じさせるために、トランザクションは有効でなければならない。トランザクションが有効であるとみなされるために、それは、前に説明したように、マイニングと呼ばれる妥当性検査プロセスを経由する。上述の「共有状態を有するトランザクショナルシングルトンマシン」に対応して、正しい現在の状態は、あらゆるブロックチェーンノードが受け入れなければならない単一のグローバル真実である。
【００４８】
イーサリアムのグローバル状態は、アカウントアドレスとアカウント状態とのマッピングを含む。アカウントは、メッセージ受け渡しフレームワークを通じて互いに作用することができる。各アカウントは、それと、２０バイトのアドレスとに関連付けられた状態を有する。イーサリアムにおけるアドレスは、任意のアカウントを識別するのに使用される１６０ビットの識別子である。秘密鍵によって管理され、それらに関連付けられたコードは何も有さない外部所有アカウントと、それらのコントラクトコードによって管理され、それらに関連付けられたコードを有するコントラクトアカウントとの２種類のアカウントがある。外部所有アカウントは、その秘密鍵を使用してトランザクションを作成し、署名することによって、メッセージを他の外部所有アカウントに、または他のコントラクトアカウントに送ることができる。２つの外部所有アカウント間のメッセージは、単純に価値移転である。しかし、外部所有アカウントからコントラクトアカウントへのメッセージは、コントラクトアカウントのコードを作動させ、それが様々な処置（例えば、代用貨幣の移転、内部記憶装置への書込み、新たな代用貨幣の鋳造、何らかの計算の実施、新たなコントラクトの作成など）を実施することが可能になる。外部所有アカウントとは異なり、コントラクトアカウントは、それら自体で新たなトランザクションを開始することができない。その代わり、コントラクトアカウントは、それらが受け取った他のトランザクションに応答して（外部所有アカウントから、または他のコントラクトアカウントから）、トランザクションだけを始動させることができる。したがって、イーサリアムブロックチェーン上で行われる任意の処置は、外部管理アカウントから始動されたトランザクションによって発動させることができる。
【００４９】
アカウント状態は、アカウントナンス、残高、ｓｔｏｒａｇｅＲｏｏｔ、およびｃｏｄｅＨａｓｈの４つの構成要素を含むことができ、それらはアカウントの種類にかかわらず存在する。アカウントナンスでは、アカウントが外部所有アカウントである場合、この数は、アカウントのアドレスから送られたトランザクションの数を表す。アカウントがコントラクトアカウントである場合、ナンスは、アカウントによって作成されたコントラクトの数である。残高は、このアドレスによって所有されるＷｅｉの数である。１イーサ当たり１ｅ＋１８Ｗｅｉがある。ＳｔｏｒａｇｅＲｏｏｔは、マークルパトリシアツリー（ＭＰＴ：Ｍｅｒｋｌｅ  Ｐａｔｒｉｃｉａ  ｔｒｅｅ）の状態ルートノードのハッシュである。このツリーは、このアカウントのストレージコンテンツのハッシュをエンコードし、デフォルト設定により空である。ＣｏｄｅＨａｓｈは、このアカウントのＥＶＭ（イーサリアム仮想マシン：Ｅｔｈｅｒｅｕｍ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）コードのハッシュである。コントラクトアカウントでは、これは、ハッシュされ、ｃｏｄｅＨａｓｈとして記憶されたコードである。外部所有アカウントでは、ｃｏｄｅＨａｓｈフィールドは、空の文字列のハッシュである。
【００５０】
アカウントアドレスとアカウント状態との間のマッピングは、マークルパトリシアツリー（ＭＰＴ）と呼ばれるデータ構造に記憶される。マークルパトリシアツリーは、マークルツリー（または「マークルトライ」とも称される）の種類であり、マークルツリーは、状態ツリーの種類であり、状態ツリーは、データ構造の種類である。マークルツリーは、基礎データを含む、ツリーの底部の多数のリーフノードと、そのそれぞれがその２つの子ノードのハッシュである中間ノードの組と、その２つの子ノードのハッシュからやはり形成され、ツリーの頂部を表す単一の状態ルートノードとを有するノードの組を含むバイナリツリーである。ツリーの底部のデータは、記憶するべきデータをチャンクに分割し，次いで、チャンクをバケットに分割し、次いで、各バケットのハッシュを取り、残っているハッシュの総数がただ１つ、すなわち、ルートハッシュになるまで同じプロセスを繰り返すことによって生成される。このツリーは、それの内側に記憶されたあらゆる値に対する鍵を有する必要がある。ツリーの状態ルートノードから開始して、鍵は、リーフノードに記憶された対応する値に達するのにどの子ノードに従うべきなのかを示すべきである。イーサリアムにおいて、状態ツリーに対する鍵／値マッピングは、各アカウントの残高、ナンス、ｃｏｄｅＨａｓｈ、およびｓｔｏｒａｇｅＲｏｏｔ（その場合、ｓｔｏｒａｇｅＲｏｏｔはそれ自体ツリーである）を含む、アドレスとそれらの関連付けられたアカウントとの間にある。この同じツリー構造は、トランザクションおよび受領を記憶するのにも使用される。例えば、あらゆるブロックは、状態ツリー、トランザクションツリー、受領ツリーを含む、３つの異なるマークルツリー構造の状態ルートノードのハッシュを記憶する「ヘッダ」を有する。状態ツリーは、例として使用されるが、様々な他のツリーおよびデータ構造は、開示するシステムおよび方法に使用することができる。
【００５１】
図２を参照すると、図２は、様々な実施形態による、例示的なブロックチェーンおよび対応する状態ツリーにおける２つのブロック（ブロックＮおよびブロックＮ＋１）を示す。図２に示すノードは、ブロックチェーンノードと呼ばれるデバイスであるノード１およびノードＡなどとは対照的に、データ構造におけるノードを表すことができる。図示するように、各ブロックは、前のブロックのハッシュを含み、ブロックのチェーンを作成する。ブロックＮ（および任意のブロック）における状態ルートノードは、ブロックチェーンシステム全体におけるすべてのアカウント（外部およびコントラクト）の状態の概要を含む。状態ルートノードは、ルートハッシュによって表すことができる。各ブロックは、ルートハッシュを記憶することができ、状態ツリーは、ルートハッシュに基づいてデータベースに問合せを行うことによって取得することができ、ブロックは、状態ツリー全体を記憶しなくてもよい。
【００５２】
例えば、アカウントＡは、トランザクションに参加したアカウントのうちの１つであり、アカウントＡは、ブロックＮの状態ルートノードの下の、ある場所において見いだすことができる。新たなブロックＮ＋１が追加される前に、ブロックＮは、ブロックチェーンの最新ノードである。アカウントＡのノードは、アカウントの情報、例えば、１０イーサの残高を記憶した様々なノードに分岐する。新たなブロックＮ＋１がマイニングされ、ブロックチェーンに加えられるときまでに、システムには１つの変化、すなわち、アカウントＡへの５イーサの追加しかなかったと仮定する。変化は、ブロックＮ＋１の新たな状態ルートノードに至る新たに計算されたハッシュによって示される（ブロックＮ＋１の状態ツリーにおける）が、他の子ノードは、前のブロックからマッピングされる。トランザクションの後、アカウントＡのアカウント残高は、状態ルートノードの下の同じノードの場所において１５イーサに更新される。次に、ＭＰＴ構造は、ツリー全体を計算する必要なく変化後の状態ツリールートの迅速な計算が可能になるので、その有用性を示す。
【００５３】
この新たなブロックを受け入れ、その中のトランザクションを確認することの一部として状態ルートノードをブロックに設けることによって、ブロックチェーンシステムを備えるすべてのブロックチェーンノードは、システム全体の状態の同じ表示に到達しなければならない。したがって、マイニングされたブロックの妥当性を検査してからそれをブロックチェーンに含めることの一部として、システムにおける各ブロックチェーンノードは、独立して新たなトランザクションおよび計算を受け（これらのトランザクションのいくつかがコントラクトを対象としている場合）、すべてのアカウントの個々の状態を更新し、同じ最終結果に到達しなければならない。
【００５４】
マークルパトリシアツリーを使用することの別の利点は、この構造の状態ルートノードがツリーに記憶されたデータに暗号学的に依存しており、したがって、状態ルートノードのハッシュをこのデータの安全な同一性として使用することができることである。イーサリアムにおけるツリーに対して実施されるあらゆる関数（配置、変更、および削除）は、決定論的暗号学的ハッシュを利用する。ブロックヘッダが状態、トランザクション、および受領ツリーのルートハッシュを含むので、任意のブロックチェーンノードは、状態全体を記憶する必要なく、イーサリアムの状態の小さな部分の妥当性を検査することができ、それにより、潜在的にサイズが無限であることができる。ツリーの状態ルートノードの固有の暗号学的ハッシュは、ツリーが改ざんされていない証拠として使用することができる。さらに、ツリーを更新することは効率的である。例えば、ブロックチェーンノードがリーフを追加、変更、または削除したい場合、ブロックチェーンノードは、同じツリーにおける経路の関連した部分を変更しなくても、リーフを変更し、次いで、それからツリーのルートまでの経路上のあらゆるノードを更新することができる。
【００５５】
トランザクションにおいて、ヘッダの状態は、頻繁に更新する必要がある。例えば、アカウントの残高およびナンスは、しばしば変更され、新たなアカウントが、頻繁に挿入され、記憶装置における鍵が、頻繁に挿入され、削除される。トランザクションの実行は、状態ツリーを更新することによって実現される。実行が成功した場合、状態ツリーの更新が提出され、それ以上の変更は行われない。実行が失敗した場合、状態ツリーは、実行前の元の状態に戻る。
【００５６】
図３Ａは、様々な実施形態による、並列処理ブロックチェーントランザクションのための例示的なステップ３００を示す。ステップ３００は、図１のシステム１００の１つまたは複数の構成要素（例えば、ノードＡ、ノード１、ノードＡとノード１との組合せ、ノード２、ノードｉ）によって実装することができる。図３Ａのあるステップを示すために、図３Ｂが、様々な実施形態による、状態ツリーの２つの複写の例示的なマージを示す。以下に提示する動作は、例示的であることが意図されている。実装形態により、例示的なステップは、様々な順序でまたは並列に実施される追加の、より少ない、または代替のステップを含むことができる。
【００５７】
ステップ３０１において、複数の候補トランザクションをマイニングのために提出することができる。候補トランザクションは、プールデータベースに記憶させることができる。
【００５８】
ステップ３０２において、候補トランザクションは、様々な独立したグループにグループ化することができる（例えば、トランザクショングループＧ１、Ｇ２、・・・、ＧＮ）。「独立した」とは、グループが互いに妨害しないことを示す可能性がある。いくつかの実施形態において、それぞれに少なくとも１つの共通のトランザクションアカウントが関与する候補トランザクションのうちの任意の２つ以上は、同じ（トランザクション）グループの下でグループ化することができ、任意の共通のトランザクションアカウントが関与しない候補トランザクションのうちの任意の２つ以上は、異なる（トランザクション）グループの下でグループ化することができる。例えば、候補トランザクションのプールでは、Ａが何かをＢに送り、Ｂが何かをＣに送り、Ｄが何かをＥに送り、ＡとＢとの間のトランザクションおよびＢとＣとの間のトランザクションは、Ｂが両方のトランザクションに関与する共通のトランザクションアカウントであるので、第１のグループの下で一緒にグループ化することができ、ＤとＥとの間のトランザクションは、ＣおよびＤが第１のグループにおける２つのトランザクションのいずれかに関与していないので、第２のグループに配置することができる。
【００５９】
ステップ３０３において、現在のブロック（ブロックチェーンの最新ブロック）の状態ツリーの少なくとも一部分の複写を作成することができる。現在のブロックの状態ツリーは、Ｔ０と表すことができ、複写は、Ｔ１、Ｔ２、．．．、ＴＮと表すことができる。複写の数は、独立したグループの数に対応することができる。例えば、状態ツリーのルートハッシュの複写を作成することができ、ルートハッシュの複写に基づいてデータベースに問合せを行うことを通じて、状態ツリーの複写を取得することができる。
【００６０】
ステップ３０４において、独立したグループは、それぞれ、複写に関連付けることができる。例えば、Ｇ１は、（Ｇ１、Ｔ１）を有するためにＴ１に関連付けられる。同様に、（Ｇ２、Ｔ２）．．．（ＧＮ、ＴＮ）を取得することができる。
【００６１】
ステップ３０５において、各独立したグループＧｉにおけるトランザクションは、関連付けられた複写Ｔｉに基づいて実行される。実行により、状態ツリーの関連付けられた複写は、グループに対して更新される。各トランザクションが各グループ内で実行されたとき、状態ツリーの対応する複写は、更新され（成功トランザクションの場合）、または元の状態に戻される（失敗したトランザクションの場合）。ツリー構造において、親ノードは、その子ノードに基づいて更新することができる。図３Ａおよび図３Ｂにおいて、同じ複写の背景は、トランザクション実行の完了を示すために薄黒くなっている。
【００６２】
いくつかの実施形態において、更新は、上位レベルのノードではなく、下位レベルのノードに適用することができる（異なるレベルのノードについては図２参照）。下位レベルのノードは、アカウントに対するいずれかの追加、削除、および変更などのアカウント変化、および残高変化などのアカウント内の変化を捉えることができる。状態ルートノードに至る上位レベルのノードは、次のステップにおいて更新することができる。例えば、図３Ｂを参照すると、Ｇ１が複写１に関連付けられ、Ｇ２が複写２に関連付けられる。図３Ｂは、それぞれＧ１およびＧ２に基づいて更新されたそれらの状態ツリーの複写を有する複写１および複写２を示す。薄黒くなったセルは、トランザクション実行において更新されたノードを表す。複写１および複写２において、ノードＫ１、ノードＫ２、および状態ルートノードは、マージステップまで更新する必要がない可能性がある上位レベルのノードである。複写１において、アカウントＢは３５０から３００に更新されており、アカウントＡは更新されていない。複写２において、アカウントＡは１０から１５に更新されており、アカウントＢは更新されていない。リーフノードにおける更新は、上方に伝搬して、上にあるノードを更新することができる。複写１および２はマージされて、次のステップ３０６において、マージされた状態ツリーを取得する。マージされた状態ツリーにおいて、アカウントＡおよびアカウントＢの更新は組み合わされる。さらに、Ｋ１がＫ３に更新され、Ｋ２がＫ４に更新され、状態ルートノードが新たな状態ルートノードに更新されるので、上位レベルのノードへの更新は、伝搬することができる。
【００６３】
代替案として、いくつかの実施形態において、複写の状態ルートノードを含む上位レベルのノードは、更新することができ、上位レベルのノードは、次のマージステップの間に再度更新することができる。例えば、複写１および複写２の状態ツリーの複写を、それぞれ、Ｇ１およびＧ２に基づいて状態ルートノードまでずっと更新することができ、複写１に対して更新された状態ルートノード１および複写２に対して更新された状態ルートノード２を取得することができる。更新された状態ルートノード１および更新された状態ルートノード２（および、より多くのトランザクショングループがあるとき同様の更新された状態ルートノード）を次のステップに使用して、データベースに問合せを行うことによってそれらのそれぞれのリーフノードを取得し、次いで、リーフノードを組み合わせ、上方に伝搬して、新たな状態ルートノードを取得することができる。
【００６４】
ステップ３０６において、すべてのＮグループが実行された後、状態ツリーの更新された複写は、新たな状態ツリーＴ０にマージされる。一例において、状態ツリーの更新された複写をマージするために、ステップ３０５において更新されたノード（例えば、リーフノードおよび／または中間ノード）は、状態ツリーＴ０に組み込むことができる（例えば、古いノード値の更新、新たなノード／アカウントの追加、古いノード／アカウントの削除）。元のグループ化はグループが独立していることを確実にするので、マージは、ステップ３０５において実施された更新を変化させない。マージ後、リーフノードは、新たな状態ルートノードに達するまで上方に伝搬して、親ノードを取得するなどすることができる。例えば、上位レベルのノードは、ブロックチェーンに追加するべき次のブロックの状態ルートノードを生成するように更新することができる。新たな状態ツリー全体は、新たな状態ルートノードに基づいてデータベースに問合せを行うことによって取得することもできる。状態ツリーがＭＰＴであるので、状態ルートノードは、ノード値に基づいて決定され、データ更新の順序には無関係である。グループ化が正しい限り、次のブロックの状態ルートノードは、正確におよび迅速に取得することができる。
【００６５】
図４は、様々な実施形態による、リプレーアタックを検知するための例示的な方法４００の流れ図を示す。方法４００は、図１のシステム１００の１つまたは複数の構成要素（例えば、ノードＡ、ノード１、ノードＡとノード１との組合せ、ノード２、ノードｉ）によって実装することができる。方法４００は、１つまたは複数のブロックチェーンノードによって実装することができる。方法４００は、システムまたはデバイス（例えば、コンピュータ、サーバ）によって実装することができる。システムまたはデバイスは、１つまたは複数のプロセッサと、１つまたは複数のプロセッサに結合され、システムまたはデバイス（例えば、プロセッサ）に方法４００を実施させる、１つまたは複数のプロセッサによって実行可能な命令を用いて構成された１つまたは複数の非一時的コンピュータ可読記憶媒体（例えば、１つまたは複数のメモリ）と、を備えることができる。以下に提示する方法４００の動作は、例示的であることが意図されている。実装形態により、例示的な方法４００は、様々な順序でまたは並列に実施される追加の、より少ない、または代替のステップを含むことができる。
【００６６】
ブロック４４１は、ブロックチェーンに追加するための複数の候補トランザクションを取得するステップを含む。例えば、様々な軽量ノードは、候補トランザクションを様々なフルノードに提出して、検証およびブロックチェーンへの追加を要求することができる。
【００６７】
ブロック４４２は、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップを含む。いくつかの実施形態において、１つまたは複数のトランザクショングループは、独立したトランザクショングループである。いくつかの実施形態において、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップは、それぞれに１つまたは複数のトランザクショングループのうちの同じトランザクショングループの下で少なくとも１つの共通のトランザクションアカウントが関与する候補トランザクションのうちの２つ以上をグループ化するステップを含む。例えば、独立したトランザクショングループのうちの１つまたは複数のそれぞれは、別の独立したトランザクショングループにおける別の候補トランザクションによって影響される候補トランザクションを含まない。例えば、それぞれに同じトランザクションアカウントが関与する任意の２つの候補トランザクションは、同じトランザクショングループの下でグループ化することができる。いくつかの実施形態において、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するステップは、１つまたは複数のトランザクショングループのうちの異なるトランザクショングループの下で任意の共通のトランザクションアカウントが関与しない候補トランザクションのうちの２つ以上をグループ化するステップを含む。例えば、独立したトランザクショングループのうちの１つまたは複数のそれぞれは、完全に異なるトランザクションアカウントが関与する２つの候補トランザクションを含まない。例えば、完全に異なるトランザクションアカウントが関与する任意の２つの候補トランザクションは、異なるトランザクショングループの下でグループ化することができる。
【００６８】
ブロック４４３は、ブロックチェーンの最新ブロックのデータ構造（例えば、状態ツリー）の少なくとも一部分の１つまたは複数の複写を作成するステップを含む。いくつかの実施形態において、データ構造は、状態ツリーまたは別の同様のデータ構造を備えることができる。データ構造の一部分は、状態ツリーの状態ルートノードを備えることができ、または状態ツリーの下位レベルのノードを備えることができる。状態ツリーでは、状態ツリーを表すのに状態ルートノードを使用することができる。状態ツリーの中間およびリーフノードは、状態ルートノードに基づいてデータベースに問合せを行うことによって取得することができる。したがって、データ構造の複写またはデータ構造の一部分は、（１）状態ルートノードの複写、（２）状態ルートノードの複写およびデータ構造の別の部分、（３）データ構造の完全な複写などを表すことができる。
【００６９】
いくつかの実施形態において、ブロックチェーンは、アカウント／残高モデルに基づいており、データ構造は、最新ブロックに記憶された単一の状態ルートノードと、最新ブロックに記憶されていない複数の中間ノードおよびリーフノードと、を備えるマークルパトリシアツリーを備える。
【００７０】
ブロック４４４は、１つまたは複数のトランザクショングループをそれぞれデータ構造（例えば、状態ツリー）の１つまたは複数の複写に関連付けるステップを含む。例えば、トランザクショングループは、それぞれ、最新ブロックの状態ルートノードの複写に関連付けることができる。完全な複写の状態ツリーは、データベースに問合せを行うことによって取得することができる。
【００７１】
ブロック４４５は、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造（例えば、状態ツリー）の関連付けられた複写を更新するステップを含む。例えば、データ構造（例えば、状態ツリー）の関連付けられた複写は、トランザクショングループのそれぞれにおける候補トランザクションを実行するように更新することができる。いくつかの実施形態において、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するステップは、並列に、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するステップを含む。
【００７２】
いくつかの実施形態において、対応するトランザクショングループにおける候補トランザクションを実行するステップは、対応するトランザクショングループにおける候補トランザクションをマルチコアプロセッサによって実行するステップを含む。すなわち、トランザクショングループは、並列に、例えば、マルチコアプロセッサによって処理することができる。各コアには、１つのトランザクショングループを処理する権限が委譲される可能性がある。各トランザクショングループを処理するステップは、データ構造の関連付けられた複写を更新することによってトランザクショングループにおける候補トランザクションを処理するステップを含むことができる。したがって、トランザクショングループを並列に処理するステップは、全体の処理速度を顕著に増加させることができる。
【００７３】
いくつかの実施形態において、データ構造の関連付けられた複写を更新するステップは、データ構造の関連付けられた複写のうちの１つにおけるトランザクションアカウントの残高を更新するステップ、トランザクションアカウントを除去するステップ、および／または新たなトランザクションアカウントを追加するステップを含む。更新は、本明細書に開示する様々なデータ構造ノードの様々な他の変化を含むことができる。
【００７４】
ブロック４４６は、ブロックチェーンに追加するべき新たなブロックの新たなデータ構造（例えば、新たな状態ツリー）の少なくとも一部分を取得するためにデータ構造の更新された複写をマージするステップを含む。例えば、新たなデータ構造の一部分は、新たな状態ルートノードを備えることができる。取得した新たなデータ構造は、ブロックチェーンに追加するための新たなブロックに含めるために新たな状態ルートノードを有する。いくつかの実施形態において、データ構造の更新された複写をマージするステップは、データ構造の更新された複写において行われた更新の少なくとも一部分を組み合わせ、組み込むことによって、ブロックチェーンの最新ブロックのデータ構造の少なくとも一部分を更新するステップを含む。図３Ａおよび図３Ｂを参照して論じたように、データ構造の様々な複写の変化は、新たなデータ構造の少なくとも一部分を生成するためにマージすることができる。リーフノードから中間ノードおよび上方に更新することによって、新たな状態ルートノードを取得することができる。
【００７５】
任意選択のブロック４４７は、新たなブロックをブロックチェーンに追加するステップを含む。新たなデータ構造の一部分は、新たな状態ルートノードを備え、新たなブロックは、新たな状態ルートノードを備える。
【００７６】
図５は、いくつかの実施形態による、ブロックチェーンコントラクトを実行するためのシステム５１０のブロック図を示す。システム５１０（例えば、コンピュータシステム）は、ノード１、ノード２、ノードＡ、ノードＢの実装形態の例、または同様のデバイス、またはノードのうちのいずれかと追加のデバイス（例えば、ノード１およびノードＡ）との組合せでもよい。例えば、方法４００は、システム５１０によって実装することができる。システム５１０は、１つまたは複数のプロセッサと、１つまたは複数のプロセッサに結合され、システムまたはデバイス（例えば、プロセッサ）に上記の方法および動作、例えば、方法４００を実施させる、１つまたは複数のプロセッサによって実行可能な命令を用いて構成された１つまたは複数の非一時的コンピュータ可読記憶媒体（例えば、１つまたは複数のメモリ）と、を備えることができる。システム５１０は、命令（例えば、ソフトウェア命令）に対応する様々なユニット／モジュールを備えることができる。
【００７７】
いくつかの実施形態において、システム５１０は、並列処理ブロックチェーントランザクションのための装置と称することができる。装置は、ブロックチェーンに追加するための複数の候補トランザクションを取得するための取得モジュール５１１と、候補トランザクションを１つまたは複数のトランザクショングループにグループ化するためのグループ化モジュール５１２と、ブロックチェーンの最新ブロックのデータ構造の少なくとも一部分の１つまたは複数の複写を作成するための作成モジュール５１３と、１つまたは複数のトランザクショングループをそれぞれデータ構造の１つまたは複数の複写に関連付けるための関連付けモジュール５１４と、トランザクショングループのそれぞれにおける候補トランザクションを実行し、データ構造の関連付けられた複写を更新するための実行モジュール５１５と、ブロックチェーンに追加するべき新たなブロックの新たなデータ構造の少なくとも一部分を取得するためにデータ構造の更新された複写をマージするためのマージングモジュール５１６と、を備える。任意選択で、装置は、新たなブロックをブロックチェーンに追加するための追加モジュール５１７をさらに備えることができ、新たなデータ構造の一部分は、新たな状態ルートノードを備え、新たなブロックは、新たな状態ルートノードを備える。
【００７８】
本明細書に説明する技法は、１つまたは複数の専用コンピューティングデバイスによって実装される。専用コンピューティングデバイスは、デスクトップコンピュータシステム、サーバコンピュータシステム、ポータブルコンピュータシステム、ハンドヘルドデバイス、ネットワーキングデバイスまたは任意の他のデバイスまたは技法を実装するために配線および／またはプログラム論理を組み込んだデバイスの組合せでもよい。専用コンピューティングデバイスは、パーソナルコンピュータ、ラップトップ、携帯電話、カメラ付き携帯電話、スマートフォン、パーソナルデジタルアシスタント、メディアプレーヤー、ナビゲーションデバイス、電子メールデバイス、ゲーム機、タブレットコンピュータ、ウェアラブルデバイス、またはその組合せとして実装することができる。コンピューティングデバイスは、一般に、オペレーティングシステムソフトウェアによって制御され、調整される。従来のオペレーティングシステムは、とりわけ、実行のためにコンピュータプロセスを制御し、スケジュールし、メモリ管理を実施し、ファイルシステム、ネットワーキング、Ｉ／Ｏサービスを提供し、グラフィカルユーザインターフェース（「ＧＵＩ」）などのユーザインターフェース機能を提供する。本明細書に説明する様々なシステム、装置、記憶媒体、モジュール、およびユニットは、専用コンピューティングデバイス、または１つまたは複数の専用コンピューティングデバイスの１つまたは複数のコンピューティングチップに実装することができる。いくつかの実施形態において、本明細書に説明する命令は、専用コンピューティングデバイス上の仮想マシンに実装することができる。実行されたとき、命令により、専用コンピューティングデバイスは、本明細書に説明する様々な方法を実施することができる。仮想マシンは、ソフトウェア、ハードウェア、またはその組合せを含むことができる。
【００７９】
図６は、本明細書に説明する実施形態のいずれかを実装することができるコンピュータシステム６００を示すブロック図である。システム６００は、本明細書に説明する方法のうちのいずれか（例えば、方法４００）を実施することができる。システム６００は、本明細書に説明するシステムのうちのいずれか（例えば、システム１００または５１０）に実装することができる。システム６００は、本明細書に説明するノードのうちのいずれかに実装し、並列処理ブロックチェーントランザクションのための対応するステップを実施するように構成することができる。コンピュータシステム６００は、バス６０２または情報を通信するための他の通信機構、情報を処理するためにバス６０２に結合された１つまたは複数のハードウェアプロセッサ６０４を含む。ハードウェアプロセッサ６０４は、例えば、１つまたは複数の汎用マイクロプロセッサでもよい。
【００８０】
コンピュータシステム６００は、プロセッサ６０４によって実行可能な情報および命令を記憶するためにバス６０２に結合されたランダムアクセスメモリ（ＲＡＭ）、キャッシュおよび／または他の動的記憶デバイスなどのメインメモリ６０６も含む。メインメモリ６０６は、プロセッサ６０４によって実行可能な命令の実行中に一時変数または他の中間情報を記憶するために使用することもできる。そのような命令は、プロセッサ６０４にアクセス可能な記憶媒体に記憶されたとき、コンピュータシステム６００を、命令に指定された動作を実施するようにカスタマイズされる専用マシンにする。コンピュータシステム６００は、プロセッサ６０４のために静的情報および命令を記憶するためのバス６０２に結合された読出し専用メモリ（ＲＯＭ）６０８または他の静的記憶デバイスをさらに含む。磁気ディスク、光ディスク、またはＵＳＢサムドライブ（フラッシュドライブ）などの記憶装置６１０が、提供され、情報および命令を記憶するためにバス６０２に結合される。
【００８１】
コンピュータシステム６００は、コンピュータシステムと組み合わせて、コンピュータシステム６００を専用マシンにさせる、またはそのようにプログラムする、カスタマイズされた配線論理、１つまたは複数のＡＳＩＣもしくはＦＰＧＡ、ファームウェアおよび／またはプログラム論理を使用して本明細書に説明する技法を実装することができる。一実施形態によれば、本明細書に説明する動作、方法、およびプロセスは、メインメモリ６０６に含まれる１つまたは複数の命令の１つまたは複数のシーケンスを実行するプロセッサ６０４に応答してコンピュータシステム６００によって実施される。そのような命令は、記憶装置６１０などの別の記憶媒体からメインメモリ６０６に読み込むことができる。メインメモリ６０６に含まれる命令のシーケンスの実行により、プロセッサ６０４は、本明細書に説明するプロセスステップを実施する。代替実施形態において、配線回路をソフトウェア命令の代わりにまたはそれと組み合わせて使用することができる。
【００８２】
メインメモリ６０６、ＲＯＭ６０８、および／または記憶装置６１０は、非一時的記憶媒体を含むことができる。「非一時的媒体」という用語および同様の用語は、本明細書では、マシンに具体的なやり方で動作させるデータおよび／または命令を記憶する媒体を表し、媒体は一時的信号を除外する。そのような非一時的媒体は、不揮発性媒体および／または揮発性媒体を含むことができる。不揮発性媒体は、例えば、記憶装置６１０などの光または磁気ディスクを含む。揮発性媒体は、メインメモリ６０６などの動的メモリを含む。非一時的媒体の共通の形態は、例えば、フロッピディスク、フレキシブルディスク、ハードディスク、半導体ドライブ、磁気テープ、もしくは任意の他の磁気データ記憶媒体、ＣＤ−ＲＯＭ、任意の他の光データ記憶媒体、穿孔パターンを有する任意の物理的媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、ＮＶＲＡＭ、任意の他のメモリチップもしくはカートリッジ、およびそのネットワーク化されたバージョンを含む。
【００８３】
コンピュータシステム６００は、バス６０２に結合されたネットワークインターフェース６１８も含む。ネットワークインターフェース６１８は、１つまたは複数のローカルネットワークに接続される１つまたは複数のネットワークリンクに結合する双方向データ通信を提供する。例えば、ネットワークインターフェース６１８は、総合デジタル通信網（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、または対応する種類の電話線とのデータ通信接続を提供するモデムでもよい。別の例として、ネットワークインターフェース６１８は、互換性のあるＬＡＮ（またはＷＡＮと通信するＷＡＮ構成要素）とのデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードでもよい。無線リンクを実装することもできる。任意のそのような実装形態において、ネットワークインターフェース６１８は、様々な種類の情報を表すデジタルデータストリームを搬送する電気、電磁気、または光信号を送り、受け取る。
【００８４】
コンピュータシステム６００は、ネットワーク、ネットワークリンクおよびネットワークインターフェース６１８を通じてメッセージを送り、プログラムコードを含むデータを受け取ることができる。インターネット例において、サーバが、インターネット、ＩＳＰ、ローカルネットワークおよびネットワークインターフェース６１８を通じてアプリケーションプログラムのための要求されたコードを伝送する可能性がある。
【００８５】
受け取ったコードは、受け取ったときに、プロセッサ６０４によって実行し、および／または後で実行するために記憶装置６１０、または他の不揮発性記憶装置に記憶することができる。
【００８６】
前節に説明したプロセス、方法、およびアルゴリズムのそれぞれは、コンピュータハードウェアを備える１つまたは複数のコンピュータシステムまたはコンピュータプロセッサによって実行されるコードモジュールにおいて具現化し、およびそれによって完全にまたは部分的に自動化することができる。プロセスおよびアルゴリズムは、特定用途向け回路に部分的にまたは全体的に実装することができる。
【００８７】
上記の様々な特徴およびプロセスは、互いに独立して使用することができ、または様々なやり方で組み合わせることができる。すべての可能な組合せおよび部分的組合せは、本明細書の範囲内に含まれることが意図されている。さらに、ある方法またはプロセスブロックは、いくつかの実装形態において省略することができる。本明細書に説明する方法およびプロセスは、やはり任意の特定のシーケンスに限定されず、それに関連したブロックまたは状態は、適当である他のシーケンスで実施することができる。例えば、説明したブロックまたは状態は、具体的に開示したもの以外の順序で実施することができ、または複数のブロックもしくは状態は、単一のブロックもしくは状態で組み合わせることができる。ブロックもしくは状態の例は、直列に、並列に、または何らかの他のやり方で実施することができる。ブロックもしくは状態は、開示した実施形態に追加し、またはそれから除去することができる。本明細書に説明したシステムおよび構成要素の例は、説明したのとは異なって構成することができる。例えば、要素は、開示した実施形態に追加し、それから除去し、またはそれと比較して再配列することができる。
【００８８】
本明細書に説明した方法の様々な動作は、少なくとも部分的に、関連動作を実施するために一時的に構成される（例えば、ソフトウェアによって）または恒久的に構成される１つまたは複数のプロセッサによって実施することができる。一時的に構成されるか、または恒久的に構成されるかにかかわらず、そのようなプロセッサは、本明細書に説明した１つまたは複数の動作または機能を実施するように動作するプロセッサ実装エンジンを構成することができる。
【００８９】
同様に、本明細書に説明した方法は、少なくとも部分的にプロセッサに実装することができ、特定のプロセッサは、ハードウェアの例である。例えば、方法の動作の少なくともいくつかは、１つまたは複数のプロセッサまたはプロセッサ実装エンジンによって実施することができる。さらに、１つまたは複数のプロセッサは、「クラウドコンピューティング」環境における、または「サービスとしてのソフトウェア」（ＳａａＳ）としての関連動作の性能をサポートするように動作することもできる。例えば、動作のうちの少なくともいくつかは、コンピュータのグループ（プロセッサを含むマシンの例として）によって実施することができ、これらの動作は、ネットワーク（例えば、インターネット）を介して、および１つまたは複数の適当なインターフェース（例えば、アプリケーションプログラムインターフェース（ＡＰＩ））を介して利用可能である。
【００９０】
動作のうちのいくつかの性能は、単一のマシン内に常駐するだけでなく、いくつかのマシンにわたって配備して、プロセッサ間で分散させることができる。いくつかの実施形態において、プロセッサまたはプロセッサ実装エンジンは、単一の地理的場所（例えば、家庭環境、オフィス環境、またはサーバファーム内）に配置することができる。他の実施形態において、プロセッサまたはプロセッサ実装エンジンは、いくつかの地理的場所にわたって分散させることができる。
【００９１】
本明細書全体を通して、複数のインスタンスは、単一のインスタンスとして説明した構成要素、動作、または構造を実装することができる。１つまたは複数の方法の個々の動作を別々の動作として示し、説明したが、個々の動作のうちの１つまたは複数は、同時に実施することができ、示した順序で動作が実施されることは必要としない。構成において別々の構成要素として提示した構造および機能は、組み合わせた構造または構成要素として実装することができる。同様に、単一の構成要素として提示した構造および機能は、別々の構成要素として実装することができる。これらのおよび他の変形、変更、追加、および改善は、本明細書における主題の範囲内に含まれる。さらに、本明細書に使用した、関連した用語（「第１の（ｆｉｒｓｔ）」、「第２の（ｓｅｃｏｎｄ）」、「第３の（ｔｈｉｒｄ）」など）は、任意の順序、高さ、または重要性を表さず、むしろ、１つの要素を別の要素と区別するのに使用される。さらに、「１つの（ａ）」、「１つの（ａｎ）」、および「複数（ｐｌｕｒａｌｉｔｙ）」という用語は、本明細書における数量の制限を表さず、むしろ、記述した物品の少なくとも１つの存在を表す。
【００９２】
主題の概要を具体的な実施形態を参照して説明してきたが、本明細書の実施形態のより広い範囲から逸脱することなく、様々な変更および変化をこれらの実施形態に加えることができる。詳細な説明は、限定的な意味で理解してはならず、様々な実施形態の範囲は、添付の特許請求の範囲が権利を有する同等物の全範囲とともに、そのような特許請求の範囲だけによって定義される。
【図１】
0006955026.tif 000002
【図２】
0006955026.tif 000003
【図３Ａ】
0006955026.tif 000004
【図３Ｂ】
0006955026.tif 000005
【図４】
0006955026.tif 000006
【図５】
0006955026.tif 000007
【図６】
0006955026.tif 000008