(57)【特許請求の範囲】
【請求項１】
ブロックチェーンのネイティブ契約を実現するためのコンピュータ実装方法であって、
ブロックチェーン契約に関連付けられた組み合わせバイトコードを取得するステップであって、該組み合わせバイトコードはブロックチェーン契約のタイプを示すインジケータを含む、ステップと、
少なくとも前記インジケータに基づいて前記ブロックチェーン契約のタイプを決定するステップと、前記ブロックチェーン契約の前記決定されたタイプに基づいて前記ブロックチェーン契約を実行するステップと、
を含む方法であって、
前記少なくとも前記インジケータに基づいて前記ブロックチェーン契約の前記タイプを決定するステップは、前記ブロックチェーン契約の前記タイプがネイティブ契約であるかどうかを決定するステップを含み、
前記ブロックチェーン契約の前記決定されたタイプに基づいて前記ブロックチェーン契約を実行するステップは、前記ブロックチェーン契約がネイティブ契約であるとの決定に応答して、前記ブロックチェーン契約を実行するためのブロックチェーンの仮想マシンをトリガーするステップを含む、方法。
【請求項２】
前記組み合わせバイトコードが、前記ブロックチェーン契約のソースコードからコンパイルされた動的ライブラリファイルのバイトコードを含む、請求項１に記載の方法。
【請求項３】
前記ブロックチェーン契約を実行する前記仮想マシンをトリガーするステップは、少なくとも前記インジケータに基づいて、前記タイプに対応する前記仮想マシンを決定するステップと、前記動的ライブラリファイルを実行するために前記決定された仮想マシンをトリガーするステップとを含む、請求項２に記載の方法。
【請求項４】
前記ブロックチェーン契約の前記決定されたタイプに基づいて、前記ブロックチェーン契約を実行することは、前記ブロックチェーン契約がネイティブ契約であると決定することに応答して、前記ブロックチェーン契約を実行するための子プロセスを作成するステップを含む、請求項２に記載の方法。
【請求項５】
前記ブロックチェーン契約を実行するために子プロセスを作成するステップは、実行可能ファイルを作成するステップと、前記動的ライブラリファイルを実行する前記実行可能ファイルを起動するための子プロセスを生成するステップと、を含む、請求項４に記載の方法。
【請求項６】
前記子プロセスとブロックチェーン仮想マシンとは、ソケットまたは共有メモリを介して通信する、請求項４に記載の方法。
【請求項７】
前記ブロックチェーン契約の前記決定されたタイプに基づいてブロックチェーン契約を実行するステップは、前記ブロックチェーン契約がネイティブ契約であると決定することに応答して、前記ブロックチェーン契約を実行するためにドッカー（登録商標）コンテナを起動するステップを含む、請求項２に記載の方法。
【請求項８】
前記ブロックチェーン契約を実行する前記ドッカー（登録商標）コンテナを起動するステップは、ドッカー（登録商標）コンテナを作成するステップと、前記動的ライブラリファイルを実行するための前記ドッカー（登録商標）コンテナを起動するステップとを含む、請求項７に記載の方法。
【請求項９】
前記ドッカー（登録商標）コンテナとブロックチェーン仮想マシンとは、ソケットを介して通信する、請求項７に記載の方法。
【請求項１０】
１つ以上のプロセッサによって実行可能な命令で構成された非一時的コンピュータ可読記憶媒体であって、該命令は、該１つ以上のプロセッサに、
ブロックチェーン契約に関連付けられた組み合わせバイトコードを取得するステップであって、該組み合わせバイトコードはブロックチェーン契約のタイプを示すインジケータを含む、ステップと、
少なくとも前記インジケータに基づいて前記ブロックチェーン契約のタイプを決定するステップと、
前記ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行するステップと
を含む動作を実行させる、非一時的コンピュータ可読記憶媒体であって、
前記少なくとも、前記インジケータに基づいて、前記ブロックチェーン契約の前記タイプを決定するステップは、前記ブロックチェーン契約の前記タイプが、ネイティブ契約であるかどうかを決定するステップを含み、
前記ブロックチェーン契約の前記決定されたタイプに基づいて、前記ブロックチェーン契約を実行するステップは、前記ブロックチェーン契約がネイティブ契約であるとの決定に応答して、前記ブロックチェーン契約を実行するブロックチェーンの仮想マシンをトリガーするステップを含む、非一時的コンピュータ可読記憶媒体。
【請求項１１】
前記組み合わせバイトコードが、前記ブロックチェーン契約のソースコードからコンパイルされた動的ライブラリファイルのバイトコードを含む、請求項１０に記載の記憶媒体。
【請求項１２】
前記ブロックチェーン契約を実行するために、前記仮想マシンをトリガーするステップと、
少なくとも前記インジケータに基づいて、前記タイプに対応する仮想マシンを決定するステップと前記動的ライブラリファイルを実行するために、前記決定された仮想マシンをトリガーするステップと
を含む請求項１１に記載の記憶媒体。
【請求項１３】
前記ブロックチェーン契約の前記決定されたタイプに基づいて、前記ブロックチェーン契約を実行するステップは、前記ブロックチェーン契約がネイティブ契約でとの決定に応答して、前記ブロックチェーン契約を実行するための子プロセスを作成するステップを含む、請求項１１に記載の記憶媒体。
【請求項１４】
前記ブロックチェーン契約を実行するために子プロセスを作成するステップは、実行可能ファイルを作成するステップと、前記動的ライブラリファイルを実行するために、前記実行可能ファイルを起動するための前記子プロセスを生成するステップと、を含む、請求項１３に記載の記憶媒体。
【請求項１５】
前記子プロセスとブロックチェーン仮想マシンとが、ソケットまたは共有メモリを介して通信する、請求項１３に記載の記憶媒体。
【請求項１６】
前記ブロックチェーン契約の前記決定されたタイプに基づいて、前記ブロックチェーン契約を実行するステップは、前記ブロックチェーン契約がネイティブ契約であるとの決定に応答して、前記ブロックチェーン契約を実行するためにドッカー（登録商標）コンテナを起動するステップを含む、請求項１１に記載の記憶媒体。
【請求項１７】
前記ブロックチェーン契約を実行するために、前記ドッカー（登録商標）コンテナを起動するステップは、ドッカー（登録商標）コンテナを作成するステップと、前記動的ライブラリファイルを実行するために、前記ドッカー（登録商標）コンテナを起動するステップとを含む、請求項１６に記載の記憶媒体。
【請求項１８】
前記ドッカー（登録商標）コンテナとブロックチェーン仮想マシンとが、ソケットを介して通信する、請求項１６に記載の記憶媒体。
【請求項１９】
ブロックチェーンの上のネイティブ契約を実現するためのシステムであって、１つ以上のプロセッサと、該１つ以上のプロセッサに結合された１つ以上の非一時的コンピュータ可読メモリとを備え、該１つ以上のプロセッサにより、実行可能な命令を用いて、
ブロックチェーン契約に関連付けられた組み合わせバイトコードを取得するステップであって、該組み合わせバイトコードは前記ブロックチェーン契約のタイプを示すインジケータを含む、ステップと、
少なくとも前記インジケータに基づいて前記ブロックチェーン契約のタイプを決定するステップと、前記ブロックチェーン契約の前記決定のタイプに基づいて前記ブロックチェーン契約を実行するステップと、
を含む動作を該システムに実行させるように構成される、システムであって、
前記少なくとも前記インジケータに基づいて前記ブロックチェーン契約の前記タイプを決定するステップは、前記ブロックチェーン契約の前記タイプがネイティブ契約であるかどうかを決定するステップを含み、
前記ブロックチェーン契約の前記決定されたタイプに基づいて前記ブロックチェーン契約を実行するステップは、前記ブロックチェーン契約がネイティブ契約であるとの決定に応答して、前記ブロックチェーン契約を実行するためのブロックチェーンの仮想マシンをトリガーするステップを含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、一般的に、ブロックチェーン上のネイティブ契約を実装するための方法およびデバイスに関する。
【背景技術】
【０００２】
ブロックチェーン技術は、分散型の方法でデータストレージを約束する。データは、ブロックのチェーンを形成し、互いの間の優先順位関係を有するデータブロックの系列に格納することができる。ブロックチェーンはまた、ブロックにそれを格納する前にデータを検証する責任を有するノードのネットワークによって維持される。ノードによって使用される暗号化コンセンサス技術を用いて、ブロックチェーンに格納されたデータは、ほぼ不変である。ノードのネットワークも、ブロックチェーンコンセンサスネットワークと呼ばれる。最近、ブロックチェーン技術はブロックチェーン契約（またはスマート契約と呼ばれる）を実行するためのフレームワークを提供するために拡大している。ブロックチェーン契約は、デジタル的に容易に確認し、または契約の交渉または性能を強化することを意図したコンピュータ・プロトコルである。例えば、ブロックチェーン契約は、第三者なしで信頼性の高いトランザクションのパフォーマンスを可能にする。
【０００３】
それらはソリディティ（ｓｏｌｉｄｉｔｙ）言語で作成することが必要とされているため、現在のスマート契約は、主にイーサリアム仮想マシン（ＥＶＭ：Ｅｔｈｅｒｅｕｍ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）上で実行するソリディティ（堅実）契約である。ソリディティ契約はイーサリアムのブロックチェーン上の特定のアドレスに常駐するコード（契約機能）とデータ（契約状態）の集合体です。いくつかの他のスマート契約はネイティブ契約である。ネイティブ契約はソリディティ言語以外の言語で書くことができる。ネイティブ契約は、プリコンパイルされた契約と混同してはならない。プリコンパイルされた契約は、ＥＶＭ外で実行、再利用可能な機能であるが、ＥＶＭから呼び出すことができる。例えば、ＳＨＡ２５６、ＲＩＰＥＭＤ１６０、および、ＥＣＲＥＣＯＶＥＲは、プリコンパイルされた契約として実装されている。ネイティブ契約は、プログラマが、非決定的無限ランニング、およびサンドボックスエスケープコードを書くことができる。ネイティブ契約について、開発者は、ガス（イーサリアムに行われたすべての操作の実行料金）とガスの制限によって制限され、コードがＥＶＭに比べて大幅に高速に実行されていない。しかし、現在のブロックチェーンシステムが、ソリディティで書かれた契約を必要とし、ネイティブ契約を実行するための適切なサポートを欠いている。
【発明の概要】
【０００４】
本発明の様々な実施形態は、ブロックチェーンのネイティブ契約を実現するためのシステム、方法、および非一時的コンピュータ可読媒体を含む。
【０００５】
１つの態様によれば、ブロックチェーン上のネイティブ契約を実現するためのコンピュータ実施方法は、ブロックチェーン契約に関連付けられた組み合わせのバイトコードを取得するステップであって、該組み合わされたバイトコードがブロックチェーン契約のタイプを示すインジケータを含む、ステップと、インジケータに少なくとも基づいてブロックチェーン契約のタイプを決定するステップと、ブロックチェーン契約の決定のタイプに基づいてブロックチェーン契約を実行するステップとを含む。
【０００６】
いくつかの実施形態では、組み合わされたバイトコードはブロックチェーン契約のソースコードからコンパイルされた動的ライブラリファイルのバイトコードを含む。一例では、ソースコードは、Ｃ＋＋である。
【０００７】
いくつかの実施形態では、インジケータに少なくとも基づいてブロックチェーン契約のタイプを決定するステップは、ブロックチェーン契約のタイプがネイティブ契約であるかどうかを決定するステップを含む。
【０００８】
いくつかの実施形態では、ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行するステップは、ブロックチェーン契約がネイティブ契約であるとの決定に応答して、ブロックチェーン契約を実行するブロックチェーン仮想マシンをトリガーするステップを含む。ブロックチェーン契約を実行する仮想マシンをトリガするステップは、少なくともインジケータに基づいて、そのタイプに対応する仮想マシンを決定するステップと、動的ライブラリファイルを実行するために決定された仮想マシンをトリガーするステップを含む。
【０００９】
いくつかの実施形態では、ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行することは、ブロックチェーン契約がネイティブ契約であるとのの決定に応答して、ブロックチェーン契約を実行するために子プロセスを作成するステップを含む。ブロックチェーン契約を実行するために子プロセスを作成するステップは、実行可能ファイルを作成するステップと、動的ライブラリファイルを実行するための実行ファイルを起動するために、子プロセスを生成するステップを含む。子プロセスとブロックチェーン仮想マシンは、ソケットまたは共有メモリを介して通信する。
【００１０】いくつかの実施形態では、ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行することは、ブロックチェーン契約がネイティブ契約であるとの決定に応答して、ブロックチェーン契約を実行するためにドッカー（登録商標）コンテナ（ｄｏｃｋｅｒ（登録商標）  ｃｏｎｔａｉｎｅｒ）を起動するステップを含む。ブロックチェーン契約を実行するためのドッカー（登録商標）コンテナを起動するステップは、ドッカー（登録商標）コンテナを作成するステップと、動的ライブラリファイルを実行するためのドッキングウィンドウコンテナを起動するステップとを含む。ドッカー（登録商標）コンテナとブロックチェーン仮想マシンは、ソケットを介して通信する。
【００１１】
別の態様によれば、非一時的コンピュータ可読記憶媒体は、ブロックチェーン契約に関連付けられた組み合わせバイトコードを取得するステップであって、この組み合わせバイトコードはブロックチェーン契約のタイプを示すインジケータを含む、ステップと、少なくとも前記インジケータに基づいて前記ブロックチェーン契約のタイプを決定するステップと、前記ブロックチェーン契約の前記決定のタイプに基づいて前記ブロックチェーン契約を実行するステップと、を含む動作を、１つ以上のプロセッサに実行させる実行可能な命令で構成されている。
【００１２】
別の態様によれば、ブロックチェーンの上のネイティブ契約を実現するためのシステムであって、１つ以上のプロセッサと、該１つ以上のプロセッサに結合された１つ以上の非一時的コンピュータ可読メモリとを備え、該１つ以上のプロセッサにより、実行可能な命令を用いて、ブロックチェーン契約に関連付けられた組み合わせバイトコードを取得するステップであって、該組み合わせバイトコードはブロックチェーン契約のタイプを示すインジケータを含む、ステップと、少なくとも前記インジケータに基づいて前記ブロックチェーン契約のタイプを決定するステップと、前記ブロックチェーン契約の前記決定のタイプに基づいて前記ブロックチェーン契約を実行するステップと、を含む動作を該システムに実行させるように構成される、システムが提供される。
【００１３】
システム、方法、および非一時的コンピュータ可読媒体のこれらの、および、他の特徴は、構造の関連要素の動作および機能の方法、および、部品と製造の経済の組み合わせと同様に、以下の記載および添付の図面を参照して、添付の特許請求の範囲を考慮したときに明らかになる。そのすべてが、本明細書の一部を形成し、ここで、様々な図において同様の参照番号は対応する部分を示す。しかしながら、図面は例示および説明のみの目的のためであり、本発明の制限の定義として意図されていないことは、はっきりと理解されるべきである。
【図面の簡単な説明】
【００１４】
本技術の様々な実施形態の特定の特徴は、添付の特許請求の範囲に具体的に記載されている。特長および技術の利点のより良い理解が、本発明の原理が利用される例示的な実施形態、および添付の図面を設定する以下の詳細な説明を参照することによって得られる。
【図１Ａ】図１Ａは、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的なシステムを示す図である。
【図１Ｂ】図１Ｂは、様々な実施形態にしたがって、ブロックチェーン契約を実施するための例示的なフレームワークを示す図である。
【図２】図２は、様々な実施形態にしたがって、インジケータを追加するための例示的な方法を示す。
【図３Ａ】図３Ａは、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的な方法を示す。
【図３Ｂ】図３Ｂは、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的な方法を示す。
【図３Ｃ】図３Ｃは、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的な方法を示す。
【図４】図４は、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的な方法のフローチャートを示す。
【図５】図５は、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的なコンピュータシステムのブロック図を示す。
【図６】図６は、本明細書に記載の実施形態のいずれかを実施することができる例示的なコンピュータシステムのブロック図を示す。
【発明を実施するための形態】
【００１５】
ブロックチェーンは、その操作が、ピアツーピア（Ｐ２Ｐ）ネットワーク内の様々なノード（例えば、コンピューティングデバイス）によって実行されるため、一般に、分散台帳と呼ばれる、分散型データベースと考えることができる。すべての情報はブロックチェーンに書き込まれ、そこから保存または読み取ることができる。ノードは、例えば、コンピューティングデバイスまたはブロックチェーンネットワークをサポートし、スムーズに実行を続ける大規模なコンピュータシステムである。各ノードは、一部またはブロックチェーンの機能の全てを提供することができる。例えば、コンセンサス検証を提供するノードは、コンセンサス参加ノード（またはコンセンサス・ノード）と呼ぶことができる。
【００１６】
図１Ａは、様々な実施形態にしたがって、種々の開示された手順と方法を実行するための例示的なシステム１００を示す。ここに示されるように、ブロックチェーンネットワークは、複数のブロックチェーンノード（例えば、ノード１、ノード２、ノード３、ノード４、ノードｉ等）を含むことができる。ブロックチェーンノードは、１つのブロックチェーンノードが別のノードと相互に通信するネットワーク（例えば、ピア・ツー・ピアネットワーク）を形成することができる。ここに示されるようなブロックチェーンノードの順序と数は、単に例示的、および説明を簡単にするためである。ブロックチェーンノードは、サーバ、コンピュータ等に実装することができる。各ブロックチェーンノードは、ＴＣＰ  ／  ＩＰ等の通信方式の様々なタイプを介して一緒に結合された１つまたは複数の物理ハードウェアデバイス、または、仮想デバイスに対応することができる。分類に応じて、ブロックチェーンノードは、フルノード、ゲスノード、コンセンサス・ノード、等を含むことができる。
【００１７】
様々な実施形態では、ユーザＡとユーザＢとは、トランザクションを実行するブロックチェーンノードをトリガするために、ノートパソコンや携帯電話などの対応デバイスを使用することができる。このトランザクションは、ブロックチェーン契約（例えば、スマート契約）によって行うことができる。たとえば、ユーザーＡが、ユーザーＡのアカウントにあるいくらかの資産をユーザーＢのアカウントに移すことにより、ユーザＢとのトランザクションを望むことがあり得る。ユーザＡとユーザＢとは、トランザクションのために適切なブロックチェーンソフトウェア（例えば、暗号通貨ウォレット）をインストールした対応デバイスを使用することができる。ユーザＡのデバイスは、受信ノードＢと呼ばれるユーザＢのデバイスとのトランザクションを開始するイニシエータノードＡと呼ぶことができる。ノードＡは、ノード１との通信を介してブロックチェーンにアクセスすることができ、ノードＢは、ノード２との通信を介してブロックチェーンにアクセスすることができる。例えば、ノードＡとノードＢとは、ブロックチェーンにトランザクションを追加することを要求するために、ノード１とノード２を介して、ブロックチェーンにトランザクションを提出することができる。ブロックチェーンから離れて、ノードＡとノードＢとは、通信の他のチャンネル（例えば、ノード１および２を経由しない通常のインターネット通信）を有することができる。いくつかの実施形態では、ノードＡ上のブロックチェーンソフトウェアは、ブロックチェーンノード１のフロントエンドとして考えることができ、ブロックチェーンノード１は、ブロックチェーンソフトウェアのバックエンドを走らせることができる。
【００１８】
図１Ａにおける、各ノードは、そのノードに、本明細書に記載されたブロックチェーンのネイティブ契約を実現するための様々なステップを実行させるために、プロセッサと、プロセッサによって実行可能な命令で構成された非一時的コンピュータ可読記憶媒体を含むことができる。各ノードには、他のノードおよび／または他のデバイスと通信するための、ソフトウェア（例えば、トランザクション・プログラム）、および／またはハードウェア（例えば、有線、無線接続）をインストールすることができる。例えば、ノードＡおよびノードＢのようなユーザ・デバイスは、暗号通貨ウォレットのようなユーザエンドソフトウェアをインストールすることができ、ブロックチェーンノードは、ブロックチェーントランザクション処理ソフトウェアをインストールすることができる。ノードのハードウェアおよびソフトウェアの更なる詳細は、図４および図６を参照して後述する。
【００１９】
ブロックチェーンノードは、各々、メモリを備えるか、または、結合することができる。いくつかの実施形態では、メモリは、プールデータベースを格納することができる。プールデータベースは、分散的に、複数のブロックチェーンノードにアクセス可能であることができる。例えば、プールデータベースは、それぞれ、ブロックチェーンノードのメモリに格納されることができる。プールデータベースは、ユーザによって操作されるノードＡのような、１つ以上のユーザ・デバイスによって提出された複数のトランザクションを格納することができる。イーサリアムシステムに関するいくつかの実施形態では、未確認のトランザクションのトランザクション要求を受信した後、受信者ブロックチェーンノードは、トランザクションのいくつかの予備的な検証を行うことができる。例えば、図１Ａを参照すると、ノード１は、ノードＡからトランザクションを受信した後に、予備検証を実行することができる。一旦、検証されると、トランザクションは、受信側ブロックチェーンノードのプールデータベースに格納することができる。受信側ブロックチェーンノードは、受信ノードによって行われたプロセスを繰り返す１つ以上の他のブロックチェーンノード（たとえば、ノード３、ノード４）にもトランザクションを送信することができる。一旦、対応プールデータベースのトランザクションが特定のレベルに達すると、ブロックチェーンノードは、各々、コンセンサスルールまたは別の方法にしたがって、対応するプールデータベースにおけるトランザクションのバッチを検証することができる。トランザクションがブロックチェーン契約を含む場合は、ブロックチェーンノードは、ローカルに、ブロックチェーン契約を実行することができる。そのトランザクションのバッチを（例えば、コンセンサスルールにしたがって）うまく検証した特定のブロックチェーンノードは、そのトランザクションをパックしてそのブロックチェーンのローカルコピーに追加し、その結果を他のブロックチェーンノードに広げることができる。特定のブロックチェーンノードは、最初に成功裏に検証を完了したもの、検証特権を取得したもの、または別の合意ルールに基づいて決定されたものであり得る。他のブロックチェーンノードは、トランザクションをローカルに実行し、（例えば、ハッシュ計算を実行することによって）実行結果を互いに検証することができる。そして、ブロックチェーンのコピーを特定のブロックチェーンノードのコピーと同期させる。ブロックチェーンのローカルコピーを更新することにより、ブロックチェーンノードがローカル・メモリ内にそのような情報を書き込むことができる。検証が、ある点で失敗した場合、そのトランザクションは拒否される。
【００２０】
図１Ｂは、様々な実施形態にしたがって、ブロックチェーン契約を実施するための例示的なフレームワークを示す図である。以下に示す操作は、例示することを意図されている。実装に依存して、例示的なステップは、様々な順序でまたは並列に実行される、追加の、より少ない、または、代替のステップを含むことができる。
【００２１】
様々な実施形態において、ブロックチェーン契約を展開するために、ノードＡは、コンパイラでブロックチェーン契約ソースコードをコンパイルすることができ、それは、バイトコードを返す。ノードＡは、バイトコードを含むトランザクションを構築し、署名することができる。例えば、トランザクションは、ナンス、ガス価格、ガスリミット、行先（呼び出されるブロックチェーン契約または受信者のアカウントのアドレス）、値、データ（例えば、バイトコード）等の情報を含むことができる。ノードＡは、リモートプロシージャコール（ＲＰＣ）インターフェイスを介してブロックチェーンノード１にトランザクションを送ることができる。ＲＰＣは、コンピュータプログラムが、手続き（例えばサブルーチン）を異なるアドレス空間（例えば、共有ネットワーク上のノード１のような別の他のコンピュータの上）において実行させるときであり、それは、プログラマがリモートインタラクションの詳細を明示的にコーディングすることなく、あたかもそれが通常の（ローカル）プロシージャコールであるかのようにコーディングされる。ノード１は、そのトランザクションが、署名を検証することにより有効であるかどうかを検証することができる。一旦検証されると、ノード１は、様々な他のブロックチェーンノードを含むブロックチェーンネットワークに、トランザクションをブロードキャストすることができる。ブロックチェーンノードは、ローカル仮想マシン（ＶＭ）上の演算によってトランザクションを確認し、検証されたトランザクションを、ブロックチェーンの新しいブロックに詰めることができる。新しいブロックは、すべてのブロックチェーン・ノードに同期される。
【００２２】
イーサリアムシステムなどの現在のブロックチェーンプラットフォームは、ソリディティ（ｓｏｌｉｄｉｔｙ）契約のみをサポートする。ソリディティはイーサリアム仮想マシン（ＥＶＭ）によって実装されたブロックチェーン契約を記述するための契約指向のプログラミング言語である。これらのブロックチェーンのシステムは、Ｃ＋＋やＪａｖａ（登録商標）、Ｐｙｔｈｏｎなどの他のプログラム言語で契約言語をサポートしていない。その結果、ブロックチェーンシステムはネイティブ契約（例えば、Ｃ＋＋または他の非ソリディティ言語で書かれたブロックチェーン契約）をサポートしたり、実行していない。既存の技術におけるこのような欠陥は、開発を抑制し、ブロックチェーンシステムのアプリケーションを制限する。
【００２３】
少なくとも、現在の技術の欠点を軽減し、上記の技術的問題に技術的解決策を提供し、コンピュータの機能を向上させるために、ブロックチェーンにおいてネイティブ契約を実施するためのシステムおよび方法が開示される。ネイティブ契約のサポートは、スマート契約の用途を拡大するために動的ライブラリを使用することによって達成することができる。一例として、以下のシステムおよび方法は、Ｃ＋＋システムに基づいて説明されている。当業者は、様々な他のコンピュータ言語のシステム上で開示されたシステムおよび方法のアプリケーションを評価できる。
【００２４】
図２は、様々な実施形態にしたがって、インジケータを追加するための例示的な方法を図示する。以下に示す操作は、例示することを意図している。実装に依存して、例示的なステップは、様々な順序でまたは並列に行う、追加の、より少ない、または代替のステップを含むことができる。図２では、例示的なプログラミング言語としてＣ＋＋を使用しているが、様々な他のプログラミング言語を、ブロックチェーン契約を書くために使用することができる。
【００２５】
ステップ２０１において、ユーザは、ユーザデバイス上のＣ＋＋でブロックチェーン契約をプログラムすることができる。例示的なＣ＋＋ソースコードの一部が示されている。ソースコードは、コンパイラ（例えば、Ｃ＋＋コンパイラ）に送信することがでる。コンパイラは、ユーザデバイスまたはユーザデバイスに結合された別のデバイス上にあってもよい。
【００２６】
ステップ２０２において、コンパイラは、（例えば、．ＣＰＰファイル内の）ソースコードを、ブロックチェーン契約の（例えば、．ｓｏファイル内の）バイトコードにコンパイルすることができる。いくつかの実施形態では、ユーザはさまざまなプログラミング言語（例えば、Ｊａｖａ（登録商標）、Ｃ＋＋、パイソン）で、フロントエンドのブロックチェーン契約を構築することができる。フロントエンドソフトウェアは、ユーザ・デバイスにロードすることができる。次に、フロントエンドに関連付けられているコンパイラが、ブロックチェーン契約をバイトコードにコンパイルすることができる。コンパイラは、１つのプログラミング言語（ソース言語）で書かれたコンピュータコードを、他のプログラミング言語（目的言語）に変換するコンピュータソフトウェアでありえる。コンパイラは、実行可能プログラムを作成するために、ハイレベルのプログラミング言語のソースコードを、低レベル言語（例えば、アセンブリ言語、オブジェクトコード、またはマシンコード）に変換することができる。バイトコードは、ポータブルコードまたはＰコードと呼ばれる、ソフトウェアインタプリタにより効率的な実行のために設計された命令セットの形式である。バイトコードが、マシンコードまたはオブジェクト・ノードと呼ぶことができるのに対し、ブロックチェーン契約は、様々なプログラミング言語で人間が読み取り可能なソースコードで書くことができる。人間が読めるソースコードとは異なり、バイトコードは、コンパクトな数値コード、定数、および、コンパイラの構文解析と、プログラムオブジェクトのタイプ、範囲、およびネストの深さのようなものの意味解析との結果をエンコードする参照（例えば、数値アドレス）である。この場合、バイトコードはブロックチェーン契約を実行するブロックチェーンノードによって読み取ることができる。
【００２７】
一例として、コンパイルバイトコードとして１６進領域の第１のカップルバイトが示されている。明確性のため、アドレス領域とアスキー（ＡＳＣＩＩ）領域などのバイトコードの特定の部分は示されていない。バイトコードは１６進数であり得る。本明細書では、Ｃ＋＋バイトコードは、プログラムを実行するためにＣ＋＋に対応した仮想マシンの命令を含む動的ライブラリファイル（例えば、．ｓｏファイル）に含まれることができる。様々な実施形態では、動的ライブラリは、実行可能ファイルまたはアプリケーションの外部に存在する。実行時において、リンクは、動的ライブラリと、実行可能ファイルまたはアプリケーションとの間で確立される。特別な機能を含む動的ライブラリは、プログラムの実行中に起動され、それは、プログラム全体のサイズを最小化し、メモリ消費低減のための改良されたアプリケーションのパフォーマンスを容易にする。
【００２８】
ステップ２０３において、ユーザデバイス（例えば、ウォレットソフトウェア）は、ブロックチェーン契約のコンパイルバイトコード内にインジケータを挿入することができる。ここに示す例として、インジケータは、バイトコードの前部に加えることができる。このインジケータは、ブロックチェーン契約のタイプ（例えば、ブロックチェーン契約が、ネイティブ契約、ブロックチェーン契約のプログラミング言語、等であるかどうか）を示す１つのバイトのデータを含むことができる。この例では、インジケータは、ネイティブ契約を示し、Ｃ＋＋を参照する０３である。このインジケータは、１６進数であることができる。したがって、ここでは、０３は０×０３を指す。他の様々な表現を用いることができる。このインジケータはまた、バイトコード内の別の位置に挿入することができる。
【００２９】
いくつかの実施形態では、（例えば、暗号通貨ウォレットまたは他のブロックチェーンプラットフォームソフトウェアがインストールされている）ユーザ・デバイスは、ブロックチェーン契約（例えば、ネイティブ契約、ソリディティ契約、ジャワ（Ｊａｖａ（登録商標））で書かれた契約、Ｃ＋＋で書かれた契約書、パイソン（ｐｙｔｈｏｎ）で書かれた契約などの契約タイプを入力、選択、またはそうでなければ識別するようにユーザを促す。ユーザが提供する情報に基づいて、ユーザ・デバイスは、契約タイプを表すインジケータを適用することができる。このユーザ・デバイスは、代替として、契約タイプを自動検出し、契約タイプを表すインジケータを適用することができる。例えば、「０３」または「０×０３」は、ネイティブ契約を表し、「０５」または「０×０５」はソリディティ契約を表すことができる。別の例として、「０１」または「０×０１」は、ソリディティ言語で契約を表すことができ、「０２」または「０×０２」は、Ｊａｖａ（登録商標）言語の契約を表すことができ、「０３」または「０×０３」は、Ｃ＋＋言語の契約を表すことができ、「０４」または「０×０４」は、Ｐｙｔｈｏｎ言語の契約を表すことができるなどである。このインジケータは、バイトコードまたは別の形式であることができる。１６進表現がしばしば使用されるが、インジケータは、表現の上記の例に限定されるものではない。当業者は、インジケータ表現の様々なタイプの使用を理解することができる。インジケータは、ブロックチェーン契約のコンパイルバイトコードの前に、または別の場所に追加することができる。一例では、インジケータは、バイトコードの前に追加される。インジケータは、１バイトまたはデータの他の単位を取ることができる。
【００３０】
インジケータは、コンパイルバイトコードに追加された後、組み合わせバイトコードが得られる。ステップ２０３の後、ユーザ・デバイスはブロックチェーンノードに組み合わせバイトコードを送信することができ、ブロックチェーンノードまたはブロックチェーンネットワークの別のロックチェーンノードが、ブロックチェーン契約を実行するために、インジケータに基づいて仮想マシンをトリガすることができる。
【００３１】
いくつかの実施形態では、バイトコードに加えたインジケータで、ユーザ・デバイスは、１つ以上のコンセンサス・ノードにブロックチェーン契約を送信することができる。コンセンサス・ノードは、インジケータとブロックチェーン契約のコンパイルバイトコードを含む組み合わせバイトコードを受信することができる。契約を配置したというメッセージを受信した後に、コンセンサス・ノードは、組み合わせバイトコードの一部（例えば、組み合わせバイトコードの第１のバイトにおけるインジケータ）を得ることができ、対応する仮想マシンをアクティブ化し、契約コードの得られた部分に基づいて、契約を実行する。様々な実施形態において、仮想マシンは、バイトコードを、アセンブリ言語またはプロセッサによって実行することができる他の命令セットにすることができる。例えば、契約コードが、Ｃ＋＋である場合、ＧＮＵコンパイラコレクション（ＧＣＣ）は、その契約を実行するために呼び出されることができる。契約コードが、Ｊａｖａ（登録商標）である場合、Ｊａｖａ（登録商標）仮想マシン（ＪＶＭ）は、契約を実行するために呼び出されることができる。契約コードがソリディティである場合、イーサリアム仮想マシン（ＥＶＭ）は、契約を実行するために呼び出されることができる。そして、契約コードがパイソン（Ｐｙｔｈｏｎ）である場合には、パイソンの仮想マシン（ＰＶＭ）を、契約を実行するために呼び出すことができる。上記の仮想マシンは、単に例示的なものであり、代替のものに置き換えることができる。
【００３２】
図３Ａから図３Ｃは、それぞれ、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的な方法のフローチャートを示す。この方法は、様々なソフトウェアおよびハードウェアを含むブロックチェーンシステム（例えば、システム１００）によって実施することができる。例えば、ブロックチェーンシステムは、第１のソフトウェアとしてオプションのクライアント、第２のソフトウェアとして仮想マシンを含み、ソース・コード・ファイル・アプライ．ｃｐｐへのアクセスを有することができる。以下に示す操作は、例示することを意図されている。実装に依存して、例示的なステップは、様々な順序でまたは並列に行う、追加の、より少ない、または代替のステップを含むことができる。図３Ａから図３Ｃは、以下に記載する共通のステップ１−５を共有することができる。
【００３３】
いくつかの実施形態では、ステップ１において、フロントエンドソフトウェアは、実行されるブロックチェーン契約のタイプを識別するようにユーザに促すことができる。フロントエンドは、ブロックチェーンノードを介して、または、ブロックチェーンノードに結合されたデバイス（例えば、ユーザデバイス）を介して提供することができる。本明細書では、ブロックチェーン契約のタイプは、ブロックチェーン契約のカテゴリまたは分類を参照することができる。例えば、そのタイプは、ブロックチェーン契約のプログラミング言語に基づくことができる。ブロックチェーン契約は、ジャワ（Ｊａｖａ（登録商標））、Ｃ＋＋、ソリディティ（ｓｏｌｉｄｉｔｙ）、パイソン（Ｐｙｔｈｏｎ）などで書くことができる。ソリディティで書かれたブロックチェーン契約はソリディティ契約と呼ぶことができる。ブロックチェーンシステムと同じ、Ｊａｖａ（登録商標）、Ｃ＋＋、Ｐｙｔｈｏｎまたは別の言語で書かれたブロックチェーン契約は、ネイティブ契約と呼ぶことができる。それにもかかわらず、ブロックチェーン契約のタイプは、ブロックチェーン契約のプログラミング言語とは無関係のカテゴリや分類を参照することができる。
【００３４】
一例では、ユーザは、インジケータによって表すことができる契約タイプを識別することを要求され得る。ユーザは、ユーザインタフェースを介して契約タイプを識別することができる。ネイティブ契約が示された場合、この方法の次のステップが実行される。
【００３５】
いくつかの実施形態では、ステップ２において、Ｃ＋＋プラットフォームでは、インターフェース（例えば、ジェネリックインターフェイス）が、ブロックチェーンにアクセスし、ネイティブ契約を実行するために、ユーザに提供されることができる。インタフェースは、動的ローディングによって提供されることができる。インターフェースは、ユーザーがネイティブ契約を実装するために、所定の入力および出力フォーマットを要求することができる。入力と出力の形式は、データを呼び出すための方法を含むことができる。このような要求によって、ユーザは、インターフェースにおいて、ネイティブ契約のソースコードを提供することができる。
【００３６】
いくつかの実施形態では、ステップ３において、コンパイラは、ネイティブ契約（例えば、Ｃ＋＋言語での、ソースコードファイル（．ＣＰＰ））をコンパイルして、対応する動的ライブラリ・ファイル（例えば、．ｓｏファイル）を生成することができる。動的ライブラリファイルは、バイトコードなどのマシンコードであることができる。このステップの詳細は、上記の図２を参照することができる。
【００３７】
いくつかの実施形態では、ステップ４において、ネイティブ契約はブロックチェーンシステムに配置することができる。例えば、インジケータを、組み合わせバイトコードを得るためにバイトコードに加えることができる。すなわち、組み合わせバイトコードは、インジケータと、動的ライブラリファイルのコンパイルバイトコードを含むことができる。組み合わせバイトコードはブロックチェーンノード（例えば、バックエンド・ソフトウェア）に送信することができる。このステップの詳細は、上記図２を参照することができる。
【００３８】
いくつかの実施形態では、ステップ５において、ブロックチェーンノードは、少なくともそのインジケータに基づいて、ブロックチェーン契約がネイティブ契約であるかどうかを決定することができる。例えば、コンセンサス・ノードは、ブロックチェーン契約が契約ネイティブであるかどうかを判断するためのインジケータに対応するバイトコードの部分を導出することができる。
【００３９】
いくつかの実施形態では、コンセンサス・ノードのバックエンドは、３つのステップ、６．１−６．３、のいずれかによってネイティブ契約を実行することができる。ステップ６．１は、図３Ａに示され、ステップ６．２は、図３Ｂに示され、ステップ６．３は、図３Ｃに示されている。
【００４０】
ステップ６．１で、ブロックチェーンノードは、直接動的リンクする、および／または、動的ライブラリ・ファイル（または組み合わせバイトコード）をロードすることによって、ブロックチェーンシステムにおけるブロックチェーン契約を実行し、結果を返すことができる。例えば、ブロックチェーンノードは、動的リンクおよび／または動的ライブラリファイルのロードによって、ブロックチェーン契約を実行するブロックチェーン契約に対応する仮想マシンをトリガし、結果を返すことができる。任意選択的に、ブロックチェーンノードは、動的リンクおよび／または動的ライブラリ・ファイルのロードのための、対応するローカル動的ライブラリ・ファイルを確立することができる。
【００４１】
ステップ６．２で、コンセンサス・ノードは、動的ライブラリ・ファイル（または組み合わせバイトコード）を実行する（例えば、フォーク機能を介して）子プロセスを作成することができる。例えば、コンセンサス・ノードは、呼び出されたロジックを実行可能ファイル（クライアント）にコンパイルするのにクライアントを呼び出すために、仮想マシンをトリガすることができる。実行可能ファイルは、リンクおよび／または動的ライブラリ・ファイルのロードによって、動的ライブラリ・ファイルを実行し、仮想マシンに実行結果を返すために使用することができる。子プロセスとブロックチェーンシステム（例えば、仮想マシンまたはブロックチェーンシステムの別のコンポーネント）は、ソケットまたは共有メモリを介して通信することができる。実行結果を受信した後、ブロックチェーンシステムは、次のトランザクションの実行を続行することができる。
【００４２】ステップ６．３で、コンセンサス・ノードは、ドッカー（登録商標）として実行ロジックを保存することができる。ユーザーがネイティブ契約を実行するために呼び出すとき、そのドッカー（登録商標）は、動的ライブラリファイルを呼び出し、実行して、ブロックチェーンシステムに実行結果を返すように活性化される。実行結果を取得した後に、ブロックチェーンシステムは、次のトランザクションを実行する上で運ぶことができる。ドッカー（登録商標）とブロックチェーンシステム（例えば、仮想マシンまたはブロックチェーンシステムの別のコンポーネント）は、ソケットを介して通信することができる。
【００４３】ドッカー（登録商標）は、軽量でポータブル、および自給自足のコンテナとして、アプリケーションを簡単パックし、輸送し、かつ、実行することを可能にする。ドッカー（登録商標）コンテナは、ホストオペレーティングシステムは、実行中のドッカー（登録商標）コンテナとそのカーネルを共有するようにオペレーティング・システムを共有している。一方、仮想マシンのアプリケーションは、各々、ゲスト・オペレーティング・システムを有する。ドッカー（登録商標）は、ライブ・サーバーのようなローカル開発環境を設定し、同じホストから、それぞれが独自のソフトウェア、オペレーティング・システム、および構成を持っている複数の開発環境を実行して、ローカルホスト環境に関係なく、まったく同じ設定を有する同じプロジェクトの上で、誰でも作業できるようすることを可能にする。ここで、ドッカー（登録商標）は、ブロックチェーン契約を実行するための仮想環境を提供する。それは、（例えば、システムの再起動、バグ、悪意のあるコードの実行など）実行によって引き起こされる問題からシールドされたコンセンサスノードを保つことができる。
【００４４】
図４は、様々な実施形態による、ブロックチェーン上のネイティブ契約を実施するための例示的な方法４５０のフローチャートを示す。方法４５０は、図１Ａのシステム１００の１つ以上の構成要素（例えば、ノード１、ノード２、．．．、ノードＩ、またはノード１とノードＡ等の組合せ）により実現することができる。方法４５０は、ハードウェア機器（例えば、サーバ）とソフトウェア（例えば、ブロックチェーンソフトウェア）に対応するコンセンサス・ノードによって実現することができる。方法４５０は、１つ以上のシステムまたはデバイス（例えば、コンピュータ、サーバ）によって実現することができる。システムまたはデバイスは、１つまたは複数のプロセッサおよび１つまたは複数のプロセッサに結合され、システムまたはデバイス（たとえばプロセッサ）に方法４５０を実行させる１つまたは複数のプロセッサによって実行可能な命令で構成されている１つまたは複数の非一時的コンピュータ可読記憶媒体（たとえば、１つまたは複数のメモリ）を含むことができる。以下に提示される方法４５０の動作は例示的であることを意図している。実装に依存して、例示的な方法４５０は、様々な順序でまたは並列に行うより少ない、追加の、または代替のステップを含むことができる。
【００４５】
ブロック４５１は、ブロックチェーン契約に関連付けられた組み合わせバイトコードを取得するステップを含む。この組み合わせバイトコードは、ブロックチェーン契約のタイプを示すインジケータを含む。いくつかの実施形態では、組み合わせバイトコードは、ブロックチェーン契約のソースコードからコンパイルされた動的ライブラリファイルのバイトコードを含む。一例では、ソースコードは、Ｃ＋＋である。「組み合わせ（ｃｏｍｂｉｎｅｄ）」という用語は、組み合わせバイトコードは、（１）インジケータ、および、（２）ソースコードからコンパイルされたままのコンパイルバイトコードを含むことができるように、インジケータの包含を示すことができる。このインジケータは、バイトコードの形式であってもなくてもよい。
【００４６】
ブロック４５２は、少なくともインジケータに基づいて、ブロックチェーン契約のタイプを決定するステップを含む。いくつかの実施形態では、インジケータに少なくとも基づいてブロックチェーン契約のタイプを決定するステップは、ブロックチェーン契約のタイプがネイティブ契約であるかどうかを決定するステップを含む。
【００４７】
ブロック４５３は、前記ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行するステップを含む。
【００４８】
いくつかの実施形態では、ブロック４５４において、ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行するステップは、ブロックチェーン契約の決定に応答して、ブロックチェーン契約を実行するブロックチェーン仮想マシンをトリガーするステップを含む。ブロックチェーン契約を実行する仮想マシンをトリガするステップは、少なくともインジケータに基づいて、そのタイプに対応する仮想マシンを決定するステップと、動的ライブラリファイルを実行するために決定された仮想マシンをトリガーするステップとを含む。
【００４９】
いくつかの実施形態では、ブロック４５５において、ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行するステップは、そのブロックチェーン契約が、ネイティブ契約であるとの決定に応答して、ブロックチェーン契約はブロックチェーン契約を実行するために子プロセスを作成を含む。ブロックチェーン契約を実行するために子プロセスを作成するステップは、実行可能ファイルを作成するステップと、前記動的ライブラリファイルを実行するために、前記実行ファイルを起動するための前記子プロセスを生成するステップと、を含む。子プロセスとブロックチェーン仮想マシンは、ソケットまたは共有メモリを介して通信する。
【００５０】いくつかの実施形態では、ブロック４５６において、ブロックチェーン契約の決定されたタイプに基づいてブロックチェーン契約を実行するステップは、そのブロックチェーン契約が、ネイティブ契約であるとの決定に応答して、前記ブロックチェーン契約を実行するためにドッカー（登録商標）コンテナを起動するステップを含む。ブロックチェーン契約を実行するためのドッカー（登録商標）コンテナを起動するステップは、ドッカー（登録商標）コンテナを作成するステップと、前記動的ライブラリファイルを実行するために、前記ドッカー（登録商標）コンテナを起動するステップとを含む。ドッカー（登録商標）コンテナとブロックチェーン仮想マシンは、ソケットを介して通信する。
【００５１】
現在の技術では、ブロックチェーンノードのブロックチェーンソフトウェアは、ブロックチェーンノードのハードウェアマシンは、（例えば、ハードウェアマシンやシステム構成での以前のインストールから、）これらの仮想マシンにアクセスすることにもかかわらず、仮想マシンの様々なタイプを統合することはほとんどない。開示された方法で、ブロックチェーンノードは、受信契約のバイトコードに基づいて、契約のタイプ（例えば、ネイティブまたはソリディティ契約か、契約のプログラミング言語）を決定し、契約を実行するための対応する方法をトリガーすることができる。動的ライブラリファイルを使用すると、ネイティブ契約は、ソリディティ契約に変換することなく実行するために、ブロックチェーンシステムによりサポートすることができる。このように、ブロックチェーンの契約はもはやソリディティ言語で書かれる必要はないので、ブロックチェーン契約システムの適用範囲と互換性が拡大された。ネイティブ契約は、ソリディティ契約のように実行することができる。
【００５２】
本明細書で説明される技術は、１つ以上の特殊目的コンピューティングデバイスによって実現される。この特殊目的のコンピューティングデバイスは、デスクトップコンピュータシステム、サーバコンピュータシステム、ポータブルコンピュータシステム、ハンドヘルドデバイス、ネットワークデバイスまたは、この技術を実装するためにハードワイヤードおよび／またはプログラムロジックを組み込んだ任意の他のデバイスまたはそれらの組み合わせであることができる。コンピューティングデバイスは、一般に、オペレーティング・システム・ソフトウェアによって制御され、調整される。実行のための従来のオペレーティングシステム制御およびスケジュールコンピュータプロセスは、メモリ管理を行い、ファイルシステム、ネットワーキング、Ｉ／Ｏサービスを提供し、とりわけ、グラフィカルユーザインターフェース（「ＧＵＩ」）のようなユーザインタフェース機能を提供する。
【００５３】
図５は、様々な実施形態にしたがって、ブロックチェーン上のネイティブ契約を実施するための例示的なコンピュータシステム５５０のブロック図を示す。システム５５０は、図１Ａのシステム１００または同様のデバイスの、ノード１、ノードＡとノード１、ノード２、．．．、ノードｉの組み合わせの例示的な実装であり得る。方法４５０は、コンピュータ・システム５５０により実装することができる。コンピュータ・システム５５０は、１つ以上のプロセッサおよび、該１つ以上のプロセッサに結合された１つまたは複数の非一時的コンピュータ可読記憶媒体（例えば、１つ以上のメモリ）を備えることができ、前記１つ以上のプロセッサにより、このシステムまたはデバイス（例えば、プロセッサ）に方法４５０を行わせる実行可能な命令で構成される。コンピュータシステム５５０は、命令（例えば、ソフトウェア命令）に応じた様々なユニット／モジュールを含むことができる。いくつかの実施形態では、コンピュータシステム５５０は、ブロックチェーン契約に関連付けられた組み合わせバイトコードを取得する取得モジュール５５１と、ここで、組み合わせバイトコードはブロックチェーン契約のタイプを示すインジケータを含むものであり、少なくともインジケータに基づいて、ブロックチェーン契約のタイプを決定するように構成された決定モジュール５５２と、ブロックチェーン契約の決定されたタイプに基づいて、ブロックチェーン契約を実行するように構成された実行モジュール５５３とを含むことができる。
【００５４】
図６は、本明細書に記載の実施形態のいずれかを実施することができるコンピュータシステム６００を示すブロック図である。システム６００は、本明細書に記載のいずれかのノードに実装され、ブロックチェーンのネイティブ契約を実施するための対応するステップを実行するように構成されることができる。コンピュータシステム６００は、情報を通信するためのバス６０２または他の通信機構、情報を処理するためにバス６０２に結合された１つ以上のハードウェアプロセッサ６０４、を含む。ハードウェアプロセッサ６０４は、例えば、１つ以上の汎用マイクロプロセッサであることができる。
【００５５】
コンピュータシステム６００は、また、プロセッサ６０４によって実行される情報および命令を格納するためにバス６０２に結合されたランダムアクセスメモリ（ＲＡＭ）などのメインメモリ６０６、キャッシュ、および／または他の動的格納デバイスを含む。メインメモリ６０６は、また、プロセッサ６０４によって実行される命令の実行中に一時変数または他の中間情報を格納するために使用され得る。そのような命令は、プロセッサ６０４にアクセス可能な記憶媒体に格納されると、命令で指定された動作を実行するようにカスタマイズされた特殊用途のマシンにコンピュータシステム６００をレンダリングする。コンピュータシステム６００は、静的情報およびプロセッサ６０４用の命令を格納するためにバス６０２に結合された読み取り専用メモリ（ＲＯＭ）６０８または他の静的格納デバイスをさらに含む。磁気ディスク、光ディスク、またはＵＳＢサムドライブ（フラッシュドライブ）などの格納デバイス６１０が提供され、情報および命令を記憶するためにバス６０２に結合される。
【００５６】
コンピュータシステム６００は、カスタマイズされたハードワイヤードロジック、１つまたは複数のＡＳＩＣまたはＦＰＧＡ、コンピュータシステムと組み合わせてコンピュータシステム６００を専用機にするファームウェアまたはプログラムロジックを使用して本明細書に記載の技法を実装することができる。一実施形態によれば、本明細書で説明される動作、方法、およびプロセスは、メインメモリ６０６に含まれる１つまたは複数の命令の１つまたは複数のシーケンスを実行するプロセッサ６０４に応答してコンピュータシステム６００によって実行される。そのような命令は、格納デバイス６１０などの他の記憶媒体からメインメモリ６０６に読み込まれてもよい。メインメモリ６０６に含まれる命令のシーケンスを実行すると、プロセッサ６０４は本明細書に記載のプロセスステップを実行する。別の実施形態では、ソフトウェア命令の代わりにまたはそれと組み合わせてハードワイヤード回路を使用することができる。
【００５７】
メインメモリ６０６、ＲＯＭ  ６０８、および／または格納デバイス６１０は、非一時的記憶媒体を含むことができる。本明細書で使用する用語「非一時的媒体」および同様の用語は、機械に特定のやり方で動作させるデータおよび／または命令を格納する媒体を指す、メディアが一時的信号を除外する。そのような非一時的な媒体は、不揮発性媒体および／または揮発性媒体を含むことができる。不揮発性媒体は、例えば、格納デバイス６１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ６０６などの動的メモリを含む。一般的な形態の非一時的媒体は、例えば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ、または、任意の他の磁気データ記憶媒体、ＣＤ−ＲＯＭ、任意の他の光学データ記憶媒体、穴のパターンを有する任意の物理媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、ＮＶＲＡＭ、その他のメモリチップまたはカートリッジ、および、それらのネットワークされたバージョンを含む。
【００５８】
コンピュータシステム６００は、また、バス６０２に結合されたネットワークインターフェース６１８を含む。ネットワークインターフェース６１８は、１つ以上のローカルネットワークに接続されている１つ以上のネットワークリンクへの双方向データ通信接続を提供する。例えば、ネットワークインターフェース６１８は、統合サービスデジタルネットワーク（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、または対応するタイプの電話線へのデータ通信接続を提供するためのモデムであり得る。別の例として、ネットワークインターフェース６１８は、互換性のあるＬＡＮ（またはＷＡＮと通信するためのＷＡＮコンポーネント）へのデータ通信接続を提供するためのローカルエリアネットワーク（ＬＡＮ）カードであり得る。無線リンクも実施することができる。任意のそのような実施形態では、ネットワークインターフェース６１８は、様々なタイプの情報を表すデジタルデータストリームを搬送する電気信号、電磁気信号、または光信号を送受信する。
【００５９】
コンピュータシステム６００は、ネットワーク、ネットワークリンク、およびネットワークインターフェース６１８を介して、メッセージを送信し、プログラムコードを含むデータを受信することができる。インターネットの例では、サーバは、インターネット、ＩＳＰ、ローカルネットワーク、およびネットワークインターフェース６１８を介してアプリケーションプログラムのために要求されたコードを送信することができる。
【００６０】
受信されたコードは、受信されたときにプロセッサ６０４によって実行され、および／または後で実行するために格納デバイス６１０または他の不揮発性格納デバイスに格納される。
【００６１】
前のセクションで説明したプロセス、方法、およびアルゴリズムはそれぞれ、１つまたは複数のコンピュータシステムまたはコンピュータハードウェアを備えるコンピュータプロセッサによって実行されるコードモジュールで実施し、完全にまたは部分的に自動化することができる。プロセスおよびアルゴリズムは、部分的または全体的に特定用途向け回路で実施することができる。
【００６２】
上述の様々な特徴およびプロセスは、互いに独立して使用することができる、または様々な方法で組み合わせることができる。全ての可能な組み合わせおよびサブコンビネーションは、本明細書の範囲内に入ることが意図されている。加えて、特定の方法またはプロセスのブロックがいくつかの実装形態では省略することができる。本明細書に記載される方法およびプロセスは、また、任意の特定の配列に限定されず、これに関連するブロックまたは状態が適切である他のシーケンスで実行することができる。例えば、説明されたブロックまたは状態は、具体的に開示されたもの以外の順序で実行されてもよく、または複数のブロックまたは状態は単一のブロックまたは状態に組み合わされてもよい。例示的なブロックまたは状態は、並列に、または他の何らかの方法で、シリアルに実行されてもよい。ブロックまたは状態は、追加または開示された例示的な実施形態から除去することがでる。本明細書に記載の例示的なシステムおよびコンポーネントは、記載とは異なって構成することがあり得る。例えば、開示された例示的な実施形態に要素を追加し、削除し、または再配置することができる。
【００６３】
本明細書に記載の例示的な方法の様々な動作は、アルゴリズムによって、少なくとも部分的に実行されることができる。アルゴリズムは、メモリに格納されたプログラムコードまたは命令（例えば、上述した非一時的コンピュータ可読記憶媒体）に含まれることができる。このようなアルゴリズムは、機械学習アルゴリズムを含むことができる。いくつかの実施形態では、機械学習アルゴリズムは、明示的に機能を実行するためにコンピュータをプログラムすることはできませんが、機能を実行し、予測モデルを作成するためにトレーニングデータから学ぶことができる。
【００６４】
本明細書に記載の例示的な方法の様々な動作は、少なくとも部分的に、一時的に（例えばソフトウェアによって）構成され、または関連する動作を実行するように恒久的に構成される１つまたは複数のプロセッサによって実行され得る。一時的または恒久的に構成されているかどうかにかかわらず、そのようなプロセッサは、本明細書に記載の１つまたは複数の動作または機能を実行するように動作するプロセッサ実装エンジンを構成することができる。
【００６５】
同様に、本明細書に記載の方法は、少なくとも部分的にプロセッサ実装されてもよく、特定の１つまたは複数のプロセッサはハードウェアの一例である。例えば、方法の動作のうちの少なくともいくつかは、１つまたは複数のプロセッサまたはプロセッサ実装エンジンによって実行され得る。さらに、１つまたは複数のプロセッサはまた、「クラウドコンピューティング」環境において、または「サービスとしてのソフトウェア」（ＳａａＳ）として、関連する動作の実行をサポートするように動作し得る。例えば、動作の少なくともいくつかは、（プロセッサを含む機械の例として）一群のコンピュータによって実行されることができる。これらの動作は、ネットワーク（例えばインターネット）を介しておよび１つ以上の適切なインタフェース（例えばアプリケーションプログラムインタフェース（ＡＰＩ））を介してアクセスすることができる。
【００６６】
特定の動作の性能は、単一の機械内に存在するだけでなく、多数の機械にわたって配置され、プロセッサ間で分散されることができる。いくつかの例示的な実施形態では、プロセッサまたはプロセッサ実装エンジンは、単一の地理的場所（たとえば、家庭環境、オフィス環境、またはサーバファーム内）に配置することができる。他の例示的な実施形態では、プロセッサまたはプロセッサ実装エンジンは、いくつかの地理的場所にわたって分散させることができる。
【００６７】
本明細書を通して、複数のインスタンスが、単一のインスタンスとして説明されているコンポーネント、動作、または構造を実装することがありえる。１つまたは複数の方法の個々の動作は別々の動作として図示および説明されているが、１つまたは複数の個々の動作は同時に実行されてもよく、動作が図示の順序で実行される必要はない。例示的な構成において別々の構成要素として提示された構造および機能は、組み合わされた構造または構成要素として実装され得る。同様に、単一の構成要素として提示された構造および機能は、別々の構成要素として実装され得る。これらおよび他の変形、修正、追加、および改良は、本明細書の主題の範囲内に含まれる。
【００６８】
特定の例示的な実施形態を参照して主題の概要を説明したが、本明細書のより広い範囲の実施形態から逸脱することなく、これらの実施形態に対して様々な修正および変更を加えることができる。主題のそのような実施形態は、単に便宜上、そして、１つより多くが、事実として、開示されている場合に、任意の単一の開示または概念に本出願の範囲を自発的に限定することを意図することなく、用語「発明」によって個々にまたは集合的に本明細書において参照される。詳細な説明は限定的な意味で解釈されるべきではなく、様々な実施形態の範囲は、添付の特許請求の範囲とそのような特許請求の範囲が権利を与える等価物の全範囲によってのみ定義される。
【図１Ａ】
0006856749.tif 000002
【図１Ｂ】
0006856749.tif 000003
【図２】
0006856749.tif 000004
【図３Ａ】
0006856749.tif 000005
【図３Ｂ】
0006856749.tif 000006
【図３Ｃ】
0006856749.tif 000007
【図４】
0006856749.tif 000008
【図５】
0006856749.tif 000009
【図６】
0006856749.tif 000010