(57)【要約】【課題】ブロックチェーン上で、データの履歴を容易に追跡することを可能とする。【解決手段】利用者端末１と、承認端末２とを備えるブロックチェーンシステムであって、利用者端末１は、スマートコントラクトの変数の値を更新するトランザクションを発行するトランザクション発行部１３を備え、承認端末２は、トランザクションを含むブロックを生成するとともに変数の値を更新し、前記ブロックと、前記変数の値を更新した当該ブロックの更新ブロック番号とをブロックチェーンシステムの端末の分散台帳１１に反映させるブロック生成部１５３を備える。【選択図】図１
2020080061.tif 000002
【特許請求の範囲】
【請求項１】
利用者端末と、承認端末とを備えるブロックチェーンシステムであって、
前記利用者端末は、
スマートコントラクトの変数の値を更新するトランザクションを発行するトランザクション発行部を備え、
前記承認端末は、
前記トランザクションを含むブロックを生成するとともに前記変数の値を更新し、前記ブロックと、前記変数の値を更新した当該ブロックの更新ブロック番号とを前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部を備えること
を特徴とするブロックチェーンシステム。
【請求項２】
請求項１記載のブロックチェーンシステムであって、
前記分散台帳は、前記変数の値をトークン毎に格納するステートデータベースを備え、
前記ブロック生成部は、前記トークン毎に前記更新ブロック番号を前記ステートデータベースに設定すること
を特徴とするブロックチェーンシステム。
【請求項３】
請求項１または２記載のブロックチェーンシステムであって、
前記利用者端末は、
自身の前記分散台帳から前記更新ブロック番号を取得し、前記更新ブロック番号から算出される検索ブロック番号を指定して、前記検索ブロック番号の時点のブロックにおける前記変数の値および更新ブロック番号を、自身の前記分散台帳から取得する履歴検索部を備えること
を特徴とするブロックチェーンシステム。
【請求項４】
請求項１または２記載のブロックチェーンシステムであって、
前記ブロック生成部は、前記更新ブロック番号の代わりに、前記更新ブロック番号から算出される検索ブロック番号を、前記ブロックチェーンシステムの端末の前記分散台帳に反映させること
を特徴とするブロックチェーンシステム。
【請求項５】
ブロックチェーンシステムにおいてトランザクションを承認する承認端末であって、
スマートコントラクトの変数の値を更新するトランザクションを受信する受信部と、
前記トランザクションを含むブロックを生成するとともに前記変数の値を更新し、前記ブロックと、前記変数の値を更新した当該ブロックの更新ブロック番号とを前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部と、を備えること
を特徴とする承認端末。
【請求項６】
ブロックチェーンシステムにおける利用者端末であって、
ブロックチェーンの分散台帳と、
スマートコントラクトの変数の値を更新するトランザクションを発行するトランザクション発行部と、
前記分散台帳から前記変数の値が更新されたブロックの更新ブロック番号を取得し、前記更新ブロック番号から算出される検索ブロック番号を指定して、前記検索ブロック番号の時点のブロックにおける前記スマートコントラクトの変数の値および更新ブロック番号を、前記分散台帳から取得する履歴検索部と、を備えること
を特徴とする利用者端末。
【請求項７】
ブロックチェーンの履歴を管理する履歴管理方法であって、
利用者端末は、
スマートコントラクトの変数の値を更新するトランザクションを発行するトランザクション発行ステップを行い、
承認端末は、
前記トランザクションを含むブロックを生成し、前記変数の値を更新する生成ステップと、
前記ブロックと、前記変数の値を更新した当該ブロックの更新ブロック番号とを、ブロックチェーンネットワークに接続された端末の分散台帳に反映させる同期ステップとを行うこと
を特徴とする履歴管理方法。
【請求項８】
請求項５に記載の承認端末として、コンピュータを機能させることを特徴とする履歴管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スマートコントラクト型のブロックチェーンの履歴を管理する技術に関する。
【背景技術】
【０００２】
中央集権的な管理を必要とせずに、信頼性を担保可能な仕組みがデジタル仮想通貨ビットコインを中心に普及しつつある。ブロックチェーンと呼ばれるこの仕組みにおいては、やり取りされる情報の信頼性が分散ネットワーク内の合意形成のプロセスによって担保され、かつ、改ざんや二重使用などの不正を系全体で防ぐことで健全性が保たれる。
【０００３】
ブロックチェーンでは、参加者間の取引情報（トランザクション）が「ブロック」という単位でまとめられ、各ブロックは数珠つなぎとなって時系列順に管理される。新たなブロックの承認は、Proof of Workなどの分散ネットワークにおける合意アルゴリズムによって形成される。新たなブロックの承認は、ブロック内部に記録された取引が系全体で合意されたことを示す。
【０００４】
このブロックチェーンを用いて管理される一連の取引情報の帳簿を「分散台帳」と呼び、ネットワークに参加する各端末は同一の分散台帳を保持している。近年では、分散台帳に高度なスクリプトコードを登録し、スクリプトコードの実行とその結果についても合意を得るブロックチェーン基盤技術も開発されている。例えばEthereumと呼ばれるブロックチェーン基盤は、トランザクションを入力としてスクリプトコードを実行し、その実行結果をツリー構造のキーバリュー型ストア（ステートDBと呼ぶ）に格納し、その時のストアの代表値もブロックに記録する分散台帳を持つ。このようにブロックチェーン上に登録され、各端末に登録および実行されるスクリプトコードは「スマートコントラクト」と呼ばれている。
【０００５】
スマートコントラクト型のブロックチェーンは、各ブロックと、そのブロック時点でスマートコントラクトのステートDBとが対応づけて管理されている（非特許文献１）。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】「JavaScript API・ethereum/wiki  Wiki・GitHub」、https://github.com/ethereum/wiki/wiki/JavaScript-API#contract-methods
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ブロックチェーンのデータ構造上、ブロック番号を指定し、そのブロック時点のステートを参照することは容易である。しかしながら、当該ブロックのステートの値が、過去のどのブロックでどのように遷移したのかを知ることは困難である。特に、情報のトレーサビリティを確保するという観点において、この問題は重要である。
【０００８】
例えば、ステートのある値の変化を追跡する等の高度な探索・追跡を行う場合、RDBMS等の外部データベースを用意して、ブロックチェーンから抽出した全てのデータを外部データベースに落とし込み、外部データベース上でインデックスを構築し所望のデータを探索・追跡する方法が考えられる。しかしながら、外部データベースを用いた探索システムを構築および維持することは、一般ユーザにとって高いコストを要することになる。
【０００９】
本発明は、上記課題を鑑みてなされたものであり、本発明の目的は、ブロックチェーン上で、データの履歴を容易に追跡することを可能とする技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明の一態様は、利用者端末と、承認端末とを備えるブロックチェーンシステムであって、前記利用者端末は、スマートコントラクトの変数の値を更新するトランザクションを発行するトランザクション発行部を備え、前記承認端末は、前記トランザクションを含むブロックを生成するとともに前記変数の値を更新し、前記ブロックと、前記変数の値を更新した当該ブロックの更新ブロック番号とを前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部を備える。
【００１１】
本発明の一態様は、ブロックチェーンシステムにおいてトランザクションを承認する承認端末であって、スマートコントラクトの変数の値を更新するトランザクションを受信する受信部と、前記トランザクションを含むブロックを生成するとともに前記変数の値を更新し、前記ブロックと、前記変数の値を更新した当該ブロックの更新ブロック番号とを前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部と、を備える。
【００１２】
本発明の一態様は、ブロックチェーンシステムにおける利用者端末であって、ブロックチェーンの分散台帳と、スマートコントラクトの変数の値を更新するトランザクションを発行するトランザクション発行部と、前記分散台帳から前記変数の値が更新されたブロックの更新ブロック番号を取得し、前記更新ブロック番号から算出される検索ブロック番号を指定して、前記検索ブロック番号の時点のブロックにおける前記スマートコントラクトの変数の値および更新ブロック番号を、前記分散台帳から取得する履歴検索部と、を備える。
【００１３】
本発明の一態様は、ブロックチェーンの履歴を管理する履歴管理方法であって、利用者端末は、スマートコントラクトの変数の値を更新するトランザクションを発行するトランザクション発行ステップを行い、承認端末は、前記トランザクションを含むブロックを生成し、前記変数の値を更新する生成ステップと、前記ブロックと、前記変数の値を更新した当該ブロックの更新ブロック番号とを、ブロックチェーンネットワークに接続された端末の分散台帳に反映させる同期ステップとを行う。
【００１４】
本発明の一態様は、上記承認端末として、コンピュータを機能させることを特徴とするスマートコントラクト登録プログラムである。
【発明の効果】
【００１５】
本発明によれば、ブロックチェーン上で、データの履歴を容易に追跡することを可能とする技術を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態に係るブロックチェーンシステムの全体構成を示す図である。
【図２】分散台帳の構成を示す図である。
【図３】ブロック発行部の構成を示す構成図である。
【図４】ステートDBの更新ブロック番号の設定方法を説明する説明図である。
【図５】ブロック生成および履歴検索を示すシーケンス図である。
【図６】トランザクションの一例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について、図面を参照して説明する。
【００１８】
図１は、本実施形態のブロックチェーンシステムの全体構成を示す図である。本実施形態のブロックチェーンは、スマートコントラクト型ブロックチェーンであって、ブロックチェーン基盤技術の１つであるEthereumを用いる。Ethereumは、ブロックチェーンを、状態遷移を記録する分散台帳として用いるためのアプリケーション開発プラットフォームである。ただし、本願発明は、Ethereumに限定されるものではなく、Ethereum以外のブロックチェーンに用いてもよい。
【００１９】
図１に示すブロックチェーンシステムは、利用者端末１と、承認端末２とを備える。これらの端末１、２は、P2Pネットワークであるブロックチェーンネットワーク４（以下、「ネットワーク」という）に自律分散的に接続される。なお、ネットワーク４には、図示する端末１、２の他にも、複数の端末が接続される。例えば、複数の利用者端末１、および、複数の承認端末２が接続されていてもよい。ネットワーク４に接続される端末は、後述する分散台帳１１、ブロックチェーン制御部１２およびトランザクション発行部１３を備え、分散台帳１１に記録されたデータおよびトランザクションを相互に検証し、系を維持している。
【００２０】
利用者端末１は、ブロックチェーンおよびスマートコントラクトを利用する利用者が使用する端末（ノード）である。利用者端末１は、分散台帳１１と、ブロックチェーン制御部１２と、トランザクション発行部１３と、履歴検索部１４とを備える。
【００２１】
分散台帳１１には、ブロックチェーン制御部１２を介して、ネットワーク４に接続された全ての端末と緩やかに同期することによって、リアルタイムに近い形で最新状態のブロックチェーンが記憶されている。本実施形態の分散台帳１１には、ブロックチェーンと、ブロックチェーンで管理されるデータ集合とが記憶されている。
【００２２】
ブロックチェーン制御部１２は、ネットワーク４に接続された端末と自律分散的に協調してブロックチェーンの系を維持する。ブロックチェーン制御部１２は、分散台帳１１にアクセスし、分散台帳１１のブロックチェーンおよびデータ集合を読み出し、または、更新する。
【００２３】
トランザクション発行部１３は、トランザクションをネットワーク４に発行する。本実施形態では、トランザクション発行部１３は、スマートコントラクトのステート（変数）の値を更新するトランザクションを発行する。
【００２４】
履歴検索部１４は、自身の分散台帳１１からスマートコントラクトのステートの値が更新されたブロックの更新ブロック番号を取得し、更新ブロック番号から算出される検索ブロック番号を指定して、検索ブロック番号の時点のブロックにおけるスマートコントラクトのステートの値および更新ブロック番号を、分散台帳１１から取得する。履歴検索部１４は、ブロックチェーン制御部１２を介して、分散台帳１１にアクセスする。
【００２５】
承認端末２は、例えばマイナーと呼ばれるトランザクションの検証者が使用する端末であって、ネットワーク４に送信されたトランザクションを収集し、正当性を確認後に、承認作業を通じてブロックを生成する。承認端末２は、分散台帳１１と、ブロックチェーン制御部１２と、トランザクション発行部１３と、ブロック発行部１５とを備える。承認端末２の分散台帳１１、ブロックチェーン制御部１２およびトランザクション発行部１３は、利用者端末１の分散台帳１１、ブロックチェーン制御部１２およびトランザクション発行部１３と同様である。
【００２６】
ブロック発行部１５は、ネットワーク４上に発行されたトランザクションを検証し、Proof of Workなどのブロック生成のためのコンセンサスアルゴリズム（合意アルゴリズム）に従い、ブロックの生成を試みる。
【００２７】
図２は、承認端末２が備えるブロック発行部１５の構成を示す構成図である。図示するブロック発行部１５は、コンセンサス実行部１５１と、トランザクション検証部１５２と、ブロック生成部１５３とを備える。
【００２８】
コンセンサス実行部１５１は、ハッシュ演算などコンセンサス（合意）に必要な計算を実施する。コンセンサスアルゴリズムは、ビットコインで用いられているProof of Work以外にも、所持コイン量をリソースとしたProof of Stake、ビザンチン故障における合意アルゴリズムであるPBFTなど、その他のブロック生成のためのコンセンサスアルゴリズムを用いても良い。
【００２９】
トランザクション検証部１５２は、ネットワーク４よりトランザクションを受け取ると、受け取ったトランザクションの電子署名の正当性などのトランザクションの検証を行う。  
【００３０】
ブロック生成部１５３は、所定の時間内にネットワーク４上で発行されたトランザクションをまとめて１つのブロックを生成する。すなわち、ブロック生成部１５３は、トランザクション検証部１５２による検証に成功した場合、当該トランザクションを含むブロックを生成し、ネットワーク４に接続される全ての端末の分散台帳１１に生成したブロックを反映させる。
【００３１】
本実施形態のブロック生成部１５３は、スマートコントラクトのステート（変数）の値を更新するトランザクションを含むブロックを生成するとともに前記ステートの値を更新し、前記ブロックと、前記ステートの値を更新した当該ブロックの更新ブロック番号とをブロックチェーンシステムの端末の分散台帳に反映させる。
【００３２】
具体的には、ブロック生成部１５３は、スマートコントラクトのステートの値を更新するトランザクションに基づいて、自身の分散台帳１１のデータ集合の１つであるステートDBを更新し、更新後のステートDBのハッシュ値を、生成するブロックのブロックヘッダに設定する。すなわち、ブロック生成部１５３は、トランザクションに従って更新したステートの値と、更新を行った当該ブロックの更新ブロック番号とをステートDBに設定する。
【００３３】
図３は、各端末の分散台帳１１の構成を示す。本実施形態の分散台帳１１は、複数のブロック１１１から構成されるブロックチェーンと、各ブロックに対応して管理されるデータ集合１１２とを備える。
【００３４】
ブロック１１１は、ブロックヘッダ１１３、トランザクションリスト１１４などを有する。ブロックヘッダ１１３には、当該ブロックの時点の分散台帳１１全体の要約が設定される。図示する例では、ブロックヘッダ１１３には、データ集合１１２のある時点のスナップショットとして、データ集合１１２の要約値（ステートDBのハッシュ値、トランザクション集合のハッシュ値など）が設定される。例えば、データ集合がマークルツリーなどのツリー構造で格納されている場合、要約値として、マークルツリーのルートハッシュが設定される。トランザクションリスト１１４は、当該ブロック１１１に含まれるトランザクションのリストである。 
【００３５】
データ集合１１２は、その用途および目的は限定されない。図示する分散台帳１１では、データ集合１１２として、ステートDBと、トランザクション集合DBとを備える。
【００３６】
ステートDBは、あるブロックの時点でのスマートコントラクトのステート（変数）の値または状態を管理するためのDBである。また、ステートDBには、スマートコントラクトのバイトコードが格納される。本実施形態では、トークンというデータ単位でステートDBに情報が記録されている。ここでトークンとはスマートコントラクトで表現されるデータ構造であり、少なくとも「トークンID」と「所有者のアドレス」といったパラメータを持ち、トークンの移転が所有者の権限によってブロックチェーン上で管理されるデータを示す。すなわち、本実施形態のステートDBには、トークン毎に、スマートコントラクトのステート（例えば、所有者のアドレス等）の値が格納される。
【００３７】
また、本実施形態のステートDBは、承認端末２のブロック生成部１５３により、トークン毎に、ステートの値が更新されたブロックのブロック番号である更新ブロック番号が更新後のステートの値と対応付けて設定される。ステートDBは、Key-Value Store(KVS)として機能し、トークンを一意に指定する識別情報（例えば、トークンID）が入力されると、当該トークンのステートの値および更新ブロック番号を出力する。
【００３８】
なお、Ethereumでは、スマートコントラクトのバイトコードを、分散台帳１１（ステートDB）に登録すると、当該スマートコントラクトを示す識別情報が付与される。識別情報に対して、トランザクションを送信することができるため、スマートコントラクトの識別情報はアドレスとも呼ばれる。ユーザのアドレスへの送金との違いは、スマートコントラクトのアドレス宛てにトランザクションを送信すると、当該スマートコントラクトが実行されることである。
【００３９】
トランザクション集合DBは、あるブロックの時点でのトランザクションの集合を示すDBである。トランザクションの集合は、あるブロックの時点での全てのトランザクションによって構成されるマークルツリーを意味する。
【００４０】
次に、承認端末２が、ステートDBのステートの値を更新する際に、更新時点の更新ブロック番号を、当該ステートに付与する処理を説明する。
【００４１】
図４は、更新ブロック番号をステートの値に付与する処理を説明するための模式図である。図示する例では、各端末の分散台帳１１には、＃26001番までのブロックが登録されているものとする。
【００４２】
本実施形態の分散台帳１１には、前述のとおり、ブロックと、ステートDBとが対応付けて保持されている。図示する例では、#25768のブロックのステートDB５１と、#25770のブロックのステートDB５２と、#26000のステートDB５３と、#26001のステートDB５４とを示している。
【００４３】
図示する各ステートDBは、トークン毎に、トークンIDと、所有者アドレスと、更新ブロック番号とを有する。本実施形態では、ステートのキーとしてトークンIDを用いるが、ステートのキーはトークンIDに限定されない。また、トークンは、代替不可能なトークン（Non-Fungible Token）であっても、代替可能なトークン（Fungible Token）であってもよい。
【００４４】
所有者アドレスは、ステート（変数）である。所有者アドレスは、対応するブロックの時点における、トークンの所有者のアドレスが設定される。更新ブロック番号には、トークンの所有者が更新（変更）された際のブロック番号が設定される。
【００４５】
例えば、#25768のステートDB５１を見ると、トークンID：0005については、所有者は利用者Ｃで、所有者が利用者Ｃに更新されたトランザクションを含む更新ブロック番号は#25007であることがわかる。また、トークンID：0006については、所有者は利用者Ｄで、所有者が利用者Ｄに更新されたトランザクションを含む更新ブロック番号は#24991であることがわかる。
【００４６】
次に、ブロック#25769では、当該ブロックに含まれるトランザクションにより、トークンID：0005および0006の所有者アドレスは更新されないものとする。この場合、図示しないステートDBのトークンID：0005および0006の更新ブロック番号には、直前のブロック#25768の更新ブロック番号に設定されたブロック番号が引き続き設定されている。また、トークンID：0005、0006の所有者アドレスには、直前のブロックの所有者アドレスに設定されたアドレスが引き続き設定されている。
【００４７】
そして、ブロック#25770に含まれるトランザクションにより、トークンID：0005および0006の所有者アドレスが更新される。この場合、承認端末２は、トークンID：0005および0006の所有者アドレスを更新するとともに、更新ブロック番号を更新する。具体的には、承認端末２は、当該ブロックのブロック番号（#25770）を、トークンID：0005および0006の更新ブロック番号に設定する。
【００４８】
そして、ブロック#25771から＃25999では、各ブロックに含まれるトランザクションにより、トークンID：0005および0006の所有者アドレスは更新されないものとする。この場合、直前のブロックの更新ブロック番号に設定されたブロック番号が、引き続き設定されている。すなわち、ブロック#25771から＃25999のステートDBでは、トークンID：0005、0006については、#25770のステートDB５２と同じ所有者アドレスおよび更新ブロック番号が引き続き設定されている。
【００４９】
そして、ブロック#26000に含まれるトランザクションにより、トークンID：0005の所有者アドレスが更新される。この場合、承認端末２は、トークンID：0005の所有者アドレスを更新するとともに、更新ブロック番号を更新する。具体的には、承認端末２は、当該ブロックのブロック番号（#26000）を、トークンID：0005更新ブロック番号に設定する。なお、トークンID：0006については、承認端末２は、直前のブロックと同じ所有者アドレスおよび更新ブロック番号を設定する。
【００５０】
このように、本実施形態では、キー（トークンID）に対するステート（所有者アドレス）の値とともに、更新ブロック番号を設定する。これにより、本実施形態では、利用者端末１は、最新のステートDB５４を参照すると、最後に変更があった更新ブロック番号を取得することができる。例えば、トークンID：0006の場合は#25770を取得することができる。
【００５１】
そして、利用者端末１は、更新ブロック番号から算出される検索ブロック番号を指定して、検索ブロック番号で指定された所有者アドレスおよび更新ブロック番号を取得する。例えば、検索ブロック番号は、更新ブロック番号から１減算したブロック番号とする。例えば、トークンID：0006の場合は更新ブロック番号#25770から１減算した検索ブロック番号＃25769を指定して当該ブロック番号に設定された所有者アドレス（利用者Ｄ）および更新ブロック番号（#24991）を取得する。このように、本実施形態では、ステートの値に変更があったブロックの付近のブロックのみを辿ることで、探索コストを大幅に低減し、容易にステートの値の変更履歴を取得することができる。
【００５２】
図５は、本実施形態のブロック生成および履歴検索を示すシーケンス図である。
【００５３】
図示する処理では、利用者Ａが利用者Ｂにトークンを移動（譲渡）し、利用者Ｂが利用者Ａから受け取ったトークンの履歴を探索する処理を示す。
【００５４】
利用者Ａの利用者端末１Ａは、所定のトークンを利用者Ａから利用者Ｂに移動するためのトランザクションを生成し、を発行する（Ｓ１１）。具体的には、利用者端末１Ａはトランザクションをネットワーク４上にブロードキャストする。これにより、トランザクションは、ネットワーク４に接続された全ての端末に伝搬される。
【００５５】
図６は、Ｓ１１のトランザクションの一例を示す図である。図示するトランザクションは、宛先と、支払額と、データと、電子署名とを有する。宛先には、スマートコントラクトのアドレスが設定される。支払額には、スマートコントラクトを実行するために支払われる金額（手数料）が設定される。
【００５６】
データには、スマートコントラクト内の「指定されたアドレスへ所定のトークンの所有権を移動する」機能を提供する関数を実行することを指定するデータが設定される。なお、引数としてトークンのIDと利用者Ｂのアドレスを指定する。電子署名には、トランザクションの発行者である利用者Ａの秘密鍵で当該トランザクションが署名された署名値が設定される。
【００５７】
そして、承認端末２（ブロック発行部１５）は、Ｓ１１で送信されたトランザクションを検証（マイニング）する（Ｓ１２）。そして、承認端末２は、当該トランザクションを、所定の時間内に発生した他のトランザクションとまとめて１つのブロックを生成する。当該ブロックは、ナンスのマイニングを経て自身の分散台帳１１のブロックチェーンに追加される（Ｓ１３）。承認端末２がブロックの生成に成功することにより、Ｓ１１で送信されたトランザクションが確定（承認）される。
【００５８】
ここで、承認端末２は、Ｓ１１のトランザクションに基づいて、自身の分散台帳１１のデータ集合の各DBを更新し、更新後の各DBのハッシュ値を、生成するブロックのブロックヘッダに設定する。
【００５９】
また、承認端末２は、データ集合のステートDBを更新する際に、Ｓ１１のトランザクションに従って、所有権を移動したトークンの所有者アドレスを、利用者Ａのアドレスから利用者Ｂのアドレスに更新・変更する。また、本実施形態では、承認端末２は、所有者アドレスを更新した当該ブロックのブロック番号を、ステートDBに記憶する。例えば、図４のステートDB５４に示すように、所有権を移動するトークンのトークンIDが0005で、生成するブロックが#26000の場合、承認端末２は、所有者アドレスに利用者Ｂのアドレスを設定し、更新ブロック番号に当該ブロックの番号#26000をステートDBに設定する。
【００６０】
そして、承認端末２は、更新後のステートDBのハッシュ値を、生成するブロックのブロックヘッダに設定する。なお、Ｓ１３は、ネットワークに接続された全ての端末のうち、最も早くブロックの生成に成功した端末によって行われる処理である。
【００６１】
そして、端末間のゆるやかな同期により、Ｓ１１で送信されたトランザクションを含むブロックが、ネットワーク４に接続された全ての端末の分散台帳１１に反映される（Ｓ１４、Ｓ１５）。すなわち、全ての端末のブロックチェーン制御部１２は、自身が保持する分散台帳１１に、Ｓ１１のトランザクションを含むブロックを追加する。また、全ての端末のブロックチェーン制御部１２は、承認端末２と同様に、ブロックに含まれるトランザクションに基づいて、自身の分散台帳１１のデータ集合のステートDBを更新する。
【００６２】
次に、トークンの所有権となった利用者Ｂが、利用者Ａから譲渡されたトークンの過去の履歴を探索する場合、Ｓ１６以降の処理を行う。具体的には、利用者端末１Ｂは、最新のブロックにおける、前記トークンの所有者アドレス（ステートの値）を自身の分散台帳に問合せ（Ｓ１６）、分散台帳から最新のブロックの所有者アドレスと、更新ブロック番号とを取得する（Ｓ１７）。
【００６３】
例えば、最新ブロックが図４に示す#26001で、問い合わせ対象のトークンIDが0005の場合、利用者端末１Ｂは、自身の分散台帳のステートDB５４を参照し、所有者として利用者Ｂのアドレスと、更新ブロック番号として#26000とを取得する。これにより、利用者Ｂは、現在のトークンの所有者が自分であり、また、所有者の更新が#26000のブロックで行われたことを確認することができる。
【００６４】
そして、利用者Ｂは、トークンの過去の履歴を検索したい場合、Ｓ１８およびＳ１９の処理を繰り返し行う。すなわち、利用者端末１Ｂは、Ｓ１７で取得した更新ブロック番号に基づいて検索ブロック番号を算出する。ここでは、更新ブロック番号から「１」減算したブロック番号を検索ブロック番号とする。そして、利用者端末１Ｂは、検索ブロック番号を指定し、検索ブロック番号における、トークンの所有者アドレスを自身の分散台帳に問合せ（Ｓ１８）、分散台帳から指定したブロックにおける所有者アドレスと、更新ブロック番号とを取得する（Ｓ１９）。
【００６５】
例えば、図４のステートDBにおいて、Ｓ１７取得した更新ブロック番号が#26000でトークンIDが0005の場合、利用者端末１Ｂは、#26000から「1」減算したブロック番号#259999を指定して、分散台帳に問い合わせる。#259999のステートDBは、図４に示していないが、トークンID：0005に対する更新は#25771から#259999までは行われていないため、トークンID：0005に関する#259999のステートは、#25770のステートDB５２と同じである。したがって、利用者端末１Ｂは、#259999の分散台帳のステートDBを参照し、所有者アドレスとして利用者Ａのアドレス、および、更新ブロック番号として#25770を取得する。これにより、利用者Ｂは、トークンID：0005の前の所有者が利用者Ａであり、また、利用者Ａへの所有者の変更が#25770のブロックで行われたことを確認することができる。
【００６６】
そして、利用者端末１Ｂは、それ以前の過去の履歴を検索したい場合は、Ｓ１８およびＳ１９の処理を繰り返し行う。これにより、利用者Ｂは、トークンの過去の履歴を効率よく辿ることができる。
【００６７】
以上説明した本実施形態では、利用者端末１と、承認端末２とを備えるブロックチェーンシステムであって、利用者端末１は、スマートコントラクトのステート（変数）の値を更新するトランザクションを発行するトランザクション発行部１３を備え、承認端末２は、前記トランザクションを含むブロックを生成するとともに前記ステートの値を更新し、前記ブロックと、前記ステートの値を更新した当該ブロックの更新ブロック番号とをブロックチェーンシステムの端末の分散台帳１１に反映させるブロック生成部１５３を備える。
【００６８】
このように、本実施形態では、各端末の分散台帳１１のステートDBには、スマートコントラクトのステートの値が更新された時点で、更新のあったブロックの更新ブロック番号を、更新されたステートの値に付与する。これにより、利用者は、更新ブロック番号を辿ることで、過去の全てのブロックおよびトランザクションを参照することなく、分散台帳（ブロックチェーン）上で、データの履歴を容易に追跡することができる。すなわち、本実施形態では、スマートコントラクトのステートの値の過去の履歴および変遷を容易に取得することができる。
【００６９】
また、本実施形態では、スマートコントラクトの利用者に対して、トレーサビリティを向上することができる。従来のステートDBでは、過去のどのブロックでステートの値が更新または変更されたかの情報は保持されていなく、ステートの値がどのブロックの時点で遷移したのかを利用者は知ることは容易ではない。従来では、変更のあったブロック番号を知るためには、全てのブロックまたはトランザクションを探索する必要があり、利用者にとって大きな負荷となっていた。これに対して、本実施形態では、ステートDBにステートの値の変化点として、ブロック生成時点（採掘時点）のブロック番号を追跡したいステートの値に付加することで、当該ステートのトレーサビリティを向上することができる。
【００７０】
なお、上記説明した利用者端末１および承認端末２は、例えば、CPU（Central Processing Unit、プロセッサ）と、メモリと、ストレージ（HDD：Hard Disk Drive、SSD：Solid State Drive）と、通信装置と、入力装置と、出力装置とを備える汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、CPUがメモリ上にロードされた所定のプログラムを実行することにより、各装置の各機能が実現される。例えば、利用者端末１および承認端末２の各機能は、利用者端末１用のプログラムの場合は利用者端末１のCPUが、承認端末２用のプログラムの場合は承認端末２のCPUが、それぞれ実行することにより実現される。
【００７１】
また、利用者端末１用のプログラムおよび承認端末２用のプログラムは、HDD、SSD、USBメモリ、CD-ROM、DVD-ROM、MOなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
【００７２】
また、本発明は上記実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。
【００７３】
例えば、本実施形態では、承認端末２は、更新ブロック番号として、ステートの値が更新されたブロックのブロック番号を更新ブロック番号としてステートDBに設定した。しかしながら、更新ブロック番号の代わりに、検索用ブロック番号をステートDBに設定することとしてもよい。すなわち、承認端末２は、更新ブロック番号の代わりに、更新ブロック番号から「１」減算した検索ブロック番号をステートDBに設定することとしてもよい。この場合、利用者端末１は、ステートの過去の履歴を取得する際（図５のＳ１８）に、更新ブロック番号から検索ブロック番号を算出することなく、分散台帳から取得した検索ブロック番号をそのまま用いて、過去の履歴を辿ることができる。
【００７４】
また、本実施形態のステートDBは、図４に示すように１つのステート（所有者アドレス）を保持し、当該ステートに対応する１つの更新ブロック番号を保持することとした。しかしながら、ステートDBは複数のステートを保持することとしてもよい。この場合、複数のステートのそれぞれの追跡を行う場合、ステートDBは、各ステートごとに更新ブロック番号を備えるものとする。
【符号の説明】
【００７５】
１  ：利用者端末
２  ：承認端末
１１：分散台帳
１２：ブロックチェーン制御部
１３：トランザクション発行部
１４：履歴検索部
１５：ブロック発行部
１５１：コンセンサス実行部
１５２：トランザクション検証部
１５３：ブロック生成部
４  ：ブロックチェーンネットワーク
【図１】
2020080061.tif 000003
【図２】
2020080061.tif 000004
【図３】
2020080061.tif 000005
【図４】
2020080061.tif 000006
【図５】
2020080061.tif 000007
【図６】
2020080061.tif 000008