(57)【要約】ABI情報の改ざんを防ぎ、ユーザが安全にブロックチェーン上のデータを読み取ることを可能とする。登録端末１は、スマートコントラクトにアクセスするためのABI情報を、前記スマートコントラクトから抽出する抽出部１４２と、スマートコントラクトをコンパイルすることで生成されたバイトコードと、ABI情報とを含むトランザクションを発行するトランザクション発行部１３とを備え、承認端末２は、トランザクションに含まれるABI情報を用いてバイトコードにアクセス可能かを検証する検証部１５２と、アクセス可能な場合、トランザクションを含むブロックを生成し、前記ブロックおよび前記ABI情報を、ブロックチェーンシステムの端末の分散台帳１１に反映させるブロック生成部１５４と、を備える。
2019194267.tif 000002
【特許請求の範囲】
【請求項１】
スマートコントラクトを登録する登録端末と、前記スマートコントラクトを承認する承認端末とを備えるブロックチェーンシステムであって、
前記登録端末は、
前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報を、前記スマートコントラクトから抽出する抽出部と、
前記スマートコントラクトをコンパイルすることで生成されたバイトコードと、前記ABI情報とを含むトランザクションを発行するトランザクション発行部と、を備え、
前記承認端末は、
前記トランザクションに含まれる前記ABI情報を用いて、前記トランザクションに含まれる前記バイトコードにアクセス可能かを検証する検証部と、
アクセス可能な場合、前記トランザクションを含むブロックを生成し、前記ブロックおよび前記ABI情報を、前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部と、を備えること
を特徴とするブロックチェーンシステム。
【請求項２】
請求項１記載のブロックチェーンシステムであって、
前記分散台帳は、前記ABI情報を格納するABI情報データベースを備え、
前記ブロック生成部は、前記スマートコントラクトのアドレスと前記ABI情報とを、自身の前記ABI情報データベースに登録し、登録後の前記ABI情報データベースのハッシュ値を、前記ブロックのヘッダに設定すること
を特徴とするブロックチェーンシステム。
【請求項３】
請求項１または２記載のブロックチェーンシステムであって、
前記分散台帳は、前記バイトコードを格納するステートデータベースを備え、
前記ブロック生成部は、前記バイトコードを自身の前記ステートデータベースに登録し、登録後の前記ステートデータベースのハッシュ値を、前記ブロックのヘッダに設定すること
を特徴とするブロックチェーンシステム。
【請求項４】
ブロックチェーンにスマートコントラクトを登録する登録端末であって、
前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報を、前記スマートコントラクトから抽出する抽出部と、
前記スマートコントラクトをコンパイルすることで生成されたバイトコードと、前記ABI情報とを含むトランザクションを発行するトランザクション発行部と、を備えること
を特徴とする登録端末。
【請求項５】
ブロックチェーンシステムにおいてトランザクションを承認する承認端末であって、
スマートコントラクトのバイトコードと、前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報とを含むトランザクションを受信する制御部と、
前記トランザクションに含まれる前記ABI情報を用いて、前記トランザクションに含まれる前記バイトコードにアクセス可能かを検証する検証部と、
アクセス可能な場合、前記トランザクションを含むブロックを生成し、前記ブロックおよび前記ABI情報を、前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部と、を備えること
を特徴とする承認端末。
【請求項６】
ブロックチェーンにスマートコントラクトを登録するスマートコントラクト登録方法であって、
前記スマートコントラクトを登録する登録端末は、
前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報を、前記スマートコントラクトから抽出する抽出ステップと、
前記スマートコントラクトをコンパイルすることで生成されたバイトコードと、前記ABI情報とを含むトランザクションを発行するトランザクション発行ステップと、を行い、
前記スマートコントラクトを承認する承認端末は、
前記トランザクションに含まれる前記ABI情報を用いて、前記トランザクションに含まれる前記バイトコードにアクセス可能かを検証する検証ステップと、
アクセス可能な場合、前記トランザクションを含むブロックを生成し、前記ブロックおよび前記ABI情報を、ブロックチェーンネットワークに接続された端末の分散台帳に反映させるブロック生成ステップと、を行うこと
を特徴とするスマートコントラクト登録方法。
【請求項７】
請求項４に記載の登録端末として、コンピュータを機能させることを特徴とするスマートコントラクト登録プログラム。
【請求項８】
請求項５に記載の承認端末として、コンピュータを機能させることを特徴とするスマートコントラクト登録プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックチェーンにスマートコントラクトを登録する技術に関する。
【背景技術】
【０００２】
中央集権的な管理を必要とせずに、信頼性を担保可能な仕組みがデジタル仮想通貨ビットコインを中心に普及しつつある。ブロックチェーンと呼ばれるこの仕組みにおいては、やり取りされる情報の信頼性が分散ネットワーク内の合意形成のプロセスによって担保され、かつ、改ざんや二重使用などの不正を系全体で防ぐことで健全性が保たれる。【０００３】
ブロックチェーンでは、参加者間の仮想通貨の取引情報（トランザクション）が「ブロック」という単位でまとめられ、各ブロックは数珠つなぎとなって時系列順に管理される。新たなブロックの承認は、Proof of Workなどの分散ネットワークにおける合意アルゴリズムによって形成される。新たなブロックの承認は、ブロック内部に記録された通貨取引が系全体で合意されたことを示す。【０００４】
このブロックチェーンを用いて管理される一連の取引情報の帳簿を「分散台帳」と呼び、ネットワークに参加する各ノード（端末）は同一の分散台帳を保持している。近年では、分散台帳に通貨取引だけでなく、高度なスクリプトコードを登録し、スクリプトコードの実行とその結果についても合意を得るブロックチェーン基盤技術も開発されている。例えばEthereumと呼ばれるブロックチェーン基盤は、トランザクションを入力としてスクリプトコードを実行し、その実行結果をツリー構造のキーバリュー型ストア（ワールドステートまたはステートDBと呼ぶ）に格納し、その時のストアの代表値もブロックに記録する分散台帳を持つ（非特許文献１）。【０００５】
仮想通貨では、トランザクションは「誰から誰へいくら渡した」といった通貨の取引記録のみに限定されたが、これら後継のブロックチェーン技術では、利用者自身がトランザクションとスクリプトコードによって記録する情報をプログラマブルに設定することができる。このようにブロックチェーン上に登録され、分散ノードに登録および実行されるスクリプトコードは「スマートコントラクト」と呼ばれている。【０００６】
一方で、ブロックチェーン技術の高い改ざん耐性、および、取引の追跡が容易であるという特徴を活かし、情報のトレーサビリティを確保する試みは多くなされている。例えば、非特許文献２には、3D プリンタを制御するシングルボードコンピュータをブロックチェーンノードとすることで、製造時にブロックチェーン上に製造物の情報を保存する技術が開示されている。また、非特許文献３には，サプライチェーンにおいて、ブロックチェーン上にデータを保存することで偽物商品の流通を検知するシステムが示されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】「Ethereumはどのように動いているのか」、http://coffeetimes.hatenadiary.jp/entry/2017/11/07/082426
【非特許文献２】阿部 涼介、斉藤 賢爾、村井 純、「パーソナルファブリケーション時代におけるBlockchainを用いた製造情報保存システム」、マルチメディア，分散，協調とモバイル(DICOMO2017)シンポジウム，2017年6月
【非特許文献３】Toyoda, Kentaroh, et al. "A Novel Blockchain-Based Product Ownership Management System (POMS) for Anti-Counterfeits in The Post Supply Chain." IEEE Access (2017).
【発明の概要】
【発明が解決しようとする課題】
【０００８】
非特許文献２および非特許文献３で示されているように、ブロックチェーン上のデータを読み出すためには、分散台帳上に登録されたスマートコントラクトに対して、専用のアプリケーションを用いてアクセスする必要がある。この専用のアプリケーションには、スマートコントラクトの読み出しのために必要な付加情報が含まれている。専用のアプリケーションは、ユーザにユーザインタフェースを提供すると共に、この付加情報を用いてブロックチェーン上に格納された情報にアクセスする。【０００９】
例えば、ブロックチェーン基盤の一つの実装であるEthereumでは、ブロックチェーンに格納する情報は、文字列の場合はASCII、整数の場合は16 進数などにエンコーディングされたバイトコード（機械語）である。そのため、格納された情報を読み出し、デコードするためには、バイトコードの他に、データ構造を知るための付加情報としてABI（Application Binary Interface）情報が必要である。すなわち、ユーザにとっては、ブロックチェーンに格納されたバイトコードを直に読み取ること（リバースエンジニアリング）は難しく、ABI情報を含む専用アプリケーションを用いて初めて意味のあるデータとしてデコードされる。【００１０】
ABI情報は、データ構造を知るスマートコントラクトの作成者しか本来知りえない情報であり、ユーザは、スマートコントラクトの作成者からABI情報を受け取る以外に方法はない。しかし、悪意のある作成者が、虚偽のABI情報を伝える可能性、または、読み出しのために提供する専用のアプリケーション上で不正を働き、ブロックチェーン上に保存された情報とは異なる情報を提供する可能性がある。【００１１】
特に、情報のトレーサビリティを確保するという観点において、上記の問題は顕著である。ユーザは、作成者から提供された専用のアプリケーションに表示されたトレーサビリティの結果（例えば食材の生産者や出荷経路）が真に信用できるかどうかを確認する手段はない。 【００１２】
本発明は、上記課題を鑑みてなされたものであり、本発明の目的は、ABI情報の改ざんを防ぎ、ユーザが安全にブロックチェーン上のデータを読み取ることを可能とする技術を提供することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明は、スマートコントラクトを登録する登録端末と、前記スマートコントラクトを承認する承認端末とを備えるブロックチェーンシステムであって、前記登録端末は、前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報を、前記スマートコントラクトから抽出する抽出部と、前記スマートコントラクトをコンパイルすることで生成されたバイトコードと、前記ABI情報とを含むトランザクションを発行するトランザクション発行部と、を備え、前記承認端末は、前記トランザクションに含まれる前記ABI情報を用いて、前記トランザクションに含まれる前記バイトコードにアクセス可能かを検証する検証部と、アクセス可能な場合、前記トランザクションを含むブロックを生成し、前記ブロックおよび前記ABI情報を、前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部と、を備える。【００１４】
本発明は、ブロックチェーンにスマートコントラクトを登録する登録端末であって、  前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報を、前記スマートコントラクトから抽出する抽出部と、前記スマートコントラクトをコンパイルすることで生成されたバイトコードと、前記ABI情報とを含むトランザクションを発行するトランザクション発行部と、を備える。【００１５】
本発明は、ブロックチェーンシステムにおいてトランザクションを承認する承認端末であって、スマートコントラクトのバイトコードと、前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報とを含むトランザクションを受信する制御部と、前記トランザクションに含まれる前記ABI情報を用いて、前記トランザクションに含まれる前記バイトコードにアクセス可能かを検証する検証部と、アクセス可能な場合、前記トランザクションを含むブロックを生成し、前記ブロックおよび前記ABI情報を、前記ブロックチェーンシステムの端末の分散台帳に反映させるブロック生成部と、を備える。【００１６】
本発明は、ブロックチェーンにスマートコントラクトを登録するスマートコントラクト登録方法であって、前記スマートコントラクトを登録する登録端末は、前記スマートコントラクトにアクセスするためのABI（Application Binary Interface）情報を、前記スマートコントラクトから抽出する抽出ステップと、前記スマートコントラクトをコンパイルすることで生成されたバイトコードと、前記ABI情報とを含むトランザクションを発行するトランザクション発行ステップと、を行い、前記スマートコントラクトを承認する承認端末は、前記トランザクションに含まれる前記ABI情報を用いて、前記トランザクションに含まれる前記バイトコードにアクセス可能かを検証する検証ステップと、アクセス可能な場合、前記トランザクションを含むブロックを生成し、前記ブロックおよび前記ABI情報を、ブロックチェーンネットワークに接続された端末の分散台帳に反映させるブロック生成ステップと、を行う。【００１７】
本発明は、上記登録端末として、コンピュータを機能させることを特徴とするスマートコントラクト登録プログラムである。【００１８】
本発明は、上記承認端末として、コンピュータを機能させることを特徴とするスマートコントラクト登録プログラムである。
【発明の効果】
【００１９】
本発明によれば、ABI情報の改ざんを防ぎ、ユーザが安全にブロックチェーン上のデータを読み取ることを可能とする技術を提供することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施形態に係るブロックチェーンシステムの全体構成を示す図である。
【図２】管理台帳の構成を示す図である。
【図３】スマートコントラクト登録部の構成を示す構成図である。
【図４】スマートコントラクトの一例を示す図である。
【図５】ブロック発行部の構成を示す構成図である。
【図６】トランザクションの一例を示す図である。
【図７】トランザクションの他の一例を示す図である。
【図８】スマートコントラクトの登録処理を示すシーケンス図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施の形態について、図面を参照して説明する。
【００２２】
図１は、本実施形態のブロックチェーンシステムの全体構成を示す図である。本実施形態のブロックチェーンは、ブロックチェーン基盤技術の１つであるEthereumを用いる。Ethereumは、ブロックチェーンを、状態遷移を記録する分散台帳として用いるためのアプリケーション開発プラットフォームである。
【００２３】
図１に示すブロックチェーンシステムは、スマートコントラクト登録端末１と、トランザクション承認端末２と、その他の端末３とを備える。これらの端末１〜３は、P2Pネットワークであるブロックチェーンネットワーク４（以下、「ネットワーク」という）に自律分散的に接続される。
【００２４】
スマートコントラクト登録端末１は、スマートコントラクトをブロックチェーンに登録する登録者のノードである。スマートコントラクト登録端末１は、スマートコントラクトのスクリプトコードをコンパイルし、トランザクションに含めてネットワーク４に送信する。
【００２５】
スマートコントラクト登録端末１は、分散台帳１１と、ブロックチェーン制御部１２と、トランザクション発行部１３と、スマートコントラクト登録部１４とを備える。分散台帳１１には、ブロックチェーン制御部１２を介して、当該ネットワーク４に接続された全ての端末１〜３と緩やかに同期することによって、リアルタイムに近い形で最新状態のブロックチェーンが記憶されている。本実施形態の分散台帳には、ブロックチェーンと、ブロックチェーンで管理されるデータ集合とが記憶されている。
【００２６】
ブロックチェーン制御部１２は、ネットワーク４に接続された端末と自律分散的に協調してブロックチェーンの系を維持する。ブロックチェーン制御部１２は、分散台帳１１にアクセスし、分散台帳１１のブロックチェーンおよびデータ集合を読み出し、または、更新する。トランザクション発行部１３は、トランザクションをネットワーク４に発行する。スマートコントラクト登録部１４は、スマートコントラクトを分散台帳１１（ブロックチェーン）に登録するためのトランザクションを生成する。
【００２７】
トランザクション承認端末２は、マイナーのノードであって、ネットワーク４に送信されたトランザクションを収集し、正当性を確認後に、承認作業を通じてブロックを生成する。トランザクション承認端末２は、分散台帳１１と、ブロックチェーン制御部１２と、トランザクション発行部１３と、ブロック発行部１５とを備える。トランザクション承認端末２の分散台帳１１、ブロックチェーン制御部１２およびトランザクション発行部１３は、スマートコントラクト登録端末１の分散台帳１１、ブロックチェーン制御部１２およびトランザクション発行部１３と同様である。
【００２８】
ブロック発行部１５は、ネットワーク４上に発行されたトランザクションを検証し、Proof of Workなどのブロック生成のためのコンセンサスアルゴリズム（合意アルゴリズム）に従い、ブロックの生成を試みる。
【００２９】
その他の端末３は、スマートコントラクト登録端末１およびトランザクション承認端末２以外の端末であり、スマートコントラクトを利用する利用者端末などが含まれる。ネットワーク４には、複数のその他の端末３が接続される。その他の端末３は、前述の分散台帳１１、ブロックチェーン制御部１２およびトランザクション発行部１３を備え、分散台帳１１に記録されたデータおよびトランザクションを相互に検証し、系を維持している。
【００３０】
図２は、ブロックチェーンを具備する分散台帳１１の構成を示す。本実施形態の分散台帳１１は、複数のブロック１１１から構成されるブロックチェーンと、ブロックチェーンで管理されるデータ集合１１２とを備える。
【００３１】
ブロック１１１は、ブロックヘッダ１１３、トランザクションリスト１１４などを有する。ブロックヘッダ１１３には、当該ブロックの時点の分散台帳１１全体の要約が設定される。図示する例では、ブロックヘッダ１１３には、データ集合１１２のある時点のスナップショットとして、データ集合１１２の要約値（ステートDBのハッシュ値、トランザクション集合のハッシュ値、ABI情報のハッシュ値など）が設定される。例えば、データ集合がマークルツリーなどのツリー構造で格納されている場合、要約値として、マークルツリーのルートハッシュが設定される。トランザクションリスト１１４は、当該ブロック１１１に含まれるトランザクションのリストである。 
【００３２】
データ集合１１２は、その用途および目的は限定されない。図示する分散台帳１１では、データ集合１１２として、例えば、ステートDBと、トランザクション集合DBと、ABI情報とを備える。
【００３３】
ステートDBは、あるブロックの時点でのスマートコントラクトの変数の状態（ステート）を管理するためのDBである。また、ステートDBには、スマートコントラクトのバイトコードが格納される。トランザクション集合DBは、あるブロックの時点でのトランザクションの集合を示すDBである。トランザクションの集合は、あるブロックの時点での全てのトランザクションによって構成されるマークルツリーを意味する。
【００３４】
本実施形態では、データ集合１１２として、ステートDBに登録された全てのスマートコントラクトのABI情報を管理するABI情報DBを備える。ABI情報DBは、Key-Value Store(KVS)として機能し、スマートコントラクトを一意に指定する識別情報（例えば、スマートコントラクトのアドレス）が入力されると、当該スマートコントラクトが使用するABI情報を出力する。ABI （Application Binary Interface）情報は、スマートコントラクトのデータ構造を知るための付加情報であり、例えば変数（データ）の型、関数などが含まれる。
【００３５】
なお、Ethereumでは、スマートコントラクトのバイトコードを、分散台帳１１（ステートDB）に登録すると、当該スマートコントラクトを示す識別情報が付与される。識別情報に対して、仮想通貨の送金と同様にトランザクションを送信することができるため、スマートコントラクトの識別情報はアドレスとも呼ばれる。ユーザのアドレスへの送金との違いは、スマートコントラクトのアドレス宛てにトランザクションを送信すると、当該スマートコントラクトが実行されることである。
【００３６】
図３は、スマートコントラクト登録端末１が具備するスマートコントラクト登録部１４の構成を示す構成図である。スマートコントラクト登録部１４は、コンパイラ１４１と、ABI情報抽出部１４２と、トランザクション生成部１４３とを備える。
【００３７】
コンパイラ１４１は、スマートコントラクトの作成者が作成した、スマートコントラクトのスクリプトコードを受け付けてコンパイルして、バイトコードを生成する。本実施形態では、バイトコードに変換されたスマートコントラクトにアクセスするためのABI情報も、バイトコードと併せてトランザクションに含める。そのため、ABI情報抽出部１４２が、スクリプトコードのコンパイルと並行して、コンパイラに入力されたスクリプトコードの構文を解析し、スマートコントラクトのバイトコードにアクセスするためのABI情報を抽出（生成）する。トランザクション生成部１４３は、スマートコントラクトのバイトコードと、ABI情報とを含むトランザクションを生成し、トランザクション発行部１３に受け渡す。
【００３８】
図４に、コンパイル前のスマートコントラクトのスクリプトコード４１と、コンパイル後のスマートコントラクトのバイトコード４２と、ABI情報４３との一例を示す。スクリプトコード（ソースコード）は、コンパイル時に不可逆に圧縮され、バイトコードから元のスクリプトコードを復元することはできない。ユーザは、ABI情報を用いて、バイトコードの機能（例えば、データ更新、データ参照など）を利用することができる。
【００３９】
図５は、トランザクション承認端末２が具備するブロック発行部１５の構成を示す構成図である。ブロック発行部１５は、トランザクションを検証し、Proof of Workなどのブロック生成のためのコンセンサスアルゴリズムに従い、ブロックの生成を試みる。図示するブロック発行部１５は、コンセンサス実行部１５１と、ABI情報検証部１５２と、トランザクション検証部１５３と、ブロック生成部１５４とを備える。
【００４０】
トランザクション検証部１５３は、ネットワーク４よりトランザクションを受け取ると、受け取ったトランザクションの電子署名の正当性などのトランザクションの検証を行う。また、トランザクション検証部１５３は、受け取ったトランザクションにスマートコントラクトのバイトコードが含まれる場合、当該バイトコードの正当性を検証する。具体的には、トランザクション検証部１５３は、ブロックチェーンのプロトコル仕様に則ったバイトコードか否かを検証する。例えば、Ethereumの場合は、EVMと呼ばれる実行環境で動作するオペコードが使われているか、バイトコードが規定する容量を超えていないか、などを検証する。
【００４１】
このとき、トランザクション検証部１５３によるスマートコントラクトのバイトコードの検証処理と並行して、ABI情報検証部１５２が、同じトランザクションに含まれるABI情報の正当性についても検証する。すなわち、ABI情報検証部１５２は、トランザクションに含まれるABI情報を用いて、トランザクションに含まれるバイトコードにアクセス可能かを検証する。具体的には、ABI情報検証部１５２は、受け取ったトランザクションに含まれるABI情報に記載されているインタフェース仕様を用いて、当該トランザクションに含まれるバイトコードで定義されている変数名や型に適合してアクセス可能か否かを検証する。
【００４２】
ブロック生成部１５４は、所定の時間内にネットワーク４上で発行されたトランザクションをまとめて１つのブロックを生成する。本実施形態では、ブロック生成部１５４は、トランザクション検証部１５３による検証に成功し、ABI情報検証部１５２による検証に成功した場合（ABI情報を用いてバイトコードにアクセスが可能な場合）、当該トランザクションを含むブロックを生成し、ネットワーク４に接続される全ての端末の分散台帳１１に生成したブロックを反映させる。
【００４３】
ここで、ブロック生成部１５４は、バイトコードおよびABI情報を含むトランザクションに基づいて、自身の分散台帳１１のデータ集合の各DBを更新し、更新後の各DBのハッシュ値を、生成するブロックのブロックヘッダに設定する。例えば、ブロック生成部１５４は、トランザクションに含まれるスマートコントラクトのバイトコードに、当該スマートコントラクトを一意に識別するためのアドレスを付与する。そして、ブロック生成部１５４は、付与したアドレスとトランザクションに含まれるABI情報とを、自身の分散台帳１１のABI情報DBに登録（格納）し、登録後のABI情報DBのハッシュ値を、生成するブロックのブロックヘッダに設定する。
【００４４】
コンセンサス実行部１５１は、ハッシュ演算などコンセンサス（合意）に必要な計算を実施する。コンセンサスアルゴリズムは、ビットコインで用いられているProof of Work以外にも、所持コイン量をリソースとしたProof of Stake、ビザンチン故障における合意アルゴリズムであるPBFTなど、その他のブロック生成のためのコンセンサスアルゴリズムを用いても良い。
【００４５】
図６および図７を用いて、スマートコントラクト登録端末１が、スマートコントラクトを登録するために発行するトランザクションの構造について説明する。図６および図７は、スマートコントラクト登録端末１が発行するトランザクションの例である。
【００４６】
図６に示すトランザクションには、通常のトランザクションと同様に、宛先、支払額、スマートコントラクトのバイトコードなどが含まれる。さらに、本実施形態のトランザクションには、ABI情報が含まれる。また、トランザクションには、通常のトランザクションと同様に、電子署名（署名値v,r,s）が含まれる。本実施形態では、トランザクションの発信者（ここでは、スマートコントラクト登録端末１）は、ABI情報を含む全てのデータ（宛先、支払額、バイトコード、ABI情報）に対して署名（電子署名）を付加する。
【００４７】
図７に示すトランザクションには、図６に示すトランザクションのデータに、バイトコードおよびABI情報に対応する、コンパイル前のスクリプトコード７１（図４のスクリプトコード４１）を、さらに含む。この場合、スクリプトコード７１に対しては、署名を行わない。したがって、図６の署名値と、図７の署名値は、同じ値である。
【００４８】
スクリプトコードは、トランザクション承認端末２が検証する際に、バイトコードとABI情報との対応の正当性を検証するために用いられる。すなわち、図７のトランザクションの場合、トランザクション検証部１５３およびABI情報検証部１５２は、より精緻なトランザクションの検証、および、ABI情報の検証が可能となる。
【００４９】
例えば、図６のトランザクションの場合は、スマートコントラクトに対応する全てのABI情報ではなく、ABI情報の一部だけを記載して格納する可能性がある（すなわち、ABI情報の一部の変数および型を隠して公開する）。これに対し、図７のトランザクションの場合は、コンパイル前の元のスクリプトコードもトランザクションに含まれるため、トランザクション承認端末２は、完全なバイトコードとABI情報とを用いて、全ての変数およびその型が、正しく存在するか否かを検証することができる。
【００５０】
なお、トランザクション承認端末２のブロック生成部１５４は、検証終了後に、トランザクションからスクリプトコード７１を削除して、ブロックを生成する。これにより、スクリプトコード７１は分散台帳１１に格納されない。
【００５１】
図８は、本実施形態におけるスマートコントラクトの登録から利用までの処理を示すシーケンスである。
【００５２】
スマートコントラクト登録端末１（スマートコントラクト登録部１４）は、スマートコントラクトのスクリプトコードをコンパイルしてバイトコードを生成するとともに、スマートコントラクトのスクリプトコードからABI情報を抽出し、バイトコードおよびABI情報を含むトランザクションを生成するする（Ｓ１１）。なお、当該トランザクションは、スマートコントラクトを分散台帳１１に登録するための登録用トランザクションである。
【００５３】
そして、スマートコントラクト登録端末１（トランザクション発行部１３）は、バイトコードおよびABI情報を含むトランザクションを発行する（Ｓ１２）。具体的には、スマートコントラクト登録端末１が、Ｓ１１で生成したトランザクションを、ネットワーク４上にブロードキャストする。これにより、トランザクションは、ネットワーク４に接続された全ての端末に伝搬される。
【００５４】
そして、トランザクション承認端末２（ブロック発行部１５）は、Ｓ１２で送信されたトランザクションを検証（マイニング）する（Ｓ１３）。そして、トランザクション承認端末２は、当該トランザクションを、所定の時間内に発生した他のトランザクションとまとめて１つのブロックを生成し、当該ブロックがナンスのマイニングを経て自身の分散台帳１１のブロックチェーンに追加される。トランザクション承認端末２がブロックの生成に成功することにより、Ｓ１２で送信されたトランザクションが確定（承認）される。
【００５５】
ここで、トランザクション承認端末２は、Ｓ１２のトランザクションに基づいて、自身の分散台帳１１のデータ集合の各DBを更新し、更新後の各DBのハッシュ値を、生成するブロックのブロックヘッダに設定する。
【００５６】
例えば、トランザクション承認端末２は、Ｓ１２で送信されたトランザクションに含まれるスマートコントラクト（バイトコード）に、当該スマートコントラクトを一意に識別するためのアドレス（識別情報）を算出し、付与する。アドレスは、スマートコントラクトを含むトランザクションを送信した送信元のアドレスなどを用いて、誰でも決定論的に算出可能である。そして、トランザクション承認端末２は、付与したアドレスとトランザクションに含まれるABI情報とを、自身の分散台帳１１のABI情報DBに登録（格納）し、登録後のABI情報DBのハッシュ値を、生成するブロックのブロックヘッダに設定する。
【００５７】
また、トランザクション承認端末２は、トランザクションに含まれるバイトコードを自身の分散台帳の１１のステートDBに登録し、登録後のステートDBのハッシュ値を、生成するブロックのブロックヘッダに設定する。
【００５８】
なお、Ｓ１３は、ネットワークに接続された全ての端末のうち、最も早くブロックの生成に成功した端末によって行われる処理である。
【００５９】
そして、端末間のゆるやかな同期により、Ｓ１２で送信されたトランザクションを含むブロックが、ネットワーク４に接続された全ての端末の分散台帳１１（ブロックチェーン）に反映される（Ｓ１４、Ｓ１５）。すなわち、全ての端末のブロックチェーン制御部１２は、自身が保持する分散台帳１１に、Ｓ１２のトランザクションを含むブロックを追加する。また、全ての端末のブロックチェーン制御部１２は、トランザクション承認端末２と同様に、ブロックに含まれるトランザクションに基づいて、自身の分散台帳１１のデータ集合の各DBを更新する。
【００６０】
スマートコントラクト登録端末１（スマートコントラクト登録部１４）は、Ｓ１２で送信したトランザクションのスマートコントラクト（バイトコードおよびABI情報）が自身の分散台帳１１に登録された後、当該スマートコントラクトのアドレスを取得する（Ｓ１６）。例えば、スマートコントラクト登録端末１は、Ｓ１３でトランザクション承認端末が実施したアドレスの算出と同様の方法で、決定論的にアドレスを算出する。
【００６１】
そして、スマートコントラクト登録端末１（スマートコントラクト登録部１４）は、利用者端末３に対し、スマートコントラクトの格納場所を示すアドレスを通知または周知する（Ｓ１７）。利用者端末３へのアドレスの通知タイミングおよび通知手段は、どのようなものであってもよい。例えば、スマートコントラクト登録端末１は、アドレスをWebサイトへ掲示する、または、アドレスを含むメールを利用者端末３に送信するなどにより、所定のタイミングでアドレスを通知する。また、スマートコントラクト登録端末１は、アドレスを含むトランザクションをネットワークに発行することで、ブロックチェーンを用いてアドレスを利用者端末３に通知することとしてもよい。
【００６２】
本実施形態では、各端末の分散台帳１１にはABI情報が格納されているため、スマートコントラクト登録端末１は、アドレスとともにABI情報を通知する必要はなく、アドレスのみを通知すればよい。
【００６３】
利用者端末３は、分散台帳１１のABI情報DBに対し、通知されたアドレスをキーとして自身の分散台帳１１のABI情報DBに問い合わせ、アドレスに対応するABI情報を取得する（Ｓ１８）。そして、利用者端末３は、取得したABI情報を用いて、スマートコントラクトの実行を要求するためのトランザクションを発行する（Ｓ１９）。すなわち、利用者端末３は、スマートコントラクトに記載のロジックに従って処理（例えば。デジタルコンテンツの権利者の変更など）を実行するためのトランザクションを発行する。当該トランザクションには、ABI情報を用いて生成した、スマートコントラクトに記載の特定のロジックを実行する命令コードなどが含まれる。
【００６４】
トランザクション承認端末２（ブロック発行部１５）は、Ｓ１３と同様に、Ｓ１９で送信されたトランザクションを検証し、当該トランザクションを所定の時間内に発生した他のトランザクションとまとめて１つのブロックを生成する（Ｓ２０）。
【００６５】
トランザクション承認端末２は、Ｓ１９で送信されたトランザクションを検証することで、当該トランザクションで指定されたスマートコントラクトを実行する。これにより、トランザクション承認端末２は、ブロックチェーンで管理するスマートコントラクトの値を書き換えるため、自身の分散台帳１１のスマートコントラクトの値（状態）を管理するステートDBを更新する。
【００６６】
ブロックの生成に成功した場合、Ｓ１４およびＳ１５と同様に、端末間のゆるやかな同期により、当該トランザクションを含むブロックが、ネットワーク４に接続された全ての端末の分散台帳１１（ブロックチェーン）に反映される（Ｓ２１、Ｓ２２）。したがって、利用者端末３が要求したスマートコントラクトの実行結果が、全ての端末の分散台帳１１に反映される。
【００６７】
以上説明した本実施形態では、スマートコントラクト登録端末１は、スマートコントラクトにアクセスするためのABI情報をスマートコントラクトから抽出し、スマートコントラクトをコンパイルすることで生成されたバイトコードとABI情報とを含むトランザクションを発行する。そして、トランザクション承認端末２は、トランザクションに含まれるABI情報を用いて、トランザクションに含まれるバイトコードにアクセス可能かを検証し、アクセス可能な場合、トランザクションを含むブロックを生成し、当該ブロックおよびABI情報を、ブロックチェーンシステムの端末の分散台帳１１に反映させる。
【００６８】
このように、本実施形態では、各端末の分散台帳１１には、トランザクション承認端末２により検証済みのABI情報が登録される。このため、スマートコントラクトの利用者は、スマートコントラクトの作成者（登録者）が提供する、閲覧用の専用のアプリケーションを用いることなく、分散台帳１１に登録されたスマートコントラクトのバイトコードを利用することができる。
【００６９】
また、本実施形態では、スマートコントラクトの利用者は、作成者による専用のアプリケーションが配信されなくても、自身の端末の分散台帳１１のABI情報を用いることで、スマートコントラクトを利用することができる。
【００７０】
したがって、本実施形態では、スマートコントラクトの作成者によるABI情報の改ざんを防止し、利用者が安全にブロックチェーン上のデータを読み取ることができる。すなわち、悪意のある作成者が、虚偽のABI情報を含む専用のアプリケーションを利用者に提供し、ブロックチェーン上に保存された情報とは異なる情報を利用者に提示することを防ぐことができる。また、利用者は、作成者から提供された専用のアプリケーションを用いてブロックチェーンから読み出した情報が、信用できるかどうかを確認することができる。
【００７１】
また、本実施形態では、スマートコントラクトの利用者に対して、トレーサビリティを向上することができる。従来のスマートコントラクト型ブロックチェーンでは、ABI情報を含む専用のアプリケーションがないと、どの変数が何の型で、何を意味するのかが不明であるため、ブロックチェーンに登録された値のトレース（追跡）が困難である。これに対して、本実施形態では、専用アプリケーションが配布されなくでも、分散台帳１１にABI情報が含まれているため、変数の型、変数名から何を意味するかがわかるため、トレーサビリティを向上することができる。
【００７２】
なお、上記説明したスマートコントラクト登録端末１、トランザクション承認端末２およびその他の端末３は、例えば、CPU（Central Processing Unit、プロセッサ）と、メモリと、ストレージ（HDD：Hard Disk Drive、SSD：Solid State Drive）と、通信装置と、入力装置と、出力装置とを備える汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、CPUがメモリ上にロードされた所定のプログラムを実行することにより、各装置の各機能が実現される。例えば、スマートコントラクト登録端末１、トランザクション承認端末２およびその他の端末３の各機能は、スマートコントラクト登録端末１用のプログラムの場合はスマートコントラクト登録端末１のCPUが、トランザクション承認端末２用のプログラムの場合はトランザクション承認端末２のCPUが、そして、その他の端末３用のプログラムの場合はその他の端末３のCPUがそれぞれ実行することにより実現される。
【００７３】
また、スマートコントラクト登録端末１用のプログラム、トランザクション承認端末２用のプログラムおよびその他の端末３用のプログラムは、HDD、SSD、USBメモリ、CD-ROM、DVD-ROM、MOなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
【００７４】
また、本発明は上記実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。
【００７５】
例えば、スマートコントラクト登録端末１により生成されるトランザクションに含まれるABI情報は、ABI情報そのものではなく、ABI情報から変換された情報、または、ABI情報の一部であってもよい。ABI情報から変換された情報としては、例えば、データ量を削減するため、ABI情報を圧縮し、圧縮後のABI情報をトランザクションに含めることとしてもよい。また、ABI情報の一部の情報としては、例えば、ABI情報から関数の部分を削除し、変数の型をトランザクションに含めることとしてもよい。
【符号の説明】
【００７６】
１  ：スマートコントラクト登録端末
２  ：トランザクション承認端末
３  ：利用者端末
１１：分散台帳
１２：ブロックチェーン制御部
１３：トランザクション発行部
１４：スマートコントラクト登録部
１４１：コンパイラ
１４２：ABI情報抽出部
１４３：トランザクション生成部
１５：ブロック発行部
１５１：コンセンサス実行部
１５２：ABI情報検証部
１５３：トランザクション検証部
１５４：ブロック生成部
【図１】
2019194267.tif 000003
【図２】
2019194267.tif 000004
【図３】
2019194267.tif 000005
【図４】
2019194267.tif 000006
【図５】
2019194267.tif 000007
【図６】
2019194267.tif 000008
【図７】
2019194267.tif 000009
【図８】
2019194267.tif 000010
【国際調査報告】
2019194267.tif 000011
2019194267.tif 000012
2019194267.tif 000013
2019194267.tif 000014