(57)【要約】【課題】スマートコントラクトのテスト方法及びテスト装置を提供する。【解決手段】  スマートコントラクトのテスト方法は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける論理リスクを検出するステップと、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定するステップと、該少なくとも１つの関数に基づいてスマートコントラクトをテストするステップとを含む。本発明の実施例によれば、スマートコントラクトをより具体的にテストすることができる。【選択図】図１
2019053729.tif 000002
【特許請求の範囲】
【請求項１】
スマートコントラクトのテスト方法であって、
論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、前記スマートコントラクトにおける論理リスクを検出するステップと、
前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、前記スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定するステップと、
前記少なくとも１つの関数に基づいて、前記スマートコントラクトをテストするステップと、を含む、方法。
【請求項２】
論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、前記論理リスクを検出するためのオペコードに前記箇所特定情報を追加することによって、前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成する、請求項１に記載の方法。
【請求項３】
前記スマートコントラクトに対してトポロジ解析を行い、全てのメタデータ間の呼び出し関係を示すためのトポロジマップを生成するステップと、
前記トポロジマップから最小エントリ関数集合を検索するステップであって、前記最小エントリ関数集合における各関数は何れも他のメタデータにより呼び出されず、前記最小エントリ関数集合には前記トポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれる、ステップと、
前記最小エントリ関数集合における各関数に基づいて、前記スマートコントラクトをテストするステップと、をさらに含む、請求項１に記載の方法。
【請求項４】
前記トポロジマップから、頻繁に呼び出される関数及び変数を検索するステップと、
検索された、頻繁に呼び出される関数及び変数に基づいて、前記スマートコントラクトをテストするステップと、をさらに含む、請求項３に記載の方法。
【請求項５】
以前のテストにおいて直接呼び出されなかった関数に基づいて、前記スマートコントラクトをテストするステップ、をさらに含む、請求項４に記載の方法。
【請求項６】
前記トポロジマップを生成するステップは、
マルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、マルチファイルスマートコントラクトについてのメタデータベースを構築するステップと、
前記メタデータベースに基づいて、全てのメタデータ間の呼び出し関係を生成するステップと、
前記呼び出し関係に基づいて、前記トポロジマップを生成するステップと、を含む、請求項３に記載の方法。
【請求項７】
全てのメタデータ間の呼び出し関係を生成する際に、関数及び修飾子が関数、イベント、修飾子及び変数を呼び出すことができ、且つイベント及び変数が呼び出されることしかできないという制限を設ける、請求項６に記載の方法。
【請求項８】
前記メタデータベースに基づいて全てのメタデータ間の呼び出し関係を生成する際に、多重継承及び／又は複数回継承の方法を用いて、呼び出されたメタデータがどのコントラクトに由来するかを決定する、請求項７に記載の方法。
【請求項９】
スマートコントラクトのテスト装置であって、
論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、前記スマートコントラクトにおける論理リスクを検出する論理リスク検出手段と、
前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、前記スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定する論理リスク箇所特定手段と、
前記少なくとも１つの関数に基づいて、前記スマートコントラクトをテストするテスト手段と、を含む、装置。
【請求項１０】
前記論理リスク検出手段は、論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、前記論理リスクを検出するためのオペコードに前記箇所特定情報を追加することによって、前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成する、請求項９に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理の分野に関し、具体的には、スマートコントラクトをより具体的にテストすることができるスマートコントラクトのテスト方法及びテスト装置に関する。
【背景技術】
【０００２】
イーサリアム（Ｅｔｈｅｒｅｕｍ）ブロックチェーンに基づくアプリケーションはますます普及しているが、イーサリアムブロックチェーン上のスマートコントラクト（ｓｍａｒｔ  ｃｏｎｔｒａｃｔ）に対する深刻な攻撃が存在している。ブロックチェーンのアプリケーション開発者にとって、スマートコントラクトのセキュリティ問題はますます重要になっている。従来の方法は、論理リスクを検出することができるが、論理リスクの箇所を特定することができない。また、スマートコントラクトの構造解析に関する従来の方法は、単一のファイルのみをサポートし、マルチファイル（ｍｕｌｔｉ−ｆｉｌｅ）スマートコントラクトの解析をサポートすることができない。また、ターゲットのテストケースの効率的な生成方法に関する情報は殆どない。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
以下は、本発明の態様を基本的に理解させるために、本発明の簡単な概要を説明する。なお、この簡単な概要は、本発明を網羅的な概要ではなく、本発明のポイント又は重要な部分を意図的に特定するものではなく、本発明の範囲を意図的に限定するものではなく、後述するより詳細的な説明の前文として、単なる概念を簡単な形で説明することを目的とする。
【０００４】
本発明は、上記の問題点を鑑み、従来技術の１つ又は複数の欠点を解決できるスマートコントラクトのテスト方法及びテスト装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の１つの態様では、スマートコントラクトのテスト方法であって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、前記スマートコントラクトにおける論理リスクを検出するステップと、前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、前記スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定するステップと、前記少なくとも１つの関数に基づいて、前記スマートコントラクトをテストするステップと、を含む、方法を提供する。
【０００６】
本発明のもう１つの態様では、スマートコントラクトのテスト装置であって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、前記スマートコントラクトにおける論理リスクを検出する論理リスク検出手段と、前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、前記スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定する論理リスク箇所特定手段と、前記少なくとも１つの関数に基づいて、前記スマートコントラクトをテストするテスト手段と、を含む、装置を提供する。
【０００７】
本発明の他の態様では、上記本発明の方法を実現するためのコンピュータプログラムコード及びコンピュータプログラムプロダクト、並びに上記本発明の方法を実現するためのコンピュータプログラムコードを記録しているコンピュータ読み取り可能な記憶媒体をさらに提供する。
【０００８】
以下は、本発明の利点がより明確になるように、図面を参照しながら本発明の好適な実施例を詳細に説明する。
【図面の簡単な説明】
【０００９】
本発明の他の特徴及び利点を理解させるために、図面を参照しながら本発明の各実施例を説明する。全ての図面において、同一又は類似の符号で同一又は類似の構成部を示している。ここで説明される図面は、好ましい実施例を例示するためのものであり、全ての可能な実施例ではなく、本発明の範囲を限定するものではない。
【図１】本発明の実施例に係るスマートコントラクトのテスト方法の流れの一例を示すフローチャートである。
【図２】本発明の実施例に係る論理リスクとして特定のコードラインを特定することの一例を示す図である。
【図３】本発明の実施例に係るオペコードのマッピングの一例を示す図である。
【図４】本発明の実施例に係る呼び出し関係の解析の一例を示す図である。
【図５】本発明の実施例に係るトポロジマップの一例を示す図である。
【図６】本発明の実施例に係る関数が修飾子を呼び出すことの一例を示す図である。
【図７】本発明の実施例に係る継承をサポートする解析の一例を示す図である。
【図８】本発明の実施例に係るテストすべき関数の一例を示す図である。
【図９】本発明の実施例に係るテストケースを自動的に生成することの一例を示す図である。
【図１０】本発明の実施例に係るスマートコントラクトのテスト装置の機能的構成の一例を示すブロック図である。
【図１１】本発明の実施例に係るスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法の流れの一例を示すフローチャートである。
【図１２】本発明の実施例に係るスマートコントラクトに対してトポロジ解析を行う方法の流れの一例を示すフローチャートである。
【図１３】本発明の実施例に適用可能な情報処理装置であるパーソナルコンピュータの例示的な構成を示すブロック図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら本発明の例示的な実施例を詳細に説明する。説明の便宜上、明細書には実際の実施形態の全ての特徴が示されていない。なお、実際に実施する際に、開発者の具体的な目標を実現するために、特定の実施形態を変更してもよい、例えばシステム及び業務に関する制限条件に応じて実施形態を変更してもよい。また、開発作業が非常に複雑であり、且つ時間がかかるが、本公開の当業者にとって、この開発作業は単なる例の作業である。
【００１１】
なお、本発明を明確にするために、図面には本発明に密に関連する装置の構成要件又は処理のステップのみが示され、本発明と関係のない細部が省略されている。
【００１２】
本発明の実施例の１つの態様では、スマートコントラクトのテスト方法を提供し、該スマートコントラクトのテスト方法は、論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、スマートコントラクトにおける論理リスクを検出し、箇所特定情報を用いて、検出された論理リスクの箇所として、スマートコントラクトにおける特定の関数を特定し、該特定の関数に基づいてスマートコントラクトをテストしてもよい。
【００１３】
以下、図面を参照しながら、本発明の実施例に係るスマートコントラクトのテスト方法を詳細に説明する。
【００１４】
まず、図１を参照しながら、本発明の実施例に係るスマートコントラクトのテスト方法１００の流れの一例を説明する。図１は本発明の実施例に係るスマートコントラクトのテスト方法１００の流れの一例を示すフローチャートである。図１に示すように、本発明の実施例に係るスマートコントラクトのテスト方法１００は、論理リスク検出ステップＳ１０２、論理リスク箇所特定ステップＳ１０４及びテストステップＳ１０６を含む。
【００１５】
論理リスク検出ステップＳ１０２において、論理リスク（ロジックリスク）を検出し、且つ論理リスクの箇所を特定するためのオペコード（ｏｐｃｏｄｅ）を用いて、スマートコントラクトにおける論理リスクを検出してもよい。一例として、コンパイラ（ｃｏｍｐｉｌｅｒ）を用いて、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを直接生成してもよい。該ステップにおいて、該論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトに論理リスクが含まれているか否かを検出できる。一例として、スマートコントラクトにおける４種類の論理リスク、即ちコールスタック（ｃａｌｌ  ｓｔａｃｋ）リスク、リエントラント性（ｒｅｅｎｔｒａｎｃｙ）リスク、タイムスタンプ依存（ｒｅｌｉａｎｃｅ  ｏｎ  ｔｉｍｅｓｔａｍｐ）リスク、及びトランザクション順序依存（ｔｒａｎｓａｃｔｉｏｎ  ｏｒｄｅｒ  ｄｅｐｅｎｄｅｎｃｙ）リスクを検出できる。
【００１６】
論理リスク箇所特定ステップＳ１０４において、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定してもよい。論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードには箇所特定情報が含まれ、該箇所特定情報に基づいて、スマートコントラクトにおける検出された論理リスクを含む関数の箇所を特定できる。即ち、ソースコードの構文解析により、論理リスクの箇所として、具体的な関数を特定してもよい。図２は本発明の実施例に係る論理リスクとして特定のコードラインを特定することの一例を示す図である。図２における破線枠に示すように、論理リスクの箇所として５行目を特定する。
【００１７】
テストステップＳ１０６においては、論理リスク箇所特定ステップＳ１０４において検出、箇所特定された少なくとも１つの関数に基づいて、スマートコントラクトをテストしてもよい。より具体的なテストケースを生成し、テスト効率を向上させるために、論理リスクの検出及び箇所特定により、スマートコントラクトをテストしてもよい。論理リスク箇所特定ステップＳ１０４において関数が検出され、且つその箇所が特定された場合、これらの関数にコードエラーが含まれると見なしてもよいため、より高い優先順位でこれらの関数をテストする必要がある。一例として、論理リスク箇所特定ステップＳ１０４において箇所が特定された少なくとも１つの関数に基づいて、情報を抽出してターゲットのテストケースを生成してもよい。これらのターゲットのテストケースを実行することで、動的実行の段階でコードエラーを検索することができるため、コードエラーをより簡単に検索できる。
【００１８】
上述したスマートコントラクトのテスト方法１００によれば、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける検出された論理リスクを含む少なくとも１つの関数の箇所を特定し、該少なくとも１つの関数に基づいてスマートコントラクトをテストすることで、スマートコントラクトをより具体的にテストすることができる。
【００１９】
スマートコントラクトのテスト方法１００では、好ましくは、論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、論理リスクを検出するためのオペコードに箇所特定情報を追加することによって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成してもよい。
【００２０】
通常、既存のオープンソースプログラムを用いてスマートコントラクトにおける論理リスクを検出でき、スマートコントラクトにおける４種類の論理リスク、即ちコールスタックリスク、リエントラント性リスク、タイムスタンプ依存リスク、及びトランザクション順序依存リスクを検出できる。
【００２１】
しかし、既存のオープンソースプログラムは、バイトコードから変換されたオペコード（該バイトコードから変換されたオペコードは、単なる論理リスクを検出するためのオペコードの一例を示すものであり、該オペコードを限定するものではなく、論理リスクを検出するためのオペコードは該バイトコードから変換されたオペコードに限定されない）を用いるものであり、このようなオペコードは箇所特定情報を有しないため、該オペコードは検出された論理リスクの箇所を特定することができない。
【００２２】
本発明の発明者の発見によると、スマートコントラクトのコンパイラからのオペコード（該スマートコントラクトのコンパイラからのオペコードは、単なる箇所特定情報を有するオペコードの一例を示すものであり、該オペコードを限定するものではなく、箇所特定情報を有するオペコードは該スマートコントラクトのコンパイラからのオペコードに限定されない）は、箇所特定情報を含むが、オフセット（ｏｆｆｓｅｔ）情報を含まないため、既存のオープンソースプログラムによりスマートコントラクトのコンパイラからのオペコードを直接実行することができない。従って、本発明は、バイトコードから変換されたオペコードとスマートコントラクトのコンパイラからのオペコードをマッピングし、バイトコードから変換されたオペコード箇所特定情報を追加することによって、論理リスクを検出し、且つ論理リスクの箇所を特定することができるオペコードを生成する、という方法を提供する。バイトコードから変換されたオペコードとスマートコントラクトのコンパイラからのオペコードをマッピングして得られたオペコード（該マッピングして得られたオペコードは、単なる論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードの一例を示すものであり、該オペコードを限定するものではなく、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードは該マッピングして得られたオペコードに限定されない）は、箇所特定情報を含むことができるため、検出された論理リスクの箇所を特定できる。
【００２３】
スマートコントラクトのコンパイラからのオペコードがノイズを含むため、マッピングを行う前に、スマートコントラクトのコンパイラからのオペコード集合（ｏｐｃｏｄｅ  ｓｅｔ）にオペコードを追加し、或いはオペコード集合からオペコードを削除するように、規則を設定してもよい。スマートコントラクトのコンパイラからのオペコードに対して上記の前処理を行った後に、マッピング処理を行ってもよい。図３は本発明の実施例に係るオペコードのマッピングの一例を示す図である。図３の左部分に示すように、既存のオープンソースプログラムにおけるバイトコードから変換されたオペコードはオフセット情報（「オフセット」）を含むが、箇所特定情報を欠いている。図３の中央部分に示すように、スマートコントラクトのコンパイラからのオペコードは箇所特定情報（「開始」及び「終了」）を含むが、オフセット情報を欠いている。既存のオープンソースプログラムにおけるバイトコードから変換されたオペコードとスマートコントラクトのコンパイラからのオペコードをマッピングすることで、図３の右部分に示すマッピング後のオフセット及び箇所特定情報を有するオペコードを取得でき、図３の右部分に示すように、マッピングして得られたオペコードはオフセット情報（「オフセット」）及び箇所特定情報（「開始」及び「終了」）両方を含む。このように、一旦既存のオープンソースプログラムから論理リスクを含むオペコードが検出されると、マッピングして得られたオペコードに含まれている箇所特定情報を用いて、論理リスクの箇所として特定のコードライン又は特定の関数を特定してもよい。
【００２４】
以上のことから、本発明の実施例のスマートコントラクトのテスト方法は、スマートコントラクトのコンパイラからの箇所特定情報を有するオペコードと既存のオープンソースプログラムにおけるバイトコードから変換されたオペコードをマッピングすることで、検出された論理リスクの箇所を特定できる。
【００２５】
また、スマートコントラクトのテストケースをより効果的に生成するために、本発明はマルチファイルスマートコントラクトのトポロジ解析方法を提供し、該方法を用いて、スマートコントラクトの呼び出し関係のトポロジマップを簡単に構築できる。該トポロジマップは、メタデータ（関数、イベント、修飾子、変数）間の呼び出し関係を表してもよい。好ましくは、本発明の実施例に係るスマートコントラクトのテスト方法１００は、スマートコントラクトに対してトポロジ解析を行い、全てのメタデータ間の呼び出し関係を示すためのトポロジマップを生成するステップと、トポロジマップから最小エントリ関数集合を検索するステップであって、最小エントリ関数集合における各関数は何れも他のメタデータにより呼び出されず、最小エントリ関数集合には該トポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれる、ステップと、最小エントリ関数集合における各関数に基づいて、スマートコントラクトをテストするステップと、をさらに含んでもよい。
【００２６】
好ましくは、トポロジマップを生成するステップは、マルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、マルチファイルスマートコントラクトについてのメタデータベースを構築するステップと、メタデータベースに基づいて、全てのメタデータ間の呼び出し関係を生成するステップと、呼び出し関係に基づいて、トポロジマップを生成するステップと、を含む。
【００２７】
通常、信頼性パーサ（ｒｅｌｉａｂｉｌｉｔｙ  ｐａｒｓｅｒ）（オープンソースプログラム）を用いて、スマートコントラクトの構文解析を行ってもよい。しかし、信頼性パーサは、一度にスマートコントラクトの１つのファイルのみを解析でき、マルチファイルスマートコントラクトの解析をサポートすることができない。また、信頼性パーサは、呼び出し関係の解析をサポートしていない。本発明では、信頼性パーサを用いてメタデータ（関数、イベント、修飾子、変数）を抽出し、マルチファイルスマートコントラクトのためのメタデータベースを構築し、その後、信頼性パーサを用いて全てのスマートコントラクトの各行を解析し、全てのメタデータ間の呼び出し関係を生成し、呼び出し関係に基づいてトポロジマップを生成してもよい（即ち、スマートコントラクトに対してトポロジ解析を行い、トポロジマップを生成してもよい）。
【００２８】
マルチファイルスマートコントラクトのためのメタデータベースを構築する際に、まず、信頼性パーサを用いてマルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、４種類のメタデータ、即ち関数、イベント、修飾子、変数を抽出する。全てのメタデータは、統一フォーマットでメタデータベースに記憶されている。
【００２９】
図４は本発明の実施例に係る呼び出し関係の解析の一例を示す図である。図４の左部分は、本発明の実施例のメタデータベースを示している。図４に示すように、全てのメタデータは統一フォーマットでメタデータベースに記憶され、例えば、全ての関数は「ｆｕｎｃＬｉｓｔ」という関数リストに記憶され、全てのイベントは「ｅｖｅｎｔＬｉｓｔ」に記憶され、全ての変数は「ｖａｒｉａＬｉｓｔ」に記憶されている。また、図４に具体的に図示されていないが、全ての修飾子は「ｍｏｄｉｆｉｅｒＬｉｓｔ」に記憶されてもよい。各メタデータは４つの要素を有し、関数を一例にすると、関数は「ｆｕｎｃＮａｍｅ」、「ｓｔｒｕｃｔＴｙｐｅ」、「ｆｉｌｅＮａｍｅ」、「ｓｔｒｕｃｔＮａｍｅ」という４つの要素を有する。ここで、「ｆｕｎｃＮａｍｅ」は関数名を表し、「ｓｔｒｕｃｔＴｙｐｅ」は該関数がどのライブラリ又はコントラクトに由来するかを表し、「ｆｉｌｅＮａｍｅ」は該関数がどのファイルに所在するかを表し、「ｓｔｒｕｃｔＮａｍｅ」は該関数がどのコントラクト又はライブラリに由来するかを表す。このような４つの要素を用いることで、メタデータの一意性を確保できる。
【００３０】
メタデータベースを取得した後に、信頼性パーサを用いてスマートコントラクトの各コードラインを解析してもよい。信頼性パーサは、構文解析ツールであるため、信頼性パーサにより特定のメタデータが他のメタデータを呼び出したことを知ることができるが、信頼性パーサにより該呼び出されたメタデータの由来を知ることができない。図４の右部分に示すように、構築されたメタデータベースにより、呼び出されたメタデータの情報を取得できるため、呼び出し関係を構築できる。
【００３１】
図４の「呼び出し関係」では、各関数はｉｎｖｏｋｅＦｕｎｃＬｉｓｔを含み、ｉｎｖｏｋｅＦｕｎｃＬｉｓｔには該特定の関数の呼び出された関数が記憶されている。該呼び出し関係を用いることで、全てのメタデータ間の呼び出し関係を示すトポロジマップを取得できる。図５は本発明の実施例に係るトポロジマップの一例を示す図である。図５では、Ｔｒａｎｓｆｅｒがイベントであり、ｓｅｎｄＣｏｉｎ、ＭｅｔａＣｏｉｎ、ｇｅｔＢａｌａｎｃｅ、ｃｏｎｖｅｒｔ及びｇｅｔＢａｌａｎｃｅＩｎＥｔｈが関数であり、ｂａｌａｎｃｅｓが変数であり、ｖｅｒｉｆｙが修飾子であると仮定し、図５はＴｒａｎｓｆｅｒ、ｓｅｎｄＣｏｉｎ、ｖｅｒｉｆｙ、ｂａｌａｎｃｅｓ、ＭｅｔａＣｏｉｎ、ｇｅｔＢａｌａｎｃｅ、ｃｏｎｖｅｒｔ及びｇｅｔＢａｌａｎｃｅＩｎＥｔｈの間の呼び出し関係を示している。
【００３２】
好ましくは、全てのメタデータ間の呼び出し関係を生成する際に、関数及び修飾子が関数、イベント、修飾子及び変数を呼び出すことができ、且つイベント及び変数が呼び出されることしかできないという制限を設けてもよい。図６は本発明の実施例に係る関数が修飾子を呼び出すことの一例を示す図である。図６の左部分から分かるように、ＯｎｌｙＢｕｙｅｒ、ＯｎｌｙＳｅｌｌｅｒ及びｉｎＳｔａｔｅは修飾子であり、ａｂｏｒｔは関数であり、図６の右部分のトポロジマップにおいて、関数ａｂｏｒｔは修飾子ＯｎｌｙＳｅｌｌｅｒ及びｉｎＳｔａｔｅを呼び出した。
【００３３】
好ましくは、メタデータベースに基づいて全てのメタデータ間の呼び出し関係を生成する際に、多重継承及び／又は複数回継承の方法を用いて、呼び出されたメタデータがどのコントラクトに由来するかを決定する。
【００３４】
マルチファイルスマートコントラクトには複数のコントラクトが存在し、メタデータが他のメタデータを呼び出したと解析により分かった場合、該他のメタデータの由来を知る必要があるため、メタデータベースにおける検索の制限を追加する必要がある。ここで、コントラクト間の継承情報を十分に利用してもよく、キーワード「ｉｓ」で継承を表してもよい。多重継承及び複数回継承という２種類の継承が存在する。図７は本発明の実施例に係る継承をサポートする解析の一例を示す図である。
【００３５】
図７の「ＳｏｌファイルＢ」における「Ｂ１  ｉｓ  Ａ１，Ａ２」から分かるように、コントラクトＢ１は２つのコントラクトＡ１及びＡ２を継承し、即ち多重継承に該当し、該多重継承はＢ１  ｉｓ  Ａ１，Ａ２で表されてもよい。図７の「ＳｏｌファイルＢ」における「Ｂ２  ｉｓ  Ｂ１」、「Ｂ１  ｉｓ  Ａ１，Ａ２」から分かるように、コントラクトＢ２はコントラクトＢ１を継承し、コントラクトＢ１は２つのコントラクトＡ１及びＡ２を継承し、即ち複数回継承に該当し、該複数回継承はＢ２  ｉｓ  Ｂ１  ｉｓ  Ａ１，Ａ２で表されてもよい。
【００３６】
以下は、Ｂ２における関数ｂ２を一例にして、継承に基づいて呼び出されたメタデータがどのコントラクトに由来するかを決定する方法を説明する。図７では、コントラクトＢ２における関数ｂ２がｂ１及びａ２を呼び出し、コントラクトＢ２がコントラクトＢ１を継承し、且つコントラクトＢ１がコントラクトＡ１及びＡ２を継承するため、関数ｂ２について、メタデータベースにおいてｂ１及びａ２を検索する際に「ｓｔｒｕｃｔＮａｍｅ」の制限をＢ１又はＡ１又はＡ２に設定し、関数ｂ１がコントラクトＢ１に由来し、関数ａ２がコントラクトＡ１に由来すると分かったため、呼び出し関係を構築でき、図７の右部分に示すトポロジマップを取得できる。
【００３７】
以上のことから、本発明の実施例に係るスマートコントラクトのテスト方法は、統一フォーマットでメタデータを記憶し、メタデータベースにおいてメタデータを検索するための制限を定義することで、マルチファイルスマートコントラクトを解析できる。
【００３８】
また、上述したように、本発明の実施例に係るスマートコントラクトのテスト方法１００は、トポロジマップから最小エントリ関数集合を検索してもよい。ここで、最小エントリ関数集合における各関数は何れも他のメタデータにより呼び出されず、且つ最小エントリ関数集合には該トポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれている。最小エントリ関数集合における各関数をテストすることで、殆どのメタデータ（又はスマートコントラクトのコード）をカバーできる。
【００３９】
好ましくは、本発明の実施例に係るスマートコントラクトのテスト方法１００は、トポロジマップから、頻繁に呼び出される関数及び変数を検索するステップと、検索された、頻繁に呼び出される関数及び変数に基づいて、スマートコントラクトをテストするステップとをさらに含んでもよい。他のメタデータにより頻繁に呼び出されたメタデータに問題が生じやすいため、これらのメタデータをテストする必要がある。上述したように、見つかった頻繁に呼び出された関数及び変数に基づいて、スマートコントラクトをテストしてもよい。
【００４０】
好ましくは、本発明の実施例に係るスマートコントラクトのテスト方法１００は、以前のテストにおいて直接呼び出されなかった関数に基づいて、スマートコントラクトをテストするステップをさらに含んでもよい。例えば、以前のテストにおいて直接呼び出されなかった関数がまだ存在し、コードエラーの発生を回避するようにこれらの関数をテストする必要がある。
【００４１】
図８は本発明の実施例に係るテストすべき関数の一例を示す図である。図８では、ｂａｌａｎｃｅｓは変数であり、Ｔｒａｎｓｆｅｒ、ＳｅｎｄＣｏｉｎ、ＭｅｔａＣｏｉｎ、ｇｅｔＢａｌａｎｃｅ、ｃｏｎｖｅｒｔ及びｇｅｔＢａｌａｎｃｅＩｎＥｔｈは何れも関数である。関数Ｔｒａｎｓｆｅｒが検出された論理リスクを含む関数であり、比較的に高い優先順位で該関数をテストする必要があると仮定する。関数ＳｅｎｄＣｏｉｎ、ＭｅｔａＣｏｉｎ、ｇｅｔＢａｌａｎｃｅＩｎＥｔｈにより構成された集合における各関数は何れも他のメタデータにより呼び出されておらず、且つ該集合には図８に示すトポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれているため、関数ＳｅｎｄＣｏｉｎ、ＭｅｔａＣｏｉｎ、ｇｅｔＢａｌａｎｃｅＩｎＥｔｈにより構成された集合は最小エントリ関数集合である。該最小エントリ関数集合における各関数に基づいて、スマートコントラクトをテストしてもよい。関数ｇｅｔＢａｌａｎｃｅがＳｅｎｄＣｏｉｎ及びｇｅｔＢａｌａｎｃｅＩｎＥｔｈによりそれぞれ呼び出され、即ち関数ｇｅｔＢａｌａｎｃｅが２回呼び出されたため、関数ｇｅｔＢａｌａｎｃｅは頻繁に呼び出された関数である。変数ｂａｌａｎｃｅｓがＳｅｎｄＣｏｉｎ、ＭｅｔａＣｏｉｎ及びｇｅｔＢａｌａｎｃｅによりそれぞれ直接呼び出され、且つｇｅｔＢａｌａｎｃｅを介してｇｅｔＢａｌａｎｃｅＩｎＥｔｈにより間接に呼び出され、即ち変数ｂａｌａｎｃｅｓが４回呼び出されたため、変数ｂａｌａｎｃｅｓは頻繁に呼び出された変数である。見つかったこれらの頻繁に呼び出された関数及び変数に基づいて、スマートコントラクトをテストしてもよい。関数ｃｏｎｖｅｒｔが以前のテストにおいて直接呼び出されなかったため、該以前のテストにおいて直接呼び出されなかった関数に基づいて、スマートコントラクトをテストしてもよい。
【００４２】
上述したようにテストすべき関数が決定された後に、テストすべき関数に基づいてテストケースを生成してもよい。テストケースを自動的に生成するように、信頼性パーサを用いて、対応する関数情報、例えば関数名、パラメータ名、パラメータタイプ等を抽出してもよい。図９は本発明の実施例に係るテストケースを自動的に生成することの一例を示す図である。図９の左部分に示すように、関数ａｄｄＳｔａｔｉｏｎ、ａｄｄＥＶ、ａｄｄＯｎｅＢａｔｔｅｒｙは、選択されたテストすべき関数である。これらのテストすべき関数に基づいて、図９の右部分に示すテストケースを生成できる。以上のことから、本発明の実施例に係るスマートコントラクトのテスト方法は、論理リスクの検出及びその箇所の特定、並びにトポロジ解析により、テストすべき関数を選択でき、選択されたテストすべき関数に基づいてより具体的なテストケースを自動的に生成できるため、テスト効率を向上できる。
【００４３】
上述したように、本発明の実施例に係るスマートコントラクトのテスト方法は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける検出された論理リスクを含む少なくとも１つの関数の箇所を特定し、該少なくとも１つの関数に基づいてスマートコントラクトをテストすることで、スマートコントラクトをより具体的にテストすることができる。また、本発明の実施例に係るスマートコントラクトのテスト方法は、スマートコントラクトのコンパイラからの箇所特定情報を有するオペコードと既存のオープンソースプログラムにおけるバイトコードから変換されたオペコードをマッピングすることで、検出された論理リスクの箇所を特定できる。従来のスマートコントラクトの構造解析はマルチファイルスマートコントラクトをサポートしないが、本発明の実施例に係るスマートコントラクトのテスト方法は、統一フォーマットでメタデータを記憶し、メタデータベースにおいてメタデータを検索するための制限を定義することで、マルチファイルスマートコントラクトを解析できる。本発明の実施例に係るスマートコントラクトのテスト方法は、論理リスクの検出及びその箇所の特定、並びにトポロジ解析により、テストすべき関数を選択でき、選択されたテストすべき関数に基づいてより具体的なテストケースを自動的に生成できるため、テスト効率を向上できる。
【００４４】
上述したスマートコントラクトのテスト方法の実施例と同様に、本発明はスマートコントラクトのテスト装置の実施例をさらに提供する。
【００４５】
図１０は本発明の実施例に係るスマートコントラクトのテスト装置１０００の機能的構成の一例を示すブロック図である。
【００４６】
図１０に示すように、本発明の実施例に係るスマートコントラクトのテスト装置１０００は、論理リスク検出部１００２、論理リスク箇所特定部１００４及びテスト部１００６を含む。以下は、各部の機能的構成の一例を説明する。
【００４７】
論理リスク検出部１００２は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける論理リスクを検出してもよい。一例として、コンパイラを用いて、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを直接生成してもよい。論理リスク検出部１００２では、該論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトに論理リスクが含まれているか否かを検出できる。一例として、スマートコントラクトにおける４種類の論理リスク、即ちコールスタックリスク、リエントラント性リスク、タイムスタンプ依存リスク、及びトランザクション順序依存リスクを検出できる。
【００４８】
論理リスク箇所特定部１００４は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定してもよい。論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードには箇所特定情報が含まれ、該箇所特定情報に基づいて、スマートコントラクトにおける検出された論理リスクを含む関数の箇所を特定できる。スマートコントラクトにおける検出された論理リスクを含む関数の箇所を特定することの例は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００４９】
テスト部１００６は、論理リスク箇所特定部１００４において検出され、箇所特定された少なくとも１つの関数に基づいて、スマートコントラクトをテストしてもよい。より具体的なテストケースを生成し、テスト効率を向上させるために、論理リスクの検出及び箇所特定により、スマートコントラクトをテストしてもよい。論理リスク箇所特定部１００４において関数が検出され、且つその箇所が特定された場合、これらの関数にコードエラーが含まれると見なしてもよいため、より高い優先順位でこれらの関数をテストする必要がある。一例として、論理リスク箇所特定部１００４において箇所が特定された少なくとも１つの関数に基づいて、情報を抽出してターゲットのテストケースを生成してもよい。これらのターゲットのテストケースを実行することで、動的実行の段階でコードエラーを検索することができるため、コードエラーをより簡単に検索できる。
【００５０】
上述したスマートコントラクトのテスト装置１０００によれば、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける検出された論理リスクを含む少なくとも１つの関数の箇所を特定し、該少なくとも１つの関数に基づいてスマートコントラクトをテストすることで、スマートコントラクトをより具体的にテストすることができる。
【００５１】
好ましくは、スマートコントラクトのテスト装置１０００は、論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、論理リスクを検出するためのオペコードに箇所特定情報を追加することによって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成してもよい。
【００５２】
論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングすることによって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成することの例は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００５３】
好ましくは、スマートコントラクトのテスト装置は、最小エントリ関数集合に基づくテスト部、をさらに含み、該最小エントリ関数集合に基づくテスト部は、スマートコントラクトに対してトポロジ解析を行い、全てのメタデータ間の呼び出し関係を示すためのトポロジマップを生成し、トポロジマップから最小エントリ関数集合を検索し、最小エントリ関数集合における各関数は何れも他のメタデータにより呼び出されず、最小エントリ関数集合にはトポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれ、最小エントリ関数集合における各関数に基づいて、スマートコントラクトをテストしてもよい。
【００５４】
好ましくは、トポロジマップを生成するステップは、マルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、マルチファイルスマートコントラクトについてのメタデータベースを構築するステップと、メタデータベースに基づいて、全てのメタデータ間の呼び出し関係を生成するステップと、呼び出し関係に基づいて、トポロジマップを生成するステップと、を含む。トポロジマップを生成することの例は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００５５】
好ましくは、全てのメタデータ間の呼び出し関係を生成する際に、関数及び修飾子が関数、イベント、修飾子及び変数を呼び出すことができ、且つイベント及び変数が呼び出されることしかできないという制限を設けてもよい。その例は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００５６】
好ましくは、メタデータベースに基づいて全てのメタデータ間の呼び出し関係を生成する際に、多重継承及び／又は複数回継承の方法を用いて、呼び出されたメタデータがどのコントラクトに由来するかを決定する。その例は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００５７】
上述したように、本発明の実施例に係るスマートコントラクトのテスト装置は、トポロジマップから最小エントリ関数集合を検索してもよい。ここで、最小エントリ関数集合における各関数は何れも他のメタデータにより呼び出されず、且つ最小エントリ関数集合には該トポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれている。最小エントリ関数集合における各関数をテストすることで、殆どのメタデータ（又はスマートコントラクトのコード）をカバーできる。
【００５８】
好ましくは、本発明の実施例に係るスマートコントラクトのテスト装置は、頻繁に呼び出される関数及び変数に基づくテスト部をさらに含んでもよい。該頻繁に呼び出される関数及び変数に基づくテスト部は、トポロジマップから、頻繁に呼び出される関数及び変数を検索し、検索された、頻繁に呼び出される関数及び変数に基づいて、スマートコントラクトをテストする。他のメタデータにより頻繁に呼び出されたメタデータに問題が生じやすいため、これらのメタデータをテストする必要がある。上述したように、見つかった頻繁に呼び出された関数及び変数に基づいて、スマートコントラクトをテストしてもよい。
【００５９】
好ましくは、本発明の実施例に係るスマートコントラクトのテスト装置は、直接呼び出されなかった関数に基づくテスト部をさらに含んでもよい。該直接呼び出されなかった関数に基づくテスト部は、以前のテストにおいて直接呼び出されなかった関数に基づいて、スマートコントラクトをテストする。例えば、以前のテストにおいて直接呼び出されなかった関数がまだ存在し、コードエラーの発生を回避するようにこれらの関数をテストする必要がある。
【００６０】
テストすべき関数の例は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００６１】
上述したように、本発明の実施例に係るスマートコントラクトのテスト装置は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける検出された論理リスクを含む少なくとも１つの関数の箇所を特定し、該少なくとも１つの関数に基づいてスマートコントラクトをテストすることで、スマートコントラクトをより具体的にテストすることができる。また、本発明の実施例に係るスマートコントラクトのテスト装置は、スマートコントラクトのコンパイラからの箇所特定情報を有するオペコードと既存のオープンソースプログラムにおけるバイトコードから変換されたオペコードをマッピングすることで、検出された論理リスクの箇所を特定できる。従来のスマートコントラクトの構造解析はマルチファイルスマートコントラクトをサポートしないが、本発明の実施例に係るスマートコントラクトのテスト装置は、統一フォーマットでメタデータを記憶し、メタデータベースにおいてメタデータを検索するための制限を定義することで、マルチファイルスマートコントラクトを解析できる。本発明の実施例に係るスマートコントラクトのテスト装置は、論理リスクの検出及びその箇所の特定、並びにトポロジ解析により、テストすべき関数を選択でき、選択されたテストすべき関数に基づいてより具体的なテストケースを自動的に生成できるため、テスト効率を向上できる。
【００６２】
なお、以上は本発明の実施例に係るスマートコントラクトのテスト装置の機能的構成を説明しているが、該機能的構成は単なる例示的なものであり、本発明を限定するものではない。当業者は、本発明の原理に従って上記実施例を修正してもよく、例えば各実施例における機能的モジュールを追加、削除又は組み合わせてもよく、これらの修正は本発明の範囲に含まれるものである。
【００６３】
また、ここの装置の実施例は上記方法の実施例に対応するため、装置の実施例に詳細に説明されていない内容は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００６４】
なお、本発明の実施例の記憶媒体及びプログラムプロダクトにおける機器が実行可能な命令は上記スマートコントラクトのテスト方法を実行してもよく、ここで詳細に説明されていない内容は、上記方法実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００６５】
それに応じて、本発明は、機器が実行可能な命令を含むプログラムプロダクトが記録されている記憶媒体をさらに含む。該記憶媒体は、フロッピーディスク、光ディスク、光磁気ディスク、メモリカード、メモリスティック等を含むが、これらに限定されない。
【００６６】
上述したように、本発明の実施例に係るスマートコントラクトのテスト方法１００は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いてスマートコントラクトをテストする。また、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードは、スマートコントラクトのテストに用いられることだけではなく、論理リスクの検出及びその箇所の特定にも用いられてもよい。
【００６７】
従って、本発明は、スマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法１１００をさらに提供する。
【００６８】
図１１は本発明の実施例に係るスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法１１００の流れの一例を示すフローチャートである。図１１に示すように、本発明の実施例に係るスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法１１００は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードの生成ステップＳ１１０２、論理リスク検出ステップＳ１１０４、及び論理リスク箇所特定ステップＳ１１０６を含む。
【００６９】
論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードの生成ステップＳ１１０２において、論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、論理リスクを検出するためのオペコードに箇所特定情報を追加することによって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成してもよい。
【００７０】
通常、既存のオープンソースプログラムを用いてスマートコントラクトにおける論理リスクを検出する。しかし、既存のオープンソースプログラムは、バイトコードから変換されたオペコード（該バイトコードから変換されたオペコードは、単なる論理リスクを検出するためのオペコードの一例を示すものであり、該オペコードを限定するものではなく、論理リスクを検出するためのオペコードは該バイトコードから変換されたオペコードに限定されない）を用いるものであり、このようなオペコードは箇所特定情報を有しないため、該オペコードは検出された論理リスクの箇所を特定することができない。
【００７１】
スマートコントラクトのコンパイラからのオペコード（該スマートコントラクトのコンパイラからのオペコードは、単なる箇所特定情報を有するオペコードの一例を示すものであり、該オペコードを限定するものではなく、箇所特定情報を有するオペコードは該スマートコントラクトのコンパイラからのオペコードに限定されない）は、箇所特定情報を含むが、オフセット情報を含まないため、既存のオープンソースプログラムによりスマートコントラクトのコンパイラからのオペコードを直接実行することができない。バイトコードから変換されたオペコードとスマートコントラクトのコンパイラからのオペコードをマッピングして得られたオペコード（該マッピングして得られたオペコードは、単なる論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードの一例を示すものであり、該オペコードを限定するものではなく、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードは該マッピングして得られたオペコードに限定されない）は、箇所特定情報を含むことができるため、検出された論理リスクの箇所を特定できる。オペコードのマッピングの例は図３を参照してもよい。
【００７２】
論理リスク検出ステップＳ１１０４において、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける論理リスクを検出してもよい。該ステップにおいて、スマートコントラクトにおける４種類の論理リスク、即ちコールスタックリスク、リエントラント性リスク、タイムスタンプ依存リスク、及びトランザクション順序依存リスクを検出できる。
【００７３】
論理リスク箇所特定ステップＳ１１０６において、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定してもよい。論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードには箇所特定情報が含まれ、該箇所特定情報に基づいて、スマートコントラクトにおける検出された論理リスクを含む関数の箇所を特定できる。論理リスクの箇所として特定のコードラインを特定することの例は図２を参照してもよい。
【００７４】
上述したスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法の実施例と同様に、本発明はスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する装置の実施例をさらに提供する。
【００７５】
本発明の実施例に係るスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する装置は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードの生成部、論理リスク検出部、及び論理リスク箇所特定部を含む。論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードの生成部は、論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、論理リスクを検出するためのオペコードに箇所特定情報を追加することによって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成してもよい。論理リスク検出部は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、スマートコントラクトにおける論理リスクを検出してもよい。論理リスク箇所特定部は、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定してもよい。本発明の実施例に係るスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する装置における各部の機能は、上記スマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法の実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００７６】
本発明の実施例に係るスマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法及び装置は、スマートコントラクトのコンパイラからの箇所特定情報を有するオペコードと既存のオープンソースプログラムにおけるバイトコードから変換されたオペコードをマッピングすることで、検出された論理リスクの箇所を特定できる。
【００７７】
上述したように、本発明の実施例のスマートコントラクトのテスト方法１００は、メタデータ間の呼び出し関係に基づいてテストすべき関数を決定し、スマートコントラクトをテストしてもよい。また、メタデータ間の呼び出し関係は、スマートコントラクトのテストに用いられることだけではなく、スマートコントラクトのトポロジ解析にも用いられてもよい。
【００７８】
従って、本発明はスマートコントラクトに対してトポロジ解析を行う方法をさらに提供し、該方法を用いることで、スマートコントラクトの呼び出し関係のトポロジマップを簡単に構築できる。図１２は本発明の実施例に係るスマートコントラクトに対してトポロジ解析を行う方法１２００の流れの一例を示すフローチャートである。図１２に示すように、本発明の実施例に係るスマートコントラクトに対してトポロジ解析を行う方法１２００は、メタデータベース構築ステップＳ１２０２、呼び出し関係生成ステップＳ１２０４、及びトポロジマップ生成ステップＳ１２０６を含む。
【００７９】
メタデータベース構築ステップＳ１２０２において、マルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、マルチファイルスマートコントラクトについてのメタデータベースを構築してもよい。呼び出し関係生成ステップＳ１２０４において、メタデータベースに基づいて、全てのメタデータ間の呼び出し関係を生成してもよい。トポロジマップ生成ステップＳ１２０６において、該呼び出し関係に基づいて、該スマートコントラクトのトポロジマップを生成してもよい。
【００８０】
通常、信頼性パーサを用いて、スマートコントラクトの構文解析を行ってもよい。しかし、信頼性パーサは、一度にスマートコントラクトの１つのファイルのみを解析でき、マルチファイルスマートコントラクトの解析をサポートすることができない。また、信頼性パーサは、呼び出し関係の解析をサポートしていない。本発明の実施例に係るスマートコントラクトに対してトポロジ解析を行う方法１２００は、信頼性パーサを用いてメタデータ（関数、イベント、修飾子、変数）を抽出し、マルチファイルスマートコントラクトのためのメタデータベースを構築し、その後、信頼性パーサを用いて全てのスマートコントラクトの各行を解析し、全てのメタデータ間の呼び出し関係を生成し、呼び出し関係に基づいてトポロジマップを生成できる。メタデータベース及び呼び出し関係の解析の例は図４を参照してもよく、トポロジマップの例は図５を参照してもよい。
【００８１】
上述したスマートコントラクトに対してトポロジ解析を行う方法の実施例と同様に、本発明はスマートコントラクトに対してトポロジ解析を行う装置の実施例をさらに提供する。
【００８２】
本発明の実施例に係るスマートコントラクトに対してトポロジ解析を行う装置は、メタデータベース構築部、呼び出し関係生成部、及びトポロジマップ生成部を含む。メタデータベース構築部は、マルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、マルチファイルスマートコントラクトについてのメタデータベースを構築してもよい。呼び出し関係生成部は、メタデータベースに基づいて、全てのメタデータ間の呼び出し関係を生成してもよい。トポロジマップ生成部は、該呼び出し関係に基づいて、該スマートコントラクトのトポロジマップを生成してもよい。本発明の実施例に係るスマートコントラクトに対してトポロジ解析を行う装置における各部の機能は、上記スマートコントラクトに対してトポロジ解析を行う方法の実施例の対応説明を参照してもよく、ここでその説明を省略する。
【００８３】
本発明の実施例に係るスマートコントラクトに対してトポロジ解析を行う方法及び装置によれば、マルチファイルスマートコントラクトの解析をサポートでき、マルチファイルスマートコントラクトの呼び出し関係のトポロジマップを簡単に構築できる。
【００８４】
なお、上記装置における各構成要件、ユニットはソフトウェア、ファームウェア、ハードウェア又はそれらの組み合わせにより実現されてもよい。ソフトウェア又はファームウェアにより実施されている場合、記憶媒体又はネットワークから専用のハードウェア構成を有するコンピュータ、例えば図１３示されている汎用パーソナルコンピュータ１３００に上記方法を実施するためのソフトウェアを構成するプログラムをインストールしてもよく、該コンピュータは各種のプログラムがインストールされている場合は各種の機能などを実行できる。
【００８５】
図１３において、中央処理部（即ちＣＰＵ）１３０１は、読み出し専用メモリ（ＲＯＭ）１３０２に記憶されているプログラム、又は記憶部１３０８からランダムアクセスメモリ（ＲＡＭ）１３０３にロードされたプログラムにより各種の処理を実行する。ＲＡＭ１３０３には、必要に応じて、ＣＰＵ１３０１が各種の処理を実行するに必要なデータが記憶されている。
【００８６】
ＣＰＵ１３０１、ＲＯＭ１３０２、及びＲＡＭ１３０３は、バス１３０４を介して互いに接続されている。入力／出力インターフェース１３０５もバス１３０４に接続されている。
【００８７】
入力部１３０６（キーボード、マウスなどを含む）、出力部１３０７（ディスプレイ、例えばブラウン管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）など、及びスピーカなどを含む）、記憶部１３０８（例えばハードディスクなどを含む）、通信部１３０９（例えばネットワークのインタフェースカード、例えばＬＡＮカード、モデムなどを含む）は、入力／出力インターフェース１３０５に接続されている。通信部１３０９は、ネットワーク、例えばインターネットを介して通信処理を実行する。
【００８８】
必要に応じて、ドライブ部１３１０は、入力／出力インターフェース１３０５に接続されてもよい。取り外し可能な媒体１３１１は、例えば磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどであり、必要に応じてドライブ部１３１０にセットアップされて、その中から読みだされたコンピュータプログラムは必要に応じて記憶部１３０８にインストールされている。
【００８９】
ソフトウェアにより上記処理を実施する場合、ネットワーク、例えばインターネット、又は記憶媒体、例えば取り外し可能な媒体１３１１を介してソフトウェアを構成するプログラムをインストールする。
【００９０】
これらの記憶媒体は、図１３に示されている、プログラムを記憶し、機器と分離してユーザへプログラムを提供する取り外し可能な媒体１３１１に限定されない。取り外し可能な媒体１３１１は、例えば磁気ディスク（フロッピーディスク（登録商標）を含む）、光ディスク（光ディスク−読み出し専用メモリ（ＣＤ−ＲＯＭ）、及びデジタル多目的ディスク（ＤＶＤ）を含む）、光磁気ディスク（ミニディスク（ＭＤ）（登録商標））及び半導体メモリを含む。或いは、記憶媒体は、ＲＯＭ１３０２、記憶部１３０８に含まれるハードディスクなどであってもよく、プログラムを記憶し、それらを含む機器と共にユーザへ提供される。
【００９１】
以上は図面を参照しながら本発明の好ましい実施例を説明しているが、上記実施例及び例は例示的なものであり、制限的なものではない。当業者は、特許請求の範囲の主旨及び範囲内で本発明に対して各種の修正、改良、均等的なものに変更してもよい。これらの修正、改良又は均等的なものに変更することは本発明の保護範囲に含まれるものである。
【００９２】
例えば、上記実施例の１つのユニットに含まれる機能は別々の装置により実現されてもよい。また、上記実施例の複数のユニットにより実現される複数の機能は別々の装置によりそれぞれ実現されてもよい。さらに、以上の機能の１つは複数のユニットにより実現されてもよい。なお、これらの構成は本発明の範囲内のものである。
【００９３】
また、本発明の方法は、明細書に説明された時間的順序で実行するものに限定されず、他の時間的順序で順次、並行、又は独立して実行されてもよい。このため、本明細書に説明された方法の実行順序は、本発明の技術的な範囲を限定するものではない。
【００９４】
また、上述の各実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
スマートコントラクトのテスト方法であって、
論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、前記スマートコントラクトにおける論理リスクを検出するステップと、
前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、前記スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定するステップと、
前記少なくとも１つの関数に基づいて、前記スマートコントラクトをテストするステップと、を含む、方法。
（付記２）
論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、前記論理リスクを検出するためのオペコードに前記箇所特定情報を追加することによって、前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成する、付記１に記載の方法。
（付記３）
前記スマートコントラクトに対してトポロジ解析を行い、全てのメタデータ間の呼び出し関係を示すためのトポロジマップを生成するステップと、
前記トポロジマップから最小エントリ関数集合を検索するステップであって、前記最小エントリ関数集合における各関数は何れも他のメタデータにより呼び出されず、前記最小エントリ関数集合には前記トポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれる、ステップと、
前記最小エントリ関数集合における各関数に基づいて、前記スマートコントラクトをテストするステップと、をさらに含む、付記１に記載の方法。
（付記４）
前記トポロジマップから、頻繁に呼び出される関数及び変数を検索するステップと、
検索された、頻繁に呼び出される関数及び変数に基づいて、前記スマートコントラクトをテストするステップと、をさらに含む、付記３に記載の方法。
（付記５）
以前のテストにおいて直接呼び出されなかった関数に基づいて、前記スマートコントラクトをテストするステップ、をさらに含む、付記４に記載の方法。
（付記６）
前記トポロジマップを生成するステップは、
マルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、マルチファイルスマートコントラクトについてのメタデータベースを構築するステップと、
前記メタデータベースに基づいて、全てのメタデータ間の呼び出し関係を生成するステップと、
前記呼び出し関係に基づいて、前記トポロジマップを生成するステップと、を含む、付記３に記載の方法。
（付記７）
全てのメタデータ間の呼び出し関係を生成する際に、関数及び修飾子が関数、イベント、修飾子及び変数を呼び出すことができ、且つイベント及び変数が呼び出されることしかできないという制限を設ける、付記６に記載の方法。
（付記８）
前記メタデータベースに基づいて全てのメタデータ間の呼び出し関係を生成する際に、多重継承及び／又は複数回継承の方法を用いて、呼び出されたメタデータがどのコントラクトに由来するかを決定する、付記７に記載の方法。
（付記９）
スマートコントラクトのテスト装置であって、
論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、前記スマートコントラクトにおける論理リスクを検出する論理リスク検出手段と、
前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、前記スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定する論理リスク箇所特定手段と、
前記少なくとも１つの関数に基づいて、前記スマートコントラクトをテストするテスト手段と、を含む、装置。
（付記１０）
前記論理リスク検出手段は、論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、前記論理リスクを検出するためのオペコードに前記箇所特定情報を追加することによって、前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成する、付記９に記載の装置。
（付記１１）
最小エントリ関数集合に基づくテスト手段、をさらに含み、
前記最小エントリ関数集合に基づくテスト手段は、
前記スマートコントラクトに対してトポロジ解析を行い、全てのメタデータ間の呼び出し関係を示すためのトポロジマップを生成し、
前記トポロジマップから最小エントリ関数集合を検索し、前記最小エントリ関数集合における各関数は何れも他のメタデータにより呼び出されず、前記最小エントリ関数集合には前記トポロジマップにおける全てのメタデータを走査するために必要な最小個数の関数が含まれ、
前記最小エントリ関数集合における各関数に基づいて、前記スマートコントラクトをテストする、付記９に記載の装置。
（付記１２）
頻繁に呼び出される関数及び変数に基づくテスト手段、をさらに含み、
前記頻繁に呼び出される関数及び変数に基づくテスト手段は、
前記トポロジマップから、頻繁に呼び出される関数及び変数を検索し、
検索された、頻繁に呼び出される関数及び変数に基づいて、前記スマートコントラクトをテストする、付記１１に記載の装置。
（付記１３）
直接呼び出されなかった関数に基づくテスト手段、をさらに含み、
前記直接呼び出されなかった関数に基づくテスト手段は、以前のテストにおいて直接呼び出されなかった関数に基づいて、前記スマートコントラクトをテストする、付記１２に記載の装置。
（付記１４）
前記トポロジマップを生成するステップは、
マルチファイルスマートコントラクトの全てのファイルをそれぞれ解析し、マルチファイルスマートコントラクトについてのメタデータベースを構築するステップと、
前記メタデータベースに基づいて、全てのメタデータ間の呼び出し関係を生成するステップと、
前記呼び出し関係に基づいて、前記トポロジマップを生成するステップと、を含む、付記１１に記載の装置。
（付記１５）
全てのメタデータ間の呼び出し関係を生成する際に、関数及び修飾子が関数、イベント、修飾子及び変数を呼び出すことができ、且つイベント及び変数が呼び出されることしかできないという制限を設ける、付記１４に記載の装置。
（付記１６）
前記メタデータベースに基づいて全てのメタデータ間の呼び出し関係を生成する際に、多重継承及び／又は複数回継承の方法を用いて、呼び出されたメタデータがどのコントラクトに由来するかを決定する、付記１５に記載の装置。
（付記１７）
スマートコントラクトの論理リスクを検出し、論理リスクの箇所を特定する方法であって、
論理リスクを検出するためのオペコードと箇所特定情報を有するオペコードとをマッピングし、前記論理リスクを検出するためのオペコードに前記箇所特定情報を追加することによって、論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを生成するステップと、
前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードを用いて、前記スマートコントラクトにおける論理リスクを検出するステップと、
前記論理リスクを検出し、且つ論理リスクの箇所を特定するためのオペコードにおける箇所特定情報に基づいて、前記スマートコントラクトにおける、検出された論理リスクを含む少なくとも１つの関数の箇所を特定するステップと、を含む、方法。
【図１】
2019053729.tif 000003
【図２】
2019053729.tif 000004
【図３】
2019053729.tif 000005
【図４】
2019053729.tif 000006
【図５】
2019053729.tif 000007
【図６】
2019053729.tif 000008
【図７】
2019053729.tif 000009
【図８】
2019053729.tif 000010
【図９】
2019053729.tif 000011
【図１０】
2019053729.tif 000012
【図１１】
2019053729.tif 000013
【図１２】
2019053729.tif 000014
【図１３】
2019053729.tif 000015