(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-07-15
(54)【発明の名称】ブロックチェーンキャッシュシステム
(51)【国際特許分類】
G06F 16/182 20190101AFI20220708BHJP
G06F 16/172 20190101ALI20220708BHJP
【FI】
G06F16/182
G06F16/172
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021568023
(86)(22)【出願日】2020-05-12
(85)【翻訳文提出日】2021-12-28
(86)【国際出願番号】 US2020032507
(87)【国際公開番号】W WO2020232012
(87)【国際公開日】2020-11-19
(32)【優先日】2019-05-14
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】521495884
【氏名又は名称】プラナリア コーポレーション
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】カン,チャング
(57)【要約】
本開示は、ブロックチェーンからデータを取得するためのシステム、方法及びコンピュータプログラム製品を提供する。システムの一例は、キャッシュストレージ及びブロックチェーンクローラを含むキャッシュエンジンを含み得る。ブロックチェーンクローラは、ブロックチェーンからブロックチェーンデータを取得し、及びブロックチェーンデータのサブセットをキャッシュストレージに書き込むように構成され得る。ブロックチェーンデータのサブセットは、キャッシュエンジンによって生成されるクエリを満たし得る。このシステムは、キャッシュエンジンに通信可能に結合されるブロックチェーンクエリサービスを更に含み得る。ブロックチェーンクエリサービスは、状態ストレージ及びキャッシュクローラを含み得る。キャッシュクローラは、キャッシュストレージからキャッシュデータを取得し、及び少なくともキャッシュデータに基づいて状態ストレージの状態を更新するように構成され得る。
【特許請求の範囲】
【請求項1】
ブロックチェーンからデータを取得するためのシステムであって、
キャッシュストレージ及びブロックチェーンクローラを含むキャッシュエンジンであって、前記ブロックチェーンクローラは、前記ブロックチェーンからブロックチェーンデータを取得し、及び前記ブロックチェーンデータのサブセットを前記キャッシュストレージに書き込むか、又は前記ブロックチェーンデータの前記サブセットに基づいて前記キャッシュストレージの状態を更新するように構成され、前記ブロックチェーンデータの前記サブセットは、前記キャッシュエンジンによって生成されるクエリを満たす、キャッシュエンジンと、
前記キャッシュエンジンに通信可能に結合されるブロックチェーンクエリサービスであって、状態ストレージ及びキャッシュクローラを含み、前記キャッシュクローラは、前記キャッシュストレージからキャッシュデータを取得し、及び少なくとも前記キャッシュデータに基づいて前記状態ストレージの状態を更新するように構成される、ブロックチェーンクエリサービスと
を含むシステム。
【請求項2】
前記ブロックチェーンデータの前記サブセットは、前記ブロックチェーンデータの全てを含む、請求項1に記載のシステム。
【請求項3】
前記ブロックチェーンクエリサービスは、前記状態ストレージの前記状態を1つ又は複数のアプリケーションに通信するように構成されるサーバを含む、請求項1に記載のシステム。
【請求項4】
前記ブロックチェーンクエリサービスは、前記ブロックチェーンから直接データを取得するように構成されない、請求項1に記載のシステム。
【請求項5】
前記キャッシュクローラは、前記キャッシュエンジンにクエリ要求又はサブスクリプション要求を伝送することにより、前記キャッシュストレージから前記キャッシュデータを取得するように構成される、請求項1に記載のシステム。
【請求項6】
前記クエリは、前記ブロックチェーンクエリサービスからの前記クエリ要求又は前記サブスクリプション要求に少なくとも部分的に基づく、請求項1に記載のシステム。
【請求項7】
前記クエリは、前記キャッシュストレージの現在の状態に少なくとも部分的に基づく、請求項6に記載のシステム。
【請求項8】
前記クエリは、取得するための前記ブロックチェーン内の複数のブロックを指定する、請求項1に記載のシステム。
【請求項9】
前記キャッシュエンジンは、前記キャッシュストレージに前記ブロックチェーンデータの前記サブセットを書き込むとき、キャッシュ更新イベントを伝送するように構成される、請求項1に記載のシステム。
【請求項10】
前記クエリは、ワンタイムクエリである、請求項1に記載のシステム。
【請求項11】
前記クエリは、サブスクリプションである、請求項1に記載のシステム。
【請求項12】
前記サブスクリプションは、満たされたときに前記ブロックチェーンクローラに前記ブロックチェーンからデータを取得させる条件を含む、請求項11に記載のシステム。
【請求項13】
前記条件は、時間又は頻度を含む、請求項11に記載のシステム。
【請求項14】
前記条件は、前記ブロックチェーン上のイベントを含む、請求項11に記載のシステム。
【請求項15】
前記ブロックチェーンクローラは、前記ブロックチェーンデータの前記サブセットをインデックス付き形式で前記キャッシュストレージに書き込むように構成される、請求項1に記載のシステム。
【請求項16】
前記インデックス付き形式は、ファイルシステム、データベース又はメモリ内ストレージである、請求項15に記載のシステム。
【請求項17】
前記ブロックチェーンクローラは、前記ブロックチェーンデータの前記サブセットを前記キャッシュストレージに書き込むように構成される状態遷移エンジンを含む、請求項1に記載のシステム。
【請求項18】
前記状態遷移エンジンは、前記ブロックチェーンデータを正規化、符号化、復号、シリアル化、逆シリアル化、変換又はフィルタして、前記ブロックチェーンデータの前記サブセットを生成するように構成される、請求項17に記載のシステム。
【請求項19】
前記キャッシュストレージは、最大で前記ブロックチェーンのコンテンツ全体のサブセットを記憶するように構成される、請求項1に記載のシステム。
【請求項20】
前記キャッシュエンジンは、指定された時間枠外で発生したトランザクションに対応するブロックチェーンデータを前記キャッシュストレージから取り除くように構成される、請求項19に記載のシステム。
【請求項21】
前記ブロックチェーンクエリサービスは、複数のブロックチェーンクエリサービスの1つであり、前記複数のブロックチェーンクエリサービスのそれぞれは、前記キャッシュに通信可能に結合される、請求項1に記載のシステム。
【請求項22】
前記複数のブロックチェーンクエリサービスは、前記ブロックチェーンから直接データを取得するように構成されない、請求項21に記載のシステム。
【請求項23】
複数の追加のキャッシュエンジンを更に含み、前記複数の追加のキャッシュエンジンは、ブロックチェーンクローラを含まず、前記キャッシュエンジンの前記ブロックチェーンクローラは、前記ブロックチェーンデータの前記サブセットを前記複数の追加のキャッシュエンジンに書き込むように構成される、請求項1に記載のシステム。
【請求項24】
前記複数の追加のキャッシュエンジンのそれぞれは、少なくとも1つの追加のブロックチェーンクエリサービスに通信可能に結合される、請求項23に記載のシステム。
【請求項25】
追加のキャッシュエンジンを更に含み、前記ブロックチェーンクエリサービスは、前記追加のキャッシュエンジンに通信可能に結合される、請求項1に記載のシステム。
【請求項26】
前記追加のキャッシュエンジンは、追加のキャッシュストレージを含み、前記キャッシュストレージ及び前記追加のキャッシュストレージは、同じデータを記憶する、請求項25に記載のシステム。
【請求項27】
前記追加のキャッシュエンジンは、追加のキャッシュストレージを含み、前記キャッシュストレージ及び前記追加のキャッシュストレージは、異なるデータを記憶する、請求項25に記載のシステム。
【請求項28】
前記キャッシュエンジンに通信可能に結合され、及び前記キャッシュエンジンに関するメタデータを記憶するように構成されるキャッシュレジストリを更に含み、前記キャッシュエンジンに関する前記メタデータは、前記ブロックチェーンクエリサービスを含む複数のブロックチェーンクエリサービスによってアクセス可能である、請求項1に記載のシステム。
【請求項29】
前記メタデータは、前記キャッシュエンジンの一意識別子を含む、請求項28に記載のシステム。
【請求項30】
前記メタデータは、前記キャッシュエンジンによって提供されるサービスの種類を定義する、請求項28に記載のシステム。
【請求項31】
ブロックチェーンからデータを取得するためのシステムであって、
シードキャッシュストレージ及びブロックチェーンクローラを含むシードキャッシュエンジンであって、前記ブロックチェーンクローラは、前記ブロックチェーンからブロックチェーンデータを取得し、及び前記ブロックチェーンデータのサブセットを前記シードキャッシュストレージに書き込むか、又は前記ブロックチェーンデータの前記サブセットに基づいて前記キャッシュストレージの状態を更新するように構成され、前記ブロックチェーンデータの前記サブセットは、前記シードキャッシュエンジンによって生成されるクエリを満たす、シードキャッシュエンジンと、
前記シードキャッシュエンジンに通信可能に結合される複数のキャッシュエンジンであって、前記複数のキャッシュエンジンのうちのキャッシュエンジンは、キャッシュストレージ及びキャッシュクローラを含み、前記キャッシュクローラは、前記シードキャッシュストレージからキャッシュデータを取得し、及び前記キャッシュデータを前記キャッシュストレージに書き込むように構成される、複数のキャッシュエンジンと、
前記複数のキャッシュエンジンに通信可能に結合される複数のブロックチェーンクエリサービスであって、前記複数のキャッシュエンジンをクエリするように構成される、複数のブロックチェーンクエリサービスと
を含むシステム。
【請求項32】
ブロックチェーンデータを取得するためのシステムであって、
キャッシュストレージ及びブロックチェーンクローラを含むキャッシュエンジンであって、前記ブロックチェーンクローラは、オフチェーントランザクションストレージからブロックチェーンデータを取得し、及び前記ブロックチェーンデータのサブセットを前記キャッシュストレージに書き込むか、又は前記ブロックチェーンデータの前記サブセットに基づいて前記キャッシュストレージの状態を更新するように構成され、前記ブロックチェーンデータの前記サブセットは、前記キャッシュエンジンによって生成されるクエリを満たす、キャッシュエンジンと、
前記キャッシュエンジンに通信可能に結合されるブロックチェーンクエリサービスであって、状態ストレージ及びキャッシュクローラを含み、前記キャッシュクローラは、前記キャッシュストレージからキャッシュデータを取得し、及び少なくとも前記キャッシュデータに基づいて前記状態ストレージの状態を更新するように構成される、ブロックチェーンクエリサービスと
を含むシステム。
【請求項33】
ブロックチェーンデータを取得するための方法であって、
(a)(i)キャッシュストレージ及びブロックチェーンクローラを含むキャッシュエンジンと、(ii)前記キャッシュエンジンに通信可能に結合されるブロックチェーンクエリサービスとを含むブロックチェーンシステムを提供することであって、前記ブロックチェーンクエリサービスは、状態ストレージ及びキャッシュクローラを含む、提供することと、
(b)前記ブロックチェーンからブロックチェーンデータを取得し、及び前記ブロックチェーンデータのサブセットを前記キャッシュストレージに書き込むか、又は前記ブロックチェーンデータの前記サブセットに基づいて前記キャッシュストレージの状態を更新するために前記ブロックチェーンクローラを使用することであって、前記ブロックチェーンデータの前記サブセットは、前記キャッシュエンジンによって生成されるクエリを満たす、使用することと、
(c)前記キャッシュストレージからキャッシュデータを取得し、及び少なくとも前記キャッシュデータに基づいて前記状態ストレージの状態を更新するために前記キャッシュクローラを使用することと
を含む方法。
【請求項34】
前記ブロックチェーンデータの前記サブセットは、前記ブロックチェーンデータの全てを含む、請求項33に記載の方法。
【請求項35】
前記ブロックチェーンクエリサービスは、サーバを含み、前記方法は、前記状態ストレージの前記状態を1つ又は複数のアプリケーションに通信するために前記サーバを使用することを更に含む、請求項33に記載の方法。
【請求項36】
前記ブロックチェーンクエリサービスは、前記ブロックチェーンから直接データを取得しない、請求項33に記載の方法。
【請求項37】
(c)は、前記キャッシュエンジンにクエリ要求又はサブスクリプション要求を伝送することにより、前記キャッシュストレージから前記キャッシュデータを取得することを含む、請求項33に記載の方法。
【請求項38】
前記クエリは、前記ブロックチェーンクエリサービスからの前記クエリ要求又は前記サブスクリプション要求に少なくとも部分的に基づく、請求項33に記載の方法。
【請求項39】
前記クエリは、前記キャッシュストレージの現在の状態に少なくとも部分的に基づく、請求項38に記載の方法。
【請求項40】
前記クエリは、取得するための前記ブロックチェーン内の複数のブロックを指定する、請求項33に記載の方法。
【請求項41】
前記キャッシュストレージに前記ブロックチェーンデータの前記サブセットを書き込むとき、キャッシュ更新イベントを伝送するために前記キャッシュエンジンを使用することを更に含む、請求項33に記載の方法。
【請求項42】
前記クエリは、ワンタイムクエリである、請求項33に記載の方法。
【請求項43】
前記クエリは、サブスクリプションである、請求項33に記載の方法。
【請求項44】
前記サブスクリプションは、満たされたときに前記ブロックチェーンクローラに前記ブロックチェーンからデータを取得させる条件を含む、請求項43に記載の方法。
【請求項45】
前記条件は、時間又は頻度を含む、請求項43に記載の方法。
【請求項46】
前記条件は、前記ブロックチェーン上のイベントを含む、請求項43に記載の方法。
【請求項47】
(b)は、前記ブロックチェーンデータの前記サブセットをインデックス付き形式で前記キャッシュストレージに書き込むことを含む、請求項33に記載の方法。
【請求項48】
前記インデックス付き形式は、ファイルシステム、データベース又はメモリ内ストレージである、請求項47に記載の方法。
【請求項49】
前記ブロックチェーンクローラは、状態遷移エンジンを含み、前記状態遷移エンジンは、前記ブロックチェーンデータの前記サブセットを前記キャッシュストレージに書き込む、請求項33に記載の方法。
【請求項50】
(b)は、前記ブロックチェーンデータを正規化、符号化、復号、シリアル化、逆シリアル化、変換又はフィルタして、前記ブロックチェーンデータの前記サブセットを生成するために前記状態遷移エンジンを使用することを含む、請求項49に記載の方法。
【請求項51】
前記キャッシュストレージは、最大で前記ブロックチェーンのコンテンツ全体のサブセットを記憶するように構成される、請求項33に記載の方法。
【請求項52】
指定された時間枠外で発生したトランザクションに対応するブロックチェーンデータを前記キャッシュストレージから取り除くことを更に含む、請求項51に記載の方法。
【請求項53】
前記ブロックチェーンクエリサービスは、複数のブロックチェーンクエリサービスの1つであり、前記複数のブロックチェーンクエリサービスのそれぞれは、前記キャッシュに通信可能に結合される、請求項33に記載の方法。
【請求項54】
前記複数のブロックチェーンクエリサービスは、前記ブロックチェーンから直接データを取得しない、請求項53に記載の方法。
【請求項55】
複数の追加のキャッシュエンジンを提供することであって、前記複数の追加のキャッシュエンジンは、ブロックチェーンクローラを含まない、提供することと、前記キャッシュエンジンの前記ブロックチェーンクローラを使用して、前記ブロックチェーンデータの前記サブセットを前記複数の追加のキャッシュエンジンに書き込むこととを更に含む、請求項33に記載の方法。
【請求項56】
前記複数の追加のキャッシュエンジンのそれぞれは、少なくとも1つの追加のブロックチェーンクエリサービスに通信可能に結合される、請求項55に記載の方法。
【請求項57】
追加のキャッシュエンジンを提供することを更に含み、前記ブロックチェーンクエリサービスは、前記追加のキャッシュエンジンに通信可能に結合される、請求項33に記載の方法。
【請求項58】
前記追加のキャッシュエンジンは、追加のキャッシュストレージを含み、前記キャッシュストレージ及び前記追加のキャッシュストレージは、同じデータを記憶する、請求項57に記載の方法。
【請求項59】
前記追加のキャッシュエンジンは、追加のキャッシュストレージを含み、前記キャッシュストレージ及び前記追加のキャッシュストレージは、異なるデータを記憶する、請求項57に記載の方法。
【請求項60】
キャッシュレジストリを提供することであって、前記キャッシュレジストリは、前記キャッシュエンジンに通信可能に結合される、提供することと、前記キャッシュエンジンに関するメタデータを前記キャッシュレジストリ内に記憶することであって、前記キャッシュエンジンに関する前記メタデータは、前記ブロックチェーンクエリサービスを含む複数のブロックチェーンクエリサービスによってアクセス可能である、記憶することとを更に含む、請求項33に記載の方法。
【請求項61】
前記メタデータは、前記キャッシュエンジンの一意識別子を含む、請求項60に記載の方法。
【請求項62】
前記メタデータは、前記キャッシュエンジンによって提供されるサービスの種類を定義する、請求項60に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
相互参照
[0001] 本願は、参照により本明細書に全体として援用される米国仮特許出願第62/847,591号に対する優先権を主張する。
【背景技術】
【0002】
背景
[0002] ブロックチェーンは、暗号手法を使用してリンクされるデータブロックのリストである。各ブロックは、リスト内の前のブロックのハッシュ、タイムスタンプ及びトランザクションデータを含み得る。特定のブロック内のデータを変更するために、ブロックチェーン内の後続の全てのブロックを変更する必要があり得、それは、かかる後続ブロックのコンセンサスを必要とし得る。この理由のため、ブロックチェーンは、データを安全に記憶するための所望の媒体であり得る。しかし、ブロックチェーンは、クエリに関して最適化されないことがあり得る。ブロックチェーンソフトウェアは、JavaScript Objection Notation-RPC(「JSON-RPC」)等の組み込みクエリメカニズムを含み得るが、かかるメカニズムは、原始的であり、ブロックチェーンをクエリするための限られた方法のみを提供し得る。例えば、ブロックチェーントランザクションを集約又はフィルタすることができない場合がある。更に、そのような原始的なクエリメカニズムは、ブロックチェーンの独自のデータ構造によってサポートされる直ちに入手可能なデータセットを取得できるようにし得るが、第2層ステートマシンとしてブロックチェーンから計算又は導出されるデータセットをクエリできない場合がある。利用可能なクエリメカニズムによって提供されるスループットのレベルも低いことがあり得、ときにブロックチェーンソフトウェアをクラッシュさせ得、それは、再インデックスのためにブロックチェーンノードがオフラインになることを招き得る。再インデックスは、ホストマシン及びクラッシュの重大度に応じて数時間、又は数日間、又は数週間かかることがある。この期間中、ブロックチェーンを生産のために使用することができない。
【発明の概要】
【0003】
概要
[0003] 本開示は、ブロックチェーンからデータを取得するためのシステム、方法及びコンピュータプログラム製品を提供する。本明細書に記載するシステムは、ブロックチェーンクエリサービス及び別個のキャッシュエンジンを有し得る。キャッシュエンジンは、ブロックチェーンをクローリングし、かかるデータをインデックス付き形式でストレージに書き込むことにより、ブロックチェーンからデータを直接取得することができる。その後、キャッシュエンジンは、他のキャッシュエンジンにデータをレプリケートするか、又はデータをブロードキャストすることができる。キャッシュエンジンは、ブロックチェーンクエリサービスにデータを提供することもできる。
【0004】
[0004] ブロックチェーンクエリサービスとキャッシュエンジンとを別々の実装することは、多数の利点を与え得る。2つのコンポーネントを分けることは、ブロックチェーン内への直接クエリの回数を最小限に抑えることができ、それは、ネットワーク帯域幅の要件及びブロックチェーンがクラッシュする可能性を減らし得る。2つのコンポーネントを分けることは、ブロックチェーンクエリのレイテンシを減らすこともできる。アプリケーションからの要求を満たすために、実際にはブロックチェーンデータのごく一部のみが必要であっても、既存のブロックチェーンクエリサービスは、その状態を更新するためにブロックチェーン全体を直接取得し、それらの要求に応答する必要があり得る。このプロセスは、不要なレイテンシを発生させ得る。対照的に、本明細書に記載するキャッシュエンジンは、クエリに対してコンダクティブなインデックス付き形式でブロックチェーンデータを記憶することができる。ブロックチェーンデータをインデックス付けすることにより、キャッシュエンジンは、多くの異なる種類のブロックチェーンクエリサービスにとってブロックチェーンデータをより迅速及び容易に入手できるようにすることができる。
【0005】
[0005] 一態様では、本開示は、ブロックチェーンデータを取得するための方法を提供する。この方法は、(i)キャッシュストレージ及びブロックチェーンクローラを含むキャッシュエンジンと、(ii)キャッシュエンジンに通信可能に結合されるブロックチェーンクエリサービスとを含むブロックチェーンシステムを提供することを含み得る。ブロックチェーンクエリサービスは、状態ストレージ及びキャッシュクローラを含み得る。この方法は、ブロックチェーンからブロックチェーンデータを取得し、及びブロックチェーンデータのサブセットをキャッシュストレージに書き込むか、又はブロックチェーンデータのサブセットに基づいてキャッシュストレージの状態を更新するためにブロックチェーンクローラを使用することを更に含み得る。ブロックチェーンデータのサブセットは、キャッシュエンジンによって生成されるクエリを満たすことができる。この方法は、キャッシュストレージからキャッシュデータを取得し、及び少なくともキャッシュデータに基づいて状態ストレージの状態を更新するためにキャッシュクローラを使用することを更に含み得る。
【0006】
[0006] 一部の実施形態では、ブロックチェーンデータのサブセットは、ブロックチェーンデータの全てを含む。一部の実施形態では、ブロックチェーンクエリサービスは、サーバを含み、この方法は、状態ストレージの状態を1つ又は複数のアプリケーションに通信するためにサーバを使用することを更に含む。一部の実施形態では、ブロックチェーンクエリサービスは、ブロックチェーンから直接データを取得しない。一部の実施形態では、(c)は、キャッシュエンジンにクエリ要求又はサブスクリプション要求を伝送することにより、キャッシュストレージからキャッシュデータを取得することを含む。一部の実施形態では、クエリは、ブロックチェーンクエリサービスからのクエリ要求又はサブスクリプション要求に少なくとも部分的に基づく。一部の実施形態では、クエリは、キャッシュストレージの現在の状態に少なくとも部分的に基づく。一部の実施形態では、クエリは、取得するためのブロックチェーン内の複数のブロックを指定する。一部の実施形態では、この方法は、キャッシュストレージにブロックチェーンデータのサブセットを書き込むとき、キャッシュ更新イベントを伝送するためにキャッシュエンジンを使用することを更に含む。一部の実施形態では、クエリは、ワンタイムクエリである。一部の実施形態では、クエリは、サブスクリプションである。一部の実施形態では、サブスクリプションは、満たされたときにブロックチェーンクローラにブロックチェーンからデータを取得させる条件を含む。一部の実施形態では、条件は、時間又は頻度を含む。一部の実施形態では、条件は、ブロックチェーン上のイベントを含む。一部の実施形態では、(b)は、ブロックチェーンデータのサブセットをインデックス付き形式でキャッシュストレージに書き込むことを含む。一部の実施形態では、インデックス付き形式は、ファイルシステム、データベース又はメモリ内ストレージである。一部の実施形態では、ブロックチェーンクローラは、状態遷移エンジンを含み、状態遷移エンジンは、ブロックチェーンデータのサブセットをキャッシュストレージに書き込む。一部の実施形態では、(b)は、ブロックチェーンデータを正規化、符号化、復号、シリアル化、逆シリアル化、変換又はフィルタして、ブロックチェーンデータのサブセットを生成するために状態遷移エンジンを使用することを含む。一部の実施形態では、キャッシュストレージは、最大でブロックチェーンのコンテンツ全体のサブセットを記憶するように構成される。一部の実施形態では、この方法は、指定された時間枠外で発生したトランザクションに対応するブロックチェーンデータをキャッシュストレージから取り除くことを更に含む。一部の実施形態では、ブロックチェーンクエリサービスは、複数のブロックチェーンクエリサービスの1つであり、複数のブロックチェーンクエリサービスのそれぞれは、キャッシュに通信可能に結合される。一部の実施形態では、複数のブロックチェーンクエリサービスは、ブロックチェーンから直接データを取得しない。一部の実施形態では、この方法は、複数の追加のキャッシュエンジンを提供することであって、複数の追加のキャッシュエンジンは、ブロックチェーンクローラを含まない、提供することと、キャッシュエンジンのブロックチェーンクローラを使用して、ブロックチェーンデータのサブセットを複数の追加のキャッシュエンジンに書き込むこととを更に含む。一部の実施形態では、複数の追加のキャッシュエンジンのそれぞれは、少なくとも1つの追加のブロックチェーンクエリサービスに通信可能に結合される。一部の実施形態では、この方法は、追加のキャッシュエンジンを提供することを更に含み、ブロックチェーンクエリサービスは、追加のキャッシュエンジンに通信可能に結合される。一部の実施形態では、追加のキャッシュエンジンは、追加のキャッシュストレージを含み、キャッシュストレージ及び追加のキャッシュストレージは、同じデータを記憶する。一部の実施形態では、追加のキャッシュエンジンは、追加のキャッシュストレージを含み、キャッシュストレージ及び追加のキャッシュストレージは、異なるデータを記憶する。一部の実施形態では、この方法は、キャッシュレジストリを提供することであって、キャッシュレジストリは、キャッシュエンジンに通信可能に結合される、提供することと、キャッシュエンジンに関するメタデータをキャッシュレジストリ内に記憶することであって、キャッシュエンジンに関するメタデータは、ブロックチェーンクエリサービスを含む複数のブロックチェーンクエリサービスによってアクセス可能である、記憶することとを更に含む。一部の実施形態では、メタデータは、キャッシュエンジンの一意識別子を含む。一部の実施形態では、メタデータは、キャッシュエンジンによって提供されるサービスの種類を定義する。
【0007】
[0007] 本開示の別の態様は、1つ又は複数のコンピュータプロセッサによって実行されると、上記の又は本明細書の他の箇所の方法の何れかを実装する機械実行可能コードを含む非一時的コンピュータ可読媒体を提供する。
【0008】
[0008] 本開示の別の態様は、1つ又は複数のコンピュータプロセッサ及びそのプロセッサに結合されるコンピュータメモリを含むシステムを提供する。コンピュータメモリは、1つ又は複数のコンピュータプロセッサによって実行されると、上記の又は本明細書の他の箇所の方法の何れかを実装する機械実行可能コードを含む。
【0009】
[0009] 本開示の更なる態様及び利点は、以下の詳細な説明から当業者に容易に明らかになり、以下の詳細な説明では、本開示の例示的実施形態のみを示し、説明する。理解されるように、本開示は、他の及び異なる実施形態が可能であり、その幾つかの詳細は、様々な明白な点において全て本開示から逸脱することなく修正が可能である。従って、図面及び説明は、本質的に限定ではなく、例示と見なすべきである。
【0010】
参照による援用
[0010] 本明細書で言及する全ての刊行物、特許及び特許出願は、個々の刊行物、特許又は特許出願が参照により援用されると具体的及び個別に示される場合と同程度に参照により本明細書に援用される。参照により援用される刊行物及び特許又は特許出願が、本明細書に含まれる開示と矛盾する限りに、本明細書は、そのようないかなる矛盾する資料にも優先し、及び/又は先行することを意図する。
【0011】
図面の簡単な説明
[0011] 本発明の新規の特徴は、添付の特許請求の範囲で詳細に記載される。本発明の原理が利用される例示的実施形態を記載する以下の詳細な説明及び添付図面(本明細書では「図面」及び「図」とも呼ぶ)を参照することにより、本発明の特徴及び利点のより十分な理解が得られる。
【図面の簡単な説明】
【0012】
【
図1】[0012]ブロックチェーンクエリサービスを概略的に示す。
【
図2】[0013]ブロックチェーンキャッシュシステムを概略的に示す。
【
図3】[0014]複数のブロックチェーンクエリサービスにサービス提供するために多重化されたブロックチェーンキャッシュシステムを概略的に示す。
【
図4】[0015]複数の他のブロックチェーンキャッシュシステムにサービス提供するために多重化されたブロックチェーンキャッシュシステムを示す。
【
図5】[0016]複数のキャッシュエンジンにサービス提供するために多重化されたブロックチェーンクローラを概略的に示す。
【
図6】[0017]複数のキャッシュエンジンに接続するブロックチェーンクエリサービスを概略的に示す。
【
図7】[0018]キャッシュレジストリシステムを概略的に示す。
【
図8】[0019]ブロックチェーンをクローリングするためのプロセスのフローチャートである。
【
図9】[0020]ブロックチェーンをリスンするためのプロセスのフローチャートである。
【
図10】[0021]クライアントとインタフェースするためのプロセスのフローチャートである。
【
図11】[0022]キャッシュエンジンをクローリングするためのプロセスのフローチャートである。
【
図12】[0023]キャッシュエンジンをリスンするためのプロセスのフローチャートである。
【
図13】[0024]
図2のブロックチェーンキャッシュシステムの代替的実施形態を概略的に示す。
【
図14】[0025]本明細書で示す方法を実装するようにプログラム又は他に構成されるコンピュータシステムを概略的に示す。
【発明を実施するための形態】
【0013】
詳細な説明
[0026] 本発明の様々な実施形態を本明細書で示し、説明してきたが、かかる実施形態は、例として示すに過ぎないことが当業者に明らかになる。本発明から逸脱することなく、多数の改変形態、変更形態及び置換形態が当業者に想到され得る。本明細書に記載する本発明の実施形態に対する様々な代替形態を用い得ることを理解すべきである。
【0014】
[0027] 「少なくとも」、「上回る」又は「以上」という用語が一連の2つ以上の数値内の最後の数値の後にある場合には常に、「少なくとも」、「上回る」又は「以上」という用語は、その一連の数値内の数値のそれぞれに適用される。例えば、1、2又は3以上は、1以上、2以上又は3以上に等しい。
【0015】
[0028] 「上回らない」、「未満」又は「以下」という用語が一連の2つ以上の数値内の第1の数値の後にある場合には常に、「上回らない」、「未満」又は「以下」という用語は、その一連の数値内の数値のそれぞれに適用される。例えば、1、2又は3以下は、3以下、2以下又は1以下に等しい。
【0016】
[0029]
図1は、ブロックチェーンクエリサービス102を示す。ブロックチェーンクエリサービス102は、ブロックチェーンクローラ104及びクエリエンジン106を有し得る。ブロックチェーンクローラ104は、ブロックチェーンクライアント108及び状態遷移エンジン110を有し得る。ブロックチェーンクローラ104は、ブロックチェーン100内のデータをクロールし、クエリエンジン106の状態ストレージ112にデータ投入するためにブロックチェーンクライアント108を介してブロックチェーン100と通信することができる。クローリングは、ブロックチェーンクライアント108によって行われ得る。ブロックチェーン100をクロールするために、ブロックチェーンクライアント108は、ブロックチェーン100に関連するアプリケーションプログラミングインタフェース(「API」)に対して要求(例えば、JavaScript Objection Notation-RPC(「JSON-RPC」要求)を行うこと、ブロックチェーン100のファイルシステムに直接アクセスすること等ができる。このプロセスは、インターネットからデータを収集し、抽出するためのウェブ検索エンジンにおいて広く使用されるウェブクローラへの参照として「クローリング」と呼ぶことができる。ブロックチェーンクローラは、ウェブクローラと同様であり得るが、ブロックチェーンクローラは、ウェブクローラによって典型的に用いられる様々な方法によってではなく、ブロックチェーンのデータ構造を(例えば、ブロック1、2、3及び4からのデータを時系列順にフェッチすることによって)時系列順にクロールすることができる。ウェブクローラがインターネットデータの全ての有意味の側面を分析し、インデックス付けしようとするのと同じように、ブロックチェーンクローラ104は、ブロックチェーン100から入手可能な全てのデータ片を収集することができる。
【0017】
[0030] それらのデータ片の全てを様々な方法でインデックス付けすることができる。更に、ブロックチェーンデータは、全く異なる種類の仮想データベース又はストレージシステムを構築するために使用することさえできる。例えば、生のブロックチェーンデータを記憶する代わりに、ブロックチェーンクエリサービス102は、新たなブロックチェーントランザクションをどのように解釈し、記憶すべきかを規定する一定の規則を実装することができる。この規則セットに従い、ブロックチェーンデータを入力として使用することにより、本格的なステートマシンを動作させることが可能であり得る。この手法は、可変データベースの作成を可能にすることができる。例えば、ブロックチェーンクエリサービス102は、「+1」、「+2」、「-1」及び「+3」等のコマンドを含むトランザクションを処理することができるステートマシンを実装することができる。ステートマシンは、かかるコマンドの結果として「5」の状態を保つことができる。ブロックチェーン自体は、不変ストレージであるが、説明した通り、ブロックチェーンクエリサービス102は、可変ストレージを強化するために不変データセットを利用できるため、これは、ブロックチェーンの興味深い使用法である。クローリングによってデータが入手可能になると、ブロックチェーンクエリサービスは、この新たなストレージへのクエリインタフェースを実装することができ、それにより、外部のクライアント及びアプリケーション116は、クエリサービスからのデータを消費することができる。
【0018】
[0031] ブロックチェーンクライアント108がブロックチェーン100からデータをフェッチした後、ブロックチェーンクライアント108は、そのデータを状態遷移エンジン110に渡すことができ、状態遷移エンジン110は、予めプログラムされたロジックに従ってデータを処理することができる。ブロックチェーンクライアント108から抽出されるデータを使用することに加えて、状態遷移エンジン110は、状態ストレージ112の現在のコンテンツを利用して、状態ストレージ112をどのように更新するかを決めることができる。
【0019】
[0032] ブロックチェーン100から状態ストレージ112に及ぶワークフローは、要求に応じて又はブロックチェーン100からのリアルタイムイベントをリスンすることに基づいて実行され得る。例えば、ブロックチェーンクライアント108は、ブロックチェーン100によって発せられる全てのシステムイベント(例えば、ZeroMQ(登録商標)メッセージ)をリスンし、上記のブロックチェーンクローリングプロセスをトリガすることができる。状態ストレージ112がデータ投入され、利用可能になると、サーバエンジン114は、状態ストレージ112に接続して外部アプリケーション116にクエリサービスを提供することができる。アプリケーション116がブロックチェーンをクエリする必要がある場合、ブロックチェーン100を直接クエリするのではなく、アプリケーション116は、ブロックチェーンサービス102をクエリすることができる。それを行うために、アプリケーション116は、サーバエンジン114に接続し、要求を送信することができる。サーバエンジン114は、要求を解釈し、状態ストレージ112のクエリを行い、応答を返すことができる。
【0020】
[0033]
図1のブロックチェーンクエリサービス102は、一定の制限を有し得る。この種のブロックチェーンクエリサービスは、その状態を維持するためにブロックチェーンからデータを直接取得し得るため、とりわけかかるクエリサービスが1つのブロックチェーンノードインスタンスに同時に接続し、1つのブロックチェーンノードインスタンスから同時に同期する場合、かかるクエリサービスと特定のブロックチェーンとの間のインタフェースは、ボトルネックを形成し得る。この問題に対処するための1つの方法は、1ブロックチェーンノード当たりの要求負荷を散らすために、ブロックチェーンノードソフトウェアの更なるインスタンスを追加することである。しかし、そのような解決策は、不十分であり得る。
【0021】
[0034] まず、ブロックチェーンノードソフトウェアの更なるインスタンスを作成するために、ブロックチェーンクエリサービスは、ブロック1から開始して、ブロックチェーンの全状態履歴を記憶する必要があり得る。これには、著しい量のメモリが必要であり得、またメモリ内に記憶されるデータのごく一部にのみ関心があり得る。第2に、ブロックチェーンノードソフトウェアは、ネットワーク上でブロックチェーンクエリサービスと常に同期する必要があり得、それは、ネットワーク帯域幅の制約によりスケーラブルでないことがある。例えば、1ギガバイト(「GB」)のブロックチェーンノードの1000個のインスタンスを同期するには、1テラバイトのネットワーク帯域幅が必要になるであろう。
【0022】
[0035]
図1のブロックチェーンクエリサービス102等のブロックチェーンクエリサービスは、更なる制限を有し得る。例えば、かかるサービスは、組み込みJSON-RPC APIによってブロックチェーンをクローリングすること、ローカルブロックチェーンファイルを直接読み出すこと又は接続されたブロックチェーンピアに対してピアツーピアデータ要求を直接行うことによって等、ブロックチェーンからデータを取得する限られた方法のみを有し得る。ブロックチェーンファイルをローカルに読み出すことに関する制限は、この方法を単一の機械上でローカルにのみ使用できる可能性があることである。ブロックチェーンクエリサービスは、リモートブロックチェーンインスタンスからデータを取得するためにこの方法を使用できない可能性がある。JSON-RPCを使用する組み込みクエリ方法に関して、多重化(例えば、単一の伝送媒体内に信号を合成すること)及びHTTP2サーバプッシュを行うことを理由として、大きい規模でより高性能なHTTP2等のプロトコルがある。ネットワーク内の全てのシーダーにレプリケーションをオフロードすることができるIPFS、BitTorrent及びDAT等のピアツーピアレプリケーション方法もある。しかし、そのようなプロトコルを使用することは、ブロックチェーンのセキュリティを損ない得るため、ブロックチェーンソフトウェアは、概して、かかるプロトコルを使用しない。
【0023】
[0036] 既存のブロックチェーンクエリサービスの別の制限は、特定のブロックチェーンクエリサービスが、ブロックチェーンクエリサービスが行う特定の機能を促進する形式でデータを記憶することができるが、他の機能又は確認を促進する形式でデータを記憶しない場合があることである。例えば、ブロックチェーンクエリサービス102が、新たなトランザクションごとにそのカウンタをインクリメントするカウンタサービスを提供するステートマシンである場合、ブロックチェーンクエリサービス102は、ブロックチェーン上で生じた全てのイベントを追跡し、アプリケーション116がクエリを行うたびにカウンタを再構築するのではなく、カウンタのみをその状態ストレージ112内に記憶することができる。これは、ブロックチェーンクエリサービスをクエリするサードパーティアプリケーションにとって効率的であり得るが、データセットの真正性を確認することが容易でないことがあり得る。現在の状態の真正性を確認することは、ブロックチェーン100を再クローリングすること、カウンタを再構築すること及びそれを状態ストレージ112の現在の状態と比較することを必要とし得る。
【0024】
[0037] 一部の事例では、ブロックチェーンクエリサービスの機能に金銭が関与することがあり、その場合、確認及び真正性がとりわけ重要である。例えば、ブロックチェーンクエリサービスは、トークンシステムを実装することができる。トークンは、様々なブロックチェーントランザクションパターンに基づいて動作し、トークンの転送又は他の重要なアクションを示す状態遷移を行うステートマシンであり得る。ステートマシンは、ブロックチェーンクエリサービス102の形態でブロックチェーンの外側に存在することができる。そのため、トークンの転送がブロックチェーンネットワークのマイナによって検証されない場合がある。代わりに、検証は、仮想的であり得、ブロックチェーンをクローリングすることによって構築され得る。真正性は、ブロックチェーンマイナによって直接補強されず、ブロックチェーンクエリサービス102を実行するプロトコルによって補強されるため、トークンシステムの顧客は、(ブロックチェーンクエリサービス102として実装される)トークンシステムの現在の状態が正確であり、ブロックチェーンの状態に実際に対応することを確実にすることを望み得る。
【0025】
[0038] その結果、ブロックチェーンの再クローリングがより頻繁になり得、ブロックチェーン上の負荷平衡の問題がより深刻になり得る。例えば、真正性を確認するために、そのような各ブロックチェーンクエリサービスがブロックチェーンを再クローリングすることを法執行機関が要求し得る。又は、誤りを検出し、最小化するために、ブロックチェーンクエリサービスは、再クロールを絶えず実行することを望み得る。その場合、全てのブロックについて、ステートマシンの出現当初からブロックチェーンを再クロールすることは、ブロックチェーンソフトウェア100に対して負担をかけ過ぎることがあり得る。
【0026】
[0039] 既存のブロックチェーンクエリサービスの別の制限は、各ブロックチェーンクエリサービスが接続するブロックチェーンインスタンスを中心に各ブロックチェーンクエリサービスが集中化され得ることである。そのようなブロックチェーンインスタンスは、中心的な障害点になり得る。全てのブロックチェーンクエリサービスは、ソースブロックチェーンインスタンスに直接接続しなければならないため、たとえブロックチェーン自体が立ち上がって稼働していても、それらのブロックチェーンクエリサービスは、そのソースブロックチェーンへの接続を失い、ネットワーク分割等の一定のエッジケース中に更新を停止し得る。ブロックチェーンデータのための低コストのオフチェーンレプリケーション方法がないことは、ブロックチェーンクエリサービスの全アーキテクチャ及びエコシステムを、信頼できず、スケーラブルでないものにする。
【0027】
[0040] 既存のブロックチェーンクエリサービスの別の制限は、データを記憶するためのシステム及びデータを供給するためのシステムが必ずしも同じ品質を必要としないことである。例えば、Amazon Glacier等の既存のクラウドアーカイバルソリューションは、Amazon S3等のファイル配信サービスと異なる設計を有し得る。Amazon Glacierシステムは、アーカイブのために設計され得るのに対して、S3は、エンドユーザによる消費のために設計され得る。その結果、S3は、データの高性能のロードに関して最適化され得るのに対して、Glacierは、低いストレージコストに関して最適化され得る。既存のブロックチェーンクエリサービスが行うように両方の特徴を単一のシステムにまとめることにより、両方の目的に関してシステムを最適化することが困難になり得る。上述のブロックチェーンクエリサービスに関する現行の従来技術は、アーカイブ機能及びサービス提供機能の両方が単一のシステムとしてまとめられる固定アーキテクチャである。かかるアーキテクチャを最適化することは、困難であり得る。
【0028】
[0041] ブロックチェーンのスループットが低いことを理由として、ブロックチェーンをデータ台帳として使用することは、当初推奨されなかったため、上述の制限は、初期のブロックチェーンについてブロックチェーンクエリサービスを動作不能にしなかった。例えば、ビットコイン(BTC)は、単一のブロック内に1メガバイト(「MB」)~4MBのトランザクションデータのみを記憶することができる。しかし、最新のブロックチェーンネットワークは、スケーリングに関して及びデータ台帳として使用することに関して最適化され得、それは、上述の制限を悪化させ得る。従って、ブロックチェーン内への直接クエリを最小限に抑え、ブロックチェーンから派生するデータを記憶し、レプリケートするコストを大幅に下げるように、モジュール式のブロックチェーンキャッシュ及びレプリケーションシステムを有することが望ましい場合がある。
【0029】
[0042]
図2は、一実施形態によるブロックチェーンキャッシュシステムを概略的に示す。このブロックチェーンキャッシュシステムは、ブロックチェーンクエリサービス102及びキャッシュエンジン200を有し得る。キャッシュエンジン200は、ブロックチェーンクローラ202及びキャッシュサービス204を有し得る。ブロックチェーンクエリサービスは、
図1のブロックチェーンクローラ104の代わりに、キャッシュクローラ216を用いることができる。キャッシュクローラ216は、ブロックチェーン100を直接クロールするのではなく、キャッシュエンジン200とインタフェースすることができる。キャッシュクローラ216は、キャッシュエンジン200からデータをフェッチするためにキャッシュクライアント218を介してキャッシュエンジン200とインタフェースすることができる。
【0030】
[0043] キャッシュエンジン200は、ブロックチェーン100からデータをクロールし、そのデータをキャッシュサービス204内に投入するためにブロックチェーンクローラ202を利用することができる。ブロックチェーンクローラ202は、ブロックチェーンクライアント206及び状態遷移エンジン208を含み得る。キャッシュエンジン200のブロックチェーンクローラ202は、
図1のブロックチェーンクエリサービス102のブロックチェーンクローラ104と同様であり得、ブロックチェーンクローラ104と同様の機能を実行することができる。ブロックチェーンクローラ202は、ブロックチェーン100に直接接続し、それからデータを抽出することができる。クローリングアクションは、JSON-RPC等の組み込みブロックチェーンAPIを使用して行うことができるが、ローカルブロックチェーンファイルシステムに直接アクセスすることにより又は他の任意の既存の手段により追加で又は代替的に行われ得る。
【0031】
[0044] ブロックチェーンクローラ202は、抽出データを状態遷移エンジン208に送信することができ、状態遷移エンジン208は、予めプログラムされたロジックに基づいてキャッシュストレージ210を更新するためにそのデータを使用することができる。予めプログラムされるロジックは、データの正規化、符号化、復号、シリアル化、逆シリアル化、変換、フィルタリング等を実装するロジックを含み得る。キャッシュストレージ210は、ファイルシステム、データベース(例えば、リレーショナルデータベース、ドキュメントデータベース、グラフデータベース、キー値データベース等)、メモリ内ストレージ等として実装することができる。例えば、キャッシュストレージ210がファイルシステムとして実装される場合、そのファイルシステムを更新することは、ファイルを作成、更新、移動又は削除することを含み得る。キャッシュストレージ210がデータベースとして実装される場合、状態遷移エンジン208は、データベースの挿入、更新又は削除を実行することができる。キャッシュストレージ210がメモリ内ストレージとして実装される場合、状態遷移エンジン208は、プログラム内の様々なメモリ内変数を作成、更新又は削除することができる。状態遷移エンジン208は、キャッシュストレージ210の状態をどのように更新するかを決めるために、キャッシュストレージ210の既存のコンテンツを利用することもできる。キャッシュストレージ210内のデータは、ブロックチェーンクエリサービス102にとって迅速及び容易にアクセスできるようにするために様々な方法でインデックス付けすることができる。
【0032】
[0045] キャッシュストレージ210は、ブロックチェーン100のサブセットを記憶することができる。サブセットは、指定された時間枠、例えば過去1時間、過去5時間、過去10時間、過去24時間、過去48時間等のうちに生じたブロックチェーントランザクションを含み得る。状態遷移エンジン208は、新たなトランザクションのためのスペースを空けるために、指定された時間枠外のトランザクションをキャッシュストレージ210から取り除くことができる。これは、キャッシュストレージ210のクエリが決定論的な結果を返すことを確実にし得る。代わりに又は加えて、サブセットは、一定の条件又は基準を満たすブロックチェーントランザクションを含み得る。
【0033】
[0046] キャッシュストレージ210がデータ投入され、利用可能になると、キャッシュストレージ210は、キャッシュサービス204によって外部クライアントにサービス提供され得る。キャッシュサービス204は、キャッシュストレージ210を含むことができ、その状態管理は、状態遷移エンジン208によって維持される。キャッシュサービス204は、サーバエンジン214も含むことができ、サーバエンジン214は、キャッシュサービス204を外部クライアントに公開することができる。キャッシュクライアント218は、サーバエンジン214を介してキャッシュサービス204に接続し、どのような種類のデータを探しているかを記述する要求を送信することができる。サーバエンジン214は、キャッシュストレージ210からキャッシュクライアント218に関連データを配信することができる。次いで、キャッシュクライアント218は、そのデータを状態遷移エンジン220に送信することができ、状態遷移エンジン220は、ブロックチェーンクエリサービス102の状態ストレージ112をプログラム的に更新することができる。データ伝送のモードは、プルベース又はプッシュベースであり得る。例えば、キャッシュクライアント218は、サーバエンジン214に要求(即ちプル)を継続的に送信することができるか、又は最初のワンタイム要求を送信することができ、その後、サーバエンジン214は、最初の要求を満たすデータをキャッシュクライアント218にプッシュすることができる。次に、ブロックチェーンクエリサービス102は、ブロックチェーンクローラ104(
図1)によってブロックチェーン100からデータを直接調達するのではなく、キャッシュクローラ216を介してキャッシュエンジン200からそのデータを調達することができる。ブロックチェーンクエリサービス102は、キャッシュクローラ216とブロックチェーンクローラ104とを交互に交換可能に切り替えることができるように設計され得る。ブロックチェーンは、従来、分散ツリー構造を有するため、上記のようにブロックチェーンデータを集中化した位置においてインデックス付けし、記憶することは、非慣習的と見なされ得る。
【0034】
[0047]
図2のコンポーネントは、1つ又は複数の位置において1つ又は複数の計算装置上で実装され得る。計算装置は、サーバ、デスクトップ又はラップトップコンピュータ、電子タブレット、モバイル装置等であり得る。計算装置は、1つ又は複数の位置にあり得る。計算装置は、汎用プロセッサ、グラフィックス処理ユニット(GPU)、特定用途向け集積回路(ASIC)、書換可能ゲートアレイ(FPGA)等を有することができる。計算装置は、メモリ、例えばダイナミック又はスタティックランダムアクセスメモリ、読取専用メモリ、フラッシュメモリ、ハードドライブ等を更に有することができる。メモリは、実行時にサブシステムの機能を計算装置に実装させる命令を記憶するように構成され得る。計算装置は、ネットワーク通信装置を更に有することができる。ネットワーク通信装置は、計算装置がネットワーク上で互いに及び任意の数のユーザ装置と通信することを可能にし得る。ネットワークは、有線ネットワーク又は無線ネットワークであり得る。例えば、ネットワークは、光ファイバネットワーク、Ethernet(登録商標)ネットワーク、衛星ネットワーク、セルラネットワーク、Wi-Fi(登録商標)ネットワーク、Bluetooth(登録商標)ネットワーク等であり得る。他の実装形態では、計算装置は、インターネットによってアクセス可能な幾つかの分散計算装置であり得る。かかる計算装置は、クラウド計算装置と見なすことができる。
【0035】
[0048] キャッシュエンジン200及びキャッシュクローラ216は、2つの動作モード、即ち「クロールモード」及び「リスンモード」を有し得る。キャッシュエンジン200は、動作の任意の瞬間においてクロールモード(
図8)又はリスンモード(
図9)であり得る。キャッシュクローラ216も動作の任意の瞬間においてクロールモード(
図11)又はリスンモード(
図12)であり得る。
【0036】
[0049] キャッシュエンジン200がクロールモードである場合(
図8)、キャッシュエンジン200は、ブロックチェーンからのデータをキャッシュストレージ210内にクロールして記憶するために、クエリの組を反復処理することができる。キャッシュエンジン200がリスンモードである場合(
図9)、キャッシュエンジン200は、ブロックチェーンからの任意のイベントをリスンするイベントループを開始することができ、ブロックチェーンを事前対応的に反復処理するのではなく、関連イベントを検出するときにのみキャッシュストレージ210への状態遷移を実行する。
【0037】
[0050]
図8は、ブロックX~ブロックYのブロックチェーン100をクローリングするためのプロセスの一例のフローチャートである。このプロセスは、クロールモード中に
図2のキャッシュエンジン200によって実行され得る。ブロックチェーンクライアント206は、QUERY_SETを構築することができ、QUERY_SETは、ブロックチェーンクローラ202が「X~Yの全てのブロックをクロールする」べきであることを指定することができる(800)。ブロックチェーンクライアント206は、QUERY_SETを幾つかの異なる方法で構築することができる。ブロックチェーンクライアント206は、例えば、X~Yの範囲の整数の配列(例えば、[X,X+1,X+2,...,Y])を作成することができる。QUERY_SETは、MongoDB、JQ又はBitquery等のクエリ言語で実装することができる。QUERY_SETは、キャッシュエンジン200によって静的に指定され得る。加えて又は代わりに、QUERY_SETは、プログラム的に動的に生成され得る。QUERY_SETは、キャッシュエンジン200に接続するサードパーティ外部クライアントからの要求、例えばブロックチェーンクエリサービス102からのクエリに基づくこともできる。例えば、ブロックチェーンサービス102は、キャッシュエンジン200をクエリし、自らが必要とするデータがキャッシュストレージ210内で入手できないこと又はかかるデータが十分最新でないことを知ることができる。その場合、QUERY_SETは、入手不能な又は十分最新でないデータを指定することができる。QUERY_SETは、ブロックの高さに限定されなくてもよく、トランザクションプッシュデータパターン又は様々なブロックチェーンメタデータ等のブロックチェーンの様々な側面を含む他の要素を指定することもできる。一例は、ブロックチェーントランザクションIDの配列であり得る。
【0038】
[0051] QUERY_SETが構築されると、ブロックチェーンクライアント206は、QUERY_SETのINDEXを0に設定し(802)、QUERY_SET[INDEX]のクエリ命令を使用してブロックチェーン100から読み出しを開始することができる(804)。クエリに関するブロックチェーンデータが問題なくフェッチされると、ブロックチェーンクライアント206は、状態遷移エンジン208にデータを送信することができる。状態遷移エンジン208は、その予めプログラムされたロジックを用いて到来データを処理し、それに従ってキャッシュストレージ210を更新することができる(806)。
【0039】
[0052] 次いで、キャッシュエンジン200は、別のキャッシュクライアント218d(
図4)等の他のコンポーネントが更なるレプリケーションをリスンしている場合、キャッシュ更新イベントを発することができる(808)。キャッシュ更新イベントを発した後、ブロックチェーンクライアント206は、INDEXをINDEX+1にインクリメントし(810)、INDEXがQUERY_SETの長さ以上であるかどうかを確認すること(812)により、QUERY_SETが完全に反復処理されていないことを確実にすることができる。INDEXがQUERY_SETの長さ以上でない場合、ブロックチェーンクライアント206は、QUEERY_SET[INDEX+1]の命令を使用して、ブロックチェーン100をクエリすることができる。他方では、INDEXがQUERY_SETの長さ以上である場合、クローリングが完了する。その後、キャッシュエンジン200は、一時停止するか又はリスンモードに入ることができる(
図9)。
【0040】
[0053] キャッシュクローラ216のキャッシュクライアント218は、キャッシュストレージ210を同様の方法でクロールすることができる。これについては、
図11でより詳細に説明する。
【0041】
[0054]
図9は、ブロックチェーン100をリスンするためのプロセスの一例のフローチャートである。このプロセスは、ブロックチェーン100に持続的に接続され、ブロックチェーン100をリスンすることができるブロックチェーンクライアント206によって実行され得る。ブロックチェーンクライアント206は、ブロックチェーン100から自らにプッシュされる関連イベントをリスンすることができる。これは、ブロックチェーンクライアント206がループを反復処理することによってブロックチェーン100を事前対応的にクエリし、反復が終了したら一時停止するクロールモード(
図8)と対照的である。
【0042】
[0055] ブロックチェーンクライアント206は、SUBSCRIPTION_QUERY_SETを構築することができる(900)。SUBSCRIPTION_QUERY_SETは、ブロックチェーンクライアント206がサブスクライブすることをキャッシュクライアント218が要求した条件の組であり得る。条件の組は、例えば、一定のデータパターン(例えば、一定のバイトシーケンス)と一致するトランザクション又は一定のブロックチェーンブロックに属するトランザクションを含み得る。条件の組は、キャッシュサービス204のサーバエンジン214によって組み込まれるか、又はプログラム可能な静的条件の組であり得る。加えて又は代わりに、SUBSCRIPTION_QUERY_SETは、予めプログラムされたロジックに基づいて動的に生成され得る。
【0043】
[0056] ブロックチェーンクライアント206は、ブロックチェーン100からのイベントをリスンすることができる(902)。全QUERY_SETを反復処理(812)し終えるまでインデックスをインクリメントすること(810)により、ブロックチェーンを継続的にクロールするクロールモードと異なり、リスンモードは、一定のイベントが発生する場合(904)にのみクローリングアクションをトリガする。新たなブロックチェーンイベントが発生すると、キャッシュエンジン200のブロックチェーンクライアント206がそのイベントを検出し、操作900で構築したSUBSCRIPTION_QUERY_SETを用いてブロックチェーン100をクエリすることができる(906)。SUBSCRIPTION_QUERY_SETによって定義される条件の組を満たすブロックチェーン100に対する更新がある場合、ブロックチェーンクライアント206は、状態遷移エンジン208にデータを送信することができ、状態遷移エンジン208は、そのデータを処理し、それに従ってキャッシュストレージ210を更新することができる(908)。次いで、キャッシュエンジン200がキャッシュ更新イベントを発することができる(910)。キャッシュエンジン200のブロックチェーンクライアント206は、新たなブロックチェーンイベントをリスンし続けることができる(902)。SUBSCRIPTION_QUERY_SETは、全てのイベントをリスンする条件であり得、その場合、追加のクエリステップ(906)が必要でない場合があり、システムは、単純に状態遷移エンジンにイベントデータを直接渡すことができる(908)。サブスクリプションを使用することは、ブロックチェーンクエリサービス102がアプリケーション116からの要求に応答するのにかかる時間を減らすことができ、なぜなら、応答データをキャッシュストレージ210内で容易に入手可能であり得、ブロックチェーン100内よりも容易にクエリすることができるからである。
【0044】
[0057]
図10は、クライアントとインタフェースするためにキャッシュサーバエンジン214によって行われるプロセスの一例のフローチャートである。キャッシュストレージ210にデータ投入されると、キャッシュストレージ210は、サーバエンジン214によって外部クライアントに公開することができる。キャッシュサーバエンジン214は、HTTPウェブサーバであり得るか、又はdat、IPFS、gRPC等の同様のプロトコルによって実装され得る。
【0045】
[0058] サーバエンジン214は、キャッシュクライアント218からの入接続をリスンすることができる(1000)。キャッシュクライアント218からの入接続要求が検出されると(1002)、サーバエンジン214は、接続要求がシングルクエリ要求であるかどうか、又は持続的な接続を必要とするサブスクリプション要求であるかどうかを判定することができる(1004)。要求がサブスクリプション要求である場合、サーバエンジン214は、要求を構文解析して、関連する接続メタデータをそのデータベース内に記憶することができる(1006)。メタデータは、
図9のSUBSCRIPTION_QUERY_SET並びにキャッシュクライアント218の接続済みインスタンスの追跡及びサービス提供に有用であり得る様々な情報片を含むことができる。キャッシュサービス204とキャッシュクライアント218との間の接続が確立されると、キャッシュサービス204は、キャッシュ状態更新イベントをリスンし始めることができる(1008)。(例えば、
図9の操作910に起因する)新たなキャッシュ状態更新イベントがある場合、キャッシュサービス204は、そのイベントを処理し(1010)、キャッシュクライアント218の関連する接続済みインスタンスに通知することができる(1012)。その後、キャッシュサービス204は、更なるキャッシュ更新イベントをリスンし続けることができる(1008)。
【0046】
[0059] 他方では、入接続要求1002が単発のクエリ要求である場合、サーバエンジン214は、入要求を用いてキャッシュストレージ210をクエリし(1014)、対応する応答をキャッシュクライアント218に返すことができる(1016)。その後、キャッシュサービス204のサーバエンジン214は、新たな接続をリスンし続けることができる(1000)。
【0047】
[0060] ブロックチェーンクエリサービス102は、キャッシュクローラ216を介してキャッシュエンジン200に接続することができる。キャッシュクローラ216は、キャッシュエンジン200に接続し、要求を行うことにより、自らが望むデータを取得することができる。要求は、キャッシュのコンテンツ全体を求めることができるか、又はキャッシュのフィルタ済み及び処理済みのバージョンを求めることができる。キャッシュエンジン200と同じように、キャッシュクローラ216は、2つのモード、即ちクロールモード及びリスンモードを有する。
【0048】
[0061]
図11は、キャッシュストレージ210をクロールするためのプロセスの一例のフローチャートである。このプロセスは、クロールモード中にキャッシュクローラ216によって実行され得る。クロールモードでは、キャッシュクローラ216は、自らがキャッシュエンジン200から取得することを望むデータの種類を定義し得るQUERY_SETを構築することができる(1100)。キャッシュクローラ216は、QUERY_SETを反復処理し、接続されたキャッシュエンジン200に要求を行うことができる。例えば、キャッシュクローラ216は、ブロックX~ブロックYの全てのブロックをフェッチすることを望み得る。その場合、QUERY_SETは、X~Yの整数の配列、即ち[X,X+1,X+2,...Y]であり得る。
【0049】
[0062] QUERY_SETを反復処理するために、キャッシュクローラ216は、INDEXを0に設定することができる(1102)。INDEXの反復ごとに、キャッシュクローラ216は、QUERY_SET[INDEX]のクエリ命令を使用することによってキャッシュエンジン220への要求を行うことができる(1004)。しかし、このプロセスは、複数の要求に限定されない。このプロセスは、複数の応答をもたらす単一のバッチ要求を送信すること又は要求及び応答をストリーミングすることさえ含むことができ、それは、HTTP2等の様々なプロトコルによって実現され得る。キャッシュエンジン200が、関連する応答をキャッシュクライアント218に返すと、キャッシュクライアント218は、そのデータを処理し、状態遷移エンジン220に送信することができる。次いで、状態遷移エンジン220は、キャッシュクライアント218からの到来データ及び状態ストレージ112のコンテンツを使用して、その予めプログラムされたロジックを実行し、ブロックチェーンクエリサービス102の状態ストレージ112を最終的に更新することができる(1106)。
【0050】
[0063] 状態遷移が終了すると、キャッシュクローラ216は、INDEXをINDEX+1にインクリメントし(1108)、INDEXがQUERY_SETの長さ以上であるかどうかを確認すること(1110)により、全QUERY_SETが完全に反復処理されていることを確実にすることができる。INDEXがQUERY_SETの長さ以上でない場合、キャッシュクローラ216は、QUERY_SET[INDEX+1]のクエリ命令を使用してキャッシュエンジンをクエリすることができる。他方では、INDEXがQUERY_SETの長さを上回る場合、キャッシュクローラは、一時停止するか又はリスンモードに入ることができる。
【0051】
[0064]
図12は、キャッシュエンジン200をリスンするためのプロセスの一例のフローチャートである。このプロセスは、リスンモード中にキャッシュクローラ216によって実行され得る。リスンモードでは、キャッシュクローラ216がQUERY_SETを反復処理しない。代わりに、キャッシュクローラ216は、キャッシュエンジン200からどのような種類のデータを取得することを望むかを定義するSUBSCRIPTION_QUERY_SETを最初に作成することができる。キャッシュクローラ216は、SUBSCRIPTION_QUERY_SETをキャッシュエンジン200に送信し、任意の新たなキャッシュ更新イベントについてキャッシュエンジン200をリスンし、キャッシュ更新イベントを到着時に処理することができる。
【0052】
[0065] キャッシュクローラ216は、SUBSCRIPTION_QUERY_SETを構築することができる(1200)。SUBSCRIPTION_QUERY_SETは、手動で作成された静的フィルタ、クエリ言語又はプログラム可能関数であり得る。SUBSCRIPTION_QUERY_SETの一例は、「全てのキャッシュ更新イベントをリスンすること」を意味し得る単一アイテム「ALL」である。SUBSCRIPTION_QUERY_SETの別の例は、関連するキャッシュ更新イベントのみをフィルタする条件付きフィルタを定義するものである。キャッシュクローラは、フィルタを構築するためにBitquery等のクエリ言語を使用することができる。加えて又は代わりに、フィルタは、JavaScript、C、Python、Java等の任意のプログラミング言語で記述されるマップ/フィルタ関数であり得る。加えて又は代わりに、SUBSCRIPTION_QUERY_SETは、複数の条件にサブスクライブするために、これらのクエリの種類の複数を同時に含むことができる。
【0053】
[0066] SUBSCRIPTION_QUERY_SETを構築した後、キャッシュクローラ216は、キャッシュエンジンに要求を送信することができる(1202)。それ以降、キャッシュクローラ216は、キャッシュエンジン200によって発せられる全てのキャッシュ更新イベントをリスンすることができる(1204)。かかるリスニングは、websocket又はServer Sent Events等の広く使用されているプロトコル及びオープンスタンダードを使用してゼロから実装することができるが、Apache Kafka、ZeroMQ、RabbitMQ、Redis、MongoDBレプリケーション等の自動同期を可能にする既存の多くの技術及びプロトコルを用いて実装することもできる。新たなイベントが発生すると、
図10のステップ1012に記載したように、キャッシュエンジン200は、キャッシュ更新イベントを発することができる。キャッシュクローラ216は、それを検出することができ(1206)、更新済みコンテンツをフェッチするためにキャッシュクライアント218は、キャッシュエンジン200に追加のクロール要求を行い、応答を状態遷移エンジン220に渡すことができ、状態遷移エンジン220は、到来データ及び状態ストレージ112のコンテンツを使用して状態ストレージ112上の状態遷移をプログラム的に行うことができる(1208)。この状態遷移後、このサイクルは、ステップ1204に戻り、イベントループが続行し、キャッシュクローラ216は、接続されたキャッシュエンジンのイベントをリスンし続ける(1204)。別の実施形態では、キャッシュエンジン200から発せられるキャッシュ更新イベントは、必要なデータのフルペイロードを含むことができ、キャッシュクローラ216は、そのデータを状態遷移エンジン220に直接渡し、追加のクロールステップの必要性を回避することができる。
【0054】
[0067]
図11のQUERY_SET及び
図12のSUBSCRIPTION_QUERY_SETは、アプリケーション116からの要求に基づいて構築され得る。一部の事例では、所望のデータがキャッシュストレージ210内で入手できない場合がある。その場合、ブロックチェーンクローラ202は、そのデータをブロックチェーン100から取得し、そのデータを状態遷移エンジン208によってキャッシュストレージ210に書き込むことができる。
【0055】
[0068] 一部の実施形態では(
図3)、1つのキャッシュエンジン200は、複数のブロックチェーンクエリサービス102a及び102bにサービス提供し得る。ブロックチェーンクエリサービス102a及び102bは、アプリケーション116a及び116bのそれぞれにデータを提供することができる。この構成では、アプリケーション116aは、データを取得するためにブロックチェーンクエリサービス102aに接続することができる。ブロックチェーンクエリサービス102aは、キャッシュクローラ216aを含むことができる。キャッシュクローラ216aは、キャッシュクライアント218a及び状態遷移エンジン220aを含むことができる。キャッシュクライアント218aは、データを要求するためにキャッシュエンジン200に接続することができる。同様に、アプリケーション116bは、ブロックチェーンクエリサービス102bに接続することができる。ブロックチェーンクエリサービス102bは、キャッシュクローラ216bを含むことができる。キャッシュクローラ216bは、状態遷移エンジン220b及びキャッシュクライアント218bを含むことができる。キャッシュクライアント218bは、データを要求するためにキャッシュエンジン200に接続することができる。このようにして、両方のブロックチェーンクエリサービス102a及び102bは、ブロックチェーン100に直接接続するのではなく、単一の共用キャッシュエンジン200に接続することができる。
図3には、ブロックチェーンクエリサービスを2つのみ示しているが、そのような多くのサービスは、キャッシュエンジン200に同時に接続することができる。
図3の構成は、ブロックチェーンへの接続数を減らすことができ、それは、ネットワーク帯域幅の要件及びブロックチェーンがクラッシュする可能性を減らし得る。
【0056】
[0069] 一部の実施形態では(
図4)、1つのキャッシュエンジンがレプリケーションサービスを実装することができる。キャッシュエンジン200cは、シードキャッシュエンジン、即ちブロックチェーン100に直接接続するキャッシュエンジンとしての役割を果たすことができる。キャッシュエンジン200cにデータ投入されると、キャッシュエンジン200cは、そのサービスを他のキャッシュエンジンに提供することができる。このシナリオでは、キャッシュエンジン200d及び200eは、キャッシュクライアント218d及び218eをそれぞれ介してシードキャッシュエンジン200cに接続するキャッシュクローラ216d及び216eを有し得る。キャッシュクライアント218d及び218eは、キャッシュエンジン200cのキャッシュストレージのコンテンツ全体をレプリケートするためにキャッシュエンジン200cに要求を送信することができる。代わりに、キャッシュクライアント218d及び218eは、キャッシュエンジン200cのキャッシュストレージのコンテンツのサブセットのみを要求し得る。次いで、キャッシュクライアント218d及び218eは、状態遷移エンジン220d及び220eのそれぞれにデータを送信することができる。キャッシュエンジン200d及び200eは、接続のために自らを公開することができ、ブロックチェーンクエリサービス102d及び102eは、そのデータを取得するためにキャッシュエンジンに接続することができる。
図4の構成は、アプリケーションがブロックチェーンデータにアクセスすることができる速度を改善することができ、なぜなら、かかるアプリケーションは、複数のブロックチェーンクエリサービス及び複数のキャッシュエンジンと並列にインタフェースできるからである。
【0057】
[0070] 一部の実施形態では(
図5)、ブロックチェーンクローラ202は、ブロックチェーンをクロールする一方、ブロックチェーンクローラ202は、キャッシュエンジン200f、200g及び200h内のキャッシュサービス204f、204g及び204hにそれぞれデータを送信することができる。キャッシュエンジン200f及び200hは、そのブロックチェーンクローラを欠くことができる。代わりに、キャッシュエンジン202gのブロックチェーンクローラ202は、それがブロックチェーンから得たデータをキャッシュエンジン200f、200g及び200hの全てにブロードキャストすることができる。この形態は、
図4の構成と同様の利点を提供し得る。
【0058】
[0071] 一部の実施形態では(
図6)、ブロックチェーンクエリサービス102は、複数のキャッシュエンジン200i、200j及び200kからデータを取得することができる。ブロックチェーンクエリサービス102は、キャッシュエンジン200i、200j及び200kに任意の組み合わせで接続することができる。例えば、ブロックチェーンクエリサービス102は、キャッシュエンジン200i、200j及び200kに接続することができる。又は、通常の状況下では、キャッシュエンジン200iに接続するが、キャッシュエンジン200iが利用できなくなるとき、キャッシュエンジン200j又は200kに接続することができる。又は、キャッシュエンジン200i、200及び200kの全てに接続し、それらの全てから読み出してそれらのキャッシュエンジンから同時にデータを取得することができる。ブロックチェーンクエリサービス102は、かかるデータを交差検証することができる。キャッシュエンジン200i、200j及び200kは、同じデータを記憶し、供給することができるか、又は異なるデータ(例えば、ブロックチェーンの異なる部分)を記憶し、供給することができる。
図6には、キャッシュエンジンを3つのみ示しているが、ブロックチェーンクエリサービス102は、多くのキャッシュエンジンに接続することができる。
【0059】
[0072]
図3~
図6に記載した実施形態は、任意の組み合わせでまとめることができる。例えば、
図5にあるように複数のキャッシュエンジンが単一のブロックチェーンに接続することができる。複数のキャッシュエンジンのそれぞれは、
図3にあるように複数のブロックチェーンクエリサービスに又は
図4にあるように他の複数のキャッシュエンジンに接続することができる。加えて、
図3~
図6の何れかにおけるブロックチェーンサービス及びキャッシュエンジンの量は、更に少ないか又ははるかに多いことができる。例えば、
図6の実施形態におけるキャッシュエンジンの量は、約1、2、3、5、10、20、50、100、1000又はそれを上回り得る。
【0060】
[0073]
図2~
図6のブロックは、個々の物理的な機械(例えば、コンピュータ)に必ずしも対応しない。例えば、
図2では、ブロックチェーンクエリサービスコンポーネント102及びキャッシュエンジン200を同じ機械上で実装することができるか、又はそれらを異なる機械上で実装することができる。サーバエンジン114は、状態ストレージ112と同じ機械上にあってもなくてもよい。状態遷移エンジン220及びキャッシュクライアント218は、同じ機械上にあってもなくてもよい。サーバエンジン214及びキャッシュストレージ210は、同じ機械上にあってもなくてもよい。状態遷移エンジン208及びブロックチェーンクライアント206は、同じ機械上にあってもなくてもよい。更に、ブロックチェーン100自体が残りのコンポーネントと同じ機械上にあってもなくてもよい。これらのコンポーネントの全ては、マイクロサービスとして実装することができ、本明細書に記載する方法の何れかを使用して、ネットワーク上で互いに通信する複数のホストコンピュータ上に分散させることができる。
【0061】
[0074] 一部の実施形態では、キャッシュエンジンは、様々なキャッシュクライアントからの発見を可能にするために、自らをキャッシュレジストリにアドバタイズすることができる。
図7では、一意に識別可能な情報及び自らが提供するキャッシュサービスの種類のメタデータを用いて要求を行うことにより、キャッシュエンジン200のキャッシュサービス204は、自らをキャッシュレジストリ700a及び700bにアドバタイズすることができる。その後、キャッシュクライアント218は、キャッシュレジストリ700a及び700bを探索することによってキャッシュエンジン200を発見し、発見したらキャッシュエンジンに接続することができる。キャッシュレジストリ700a及び700bは、異なる形式を取り得る。例えば、これらは、データベースを有する中央サーバ上に記憶することができる。代わりに、キャッシュレジストリは、分散ハッシュテーブルであり得る。別の実施形態では、
図7を逆の方法で実装することができ、その場合、キャッシュクライアント218が自らをキャッシュレジストリにアドバタイズし、キャッシュサービス204がキャッシュクライアント218を発見し、その後、キャッシュサービス204がキャッシュクライアントに接続することができる。この形態は、過去に知られていないキャッシュサービスをキャッシュクライアントが発見すること及びその逆を可能にし得る。
【0062】
[0075] 一部の実施形態では、キャッシュサービス204は、キャッシュクライアント218からの入接続を管理するために追加のデータベースを保持することができる。キャッシュクライアント218は、一定のメタデータを含む一定の要求を行うことができ、キャッシュサービス204は、クライアントごとにメタデータを記憶することができる。このデータは、あらゆる要求について各クライアントにカスタマイズされた応答を配信するのに必要な情報、又はキャッシュクローラのリスンモード中(
図12)にカスタマイズされたイベントを配信するのに必要な情報、又はキャッシュクライアントを覚えておくためのセッションを管理するのに必要な情報を含み得る。
【0063】
[0076] 一部の実施形態では、キャッシュシステムは、要求-応答パターンに基づいてではなく、持続的な同期に基づいて機能し得る。例えば、
図2では、キャッシュクライアント218は、キャッシュサービス204にデータを事前対応的に要求するのではなく、代わりにキャッシュストレージ210のレプリケーションインスタンスとして存在し得る。これは、MongoDB、CouchDB、Apache Kafka、DAT及びIPFS等、多くのストレージシステム及びプロトコルによってサポートされる様々なデータレプリケーション方法によって実現することができる。キャッシュストレージ210は、そのようなレプリケーション方法の1つを実装し、マスタインスタンスとして機能し、キャッシュストレージ210をレプリケートするフォロワレプリケーションインスタンスをキャッシュクライアント218の様々な実装形態が埋め込むことができる。キャッシュクライアント218が新たな状態に同期すると、キャッシュクライアント218は、新たな更新を状態遷移エンジン220に送信することができ、その後、状態遷移エンジン220は、状態ストレージ112を処理し、更新する。代わりに、状態ストレージ112自体をキャッシュストレージ210のフォロワレプリケーションインスタンスとして実装することができ、その場合、状態ストレージ112は、キャッシュクライアント218及び220の状態遷移エンジンを飛ばしてストレージを直接更新することができる。
【0064】
[0077] 一部の実施形態では、キャッシュクローラ216は、フルブロックデータ一式を要求することができ、かかるデータは、ブロック内の全ての生トランザクションだけでなく、ブロックのマークルルートも含むことができ、マークルルートは、キャッシュエンジンプロバイダを信頼する必要なしに、残りのデータの真正性を確認するためにキャッシュクライアント218が使用することができる。
【0065】
[0078] 一部の実施形態では、代わりにイベントを頻繁なポーリングとしてエミュレートすることができる。例えば、キャッシュエンジンからのイベントをリスンする代わりに、キャッシュクライアントが更新を求めてキャッシュエンジンを絶えずポーリングすることができる。
【0066】
[0079] 一部の実施形態では(
図13)、ブロックチェーン100をオフチェーンブロックチェーントランザクションストレージ1300と置換することができる。オフチェーントランザクションストレージ1300は、ブロックチェーンの外側で署名済みの又は未署名のブロックチェーントランザクションを記憶するストレージシステムであり得る。オフチェーンブロックチェーントランザクションストレージ1300は、ブロックチェーンのユーザによって維持されるストレージシステムであり得るか、又はエンドユーザの代わりに(例えば、有料で)ブロックチェーンにトランザクションを書き込むエンティティによって維持されるストレージシステムであり得る。オフチェーントランザクションストレージは、ブロックチェーンピアネットワークにブロードキャストする前又はブロックチェーンマイナに直接送信する前に、トランザクションを一時的に記憶するためにエンドユーザによって使用され得る。オフチェーントランザクションストレージは、ブロードキャスト前にユーザからのトランザクションを直接受け入れるためにブロックチェーンマイナによって使用され得る。オフチェーントランザクションストレージは、ユーザからのトランザクション送信を直接受け入れて、将来ブロックをマイニングするときにそれらをブロックに含める可能性があるために、ブロックチェーンマイナによって使用され得る。オフチェーントランザクションストレージは、他の多くの目的で使用することができる。オフチェーンブロックチェーントランザクションストレージ1300は、オフチェーンブロックチェーントランザクションストレージAPIサービス1302に接続され得る。オフチェーンブロックチェーントランザクションストレージAPIクライアント1304は、ブロックチェーントランザクションをAPIサービス1302に送信することができる。APIサービス1302は、それをオフチェーンブロックチェーントランザクションストレージ1300内に記憶することができる。この場合、キャッシュエンジン200は、ブロックチェーン100の代わりに、このオフチェーンブロックチェーントランザクションストレージ1300をクロールしリスンすることができるが、残りのアーキテクチャは、同じであり得る。オフチェーンブロックチェーントランザクションストレージ1300は、読み出し又はフィルタリングではなく、記憶することに関して最適化され得る。例えば、オフチェーントランザクションストレージ1300は、Apache Kafka等のシステムを使用する付加のみのログ構造として実装することができるか、又は単純にファイルシステム内への生ダンプとして実装され得る。オフチェーンブロックチェーントランザクションストレージ1300は、記憶済みのトランザクションを後に取得できることを保証し得るが、柔軟な及び強力なインデックス及びクエリインタフェースを提供するように設計されない場合がある。そのため、キャッシュエンジン200は、ブロックチェーン100をクローリングするのと同じ種類の付加価値を提供することができる。
【0067】
コンピュータシステム
[0080] 本開示は、開示した方法を実装するようにプログラムされるコンピュータシステムを提供する。
図14は、
図2のブロックチェーンクエリサービス102若しくはキャッシュエンジン200を実装するように、又は
図8~
図12のプロセスを実行するようにプログラム又他に構成されるコンピュータシステム1401を示す。
【0068】
[0081] コンピュータシステム1401は、シングルコアプロセッサ若しくはマルチコアプロセッサ又は並列処理のための複数のプロセッサであり得る中央処理装置(CPU、本明細書では「プロセッサ」及び「コンピュータプロセッサ」でもある)を含む。コンピュータシステム1401は、メモリ又はメモリ位置1410(例えば、ランダムアクセスメモリ、読取専用メモリ、フラッシュメモリ)、電子記憶ユニット1415(例えば、ハードディスク)、1つ又は複数の他のシステムと通信するための通信インタフェース1420(例えば、ネットワークアダプタ)並びにキャッシュ、他のメモリ、データストレージ及び/又は電子ディスプレイアダプタ等の周辺装置1425も含む。メモリ1410、記憶ユニット1415、インタフェース1420及び周辺装置1425は、マザーボード等の通信バス(実線)によってCPU1405と通信する。記憶ユニット1415は、データを記憶するためのデータ記憶ユニット(又はデータリポジトリ)であり得る。コンピュータシステム1401は、通信インタフェース1420を用いてコンピュータネットワーク(「ネットワーク」)1430に動作可能に結合され得る。ネットワーク1430は、インターネット、インターネット及び/又はエクストラネット、又はインターネットと通信するイントラネット及び/又はエクストラネットであり得る。一部の事例では、ネットワーク1430は、電気通信網及び/又はデータネットワークである。ネットワーク1430は、クラウドコンピューティング等の分散コンピューティングを可能にし得る1つ又は複数のコンピュータサーバを含み得る。一部の事例では、ネットワーク1430は、コンピュータシステム1401を用いてピアツーピアネットワークを実装することができ、ピアツーピアネットワークは、コンピュータシステム1401に結合される装置がクライアント又はサーバとして挙動することを可能にし得る。
【0069】
[0082] CPU1405は、プログラム又はソフトウェアによって具体化され得る一連の機械可読命令を実行することができる。命令は、メモリ1410等のメモリ位置内に記憶することができる。命令は、CPU1405に導くことができ、その後、本開示の方法を実装するようにCPU1405をプログラム又は他に構成することができる。CPU1405によって実行される操作の例は、フェッチ、復号、実行及びライトバックを含み得る。
【0070】
[0083] CPU1405は、集積回路等の回路の一部であり得る。システム1401の1つ又は複数の他のコンポーネントが回路内に含まれ得る。一部の事例では、回路は、特定用途向け集積回路(ASIC)である。
【0071】
[0084] 記憶ユニット1415は、ドライバ、ライブラリ及び保存済みプログラム等のファイルを記憶することができる。記憶ユニット1415は、ユーザデータ、例えばユーザ基本設定及びユーザプログラムを記憶することができる。一部の事例では、コンピュータシステム1401は、イントラネット又はインターネットによってコンピュータシステム1401と通信するリモートサーバ上に位置するような、コンピュータシステム1401にとって外部にある1つ又は複数の追加のデータ記憶ユニットを含むことができる。
【0072】
[0085] コンピュータシステム1401は、ネットワーク1430によって1つ又は複数のリモートコンピュータシステムと通信することができる。例えば、コンピュータシステム1401は、ユーザのリモートコンピュータシステム(例えば、アプリケーション116が実装されるコンピュータ)と通信することができる。リモートコンピュータシステムの例は、パーソナルコンピュータ(例えば、ポータブルPC)、スレート又はタブレットPC(例えば、Apple(登録商標)iPad、Samsung(登録商標)Galaxy Tab)、電話、スマートフォン(例えば、Apple(登録商標)iPhone、アンドロイド対応装置、Blackberry(登録商標))又は携帯情報端末を含む。ユーザは、ネットワーク1430によってコンピュータシステム1401にアクセスすることができる。
【0073】
[0086] 本明細書に記載した方法は、例えば、メモリ1410又は電子記憶ユニット1415等、コンピュータシステム1401の電子記憶位置上に記憶される機械(例えば、コンピュータプロセッサ)実行可能コードによって実装され得る。機械実行可能又は機械可読コードは、ソフトウェア形式で提供することができる。使用中、コードがプロセッサ1405によって実行され得る。一部の事例では、プロセッサ1405による迅速なアクセスのために、コードを記憶ユニット1415から取得し、メモリ1410上に記憶することができる。一部の状況では、電子記憶ユニット1415を除外することができ、機械実行可能命令がメモリ1410上に記憶される。
【0074】
[0087] コードは、コードを実行するように適合されるプロセッサを有する機械と共に使用するために事前コンパイル及び構成され得るか、又は実行時中にコンパイルされ得る。コードは、事前コンパイル式に又はアズコンパイル(as-compiled)式にコードを実行できるようにするために選択可能なプログラミング言語によって供給され得る。
【0075】
[0088] 本明細書で示したコンピュータシステム1401等のシステム及び方法の態様は、プログラミングによって具体化することができる。本技術の様々な態様は、典型的には、一種の機械可読媒体上で運ばれるか、又は機械可読媒体内に具体化される機械(又はプロセッサ)実行可能コード及び/又は関連データの形式を取る「製品」又は「製造品」として考えることができる。機械実行可能コードは、メモリ(例えば、読取専用メモリ、ランダムアクセスメモリ、フラッシュメモリ)又はハードディスク等の電子記憶ユニット上に記憶することができる。「ストレージ」型の媒体は、ソフトウェアプログラミングのために任意の時点で非一時的ストレージを提供することができる様々な半導体メモリ、テープドライブ、ディスクドライブ等、コンピュータ、プロセッサ等又はその関連モジュールの有形メモリの何れか又は全てを含み得る。ソフトウェアの全て又は一部は、ときにインターネット又は他の様々な電気通信網によって通信され得る。かかる通信は、例えば、あるコンピュータ又はプロセッサから別のコンピュータ又はプロセッサ内、例えば管理サーバ又はホストコンピュータからアプリケーションサーバのコンピュータプラットフォーム内にソフトウェアをロードすることを可能にし得る。従って、ソフトウェア要素を担うことができる別の種類の媒体は、ローカル装置間の物理インタフェースを横断して使用されるような光波、電波及び電磁波、有線及び光回線ネットワークによるもの並びに様々なエアリンク上のものを含む。有線リンク又は無線リンク、光リンク等、そのような波を運ぶ物理要素もソフトウェアを担う媒体と見なすこともできる。本明細書で使用するとき、非一時的な有形の「記憶」媒体に限定されない限り、コンピュータ又は機械「可読媒体」等の用語は、実行するためにプロセッサに命令を与えることに関与する任意の媒体を指す。
【0076】
[0089] 従って、コンピュータ実行可能コード等の機械可読媒体は、限定されないが、有形記憶媒体、搬送波媒体又は物理伝送媒体を含む多くの形式を取り得る。不揮発性記憶媒体は、例えば、データベース等を実装するために使用され得るような図示の任意のコンピュータ等における記憶装置の何れか等の光ディスク又は磁気ディスクを含む。揮発性記憶媒体は、かかるコンピュータプラットフォームのメインメモリ等のダイナミックメモリを含む。有形伝送媒体は、コンピュータシステム内のバスを含む配線を含む同軸ケーブル、銅線及び光ファイバを含む。搬送波伝送媒体は、無線周波数(RF)及び赤外線(IR)データ通信中に生成されるような電気信号若しくは電磁信号又は音波若しくは光波の形式を取り得る。従って、コンピュータ可読媒体の一般的形式は、例えば、フロッピディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の任意の磁気媒体、CD-ROM、DVD又はDVD-ROM、他の任意の光媒体、穿孔カード紙テープ、孔のパターンを有する他の任意の物理記憶媒体、RAM、ROM、PROM及びEPROM、FLASH-EPROM、他の任意のメモリチップ又はカートリッジ、データ又は命令を移送する搬送波、かかる搬送波を運ぶケーブル又はリンク、又はコンピュータがプログラミングコード及び/又はデータを読み出すことができる他の任意の媒体を含む。コンピュータ可読媒体のこれらの形式の多くは、実行するためにプロセッサに1つ又は複数の命令の1つ又は複数のシーケンスを運ぶことに関与し得る。
【0077】
[0090] コンピュータシステム1401は、例えば、本明細書に記載したAPI又はアプリケーション(例えば、アプリケーション116)の何れかを提供するためのユーザインタフェース(UI)1440を含む電子ディスプレイ1435を含むことができるか、又はかかる電子ディスプレイ1435と通信することができる。UIの例は、グラフィカルユーザインタフェース(GUI)及びウェブベースのユーザインタフェースを限定なしに含む。
【0078】
[0091] 本開示の方法及びシステムは、1つ又は複数のアルゴリズムによって実装することができる。アルゴリズムは、中央処理装置1405による実行時にソフトウェアによって実装され得る。アルゴリズムは、例えば、
図8にあるようなブロックチェーンクロールモード又は
図9にあるようなブロックチェーンリスニングモードを実装するアルゴリズムであり得る。
【0079】
[0092] 本明細書では、本発明の好ましい実施形態を図示し、説明してきたが、かかる実施形態は、例として示したに過ぎないことが当業者に明らかになる。本明細書で示した具体例によって本発明が限定されることを意図しない。本発明を上述の明細書に関して説明してきたが、本明細書の実施形態の説明及び解説図が限定的な意味で解釈されることを意図しない。ここで、本発明から逸脱することなく、多数の改変形態、変更形態及び置換形態が当業者に想到される。更に、本発明の全ての態様は、多岐にわたる条件及び変数に依存する、本明細書に記載した具体的な記述、構成又は相対的比率に限定されないことが理解されるものとする。本発明を実践する際、本明細書に記載した本発明の実施形態に対する様々な代替形態を用い得ることが理解されるべきである。従って、本発明は、そのような任意の代替形態、修正形態、改変形態又は均等物も範囲に含むことが想定される。添付の特許請求の範囲は、本発明の範囲を定義することと、それらの請求項の範囲に含まれる方法及び構造並びにその均等物が特許請求の範囲の対象に含まれることとを意図する。
【国際調査報告】