(57)【特許請求の範囲】
【請求項１】
スマートコントラクトの安全性を向上するための、コンピュータにより実現される方法であって、
共にスマートコントラクトを行使する、保護条件と関連付けられている第１取引と、第２取引を得ることであって、前記保護条件は、取引順序依存性（ＴＯＤ）による予期せぬ結果を回避するために前記第１取引に追加されることと、
前記第２取引を実行して、前記第２取引により呼び出される前記スマートコントラクトの現在の状態を更新することと、
前記スマートコントラクトの前記更新された現在の状態が、前記保護条件を満たすかどうかを判定することと、
前記更新された現在の状態が前記保護条件を満たすと判定することに応答して、前記第１取引を実行して、ブロックチェーンに追加するために、前記第２および第１取引を新しいデータブロックに記録すること、または、前記更新された現在の状態が前記保護条件を満たさないと判定することに応答して、前記第１取引を実行することなく、前記ブロックチェーンに追加するために、前記第２取引を新しいデータブロックに記録することと、を備えていることを特徴とする方法。
【請求項２】
前記更新された現在の状態が前記保護条件を満たさないと判定することに応答して、前記第１取引を提出したコンピューティング装置に実行例外を返すことを更に備えることを特徴とする請求項１の方法。
【請求項３】
前記現在の状態は、前記スマートコントラクトの取引項目の現在の価格を備え、
前記保護条件は、前記取引項目の価格範囲、量範囲、または時間範囲と関連付けられていることを特徴とする請求項１の方法。
【請求項４】
前記第１取引は、前記価格範囲における前記取引項目の購入注文と関連付けられており、
前記第２取引は、前記取引項目を売る販売注文と関連付けられていることを特徴とする請求項３の方法。
【請求項５】
前記保護条件は、前記第１取引に基づいて自動的に生成されることを特徴とする請求項１の方法。
【請求項６】
前記保護条件は、前記第１取引を提出したコンピューティング装置により提出されることを特徴とする請求項１の方法。
【請求項７】
前記第１取引と前記第２取引を得ることは、前記第１取引と前記第２取引をプールデータベースから得ることを備えていることを特徴とする請求項１の方法。
【請求項８】
複数のノードはそれぞれ、前記ブロックチェーンのコピーを台帳として格納するためのメモリを備え、
前記ノードは、前記新しいデータブロックが前記ブロックチェーンに追加されるときに、前記台帳を更新するように構成されていることを特徴とする請求項１の方法。
【請求項９】
スマートコントラクトの安全性を向上するためのシステムであって、１つ以上のプロセッサと、前記１つ以上のプロセッサに結合され、前記１つ以上のプロセッサにより実行可能であり、前記システムに、
共にスマートコントラクトを行使する、保護条件と関連付けられている第１取引と、第２取引を得ることであって、前記保護条件は、取引順序依存性（ＴＯＤ）による予期せぬ結果を回避するために前記第１取引に追加されることと、
前記第２取引を実行して、前記第２取引により呼び出される前記スマートコントラクトの現在の状態を更新することと、
前記スマートコントラクトの前記更新された現在の状態が、前記保護条件を満たすかどうかを判定することと、
前記更新された現在の状態が前記保護条件を満たすと判定することに応答して、前記第１取引を実行して、ブロックチェーンに追加するために、前記第２および第１取引を新しいデータブロックに記録すること、または、前記更新された現在の状態が前記保護条件を満たさないと判定することに応答して、前記第１取引を実行することなく、前記ブロックチェーンに追加するために、前記第２取引を新しいデータブロックに記録することと、を備える動作を行わせる命令で構成されている１つ以上の非一時的コンピュータ読取り可能メモリを備えていることを特徴とするシステム。
【請求項１０】
前記システムは更に、
前記更新された現在の状態が前記保護条件を満たさないと判定することに応答して、前記第１取引を提出したコンピューティング装置に実行例外を返すことを実行させられることを特徴とする請求項９のシステム。
【請求項１１】
前記現在の状態は、前記スマートコントラクトの取引項目の現在の価格を備え、
前記保護条件は、前記取引項目の価格範囲、量範囲、または時間範囲と関連付けられていることを特徴とする請求項９のシステム。
【請求項１２】
前記第１取引は、前記価格範囲における前記取引項目の購入注文と関連付けられており、
前記第２取引は、前記取引項目を売る販売注文と関連付けられていることを特徴とする請求項１１のシステム。
【請求項１３】
前記保護条件は、前記第１取引に基づいて自動的に生成されることを特徴とする請求項９のシステム。
【請求項１４】
前記保護条件は、前記第１取引を提出したコンピューティング装置により提出されることを特徴とする請求項９のシステム。
【請求項１５】
共にスマートコントラクトを行使する、保護条件と関連付けられている第１取引と、第２取引を得ることであって、前記保護条件は、取引順序依存性（ＴＯＤ）による予期せぬ結果を回避するために前記第１取引に追加されることと、
前記第２取引を実行して、前記第２取引により呼び出される前記スマートコントラクトの現在の状態を更新することと、
前記スマートコントラクトの前記更新された現在の状態が、前記保護条件を満たすかどうかを判定することと、
前記更新された現在の状態が前記保護条件を満たすと判定することに応答して、前記第１取引を実行して、ブロックチェーンに追加するために、前記第２および第１取引を新しいデータブロックに記録すること、または、前記更新された現在の状態が前記保護条件を満たさないと判定することに応答して、前記第１取引を実行することなく、前記ブロックチェーンに追加するために、前記第２取引を新しいデータブロックに記録することと、
を１つ以上のプロセッサに実行させるためのプログラムを記録した非一時的コンピュータ読取り可能格納媒体。
【請求項１６】
前記更新された現在の状態が前記保護条件を満たさないと判定することに応答して、前記第１取引を提出したコンピューティング装置に実行例外を返すことを前記プロセッサに更に実行させることを特徴とする請求項１５の格納媒体。
【請求項１７】
前記現在の状態は、前記スマートコントラクトの取引項目の現在の価格を備え、
前記保護条件は、前記取引項目の価格範囲、量範囲、または時間範囲と関連付けられていることを特徴とする請求項１５の格納媒体。
【請求項１８】
前記第１取引は、前記価格範囲における前記取引項目の購入注文と関連付けられており、
前記第２取引は、前記取引項目を売る販売注文と関連付けられていることを特徴とする請求項１７の格納媒体。
【請求項１９】
前記保護条件は、前記第１取引に基づいて自動的に生成されることを特徴とする請求項１５の格納媒体。
【請求項２０】
前記保護条件は、前記第１取引を提出したコンピューティング装置により提出されることを特徴とする請求項１５の格納媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この本開示は、全体的にはコンピュータ技術に関し、特には、ブロックチェーン上のスマートコントラクトの安全性を向上するためのシステムと方法に関する。
【背景技術】
【０００２】
ブロックチェーン技術は、非中央集中型の様式のデータストレージを約束する。データは、互いの間の優先関係を有する一連のデータブロックにおいて格納でき、ブロックのチェーンを形成する。ブロックのチェーンは、ノードのネットワークで維持され、データをブロックに格納する前に、データを有効にする責任もある。ノードで採用される暗号化およびコンセンサス技術により、ブロックチェーンに格納されたデータは、ほとんど変更できない。このため、ノードのネットワークは、ブロックチェーンコンセンサスネットワークとも称される。近年、ブロックチェーン技術は、スマートコントラクトの実行のためのフレームワークを提供するまで発展してきた。スマートコントラクトは、ユーザにより行われるビジネス論理を達成するために、ブロックチェーンコンセンサスネットワークにおいて動作できる１つのコードである。スマートコントラクトは、デジタル形式で定義されるプロミスのセットを備えることができ、コードにおいて詳細に記載された適宜な契約を有する当事者間の同意を備えることができる。スマートコントラクトは、将来の署名またはトリガイベントにより自動的に確定できる。しかし、ブロックチェーンスマートコントラクトは、不正な資産移転のような、オンライン上の悪意のある攻撃の影響を受け易い。このため、少なくともこれらのリスクを削減するために、スマートコントラクトの安全性を向上することは、絶対に必要なことである。
【発明の概要】
【０００３】
本開示の種々の実施形態は、ブロックチェーン上のスマートコントラクトの安全性を向上するためのシステム、方法、および非一時的コンピュータ読取り可能媒体を含むことが可能である。１つの態様によれば、スマートコントラクトの安全性を向上するためのシステムは、１つ以上のプロセッサと、該１つ以上のプロセッサに結合され、該１つ以上のプロセッサにより実行可能であり、システムに、共にスマートコントラクトを行使する、保護条件と関連付けられている第１取引と、第２取引を得ることと、第２取引を実行して、スマートコントラクトの現在の状態を更新することと、スマートコントラクトの更新された現在の状態が、保護条件を満たすかどうかを判定することと、更新された現在の状態が保護条件を満たすと判定することに応答して、第１取引を実行して、ブロックチェーンに追加するために、第２および第１取引をデータブロックに記録することと、更新された現在の状態が保護条件を満たさないと判定することに応答して、第１取引を実行することなく、ブロックチェーンに追加するために、第２取引を別のデータブロックに記録すること、を備える動作を行わせる命令で構成されている１つ以上の非一時的コンピュータ読取り可能メモリを備えている。
【０００４】
幾つかの実施形態においては、システムは更に、更新された現在の状態が保護条件を満たさないと判定することに応答して、第１取引を提出したコンピューティング装置に実行例外を返すことを実行させられる。
【０００５】
幾つかの実施形態においては、現在の状態は、スマートコントラクトの取引項目の現在の価格を備え、保護条件は、取引項目の価格範囲、量範囲、または時間範囲と関連付けられている。
【０００６】
幾つかの実施形態においては、第１取引は、価格範囲における取引項目の購入注文と関連付けられおり、第２取引は、取引項目を売る販売注文と関連付けられている。
【０００７】
幾つかの実施形態においては、保護条件は、第１取引に基づいて自動的に生成される。
【０００８】
幾つかの実施形態においては、保護条件は、第１取引を提出したコンピューティング装置により提出される。
【０００９】
幾つかの実施形態においては、第１取引と第２取引を得ることは、第１取引と第２取引をプールデータベースから得ることを備えている。
【００１０】
幾つかの実施形態においては、複数のノードのそれぞれは、ブロックチェーンのコピーを台帳として格納するためのメモリを備え、ノードは、新しいデータブロック、または別の新しいデータブロックがブロックチェーンに追加されたときに台帳を更新するように構成されている。
【００１１】
別の態様によれば、スマートコントラクトの安全性を向上するための、コンピュータにより実現される方法は、共にスマートコントラクトを行使する、保護条件と関連付けられている第１取引と、第２取引を得ることと、第２取引を実行して、スマートコントラクトの現在の状態を更新することと、スマートコントラクトの更新された現在の状態が、保護条件を満たすかどうかを判定することと、更新された現在の状態が保護条件を満たすと判定することに応答して、第１取引を実行して、ブロックチェーンに追加するために、第２および第１取引をデータブロックに記録することと、更新された現在の状態が保護条件を満たさないと判定することに応答して、第１取引を実行することなく、ブロックチェーンに追加するために、第２取引を別のデータブロックに記録すること、を備えている。
【００１２】
別の態様によれば、非一時的コンピュータ読取り可能格納媒体は、１つ以上のプロセッサにより実行可能であり、該１つ以上のプロセッサに、共にスマートコントラクトを行使する、保護条件と関連付けられている第１取引と、第２取引を得ることと、第２取引を実行して、スマートコントラクトの現在の状態を更新することと、スマートコントラクトの更新された現在の状態が、保護条件を満たすかどうかを判定することと、更新された現在の状態が保護条件を満たすと判定することに応答して、第１取引を実行して、ブロックチェーンに追加するために、第２および第１取引をデータブロックに記録することと、更新された現在の状態が保護条件を満たさないと判定することに応答して、第１取引を実行することなく、ブロックチェーンに追加するために、第２取引を別のデータブロックに記録するとこと、を備える動作を行わせる命令で構成されている。
【００１３】
動作の方法、構造の関連する要素の機能、および製造の部品と経済性の組み合わせと共に、ここにおいて開示されるシステム、方法、および非一時的コンピュータ読取り可能媒体のこれらの、および他の特徴は、下記の記述および付随する請求項を、すべてがこの明細書の一部を形成し、類似する参照番号は、種々の図面において対応する部品を示す付随する図面を参照して考察することで、より明確になろう。しかし、図面は、例示と記述のみのための目的であり、発明の制限の定義とは意図されていないということは、明確に理解されるべきである。
【００１４】
本技術の種々の実施形態のある特徴が、添付されている請求項における特殊性で記述される。技術の特徴および利点のより良好な理解は、発明の原理が利用されている例示としての実施形態を記述している下記の詳細な記述と、付随する図面を参照することにより得られよう。
【図面の簡単な説明】
【００１５】
【図１】種々の実施形態に係る、例としてのブロックチェーンを例示している。
【図２Ａ】種々の実施形態に係る、スマートコントラクトの安全性を向上するための、例としてのコンピューティング環境を例示している。
【図２Ｂ】種々の実施形態に係る、例としてのプールデータベースを例示している。
【図３】種々の実施形態に係る、例としてのスマートコントラクト実行モデルを例示している。
【図４】種々の実施形態に係る、スマートコントラクトの安全性を向上するための、例としての方法のフローチャートを例示している。
【図５】種々の実施形態に係る、スマートコントラクトの安全性を向上するための、例としての方法のフローチャートを例示している。
【図６】ここにおいて記述される実施形態の何れをも実行できる、例としてのコンピュータシステムのブロック図を例示している。
【発明を実施するための形態】
【００１６】
ここで、付随する図面に例示されている、例としての実施形態を詳細に参照する。下記の記述は、異なる図面における同じ番号は、他に表わされていない限り、同じまたは類似の要素を表わしている、付随する図面を参照する。本発明と整合性のある例としての実施形態の下記の記述において記述される実現形態は、発明と整合性のあるすべての実現形態を表わしてはいない。そうではなく、それらの実現形態は、発明に関連する態様と整合性のあるシステムと方法の例に過ぎない。
【００１７】
スマートコントラクトは、プロセスまたはワークフローについての同意を含むことができ、当事者により順守されるべき条項と義務を記述することができる。動作において、イベントにより駆動される状態マシンを、スマートコントラクトの条項を調べるために使用できる。当事者は、署名および他の取消不可のデータを共有の台帳に記録できる。取引は、スマートコントラクトを呼び出して実行するために、ユーザにより使用できる。取引とは、ユーザ間の、または、ユーザと金融実体との間の任意のコミュニケーションであるということができる。例えば、取引は、品物またはサービスの購入または販売、品物またはサービスの提供または返却、支払取引、クレジット取引、または他の類似の相互対話ということができる。取引はまた、「取引要求」、「商取引」または「売買」と称することもできる。
【００１８】
幾つかの実施形態においては、スマートコントラクトは、イーサリアム（Ｅｔｈｅｒｅｕｍ）環境において実現され、展開され、および実行されるコントラクトである。スマートコントラクトは、法的契約のデジタル化である。スマートコントラクトは、イーサリアム仮想マシン内、または種々のブロックチェーンノード内で展開され、格納され、および実行される。スマートコントラクトはデータを格納可能である。格納されたデータは、現実世界の契約に対する論理を実現するために必要な情報、事実、関連、残高、および任意の別の情報を記録するために使用可能である。スマートコントラクトは、オブジェクト指向クラスに類似してよい。スマートコントラクトは、オブジェクト指向オブジェクトのような別のスマートコントラクトを呼び出し可能であり、別のクラスのオブジェクトを作成および使用可能である。
【００１９】
ブロックチェーン技術は、スマートコントラクトにおける取引サービスのような、多様なサービスの最適化を達成するために使用されてきた。図１は、種々の実施形態に係る、例としてのブロックチェーンを例示している。図１に示されているように、ブロックチェーン１００は、複数のデータブロック１０２を含むことができる。各ブロックは、暗号ハッシュを介して、前のブロックにリンクできる。例えば、ブロック２は、ブロック１のハッシュ１０６を介してブロック１にリンクされ、ブロックｎは、ブロックｎ−１の別のハッシュを介して、ブロックｎ−１にリンクされる。各ブロック１０２は更に、データ構造を含んでいる。データ構造は、例えば、口座の残高、支払領収書のような、スマートコントラクトの実行結果に対応するデータ１０４を含むことができる。新しいデータが提出されて有効にされると、新しいデータを含む追加的ブロックを生成して、前のブロックのハッシュを含むことにより、ブロックチェーン１００の最後のブロックに付け加えることができる。
【００２０】
幾つかの実施形態においては、未確認取引の取引要求を受信すると、ブロックチェーンノードは、ブロックチェーンネットワーク（例えば、１つ以上のノード）が、コンセンサスにより未確認取引を検証し、取引をブロックチェーンに詰め込む前に、取引要求を一時的にメモリプール（図２Ｂを参照して、より詳細に下記に記述される）に格納する。ある時点において、メモリプールは、多数の未確認取引を格納できる。ブロックチェーンコンセンサスネットワークが、取引をブロックチェーンに詰め込む前は、メモリプールにおける未確認取引を実行する順序は決められていない。取引の順序は、スマートコントラクトの実行の最終結果に影響し、それは取引順序依存性（ＴＯＤ）と称される。
【００２１】
ＴＯＤ問題は、本開示の状況において更に記述される。幾つかの実施形態においては、ブロックチェーンにおけるデータブロックは、スマートコントラクトに関連する取引のセットを含むことができる。スマートコントラクトの状態は、ブロックチェーンの各更新の間、数回更新できる。１つの例においては、ブロックチェーンは現在は状態σであり、ブロックチェーンに追加される新しいデータブロックは、それぞれ同じスマートコントラクトを呼び出す（Ｔｉ、Ｔｊ）で表わされる２つの取引を含んでいる。２つの取引の決められていない実行の順序のため、スマートコントラクトの正確な状態は、２つの取引それぞれが、スマートコントラクトの実行を行使するときは判定できない。例えば、取引Ｔｉがスマートコントラクトを呼び出すとき、コントラクトが状態σであるのかどうか、または、コントラクトは、取引Ｔｊの呼び出しに基づいて実行されたかどうかは判定できず、このため、コントラクトの状態は
【数１】
0006864088.tif 000002
に変更されている。言い換えれば、取引Ｔｉがスマートコントラクトを呼び出すとき、スマートコントラクトは状態σ、または状態σ’であることが可能である。同様に、取引Ｔｊが同じスマートコントラクトを呼び出すとき、スマートコントラクトは状態σであることが可能であり、またはコントラクトは、取引Ｔｉの呼び出しに従って実行されており、状態遷移
【数２】
0006864088.tif 000003
を完了している。従って、２つの取引により呼び出されるときのスマートコントラクトの状態は、取引ＴｉとＴｊの実行の順序に依存する。
【００２２】
取引がコントラクトを行使しようと意図したときのスマートコントラクトの本来の状態と、取引による呼び出しのために、対応する実行が起きるときのスマートコントラクトの実際の状態の間には差があり得る。ブロックチェーンノード（例えば、ブロックチェーンマイナ）は、これらの取引の実行の順序を決めることができ、そのため、ブロックの更新の順序を決めることができる。言い換えれば、スマートコントラクトの最終状態は、ブロックチェーンノードによる呼び出し順序に依存し得る。これは、ＴＯＤと称される。
【００２３】
ＴＯＤは、スマートコントラクトの実行に対する安全性のリスクを引き起こし得る。第１に、スマートコントラクトの同時呼び出しがあった場合、コントラクトの呼び出しが悪意のあるものではない場合であっても、呼び出しは互いに干渉し合い、取引を通してコントラクトを呼び出すユーザに予期せぬ結果をもたらし得る。第２に、悪意のあるユーザは、スマートコントラクトのＴＯＤの利点を、不当な利益を得て、更には、他のユーザの資産を盗むために使用可能である。例えば、買い手が、価格の引き上げの前の本来の価格での購入を期待して購入取引を提出するときと同じ期間に、売り手は価格を引き上げるための販売取引を提出できる。販売取引と購入取引が、ブロックチェーンの同じブロックに追加されるというこの状況においては、販売取引が、購入取引の前に実行された場合、買い手は、引き上げられた価格を支払うという結果になり得る。
【００２４】
イーサリアムの状況においては、バッチオークションおよびプレサブミッション（事前提出）のような幾つかの方法が、このＴＯＤ問題に対処するために使用されてきた。バッチオークションの解決策はＴＯＤ問題を解決でき、高い頻度の売買を防止できるが、単一取引の実行効率が犠牲となる。１つの取引の失敗は、すべての提出された取引の失敗に繋がる。取引の公式な実行の前の取引のプレサブミッションは、ＴＯＤのリスクを回避できる。しかし、プレサブミッションの解決策は、両方の当事者が、実行の前に結果についてのコンセンサスに到達することが要求され、そのため、実行効率を低下させる。この両者の解決策は、ＴＯＤ問題を根本的には解決しない。
【００２５】
本方法よびシステムは、ＴＯＤ問題を少なくとも軽減するための技術的解決策を提供する。開示されるタイプの動作は、コンピュータシステムに必然的に依存し、コンピュータの時代の前には存在しなかった技術を表わしている。開示される方法およびシステムはまた、ブロックチェーンスマートコントラクトを実行する安全性を高めることにより、コンピュータの機能性も向上させる。スマートコントラクトの取引が、ブロックチェーンマイナにより任意の順序で実現されたときでも、本システムおよび方法は、スマートコントラクトの取引の呼び出しが、予期される結果または実行例外を返すことを可能にする。予期せぬ結果は防止可能である。例えば、ユーザ（買い手のような）が、ある価格で製品を購入する要求をする取引を提出したとき、スマートコントラクトを呼び出す購入取引の結果は、要求された価格での品物の購入を達成することであり、または、別の取引の実現により、スマートコントラクトにおいて価格が変更された場合は、失敗を返すことであり得る。このため、買い手により予期せぬ変更された価格では、買い手の取引は実現できない。従って、売り手側からの詐欺的な取引、または取引の不正な操作により実現される、資産の不正な転送は回避可能である。
【００２６】
図２Ａは、例としてのコンピューティング環境、例えば、種々の実施形態に係る、ブロックチェーン上でスマートコントラクトを実行するためのブロックチェーンネットワーク２００を例示している。図２Ａに示されるように、ブロックチェーンネットワーク２００は、複数のノード２０２と、プールデータベース２３０と、１つ以上のユーザコンピューティング装置２４０を含むことができ、これらは、１つ以上のネットワークを通して、互いに通信できる。例としてのネットワーク２２０（例えば、インターネットなどを介しての有線または無線接続）は、１つ以上の通信プロトコル、例えば、セルラー、ＷｉＦi、および他の通信プロトコルを使用できる。ネットワーク２２０は、ピアツーピアおよび／またはクライアント／サーバモデルに基づくことができる。幾つかの実施形態においては、複数のノード２０２は、それぞれが１つ以上のプロセッサ２０４と、該１つ以上のプロセッサ２０４に結合されている１つ以上のメモリ２０６（例えば、命令を格納する、１つ以上の非一時的コンピュータ読取り可能格納媒体）を含んでいるコンピューティング装置を備えることができる。ノード２０２は、スマートコントラクトの安全性を向上するための、例としてのシステムであることができる。１つ以上のメモリは、１つ以上のプロセッサにより実行可能であり、システム（例えば、１つ以上のプロセッサ）に、ここにおいて記述される動作を実行させる命令で構成できる。幾つかの実施形態においては、プロセッサ２０４は、部分的または全体を、１つ以上の論理回路として実現できる。幾つかの実施形態においては、ノード２０２とユーザコンピューティング装置２４０は、他のコンピューティングリソースを含むことができ、および／または、他のコンピューティングリソースへのアクセス（例えば、１つ以上の接続／ネットワークを介して）を有することができる。
【００２７】
幾つかの実施形態においては、ノード２０２は、スマートコントラクト実行エンジン（例えば、イーサリアム仮想マシン）含むことができる。スマートコントラクト実行エンジンは、メモリ２０６上に格納され、プロセッサ２０４により実行可能な命令またはプログラムコードを含むことが可能である。スマートコントラクト実行エンジンがプロセッサ２０４により実行されると、スマートコントラクト実行エンジンは、スマートコントラクトを実行するためにスマートコントラクトのパラメータを適用する。幾つかの実施形態においては、ユーザコンピューティング装置２４０は、プロセッサによりユーザコンピューティング装置２４０上で実行されると、ユーザコンピューティング装置２４０に、ユーザコンピューティング装置２４０上で呼び出しインタフェースを作らせる命令またはプログラムコードを格納できる。呼び出しインタフェースは、ユーザが、取引要求を実現するために、スマートコントラクトを呼び出すことを可能にするように構成されている。呼び出しインタフェースは、ユーザが、ユーザにより提出された取引と共に、保護条件（例えば、品物の価格条件）を入力することを可能にするように構成できる。スマートコントラクト実行エンジンは、ユーザ入力による取引と共に提出された保護条件を、スマートコントラクトの状態が満たしているかどうかを判定するように構成できる。
【００２８】
幾つかの実施形態においては、プールデータベース２３０は、複数のノード２０２が分散的な様式でアクセス可能であることができる。例えば、プールデータベース２３０はそれぞれ、複数のノード２０２のメモリ２０６に格納できる。図２Ｂを参照すると、種々の実施形態に係る、例としてのプールデータベース２３０が例示されている。プールデータベース２３０は、ユーザにより操作される１つ以上のユーザコンピューティング装置２４０により提出される複数の取引を格納できる。
【００２９】
図２Ａに戻って参照すると、幾つかの実施形態においては、ブロックチェーン１００は、複数のノード２０２上で、非中央集中型の様式で格納されている。幾つかの実施形態においては、ノード２０２の幾つかは、コンセンサスを通して受信した取引を有効にでき、有効にされた取引を、他のノード２０２に伝搬できる。従ってノード２０２は、有効にされた取引に従って、台帳２０８を更新できる。ノード２０２は、ネットワーク２２０を介して互いに通信でき、台帳２０８に関連するデータの送受信ができる。台帳２０８は、有効にされ、ブロックチェーン１００に追加されたデータブロック１０２を含んでいる。新しいデータブロックが台帳２０８に追加されると、ノード２０２は、新しいデータブロックを、ネットワーク２２０を介して通信または共有できる。ノード２０２のメモリ２０６は、ブロックチェーン１００の台帳２０８の少なくとも一部分を格納できる。
【００３０】
幾つかの実施形態においては、ノード２０２の幾つかは、何れの取引をデータブロック１０２に含むかを選択するコンセンサスノード（例えば、ブロックチェーンマイナ）であることができ、そうすることにおいて、ノード２０２は、取引の順序、つまり、何れの取引がより早く実行され、何れの取引がより遅く実現されるかを設定する。例えば、ユーザにより操作されるユーザコンピューティング装置２４０が取引要求を提出すると、取引は、一時的にプールデータベース２３０に格納できる。ノード２０２（例えば、マイナノード）は、取引を実行する時間を選択できる。取引の結果は、ノード２０２が実行すると決める相対的順序またはタイミングに依存し得る。簡潔性且つ簡明性のために、本開示は、ノード２０２の単一形式を使用する。通常の技量を有する当業者であれば、ブロックチェーンが複数のノード２０２を有することができ、１つ以上のノード２０２を、１つの取引の処理に関わらせることができるということを認識すべきである。ノード２０２の単一形式は、１つ以上のノードを表わすことができる。
【００３１】
ノード２０２に対する代替として、専用イーサリアム仮想マシン（例えば、１つ以上のコンピュータまたはサーバに設置されている）は、ここにおいて記述される種々のステップを実行可能である。イーサリアム仮想マシンは、１つ以上のプロセッサと、該１つ以上のプロセッサに結合され、該１つ以上のプロセッサにより実行可能であり、イーサリアム仮想マシンに、ここにおいて記述される動作を行わせる命令で構成されている１つ以上の非一時的コンピュータ読取り可能メモリを備えることができる。または、他のタイプの仮想マシンまたはソフトウェアを、イーサリアム仮想マシンの代わりに使用できる。
【００３２】
幾つかの実施形態においては、ノード２０２は、ユーザコンピューティング装置２４０を通して、ユーザからの取引を受信できる。ノード２０２はまた、ユーザからの取引と共に、保護条件も受信できる。幾つかの実施形態においては、ユーザコンピューティング装置２４０の呼び出しインタフェースはユーザに、保護条件をユーザの取引に追加するように指示できる。または、ノード２０２は、ユーザにより提出された取引の内容に基づいて、保護条件を生成できる。保護条件は、品物またはサービスの価格、品物またはサービスの量、品物の出荷時またはサービスの納品時などであることができる。幾つかの実施形態においては、提出された取引は、グループにおける実行のために、プールデータベース２３０に格納される。保護条件と関連付けられている取引は、スマートコントラクトを呼び出すことを含むことができる。例えば、ユーザは、スマートコントラクトを呼び出す取引を提出した買い手であり、スマートコントラクトは、品物１０個を１ドルの価格で買うことを要求する。取引と関連付けられている保護条件は、品物の価格が１ドル（または、１ドル未満のような範囲）であり、保護条件が満たされないときは、取引は実現できない。
【００３３】
保護条件は、ＴＯＤによる予期せぬ結果を回避するために取引に追加できる。保護条件はまた、実行条件、実行保護条件、または条件とも称することができる。幾つかの実施形態においては、保護条件に対するスマートコントラクトの状態を確認することで、ノード２０２は、予期される結果を返し、または実行の失敗を返し、予期せぬ結果、例えば、品物またはサービスを、予期せぬ価格で購入するということを回避できるスマートコントラクトを呼び出す取引を実現できる。言い換えれば、保護条件はユーザが、予期せぬ取引、例えば、価格が引き上げられた取引に巻き込まれることから守るために定義できる。
【００３４】
幾つかの実施形態においては、ノード２０２は、スマートコントラクトの現在の状態を判定できる。例えば、スマートコントラクトの状態は、ブロックチェーンのワールド状態とも呼ぶことができる。ブロックチェーンのワールド状態は、ブロックチェーン上で実行されたすべての取引に関しての最も更新された状態を反映できる。例えば、取引のセットが実現されるたびに、ブロックチェーンのワールド状態は、実現を反映するために更新できる。ノード２０２は、保護条件およびスマートコントラクトの現在の状態に基づいて取引を実現できる。取引の実現の結果に基づいて、ノード２０２は、スマートコントラクトの現在の状態を、別の状態（現在の状態と同じであっても、異なっていてもよい）に更新できる。保護条件およびスマートコントラクトの現在の状態に基づく取引の実現は、多数の後続のシナリオを含むことができる。
【００３５】
幾つかの実施形態においては、ノード２０２は、スマートコントラクトの現在の状態σにおいて、取引保護条件ｃ（例えば、価格は１ドル）が満たされているかどうかを、取引Ｔを実行する前に判定できる。スマートコントラクトの現在の状態σにおいて、保護条件ｃが満たされていない場合
【数３】
0006864088.tif 000004
取引Ｔは、下記の式（１）に示されているように破棄できる。上記の例においては、スマートコントラクトの現在の状態σにおいて、品物の価格が１ドルでない場合（例えば、先行する取引の実行により価格が２ドルに引き上げられている）は、条件ｃは満たされておらず、この取引は廃棄できる。式（１）はまた、規則ＴＸ＿ＳＴＡＬＥとも称され、
【数４】
0006864088.tif 000005
ここにおいて、ＴＸとＴは、提出された取引を表わし、ｃは取引ＴＸまたはＴの保護条件を表わし、σは、ブロックチェーンのワールド状態を表わし、
【数５】
0006864088.tif 000006
は変換を示している。幾つかの実施形態においては、取引において指定された保護条件がない場合は、取引に対して保護条件は必要ないと判断できる。
【００３６】
幾つかの実施形態においては、取引により呼び出されるスマートコントラクトの現在の状態σにおいて、取引の保護条件ｃが満たされている場合（σ∈ｃ）は、ノード２０２は、スマートコントラクトの残高を値ｖだけ更新できる。例えば、ノード２０２は、値ｖを残高に追加、または残高から差し引くことができる。値ｖは、取引の内容に基づいて決められる値であってよい。幾つかの実施形態においては、スマートコントラクトは、ブロックチェーンネットワーク２００、例えば、プールデータベース２３０または１つ以上のノード２０２に格納されている在庫目録と関連付けることができる。在庫目録は、取引の項目の数、それらの価格、およびそれらの項目の他の関連する情報を格納できる。スマートコントラクトの残高は、これらの項目の１つの数ということができる。このため、スマートコントラクトの現在の状態が取引の条件を満たすときは、ノード２０２は、スマートコントラクトの残高（例えば、在庫目録に記載されている項目数）を更新して、取引により購入または売却される項目の数を一時的に保有できる。上記の例においては、スマートコントラクトの現在の状態σにおいて、品物の価格が１ドルの場合、取引の保護条件ｃは満たされ、ノード２０２は、購入される品物１０個を残高から差し引くことにより、スマートコントラクトの残高を更新できる。
【００３７】
別の例においては、売り手が、スマートコントラクトのもとで、品物（例えば、品物１５個）を売る取引を提出する場合、スマートコントラクトの現在の状態が売り手の取引と関連付けられている保護条件を満たす（例えば、契約価格が、取引の売却価格と一致している）場合は、ノード２０２は、スマートコントラクトの残高を、売却される品物の数に基づいて、品物１５個をスマートコントラクトの残高に加えることにより更新できる。幾つかの実施形態においては、ノード２０２はまた、売り手または買い手の残高も更新できる。例えば、ノード２０２は、買い手の残高に、購入される品物の数を加えることができ、売り手の残高から、売却される品物の数を削減できる。
【００３８】
幾つかの実施形態においては、スマートコントラクトの残高の更新が成功すると、ノード２０２は、スマートコントラクトの現在の状態σを、過渡的状態σ’に変更できる。例えば、ブロックチェーンのワールド状態は、状態σから過渡的状態σ’に変更できる。スマートコントラクトの残高の更新が失敗する（例えば、購入される品物の数を提供するための十分なスマートコントラクトの在庫がない）と、取引を続けることはできず、ノード２０２はその取引を破棄できる。スマートコントラクトの状態は、状態σに保つことができる。
【００３９】
幾つかの実施形態においては、スマートコントラクトの残高の更新が成功すると、ノード２０２は、スマートコントラクトの対応するコードを呼び出す、または行使することにより取引を実行できる。例えば、ノード２０２は、プールデータベース２３０に一時的に格納されている、スマートコントラクトの状態に対してチェックされた保護条件を有している取引を含んでいる、取引のセットを実行できる。幾つかの実施形態においては、グループで実行される取引はそれぞれ、保護条件を有することができる。幾つかの実施形態においては、グループにおける幾つかの取引は、保護条件を有していなくてもよく、ノード２０２は、これらの取引は、上記のように条件チェックをパスしたものと仮定する。このように、ブロックチェーンネットワーク２００またはノード２０２は、保護条件を有していなくてもよい、存在しているスマートコントラクトを実行可能である。
【００４０】
幾つかの実施形態においては、スマートコントラクトを実行するとき、取引と関連付けられているパラメータｌを、スマートコントラクトの１つ以上のプロセスまたは機能に送り込むことができ、スマートコントラクトの該１つ以上のプロセスまたは機能を実行できる。スマートコントラクトの実行が完了可能であれば、ノード２０２は、スマートコントラクトの状態を、過渡的状態σ’から終了状態σ”に変更できる。このため、取引の実現は完了される。そのようなプロセスは、下記の式（２）により表わされ、
【数６】
0006864088.tif 000007
ここにおいて、ＴＸおよびＴは提出された取引を表わし、ｃは取引ＴＸまたはＴの保護条件を表わし、ｉｄはブロックチェーンにおけるスマートコントラクトのアドレスを表わし、Ｍはスマートコントラクト実行コードまたはスマートコントラクト実行コードの一部を表わし、ｌはスマートコントラクト行使パラメータを表わし、ｂａｌはスマートコントラクトの口座残高を表わし、σ［ｉｄ］は状態σにおける、アドレスｉｄでの対応するスマートコントラクトコードを表わし、σ［ｉｄ］［ｂａｌ］は状態σにおける、アドレスｉｄでのスマートコントラクトの口座残高を表わし、σ、σ’およびσ”は、ブロックチェーンの３つのワールド状態を表わし、←は、代入値を表わし、→および
【数７】
0006864088.tif 000008
は変換を示し、εはスマートコントラクト実行コードＭの実行のためのコールスタックを表わしている。
【００４１】
幾つかの実施形態においては、スマートコントラクトの過渡的状態σ’において、スマートコントラクトの実行が完了できず、実行例外が起きた場合、ノード２０２は、スマートコントラクトの過渡的状態σ’を状態σに戻すことができる。例えば、ブロックチェーンのワールド状態を、過渡的状態σ’から元の状態σに戻すことができる。実行例外は、実行プロセスにおいてエラーがあるとき、または現在の条件が満たされているときに起こり得る。例えば、実行が所定の時間を超えて動作し、依然として動作し続けている（実行タイムアウトとも称される）、または、購入される品物の数が、スマートコントラクトの在庫より多いなどである。幾つかの実施形態においては、ノード２０２は取引の実行が失敗したことを示す実行例外＜ｅ＞ｅｘｃを返すことができる。この状況は、下記の式（３）に記述することができる。
【数８】
0006864088.tif 000009
ここにおいて、ＴＸおよびＴは提出された取引を表わし、ｃは取引ＴＸまたはＴの保護条件を表わし、ｉｄはブロックチェーンにおけるスマートコントラクトのアドレスを表わし、Ｍはマシンコードであり、スマートコントラクト実行コードを表わし、ｌはスマートコントラクト行使パラメータを表わし、ｂａｌはスマートコントラクトの口座残高を表わし、σ［ｉｄ］は状態σにおける、アドレスｉｄでの対応するスマートコントラクトコードを表わし、σ［ｉｄ］［ｂａｌ］は状態σにおける、アドレスｉｄでのスマートコントラクトの口座残高を表わし、σ、σ’およびσ”は、ブロックチェーンの３つのワールド状態を表わし、←は、代入値を表わし、→および
【数９】
0006864088.tif 000010
は変換を示し、εはスマートコントラクト実行コードＭの実行のためのコールスタックを表わし、＜ｅ＞ｅｘｃは取引の実行例外を表わしている。
【００４２】
式（１）〜（３）に記述されている例としての方式は、取引を提出した当事者が予期される結果を得るか、取引が失敗に終わるかの何れかを確実にする。買い手が、購入注文を出したときに同意した価格より多くを支払わないことを保証することが可能である。加えて、この方式は下位互換性であることが可能である。既存のスマートコントラクトにおいては、保護条件は、デフォルトとして「真」に設定可能であり、そのため、式（１）〜（３）に記述されている方式を適用するために、既存のスマートコントラクトコードを変更する必要はない。
【００４３】
図３を参照すると、種々の実施形態に係る、例としてのスマートコントラクト実行モデル３００が例示されている。例としてのスマートコントラクト実行モデル３００は、図２Ａと２Ｂを参照して上述した方式の適用であってよく、ブロックチェーンネットワーク２００における、例えば、ノード２０２、ユーザコンピューティング装置２４０、およびプールデータベース２３０における１つ以上の実体により実現できる。図３に示されているように、売り手は取引「ＴｘＢ」を提出し、買い手は、ほぼ同じ期間内に取引「ＴｘＡ」を提出している。期間は、ブロックチェーンが、有効にするために取引の提出を容認する間の期間であってよい。幾つかの実施形態においては、２つの取引はプールデータベース２３０に一時的に格納されている。取引「ＴｘＡ」は、品物の価格が５ドルに固定されている（「ｃ＝［ｐ＝＝５］」）という保護条件のもとで、５ドルの価格（「ｐ＝５」）で、２個の品物（取引「ＴｘＡ」においては「ｇ＝２」で表わされる）を買うためのスマートコントラクト「Ｘ」の「買い」プロセスを呼び出すことである。他方、売り手により提出された取引「ＴｘＢ」は、６ドルの価格（「ｐ＝６」）で、すべての品物（例えば、５０個の場合、「ｇ＝５０」で表わされる）を売るためのスマートコントラクト「Ｘ」の「売り」プロセスを実行することである。
【００４４】
売り手の取引「ＴｘＢ」の存在を知らずに、買い手は、現在の契約価格が５ドルであることを知り、従って、５ドルの価格で取引「ＴｘＡ」を完了することを期待した。買い手の取引「ＴｘＡ」が最初に実行された場合、取引「ＴｘＡ」に対する保護条件は満たされるので、取引「ＴｘＡ」を正常に実現できる。しかし、売り手の取引「ＴｘＢ」が最初に実行された場合、スマートコントラクト「Ｘ」における、品物すべての価格は６ドルに増加し、スマートコントラクト「Ｘ」の状態は、新しい状態に変換される。従って、引き続いて、スマートコントラクト「Ｘ」の新しい状態において、買い手の取引「ＴｘＡ」を実行すると、買い手の取引「ＴｘＡ」の保護条件「ｃ＝［ｐ＝＝5］」は満たされず、そのため、買い手と売り手が価格の合意に到達しなかったので、買い手の取引「ＴｘＡ」は終了される。
【００４５】
イーサリアムにおけるバッチオークションとプレサブミッションの方法と比較すると、現在の条件付き保護に基づく取引実行機構は、各取引に対して実行条件を設定することにより、取引の順序依存性を回避し、そのため、個々の取引の実行効率に影響を与えない。更に、開示されたシステムと方法は、プレサブミッションの方法によりもたらされる複数の実行段階のための余分なコストを防止する。
【００４６】
図４は、種々の実施形態に係る、スマートコントラクト実行ための、例としての方法４００のフローチャートを例示している。方法４００は、例えば、図２Ａのブロックチェーンネットワーク２００の１つ以上の構成要素を含んでいるシステムにより実現できる。例としての方法４００は、ノード２０２の１つ以上、ユーザコンピューティング装置２４０、および／またはイーサリアム仮想マシンにより実現できる。例としての方法４００は、ノード２０２の１つ以上の構成要素（例えば、プロセッサ、プロセスとメモリの組み合わせ、１つ以上の論理回路など）により実行できる。方法４００は、環境２００に類似の複数のシステムにより実現できる。下記に提示される方法４００の動作は、例示的であることが意図されている。実現形態によっては、例としての方法４００は、追加的ステップ、より少ないステップ、または種々の順序で、または平行して行われる代替のステップを含むことができる。
【００４７】
ブロック４０２は、共にスマートコントラクトを行使する、保護条件と関連付けられている第１取引（例えば、ＴｘＡ）と第２取引（例えば、ＴｘＢ）を得ることを備えている。幾つかの実施形態においては、第２取引を実行することは、スマートコントラクトの現在の状態を変更できる（例えば、取引項目の価格）。幾つかの実施形態においては、保護条件は、第１取引に基づいて自動的に生成される。幾つかの実施形態においては、保護条件は、第１取引を提出したコンピューティング装置により提出される。幾つかの実施形態においては、第１および第２取引が、例えば、プールデータベースにおいて受信されたとき、それらを実行する順序があってもよく、またはなくてもよい。第２取引は、保護条件を有してもよく、有さなくてもよい。
【００４８】
幾つかの実施形態においては、現在の状態は、スマートコントラクトの取引項目の現在の価格を備えており、保護条件は、取引項目の価格範囲（例えば、予め設定された価格）、量範囲、または、時間範囲と関連付けられている。例えば、第１取引は、価格範囲における取引項目の購入注文と関連付けられており、第２取引は、取引項目を売る販売注文と関連付けられている。
【００４９】
幾つかの実施形態においては、ブロックチェーンノード（例えば、ノード２０２）は、定期的に（例えば、１０分毎に）、未確認取引を収集して、プールデータベースに格納するように構成されており、第１取引と第２取引を得ることは、プールデータベースにおける未確認取引のプールから、第１取引と第２取引を得ることを備えている。未確認取引を収集して格納するノードは、必ずしも、未確認取引をプールデータベースから得るノードというわけではない。未確認取引のプールは、実行の順序を有しておらず、プールデータベースから得られ、後続のステップが実行された後、実行の順序を決定可能である。
【００５０】
幾つかの実施形態においては、ブロックチェーンノード（例えば、ノード２０２）はそれぞれ、ブロックチェーンのコピーを台帳として格納するためのメモリを備え、データブロックのブロックチェーンを維持するために、ブロックチェーンノードは、新しいデータブロック、または別の新しいデータブロックがブロックチェーンに追加されたときに、台帳を更新するように構成されている。
【００５１】
ブロック４０４は、第２取引を実行して、スマートコントラクトの現在の状態を更新することを備えている。第１および第２取引は、実行のためにランダムに選択できる。このブロックは、第２取引が最初に選択されるシナリオを表わしている。
【００５２】
または、幾つかの実施形態においては、第１取引を第２取引よりも前に実行でき、スマートコントラクトの現在の状態が更新される。
【００５３】
ブロック４０６は、スマートコントラクトの、更新された現在の状態は保護条件を満たしているかどうかを判定することを備えている。
【００５４】
ブロック４０７は、更新された現在の状態が保護条件を満たすと判定することに応答して、第１取引を実行し、ブロックチェーンに追加するために、第２および第１取引を新しいデータブロックに記録することを備えている。
【００５５】
ブロック４０８は、更新された現在の状態が保護条件を満たさないと判定することに応答して、第１取引を実行することなく、ブロックチェーンに追加するために、第２取引を別の新しいデータブロックに記録することを備えている。幾つかの実施形態においては、ブロック４０８は更に、更新された現在の状態が保護条件を満たさないと判定することに応答して、第１取引を提出したコンピューティング装置に実行例外を返すことを備えている。
【００５６】
幾つかの実施形態においては、現在の状態は、先行する取引（例えば、第２取引）に限られることなく、任意のファクタにより変更できる。例えば、スマートコントラクトの安全性を向上するための、コンピュータにより実現される方法は、スマートコントラクトを行使し、保護条件と関連付けられている第１取引を得ることと、スマートコントラクトの現在の状態が、保護条件を満たすかどうかを判定することと、現在の状態が保護条件を満たすと判定することに応答して、第１取引を実行し、第１取引を、ブロックチェーンに追加するためにデータブロックに記録することと、現在の状態が保護条件を満たさないと判定することに応答して、第１取引を実行しないことを備えている。
【００５７】
図５は、種々の実施形態に係る、取引を実現するための、例としての方法５００のフローチャートを例示している。方法５００は、例えば、図２Ａのブロックチェーンネットワーク２００を含む種々のシステムにおいて実現できる。例としての方法５００は、ノード２０２とユーザコンピューティング装置２４０により実現できる。方法５００は、ブロックチェーンネットワーク２００に類似している複数のシステムにより実現できる。方法５００の動作は、図４におけるブロック４０６と４０７の実施形態であることが可能である。下記に提示される方法５００の動作は、例示的であることが意図されている。実現形態によっては、例としての方法５００は、追加的ステップ、より少ないステップ、または、種々の順序で、または平行して行われる代替のステップを含むことができる。
【００５８】
ブロック５０２において、スマートコントラクトの現在の状態（第１状態とも称される）が、取引の条件（例えば、図４におけるブロック４０２で受信された取引の条件）を満たすかどうかを判定できる。現在の状態は、図４におけるブロック４０６での「更新された現在の状態」であることが可能である。例えば、条件は、品物の価格が、取引において定義された値に固定されているということであってよい。ブロック５０４において、スマートコントラクトの第１状態が、取引の条件を満たしていないと判定された場合、取引を取り下げることができる。例えば、スマートコントラクトの第１状態において、品物の価格が、取引で定義された価格とは異なる値に変更されている場合は、条件が満たされていないので、取引を取り下げることができる。
【００５９】
ブロック５０６において、スマートコントラクトの第１状態が、取引の条件を満たしていると判定された場合、スマートコントラクトの残高を更新できる。ブロック５０８において、スマートコントラクトの残高の更新が成功したかどうかを判定できる。更新が失敗した場合、ブロック５０４で示されるように、取引を取り下げることができる。ブロック５１０において、スマートコントラクトの残高の更新が成功した場合、スマートコントラクトの第１状態は、第２状態に変更できる。ブロック５１２において、取引は、取引と関連付けられているパラメータに基づいて、スマートコントラクトを実行することにより実現できる。例えば、取引と関連付けられているパラメータの値を、スマートコントラクトの１つ以上のプロセスに渡すことができ、該１つ以上のプロセスを実行できる。
【００６０】
ブロック５１４において、スマートコントラクトの実行が成功したかどうかが判定される。ブロック５１６において、スマートコントラクトの実行が成功したと判定された場合、スマートコントラクトの状態は、第３状態に変更できる。取引は首尾よく実現された。ブロック５１８において、スマートコントラクトの実行が失敗した場合、実行例外を返すことができる。ブロック５２０において、スマートコントラクトの状態は、変更して第１状態に戻すことができる。幾つかの実施形態においては、図４におけるブロック４０７は、図５におけるブロック５０６〜５１６を含むことができる。
【００６１】
ここにおいて記述された技術は、１つ以上の特殊用途のコンピューティング装置により実現される。特殊用途のコンピューティング装置は、デスクトップコンピュータシステム、サーバコンピュータシステム、ポータブルコンピュータシステム、ハンドヘルドデバイス、ネットワーキングデバイス、または、任意の他のデバイス、または、この技術を実現するためのハードワイヤードおよび／またはプログラムロジックを組み込んでいるデバイスの組み合わせであってよい。
【００６２】
図６は、ここにおいて記述された実施形態の何れをも実現できる、例としてのコンピュータシステム６００を例示しているブロック図である。システム６００は、図２Ａを参照して上述したノード２０２またはユーザコンピューティング装置２４０に対応することができる。コンピュータシステム６００は、情報を通信するためのバス６０２または他の通信機構、情報を処理するための、バス６０２に結合されている１つ以上のハードウェアプロセッサ６０４を含んでいる。ハードウェアプロセッサ６０４は、例えば、１つ以上の汎用マイクロプロセッサであってよい。
【００６３】
コンピュータシステム６００はまた、情報、およびプロセッサ６０４により実行される命令を格納するための、バス６０２に結合されている、ランダムアクセスメモリ（ＲＡＭ）、キャッシュおよび／または他のダイナミックストレージデバイスのようなメインメモリ６０６も含んでいる。メインメモリ６０６はまた、プロセッサ６０４により実行される命令の実行中に、一時的変数または他の中間情報を格納するためにも使用できる。そのような命令は、プロセッサ６０４がアクセス可能な格納媒体に格納されると、コンピュータシステム６００を、命令において指定される動作を行うようにカスタマイズされた特殊用途マシンに変える。コンピュータシステム６００は更に、情報、およびプロセッサ６０４に対する命令を格納するための、バス６０２に結合されているリードオンリメモリ（ＲＯＭ）６０８または他のスタティックストレージデバイスを含んでいる。情報および命令を格納するために、磁気ディスク、光ディスク、またはＵＳＢサムドライブ（フラッシュドライブ）などのようなストレージデバイス６１０が設けられ、バス６０２に結合される。
【００６４】
コンピュータシステム６００は、ここにおいて記述した技術を、コンピュータシステムとの組み合わせにおいて、コンピュータシステム６００を、特殊用途マシンとさせる、またはそのようにプログラムする、カスタマイズされたハードワイヤードロジック、１つ以上のＡＳＩＣまたはＦＰＧＡ、ファームウェアおよび／またはプログラムロジックを使用して実現できる。１つの実施形態によれば、ここにおいて記述された動作、方法、およびプロセスは、プロセッサ６０４が、メインメモリ６０６に含まれている１つ以上の命令の１つ以上のシーケンスを実行することに応答して、コンピュータシステム６００により実行される。そのような命令は、ストレージデバイス６１０のような別の格納媒体からメインメモリ６０６に読み込むことができる。メインメモリ６０６に含まれる命令のシーケンスの実行は、プロセッサ６０４に、ここにおいて記述されたプロセスステップを行わせる。代替の実施形態においては、ハードワイヤード回路を、ソフトウェア命令の代わりに、またはそれと組み合わせて使用できる。
【００６５】
プロセッサ６０４は、上述したプロセッサ２０４に対応することができ、メインメモリ６０６、ＲＯＭ６０８、および／またはストレージデバイス６１０は、上述したメモリ２０６に対応することができる。メインメモリ６０６、ＲＯＭ６０８、および／またはストレージデバイス６１０は、非一時的格納媒体を含むことができる。「非一時的媒体」の用語と、これに類似の用語は、ここにおいて使用されるように、マシンを、特定の様式で動作させるデータおよび／または命令を格納する任意の媒体を指している。そのような非一時的媒体には、不揮発性媒体および／または揮発性媒体を含むことができる。不揮発性媒体は、例えば、ストレージデバイス６１０のような、光または磁気ディスクを含んでいる。揮発性媒体は、メインメモリ６０６のようなダイナミックメモリを含んでいる。非一時的媒体の一般的な形式には、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または任意の他の磁気データ格納媒体、ＣＤ−ＲＯＭ、任意の他の光データ格納媒体、任意の孔パターンの物理媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、ＮＶＲＡＭ、任意の他のメモリチップ、またはカートリッジ、およびそれらのネットワーク化されたバージョンがある。
【００６６】
コンピュータシステム６００はまた、バス６０２に結合されている通信インタフェース／ネットワークポート６１８を含んでいる。通信インタフェース／ネットワークポート６１８は、１つ以上のローカルネットワークに接続されている１つ以上のネットワークリンクに、双方向データ通信カップリングを提供する。例えば、通信インタフェース／ネットワークポート６１８は、総合デジタル通信網（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、または対応するタイプの電話線へのデータ通信接続を提供するためのモデムであってよい。別の例として、通信インタフェース／ネットワークポート６１８は、対応ＬＡＮ（または、ＷＡＮと通信されるＷＡＮ構成要素）へのデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）カードであってよい。無線リンクもまた実現できる。任意のそのような実現形態において、通信インタフェース／ネットワークポート６１８は、種々のタイプの情報を表わしているデジタルデータストリームを搬送する、電気、電磁、または光信号を送受信する。
【００６７】
コンピュータシステム６００は、ネットワーク、ネットワークリンク、および通信インタフェース／ネットワークポート６１８を通してメッセージを送ることが可能で、プログラムコードを含むデータを受信可能である。インターネットの例においては、サーバは、インターネット、ＩＳＰ、ローカルネットワーク、および通信インタフェース／ネットワークポート６１８を通して、アプリケーションプログラムに対して、要求されるコードを送信できる。受信されたコードは、受信されたときにプロセッサ６０４により実行でき、および／または、後での実行のために、ストレージデバイス６１０または他の不揮発性ストレージに格納できる。
【００６８】
先行するセクションで記述された方式、機構、解決策、プロセス、方法、およびアルゴリズムのそれぞれは、コンピュータハードウェアを備えている１つ以上のコンピュータシステムまたはコンピュータプロセッサにより実行されるコードモジュールにおいて具現化でき、およびコードモジュールにより全体を、または部分的に自動化できる。プロセスおよびアルゴリズムは、特定用途向け回路において、部分的に、または全体を実現できる。幾つかの実施形態においては、プロセッサ６０４は、上述した１つ以上の論理回路として部分的に、または全体を実現できる。
【００６９】
上述した種々の特徴とプロセスは、互いに独立して使用でき、または、種々のやり方で組み合わせることができる。すべての可能な組み合わせと、その下位の組み合わせは、本開示の範囲であることが意図されている。加えて、ある方法またはプロセスブロックは、幾つかの実現形態においては省略できる。ここにおいて記述された方法とプロセスは、如何なる特別なシーケンスにも制限されず、それに関連するブロックまたは状態は、適切な他のシーケンスで実行可能である。例えば、記述されたブロックまたは状態は、具体的に開示された順序以外の順序で実行でき、または複数のブロックまたは状態は、単一のブロックまたは状態に組み合わせることができる。例としてのブロックまたは状態は、連続して、または平行して、またはある他の方法で実行できる。ブロックまたは状態は、開示された例としての実施形態に追加でき、またそこから除去できる。ここにおいて記述された、例としてのシステムと構成要素は、記述されたものとは異なるように構成できる。例えば、要素を、開示された例としての実施形態に追加でき、そこから除去でき、または、それと比較して再配置できる。
【００７０】
ここにおいて記述された例としての方法の種々の動作は、少なくとも部分的には、アルゴリズムにより実行できる。アルゴリズムは、メモリ（例えば、上述した非一時的コンピュータ読取り可能格納媒体）に格納されているプログラムコードまたは命令に含むことができる。そのようなアルゴリズムは、マシン学習アルゴリズムを備えることができる。幾つかの実施形態においては、マシン学習アルゴリズムは、機能を実行するためにコンピュータを明示的にプログラムしなくてもよく、機能を実行する予測モデルを作るための訓練データから学習可能である。
【００７１】
ここにおいて記述された例としての方法の種々の動作は、少なくとも部分的には、関連する動作を行うように一時的に（例えば、ソフトウェアにより）、または永久的に構成される１つ以上のプロセッサにより実行できる。一時的または永久的に構成されても、そのようなプロセッサは、ここにおいて記述された１つ以上の動作または機能を実行するために動作する、プロセッサにより実現されるエンジンを構成できる。
【００７２】
同様に、ここにおいて記述された方法は、少なくとも部分的にはプロセッサで実現でき、特別なプロセッサまたは特別な複数のプロセッサは、ハードウェアの例である。例えば、方法の動作の少なくとも幾つかは、１つ以上のプロセッサまたは、プロセッサで実現されるエンジンにより実行できる。更に、１つ以上のプロセッサはまた、「クラウドコンピューティング」環境において、または「サービスとしてのソフトウェア（ＳａａＳ）」として、関連する動作の実行をサポートするために動作できる。例えば、動作の少なくとも幾つかは、（プロセッサを含むマシンの例のような）コンピュータのグループにより実行でき、これらの動作は、ネットワーク（例えば、インターネット）を介して、および１つ以上の適切なインタフェース（例えば、アプリケーションプログラムインタフェース（ＡＰＩ））を介してアクセス可能である。
【００７３】
動作の、ある幾つかの実行は、単一のマシンに属するプロセッサだけでなく、多数のマシンに跨って配置されているプロセッサに分散できる。幾つかの例としての実施形態においては、プロセッサ、またはプロセッサにより実現されるエンジンは、単一の地理的位置（例えば、ホーム環境、オフィス環境、またはサーバファーム内）に位置できる。他の例としての実施形態においては、プロセッサ、またはプロセッサにより実現されるエンジンは、多数の地理的位置に跨って分散できる。
【００７４】
この明細書全体を通して、複数の例は、単一の例として記述された構成要素、動作、または構造を実現できる。１つ以上の方法の個々の動作が、別個の動作として例示および記述されたが、個々の動作の１つ以上は同時に実行でき、動作は、例示された順序で実行することは要求されない。例としての構成において、別個の構成要素として提示された構造と機能は、組み合わされた構造または構成要素として実現できる。同様に、単一の構成要素として提示された構造と機能は、別個の構成要素として実現できる。これらの、および他の変形例、修正例、追加例、および改善例は、ここにおける主題の範囲であるものとする。
【００７５】
ここにおいて記述された、および／または、付随する図において描かれた、フロー図におけるプロセスの記述、要素、またはブロックの何れをもが、特定の論理機能、またはプロセスにおけるステップを実現するための１つ以上の実行可能命令を含むコードのモジュール、セグメント、または部分を潜在的表わしていると理解されるべきである。当業者には理解されるように、要素または機能を削除でき、示された、または検討された順序とは異なり、関与する機能により、実質的に同時に、または逆の順序を含む順序で実行できる代替としての実現形態は、ここにおいて記述された実施形態の範囲に含まれる。
【００７６】
主題の概観が、具体的な例としての実施形態を参照して記述されたが、種々の修正および変更を、本開示の実施形態のより広い範囲から逸脱することなく、これらの実施形態に対して行うことができる。主題のそのような実施形態は、単に便宜上および、この適用の範囲を、実際に２つ以上が開示された場合に、如何なる単一の開示またはコンセプトに随意的に制限することを意図することなく、ここにおいて個別に、またはまとめて、「発明」という用語により言及できる。
【００７７】
ここにおいて例示された実施形態は、当業者が、開示された教示を実践するためには十分に詳細に記述されている。構造的および論理的置換と変更が、この開示の範囲から逸脱することなく行えるように、他の実施形態を使用でき、そこから導出できる。従って、詳細な説明は、制限的な意味で捉えられるべきでなく、種々の実施形態の範囲は、そのような請求項の権利が与えられる等価物の全範囲と共に、付随する請求項によってのみ定義される。
【図１】
0006864088.tif 000011
【図２Ａ】
0006864088.tif 000012
【図２Ｂ】
0006864088.tif 000013
【図３】
0006864088.tif 000014
【図４】
0006864088.tif 000015
【図５】
0006864088.tif 000016
【図６】
0006864088.tif 000017