(57)【要約】【課題】分散コンピューティングシステムの信頼性を向上させる。【解決手段】分散コンピューティングシステムに参加する参加ノード毎に、参加ノードの信頼度が関連付けられている。参加ノードは、対象ノード（いずれかの参加ノード）の信頼度を、その対象ノードによるタスク実行の結果が正しいか否かと、その結果に対応したタスクの重要度とに基づいて更新する。要求を受けた参加ノードは、その要求の処理において、その要求に従う処理対象のタスクの実行の依頼先とする参加ノードを参加ノード毎の信頼度に基づいて選択し、選択ノード（選択した参加ノード）に承認要求を送信する。【選択図】図１１
2018109878.tif 000002
【特許請求の範囲】
【請求項１】
分散コンピューティングシステムに参加している計算機に、
（Ａ）要求を受ける都度に、下記の（ａ１）乃至（ａ４）を含んだ処理である要求処理、
（ａ１）前記分散コンピューティングシステムに参加しており前記計算機を含む計算機である参加ノードにそれぞれ関連付けられている信頼度に基づいて、処理対象のタスクの実行の依頼先とする１以上の参加ノードを選択すること、
（ａ２）前記選択した１以上の参加ノードの各々に、前記処理対象のタスクの実行の依頼である承認要求を送信すること、
（ａ３）前記１以上の参加ノードの各々から、その参加ノードに送信した承認要求に対する応答であり、その参加ノードにより実行された前記処理対象のタスクのタスク実行結果を含んだ応答である承認応答を受け付けること、
（ａ４）正しいタスク実行結果の数に基づく、前記要求に対する応答を返すこと、
を実行させ、
（Ｂ）前記要求処理と前記要求処理とは非同期の処理との少なくとも１つにおいて、下記の処理である信頼度更新処理、
正しいタスク実行結果を含んだ応答を送信した参加ノードに関連付けられている信頼度を、そのタスク実行結果に対応したタスクに関連付けられている重要度を基に相対的に上げること、
を実行させるコンピュータプログラム。
【請求項２】
前記信頼度更新処理は、下記の（ｂ１）および（ｂ２）を含む、
（ｂ１）前記要求処理において、前記１以上の参加ノードの各々について、その参加ノードから正しいタスク実行結果を含んだ応答を受けた場合、その参加ノードに関連付けられている未処理信頼度を相対的に上げること、
各参加ノードについて、関連付けられている未処理信頼度は、その未処理信頼度が初期値に戻されて以降に返した一致するタスク実行結果の数に従う値であり、
（ｂ２）前記要求処理とは非同期の処理において、少なくとも１つの未処理信頼度を、その未処理信頼度が関連付けられている参加ノードに関連付けられている信頼度に反映すること、
請求項１記載のコンピュータプログラム。
【請求項３】
前記非同期の処理は、指定された参加者に対してその参加者の参加ノードに関連付けられている未処理信頼度の集計値に基づく報酬を支払う処理である決済処理であり、
前記少なくとも１つの未処理信頼度は、前記集計値であり、
（ｂ２）の反映は、前記集計値を、前記指定された参加者の参加ノードに関連付けられている信頼度に反映することである、
請求項２記載のコンピュータプログラム。
【請求項４】
（Ｃ）前記要求処理とは非同期に、下記の（ｃ１）および（ｃ２）を含んだ処理である監視処理、
（ｃ１）前記処理対象のタスクを含む複数のタスクの各々について、そのタスクを実行するために必要な計算資源および計算時間のうちの少なくとも１つを監視すること
（ｃ２）前記複数のタスクの各々について、そのタスクに関連付けられている重要度を、（ｃ１）の監視結果に基づいて更新すること、
をさらに前記計算機に実行させ、
前記複数のタスクの各々について、そのタスクに関連付けられている重要度は、そのタスクを実行するために必要な計算資源および計算時間の少なくとも１つについての相対的な値に基づいている、
請求項１乃至３のうちのいずれか１項に記載のコンピュータプログラム。
【請求項５】
前記複数のタスクの各々について、そのタスクに関連付けられている重要度には、さらに、そのタスクに従う処理の重要性または機密性が反映されている、
請求項４記載のコンピュータプログラム。
【請求項６】
（ａ１）の選択は、前記分散コンピューティングシステムの参加ノードにそれぞれ関連付けられている信頼度に加えて、承認要求の送信先となる参加ノードの数である定足数と、参加ノードの所有者と、参加ノードの負荷と、タスクの重要度と、参加ノードの通信遅延とのうちの少なくとも１つを規定したポリシーに基づく選択である、
請求項１乃至５のうちのいずれか１項に記載のコンピュータプログラム。
【請求項７】
（Ｄ）処理対象のタスクの実行の依頼である承認要求を受信した場合、下記の（ｄ１）ないし（ｄ３）を含んだ承認処理、
（ｄ１）その承認要求の送信元の参加ノードに関連付けられている信頼度が閾値以上か否かを判断すること、
（ｄ２）（ｄ１）の判断結果が真の場合、その承認要求に従いタスクを実行しそのタスクの実行結果を含んだ応答を返すこと、
（ｄ３）（ｄ１）の判断結果が偽の場合、その承認要求に従う処理を実行しないこと、
をさらに前記計算機に実行させる請求項１乃至６のうちのいずれか１項に記載のコンピュータプログラム。
【請求項８】
（ｄ３）は、処理の失敗を表す情報を含んだ応答を返すことである、
請求項７記載のコンピュータプログラム。
【請求項９】
前記要求処理とは非同期の処理として、指定された参加者に対してその参加者の参加ノードに関連付けられている信頼度に基づく報酬を支払う処理である決済処理、
をさらに前記計算機に実行させる請求項１乃至８のうちのいずれか１項に記載のコンピュータプログラム。
【請求項１０】
前記タスクは、スマートコントラクトである、
請求項１乃至９のうちのいずれか１項に記載のコンピュータプログラム。
【請求項１１】
前記計算機以外の参加ノードが管理している、参加ノード毎の信頼度を基に、前記計算機が管理している、参加ノード毎の信頼度を更新することである信頼度更新処理、
をさらに前記計算機に実行させる請求項１乃至１０のうちのいずれか１項に記載のコンピュータプログラム。
【請求項１２】
複数の計算機である複数の参加ノードを有し、
前記複数の参加ノードの各々が、
（Ａ）要求を受ける都度に、下記の（ａ１）乃至（ａ４）を含んだ処理である要求処理、
（ａ１）前記分散コンピューティングシステムに参加しており前記計算機を含む計算機である参加ノードにそれぞれ関連付けられている信頼度に基づいて、処理対象のタスクの実行の依頼先とする１以上の参加ノードを選択すること、
（ａ２）前記選択した１以上の参加ノードの各々に、前記処理対象のタスクの実行の依頼である承認要求を送信すること、
（ａ３）前記１以上の参加ノードの各々から、その参加ノードに送信した承認要求に対する応答であり、その参加ノードにより実行された前記処理対象のタスクのタスク実行結果を含んだ応答である承認応答を受け付けること、
（ａ４）正しいタスク実行結果の数に基づく、前記要求に対する応答を返すこと、
を実行し、
（Ｂ）前記要求処理と前記要求処理とは非同期の処理との少なくとも１つにおいて、下記の処理である信頼度更新処理、
正しいタスク実行結果を含んだ応答を送信した参加ノードに関連付けられている信頼度を、そのタスク実行結果に対応したタスクに関連付けられている重要度を基に相対的に上げること、
を実行する、
分散コンピューティングシステム。
【請求項１３】
分散コンピューティングシステムに参加している計算機により、
（Ａ）要求を受ける都度に、下記の（ａ１）乃至（ａ４）を含んだ処理である要求処理、
（ａ１）前記分散コンピューティングシステムに参加しており前記計算機を含む計算機である参加ノードにそれぞれ関連付けられている信頼度に基づいて、処理対象のタスクの実行の依頼先とする１以上の参加ノードを選択すること、
（ａ２）前記選択した１以上の参加ノードの各々に、前記処理対象のタスクの実行の依頼である承認要求を送信すること、
（ａ３）前記１以上の参加ノードの各々から、その参加ノードに送信した承認要求に対する応答であり、その参加ノードにより実行された前記処理対象のタスクのタスク実行結果を含んだ応答である承認応答を受け付けること、
（ａ４）正しいタスク実行結果の数に基づく、前記要求に対する応答を返すこと、
を実行し、
（Ｂ）前記要求処理と前記要求処理とは非同期の処理との少なくとも１つにおいて、下記の処理である信頼度更新処理、
正しいタスク実行結果を含んだ応答を送信した参加ノードに関連付けられている信頼度を、そのタスク実行結果に対応したタスクに関連付けられている重要度を基に相対的に上げること、
を実行する、
分散コンピューティング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、分散コンピューティングに関する。
【背景技術】
【０００２】
分散コンピューティングシステムでは、一般に、計算タスク（以下、タスク）の割当てが行われる。分散コンピューティングシステムにおけるタスク割当て方法として、特許文献１がある。特許文献1によれば、計算資源（ＣＰＵ、メモリ、ネットワーク）の利用状況のモニタリング結果に基づいてタスクが割り当てられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】US2009/0276519
【発明の概要】
【発明が解決しようとする課題】
【０００４】
以下の説明では、分散コンピューティングシステムの要素としての計算機を「参加ノード」と言う。プロセッサやメモリや通信インターフェースデバイスといった計算資源を有するいずれの計算機も参加ノードになることができてよい。
【０００５】
また、以下の説明では、参加ノードの所有者（または使用者）を「参加者」と言うことがある。
【０００６】
不特定の計算機が参加ノードとなり得る分散コンピューティングシステム（以下、便宜上、「参加型分散システム」と言う）が知られている。参加型分散システムの典型例としては、ブロックチェーンが適用されたシステムのような非中央集権型の分散コンピューティングシステムがある。
【０００７】
参加ノードは不特定の計算機であるため、タスクの割当先の参加ノードによって、計算ミスが生じてしまう、或いは、悪意ある参加者に従う意図的な不正が行われてしまう、といったような懸念が考えられる。
【０００８】
しかしながら、特許文献１に記載の技術によれば、いずれのサーバも信頼できるサーバであることが前提となっており、計算資源の利用状況のモニタリング結果に基づいてタスクが割り当てられるにすぎないため、参加型分散システムについての上述の懸念を軽減することができない。
【０００９】
上述の懸念は、参加ノードの信頼度がわかれば、軽減できると考えられる。しかし、参加ノードの信頼度を適切に決定し、且つ、その信頼度の信憑性を担保する技術的手段は知られていない。特定の計算機が管理計算機として参加ノードを管理し信頼度を決定する方法が考えられるが、その方法は、少なくとも非中央集権型の分散コンピューティングシステムのように管理計算機が存在しないことのあるシステムには適用できない。また、人為的に参加ノードの信頼度を決定する方法も考えられるが、その方法では、人間の主観に依存することがあり参加ノードの信頼度の信憑性を担保することは難しい。
【課題を解決するための手段】
【００１０】
分散コンピューティングシステムに参加している計算機が、
（Ａ）要求を受ける都度に、下記の（ａ１）乃至（ａ４）を含んだ処理である要求処理、
（ａ１）分散コンピューティングシステムに参加しており当該計算機を含む計算機である参加ノードにそれぞれ関連付けられている信頼度に基づいて、処理対象のタスクの実行の依頼先とする１以上の参加ノードを選択すること、
（ａ２）選択した１以上の参加ノードの各々に、処理対象のタスクの実行の依頼である承認要求を送信すること、
（ａ３）１以上の参加ノードの各々から、その参加ノードに送信した承認要求に対する応答であり、その参加ノードにより実行された前記処理対象のタスクのタスク実行結果を含んだ応答である承認応答を受け付けること、
（ａ４）一致したタスク実行結果の数に基づく、上記受けた要求に対する応答を返すこと、
を実行し、
（Ｂ）要求処理と要求処理とは非同期の処理との少なくとも１つにおいて、下記の処理である信頼度更新処理、
一致したタスク実行結果を含んだ応答を送信した参加ノードに関連付けられている信頼度を、そのタスク実行結果に対応したタスクに関連付けられている重要度を基に相対的に上げること、
を実行する。
【発明の効果】
【００１１】
本発明によれば、不特定の計算機が参加ノードになり得る分散コンピューティングシステムにおいて、計算結果の信頼性を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】実施例１に係る分散コンピューティングシステムの構成を示すブロック図である。
【図２】実施例１に係るブロックチェーンプログラムの内部構成を示すブロック図である。
【図３】実施例１に係るサーバ管理テーブルの構成を示す図である。
【図４】実施例１に係るスマートコントラクト管理テーブルの構成を示す図である。
【図５】実施例１に係るトランザクション処理の一例を示すフローチャートである。
【図６】実施例１に係るトランザクション承認処理の一例を示すフローチャートである。
【図７】実施例１に係る信頼度更新処理の一例を示すフローチャートである。
【図８】実施例２に係るブロックチェーンプログラムの内部構成を示すブロック図である。
【図９】実施例２に係るサーバ管理テーブルの構成を示す図である。
【図１０】実施例２に係る決済処理の一例を示すフローチャートである。
【図１１】実施例１の概要を示す模式図である。
【発明を実施するための形態】
【００１３】
以下、幾つかの実施例を説明する。
【００１４】
以下の説明では、「ａｂｃテーブル」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「ａｂｃテーブル」のうちの少なくとも１つを「ａｂｃ情報」と呼ぶことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部または一部が１つのテーブルであってもよい。
【００１５】
また、以下の説明では、「インターフェース部」は、１以上のインターフェースを含む。１以上のインターフェースは、１以上の同種のインターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１６】
また、以下の説明では、「記憶部」は、１以上のメモリを含む。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。記憶部は、主に、プロセッサ部による処理の際に使用される。
【００１７】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサである。１以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１８】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶部（例えばメモリ）および／またはインターフェース部等を用いながら行うため、処理の主語がプロセッサ部とされてもよい。プログラムを主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。また、プロセッサ部は、処理の一部または全部を行うハードウエア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１９】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号を使用し、同種の要素を区別して説明する場合は、要素の識別情報としての名前を使用することがある。
【実施例１】
【００２０】
図１１は、実施例１の概要を示す。
【００２１】
分散コンピューティングシステムに参加するサーバ１２０（参加ノードの一例）が、ブロックチェーンプログラム２００を実行する。ブロックチェーンプログラム２００は、サーバ１２０毎の信頼度と、スマートコントラクト２１０（タスクの一例）毎の重要度とを管理する。ブロックチェーンプログラム２００は、対象サーバ１２０（いずれかのサーバ１２０）の信頼度を、その対象サーバ１２０によるスマートコントラクト実行の結果が正しいか否かと、その結果に対応したスマートコントラクト２１０に関連付けられている重要度とに基づいて更新するようになっている。要求を受けたサーバ１２０のブロックチェーンプログラム２００は、その要求の処理において、処理対象のスマートコントラクト２１０の実行の依頼先とするサーバ１２０を、サーバ１２０毎の信頼度に基づいて選択する。さらに、ブロックチェーンプログラム２００は、他サーバ１２０（当該ブロックチェーンプログラム２００を実行するサーバ１２０とは別のサーバ１２０）が管理する信頼度（サーバ１２０毎の信頼度）を取得し、それに基づいて自サーバ１２０（当該ブロックチェーンプログラム２００を実行するサーバ１２０）が管理する信頼度（サーバ１２０毎の信頼度）を更新する。
【００２２】
具体的は、例えば以下の通りである。
【００２３】
各サーバ１２０において、ブロックチェーンプログラム２００は、サーバ１２０毎の信頼度を表す情報を含んだサーバ管理テーブル３００と、スマートコントラクト２１０毎の重要度を表す情報を含んだスマートコントラクト管理テーブル４００と、スマートコントラクトＡ１およびＡ２とを管理する。
【００２４】
第１のサーバ１２０（いずれかのサーバ１２０）が、クライアント１００から、スマートコントラクトＡ１（処理対象のスマートコントラクト２１０の一例）を指定したトランザクション要求を受信する。
【００２５】
第１のサーバ１２０のブロックチェーンプログラム２００は、その要求に従いスマートコントラクトＡ１を実行する。
【００２６】
また、第１のサーバ１２０のブロックチェーンプログラム２００は、そのプログラム２００が管理するサーバ管理テーブル３００を参照して、信頼度の高い順にサーバ１２０を一定数選択し、選択サーバ１２０（選択したサーバ１２０）に、スマートコントラクトＡ１を指定したトランザクション承認要求を送信する。選択サーバ１２０の一例が、第２のサーバ１２０である。トランザクション承認要求を受信した第２のサーバ１２０のブロックチェーンプログラム２００は、その要求に従いスマートコントラクトＡ１を実行し、実行結果を表す情報を含んだ応答を、第１のノードに返す。
【００２７】
第１のサーバ１２０のブロックチェーンプログラム２００は、全ての選択サーバ１２０からの応答に含まれているスマートコントラクト実行結果を基に、正しいスマートコントラクト実行結果（例えば最も多く一致したスマートコントラクト実行結果）を選択する。
【００２８】
第１のサーバ１２０のブロックチェーンプログラム２００は、最終結果として採用されたスマートコントラクト実行結果を応答したサーバ１２０の信頼度を、スマートコントラクトＡ１の重要度に応じて相対的に上げる。
【００２９】
各サーバ１２０のブロックチェーンプログラム２００は、定期的に、サーバ管理テーブル３００を相互交換し、他サーバ１２０のサーバ管理テーブル３００を自サーバ１２０のサーバ管理テーブル３００に反映する（例えば、信頼度を合算する）。
【００３０】
以下、図面を用いて本実施例を詳細に説明する。
【００３１】
図１は、実施例１に係る分散コンピューティングシステムの構成を示すブロック図である。
【００３２】
分散コンピューティングシステムは、ネットワーク１１０を介して１以上のクライアント１００と接続された１以上のサーバ１２０を備える。なお、１以上のサーバ１２０の各々は、１の主体によって所有されることもあれば、複数の主体によって所有されることもある。
【００３３】
クライアント１００は、１以上のサーバ１２０が提供する分散コンピューティングサービスを利用するために使用する計算機である。クライアント１００では、分散コンピューティングサービスを利用するためのクライアントプログラムが動作する。クライアントプログラムをサーバ１２０で動作させることで、サーバ１２０がクライアント１００を兼用してもよい。
【００３４】
ネットワーク１１０は、クライアント１００とサーバ１２０とを相互に接続するネットワークである。ネットワーク１１０は、例えば、ＬＡＮ（Local Area Network）やＷＡＮ（Wide Area Network）である。
【００３５】
サーバ１２０は、クライアント１００に対して分散コンピューティングサービスを提供する計算機である。サーバ１２０は、メモリ１６０に格納されたプログラムを実行するＣＰＵ １３０と、クライアント１００との通信に使用するネットワークインタフェース１４０と、ディスクドライブ１７０と、ディスクドライブ１７０への入出力を制御するディスクコントローラ１５０と、プログラムやデータを格納するメモリ１６０と、を搭載し、それらを内部的な通信路（例えば、バス）によって接続している計算機である。ネットワークインタフェース１４０が、インターフェース部の一例である。メモリ１６０および１７０のうちの少なくともメモリ１６０が記憶部の一例である。ＣＰＵ１３０およびディスクコントローラ１５０のうちの少なくともＣＰＵ１３０がプロセッサ部の一例である。
【００３６】
サーバ１２０のメモリ１６０には、プログラムやデータが格納される。例えば、プログラムは、ブロックチェーンプログラム２００である。本実施例は、分散コンピューティングサービスを提供する主体が、例としてブロックチェーンプログラム２００であることを前提に説明する。以降、ブロックチェーンプログラム２００による分散コンピューティングサービスをブロックチェーンサービス、それを提供する分散コンピューティングシステムをブロックチェーンシステムと呼ぶことがある。
【００３７】
ブロックチェーンプログラム２００は、クライアント１００に対して、他のサーバ１２０におけるブロックチェーンプログラム２００と協調してスマートコントラクトをサービスし、クライアント１００から受信したトランザクション要求に基づいてスマートコントラクトを実行する。
【００３８】
ディスクコントローラ１５０は、メモリ１６０に格納された各種プログラムの入出力要求に基づいて、ディスクドライブ１７０のデータを例えばブロック単位で入出力する。
【００３９】
ディスクドライブ１７０は、メモリ１６０に格納された各種プログラムが読み書きするデータを格納するための記憶デバイスである。本実施例において、ディスクドライブ１７０には、ブロックチェーンデータ１８０が格納される。
【００４０】
図２は、ブロックチェーンプログラム２００の内部構成を示すブロック図である。
【００４１】
ブロックチェーンプログラム２００は、１以上のスマートコントラクト２１０と、合意形成モジュール２２０と、信頼度管理モジュール２３０と、監視モジュール２４０とを備える。また、ブロックチェーンプログラム２００は、サーバ管理テーブル３００と、スマートコントラクト管理テーブル４００とを管理する。
【００４２】
スマートコントラクト２１０は、サーバ１２０のＣＰＵ１３０によって実行されるプログラムである。スマートコントラクト２１０は、例えば、仮想通貨や証券といった金融資産の取引を処理するためのプログラムである。ブロックチェーンプログラム２００には、複数の主体によって、複数種類のスマートコントラクトが配置され得る。トランザクションとスマートコントラクト２１０は、１：１、１：Ｎ（Ｎは２以上の整数）、Ｍ：１（Ｍは２以上の整数）、またはＭ：Ｎで対応してよい。スマートコントラクト２１０が、タスクの一例である。
【００４３】
合意形成モジュール２２０は、クライアント１００からのトランザクション要求を契機として、サーバ１２０のＣＰＵ１３０によって実行される。合意形成モジュール２２０は、トランザクション要求を受信し、当該トランザクション要求の内容に基づいて、当該要求に対応するスマートコントラクト２１０を実行する。さらに、合意形成モジュール２２０は、他のサーバ１２０の合意形成モジュール２２０に対してトランザクション承認要求を送信し、他のサーバ１２０とトランザクション処理結果が正しいことを合意および確定した上で、クライアント１００にトランザクション処理結果を応答する。複数のサーバ１２０で、同じトランザクション処理を実行するのは、不特定多数が参加するブロックチェーンシステムにおいて、悪意ある参加者が不正な結果を応答したり、ハードウェアのエラー等により不正なデータを応答したりする可能性があるためである。
【００４４】
信頼度更新モジュール２３０は、参加者からの指示や、あらかじめ定められたスケジュールに基づいて、サーバ１２０のＣＰＵ１３０によって実行される。信頼度更新モジュール２３０は、ブロックチェーンシステムを構成する他のサーバ１２０にからサーバ管理テーブル３００を取得し、当該サーバ管理テーブル３００に基づいて自身のサーバ管理テーブル３００の信頼度を更新する。
【００４５】
サーバ管理テーブル３００は、トランザクション処理結果に関して合意形成するにあたって、承認処理を依頼する対象のサーバを選択するための判断基準として使用する信頼度やサーバ１２０の性能などを管理するテーブルである。サーバ管理テーブル３００は、合意形成モジュール２２０や、信頼度更新モジュール２３０によって使用される。
【００４６】
スマートコントラクト管理テーブル４００は、ブロックチェーンプログラム２００に配置されたスマートコントラクト２１０の重要度や合意形成ポリシーを管理するテーブルである。スマートコントラクト管理テーブル４００は、合意形成モジュール２２０によって使用される。
【００４７】
監視モジュール２４０は、あらかじめ定められたスケジュールに基づいて、サーバ１２０のＣＰＵ１３０によって定期的に実行される。監視モジュール２４０は、ブロックチェーンシステムに参加する各サーバ１２０の性能を取得し、それに基づいてサーバ管理テーブル３００における情報（後述の負荷３４０および遅延３５０）を更新する。また、監視モジュール２４０は、監視モジュール２４０は、複数のスマートコントラクトの各々について、そのスマートコントラクト実行状況に関する統計情報（例えば、スマートコントラクトの実行に必要な計算資源および計算時間の少なくとも１つを表す情報）を取得し、それに基づいてスマートコントラクト管理テーブル４００における情報（後述の重要度４３０）を更新する。
【００４８】
図３は、サーバ管理テーブル３００の構成例を示す図である。
【００４９】
サーバ管理テーブル３００は、サーバ１２０毎にエントリ（レコード）を有し、各エントリが、サーバＩＤ３１０、所有者ＩＤ３２０、信頼度３３０、負荷３４０および遅延３５０といった情報を保持する。
【００５０】
サーバＩＤ３１０は、サーバの識別情報である。所有者ＩＤ３２０は、サーバ１２０を所有する主体の識別情報である。信頼度３３０は、サーバ１２０の信頼度を表す値である。値が高い程、信頼度は高い。負荷３４０は、サーバ１２０の負荷を表す。遅延３５０は、自サーバ１２０と他のサーバ１２０との通信における遅延を表す。
【００５１】
所有者ＩＤ３２０、信頼度３３０、負荷３４０および遅延３５０は、合意形成モジュール２２０によって、トランザクション承認処理を依頼するサーバ１２０を選択するために使用される。
【００５２】
信頼度３３０は、後述するスマートコントラクトの重要度４３０と、当該サーバ１２０がトランザクション承認処理において正しい結果を応答したかどうかが反映される。すなわち、信頼度３３０は、悪意ある参加者による人為的な不正、ハードウェアやソフトウェアの非人為的なエラーに関わらず、他のサーバ１２０の挙動の正しさが反映される。
【００５３】
図４は、スマートコントラクト管理テーブル４００の構成例を示す図である。
【００５４】
スマートコントラクト管理テーブル４００は、スマートコントラクト２１０毎に、スマートコントラクトＩＤ４１０、所有者ＩＤ４２０、重要度４３０および合意形成ポリシー４４０といった情報を保持する。
【００５５】
スマートコントラクトＩＤ４１０は、スマートコントラクト２１０の識別情報である。所有者ＩＤ４２０は、スマートコントラクト２１０を所有する主体の識別情報である。重要度４３０は、スマートコントラクト２１０の重要度を表す値である。値が高い程、重要度が高い。合意形成ポリシー４４０は、トランザクション承認処理を依頼するサーバ１２０を選択するポリシーを表す。
【００５６】
所有者ＩＤ４２０は、合意形成モジュール２２０の処理における信頼度３３０の決定や、トランザクション承認処理を依頼するサーバ１２０を選択するために使用される。図４に例示するように、スマートコントラクト２１０は複数の主体により所有されてもよい。
【００５７】
重要度４３０は、上述したように、スマートコントラクト２１０の重要度を表す値であり、例えば、当該スマートコントラクト２１０を実行するために必要な計算資源および計算時間の少なくとも１つについての相対的な値（各他のスマートコントラクト２１０についての計算資源および計算時間の少なくとも１つとの比較結果に基づく値）に基づく。その場合、監視モジュール２４０が、各スマートコントラクト２１０の実行に必要な計算資源や計算時間を監視し、その監視結果に基づいて、当該スマートコントラクト２１０の重要度４３０を決定（更新）してよい。重要度４３０は、このように自動的に付与（更新）されることに代えてまたは加えて、当該スマートコントラクト２１０の取引の重要性や機密性が反映されてもよい（例えば、重要度４３０としての値は、当該スマートコントラクト２１０を所有する主体が任意に決めた値それ自体または当該値が考慮された値でもよい）。
【００５８】
合意形成ポリシー４４０は、例えば、トランザクション承認処理を依頼するサーバ１２０の数である「定足数」、全員一致や過半数などどのように合意形成するかの「種別」、サーバ１２０を選択する際に優先する「項目」で構成される。なお、サーバ１２０を選択する際に優先する項目の数は複数あってもよい。また、優先する項目の指定がない場合は、例えば信頼度など、いずれかの項目をデフォルトで優先させてもよい。「項目」としては、サーバ１２０の所有者ＩＤと、サーバ１２０の負荷と、スマートコントラクト２１０の重要度４３０と、サーバ１２０の遅延（通信遅延）とのうちの少なくとも１つを採用できる。
【００５９】
図５は、トランザクション処理の一例を示すフローチャートである。トランザクション処理は、クライアント１００（クライアントプログラム）からのトランザクション要求を契機に実行される。なお、図５の説明における合意形成モジュール２２０は、いずれのサーバ１２０の合意形成モジュール２２０でもよい。
【００６０】
まず、合意形成モジュール２２０は、クライアント１００からトランザクション要求を受信する（Ｓ５１０）。トランザクション要求は、対象とするスマートコントラクトのスマートコントラクトＩＤ、および、スマートコントラクト実行時に指定するパラメータを含む。
【００６１】
次に、合意形成モジュール２２０は、トランザクション要求に含まれるスマートコントラクトＩＤに対応するスマートコントラクト２１０を実行する（Ｓ５２０）。ここで、合意形成モジュール２２０は、スマートコントラクト２１０の実行結果、すなわち、戻り値やブロックチェーンデータ１８０に反映するデータは、後述する処理で使用するためメモリ１６０に退避しておく。
【００６２】
次に、合意形成モジュール２２０は、サーバ管理テーブル３００と、スマートコントラクト管理テーブル４００とを参照し、トランザクション承認処理の依頼先とするサーバ１２０を選択する（Ｓ５３０）。具体的には、まず、合意形成モジュール２２０は、処理対象のスマートコントラクト２１０のＩＤ４１０に対応する合意形成ポリシー４４０を参照し、定足数と優先する項目を取得する。次に、合意形成モジュール２２０は、サーバ管理テーブル３００を参照し、優先する項目に基づいて、定足数の数だけサーバ１２０を選択する。
【００６３】
例えば、処理対象のスマートコントラクト２１０がスマートコントラクトＡ１の場合、スマートコントラクトＡ１の合意形成ポリシー４４０によれば、定足数が“４”で、信頼度３３０が最も優先され、次に遅延３５０が優先される。このため、合意形成モジュール２２０は、信頼度３３０が高い順にサーバ１２０を選択する。ここで選択されたサーバ１２０は、信頼度３３０が最も高いサーバ“４００１”と、信頼度３３０が２番目に高いサーバ“２００２”およびサーバ“２００３”である。次に、合意形成モジュール２２０は、信頼度３３０が同一（３番目）のサーバの中から、遅延３５０の最も小さいサーバ“２００１”を選択する。結果として、定足数“４”のサーバ１２０が選択される。なお、合意形成モジュール２２０は、比較的優先度の高い項目に従いサーバを選択し、その選択されたサーバから、比較的優先度の低い項目に従いサーバを除外することで、定足数に一致する数のサーバを選択してもよい。
【００６４】
また、例えば、処理対象のスマートコントラクト２１０がスマートコントラクトＡ２の場合、スマートコントラクトＡ２の合意形成ポリシーによれば、定足数が“４”で、所有者ＩＤ３２０が最も優先され、信頼度３３０が次に優先される。このため、合意形成モジュール２２０は、スマートコントラクトＡ２の所有者Ｂが所有するサーバ“２００１”、“２００２”および“２００３”を選択する。次に、合意形成モジュール２２０は、所有者Ｂ以外のサーバのうち、信頼度３３０が最も高いサーバ“４００１”を選択する。
【００６５】
また、例えば、処理対象のスマートコントラクト２１０がスマートコントラクトＢ１の場合、スマートコントラクトＢ１の合意形成ポリシーによれば、優先する項目が負荷３４０である。このため、合意形成モジュール２２０は、負荷３４０の低い順にサーバ１２０を選択する。負荷３４０を考慮してサーバ１２０を選択する場合、合意形成モジュール２２０は、当該スマートコントラクトＢ１の重要度４３０も併せて考慮してもよい。重要度４３０は、各スマートコントラクト実行に必要な計算資源や計算時間が反映された値である。合意形成モジュール２２０は、監視モジュール２４０から報告される各スマートコントラクト実行状況が反映された重要度４３０をも考慮してサーバ１２０を選択することで、トランザクション承認処理を依頼したサーバ１２０が過負荷になって処理が遅延することを防ぐことができる。
【００６６】
Ｓ５３０の後、合意形成モジュール２２０は、Ｓ５３０で選択したサーバ（以下、図５及び図６の説明において「選択サーバ」と言う）１２０に対して、トランザクション承認要求を送信する（Ｓ５４０）。トランザクション承認処理の詳細については後述する。
【００６７】
選択サーバ１２０がトランザクション承認応答を返すと、合意形成モジュール２２０は、当該トランザクション承認応答を受信する（Ｓ５５０）。
【００６８】
トランザクション承認応答を受信した合意形成モジュール２２０は、Ｓ５２０で退避したスマートコントラクト実行結果と、トランザクション承認応答に含まれるスマートコントラクト実行結果とを突き合わせて採決し、その結果が、処理対象のスマートコントラクト２１０に対応した合意形成ポリシー４４０における「種別」に合致するか否かを判断する（Ｓ５６０）。例えば、合意形成ポリシー４４０において、「種別」は、“過半数”（定足数のサーバの過半数）や“全員一致”（定足数のサーバの全て）といった条件である。当該条件は、スマートコントラクトの分散処理結果（全ての選択サーバ１２０に対して依頼したトランザクション承認処理の結果（スマートコントラクトの実行結果））が正しいとみなすための条件（基準）である。当該条件は、具体的には、例えば、スマートコントラクトの実行結果が一致したサーバ１２０の数（一致したスマートコントラクト実行結果の数）の条件に相当する。例えば、「種別」が“過半数”の場合、過半数の一致したスマートコントラクト実行結果が、正しいスマートコントラクト実行結果である。
【００６９】
Ｓ５６０の判断結果が真の場合（Ｓ５６０：ＹＥＳ）、合意形成モジュール２２０は、サーバ管理テーブル３００を更新する（Ｓ５７０）。具体的には、合意形成モジュール２２０は、Ｓ５６０において採択されたスマートコントラクト実行結果（一致したスマートコントラクト実行結果）を返したサーバ１２０に対応した信頼度３３０を、スマートコントラクト２１０の重要度４３０に基づいて相対的に上げる。「信頼度３３０を相対的に上げる」とは、例えば、処理対象のスマートコントラクト２１０の重要度４３０の値を、採択されたスマートコントラクト実行結果を返したサーバ１２０に対応した信頼度３３０に加算することであってもよいし、それに代えて又は加えて、処理対象のスマートコントラクト２１０の重要度４３０の値を、採択されたスマートコントラクト実行結果と異なるスマートコントラクト実行結果を返したサーバ１２０に対応した信頼度３３０から減算することであってもよい。なお、当該合意形成モジュール２２０を実行するサーバ１２０、または、処理対象のスマートコントラクト２１０を所有する主体と同じ主体によって所有されるサーバ１２０が、常に信頼される場合は、当該サーバ１２０の信頼度３３０は加算対象外としてもよいし、あるいは、常に加算対象とされてもよい。また、スマートコントラクトＡ２のように、複数の主体によって所有されるスマートコントラクトが、処理対象のスマートコントラクトの場合、いずれのサーバ１２０の信頼度３３０も加算対象外とされてもよい。さらに、サーバ管理テーブル３００の更新処理に対応したスマートコントラクト２１０が用意されていて、その更新処理用のスマートコントラクト２１０の実行結果として、２以上のサーバ１２０と合意を形成したうえで、サーバ管理テーブル３００の更新処理が行われてもよい。
【００７０】
以上のように、一致したスマートコントラクト実行結果を出したサーバ１２０の信頼度３３０は、当該スマートコントラクト２１０の重要度４３０の値に応じて更新されるため、信頼度３３０の信憑性を高めることができる。
【００７１】
Ｓ５６０の判断結果が偽の場合（Ｓ５６０：ＮＯ）、合意形成モジュール２２０は、再度、トランザクション承認処理の依頼先とするサーバを選択する（Ｓ５３０）。このとき、合意形成モジュール２２０は、Ｓ５６０において異なるスマートコントラクト実行結果を応答したサーバ１２０を依頼先のサーバ１２０の候補から除外してもよい。
【００７２】
サーバ管理テーブル３００を更新後、合意形成モジュール２２０は、トランザクション確定処理を実行する（Ｓ５８０）。具体的には、合意形成モジュール２２０が、各選択サーバ１２０に当該トランザクションの確定を通知し、通知を受けた各選択サーバ１２０が、当該選択サーバ１２０のメモリ１６０に退避していたスマートコントラクト実行結果を、当該サーバ１２０におけるブロックチェーンデータ１８０に反映する。なお、合意形成モジュール２２０は、Ｓ５６０において採択されなかったスマートコントラクト実行結果（誤ったスマートコントラクト実行結果）を返したサーバ１２０に対しては、Ｓ５６０において採択されたスマートコントラクト実行結果を送信し、当該サーバ１２０は、当該スマートコントラクト実行結果をブロックチェーンデータ１８０に反映する。
【００７３】
そして、合意形成モジュール２２０は、上述のトランザクション要求の送信元であるクライアント１００に、トランザクション応答を送信する（Ｓ５９０）。トランザクション応答には、スマートコントラクト実行結果が含まれる。
【００７４】
図６は、トランザクション承認処理の一例を示すフローチャートである。トランザクション承認処理は、サーバ１２０からのトランザクション承認要求を契機に実行される。以下、図５における合意形成モジュール２２０を実行するサーバ１２０からトランザクション承認要求を受けた１つの選択サーバ１２０を例に取り、図６の処理を説明する。すなわち、図６における合意形成モジュール２２０は、その選択サーバ１２０で実行される合意形成モジュール２２０である。従って、いずれのサーバ１２０における合意形成モジュール２２０も、図５及び図６の処理を実行することができる。また、本実施例において、いずれのブロックチェーンプログラム２００も、当該プログラム２００を実行するサーバ１２０内の情報にアクセスし他サーバ１２０内の情報には直接アクセスしないものとする。なお、トランザクション承認要求に従いスマートコントラクト２１０を実行することを「追認」と呼ぶことができ、そのトランザクション承認要求を受けたサーバ１２０の所有者（参加者）を「追認者」と呼ぶことができる。
【００７５】
まず、合意形成モジュール２２０は、サーバ１２０からトランザクション承認要求を受信する（Ｓ５１０）。トランザクション承認要求は、処理対象のスマートコントラクトのスマートコントラクトＩＤと、当該スマートコントラクトの実行時に指定するパラメータとを含む。
【００７６】
次に、合意形成モジュール２２０は、サーバ管理テーブル３００を参照し、トランザクション承認要求の送信元サーバ１２０の信頼度３３０が、あらかじめ定められた閾値以上か否を判断する（Ｓ６２０）。閾値は、例えば、当該選択サーバ１２０の所有者によって指定されてよい。閾値は、サーバ１２０毎に異なる値であってもよい。
【００７７】
Ｓ６２０の判断結果が真の場合（Ｓ６２０：ＹＥＳ）、合意形成モジュール２２０は、トランザクション承認要求に含まれるスマートコントラクトＩＤに対応するスマートコントラクト２１０を実行する（Ｓ６３０）。ここで、スマートコントラクトの実行結果、すなわち、戻り値やブロックチェーンデータ１８０に反映するデータを、トランザクション確定処理で使用するため、合意形成モジュール２２０は、メモリ１６０に退避しておく。
【００７８】
そして、合意形成モジュール２２０は、トランザクション承認応答を、トランザクション承認要求の送信元サーバ１２０に送信する（Ｓ６４０）。トランザクション承認応答には、スマートコントラクト実行結果が含まれる。
【００７９】
Ｓ６２０の判断結果が偽の場合（Ｓ６２０：ＮＯ）、合意形成モジュール２２０は、スマートコントラクト実行の失敗を意味する情報を含んだトランザクション承認応答を、トランザクション承認要求の送信元サーバ１２０に送信する（Ｓ６４０）。つまり、合意形成モジュール２２０は、信頼度３３０が閾値未満のサーバ１２０からトランザクション承認要求を受けた場合、スマートコントラクトを実行すること無しに、失敗を意味する応答を返す。これにより、定足数分のサーバ１２０にトランザクション承認要求を送信しなければならなくても、信頼度３３０が低いサーバ１２０からの要求に応答してスマートコントラクトの分散処理結果が正しい結果となることを避けることができる。なお、合意形成モジュール２２０は、失敗を意味する応答を返すことに代えて、応答を返さないことを実行してもよい。また、合意形成モジュール２２０は、信頼度３３０が閾値未満のサーバ１２０を選択しないと定足数分のサーバ１２０を選択できない場合、信頼度３３０が閾値未満のサーバ１２０を選択しないでよい、つまり、選択するサーバ１２０の数が定足数未満となってもよい。
【００８０】
図７は、信頼度更新処理の一例を示すフローチャートである。信頼度更新処理は、参加者（典型的には所有者）からの指示や、あらかじめ定められたスケジュールに基づいて実行される。
【００８１】
信頼度更新モジュール２３０は、全てのサーバ１２０について、Ｓ７２０からＳ７４０までの処理を実行する。１つのサーバ１２０を例に取り、Ｓ７２０からＳ７４０の具体的な処理について述べる。
【００８２】
まず、信頼度更新モジュール２３０は、サーバ１２０からサーバ管理テーブル３００を取得する（Ｓ７２０）。
【００８３】
次に、信頼度更新モジュール２３０は、Ｓ７２０で取得したサーバ管理テーブル３００における各信頼度３３０について、改竄があるか否かを判断する（Ｓ７３０）。具体的に、信頼度３３０の検証では、信頼度更新モジュール２３０が、ブロックチェーンデータ１８０におけるブロックを参照し、サーバ管理テーブル３００の取得元であるサーバ１２０が信頼度３３０の改竄を行っていないことを確認する。全データを検証するのは非効率であるため、適当な数のブロックをサンプリングのうえで確認してもよい。あるいは、前述のように、信頼度３３０の更新をスマートコントラクトとして実行し、サーバ間で合意を得ている場合には、本処理はスキップしてもよい。
【００８４】
Ｓ７３０の判断結果が偽の場合（Ｓ７３０：ＮＯ）、信頼度更新モジュール２３０は、取得したサーバ管理テーブル３００に基づいて、自サーバ１２０（当該信頼度更新モジュール２３０を実行するサーバ１２０）のサーバ管理テーブル３００を更新する（Ｓ７４０）。具体的には、例えば、信頼度更新モジュール２３０は、単純に信頼度３３０を合算したり、サーバ１２０間の信頼度３３０のばらつきに基づいて補正したりする。
【００８５】
Ｓ７３０の判断結果が真の場合（Ｓ７３０：ＹＥＳ）、信頼度更新モジュール２３０は、取得したサーバ管理テーブル３００を破棄する（Ｓ７５０）。
【００８６】
以上、本実施例によれば、ブロックチェーンシステムに参加するサーバ１２０の信頼度３３０が、スマートコントラクト２１０の重要度４３０とそのスマートコントラクト２１０の分散処理結果の正誤とに基づいて決定される。処理対象のスマートコントラクト２１０に対応した合意形成ポリシー４４０によるが、当該決定された信頼度３３０に基づいて、トランザクション承認処理の依頼先とするサーバ１２０を選択することができる。このため、不特定のサーバが参加ノードとなり得るブロックチェーンシステムにおいて、スマートコントラクト実行結果の信頼性を向上させることができる。
【００８７】
また、本実施例によれば、各サーバ１２０は、他サーバ１２０が管理する信頼度３３０を取得し、それに基づいて自サーバ１２０が管理する信頼度３３０を更新する。このため、ある参加者が特定の参加者に対してのみ不正を行うといった問題を避けることができ、システム全体としての信頼性も向上させることができる。
【００８８】
また、本実施例によれば、信頼度３３０の低いサーバ１２０からのトランザクション承認要求が処理されないように振る舞われる。これにより、信頼度３３０の信憑性を向上させることへのインセンティブが働くため、システム全体としての信頼性を向上させることができる。
【００８９】
なお、本実施例の説明を簡略化するため、信頼度３３０は単純に重要度４３０が加算されることで更新されるが、例えば、トランザクションの正答率をスマートコントラクトの重要度４３０で加重平均するなど、別の計算方法（更新方法）が用いられてもよい。
【実施例２】
【００９０】
以下、図面を用いて実施例２を説明する。以下、実施例１との相違点を主に説明し、実施例１との共通点については、説明を省略または簡略する。
【００９１】
実施例２では、トランザクション承認処理を行うインセンティブを維持するために、実施例１における信頼度管理を拡張する。
【００９２】
図８は、実施例２に係るブロックチェーンプログラム８００の内部構成を示すブロック図である。
【００９３】
ブロックチェーンプログラム８００は、さらに決済モジュール８１０を有する。決済モジュール８１０は、参加者（典型的には所有者）からの指示や、あらかじめ定められたスケジュールに基づいて、ＣＰＵ１３０によって実行される。決済モジュール８１０は、後述する未処理信頼度９１０に応じて、例えば、仮想通貨などの決済処理を行う。
【００９４】
図９は、実施例２に係るサーバ管理テーブル９００の構成例を示す図である。
【００９５】
サーバ管理テーブル９００における各エントリは、さらに未処理信頼度９１０を保持する。未処理信頼度９１０は、その未処理信頼度９１０について前回の決済処理を実行したとき（その未処理信頼度９１０が初期値に戻されたとき）から現在にいたるまでの信頼度に関する一時的な情報であると同時に、その前回の決済処理を実行したときから現在にいたるまでトランザクション承認処理をどれだけ正しく実行したか（返した一致するスマートコントラクト実行結果の数）に従う値である。本実施例のトランザクション処理では、合意形成モジュール２２０は、Ｓ５７０（サーバ管理テーブル９００の更新）では、信頼度３３０の代わりに、未処理信頼度９１０を更新（トランザクション承認処理において正しい結果を応答したかどうかを未処理信頼度９１０に反映）する。Ｓ５３０（サーバ１２０の選択）は、実施例１と同様に信頼度３３０に基づいて行われる。
【００９６】
図１０は、決済処理の一例を示すフローチャートである。決済処理は、参加者からの指示や、あらかじめ定められたスケジュールに基づいて実行され、パラメータとして所有者ＩＤをとる。
【００９７】
まず、決済モジュール８１０は、サーバ管理テーブル９００を参照し、パラメータとして指定された所有者ＩＤに対応した未処理信頼度９１０を集計する（Ｓ１０１０）。ここで集計とは、例えば合算である。
【００９８】
次に、決済モジュール８１０は、Ｓ１０１０の集計で得られた値に基づいて決済を行う（Ｓ１０２０）。ここで「決済」とは、当該所有者ＩＤに対応した主体に対して、何らかの報酬（Ｓ１０１０の集計で得られた値に基づく報酬）を支払うことを指す。「報酬」は、例えば、仮想通貨であり、本実施例におけるブロックチェーンシステムのスマートコントラクトが用いられてもよい。あるいは、他の決済システムと接続して、物理的な通貨により支払いが行われてもよい。「報酬」としては、通貨（仮想通貨又は物理通貨）以外の対象が採用されてもよい。
【００９９】
そして、決済モジュール８１０は、決済が成功したか否かを判断する（Ｓ１０３０）。
【０１００】
Ｓ１０３０の判断結果が真の場合（Ｓ１０３０：ＹＥＳ）、決済モジュール８１０は、当該所有者ＩＤに対応したサーバ１２０について、未処理信頼度９１０の値を、信頼度３３０に反映（例えば加算）したうえで初期化する（例えば未処理信頼度９１０の値をリセットする“０”を設定する）。
【０１０１】
Ｓ１０３０の判断結果が偽の場合（Ｓ１０３０がＮＯ）、決済処理が終了する。
【０１０２】
なお、本実施例では、仮想通貨等の「決済」という性質上、サーバ１２０間で合意のうえで未処理信頼度９１０が更新されることを前提とし、未処理信頼度９１０が改竄されたか否かの判断はされないでよい。
【０１０３】
また、本実施例では、未処理信頼度９１０を用いてバッチ的に決済が行われるが、より早く正確に未処理信頼度９１０を信頼度３３０に反映するために、トランザクション処理毎に決済と信頼度３３０の更新とが実施されてもよい。
【０１０４】
以上、本実施例によれば、未処理信頼度９１０に基づく決済により、トランザクション承認処理を行うインセンティブを維持することができる。このため、結果として、ブロックチェーンシステム全体の信頼性を向上させることができる。
【０１０５】
参加者に適正に適切な報酬が支払われることは、本実施例に係るブロックチェーンシステムに参加することのインセンティブを維持し、参加者（参加ノードとしてのサーバ１２０）を増やすことが期待できるが、本実施例の主な意義は、実施例１と同様、サーバ１２０の信頼度３３０の信憑性を担保することにある。実施例２では、前回決済処理を実行したときから現在にいたるまで一致するスマートコントラクト実行結果を含んだトランザクション承認応答をどれだけ返したかを示す未処理信頼度９１０が導入され、その未処理信頼度９１０は、サーバ１２０間で合意のうえで更新され、決済に成功したときに信頼度３３０に反映される。このため、信頼度３３０の信憑性が、実施例１よりも向上していることが期待できる。
【０１０６】
以上が、実施例１および２の説明である。
【０１０７】
一比較例によれば、参加型分散システム、すなわち、不特定の計算機が参加ノードとして参加し得る分散コンピューティングシステム（例えば非中央集権型の分散コンピューティングシステム）の信頼性が低い。参加ノードは不特定の計算機であるため、スマートコントラクトの承認（追認）の依頼先（割当先）の参加ノードによって、計算ミスが生じてしまう、或いは、悪意ある参加者に従う意図的な不正が行われてしまう、といったような懸念が考えられるからである。
【０１０８】
複数の当事者間の取引に対応したスマートコントラクトを、当事者の参加ノードに加えて、当事者以外の少なくとも一の参加者の参加ノードにより、当該スマートコントラクトを実行することが、当該取引の信頼性を高めることにつながる。つまり、追認者としての参加者の増加が、参加型分散システムでの取引の信頼性を高めることになる。追認者がいないと、取引の正当性が当事者間だけで閉じてしまうことになる。このため、複数の主体および複数のスマートコントラクトを組み合わせた新しい柔軟な取引ができない。
【０１０９】
物流システムやヘルスケアシステムといった異種システム間の連携、また、自律分散型組織の実現に向けたＩｏＴ（Internet Of Things）やＡＩ（Artificial Intelligence）を絡めたスマートコントラクトなど、将来の社会インフラを支えるユースケースの実現するための技術開発が望まれる。そのユースケースの実現の手段の１つとして、スマートコントラクトが仕様通りに正しく実装されていることや、不正が行われていないことの検証結果の信頼性を高めることにある。そのためには、参加者が増えること、具体的には、例えば、スマートコントラクトの承認者（例えば追認者）が増えることである。参加者を増やすためには、新たな主体が安心して参加者となれるよう、そして、既存の参加者が安心して参加者としていられるよう、参加型分散システムの信頼性を高めることが、１つの方法である。
【０１１０】
従って、実施例１および２で説明したような技術的手段は、課題とされていたブロックチェーンシステム（参加型分散システムの一例）の信頼性を高めることに貢献し、以って、将来の社会インフラを支える上述のユースケースの実現に貢献する。これが、上述の技術的手段を提供することの技術的意義の１つである。
【０１１１】
また、上述した実施例１および２のいずれも、スマートコントラクト２１０の重要度は、そのスマートコントラクト２１０の実行に必要な計算資源および計算時間の少なくとも１つに基づく。サーバ１２０の信頼度は、スマートコントラクト２１０の重要度を基に更新され、サーバ１２０の信頼度に基づいて、トランザクション承認要求の送信先としてのサーバ１２０が選択される。このため、参加型分散システムの信頼性を高めることを維持しつつ、処理の負荷分散（例えば、性能の低いサーバ１２０に高負荷のスマートコントラクト２１０の実行が依頼されることを回避すること）も期待される。
【０１１２】
サーバ１２０間の信頼度の差は、合意形成に対する各サーバ１２０の貢献度の差でもある。このため、サーバ１２０のブロックチェーンプログラム２００は、指定された参加者に対してその参加者が所有するサーバ１２０に関連付けられている信頼度（例えば、その指定された参加者のサーバ１２０の信頼度の集計値と、他の参加者が所有するサーバ１２０の信頼度の集計値との差）に基づく報酬を支払う処理である決済処理を実行してもよい。決済処理の具体例は、実施例２の説明において述べられている。
【０１１３】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１１４】
例えば、サーバ１２０のような参加ノードに関連付けられている信頼度は、参加ノードそれ自体の信頼度に代えて又は加えて、参加ノードの所有者の信頼度、参加ノードの使用者の信頼度であってもよい。
【０１１５】
また、例えば、図５のトランザクション処理において、Ｓ５２０はスキップされてもよい、すなわち、自サーバ１２０（当該合意形成モジュールを実行するサーバ１２０）が必ずしも処理対象のスマートコントラクト２１０を実行しないでもよい。
【０１１６】
また、例えば、各サーバ１２０のブロックチェーンプログラム２００が管理するサーバ管理テーブル３００は、サーバ１２０毎の信頼度３３０の内訳を含んでもよい。サーバ１２０の信頼度３３０の内訳とは、そのサーバ１２０が実行したスマートコントラクトのうちの正しいスマートコントラクト実行結果が得られたスマートコントラクトのＩＤと、その実行結果に応じた信頼度（以下、サブ信頼度）とを含んでよい。サーバ１２０のブロックチェーンプログラム２００は、参加者Ｘ（そのサーバ１２０を所有する参加者）のサブ信頼度の集計値と、参加者Ｙ（指定された参加者）のサブ信頼度の集計値との差を基に報酬を決定してもよい。報酬は、プラス（参加者Ｘから参加者Ｙに報酬が支払われる）であっても、マイナス（参加者Ｘに参加者Ｙから報酬が支払われる）であってもよい。報酬がプラスでもマイナスでもよいことは、実施例２の決済処理あるいは他の決済処理でも同様である。
【符号の説明】
【０１１７】
１００・・・クライアント、１２０・・・サーバ
【図１】
2018109878.tif 000003
【図２】
2018109878.tif 000004
【図３】
2018109878.tif 000005
【図４】
2018109878.tif 000006
【図５】
2018109878.tif 000007
【図６】
2018109878.tif 000008
【図７】
2018109878.tif 000009
【図８】
2018109878.tif 000010
【図９】
2018109878.tif 000011
【図１０】
2018109878.tif 000012
【図１１】
2018109878.tif 000013