(58)【調査した分野】(Int.Cl.,DB名)
前記1つまたは複数のマップKVPが、前記1つまたは複数のMPT KVPに含まれる1つまたは複数の値と同じ1つまたは複数の値と、前記1つまたは複数のMPT KVPに含まれる1つまたは複数の鍵と同じ1つまたは複数の値とを含む、
請求項1に記載のコンピュータで実行される方法。
前記1つまたは複数のマップKVPが、前記インデックスに含まれる番号を示す1つまたは複数の値と、前記1つまたは複数のMPT KVPのうちの1つまたは複数が削除されるかどうかを示す1つまたは複数の値と、前記1つまたは複数のMPT KVPの中のKVPの量とを含む、
請求項1に記載のコンピュータで実行される方法。
1つまたは複数のプロセッサに結合され、かつ前記1つまたは複数のプロセッサによって実行されると、請求項1から7のいずれか一項に記載の方法に従った動作を前記1つまたは複数のプロセッサに実行させる命令が記録された、
非一時的コンピュータ可読記録媒体。
【発明を実施するための形態】
【0012】
様々な図における同様の参照記号は同様の要素を示す。
【0013】
本開示の実装形態は、論理マップに基づいてスマートコントラクトデータベースによって使用されるMerkle Patricia Tree(MPT)の1つまたは複数のkey-value pair(KVP)を走査することを対象とする。より具体的には、本開示の実装形態は、複数の関数を含む論理マップを構成することを対象とする。関数は、MPTの中の1つまたは複数のKVPを走査するために、複数のKVPを操作するために使用され得る。
【0014】
いくつかの実装形態では、活動は、スマートコントラクトデータベースによって使用されるMerkle Patricia Tree(MPT)の第1の1つまたは複数のkey-value pair(KVP)のうちの1つに対応するインデックスの第1の番号を決定することと、インデックスの第1の番号に基づいて、MPTを走査するためのマップの第2の1つまたは複数のKVPのうちの第1のKVPの第1の鍵を決定することと、第1のKVPの第1の鍵に対応する第1の値を決定することと、第2の1つまたは複数のKVPのうちの第2のKVPの第2の鍵を決定することと、第2のKVPの第2の鍵に対応する第2の値を取り出すこととを含む。
【0015】
本開示の、および上で紹介された実装形態のさらなる文脈を提供すると、コンセンサスネットワーク(たとえば、ピアツーピアノードからなる)、分散型台帳システム、または単にブロックチェーンとも呼ばれ得る、ブロックチェーンネットワークは、参加するエンティティが安全かつ変更不可能にトランザクションを行いデータを記録することを可能にする。本開示の実装形態は、ブロックチェーンネットワークのスマートコントラクトに関して、本明細書でさらに詳細に説明される。しかしながら、本開示の実装形態はあらゆる適切なブロックチェーンプラットフォームにおいて実現され得ることが企図される。
【0016】
いくつかの例では、スマートコントラクトは、様々な関係者に影響する契約条件を有する、現実世界の法的な契約のデジタル表現として説明され得る。スマートコントラクトは、例示的な文脈では、コンソーシアムブロックチェーンネットワーク内で実装され、記録され、(必要に応じて)更新され、実行される。スマートコントラクトと関連付けられる契約関係者(たとえば、購入者および販売者)は、コンソーシアムブロックチェーンネットワークにおいてノードとして表現される。いくつかの例では、契約関係者は、(たとえば、スマートコントラクトの関係者として)スマートコントラクトと関連付けられるエンティティ(たとえば、企業)を含み得る。
【0017】
いくつかの例では、スマートコントラクトはデータを記録することができ、このデータは、情報、事実、関連付け、残高、および契約実行のための論理を実装するために必要な任意の他の情報を記録するために使用され得る。スマートコントラクトは、関数からなるコンピュータ実行可能プログラムとして記述されることが可能であり、このとき、スマートコントラクトのインスタンスが作成されることが可能であり、その中の論理の実行のために関数が呼び出されることが可能である。いくつかの例では、スマートコントラクトは、そのうちの1つまたは複数も契約として記述され得る、様々な構成要素を含み得る。いくつかの例では、スマートコントラクトの構成要素の1つまたは複数は、スマートコントラクト全体に対する更新の一部として更新され得る。
【0018】
いくつかの実装形態では、スマートコントラクトの例示的な構成要素は、限定はされないが、コントローラコントラクト、サービスコントラクト、およびデータコントラクトを含み得る。コントローラコントラクトは、スマートコントラクトを始める契約開始者による要求を受け取ると、ディスパッチャによって定義され得る。スマートコントラクトの開始は、コンソーシアムブロックチェーンネットワークの中のノードに(たとえば、スマートコントラクトの関係者になる予定のエンティティ)にスマートコントラクトを提供することを含み得る。スマートコントラクトの開始はまた、スマートコントラクトが作成された時間と、スマートコントラクトの開始者の識別情報とを特定し得る。いくつかの例では、サービスコントラクトはスマートコントラクトの論理を含む。この論理は、事象の順序の定義と、スマートコントラクトと関連付けられるエンティティとの関係とを含めて、契約がどのように実行されるかを定義することができる。データコントラクトは、限定はされないが、スマートコントラクトの対象である製品および/またはサービスと、その製品および/またはサービスの提供のためのスマートコントラクトについての支払情報とを含む、スマートコントラクトの条件を含む。データコントラクトに記録されるデータは、限定はされないが、残高、支払、受領、引き渡し、納期、およびスマートコントラクトの論理を実装するために必要な任意の他の情報を含む、情報、事実、および関連付けを記録するために使用され得る。
【0019】
技術的には、スマートコントラクトは、オブジェクトおよびオブジェクト指向クラスに基づいて実装され得る。たとえば、スマートコントラクトの条件および構成要素は、スマートコントラクトを実装するアプリケーションによって扱われるオブジェクトとして表現され得る。スマートコントラクト(またはスマートコントラクトの中のオブジェクト)は、ちょうど他のオブジェクト指向オブジェクトのように、別のスマートコントラクト(または同じスマートコントラクトの中のあるオブジェクト)を呼び出すことができる。オブジェクトによって行われる呼出しは、たとえば、別のクラスのオブジェクトを作成し、更新し、削除し、伝播し、またはそれと通信するための呼出しであり得る。オブジェクト間の呼出しは、関数、メソッド、アプリケーションプログラミングインターフェース(API)、または他の呼出し機構として実装され得る。たとえば、第1のオブジェクトは第2のオブジェクトを作成するためにある関数を呼び出すことができる。
【0020】
本開示の実装形態は、論理マップに基づいてスマートコントラクトデータベースによって使用されるMPTの1つまたは複数のKVPを走査することを対象とする。より具体的には、本開示の実装形態は、複数の関数を含む論理マップを構成することを対象とする。関数は、MPTの中の1つまたは複数のKVPを走査するために、複数のKVPを操作するために使用され得る。
【0021】
図1は、本開示の実装形態を実行するために使用され得る例示的な環境100を図示する。いくつかの例では、例示的な環境100は、エンティティがパブリックブロックチェーン102に参加することを可能にする。例示的な環境100は、コンピューティングシステム106、108、およびネットワーク110を含む。いくつかの例では、ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはこれらの組合せを含み、ウェブサイト、ユーザデバイス(たとえば、コンピューティングデバイス)、およびバックエンドシステムを接続する。いくつかの例では、ネットワーク110は有線および/またはワイヤレス通信リンクを通じてアクセスされ得る。
【0022】
図示される例では、コンピューティングシステム106、108は各々、ブロックチェーン104にトランザクションを記録するための、コンソーシアムブロックチェーンシステム102の中のノードとしての参加を可能にする、任意の適切なコンピューティングシステムを含み得る。例示的なコンピューティングデバイスには、限定はされないが、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピューティングデバイス、およびスマートフォンを含む。いくつかの例では、コンピューティングシステム106、108は、コンソーシアムブロックチェーンシステム102と対話するための、1つまたは複数のコンピュータで実施されるサービスをホストする。たとえば、コンピューティングシステム106は、第1のエンティティ(たとえば、ユーザA)が1つまたは複数の他のエンティティ(たとえば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどの、第1のエンティティのコンピュータで実施されるサービスをホストすることができる。コンピューティングシステム108は、第2のエンティティ(たとえば、ユーザB)が1つまたは複数の他のエンティティ(たとえば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどの、第2のエンティティのコンピュータで実施されるサービスをホストすることができる。
図1の例では、コンソーシアムブロックチェーンシステム102はノードのピアツーピアネットワークとして表され、コンピューティングシステム106、108はそれぞれ、コンソーシアムブロックチェーンシステム102に参加する第1のエンティティおよび第2のエンティティのノードを提供する。
【0023】
図2は、本開示の実装形態による例示的な概念のアーキテクチャ200を図示する。例示的な概念のアーキテクチャ200は、エンティティレイヤ202、ホストされたサービスレイヤ204、およびブロックチェーンレイヤ206を含む。図示される例では、エンティティレイヤ202は、Entity_1(E1)、Entity_2(E2)、およびEntity_3(E3)という3つのエンティティを含み、各エンティティがそれぞれのトランザクション管理システム208をもつ。
【0024】
図示される例では、ホストされるサービスレイヤ204は、各トランザクション管理システム208のためのブロックチェーンインターフェース210を含む。いくつかの例では、それぞれのトランザクション管理システム208は、通信プロトコル(たとえば、ハイパーテキスト転送プロトコルセキュア(HTTPS))を使用してネットワーク(たとえば、
図1のネットワーク110)を通じてそれぞれのブロックチェーンインターフェース210と通信する。いくつかの例では、各ブロックチェーンインターフェース210は、それぞれのトランザクション管理システム208とブロックチェーンレイヤ206との間の通信接続を提供する。より具体的には、各ブロックチェーンインターフェース210は、それぞれのエンティティがブロックチェーンレイヤ206のコンソーシアムブロックチェーンシステム212に記録されるトランザクションを行うことを可能にする。いくつかの例では、ブロックチェーンインターフェース210とブロックチェーンレイヤ206との間の通信は、リモートプロシージャコール(RPC)を使用して行われる。いくつかの例では、ブロックチェーンインターフェース210は、それぞれのトランザクション管理システム208のためのコンセンサスノードを「ホスト」する。たとえば、ブロックチェーンインターフェース210は、コンソーシアムブロックチェーンシステム212へのアクセスのためにアプリケーションプログラミングインターフェース(API)を提供する。
【0025】
上で紹介されたように、スマートコントラクトは、ブロックチェーンプラットフォーム内で符号化され、実行される。例示的なブロックチェーンプラットフォームには、限定はされないが、スイス、ツークのEthereum Foundationによって提供されるEthereumがある。本開示の実装形態はEthereumに関して本明細書でさらに詳細に説明されるが、本開示の実装形態は任意の適切なプラットフォームで実現され得ることが企図される。
【0026】
Ethereumなどの一部のブロックチェーンプラットフォームでは、状態機械を使用することができ、この場合トランザクションは状態間の遷移をもたらし得る。いくつかの場合、EthereumブロックチェーンのためのMPTとして符号化される状態は、KVPとして記録される。KVPの鍵および値はマッピング関係を形成することができる。しかしながら、鍵が知られていない限り、マッピング関係だけに基づいてKVPを走査することはできない。高水準において、本開示の実装形態は、複数のKVPを含む論理マップを作成して運用するための機能を提供する。論理マップの複数のKVPに基づいて、ユーザは、走査するために、または他の操作を実行するために、MPTのKVPを選択することができる。
【0027】
図3は、本開示の実装形態による、MPTを走査するための論理マップを作成する例示的なプロセス300を図示する。提示を明確にするために、以下の説明は概して、この説明では他の図面の文脈で例示的なプロセス300を説明する。しかしながら、例示的なプロセス300は、たとえば、任意のシステム、環境、ソフトウェア、およびハードウェア、またはシステム、環境、ソフトウェア、およびハードウェアの組合せによって、適宜実行され得ることが理解されるであろう。いくつかの実装形態では、例示的なプロセス300の様々なステップは、並列に、組合せで、ループで、または任意の順序で行われ得る。
【0028】
302において、論理マップの1つまたは複数の鍵が生成され得る。論理マップは、MPTに含まれる1つまたは複数のKVPを走査するために使用され得る。
図4を参照すると、たとえば、
図4は、本開示の実装形態による、例示的な論理マップおよび例示的なMPTに対応する例示的なKVP400を図示する。この例400では、MPTの2つの選択されたKVPを走査するために論理マップが作成されると仮定される。表402はMPVの論理KVPを示し、これは、鍵「Alice」および対応する値「22」を伴う第1のKVPと、鍵「Bob」および対応する値「23」を伴う第2のKVPとを含む。表404は、スマートコントラクトデータベースに記録される2つのKVPの実際の形式を示す。表404に示されるように、鍵はハッシュ値としてデータベースに記録され得る。
【0029】
MPTの2つのKVPを走査するために使用され得るKVPを伴う論理マップを作成するために、マップの複数のKVPが生成され得る。たとえば、論理マップが表406に示されるように「Dict_A」という名称であり、「Dict_A_KEY_VALUE_Alice」鍵が値「22」と関連するように生成されることが可能であり、表402の中の鍵「Alice」に割り当てられるインデックス「1」に対応する「Dict_A_KEY_INDEX_Alice」鍵が生成されることが可能であると仮定する。同様に、「Dict_A_KEY_VALUE_Bob」鍵が値「23」と関連するように生成されることが可能であり、表402の中の鍵「Bob」に割り当てられるインデックス「2」に対応する「Dict_A_KEY_INDEX_Bob」が生成されることが可能である。MPTの中のKVPと同様に、論理マップの中のKVPの鍵は、表408に示されるように、実際のスマートコントラクトデータベースにハッシュ値として記録され得る。
【0030】
いくつかの実装形態では、追加のインデックス鍵が論理マップのために生成され得る。インデックス鍵は、論理マップの中の他の鍵を特定する値と関連付けられ得る。たとえば、表406の中の鍵「Dict_A_INDEX_KEY_1」および「Dict_A_INDEX_KEY_2」は、値「Alice」および「Bob」と関連付けられ得る。値「Alice」および「Bob」は、「Dict_A_KEY_VALUE_Alice」および「Dict_A_KEY_VALUE_Bob」などの、論理マップの中の他の鍵を特定するために使用され得る。
【0031】
304において、1つまたは複数の鍵のうちの1つの値は、マップを作成するユーザによって入力され得る。たとえば、鍵「Dict_A_KEY_VALUE_Alice」を生成した後で、ユーザはその鍵と関連付けるべき値「Alice」を入力することができる。この値は、ユーザがマップに含めることを望む、MPTの中のKVPの値であり得る。
【0032】
306において、論理マップを走査するためのインデックスが存在するかどうかが決定され得る。いくつかの実装形態では、この決定は、インデックスに対応する鍵(たとえば、「Dict_A_KEY_INDEX_Alice」)が存在するかどうかに基づき得る。存在する場合、例示的なプロセス300は308に進み、そこで削除フラグに対応する鍵が値「False」に設定される。再び
図4を参照すると、たとえば、インデックス値「1」が存在する場合、「Alice」に対応するインデックスが削除されるかどうかを示す鍵「Dict_A_KEY_DELETE_Alice」は、値「False」に設定され得る。同様に、インデックス値「2」が存在する場合、鍵「Dict_A_KEY_DELETE_Bob」が値「False」に設定され得る。それ以外の場合、
図3に図示される例示的なプロセス300は310に進む。
【0033】
310において、新しいインデックスが追加される。いくつかの実装形態では、新しいインデックスを追加するために、論理マップに追加されたすべてのインデックスを示すマップの別の鍵が作成され得る。たとえば、「Alice」および「Bob」に対応するインデックスが論理マップに追加された場合、論理マップのサイズは2である。インデックス「2」が論理マップから削除されるとすると、それでも論理マップのサイズは2である。再び
図4を参照すると、論理マップのサイズに対応する例示的な鍵を「Dict_A_SIZE」として表現することができ、その対応する値は「2」である。インデックス「2」が削除される場合、マップのサイズは、「Bob」に割り当てられる新しいインデックスを含むように、1だけ増やされ得る。たとえば、鍵「Dict_A_KEY_INDEX_Bob」および鍵「Dict_A_SIZE」は今や、値「3」に対応し得る。それと比較して、表406の中の鍵「Dict_A_LENGTH」は、論理マップに含まれる実際のKVPの数を示すことができる。インデックス「2」が削除され、鍵「Dict_A_KEY_INDEX_Bob」が今や値「3」に対応する場合であっても、「Dict_A_LENGTH」はまだ2であり、それは2つの鍵「Alice」および「Bob」だけが論理マップによってマッピングされるからである。しかしながら、鍵「Dict_A_KEY_DELETE_Bob」が値「False」に対応し、新しいインデックスが論理マップの中の別のKVPを含むように追加される場合、鍵「Dict_A_LENGTH」の値は1だけ増やされ得る。
【0034】
例示的なプロセス300の説明に従って論理マップを作成するための例示的な疑似コードは、次のように表現され得る。
def imap_set(self, key, value):
if self[imap_key_index + key] not null :
key_index = self[imap_key_index + key]
self[imap_key_value + key] = value
if self[imap_index_deleted_flag + key_index] == True:
self[imap_index_deleted_flag + key_index] = False
self.imap_size += 1
else:
key_index = self.imap_length
self.imap_length = self.imap_length + 1
self[imap_key_index + key] = key_index
self[imap_index_key + key_index] = key
self[imap_key_value + key] = value
self[imap_index_deleted_flag + key_index] = False
self.imap_size += 1
【0035】
図5は、本開示の実装形態による、MPTを走査するための論理マップを使用する例示的なプロセス500を図示する。提示を明確にするために、以下の説明は概して、この説明では他の図面の文脈で例示的なプロセス500を説明する。しかしながら、例示的なプロセス500は、たとえば、任意のシステム、環境、ソフトウェア、およびハードウェア、またはシステム、環境、ソフトウェア、およびハードウェアの組合せによって、適宜実行され得ることが理解されるであろう。いくつかの実装形態では、例示的なプロセス500の様々なステップは、並列に、組合せで、ループで、または任意の順序で行われ得る。
【0036】
502において、インデックスに対応する鍵が特定される。いくつかの実装形態では、MPTの中のKVPは、論理マップにおいて定義されるインデックスを通じて走査され得る。
図3および
図4の説明において論じられた論理マップを例として使用すると、インデックス「1」は、インデックス鍵「Dict_A_INDEX_KEY_1」を特定するために使用され得る。また、
図4の表406の中の対応する値「Alice」が返され得る。インデックス鍵に基づいて値を返すための例示的な疑似コードは次のように表現され得る。
def imap_get_key_by_index(self, index):
key = self[imap_index_key + index]
return key
【0037】
図4の表406に示される論理マップに基づくと、「Dict_A_INDEX_KEY_1」から返される値は「Alice」である。次いで、値「Alice」を使用して、鍵「Dict_A_KEY_VALUE_A」を特定し、MPTの中の「Alice」の真の値「22」を取り出すことができる。例示的な疑似コードは次のように表現され得る。
def imap_get_key_by_index(self, index):
key = self[imap_index_key + index]
return key
【0038】
504において、インデックス鍵に対応する削除フラグが「False」であるかどうかが決定される。削除フラグは、「False」として設定されているとき、インデックス鍵が削除されないことを示し得る。それ以外の場合、削除フラグは「True」として設定される。
図3の説明において論じられたように、削除フラグが「False」として設定される場合、対応するインデックスが506において返される。それ以外の場合、削除フラグは、インデックス鍵が削除されることを示し、例示的なプロセス500は508に進み、そこで対応するインデックスは「1」だけ増やされる。
図4において論じられる例を参照して、例示的なプロセス500がインデックス「1」で開始すると仮定する。削除フラグが「False」である場合、インデックス「1」は削除されず、「Alice」および「22」の対応するKVPが502の説明において論じられたようなプロセスに基づいて取り出され得ることが推測され得る。それ以外の場合、インデックスは「2」に増やされる。インデックス「2」に対応する削除フラグが「False」である場合、「Bob」および「23」という対応するKVPが取り出され得る。インデックスに基づいてKVPを走査するための例示的な疑似コードは、次のように表現され得る。
def imap_next_index(self, index):
index += 1
while index < self.imap_length:
if self[imap_index_deleted_flag + index] == False:
return index
else:
index += 1
return -1
【0039】
いくつかの実装形態では、論理マップは、鍵がマップに含まれるかどうかを特定するための関数を含み得る。この関数に対応する例示的な疑似コードは次のように表現され得る。
def imap_contains(self, key):
if key in self.imap_key_index:
key_index = self[imap_key_index + key]
if self[imap_index_deleted_flag + key_index] == False:
return True
return False
【0040】
いくつかの実装形態では、論理マップは、論理マップからKVPを削除するための関数を含み得る。KVPが論理マップから削除される場合、削除フラグは「True」に設定されることが可能であり、対応する値は「None」に設定されることが可能であり、論理マップの「長さ」は1だけ減らされることが可能である。削除関数に対応する例示的な疑似コードは次のように表現され得る。
def imap_remove(self, key):
if key in self.imap_key_index:
self[imap_key_value + key] = None
key_index = self[imap_key_index + key]
self[imap_index_deleted_flag + key_index] = True
self.imap_length -= 1
【0041】
図6は、本開示の実装形態による、スマートコントラクトデータベースを走査する例示的なプロセスを図示する。提示を明確にするために、以下の説明は概して、この説明では他の図面の文脈で例示的なプロセス600を説明する。しかしながら、例示的なプロセス600は、たとえば、任意のシステム、環境、ソフトウェア、およびハードウェア、またはシステム、環境、ソフトウェア、およびハードウェアの組合せによって、適宜実行され得ることが理解されるであろう。いくつかの実装形態では、例示的なプロセス600の様々なステップは、並列に、組合せで、ループで、または任意の順序で行われ得る。
【0042】
602において、スマートコントラクトデータベースによって使用されるMPTの第1の1つまたは複数のKVPのうちの1つに対応するインデックスの第1の番号が決定される。
【0043】
604において、MPTを走査するためのマップの第2の1つまたは複数のKVPのうちの第1のKVPの第1の鍵が、インデックスの第1の番号に基づいて決定される。
【0044】
606において、第1のKVPの第1の鍵に対応する第1の値が決定される。
【0045】
608において、第2の1つまたは複数のKVPのうちの第2のKVPの第2の鍵が決定される。いくつかの実装形態では、第1の1つまたは複数のKVPの中のKVPの数は、第2の1つまたは複数のKVPの中のKVPの数以下である。いくつかの実装形態では、第1の1つまたは複数のKVPの鍵および第2の1つまたは複数のKVPの鍵が、ハッシュ値として記録される。いくつかの実装形態では、第2の1つまたは複数のKVPは、第1の1つまたは複数のKVPに含まれる1つまたは複数の値と同じ1つまたは複数の値と、第1の1つまたは複数のKVPに含まれる1つまたは複数の鍵と同じ1つまたは複数の値とを含む。いくつかの実装形態では、第2の1つまたは複数のKVPは、インデックスに含まれる番号を示す1つまたは複数の値と、第1の1つまたは複数のKVPのうちの1つまたは複数が削除されるかどうかを示す1つまたは複数の値と、第1の1つまたは複数のKVPの中のKVPの量とを含む。
【0046】
610において、第2のKVPの第2の鍵に対応する第2の値が取り出される。いくつかの例では、第2の1つまたは複数のKVPのうちの第3のKVPの第3の鍵は、インデックスの第2の番号に基づいて決定され得る。いくつかの例では、インデックスの第2の番号は削除されないものとして決定され得る。いくつかの例では、第3のKVPの第3の鍵に対応する第3の値が決定され得る。いくつかの例では、第4の1つまたは複数のKVPのうちの第4のKVPの第4の鍵が決定され得る。いくつかの例では、第4のKVPの第4の鍵に対応する第4の値が取り出され得る。
【0047】
本明細書で説明される実装形態および動作は、本明細書で開示される構造もしくはそれらのうちの1つまたは複数の組合せを含めて、デジタル電子回路で、またはコンピュータソフトウェア、ファームウェア、もしくはハードウェアで実装され得る。動作は、1つまたは複数のコンピュータ可読記録デバイスに記録される、または他のソースから受信されるデータに対して、データ処理装置によって実行される動作として実施され得る。データ処理装置、コンピュータ、またはコンピューティングデバイスは、前述の1つのプログラマブルプロセッサ、1つのコンピュータ、1つのシステムオンチップ、またはこれらの複数、または組合せを例として含む、データを処理するための装置、デバイス、および機械を包含し得る。装置は、専用論理回路、たとえば、中央処理装置(CPU)、フィールドプログラマブルゲートアレイ(FPGA)、または特定用途向け集積回路(ASIC)を含み得る。装置はまた、対象のコンピュータプログラムのための実行環境を作り出すコード、たとえば、プロセッサファームウェア、プロトロルスタック、データベース管理システム、オペレーティングシステム(たとえば、1つのオペレーティングシステムまたはオペレーティングシステムの組合せ)、クロスプラットフォームランタイム環境、仮想マシン、またはこれらの1つまたは複数の組合せを構成するコードを含み得る。装置および実行環境は、ウェブサービス、分散コンピューティングおよびグリッドコンピューティングインフラストラクチャなどの、様々な異なるコンピューティングモデルインフラストラクチャを実現することができる。
【0048】
コンピュータプログラム(たとえば、プログラム、ソフトウェア、ソフトウェアアプリケーション、ソフトウェアモジュール、ソフトウェアユニット、スクリプト、またはコードとしても知られている)は、コンパイル型またはインタプリタ型言語、宣言型または手続き型言語を含む、任意の形式のプログラミング言語で書かれてよく、スタンドアロンプログラムとして、または、モジュール、コンポーネント、サブルーチン、オブジェクト、もしくはコンピューティング環境において使用するのに適した他のユニットを含む、任意の形式で展開されてよい。プログラムは、他のプログラムもしくはデータ(たとえば、マークアップ言語ドキュメントに記録される1つまたは複数のスクリプト)を保持するファイルの一部分、対象のプログラムに専用の単一のファイル、または複数の協調的なファイル(たとえば、1つまたは複数のモジュール、サブプログラム、またはコードの部分を記録するファイル)に記録され得る。コンピュータプログラムは、1つの場所に位置する、または、複数の場所に分散され通信ネットワークによって相互接続される、1つのコンピュータまたは複数のコンピュータ上で実行され得る。
【0049】
コンピュータプログラムの実行のためのプロセッサは、例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサを含む。一般に、プロセッサは、読取り専用メモリまたはランダムアクセスメモリまたは両方から、命令およびデータを受信する。コンピュータの不可欠な要素は、命令に従って活動を実行するためのプロセッサ、ならびに、命令およびデータを記録するための1つまたは複数のメモリデバイスである。一般に、コンピュータは、データを記録するための1つまたは複数のマスストレージデバイスも含み、または、そのマスストレージデバイスからデータを受信し、もしくはそこへデータを移し、もしくはその両方を行うように、動作可能に結合される。コンピュータは、別のデバイス、たとえば、モバイルデバイス、携帯情報端末(PDA)、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記録デバイスに埋め込まれ得る。コンピュータプログラム命令およびデータを記録するのに適したデバイスは、例として、半導体メモリデバイス、磁気ディスク、および磁気光学ディスクを含む、不揮発性メモリ、媒体、およびメモリデバイスを含む。プロセッサおよびメモリは、専用の論理回路によって補完されても、またはそれに組み込まれてもよい。
【0050】
モバイルデバイスは、ハンドセット、ユーザ機器(UE)、携帯電話(たとえば、スマートフォン)、タブレット、ウェアラブルデバイス(たとえば、スマートウォッチおよびスマート眼鏡)、人体に埋め込まれたデバイス(たとえば、バイオセンサ、人工内耳)、または他のタイプのモバイルデバイスを含み得る。モバイルデバイスは、様々な通信ネットワーク(以下で説明される)にワイヤレスに(たとえば、高周波(RF)信号を使用して)通信することができる。モバイルデバイスは、モバイルデバイスの現在の環境の特性を決定するためのセンサを含み得る。センサは、カメラ、マイクロフォン、近接センサ、GPSセンサ、モーションセンサ、加速度計、周辺光センサ、水分センサ、ジャイロスコープ、コンパス、気圧計、指紋センサ、顔認識システム、RFセンサ(たとえば、Wi-Fiおよびセルラー無線)、温度センサ、または他のタイプのセンサを含み得る。たとえば、カメラは、可動レンズまたは固定レンズ、フラッシュ、イメージセンサ、およびイメージプロセッサを伴う、前面カメラまたは後面カメラを含み得る。カメラは、顔認識および/または虹彩認識のための詳細を捉えることが可能なメガピクセルカメラであり得る。カメラは、データプロセッサ、およびメモリに記録されるまたはリモートでアクセスされる認証情報とともに、顔認識システムを形成することができる。顔認識システムまたは1つまたは複数のセンサ、たとえば、マイクロフォン、モーションセンサ、加速度計、GPSセンサ、またはRFセンサは、ユーザ認証のために使用され得る。
【0051】
ユーザとの対話を提供するために、実装形態は、ディスプレイデバイスおよび入力デバイス、たとえば、ユーザに情報を表示するための液晶ディスプレイ(LCD)または有機発光ダイオード(OLED)/仮想現実(VR)/拡張現実(AR)ディスプレイ、ならびに、ユーザがそれによってコンピュータに入力を提供できるタッチスクリーン、キーボード、およびポインティングデバイスを有する、コンピュータ上で実装され得る。他の種類のデバイスも、ユーザとの対話を提供するために使用され得る。たとえば、ユーザに提供されるフィードバックは任意の形式の感覚的なフィードバック、たとえば視覚的なフィードバック、聴覚的なフィードバック、または触覚的なフィードバックであってよく、ユーザからの入力は、音響入力、発話入力、または触覚入力を含む、任意の形式で受け取られ得る。加えて、コンピュータは、ユーザによって使用されるデバイスにドキュメントを送信してそれからドキュメントを受信することによって、たとえば、ウェブブラウザから受信された要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
【0052】
実装形態は、有線またはワイヤレスデジタルデータ通信(またはそれらの組合せ)の任意の形式もしくは媒体、たとえば通信ネットワークによって相互接続されるコンピューティングデバイスを使用して実装され得る。相互接続されたデバイスの例は、一般に互いから離れており典型的には通信ネットワークを介して対話する、クライアントおよびサーバである。クライアント、たとえばモバイルデバイスは、たとえば、購入、売却、支払、贈与、送付、もしくは貸付のトランザクションの実行、またはこれらの認可を行うサーバと、またはサーバを通じて、自身でトランザクションを実行することができる。そのようなトランザクションは、活動と応答が時間的に近くなるようにリアルタイムであり得る。たとえば、ある個人は、活動および応答が実質的に同時に発生することを知覚し、その個人の活動に続く応答の時間差が1ミリ秒(ms)未満もしくは1秒(s)未満であり、または応答にシステムの処理制約を考慮した意図的な遅延がない。
【0053】
通信ネットワークの例は、ローカルエリアネットワーク(LAN)、無線アクセスネットワーク(RAN)、メトロポリタンエリアネットワーク(MAN)、およびワイドエリアネットワーク(WAN)を含む。通信ネットワークは、インターネット、別の通信ネットワーク、または通信ネットワークの組合せの、すべてもしくは一部分を含み得る。情報は、Long Term Evolution(LTE)、5G、IEEE 802、インターネットプロトコル(IP)、または他のプロトコルもしくはプロトコルの組合せを含む、様々なプロトコルおよび規格に従って通信ネットワーク上で送信され得る。通信ネットワークは、接続されたコンピューティングデバイス間で、音声データ、ビデオデータ、バイオメトリックデータ、または認証データ、または他の情報を送信することができる。
【0054】
別個の実装形態として説明される特徴は、組合せで、単一の実装形態で実装され得るが、単一の実装形態として説明される特徴は、複数の実装形態で、別々に、または任意の適切な部分組合せで実装され得る。特定の順序で説明され特許請求される動作は、特定の順序が実行されなければならないこと、またはすべての図示される動作が実行されなければならないことを要求するものとして理解されるべきではない(いくつかの動作は任意選択であり得る)。適宜、マルチタスキングまたは並列処理(またはマルチタスキングと並列処理の組合せ)が実行され得る。