(57)【要約】【課題】ブロックチェーンにおいてスナップショットを管理する方法、システムおよびコンピュータ・プログラムを提供する。【解決手段】複数の第１のノードの１つから、第１の時点における共通データと、第１の時点とは異なる第２の時点における共通データとの間の差を取得することと、上記差に基づいて第１の時点における共通データの第１のスナップショットを生成することと、複数の第１のノードの１つから第１の時点における共通データのハッシュを取得することと、第１の時点における共通データのハッシュによって第１の時点における第１のスナップショットを検証することとによって、検証されたスナップショットが生成される。【選択図】図１
2020520499.tif 000002
【特許請求の範囲】
【請求項１】
複数の第１のノードの少なくとも１つの第１のノードから、第１の時点における共通データと、前記第１の時点とは異なる第２の時点における共通データとの間の差を取得することと、
前記差に基づいて前記第１の時点における前記共通データの第１のスナップショットを生成することと、
前記複数の第１のノードの少なくとも１つから前記第１の時点における前記共通データのハッシュを取得することと、
前記第１の時点における前記共通データの前記ハッシュによって前記第１の時点における前記第１のスナップショットを検証することと
を含む、方法。
【請求項２】
スナップショット・ノードによって、様々な時点における前記共通データの複数のスナップショットを格納することをさらに含む、請求項１に記載の方法。
【請求項３】
コンピュータ・プログラム製品であって、非一過性のコンピュータ可読記憶媒体またはプログラマブル回路上で具現化される命令を有し、前記命令は、請求項１に記載の方法をプロセッサまたはプログラマブル回路に実行させるために、それぞれ前記プロセッサまたは前記プログラマブル回路によって実行可能である、コンピュータ・プログラム製品。
【請求項４】
前記動作が、様々な時点における前記共通データの複数のスナップショットを格納することをさらに含む、請求項３に記載のコンピュータ・プログラム製品。
【請求項５】
前記第１の時点における前記共通データの前記第１のスナップショットが、さらに前記第２の時点における第２のスナップショットに基づいて生成される、請求項４に記載のコンピュータ・プログラム製品。
【請求項６】
前記差が、前記第１の時点と前記第２の時点との間でなされた少なくとも１つの共通トランザクションによる、前記共通データの更新に由来する、請求項５に記載のコンピュータ・プログラム製品。
【請求項７】
前記第１の時点が最新の時点である、請求項５に記載のコンピュータ・プログラム製品。
【請求項８】
前記動作が、
前記第１の時点における前記共通データの前記第１のスナップショットのハッシュを計算すること
をさらに含み、
前記第１のスナップショットを検証することは、前記第１のスナップショットの前記ハッシュが、前記第１の時点における前記共通データの前記ハッシュと同じであるかどうかを判定することを含む、
請求項３に記載のコンピュータ・プログラム製品。
【請求項９】
前記動作が、
前記第１のスナップショットの前記ハッシュが、前記第１の時点における前記共通データの前記ハッシュと同じであると判定したことに応答して、前記第１の時点における前記共通データの前記第１のスナップショットを格納すること
をさらに含む、請求項８に記載のコンピュータ・プログラム製品。
【請求項１０】
前記動作が、
前記第１のスナップショットの前記ハッシュが、前記第１の時点における前記共通データの前記ハッシュと同じでないと判定したことに応答して、前記複数の第１のノードの少なくとも１つの別の第１のノードから、前記第１の時点における前記共通データと前記第２の時点における前記共通データとの間の差を取得すること
をさらに含む、請求項８に記載のコンピュータ・プログラム製品。
【請求項１１】
前記動作が、
前記第１の時点における共通データの複数のハッシュが同じであるかどうかを判定すること
をさらに含み、
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第１の時点における前記共通データの前記ハッシュを取得することが、前記第１のノードの２つ以上から、前記第１の時点における前記共通データの前記複数のハッシュを取得することを含む、
請求項３に記載のコンピュータ・プログラム製品。
【請求項１２】
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第１の時点における前記共通データの前記ハッシュを取得することが、前記複数の第１のノードによって合意が形成された、前記第１の時点における前記共通データの前記ハッシュを取得することを含む、請求項３に記載のコンピュータ・プログラム製品。
【請求項１３】
スナップショット・ノードであって、
請求項３に記載の前記コンピュータ・プログラム製品と、
前記コンピュータ・プログラム製品において具現化された前記命令を実行するプロセッサまたはプログラマブル回路と
を含む、スナップショット・ノード。
【請求項１４】
様々な時点における前記共通データの複数のスナップショットを格納するためのメモリをさらに含む、請求項１３に記載のスナップショット・ノード。
【請求項１５】
システムであって、
請求項１３に記載の前記スナップショット・ノードと、
前記複数の第１のノードであって、
前記共通データを格納すること、および
前記共通データを共通トランザクションによって更新すること
を行うように集合的に構成された、前記複数の第１のノードと
を含む、システム。
【請求項１６】
様々な時点における共通データの複数のスナップショットを格納するスナップショット・ノードから第３の時点のスナップショットを受け取ることと、
前記第３の時点の前記スナップショットのハッシュを計算することと、
前記共通データを格納する複数の第１のノードの少なくとも１つの第１のノードから、前記第３の時点における共通データのハッシュを受け取り、前記複数の第１のノードによって、前記共通データを共通トランザクションを用いて更新することと、
前記第３の時点における前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じであるかどうかを判定することと
を含む、方法。
【請求項１７】
コンピュータ・プログラム製品であって、非一過性のコンピュータ可読記憶媒体またはプログラマブル回路上で具現化される命令を有し、前記命令は、請求項１６に記載の方法をプロセッサまたはプログラマブル回路に実行させるために、それぞれ前記プロセッサまたは前記プログラマブル回路によって実行可能である、コンピュータ・プログラム製品。
【請求項１８】
前記動作が、
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第３の時点と第４の時点との間で少なくとも１つの共通トランザクションを受け取ることと、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じであると判定したことに応答して、前記第３の時点における前記共通データの前記スナップショットおよび前記少なくとも１つの共通トランザクションに基づいて、前記第４の時点における前記共通データを生成することと
をさらに含む、請求項１７に記載のコンピュータ・プログラム製品。
【請求項１９】
前記第３の時点が前記第４の時点の前である、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２０】
前記動作が、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じでないと判定したことに応答して、前記スナップショット・ノードから、前記第３の時点の前の第５の時点におけるスナップショットを受け取ることと、
前記複数の第１のノードの少なくとも１つから、前記第５の時点における前記共通データのハッシュを受け取ることと
をさらに含む、請求項１９に記載のコンピュータ・プログラム製品。
【請求項２１】
前記第３の時点が前記第４の時点の後にある、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２２】
前記動作が、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じでないと判定したことに応答して、前記スナップショット・ノードから、前記第３の時点の後の第６の時点におけるスナップショットを受け取ることと、
前記複数の第１のノードの少なくとも１つから、前記第６の時点における前記共通データのハッシュを受け取ることと
をさらに含む、請求項１９に記載のコンピュータ・プログラム製品。
【請求項２３】
オーディタ・ノードであって、
請求項１７に記載の前記コンピュータ・プログラム製品と、
前記コンピュータ・プログラム製品において具現化された前記命令を実行するプロセッサまたはプログラマブル回路と
を含む、オーディタ・ノード。
【請求項２４】
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第３の時点と第４の時点との間で少なくとも１つの共通トランザクションを受け取ることと、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じであると判定したことに応答して、前記第３の時点における前記共通データの前記スナップショットおよび前記少なくとも１つの共通トランザクションに基づいて、前記第４の時点における前記共通データを生成することと
を含む、請求項２３に記載のオーディタ・ノード。
【請求項２５】
システムであって、
請求項２３に記載の前記オーディタ・ノードと、
前記複数の第１のノードであって、
前記共通データを格納すること、および
前記共通データを共通トランザクションによって更新すること
を行うように集合的に構成された、前記複数の第１のノードと、
前記スナップショット・ノードであって、様々な時点における前記共通データの複数のスナップショットを格納するように構成された、前記スナップショット・ノードと
を含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックチェーンにおけるスナップショットの管理に関する。
【背景技術】
【０００２】
いくつかのブロックチェーンの実装形態では、ブロックチェーン構造（fabric）のノードは各々、共通データ・セット（「ワールド・ステート」または「台帳」などと呼ばれることがある）の同一のコピーを有する。たとえば、ブロックチェーン構造内にＮ個のノードが存在するとき、Ｎ個のノードは、それぞれのデータベース内に共通データのＮ個のコピーを有する。
【０００３】
場合によっては、オーディタは、トランザクションの正確性および妥当性を確認する必要がある場合がある。オーディタは、確認プロセスにおいて様々な時点における共通データ・セットにアクセスする必要がある場合がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、指定された時点における共通データ・セットを取得するための現行の方法は、多くの計算資源を必要とする点で欠点を有する。
【課題を解決するための手段】
【０００５】
本発明の一実施形態では、コンピュータ・プログラム製品は、複数の第１のノードの少なくとも１つから、第１の時点における共通データと、第１の時点とは異なる第２の時点における共通データとの間の差を取得することと、上記差に基づいて第１の時点における共通データの第１のスナップショットを生成することと、複数の第１のノードの少なくとも１つから第１の時点における共通データのハッシュを取得することと、第１の時点における共通データのハッシュによって第１の時点における第１のスナップショットを検証することとを含む動作を、プロセッサまたはプログラマブル回路に実行させるために、それぞれプロセッサまたはプログラマブル回路によって実行可能な、非一過性のコンピュータ可読媒体またはプログラマブル回路上で具現化される命令を含む。一実施形態では、スナップショット・ノードは、より少ない計算資源によって第１の時点の正しいスナップショットを生成する場合がある。
【０００６】
本発明の一実施形態によれば、上記動作は、様々な時点における共通データの複数のスナップショットを格納することをさらに含む。スナップショット・ノードは、共通データの履歴を格納することができる。
【０００７】
本発明の一実施形態では、上記動作は、第１の時点における共通データの複数のハッシュが同じであるかどうかを判定することをさらに含み、複数の第１のノードの少なくとも１つから第１の時点における共通データのハッシュを取得することは、第１のノードの２つ以上から第１の時点における共通データの複数のハッシュを取得することを含む。一実施形態によれば、スナップショット・ノードは、新しく生成されたスナップショットを検証するための予め検証されたハッシュを使用することができる。
【０００８】
一実施形態によれば、スナップショット・ノードは、コンピュータ・プログラム製品と、スナップショット・ノードおよび複数の第１のノードを含むシステムと、スナップショット・ノードまたはシステムによって実行される方法とを含む。
【０００９】
本発明の一実施形態によれば、コンピュータ・プログラム製品は、スナップショット・ノード(snapshot node)から第１の時点のスナップショットを受け取ることと、第１の時点のスナップショットのハッシュを計算することと、複数の第１のノードの少なくとも１つから、第１の時点における、複数の第１のノードに格納された共通データのハッシュを受け取ることと、第１の時点のスナップショットのハッシュが、第１の時点における共通データのハッシュと同じであるかどうかを判定することとを含む動作を、プロセッサまたはプログラマブル回路に実行させるために、それぞれプロセッサまたはプログラマブル回路によって実行可能な、非一過性のコンピュータ可読媒体またはプログラマブル回路上で具現化される命令を含む。一実施形態によれば、オーディタ・ノード（auditor node）は、第１のノードから受け取ったハッシュによって、スナップショット・ノードから受け取ったスナップショットの正確性を確認することができる。
【００１０】
本発明の一実施形態によれば、上記動作は、複数の第１のノードの少なくとも１つから、第１の時点と第２の時点との間で少なくとも１つの共通トランザクションを受け取ることと、第１の時点のスナップショットのハッシュが、第１の時点における共通データのハッシュと同じであると判定したことに応答して、第１の時点における共通データのスナップショットおよび少なくとも１つの共通トランザクションに基づいて、第２の時点における共通データを生成することとをさらに含む。一実施形態によれば、オーディタ・ノードは、より少ない計算資源によって任意の時点の共通データを正確に復元することができる。
【００１１】
本発明の一実施形態によれば、オーディタ・ノードは、コンピュータ・プログラム製品と、オーディタ・ノードおよび複数の第１のノードを含むシステムと、オーディタ・ノードまたはシステムによって実行される方法とを含む。
【００１２】
発明の概要の節は、必ずしも本発明の実施形態のすべての特徴について説明しているわけではない。本発明の実施形態は、上述した特徴の部分的な組合せを含む場合もある。
【００１３】
以下の説明は、以下の図を参照しながら本発明の好ましい実施形態の詳細を提供する。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態による、システムの例示的な構成を示す図である。
【図２】本発明の一実施形態による、システムの第１のノードに格納された例示的なデータを示す図である。
【図３】本発明の一実施形態による、システムのスナップショット・ノードの例示的な構成を示す図である。
【図４】本発明の一実施形態による、システムのオーディタ・ノードの例示的な構成を示す図である。
【図５】本発明の一実施形態による第１の動作フローを示す図である。
【図６】本発明の一実施形態による第２の動作フローを示す図である。
【図７】本発明の一実施形態による、スナップショット・ノードの動作を示す図である。
【図８】本発明の一実施形態による、スナップショット・ノードの動作を示す図である。
【図９】本発明の一実施形態による、オーディタ・ノードの動作を示す図である。
【図１０】本発明の一実施形態による、オーディタ・ノードの動作を示す図である。
【図１１】本発明の一実施形態による、システムとして機能するコンピュータの例示的なハードウェア構成を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の例示的な実施形態について説明する。本発明の例示的な実施形態は、特許請求の範囲による発明を限定すべきでなく、本発明の実施形態において説明される特徴の組合せは、必ずしも本発明に不可欠なわけではない。
【００１６】
図１は、本発明の一実施形態による、システム１０の例示的な構成を示す。システム１０は、全体として、ブロックチェーンなどの分散型データベースである場合があり、複数のノードが、共通データを維持し、トランザクションを処理し、ブロックチェーンを拡大することができる。
【００１７】
システム１０は、本発明の以下の実施形態では、いくつかのブロックチェーン技術のうちのハイパーレジャーを実行する場合があるが、システム１０は、他のブロックチェーン技術も実行することができる。ハイパーレジャーおよび他のブロックチェーン技術に採用されるいくつかの実装形態は、以下に説明する本発明の実施形態に使用されてもよい。システム１０は、第１のノード・プール１００、スナップショット・ノード２００、およびオーディタ・ノード３００を含む。
【００１８】
第１のノード・プール１００は、共通トランザクションを格納し、共通トランザクションによって共通データを更新することができる。第１のノード・プール１００は、図１に示した、第１のノード１１０Ａ、第１のノード１１０Ｂ、および第１のノード１１０Ｃなどの複数の第１のノードを含む場合がある。第１のノード・プール１００は、ブロックチェーンを実行する場合がある。本発明の一実施形態では、第１のノード１１０Ａ〜１１０Ｃは、共通トランザクションを処理するための分散型合意アルゴリズムを実行する場合がある。
【００１９】
第１のノード１１０Ａ〜１１０Ｃは各々、ハイパーレジャーにおいて承認ピア（validating peer）または非承認ピア（non-validating peer）として実行する場合がある。第１のノード１１０Ａ〜１１０Ｃの各々は、それぞれの共通データおよびブロックチェーンを格納するためのメモリを含む場合がある。
【００２０】
スナップショット・ノード２００は、様々な時点における共通データの複数のスナップショットを格納するためのメモリを含む場合がある。スナップショットは、ある時点における共通データのコピーである。したがって、スナップショット・ノード２００は、様々な時点における共通データのコピーを格納することができる。
【００２１】
オーディタ・ノード３００は、監査のために特定の時点における共通データを取得することができる。第１のノード１１０Ａ〜１１０Ｃ、スナップショット・ノード２００、およびオーディタ・ノード３００は、コンピュータおよびデータベースによって実装される場合がある。
【００２２】
第１のノード１１０Ａ〜１１０Ｃ、スナップショット・ノード２００、およびオーディタ・ノード３００は、インターネットなどのネットワークを介して互いに通信することができる。第１のノード１１０Ａ〜１１０Ｃ、スナップショット・ノード２００、およびオーディタ・ノード３００の詳細は、図２〜図４に関して説明される。
【００２３】
本発明の一実施形態では、スナップショット２００またはオーディタ・ノード３００あるいはその両方は、第１のノード１００とは異なるノードとして実装される可能性がある。本発明の一実施形態では、第１のノード１００の一部は、少なくとも部分的にスナップショット２００またはオーディタ・ノード３００あるいはその両方として実行する場合がある。
【００２４】
図２は、本発明の一実施形態による、システム１０の第１のノード１１０に格納された例示的なデータを示す。第１のノード１１０（図１の第１のノード１１０Ａ〜１１０Ｃの１つを表す場合がある）は、ブロックチェーン構造のノード・デバイスとして動作する場合がある。
【００２５】
第１のノード１１０Ａ〜１１０Ｃは、プロセッサまたはプログラマブル回路あるいはその両方、および命令を集合的に含む１つまたは複数の非法定のコンピュータ可読記憶媒体を含む場合がある。プロセッサまたはプログラマブル回路あるいはその両方は、様々な動作を実行するための命令を実行する場合がある。プロセッサは、コンピュータ可読記憶媒体に格納された命令を実行する場合がある。プログラマブル回路は、その中にプログラミングされた命令を実行する場合がある。本発明の一実施形態では、コンピュータ可読媒体またはプログラマブル回路は、コンピュータ・プログラム製品として提供される場合がある。
【００２６】
本発明の一実施形態では、第１のノード１１０は、そのメモリ１０８内に現在の共通データ１１１および現在の共通データのハッシュ１１２を格納する場合がある。
【００２７】
第１のノード１１０は、メモリ１０８内のブロックチェーンとして複数のブロック１１３（１）〜１１３（ｎ）を格納する場合もある。各ブロックは、トランザクション１１５、トランザクション１１５のハッシュ１１７、前のブロックのハッシュ１１６、およびブロックが生成された時刻における共通データのハッシュ１１２を含む場合がある。たとえば、ブロック（ｎ）１１３（ｎ）は、前のブロック（ｎ−１）１１３（ｎ−１）が生成された後に生じたトランザクション１１５（ｎ）、トランザクション１１５（ｎ）のハッシュ１１７（ｎ）、（ｎ−１）番目のブロックのハッシュ１１６（ｎ−１）、およびブロック（ｎ）が生成された時点ｔｎにおける共通データのハッシュ１１２（ｎ）を含む。
【００２８】
本発明の一実施形態では、第１のノード１１０は、トランザクション１１５を受け取り、他の第１のノード１１０とともに合意アルゴリズムをトランザクションに適用し、ハイパーレジャーなどの別のアルゴリズムに従って合意されたトランザクション１１５によって共通データ１１１を更新する。一実施形態では、第１のノード１１０のメモリ１０８は、１つまたは複数のデータベース・デバイスによって実装される場合がある。
【００２９】
図３は、本発明の一実施形態による、システム１０のスナップショット・ノード２００の例示的な構成を示す。
【００３０】
スナップショット・ノード２００は、プロセッサまたはプログラマブル回路あるいはその両方、および命令を集合的に含む１つまたは複数のコンピュータ可読媒体を含む場合がある。命令は、プロセッサまたはプログラマブル回路によって実行されるとき、プロセッサまたはプログラマブル回路に、複数の動作セクションとして動作させる場合がある。それに関して、スナップショット・ノード２００は、格納セクション２１０、取得セクション２２０、生成セクション２３０、検証セクション２４０、計算セクション２６０、および提供セクション２９０として表される場合がある。
【００３１】
格納セクション２１０は、様々な時点における共通データの複数のスナップショットを格納することができる。本発明の一実施形態では、格納セクションは、Ｎ個の異なる時点における共通データのＮ個のスナップショットを格納することができる。
【００３２】
格納セクション２１０は、スナップショット・ノード２００の動作に使用される様々なデータ／命令を格納する場合もある。スナップショット・ノード２００における１つまたは複数の他の要素（たとえば、取得セクション２２０、生成セクション２３０、検証セクション２４０、計算セクション２６０、提供セクション２９０など）は、直接、または必要に応じて格納セクション２１０を介して、データを通信する場合がある。本発明の一実施形態では、格納セクション２１０は、スナップショットを格納するための１つもしくは複数のストレージ・ユニット、または様々なデータ／命令を格納するためのメモリ、あるいはその両方を含む。
【００３３】
取得セクション２２０は、第１のノード・プール１００から第１の時点における共通データのハッシュを取得する場合がある。本発明の一実施形態では、取得セクション２２０は、第１のノード１１０の２つ以上から第１の時点における共通データの複数のハッシュを取得する場合がある。本発明の一実施形態では、取得セクション２２０は、複数の第１のノード１１０の少なくとも１つまたはすべてから共通データの複数のハッシュを取得する場合がある。
【００３４】
取得セクション２２０は、第１のノード・プール１００から、第１の時点における共通データと、第１の時点とは異なる第２の時点における共通データとの間の差を取得することもできる。本発明の一実施形態では、取得セクション２２０は、複数の第１のノード１１０の１つまたは複数から、２つの時点における共通データ間の差を取得する場合がある。本発明の一実施形態では、取得セクション２２０は、その差としてブロック内の１つまたは複数のトランザクションを取得する場合がある。
【００３５】
生成セクション２３０は、第１の時点における共通データと、第２の時点における共通データとの間の差に基づいて、第１の時点における共通データの第１のスナップショットを生成することができる。生成セクション２３０は、さらに第２の時点における第２のスナップショットに基づいて第１のスナップショットを生成する場合がある。一実施形態では、生成セクション２３０は、第１の時点と第２の時点との間の共通データの差を、第２の時点におけるスナップショットに反映させることによって、第１のスナップショットを生成する。生成セクション２３０は、格納セクション２１０内の第１のスナップショットを格納することができる。
【００３６】
検証セクション２４０は、第１の時点における共通データのハッシュによって、第１の時点における第１のスナップショットを検証する。本発明の一実施形態では、検証セクション２４０は、第１のスナップショットのハッシュが、第１の時点における共通データのハッシュと同じであるかどうかを判定する。
【００３７】
検証セクション２４０は、複数の第１のノード１１０から取得された、第１の時点における共通データの複数のハッシュをさらに検証することができる。本発明の一実施形態では、検証セクション２４０は、第１のノード１１０から取得された、第１の時点における共通データの複数のハッシュが同じであるかどうかを判定する。
【００３８】
計算セクション２６０は、生成セクション２３０によって生成された、第１の時点における共通データの第１のスナップショットのハッシュを計算する。
【００３９】
提供セクション２９０は、オーディタ・ノード３００からある時点におけるスナップショットの要求を受け取り、格納セクション２１０からその時点のスナップショットを取り出し、要求されたスナップショットをオーディタ・ノード３００に提供する。
【００４０】
図４は、本発明の一実施形態による、システム１０のオーディタ・ノード３００の例示的な構成を示す。
【００４１】
オーディタ・ノード３００は、プロセッサまたはプログラマブル回路あるいはその両方、および命令を集合的に含む１つまたは複数の非一過性のコンピュータ可読記憶媒体を含む場合がある。これらの命令は、プロセッサまたはプログラマブル回路によって実行されるとき、プロセッサまたはプログラマブル回路に、複数の動作セクションとして動作させる場合がある。それに関して、オーディタ・ノード３００は、格納セクション３１０、受信セクション３２０、計算セクション３４０、判定セクション３６０、および生成セクション３８０として表される場合がある。
【００４２】
格納セクション３１０は、オーディタ・ノード３００の動作に使用される様々なデータ／命令を格納することもできる。オーディタ・ノード３００における１つまたは複数の他の要素（たとえば、受信セクション３２０、計算セクション３４０、判定セクション３６０、生成セクション３８０など）は、直接、または必要に応じて格納セクション３１０を介して、データを通信することができる。格納セクション３１０は、様々なデータ／命令を格納するためのメモリを含む場合がある。
【００４３】
受信セクション３２０は、スナップショット・ノード２００から第３の時点のスナップショットを受け取る場合がある。受信セクション３２０は、複数の第１のノード１１０の少なくとも１つから、第３の時点における共通データのハッシュ、および第３の時点と第４の時点との間で少なくとも１つの共通トランザクションを受け取る場合もある。本発明の一実施形態では、受信セクション３２０は、第３の時点における共通データのハッシュ、および第３の時点と第４の時点との間の共通トランザクションとして、ブロックの１つまたは複数を受け取る場合がある。
【００４４】
計算セクション３４０は、スナップショット・ノード２００から受け取った第３の時点のスナップショットのハッシュを計算する場合がある。
【００４５】
判定セクション３６０は、スナップショット・ノード２００から受け取った第３の時点のスナップショットを検証する場合がある。本発明の一実施形態では、判定セクション３６０は、計算セクション３４０によって計算された第３の時点のスナップショットのハッシュが、受信セクション３２０によって受け取られた、第３の時点における共通データのハッシュと同じであるかどうかを判定する。
【００４６】
生成セクション３８０は、第３の時点における共通データのスナップショット、および第３の時点と第４の時点との間の少なくとも１つの共通トランザクションに基づいて、第４の時点における共通データを生成する。生成セクション３８０は、第３の時点のスナップショットのハッシュが、第３の時点における共通データのハッシュと同じであると判定セクション３６０が判定したことに応答して、第４の時点における共通データを生成することができる。本発明の一実施形態では、生成セクション３８０は、共通トランザクションを、第３の時点における共通データに反映させる場合がある。
【００４７】
図５は、本発明の一実施形態による動作フローを示す。図５に示したように、スナップショット・ノード２００などのスナップショット・ノードが、Ｓ１１０からＳ１９０までの動作を実行する例について説明する。スナップショット・ノードは、Ｓ１１０〜Ｓ１９０の動作によって新しいスナップショットを格納する場合がある。
【００４８】
Ｓ１１０では、取得セクション２２０などの取得セクションは、第１のノード・プール１００などの第１のノード・プールの少なくとも１つの第１のノードから、時点ｔｎにおける共通データのハッシュを取得する場合がある。時点ｔｘにおける共通データのハッシュは、以下、「Ｈ（ＣＤ（ｔｘ））」によって表される場合がある。
【００４９】
時点ｔｎは、ブロック（ｎ）が生成された時点である。ブロック（ｎ）は、最新のブロックである場合がある。時点ｔｎは、第１の時点と呼ばれる場合がある。本発明の一実施形態では、時点ｔｎは、現在の時刻と実質的に一致する。一実施形態では、時点ｔｎは、所定の時間だけ現在の時刻の前の時刻に一致する。
【００５０】
本発明の一実施形態では、取得セクションは、第１のノード・プール内の第１のノードの２つ以上の各々からＨ（ＣＤ（ｔｎ））を取得する場合がある。一実施形態では、取得セクションは、第１のノード・プール内のすべての第１のノードからＨ（ＣＤ（ｔｎ））を取得する場合がある。本発明の一実施形態では、取得セクションは、第１のノード・プール内の１つの第１のノードからＨ（ＣＤ（ｔｎ））を取得する場合がある。
【００５１】
Ｓ１２０では、取得セクションは、取得セクションが、第１のノード・プール内の所定の数の第１のノードからＨ（ＣＤ（ｔｎ））を取得したかどうかを判定する。本発明の一実施形態では、所定の数は、第１のノード・プール内のすべての第１のノードの数である場合がある。本発明の一実施形態では、所定の数は、第１のノード・プール内の第１のノードの半分または２／３の数である場合がある。
【００５２】
この判定が肯定である場合、取得セクションは、Ｓ１３０の動作に進む。この判定が否定である場合、取得セクションは、第１のノードからＨ（ＣＤ（ｔｎ））をさらに受け取ることを待つためにＳ１１０に戻る。
【００５３】
Ｓ１３０では、検証セクション２４０などの検証セクションは、Ｓ１１０において第１のノードから取得された複数のハッシュＨ（ＣＤ（ｔｎ））を検証する。本発明の一実施形態では、検証セクションは、複数のハッシュＨ（ＣＤ（ｔｎ））のすべてが同じであるかどうかを判定する。一実施形態では、検証セクションは、所定の数よりも多い複数のハッシュＨ（ＣＤ（ｔｎ））が同じであるかどうかを判定する。本発明の一実施形態では、所定の数は、（２Ｍ＋１）／３である場合があるが、ここで、Ｍは第１のノード・プール内の第１のノードの数である。
【００５４】
Ｓ１４０では、検証セクションは、Ｓ１３０における検証が成功したか否かを判定する。検証が成功した場合、検証セクションは、格納セクション２１０などの格納セクションに検証されたハッシュＨ（ＣＤ（ｔｎ））を格納し、取得セクションをＳ１５０の動作に進ませる。検証が成功しなかった場合、検証セクションは、Ｓ１１０の動作に戻る。
【００５５】
Ｓ１５０では、取得セクションは、第１のノード・プールから、時点ｔｎにおける共通データＣＤ（ｔｎ）と、時点ｔｎ−ａにおける共通データＣＤ（ｔｎ−ａ）との間の差ΔＣＤ（ｔｎ）を取得する。時点ｔｎ−ａは、第２の時点と呼ばれる場合があり、時点ｔｎの前である場合がある。本発明の一実施形態では、時点ｔｎ−ａは、ブロック（ｎ−ａ）が生成された時点に一致する場合があるが、変数ａは、１または１よりも大きい整数である場合がある。
【００５６】
本発明の一実施形態では、差ΔＣＤ（ｔｎ）は、時点ｔｎと時点ｔｎ−ａとの間でなされた少なくとも１つの共通トランザクションによる、時点ｔｎにおける共通データの更新に由来する。
【００５７】
本発明の一実施形態では、取得セクションは、ブロック（ｎ）、ブロック（ｎ−１）、・・・、ブロック（ｎ−ａ＋１）を取得する場合がある。ブロック（ｎ）は、前のブロック（ｎ−１）が生成された時刻ｔｎ−１の後に生じた１つまたは複数のトランザクションを含み、ブロック（ｎ−１）は、ブロック（ｎ−２）が生成された時刻ｔｎ−２の後に生じた１つまたは複数のトランザクションを含み、・・・、ブロック（ｎ−ａ＋１）は、ブロック（ｎ−ａ）が生成された時刻ｔｎ−ａの後に生じた１つまたは複数のトランザクションを含む。
【００５８】
これらのトランザクションは、ＣＤ（ｔｎ）とＣＤ（ｔｎ−ａ）との間の差に一致する。取得セクションは、差ΔＣＤ（ｔｎ）として、ブロック（ｎ）、ブロック（ｎ−１）、・・・、ブロック（ｎ−ａ＋１）から、時点ｔｎと時点ｔｎ−ａとの間に生じたこれらのトランザクションを取得する場合がある。
【００５９】
本発明の一実施形態では、取得セクションは、第１のノード・プールのうち、１つまたは複数の第１のノードを無作為に指定し、指定された第１のノードから差ΔＣＤ（ｔｎ）を受け取る場合がある。一実施形態では、取得セクションは、第１のノード・プールの所定の１つまたは複数の第１のノードから、差ΔＣＤ（ｔｎ）を受け取る場合がある。
【００６０】
Ｓ１６０では、生成セクション２３０などの生成セクションは、Ｓ１５０において取得された差ΔＣＤ（ｔｎ）および時点ｔｎ−ａにおけるスナップショットＳＳ（ｔｎ−ａ）に基づいて、時点ｔｎにおけるスナップショットＳＳ（ｔｎ）を生成する。本発明の一実施形態では、生成セクションは、格納セクションからスナップショットＳＳ（ｔｎ−ａ）を読み取り、スナップショットＳＳ（ｔｎ）を得るために、差ΔＣＤ（ｔｎ）をスナップショットＳＳ（ｔｎ−ａ）に反映させる場合がある。
【００６１】
Ｓ１７０では、計算セクション２６０などの計算セクションは、Ｓ１６０において生成されたスナップショットＳＳ（ｔｎ）のハッシュＨ（ＳＳ（ｔｎ））を計算する。
【００６２】
Ｓ１８０では、検証セクションは、検証されたハッシュＨ（ＣＤ（ｔｎ））によってスナップショットＳＳ（ｔｎ）を検証する。本発明の一実施形態では、検証セクションは、Ｓ１７０において計算されたハッシュＨ（ＳＳ（ｔｎ））が、Ｓ１３０において検証されたハッシュＨ（ＣＤ（ｔｎ））と同じであるかどうかを判定する場合がある。
【００６３】
ハッシュＨ（ＳＳ（ｔｎ））がハッシュＨ（ＣＤ（ｔｎ））と同じであると検証セクションが判定した場合、検証セクションは、Ｓ１９０に進む。ハッシュＨ（ＳＳ（ｔｎ））がハッシュＨ（ＣＤ（ｔｎ））と同じでないと検証セクションが判定した場合、検証セクションは、Ｓ１５０に戻る。次いで、Ｓ１５０において、取得セクションは、第１のノード・プール内の他の第１のノードから差ΔＣＤ（ｔｎ）を再び取得する場合がある。
【００６４】
Ｓ１９０では、格納セクションは、検証されたスナップショットＳＳ（ｔｎ）を格納する。一実施形態では、格納セクションは、最新のスナップショットとしてスナップショットＳＳ（ｔｎ）を格納することができる。代替の実施形態では、格納セクションは、スナップショットＳＳ（ｔｎ）の代わりに／スナップショットＳＳ（ｔｎ）に加えて、差ΔＣＤ（ｔｎ）を格納することができる。本発明の一実施形態では、スナップショット・ノードは、スナップショット・ノードがオーディタ・ノードからスナップショットＳＳ（ｔｋ）の要求を受け取る場合、最初のスナップショットＳＳ（ｔ１）およびΔＣＤ（ｔ２）、ΔＣＤ（ｔ３）、・・・、ΔＣＤ（ｔｋ）から、任意の時点ｔｋにおけるスナップショットＳＳ（ｔｋ）を計算する。
【００６５】
Ｓ１９０の動作の後、スナップショット・ノードは、Ｓ１１０の動作を再び実行する場合がある。本発明の一実施形態では、スナップショット・ノードは、Ｓ１１０〜Ｓ１９０の動作を周期的に実行する場合がある。たとえば、取得セクションは、新しいブロック（ｎ＋１）が第１のノードの１つまたは複数によって生成されたことを通知された後、Ｓ１１０の動作を開始する場合がある。
【００６６】
本発明の一実施形態では、スナップショット・ノードは、Ｓ１２０〜Ｓ１４０の動作を実行しない場合があり、単一の第１のノードからハッシュＨ（ＣＤ（ｔｘ））を取得する場合がある。本発明のそのような実施形態では、第１のノードは、ハッシュＨ（ＣＤ（ｔｘ））をスナップショット・ノードに送る前に、合意アルゴリズムによってハッシュＨ（ＣＤ（ｔｘ））に関する合意を形成する場合がある。それに関して、取得セクションは、複数の第１のノードによって合意が形成されたハッシュＨ（ＣＤ（ｔｘ））を取得する場合がある。
【００６７】
図５に関して説明した本発明の実施形態によれば、第１のノードは、共通データのスナップショットを格納する必要がなく、それによって、第１のノードによって要求される計算資源を低減する。加えて、スナップショット・ノードは、ハッシュの検証後、スナップショットを格納するので、スナップショットとして真の共通データを格納することができる。
【００６８】
図６は、本発明の一実施形態による第２の動作フローを示す。図６に示したように、オーディタ・ノード３００などのオーディタ・ノードが、Ｓ２１０からＳ２９０までの動作を実行する例について次に説明する。オーディタ・ノードは、Ｓ２１０〜Ｓ２９０の動作によって任意の時点における共通データを取得する場合がある。
【００６９】
Ｓ２１０では、受信セクション３２０などの受信セクションは、スナップショット・ノードから時点ｔｋ−ｍにおけるスナップショットを受け取る。時点ｔｋは、オーディタ・ノードが必要とするスナップショットの時点である。時点ｔｋ−ｍは、時点ｔｋの前である場合がある。時点ｔｋ−ｍは、第３の時点と呼ばれる場合があり、時点ｔｋは、第４の時点と呼ばれる場合がある。
【００７０】
本発明の一実施形態では、時点ｔｋは、時点ｔｋ−ｍの後にｍ個のブロックが生成された時点である。本発明の一実施形態では、変数ｍは、１または１よりも大きい整数である場合がある。たとえば、ｍは最初に１に設定される。
【００７１】
本発明の一実施形態では、受信セクションは、時点ｔｋの情報とともにスナップショットの要求を伝送する。次いで、提供セクション２９０などの提供セクションは、スナップショット・ノードにおいて、格納セクション２１０からスナップショットＳＳ（ｔｋ−ｍ）を取り出し、スナップショットＳＳ（ｔｋ−ｍ）を受信セクションに伝送する。オーディタ・ノードの受信セクションは、スナップショット・ノードの提供セクションからスナップショットＳＳ（ｔｋ−ｍ）を受け取る場合がある。
【００７２】
Ｓ２２０では、受信セクションは、時点ｔｋ−ｍからｔｋまでの１つまたは複数のブロックを受け取る。本発明の一実施形態では、受信セクションは、（ｉ）時点ｔｋ−ｍ−１とｔｋ−ｍとの間に生じた１つまたは複数の共通トランザクションと、（ｉｉ）時点ｔｋ−ｍにおける共通データのハッシュＨ（ＣＤ（ｔｋ−ｍ））とを含む場合がある、時点ｔｋ−ｍにおけるブロック（ｋ−ｍ）を受け取る場合がある。受信セクションは、ブロック（ｋ−ｍ＋１）、ブロック（ｋ−ｍ＋２）、・・・、ブロック（ｋ）を受け取る場合もある。
【００７３】
本発明の一実施形態では、受信セクションは、第１のノード・プールのうち、１つの第１のノードを無作為に指定し、指定された第１のノードに時点ｋ−ｍの情報とともにブロックの要求を伝送する場合がある。指定された第１のノードは、ブロック（ｋ−ｍ）、・・・、ブロック（ｋ）をオーディタ・ノードに伝送する場合があり、オーディタ・ノードの受信セクションは、次いで、ブロック（ｋ−ｍ）、・・・、ブロック（ｋ）を受け取る場合がある。本発明の一実施形態では、受信セクションは、第１のノード・プール内の第１のノードの２つ以上からブロック（ｋ−ｍ）、・・・、ブロック（ｋ）を受け取る場合がある。
【００７４】
Ｓ２３０では、計算セクション３４０などの計算セクションは、Ｓ２１０においてスナップショット・ノードから取得されたスナップショットＳＳ（ｔｋ−ｍ）のハッシュＨ（ＳＳ（ｔｋ−ｍ））を計算する。
【００７５】
Ｓ２４０では、判定セクション３６０などの判定セクションは、Ｓ２２０において取得されたブロックによって、Ｓ２１０においてスナップショット・ノードから取得されたスナップショットＳＳ（ｔｋ−ｍ）を検証する。一実施形態では、判定セクションは、Ｓ２３０において計算されたハッシュＨ（ＳＳ（ｔｋ−ｍ））が、Ｓ２２０において取得されたブロック（ｋ−ｍ）内のハッシュＨ（ＣＤ（ｔｋ−ｍ））と同じであるかどうかを判定する。本発明の一実施形態では、判定セクションは、両方のハッシュが同じであれば、検証が成功したと判定し、両方のハッシュが同じでなければ、検証が成功しなかったと判定する。
【００７６】
Ｓ２５０では、検証が成功しなかった場合、判定セクションは、Ｓ２７０に進む。検証が成功した場合、判定セクションは、Ｓ２９０に進む。
【００７７】
Ｓ２７０では、判定セクションは、ｍにｎを加算することによって変数ｍを更新する。本発明の一実施形態では、ｎは、１または１よりも大きい整数である場合がある。判定セクションは、更新されたｍとともにＳ２１０に戻る場合がある。それに関して、Ｓ２１０の次の反復では、受信セクションは、Ｓ２５０においてハッシュＨ（ＳＳ（ｔｋ−ｍ））が、ハッシュＨ（ＣＤ（ｔｋ−ｍ））と同じでないと判定したことに応答して、スナップショット・ノードから、前のＳ２１０においてスナップショットを受け取った時点の前の更新された時点におけるスナップショットを受け取る。本発明の一実施形態では、更新された時点は、第５の時点と呼ばれる場合がある。
【００７８】
Ｓ２２０の次の反復では、受信セクションは、更新された時点に基づいて、第１のノード・プールの少なくとも１つの第１のノードから、１つまたは複数のブロックを受け取り、Ｓ２２０の前の反復における第１のノードとは異なる第１のノードからブロックを受け取る。
【００７９】
Ｓ２９０では、生成セクション３８０などの生成セクションは、Ｓ２１０において取得された時点ｔｋ−ｍにおけるスナップショットＳＳ（ｔｋ−ｍ）、およびＳ２２０において取得されたブロックに含まれる、時点ｔｋとｔｋ−ｍとの間の共通トランザクションから、時点ｔｋにおける共通データＣＤ（ｔｋ）を生成する。本発明の一実施形態では、生成セクションは、共通トランザクションをスナップショットＳＳ（ｔｋ−ｍ）に反映させることによって、共通データＣＤ（ｔｋ）を生成する。
【００８０】
図６に関して説明した本発明の実施形態によれば、オーディタ・ノードは、共通データ監査の現行の方法よりも少ない計算資源によってオーディタ・ノードが必要とする、任意の時点における真の共通データを得る場合がある。
【００８１】
図６に関して説明した本発明の実施形態によれば、オーディタ・ノードは、時点ｔｋの前の時点ｔｋ−ｍにおけるスナップショットＳＳ（ｔｋ−ｍ）およびブロック（ｋ−ｍ）、・・・、ブロック（ｋ）を最初に取得し、時点ｔｋ−ｍにおけるスナップショットＳＳ（ｔｋ−ｍ）を検証し、次いで、所望の時点ｔｋにおける共通データＣＤ（ｔｋ）を生成する場合がある。
【００８２】
本発明のいくつかの代替の実施形態では、オーディタ・ノードは、ある時点における共通データを、前の時点におけるスナップショットの代わりに、後の時点におけるスナップショットから生成することができる。本発明の代替の実施形態では、オーディタ・ノードは、時点ｔｋの後の時点ｔｋ＋ｍにおけるスナップショットＳＳ（ｔｋ＋ｍ）、および時点ｔｋ＋ｍにおける単一のブロック（ｋ＋ｍ）を最初に取得することができる。ブロック（ｋ＋ｍ）は、時点ｔｋ＋ｍにおける共通データのハッシュＨ（ＣＤ（ｔｋ＋ｍ））、および時点ｔｋとｔｋ＋ｍとの間の１つまたは複数のトランザクションを含む場合がある。オーディタ・ノードは、ブロック（ｋ＋ｍ）内のＨ（ＣＤ（ｔｋ＋ｍ））によってスナップショットＳＳ（ｔｋ＋ｍ）を検証する場合がある。次いで、オーディタ・ノードは、スナップショットＳＳ（ｔｋ＋ｍ）からのｔｋとｔｋ＋ｍとの間のトランザクションを取り消すことによって時点ｔｋにおける共通データＣＤ（ｔｋ）を生成する場合がある。本発明の一実施形態によれば、オーディタ・ノードは、Ｓ２２０において取得されるブロックの数を最小化する場合がある。
【００８３】
本発明の代替の実施形態では、Ｓ２５０において、ハッシュＨ（ＳＳ（ｔｋ−ｍ））が、ハッシュＨ（ＣＤ（ｔｋ−ｍ））と同じでないと判定セクションが判定したとき、受信セクションは、Ｓ２１０の後の反復では、スナップショット・ノードから時点ｔｋ−ｍの前の更新された時点におけるスナップショットを受け取る場合がある。本発明の一実施形態では、更新された時点は、第６の時点と呼ばれる場合がある。Ｓ２２０の後の反復では、受信セクションは、第１のノード・プールの少なくとも１つの第１のノードから、更新された時点における共通データのブロック（ハッシュおよびトランザクションを含む）を受け取る場合もある。
【００８４】
本発明のさらなる代替の実施形態では、オーディタ・ノードは、所望の時点ｔｋの前の時点ｔｋ−ｍにおけるスナップショットＳＳ（ｔｋ−ｍ）、および時点ｔｋにおけるブロック（ｋ）を最初に取得する場合がある。次いで、オーディタ・ノードは、スナップショットＳＳ（ｔｋ−ｍ）およびブロック（ｋ）内のトランザクションによって、共通データＣＤ（ｔｋ）を生成し、ブロック（ｋ）内の共通データのハッシュＨ（ＣＤ（ｔｋ））によって、共通データＣＤ（ｔｋ）を検証する場合がある。
【００８５】
本発明のさらなる代替の実施形態では、オーディタ・ノードは、所望の時点ｔｋの後の時点ｔｋ＋ｍにおけるスナップショットＳＳ（ｔｋ＋ｍ）、ならびに時点ｔｋにおけるブロック（ｋ）および時点ｔｋ＋ｍにおけるブロック（ｋ＋ｍ）を最初に取得する場合がある。オーディタ・ノードは、スナップショットＳＳ（ｔｋ＋ｍ）およびブロック（ｋ＋ｍ）内のトランザクションによって、共通データＣＤ（ｔｋ）を生成する場合がある。次いで、オーディタ・ノードは、ブロック（ｋ）内の共通データのハッシュＨ（ＣＤ（ｔｋ））によって、共通データＣＤ（ｔｋ）を検証する場合がある。
【００８６】
図７は、本発明の一実施形態による、Ｓ１１０における動作などの、共通データのハッシュを取得するスナップショット・ノード２００の動作を示す。図７の本発明の実施形態では、スナップショット・ノード２００は、スナップショットＳＳ（ｔｎ−ａ）を格納し、Ｓ１１０における第１のノード・プールの第１のノード１１０Ａ、１１０Ｂ、および１１０Ｃから、時点ｔｎにおける共通データの複数のハッシュＨ（ＣＤ（ｔｎ））を取得することができる。スナップショット・ノード２００は、次いで、３つの第１のノード（１１０Ａ〜１１０Ｃ）からのこれらのハッシュＨ（ＣＤ（ｔｎ））を検証することができる。
【００８７】
図８は、本発明の一実施形態による、Ｓ１５０における動作などの、共通データの差を取得するスナップショット・ノード２００の動作を示す。図８の本発明の実施形態では、スナップショット・ノード２００は、第１のノード・プール１００のうち、第１のノード１１０Ｂから差ΔＣＤ（ｔｎ）を取得する場合がある。スナップショット・ノード２００は、スナップショットＳＳ（ｔｎ−ａ）および差ΔＣＤ（ｔｎ）に基づいて、スナップショットＳＳ（ｔｎ）を生成する場合がある。
【００８８】
図９は、本発明の一実施形態による、Ｓ２１０における動作などの、スナップショットを受け取るオーディタ・ノード３００の動作を示す。図９の本発明の実施形態では、オーディタ・ノード３００は、時点ｔｋをスナップショット・ノード２００に伝送し、スナップショット・ノード２００からスナップショットＳＳ（ｔｋ−ｍ）を受け取る。いくつかの実施形態では、スナップショット・ノード２００は、要求された時点ｔｋにおけるスナップショットＳＳ（ｔｋ）を直接提供する場合がある。
【００８９】
図１０は、本発明の一実施形態による、Ｓ２２０〜２９０における動作などの、監査の残りの動作を実行するオーディタ・ノード３００の動作を示す。図１０の本発明の実施形態では、オーディタ・ノード３００は、第１のノード・プール１００のうち、第１のノード１１０Ｂからブロック（ｋ−１）およびブロック（ｋ）を受け取る場合がある。
【００９０】
ブロック（ｋ−１）は、ｔｋ−１における共通データのハッシュＨ（ＣＤ（ｔｋ−１））、前のブロック（ｋ−２）のハッシュ、および時点ｔｋ−２とｔｋ−１との間のトランザクションを含む。ブロック（ｋ）は、時点ｔｋにおける共通データのハッシュＨ（ＣＤ（ｔｋ））、前のブロック（ｋ−１）のハッシュ、および時点ｔｋ−１とｔｋとの間のトランザクションを含む。
【００９１】
オーディタ・ノード３００は、ブロック（ｋ−１）内の共通データのハッシュＨ（ＣＤ（ｔｋ−１））によってスナップショットＳＳ（ｔｋ−１）を検証する。オーディタ・ノード３００は、スナップショットＳＳ（ｔｋ−１）およびブロック（ｋ）内の時点ｔｋとｔｋ−１との間のトランザクションから、時点ｔｋにおける共通データＣＤ（ｔｋ）を生成する。
【００９２】
図１１は、本発明の一実施形態による、クラウド・サービス利用のために構成された、コンピュータの例示的なハードウェア構成を示す。コンピュータ８００内にインストールされたプログラムは、コンピュータ８００に、本発明の実施形態の装置またはそれらの１つもしくは複数のセクション（モジュール、構成要素、要素などを含む）として機能させるか、もしくはそれらに関連する動作を実行させるか、または、コンピュータ８００に、本発明の実施形態のプロセスもしくはそれらのステップを実行させるか、あるいはその両方を行わせることができる。そのようなプログラムは、コンピュータ８００に、本明細書で説明したフローチャートおよびブロック図のブロックのいくつかまたはすべてに関連するいくつかの動作を実行させるためにＣＰＵ８００−１２によって実行される場合がある。
【００９３】
本実施形態によるコンピュータ８００は、ホスト・コントローラ８００−１０によって相互に接続された、ＣＰＵ８００−１２、ＲＡＭ８００−１４、グラフィックス・コントローラ８００−１６、および表示デバイス８００−１８を含む。コンピュータ８００は、入力／出力コントローラ８００−２０を介してホスト・コントローラ８００−１０に接続された、通信インターフェース８００−２２、ハードディスク・ドライブ８００−２４、ＤＶＤ−ＲＯＭドライブ８００−２６、およびＩＣカード・ドライブなどの入力／出力ユニットも含む。コンピュータは、入力／出力チップ８００−４０を通して入力／出力コントローラ８００−２０に接続された、ＲＯＭ８００−３０およびキーボード８００−４２などの旧来の入力／出力ユニットも含む。
【００９４】
ＣＰＵ８００−１２は、ＲＯＭ８００−３０およびＲＡＭ８００−１４内に格納されたプログラムに従って動作し、それによって、各ユニットを制御する。グラフィックス・コントローラ８００−１６は、ＲＡＭ８００−１４の中またはそれ自体の中に設けられたフレーム・バッファなどの上でＣＰＵ８００−１２によって生成された画像データを取得し、画像データを表示デバイス８００−１８上に表示させる。
【００９５】
通信インターフェース８００−２２は、ネットワーク８００−５０を介して他の電子デバイスと通信する。ハードディスク・ドライブ８００−２４は、コンピュータ８００内のＣＰＵ８００−１２によって使用されるプログラムおよびデータを格納する。ＤＶＤ−ＲＯＭドライブ８００−２６は、ＤＶＤ−ＲＯＭ８００−０１からプログラムまたはデータを読み取り、ＲＡＭ８００−１４を介して、ハードディスク・ドライブ８００−２４にプログラムまたはデータを提供する。ＩＣカード・ドライブは、ＩＣカードからプログラムおよびデータを読み取り、または、ＩＣカードにプログラムおよびデータを書き込み、あるいはその両方を行う。
【００９６】
ＲＯＭ８００−３０は、その内部に、起動時にコンピュータ８００によって実行される起動プログラムなど、または、コンピュータ８００のハードウェアに応じたプログラム、あるいはその両方を格納する。入力／出力チップ８００−４０は、パラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポートなどを介して、様々な入力／出力ユニットを入力／出力コントローラ８００−２０に接続する場合もある。
【００９７】
プログラムが、ＤＶＤ−ＲＯＭ８００−０１またはＩＣカードなどのコンピュータ可読媒体によって提供される。プログラムは、コンピュータ可読媒体の例でもある、ハードディスク・ドライブ８００−２４、ＲＡＭ８００−１４、またはＲＯＭ８００−３０内にインストールされたコンピュータ可読媒体から読み取られ、ＣＰＵ８００−１２によって実行される。これらのプログラム内に記載された情報処理は、コンピュータ８００内に読み取られ、プログラムと上述の様々なタイプのハードウェア資源との間の協働をもたらす。装置または方法は、コンピュータ８００の使用に応じて情報の操作または処理を実現することによって構成される場合がある。
【００９８】
たとえば、コンピュータ８００と外部のデバイスとの間で通信が実行されるとき、ＣＰＵ８００−１２は、通信プログラム内に記載された処理に基づいて、通信インターフェース８００−２２に通信処理を指示するために、ＲＡＭ８００−１４にロードされた通信プログラムを実行する場合がある。通信インターフェース８００−２２は、ＣＰＵ８００−１２の制御下で、ＲＡＭ８００−１４、ハードディスク・ドライブ８００−２４、ＤＶＤ−ＲＯＭ８００−０１、またはＩＣカードなどの記録媒体内に設けられた伝送バッファ領域に格納された伝送データを読み取り、読み取られた伝送データを、ネットワーク８００−５０に伝送するか、または、記録媒体上に設けられた受信バッファ領域などに、ネットワーク８００−５０から受け取った受信データを書き込む。
【００９９】
加えて、ＣＰＵ８００−１２は、ハードディスク・ドライブ８００−２４、ＤＶＤ−ＲＯＭドライブ８００−２６（ＤＶＤ−ＲＯＭ８００−０１）、ＩＣカードなどの外部の記録媒体に格納されたファイルまたはデータベースのすべてまたは必要な部分を、ＲＡＭ８００−１４内に読み取らせ、ＲＡＭ８００−１４上のデータの様々なタイプの処理を実行する場合がある。ＣＰＵ８００−１２は、次いで、処理されたデータを外部の記録媒体に再び書き込む場合がある。
【０１００】
様々なタイプのプログラム、データ、テーブル、およびデータベースなどの様々なタイプの情報は、情報処理を受けるために記録媒体内に格納される場合がある。ＣＰＵ８００−１２は、本開示全体を通して説明されプログラムの命令シーケンスによって指定された、様々なタイプの動作、情報の処理、条件判断、条件分岐、無条件分岐、情報の検索／置換などを含む、ＲＡＭ８００−１４から読み取ったデータの様々なタイプの処理を実行する場合があり、その結果をＲＡＭ８００−１４に再び書き込む。
【０１０１】
加えて、ＣＰＵ８００−１２は、記録媒体内のファイル、データベースなどの中の情報を検索する場合がある。たとえば、各々が第２の属性の属性値に関連付けられた第１の属性の属性値を有する複数の項目が、記録媒体内に格納されるとき、ＣＰＵ８００−１２は、複数の項目のうちから、第１の属性の属性値が指定される条件に一致する項目を検索する場合があり、項目内に保存された第２の属性の属性値を読み取り、それによって、所定の条件を満足する第１の属性に関連付けられた第２の属性の属性値を得る。
【０１０２】
以上に説明したプログラムまたはソフトウェア・モジュールは、コンピュータ８００上またはコンピュータ８００の近くのコンピュータ可読媒体内に格納される場合がある。加えて、専用の通信ネットワークまたはインターネットに接続されたサーバ・システム内に設けられたハードディスクまたはＲＡＭなどの記録媒体は、コンピュータ可読媒体として使用される可能性があり、それによって、ネットワークを介してプログラムをコンピュータ８００に提供する。
【０１０３】
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはその組合せであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためにコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体（または複数の媒体）を含んでもよい。
【０１０４】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および記憶することができる有形のデバイスである可能性がある。コンピュータ可読記憶媒体は、たとえば、限定はされないが、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁的記憶デバイス、半導体記憶デバイス、またはそれらの任意の適切な組合せであってもよい。コンピュータ可読記憶媒体のより具体的な例の包括的でないリストは、次の、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能プログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピ（Ｒ）・ディスク、パンチ・カードまたは命令が記録された溝内の突起構造などの機械的にエンコードされたデバイス、およびそれらの任意の適切な組合せを含む。本明細書で使用するコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を通って伝播する電磁波（たとえば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通して伝送される電気信号などの一過性の信号自体と解釈されるべきでない。
【０１０５】
本明細書で説明したコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、または、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワークあるいはその組合せなどのネットワークを介して外部のコンピュータまたは外部の記憶デバイスにダウンロードされることが可能である。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはその組合せを含んでもよい。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読記憶媒体内への記憶のために、コンピュータ可読プログラム命令をそれぞれのコンピューティング／処理デバイス内に転送する。
【０１０６】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、ステート設定データ、または、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向のプログラミング言語、および「Ｃ」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、独立型ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に実行されてもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または、接続は、外部のコンピュータに（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）なされてもよい。いくつかの実施形態では、たとえば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するために電子回路をカスタマイズするのにコンピュータ可読プログラム命令のステート情報を利用することによってコンピュータ可読プログラム命令を実行してもよい。
【０１０７】
本発明の態様は、本発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して本明細書で説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、および、フローチャート図またはブロック図あるいはその両方のブロックの組合せは、コンピュータ可読プログラム命令によって実装されることが可能であることが理解されよう。
【０１０８】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを作り出すものであってもよい。これらのコンピュータ可読プログラム命令は、内部に命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含む製品を備えるべく、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイスあるいはその組合せに、特定の方式で機能するように指示することができるものであってもよい。
【０１０９】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータによって実施されるプロセスを作り出すべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【０１１０】
図のフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の考え得る実装形態のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能な命令を含む、モジュール、セグメント、または命令の一部を表す場合がある。いくつかの代替の実装形態では、ブロック内に記載された機能は、図に記載された順序がばらばらになって起こる場合がある。たとえば、連続的に示された２つのブロックが、実際は、実質的に同時に実行される場合があり、または、ブロックが、含まれる機能に応じて、逆順に実行されることがある。ブロック図またはフローチャート図あるいはその両方の各ブロック、および、ブロック図またはフローチャート図あるいはその両方のブロックの組合せは、指定された機能もしくは動作を実行するか、または専用ハードウェアとコンピュータの命令の組合せを実行する、専用ハードウェア・ベースのシステムによって実施されることが可能であることにも留意されよう。
【０１１１】
本発明の実施形態について説明してきたが、本発明の技術的な範囲は、上述の実施形態に限定されない。上述の実施形態に様々な変更および改良を加えることができることは、当業者には明らかである。そのような変更または改良を加えられた実施形態を、本発明の技術的な範囲に含むことができることも、特許請求の範囲から明らかである。
【０１１２】
特許請求の範囲、実施形態、または図に示した、装置、システム、プログラム、および方法によって実行される各プロセスの動作、手順、ステップ、および段階は、順序が「〜に先立って」、「〜の前の」などによって示されない限り、また、前のプロセスからの出力が後のプロセスにおいて使用されない限り、任意の順序で実行することができる。特許請求の範囲、実施形態、または図において「第１の」または「次の」などの言葉を使用してプロセスの流れが記載されていても、プロセスがこの順序で実行されなければならないことを必ずしも意味するわけではない。
【０１１３】
以上から明らかになるように、本発明の実施形態により、時系列の入力データに対応するモデルを学習する学習装置は、より高度な表現能力および学習能力を有し、学習動作をより簡単に実行することが可能になる。
【図１】
2020520499.tif 000003
【図２】
2020520499.tif 000004
【図３】
2020520499.tif 000005
【図４】
2020520499.tif 000006
【図５】
2020520499.tif 000007
【図６】
2020520499.tif 000008
【図７】
2020520499.tif 000009
【図８】
2020520499.tif 000010
【図９】
2020520499.tif 000011
【図１０】
2020520499.tif 000012
【図１１】
2020520499.tif 000013
【手続補正書】
【提出日】令和2年4月20日(2020.4.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の第１のノードの少なくとも１つの第１のノードから、第１の時点における共通データと、前記第１の時点とは異なる第２の時点における共通データとの間の差を取得することと、
前記差に基づいて前記第１の時点における前記共通データの第１のスナップショットを生成することと、
前記複数の第１のノードの少なくとも１つから前記第１の時点における前記共通データのハッシュを取得することと、
前記第１の時点における前記共通データの前記ハッシュによって前記第１の時点における前記第１のスナップショットを検証することと
を含む、方法。
【請求項２】
スナップショット・ノードによって、様々な時点における前記共通データの複数のスナップショットを格納することをさらに含む、請求項１に記載の方法。
【請求項３】
様々な時点における共通データの複数のスナップショットを格納するスナップショット・ノードから第３の時点のスナップショットを受け取ることと、
前記第３の時点の前記スナップショットのハッシュを計算することと、
前記共通データを格納する複数の第１のノードの少なくとも１つの第１のノードから、前記第３の時点における共通データのハッシュを受け取り、前記複数の第１のノードによって、前記共通データを共通トランザクションを用いて更新することと、
前記第３の時点における前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じであるかどうかを判定することと
を含む、方法。
【請求項４】
コンピュータ・プログラムであって、コンピュータにより実行されると、前記コンピュータに請求項１に記載の方法を動作させるコンンピュータ・プログラム。
【請求項５】
前記動作が、様々な時点における前記共通データの複数のスナップショットを格納することをさらに含む、請求項４に記載のコンピュータ・プログラム。
【請求項６】
前記第１の時点における前記共通データの前記第１のスナップショットが、さらに前記第２の時点における第２のスナップショットに基づいて生成される、請求項５に記載のコンピュータ・プログラム。
【請求項７】
前記差が、前記第１の時点と前記第２の時点との間でなされた少なくとも１つの共通トランザクションによる、前記共通データの更新に由来する、請求項６に記載のコンピュータ・プログラム。
【請求項８】
前記第１の時点が最新の時点である、請求項６又は７に記載のコンピュータ・プログラム。
【請求項９】
前記動作が、
前記第１の時点における前記共通データの前記第１のスナップショットのハッシュを計算すること
をさらに含み、
前記第１のスナップショットを検証することは、前記第１のスナップショットの前記ハッシュが、前記第１の時点における前記共通データの前記ハッシュと同じであるかどうかを判定することを含む、
請求項４に記載のコンピュータ・プログラム。
【請求項１０】
前記動作が、
前記第１のスナップショットの前記ハッシュが、前記第１の時点における前記共通データの前記ハッシュと同じであると判定したことに応答して、前記第１の時点における前記共通データの前記第１のスナップショットを格納すること
をさらに含む、請求項９に記載のコンピュータ・プログラム。
【請求項１１】
前記動作が、
前記第１のスナップショットの前記ハッシュが、前記第１の時点における前記共通データの前記ハッシュと同じでないと判定したことに応答して、前記複数の第１のノードの少なくとも１つの別の第１のノードから、前記第１の時点における前記共通データと前記第２の時点における前記共通データとの間の差を取得すること
をさらに含む、請求項９に記載のコンピュータ・プログラム。
【請求項１２】
前記動作が、
前記第１の時点における共通データの複数のハッシュが同じであるかどうかを判定すること
をさらに含み、
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第１の時点における前記共通データの前記ハッシュを取得することが、前記第１のノードの２つ以上から、前記第１の時点における前記共通データの前記複数のハッシュを取得することを含む、
請求項４に記載のコンピュータ・プログラム。
【請求項１３】
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第１の時点における前記共通データの前記ハッシュを取得することが、前記複数の第１のノードによって合意が形成された、前記第１の時点における前記共通データの前記ハッシュを取得することを含む、請求項４に記載のコンピュータ・プログラム。
【請求項１４】
コンピュータ・プログラムであって、コンピュータにより実行されると、前記コンピュータに請求項３に記載の方法を動作させるコンンピュータ・プログラム。
【請求項１５】
前記動作が、
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第３の時点と第４の時点との間で少なくとも１つの共通トランザクションを受け取ることと、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じであると判定したことに応答して、前記第３の時点における前記共通データの前記スナップショットおよび前記少なくとも１つの共通トランザクションに基づいて、前記第４の時点における前記共通データを生成することと
をさらに含む、請求項１４に記載のコンピュータ・プログラム。
【請求項１６】
前記第３の時点が前記第４の時点の前である、請求項１５に記載のコンピュータ・プログラム。
【請求項１７】
前記動作が、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じでないと判定したことに応答して、前記スナップショット・ノードから、前記第３の時点の前の第５の時点におけるスナップショットを受け取ることと、
前記複数の第１のノードの少なくとも１つから、前記第５の時点における前記共通データのハッシュを受け取ることと
をさらに含む、請求項１６に記載のコンピュータ・プログラム。
【請求項１８】
前記第３の時点が前記第４の時点の後にある、請求項１５に記載のコンピュータ・プログラム製品。
【請求項１９】
前記動作が、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じでないと判定したことに応答して、前記スナップショット・ノードから、前記第３の時点の後の第６の時点におけるスナップショットを受け取ることと、
前記複数の第１のノードの少なくとも１つから、前記第６の時点における前記共通データのハッシュを受け取ることと
をさらに含む、請求項１６に記載のコンピュータ・プログラム。
【請求項２０】
スナップショット・ノードであって、
請求項４に記載の前記コンピュータ・プログラムと、
前記コンピュータ・プログラムを実行するプロセッサと
を含む、スナップショット・ノード。
【請求項２１】
様々な時点における前記共通データの複数のスナップショットを格納するためのメモリをさらに含む、請求項２０に記載のスナップショット・ノード。
【請求項２２】
システムであって、
請求項２０に記載の前記スナップショット・ノードと、
前記複数の第１のノードとを含み、
前記複数の第１のノードは、
前記共通データを格納すること、および
前記共通データを共通トランザクションによって更新すること
を行うように集合的に構成される、システム。
【請求項２３】
オーディタ・ノードであって、
請求項１４に記載の前記コンピュータ・プログラムと、
前記コンピュータ・プログラムを実行するプロセッサと
を含む、オーディタ・ノード。
【請求項２４】
前記複数の第１のノードの前記少なくとも１つの第１のノードから、前記第３の時点と第４の時点との間で少なくとも１つの共通トランザクションを受け取ることと、
前記第３の時点の前記スナップショットの前記ハッシュが、前記第３の時点における前記共通データの前記ハッシュと同じであると判定したことに応答して、前記第３の時点における前記共通データの前記スナップショットおよび前記少なくとも１つの共通トランザクションに基づいて、前記第４の時点における前記共通データを生成することと
を含む、請求項２３に記載のオーディタ・ノード。
【請求項２５】
システムであって、
請求項２３に記載の前記オーディタ・ノードと、
前記複数の第１のノードであって、
前記共通データを格納すること、および
前記共通データを共通トランザクションによって更新すること
を行うように集合的に構成された、前記複数の第１のノードと、
請求項２０に記載の前記スナップショット・ノードであって、様々な時点における前記共通データの複数のスナップショットを格納するように構成された、前記スナップショット・ノードと
を含む、システム。
【国際調査報告】
2020520499.tif 000014
2020520499.tif 000015