(57)【要約】  ブロックチェーンに登録されたコントラクトを実行する際に、個々の利用者がコントラクトの内容を精査せず安心してコントラクトを利用できるブロックチェーン管理装置を提供する。ブロックチェーン管理装置は、コントラクトやコントラクトへの入力や実行結果などで構成されるトランザクションを一つ以上含むブロックを受信するブロック受信部と、当該ブロックに含まれるトランザクションに対して、トランザクションに含まれる署名がコントラクトを精査して保証する保証者の署名であるかどうかを検証することを含むコントラクト署名検証部と、トランザクションに含まれるコントラクト実行結果が正しいことを検証するコントラクト実行結果検証部を含むトランザクション検証部と、ブロックをブロックチェーンに書き込むかどうかを他のブロックチェーン管理装置と合意形成する合意形成部と、合意形成されたブロックを格納する台帳格納部とを含む。
2018158936.tif 000002
【特許請求の範囲】
【請求項１】
コントラクト、コントラクトへの入力及びコントラクトの実行結果のうち少なくとも１つを含むトランザクションを一つ以上含むブロックを受信するブロック受信部と、
前記ブロックに含まれるトランザクションが正当であることを検証するトランザクション検証部と、
前記ブロックに含まれるトランザクションがトランザクション検証部により正当であると検証された場合に、他のブロックチェーン管理装置と当該ブロックを書き込むことに対して合意形成を行う合意形成部と、
前記合意形成されたブロックを格納する台帳格納部と、
を備え、
前記トランザクション検証部は、
コントラクトの安全性を保証する保証者の公開鍵を少なくとも一つ格納する保証者情報格納部と、
前記トランザクションがコントラクトにより構成される場合にトランザクションに含まれる署名を前記保証者情報格納部に格納された保証者の公開鍵で検証するコントラクト署名検証部と、
前記トランザクションがコントラクトの実行結果により構成される場合にトランザクションに含まれるコントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証するコントラクト実行結果検証部と、
を備える、ブロックチェーン管理装置。
【請求項２】
前記合意形成部は、
前記受信したブロックから所定のルールで算出されるハッシュ値と、システムに与えられる又は前記台帳格納部に格納された複数のブロックから算出される目標値と、を比較し、比較結果が事前に定められた条件を満たす場合に他のブロックチェーン管理装置と合意形成ができたと判断する、請求項１に記載のブロックチェーン管理装置。
【請求項３】
前記コントラクト実行結果検証部は、
前記トランザクションに記載されたコントラクトやコントラクトの入力の識別子を用いて、コントラクトの実行結果に対応するコントラクト及びコントラクトの入力を前記受信したブロック又は前記台帳格納部から取得し、前記対応するコントラクトとコントラクトの入力を用いてコントラクトを実行する、請求項１または２に記載のブロックチェーン管理装置。
【請求項４】
トランザクションを受信するトランザクション受信部と、
前記台帳格納部に格納された最新のブロックから算出されるハッシュ値と、前記トランザクション受信部が受信したトランザクションを一つ以上まとめてブロックを生成するブロック生成部と
をさらに備える、請求項１乃至３のいずれか一項に記載のブロックチェーン管理装置。
【請求項５】
前記ブロック生成部は、
ブロックから所定のルールで算出されるハッシュ値が、システムに与えられる又は前記台帳格納手段に格納された複数のブロックから算出される目標値と比較して事前に定められた条件を満たすようにブロックを生成する、請求項４に記載のブロックチェーン管理装置。
【請求項６】
コントラクト、コントラクトへの入力及びコントラクトの実行結果のうち少なくとも１つを含むトランザクションを一つ以上含むブロックを受信するステップと、
前記ブロックに含まれるトランザクションが正当であることを検証するステップと、
前記ブロックに含まれるトランザクションが正当であると検証された場合に、他のブロックチェーン管理装置と当該ブロックを書き込むことに対して合意形成を行うステップと、
前記合意形成されたブロックを台帳格納部に格納するステップと、
を含み、
前記トランザクションが正当であることを検証するステップは、
前記トランザクションがコントラクトにより構成される場合にトランザクションに含まれる署名を、コントラクトの安全性を保証する保証者の公開鍵を少なくとも一つ格納する保証者情報格納部に格納された保証者の公開鍵で検証するステップと、
前記トランザクションがコントラクトの実行結果により構成される場合にトランザクションに含まれるコントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証するステップと、
を含む、ブロックチェーン管理方法。
【請求項７】
前記合意形成を行うステップは、
前記受信したブロックから所定のルールで算出されるハッシュ値と、システムに与えられる又は前記台帳格納部に格納された複数のブロックから算出される目標値と、を比較し、比較結果が事前に定められた条件を満たす場合に他のブロックチェーン管理装置と合意形成ができたと判断する、請求項６に記載のブロックチェーン管理方法。
【請求項８】
前記コントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証するステップは、
前記トランザクションに記載されたコントラクトやコントラクトの入力の識別子を用いて、コントラクトの実行結果に対応するコントラクト及びコントラクトの入力を前記受信したブロック又は前記台帳格納部から取得し、前記対応するコントラクトとコントラクトの入力を用いてコントラクトを実行する、請求項６又は７に記載のブロックチェーン管理方法。
【請求項９】
トランザクションを受信するステップと、
前記台帳格納部に格納された最新のブロックから算出されるハッシュ値と、前記受信されたトランザクションを一つ以上まとめてブロックを生成するステップと
をさらに含む、請求項６乃至８のいずれか一項に記載のブロックチェーン管理方法。
【請求項１０】
コントラクト、コントラクトへの入力及びコントラクトの実行結果のうち少なくとも１つを含むトランザクションを一つ以上含むブロックを受信する処理と、
前記ブロックに含まれるトランザクションが正当であることを検証する処理と、
前記ブロックに含まれるトランザクションが正当であると検証された場合に、他のブロックチェーン管理装置と当該ブロックを書き込むことに対して合意形成を行う処理と、
前記合意形成されたブロックを台帳格納部に格納する処理と、
をコンピュータに実行させるプログラムであって、
前記トランザクションが正当であることを検証する処理は、
前記トランザクションがコントラクトにより構成される場合にトランザクションに含まれる署名を、コントラクトの安全性を保証する保証者の公開鍵を少なくとも一つ格納する保証者情報格納部に格納された保証者の公開鍵で検証し、
前記トランザクションがコントラクトの実行結果により構成される場合にトランザクションに含まれるコントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックチェーン管理装置、ブロックチェーン管理方法及びプログラムに関する。特に、コントラクト検証機能を持つブロックチェーン管理装置、ブロックチェーン管理方法及びプログラムに関する。
【背景技術】
【０００２】
近年、ビットコイン（非特許文献１を参照）を代表として、中央管理サーバーを必要とせず誰もが参加可能なピアツーピア（Ｐｅｅｒ  ｔｏ  Ｐｅｅｒ：Ｐ２Ｐ）ネットワークで、ネットワークに参加するすべてのノード間で共通の台帳を管理することが可能な、ブロックチェーンの普及が拡大している。【０００３】
ビットコインに代表されるブロックチェーンはブロックチェーンの管理に参加するブロックチェーン管理ノードがブロックチェーン上に蓄積する履歴情報（以下、トランザクションと呼ぶ）を発行するトランザクション発行者から発行されたトランザクションを蓄積する台帳格納手段と、トランザクションを検証するトランザクション検証手段とブロックチェーン管理ノード間で蓄積するトランザクションの内容を同一にする合意形成手段を持つ。台帳格納手段に蓄積されるトランザクションはデータ構造として一つまたは複数のトランザクションをまとめた単位をブロックとし、当該ブロックの中に前のブロックのハッシュ値を含むという特徴を持つ。【０００４】
そして、ブロックチェーンは概略以下のように動作する。各ブロックチェーン管理ノードは一人または複数のトランザクション発行者から発行された一つまたは複数のトランザクション情報を受信し、トランザクション検証手段が検証を行い、検証を通過したトランザクションのみを集約する。各ブロックチェーン管理ノードで前記集約されたトランザクションは異なるため、合意形成手段により蓄積するトランザクションを同一にする。合意形成手段により各ブロックチェーン管理ノードで同一となった一つまたは複数のトランザクションを台帳格納手段に格納する。【０００５】
このような構成及び動作により、ブロックチェーン管理ノードとして悪意のあるノードが参加した場合でも改ざんが困難かつ、各ブロックチェーン管理ノードで同一のトランザクションが蓄積されていく。【０００６】
ビットコインは台帳上で仮想通貨の支払履歴を管理することで、ブロックチェーン上に仮想通貨システムを実現している。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Satoshi. Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System”, 2009
【発明の概要】
【発明が解決しようとする課題】
【０００８】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【０００９】
ブロックチェーンは、ビットコインの管理に留まらない。例えば、プログラムまたはプログラムのハッシュ値及びプログラムへの入力・出力をブロックチェーンに登録・蓄積することで、プログラムの実行結果が正しいことを保証することができる。このような機能はたとえばイーサリアムと呼ばれるオープンソースソフトウェアで実現されている。このようなブロックチェーンを用いてプログラムの実行結果を保証することはスマートコントラクトと呼ばれ、ここで用いられるプログラムはコントラクトと呼ばれる。スマートコントラクトにおいてコントラクトは、コントラクトへの入力がブロックチェーン上に登録されるたびに、ブロックチェーンを管理する各ノードでそれぞれ個別に実行される。コントラクトの実行結果を登録する際には各ノードで実行結果の検証が行われ、合意形成手段により合意形成がされるため、正しい実行結果のみが登録されることとなる。【００１０】
スマートコントラクトはプログラムが正しく実行されることが保証されるため、契約をプログラム化することで契約の自動執行などに利用することができる。たとえばプログラムの入力として条件にあった仮想通貨の支払がされた場合に、何らかの権利を自動的に支払元に移転するといったことが可能となる。【００１１】
しかしながら、スマートコントラクトではあくまでコントラクトに記述された内容が正しく実行されたことのみが保証される。このため、コントラクトの中にバグ等により意図しない動作が記述されていた場合には、コントラクトを呼び出した利用者にとって意図しない挙動を示すことになる。その結果、ブロックチェーン上で管理された権利等が他者に奪われるなどの不利益を被る可能性がある。利用者が不利益を被らないようにするためには、利用者はコントラクトを精査し、意図しない挙動を起こさないかどうかを検証しなくてはならない。しかしながら、すべての利用者がこのような検証を行うことは困難であり、現実的とはいえない。【００１２】
このように、スマートコントラクトを安全に利用するには利用者がそれぞれコントラクトの検証を行い、意図しない動作が行われないことを確認した上で利用する必要がある。従って、各利用者に要求される検証コストが非常に大きくなる。【００１３】
本発明の目的は、個々の利用者がコントラクトの検証を行わなくともスマートコントラクトを安全に利用可能にするブロックチェーン管理装置、ブロックチェーン管理方法及びプログラムを提供することにある。
【課題を解決するための手段】
【００１４】
本発明の第１の視点によれば、コントラクト、コントラクトへの入力及びコントラクトの実行結果のうち少なくとも１つを含むトランザクションを一つ以上含むブロックを受信するブロック受信部と、前記ブロックに含まれるトランザクションが正当であることを検証するトランザクション検証部と、前記ブロックに含まれるトランザクションがトランザクション検証部により正当であると検証された場合に、他のブロックチェーン管理装置と当該ブロックを書き込むことに対して合意形成を行う合意形成部と、前記合意形成されたブロックを格納する台帳格納部と、を備え、前記トランザクション検証部は、コントラクトの安全性を保証する保証者の公開鍵を少なくとも一つ格納する保証者情報格納部と、前記トランザクションがコントラクトにより構成される場合にトランザクションに含まれる署名を前記保証者情報格納部に格納された保証者の公開鍵で検証するコントラクト署名検証部と、前記トランザクションがコントラクトの実行結果により構成される場合にトランザクションに含まれるコントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証するコントラクト実行結果検証部と、を備える、ブロックチェーン管理装置が提供される。【００１５】
本発明の第２の視点によれば、コントラクト、コントラクトへの入力及びコントラクトの実行結果のうち少なくとも１つを含むトランザクションを一つ以上含むブロックを受信するステップと、前記ブロックに含まれるトランザクションが正当であることを検証するステップと、前記ブロックに含まれるトランザクションが正当であると検証された場合に、他のブロックチェーン管理装置と当該ブロックを書き込むことに対して合意形成を行うステップと、前記合意形成されたブロックを台帳格納部に格納するステップと、を含み、前記トランザクションが正当であることを検証するステップは、前記トランザクションがコントラクトにより構成される場合にトランザクションに含まれる署名を、コントラクトの安全性を保証する保証者の公開鍵を少なくとも一つ格納する保証者情報格納部に格納された保証者の公開鍵で検証するステップと、前記トランザクションがコントラクトの実行結果により構成される場合にトランザクションに含まれるコントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証するステップと、を含む、ブロックチェーン管理方法が提供される。【００１６】
本発明の第３の視点によれば、コントラクト、コントラクトへの入力及びコントラクトの実行結果のうち少なくとも１つを含むトランザクションを一つ以上含むブロックを受信する処理と、前記ブロックに含まれるトランザクションが正当であることを検証する処理と、前記ブロックに含まれるトランザクションが正当であると検証された場合に、他のブロックチェーン管理装置と当該ブロックを書き込むことに対して合意形成を行う処理と、前記合意形成されたブロックを台帳格納部に格納する処理と、をコンピュータに実行させるプログラムであって、前記トランザクションが正当であることを検証する処理は、前記トランザクションがコントラクトにより構成される場合にトランザクションに含まれる署名を、コントラクトの安全性を保証する保証者の公開鍵を少なくとも一つ格納する保証者情報格納部に格納された保証者の公開鍵で検証し、前記トランザクションがコントラクトの実行結果により構成される場合にトランザクションに含まれるコントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証する、プログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１７】
本発明の各視点によれば、個々の利用者がコントラクトの検証を行わなくともスマートコントラクトを安全に利用可能にすることに寄与する、ブロックチェーンの管理装置、管理方法及びプログラムが、提供される。
【図面の簡単な説明】
【００１８】
【図１】第１の実施形態の係るブロックチェーン管理装置の一例を示すブロック図である。
【図２】第１の実施形態に係るブロックチェーン管理装置の動作を示すフローチャートである。
【図３】第１の実施形態に係るブロック受信部が受信したブロックの一例を示す図である。
【図４】第１の実施形態に係る台帳格納部に格納されるデータの一例を表す図である。
【図５】第１の実施形態に係るトランザクション検証部の動作を示すフローチャートである。
【図６】第１の実施形態に係る保証者情報格納部に格納された保証者の公開鍵の一例を示す図である。
【図７】第１の実施形態に係る合意形成部の動作を示すフローチャートである。
【図８】他のブロックチェーン管理装置の一例を示すブロック図である。
【図９】第１の実施形態にブロックチェーン管理装置のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１９】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。
【００２０】
一実施形態に係るブロックチェーンの管理装置１００は、ブロック受信部１１０と、トランザクション検証部１２０と、合意形成部１３０と、台帳格納部１４０と、を備える（図１参照）。ブロック受信部１１０は、ブロックチェーンのネットワークに送信されたコントラクトやコントラクトへの入力及び出力を含むトランザクションを一つまたは複数含むブロックを受信する。トランザクション検証部１２０は、ブロックに含まれるトランザクションが正当であることを検証する。合意形成部１３０は、他のブロックチェーン管理装置との間で受信したブロックを蓄積するかどうかを合意する。前記台帳格納部は、合意形成部によって合意されたブロックを蓄積する。さらに、トランザクション検証部１２０は、コントラクトに意図しない動作が入らないことを精査し保証を行う保証者の公開鍵を一つ以上含む保証者情報格納部１２２と、コントラクトに少なくとも一人の保証者による署名が付与されていることを検証するコントラクト署名検証部１２１と、コントラクトの実行結果が正しいことを検証するコントラクト実行結果検証部１２３とを含む。
【００２１】
上記一実施形態に係るブロックチェーン管理装置１００は、概略以下のように動作する。まず、ブロック受信部１１０が他のブロックチェーン管理装置からブロックを受信する。そして、ブロックに含まれるすべてのトランザクションについてトランザクション検証部１２０によって検証を行う。この検証では、トランザクションがコントラクトの場合にはコントラクト署名検証部１２１が保証者による署名が付与しているかを検証し、コントラクトの実行結果の場合にはコントラクト実行結果検証部１２３が、コントラクトが正しく実行されたことを検証する。そして、ブロックに含まれるすべてのトランザクションの検証結果が正しい場合に、ブロックは正しいと判定される。そして、合意形成部１３０が他のノードと合意形成し、台帳格納部１４０に正しいと判定されたブロックだけを追加する。
【００２２】
本願開示では、保証者によって精査されたコントラクトのみがコントラクト署名検証部１２１で正しいと判定され、すべてのトランザクションが正しい場合にのみブロックが台帳格納部１４０に格納されるため、保証者によって精査されたコントラクトだけが台帳格納部１４０に格納されることになる。このため、スマートコントラクトの利用者は利用可能なすべてのコントラクトが保証者によって検証済みであることが保証されているため、自ら検証しなくても安全にスマートコントラクトを利用可能となる。即ち、ピアツーピアで共通の台帳を管理するブロックチェーンを用いて、ブロックチェーン上に登録されたプログラムの実行結果が正しいことが保証可能なスマートコントラクト機能を持つブロックチェーン管理装置に関し、特に検証されたコントラクトだけが実行されることを保証可能なブロックチェーン管理装置が提供される。
【００２３】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２４】
［第１の実施形態］
次に、第１の実施形態について図面を参照して具体例を交えながら詳細に説明する。なお、各図面は、本発明の実施形態を説明するものである。ただし、本発明は、各図面の記載に限られるわけではない。また、各図面の同様の構成には、同じ番号を付し、その繰り返しの説明を、省略する場合がある。また、以下の説明に用いる図面において、本発明の説明に関係しない部分の構成については、記載を省略し、図示しない場合もある。
【００２５】
図１は、第１の実施形態に関わるブロックチェーン管理装置１００の構成の一例を示すブロック図である。
【００２６】
図１を参照すると、ブロックチェーン管理装置１００は、ブロック受信部１１０と、トランザクション検証部１２０と、合意形成部１３０と、台帳格納部１４０と、を含んで構成される。さらに、トランザクション検証部１２０は、コントラクト署名検証部１２１と、保証者情報格納部１２２と、コントラクト実行結果検証部１２３と、を含んで構成される。
【００２７】
ブロック受信部１１０は、直前のブロックから算出されるハッシュ値と、コード又はバイナリで表されるコントラクトやコントラクトへの入力やコントラクトの実行結果やその他の任意のデータのいずれかを含むトランザクションを一つまたは複数含むブロックを受信する手段である。
【００２８】
保証者情報格納部１２２は、コントラクトが意図しない動作をしないことを検証する保証者の公開鍵を少なくとも一つ格納する手段である。つまり、保証者情報格納部１２２は、コントラクトの安全性を保証する保証者の公開鍵を少なくとも一つ格納する。
【００２９】
コントラクト署名検証部１２１は、トランザクションがコントラクトにより構成される場合に当該トランザクションに含まれるコントラクトに付与された署名を保証者情報格納部１２２に格納された保証者の公開鍵を用いて検証する手段である。
【００３０】
コントラクト実行結果検証部１２３は、トランザクションに含まれるコントラクトの実行結果が正しいことを検証する手段である。具体的には、コントラクト実行結果検証部１２３は、トランザクションがコントラクトの実行結果により構成される場合にトランザクションに含まれるコントラクトの実行結果が対応するコントラクト及びコントラクトの入力に対して正しいことを検証する。
【００３１】
合意形成部１３０は、他のブロックチェーン管理装置との間で前記受信したブロックを蓄積するかどうかを合意する（合意を形成する）手段である。具体的には、合意形成部１３０は、ブロックに含まれるトランザクションがトランザクション検証部１２０により正当であると検証された場合に、他のブロックチェーン管理装置と当該ブロックを書き込むことに対して合意形成を行う。例えば、合意形成部１３０は、受信ブロックから所定のルールで算出されるハッシュ値と、システムに与えられる又は台帳格納部１４０に格納された複数のブロックから算出される目標値と、を比較し、比較結果が事前に定められた条件を満たす場合に他のブロックチェーン管理装置と合意形成ができたと判断する。
【００３２】
台帳格納部１４０は、合意形成部１３０によって合意されたブロックを蓄積する手段である。
【００３３】
次に、ブロックチェーン管理装置１００の動作を、具体例を交えながら詳細に説明する。
【００３４】
まず、図２のフローチャートを用いてブロックチェーン管理装置１００が保証者によって保証されたコントラクトのみを台帳格納部１４０に格納する動作について説明する。
【００３５】
まず、ブロック受信部１１０がブロックを受信する（ステップＳ１０１）。たとえば、図３に示すようなブロックを受信したとする。このブロックは前のブロックのハッシュ値と、合意形成部１３０で使用されるノンス（Ｎｏｎｃｅ）と呼ばれる値と、トランザクションの集合を含んでいる。そして、トランザクションの集合はコントラクトとコントラクトへの入力、コントラクトの実行結果を含んでいる。図３では各トランザクションはトランザクションを識別するトランザクションＩＤ（Identifier）やトランザクションがコントラクトなのかコントラクトの入力や実行結果なのかといったトランザクションのタイプを識別する情報と、トランザクションの実体と、を含んでいる。
【００３６】
次に、ブロックに含まれるすべてのトランザクションに対してトランザクション検証部１２０が検証を行う（ステップＳ１０２）。ここでの検証の内容については、図５のフローチャートを用いて、後述する。ここでは、すべてのトランザクションが正しいと検証されたとする。
【００３７】
次に、トランザクション検証部１２０は、前記ブロックに含まれるトランザクションがすべて正しいと検証されたかどうかを判定する（ステップＳ１０３）。すべて正しい場合にはステップＳ１０５へ、そうでない場合にはステップＳ１０４へ処理が遷移する。
【００３８】
前記ブロックに含まれる一部のトランザクションが検証の結果正しくないと判定された場合には、トランザクション検証部１２０は、ブロックを破棄する（ステップＳ１０４）。
【００３９】
次に、前記ブロックに含まれるすべてのトランザクションが正しいと判断された場合、合意形成部１３０が他のブロックチェーン管理装置１００と合意形成を行う（ステップＳ１０５）。合意形成の仕方については図７のフローチャートを用いて、後述する。上記の例ではすべてのトランザクションが正しいと判定されたため、ステップＳ１０５が実行される。
【００４０】
最後に、合意形成部１３０は、他のブロックチェーン管理装置１００と合意形成できたブロックを台帳格納部１４０に格納する。ここでは、台帳格納部１４０は図４のように台帳にブロックを追加する。図４では台帳はブロックの高さとブロック本体を含んでいる。
【００４１】
上述の説明で用いたフローチャートでは、複数の工程（処理）が順番に記載されているが、実行される工程の実行順序は、その記載の順番に制限されない。例えば、ステップＳ１０２〜Ｓ１０４はその実行順序が異なっていてもよい。たとえば、合意形成部１３０が合意形成をするステップＳ１０５の最中にトランザクション検証部１２０によるトランザクションの検証ステップＳ１０２を実行してもよい。
【００４２】
次に、図５のフローチャートを用いて図２に示すステップＳ１０２におけるトランザクション検証部１２０がトランザクションを検証する動作について詳細に説明する。
【００４３】
まず、トランザクション検証部１２０に検証対象となるトランザクションが入力される（ステップＳ２０１）。ここではたとえば、図３に示すブロックに含まれる３つのトランザクションがそれぞれ入力されたとする。
【００４４】
次に、トランザクション検証部１２０は、トランザクションのタイプが何かを判定する（ステップＳ２０２）。トランザクションのタイプを判定するにはトランザクションの中に直接記載されている場合には当該情報を参照してもよいし、記載されていない場合にはトランザクションに記述されている内容からトランザクションのタイプを判定するのでもよい。たとえば、コードやバイナリが含まれている場合にはコントラクトと判定できるなどの判定方法を用いてもよい。図３に示すブロックに含まれるトランザクションの形式ではトランザクションのタイプが含まれているため、それぞれトランザクションＩＤが１０００のトランザクションのタイプがコントラクト、トランザクションＩＤが１００１のトランザクションのタイプがコントラクトの入力、トランザクションＩＤが１００２のトランザクションのタイプがコントラクトの実行結果と判定できる。判定した結果タイプがコントラクトの場合にはステップＳ２０３へ、コントラクトの実行結果の場合にはステップＳ２０６へ処理が遷移する。なお、上記以外のタイプの場合（例えば、コントラクトの入力）には検証を行わずに検証結果が正しいと判定してよいし、別途ルールがある場合にはその他のタイプの場合にもルールに則した検証を行ってもよい。
【００４５】
次に、トランザクションのタイプがコントラクトの場合には、コントラクト署名検証部１２１が保証者情報格納部１２２から保証者の公開鍵を取得する（ステップＳ２０３）。たとえば図６に示すように保証者情報格納部１２２に格納された保証者の公開鍵が３つ格納されていた場合、すべての公開鍵を取得する。
【００４６】
次に、コントラクト署名検証部１２１がトランザクションに含まれる署名を前記保証者の公開鍵で検証する（ステップＳ２０４）。前記保証者の公開鍵が複数ある場合にはそれらの中のいずれかで署名が検証できればよい。また、トランザクションに複数の署名が含まれている場合には、すべての署名がそれぞれに対応する保証者の公開鍵で検証されれば正しいと判定してもよいし、トランザクションに含まれる複数の署名の内、事前に定めた個数の署名さえ検証できれば一部の署名が検証できなくても正しいと判定してもよい。ここでは、図３に示すトランザクションＩＤが１０００のトランザクションには署名が一つだけ含まれるため、前記保証者情報格納部１２２に格納された３つのうちいずれか１つの署名で検証ができればよい。ここでは、仮に図６の最上段の公開鍵”MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHbd2oef3hfC6dI/lvWx/CWaeaDfJ2rRupY3v/ydM0MeuX5Jhmk5ulAo0NHehOr9UD9kMZkyDXcRPjVphGiSy9Q”で署名の検証ができたとする。
【００４７】
次に、署名が正しいと検証された場合に、コントラクト署名検証部１２１は、検証結果が正しいと返す（ステップＳ２０５）。上記のように図３に示すトランザクションＩＤが１０００のトランザクションは署名が正しいと検証されたため、検証結果が正しいと返される。
【００４８】
次に、ステップＳ２０２でトランザクションのタイプがコントラクトの実行結果の場合には、コントラクト実行結果検証部１２３は、コントラクトの実行結果が導出されたコントラクトの入力及びコントラクトを特定する（ステップＳ２０６）。ここでは図３に示したブロックの中でトランザクションＩＤが１００２のトランザクションが、タイプがコントラクトの実行結果であると判断される。そして、コントラクト実行結果検証部１２３は、当該トランザクションの中に含まれる入力のトランザクションＩＤを参照し、該当するトランザクションＩＤが１００１のトランザクションを台帳格納部１４０やブロック受信部１１０が受信しているブロックの中から取得することでコントラクトの入力を取得できる。取得したコントラクトの入力を表すトランザクションである、トランザクションＩＤが１００１のトランザクションの中にはコントラクトＩＤが記述されている。コントラクト実行結果検証部１２３は、コントラクトＩＤが１０であるコントラクトを台帳格納部１４０やブロック受信部１１０が受信しているブロックから取得することでコントラクトを取得できる。ここではトランザクションＩＤが１０００のトランザクションで登録されるコントラクトが取得される。このようにコントラクトの入力やコントラクトはその識別子となる情報により特定してもよいし、具体的な値がコントラクトの実行結果とともに記述されていてもよく、その特定方法は問わない。
【００４９】
次に、コントラクト実行結果検証部１２３は、コントラクトの入力とコントラクトを用いてコントラクトを実行する（ステップＳ２０７）。コントラクトの実行は、コードとして登録されたコントラクトをスクリプト実行基盤が実行してもよいし、バイナリとして登録されたコントラクトをそのまま実行してもよく、また仮想環境上で実行してもよく、実行方法は問わない。例えば、コントラクト実行結果検証部１２３は、コントラクトＩＤが１０のコントラクトには入力された仮想通貨保有量を投票権に１００：１の割合で変換する処理を行うとすると、コントラクトの入力としてトランザクションＩＤが１００１のトランザクションにはユーザＸの仮想通貨が１００入力されているため、ユーザＸに投票権が１渡されることとなる。このため、ユーザＸの仮想通貨保有量がもともと１０００だった場合仮想通貨保有量が９００となり、ユーザＸの投票権が０だった場合に投票権が１となる。
【００５０】
次に、コントラクト実行結果検証部１２３は、実行結果が、前記トランザクションに含まれるコントラクトの実行結果と一致するかを判定する（ステップＳ２０８）。例えば、コントラクト実行結果検証部１２３は、ステップＳ２０７で計算された実行結果が図３に示すトランザクションＩＤが１００２のトランザクションに記載された実行結果と一致するか否かを確認することで上記判定を行う。
【００５１】
最後に、実行結果が一致する場合に、コントラクト実行結果検証部１２３は、検証結果が正しいと返す（ステップＳ２０９）。
【００５２】
次に、図７のフローチャートを用いて合意形成部１３０が合意形成する動作の一例について詳細に説明する。なお、本実施の形態では一例としてビットコインで採用されているＰｒｏｏｆ  ｏｆ  Ｗｏｒｋと呼ばれる仕組みによる合意形成について説明するが、他の合意形成方法でもよく、合意形成の方法については問わない。
【００５３】
まず、合意形成部１３０は、ブロックのハッシュ値を取得する（ステップＳ３０１）。ハッシュ値はブロック全体に対して取得してもよいし、ブロックの特徴を要約した値について取得するものでもよい。ここでは、図３に示すブロックのハッシュ値を１６進数で表した時、“0000000000000000000000000000000000000000000000002bcad85e7b40d3a4”であったとする。
【００５４】
最後に、合意形成部１３０は、ブロックのハッシュ値が目標値より小さいかどうかを判定し、小さい場合に合意形成ができたとする（ステップＳ３０２）。ここで目標値は事前にシステムに固有の値が決定されているのでもよいし、以前のブロックを参照して計算して生成されるのでもよい。ここで、図３に示されたブロックに対する目標値が、“0000000000000000000000000000000000000000000000010000000000000000”であった場合、前述した図３のブロックのハッシュ値は、当該目標値より小さいため、合意形成ができたと判定される。
【００５５】
このような合意形成の方法はＰｒｏｏｆ  ｏｆ  Ｗｏｒｋと呼ばれ、ブロックを生成する際に、図３のブロックに示すようなｎｏｎｃｅと呼ばれる値を変化させ、ブロックのハッシュ値が目標値より小さくなるようにブロックを生成する。ハッシュ値からｎｏｎｃｅを逆算することはできないことから、総当たりでｎｏｎｃｅを試す必要があるため、ブロックの生成にはある程度の計算コストと時間を所要する。ブロックの生成にかかる時間は目標値によってコントロールでき、たとえばビットコインでは直近のいくつかのブロックの生成間隔から、今後もブロックの生成にかかる時間が１０分程度になるように調整される。Ｐｒｏｏｆ  ｏｆ  Ｗｏｒｋを用いる合意形成部１３０は、計算コストを掛けて生成されたブロックかどうかを、ブロックのハッシュ値によって検証できる。ブロックチェーンのネットワークに参加している大部分のブロックチェーン管理装置１００が同じルールに従ってブロックのハッシュ値を検証し、検証を通過したブロックのみを台帳格納部１４０に格納するブロックとすることで、ネットワーク全体では合意を形成することができる。
【００５６】
また、本実施の形態のブロックチェーン管理装置１００は図８のように、トランザクション発行者または他のブロックチェーン管理装置１００からトランザクションを受信するトランザクション受信部１５０と、台帳格納部１４０に格納された直前のブロックのハッシュ値と受信したトランザクションを一つ以上まとめてブロックを生成するブロック生成部１６０を含んでいてもよい。そしてブロック生成部１６０は前述したＰｒｏｏｆ  ｏｆ  Ｗｏｒｋで合意形成をするために、一定の条件を満たすブロックを生成する機能を有していてもよい。つまり、ブロック生成部１６０は、ブロックから所定のルールで算出されるハッシュ値が、システムに与えられる又は台帳格納部１４０に格納された複数のブロックから算出される目標値と比較して事前に定められた条件を満たすようにブロックを生成する。
【００５７】
次に、第１の実施形態に係るブロックチェーン管理装置１００のハードウェア構成を説明する。
【００５８】
図９は、第１の実施形態にブロックチェーン管理装置１００のハードウェア構成の一例を示すブロック図である。ブロックチェーン管理装置１００は、所謂、コンピュータ（情報処理装置）により構成可能であり、図９に例示する構成を備える。例えば、ブロックチェーン管理装置１００は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）１０１、メモリ１０２、入出力インターフェイス１０３及び通信インターフェイスであるＮＩＣ（Network Interface Card）１０４等を備える。
【００５９】
但し、図９に示す構成は、ブロックチェーン管理装置１００のハードウェア構成を限定する趣旨ではない。ブロックチェーン管理装置１００は、図示しないハードウェアを含んでもよいし、必要に応じて入出力インターフェイス１０３を備えていなくともよい。また、ブロックチェーン管理装置１００に含まれるＣＰＵ等の数も図９の例示に限定する趣旨ではなく、例えば、複数のＣＰＵがブロックチェーン管理装置１００に含まれていてもよい。
【００６０】
メモリ１０２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【００６１】
入出力インターフェイス１０３は、図示しない表示装置や入力装置のインターフェイスである。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置や、ＵＳＢ（Universal Serial Bus）メモリ等の外部記憶装置から情報を入力する装置である。ユーザは、キーボードやマウス等を用いて、必要な情報をブロックチェーン管理装置１００に入力する。
【００６２】
ブロックチェーン管理装置１００の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ１０２に格納されたプログラムをＣＰＵ１０１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェア及び／又はソフトウェアにより実現できればよい。また、コンピュータの記憶部に、上述したコンピュータプログラムをインストールすることにより、コンピュータをブロックチェーン管理装置１００として機能させることができる。さらにまた、上述したコンピュータプログラムをコンピュータに実行させることにより、コンピュータによりブロックチェーン管理方法を実行することができる。
【００６３】
次に本実施形態の効果について説明する。以上のように、本実施形態のブロックチェーン管理装置１００は、ブロックチェーンに登録されるコントラクトが保証者によって検証されたものに限られ、コントラクトの利用者が自らコントラクトの検証を行わなくとも安心安全にコントラクトの実行が可能なブロックチェーンを提供することができる。
【００６４】
その理由は、次のとおりである。本実施形態のブロックチェーン管理装置１００はトランザクション検証部１２０のコントラクト署名検証部１２１が保証者情報格納部１２２に格納された保証者の公開鍵でコントラクトに付与された署名を検証し、ブロック受信部１１０が受信したブロックに含まれるすべてのトランザクションがトランザクション検証部１２０で正しいと検証された場合に限り合意形成部１３０が、他のブロックチェーン管理装置１００と合意形成を行い、合意形成できたブロックだけを台帳格納部１４０に格納するため、保証者による署名のないコントラクトを含むブロックは台帳格納部１４０には格納されないためである。
【００６５】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【００６６】
１００    ブロックチェーン管理装置
１０１  ＣＰＵ（Central Processing Unit）
１０２  メモリ
１０３  入出力インターフェイス
１０４  ＮＩＣ（Network Interface Card）
１１０    ブロック受信部
１２０    トランザクション検証部
１２１    コントラクト署名検証部
１２２    保証者情報格納部
１２３    コントラクト実行結果検証部
１３０    合意形成部
１４０    台帳格納部
１５０    トランザクション受信部
１６０    ブロック生成部
【図１】
2018158936.tif 000003
【図２】
2018158936.tif 000004
【図３】
2018158936.tif 000005
【図４】
2018158936.tif 000006
【図５】
2018158936.tif 000007
【図６】
2018158936.tif 000008
【図７】
2018158936.tif 000009
【図８】
2018158936.tif 000010
【図９】
2018158936.tif 000011
【国際調査報告】
2018158936.tif 000012
2018158936.tif 000013
2018158936.tif 000014
2018158936.tif 000015
2018158936.tif 000016
2018158936.tif 000017