(57)【要約】      （修正有）【課題】本発明は、ブロックチェーンに基づくスマート契約に対してテストを行うための装置及び方法を提供する。【解決手段】テストを行うための装置１００は、スマート契約中の関数の特徴に基づいて関数に対して並べ替えを行う並べ替えユニット１０１、並べ替え結果に基づいて所定数量の関数を選択する選択ユニット１０２及び、選択された各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定するテスト設定ユニット１０３を含む。選択された各関数の対応する位置にイベントモニターが挿入されており、且つ、モニタリングすべきパラメータが設定されているスマート契約を、テストの対象となるブロックチェーンにデプロイし、スマート契約の実行プロセスにおいて、插入されたイベントがトリガーされて、欠陥診断のためのイベントログが取得される。【選択図】図１
2018185808.tif 000002
【特許請求の範囲】
【請求項１】
ブロックチェーンに基づくスマート契約に対してテストを行うための装置であって、
前記スマート契約中の関数の特徴に基づいて、前記関数に対して並べ替えを行うための並べ替えユニット；
前記並べ替えの結果に基づいて、所定数量の関数を選択するための選択ユニット；及び
前記選択ユニットにより選択された各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定するためのテスト設定ユニットを含む、装置。
【請求項２】
請求項1に記載の装置であって、
前記並べ替えユニットは、前記関数の特徴、即ち、前記ブロックチェーンに関連する特徴、前記関数の構造複雑度、及び関数間のコール関係という特徴のうちの少なくとも１つの特徴に基づいて、前記関数に対して並べ替えを行い、
前記並べ替えユニットは、前記特徴の加重和に基づいて、前記関数に対して並べ替えを行う、装置。
【請求項３】
請求項2に記載の装置であって、
前記ブロックチェーンに関連する特徴は、前記ブロックチェーンに関連する属性、前記スマート契約の取引操作に関連する属性、及び、前記スマート契約に係る取引操作の送信者と受信者に関連する属性、のうちの少なくとも１つを含む、装置。
【請求項４】
請求項2に記載の装置であって、
前記関数の構造複雑度は、前記関数の入力の数量、前記関数の出力の数量、及び前記関数に含まれる制御構造の数量、のうちの少なくとも１つにより表され、
前記並べ替えユニットは、各関数の構造複雑度と、全ての関数の構造複雑度の和との比に基づいて並べ替えを行う、装置。
【請求項５】
請求項2に記載の装置であって、
前記関数間のコール関係は、前記関数が前記スマート契約内で他の関数によりコールされる頻度、及び前記関数が他のスマート契約によりコールされる頻度に基づいて得られる、装置。
【請求項６】
請求項1に記載の装置であって、
前記テスト設定ユニットは、前記関数の位置、即ち、前記スマート契約に係る取引操作の実行前、戻り値の取得前、及び制御構造内という位置のうちの少なくとも１つの位置に前記イベントモニターを設定する、装置。
【請求項７】
請求項1に記載の装置であって、
前記テスト設定ユニットは、コール階層情報、ブロックチェーン関連情報、及びオフラインデバッグ用パラメータ、のうちの少なくとも１つに対してモニタリングを行う、装置。
【請求項８】
請求項7に記載の装置であって、
前記コール階層情報は、前記イベントモニターの設定位置、前記スマート契約の名称、及び前記イベントモニターの実行時間、のうちの少なくとも１つを含む、装置。
【請求項９】
請求項7に記載の装置であって、
前記ブロックチェーン関連情報は、前記スマート契約に係る取引操作のパラメータ、前記スマート契約に係る取引操作の送信者と受信者、及び、前記スマート契約に係る取引操作実行前の剰余計算資源量、のうちの少なくとも１つを含む、装置。
【請求項１０】
ブロックチェーンに基づくスマート契約に対してテストを行うための方法であって、
スマート契約中の関数の特徴に基づいて前記関数に対して並べ替えを行い；
前記並べ替えの結果に基づいて所定数量の関数を選択し；及び
選択された各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定することを含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理分野に関し、具体的には、ブロックチェーン（blockchain）技術分野に関し、より具体的には、ブロックチェーンに基づくスマート契約（smart  contract）に対してテストを行うための装置及び方法に関する。
【背景技術】
【０００２】
近年、ブロックチェーン技術が流行っている。ブロックチェーン技術を用いることにより、信頼されるメディアによって運営される従来のアプリケーションは、中央管理機関を要することなく、脱中心化（decentralization（分散化））の方式で操作することができる。例えば、ビットコイン（bitcoin）やイーサリアム（Ethereum）は、ブロックチェーン技術に基づくアプリケーションの例である。ブロックチェーン技術は、互いに信頼しない双方に、自由に取引を行わせることができる。これは、データ記憶の大量の暗号化の使用、ピア・ツー・ピア（P2P）ネットワーク、及びスマート契約という３種類の技術により保証することができる。
【０００３】
スマート契約は、ブロックチェーンに常駐のセルフ・ランニング・スクリプト（self  running  script）である。一旦デプロイ（deploy）されれば、その共通関数は、他のスマート契約によりコール（call）することができる。しかし、スマート契約は、更新され難い。なぜなら、それらは、脱中心化のブロックに記憶されているため、変更され難いからである。よって、公表前にスマート契約の品質を確保する必要がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、ブロックチェーンに基づくスマート契約に対してテストを行うための装置及び方法を提供することにある。
【課題を解決するための手段】
【０００５】
本発明の一側面によれば、ブロックチェーンに基づくスマート契約に対してテストを行うための装置が提供され、それは、
並べ替えユニットであって、スマート契約中の関数の特徴に基づいて、関数に対して並べ替えを行うためのもの；
選択ユニットであって、並べ替えの結果に基づいて所定数量の関数を選択するためのもの；及び
テスト設定ユニットであって、選択ユニットが選択した各関数について、テストのためのイベントモニター及びモニタリングすべきパラメータをそれぞれ設定するためのものを含む。
【０００６】
本発明のもう１つの側面によれば、ブロックチェーンに基づくスマート契約に対してテストを行うための方法が提供され、それは、
スマート契約中の関数の特徴に基づいて関数に対して並べ替えを行い；
並べ替えの結果に基づいて所定数量の関数を選択し；及び
選択された各関数について、テストのためのイベントモニター及びモニタリングすべきパラメータをそれぞれ設定することを含む。
【０００７】
本発明の他の側面によれば、対応するコンピュータプログラム、コンピュータ可読記憶媒体、及びコンピュータ・プログラム・プロダクトがさらに提供される。
【０００８】
本発明のブロックチェーンに基づくスマート契約に対してテストを行うための装置及び方法によれば、スマート契約中の重要関数の情報、及び大量の階層情報（hierarchy  information）とパラメータ値を得ることができ、これにより、スマート契約に対してのテストをより有効にさせることができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施例におけるブロックチェーンに基づくスマート契約に対してテストを行うための装置の機能ブロック図である。
【図２】スマート契約がEVM上で実行する例を示す図である。
【図３】イベントログの構造例を示す図である。
【図４】スマート契約から解析されたJson対象の例を示す図である。
【図５】関数間のコール関係の有向グラフを示す図である。
【図６】本発明の技術を応用するシナリオを示す図である。
【図７】本発明の一実施例におけるブロックチェーンに基づくスマート契約に対してテストを行うための方法のフローチャートである。
【図８】本発明の実施例における方法及び／又は装置を実現し得る汎用コンピュータの構造例を示す図である。
【発明を実施するための形態】
【００１０】
以下、添付した図面を参照しながら、本発明を実施するための好適な形態を詳細に説明する。なお、このような実施形態は、例示に過ぎず、本発明を限定するものでない。
【００１１】
また、以下、次の順序、即ち、
1．ブロックチェーンに基づくスマート契約に対してテストを行うための装置
2．ブロックチェーンに基づくスマート契約に対してテストを行うための方法
3．本発明における装置及び方法を実現する計算装置
という順序で詳細に説明する
＜1．ブロックチェーンに基づくスマート契約に対してテストを行うための装置＞
前述のように、スマート契約は、その特殊な属性のせいで、公表前にその品質を保証する必要がある。スマート契約の品質を確保する方法は、例えば、数学的形式検証、ログを記録してデバッグを行う方法などを含む。しかし、例えば、ログを記録する方法は、往々して、契約ログを得ることが困難であり、具体的には、ログは、イベントからのコールにより取得されるが、イベントは、予め、定義されてスマート契約に挿入される必要がある。また、イベントログの構造は、非常に複雑であるため、その中から欠陥（bug）診断のための十分な情報を得ることも難しい。
【００１２】
これに鑑み、本発明の実施例は、ブロックチェーンに基づくスマート契約に対してテストを行うための装置100を提供する。その機能ブロック図は、図1に示されており、装置100は、スマート契約中の関数の特徴に基づいて、関数に対して並べ替えを行うように構成される並べ替えユニット101；該並べ替えの結果に基づいて、所定数量の関数を選択するように構成される選択ユニット102；及び、選択ユニット102が選択した各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定するように構成されるテスト設定ユニット103を含む。
【００１３】
そのうち、並べ替えユニット101、選択ユニット102、及びテスト設定ユニット103は、例えば、１つ又は複数の処理回路により実現されても良く、該処理回路は、例えば、チップとして実現されても良い。
【００１４】
そのうち、スマート契約は、自治ノードに用いられるセルフ・ランニング・スクリプトであり、スマート契約には、複数の実行可能な関数を定義することができる。スマート契約のデバッグについて言えば、重要な関数があるが、重要でない関数もある。換言すれば、重要な関数に対してデバッグを行うことで、より多くの欠陥診断情報を得ることができる。よって、並べ替えユニット101を設けて関数に対して並べ替えを行うことにより、このような重要な関数を見つける。該並べ替えは、関数の特徴に基づいて行われ、そのうち、関数の特徴は、該関数のデバッグ時の重要度を反映することができる。
【００１５】
理解すべきは、重要度が高い関数に対してテストを行うことにより、スマート契約のデバッグの効率を向上させることができる。よって、選択ユニット102は、例えば、デバッグの要求、受け入れられる時間コストなどに基づいて並べ替えを行うことで、所定数量の関数を選択する。一般的には、最も重要なN（N≧1）個の関数を選択してテストを行っても良い。
【００１６】
選択された各関数について、異なる位置にイベント（イベントモニターとも言う）を插入することにより、異なる結果及びプロセス情報を得ることができ、それ相応に、モニタリングすべきパラメータも異なる。テストの効率を向上させるために、より多くのデバッグ情報を取得し得る位置にイベントを挿入することができ、また、より多くのデバッグ情報を提供し得るパラメータを適切にモニタリングすることができる。よって、テスト設定ユニット103は、各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定する。
【００１７】
その後、選択された各関数の対応する位置にイベントモニターが挿入されており、且つモニタリングすべきパラメータが設定されているスマート契約を、テストの対象となるブロックチェーンにデプロイする。スマート契約の実行プロセスにおいて、插入されたイベントがトリガーされて、欠陥診断のためのイベントログを取得することができる。
【００１８】
一例では、並べ替えユニット101は、関数の次のような特徴のうちの少なくとも１つに基づいて、関数に対して並べ替えを行うように構成され、即ち、ブロックチェーンに関連する特徴、関数の構造複雑度、及び関数間のコール関係という特徴である。例えば、並べ替えユニット101は、特徴の加重和に基づいて関数に対して並べ替えを行うように構成されても良い。
【００１９】
一例として、並べ替えユニット101は、並べ替えを行うときに、特定の属性を持つ関数を排除しても良い。このような特定の属性を持つ関数は、スマート契約に対してのテストについて言えば、重要度が通常低い。
【００２０】
便宜のため、以下、イーサリアム中のスマート契約を例として説明する。そのうち、スマート契約がSolidityの形式を有し、且つイーサリアム仮想マシン（EVM）上で実行すると仮定する。しかし、理解すべきは、本発明は、これに限定されず、他の種類のアプリケーションやスマート契約の他の実現形式に用いることもできる。
【００２１】
図2は、スマート契約がEVM上で実行する例を示す。スマート契約は、状態変数の宣言、関数、関数モディファイア（function  modifier）、イベント、構造タイプ、及び列挙タイプ（enumerated  type）などを含んでも良い。図2に示すように、スマート契約は、MetaCoinと命名された契約を含み、構造関数getBalanceの他に、２つの関数MetaCoin及びsendCoinが定義されており、また、状態変数“balances”が定義されている。
【００２２】
また、イーサ（Ether／仮想通貨）送信の正確性をチェック（check）するために、さらにイベントが定義されて関数sendCoinに挿入されている。EVMにスマート契約をデプロイした後に、図2の右側に示すように、JSコールバック（JS  callback）をトリガーしてイベントログを得ることができる。図3は、イベントログの構造例を示す。分かるように、該例では、上の部分は、ブロック及び取引に関連する情報であり、例えば、該ログのブロックの数量、ブロックのHashアドレス（hash  address）、イーサ（Ether）を送信する取引口座などを含み、下の部分は、有限なモニタリングパラメータ値を含む。前述のように、デフォルトログに含まれる情報は、欠陥診断のために用いられ難く、例えば、それらは、契約のスタックトレース（stack  trace）、例えば、契約のどの行がトリガーされたか、及び実行中の関数のコール階層情報に関する情報を有しない。
【００２３】
そのうち、スマート契約は、図4に示すように、契約アナライザー（analyzer）により、Json対象と解析され得る。契約アナライザーは、契約の部品（構成要素）、例えば、変数、関数などと交互（interaction）を行うためのインターフェースを提供しており、また、Solidityに関連する特徴、例えば、可視性（visibility）及びアクセシビリティ（accessibility）も示している。例えば、関数の可視性は、“外部（external）”、“パブリック（public）”、“内部（internal）”、又は“プライベート（private）”と指定されても良く、例えば、デフォルトは、“パブリック”である。変数は、そのアクセシビリティは、“パブリック（public）”又は“内部（internal）”と指定されても良く、例えば、デフォルトは、“内部”である。一例として、並べ替えユニット101は、Jsonの出力に基づいて、契約中の関数の集合を得て、関数の特徴に基づいて並べ替えを行うことができる。
【００２４】
Solidityの形式のスマート契約について、並べ替えユニット101は、関数の属性をチェックし、そして、例えば、“コンストラクタ（constructor）”、“セルフディストラクト（selfdestruct）”、“ゲッター（getter）”、“セッター（setter）”などの属性を有する関数を排除することができ、即ち、このような属性を有する関数は、並べ替えの対象とされない。図2及び図4に示す例では、関数“MetaCoin”は、コンストラクタであり、関数“getBalance”は、ゲッターであり、両者は、並べ替えに参与しない。
【００２５】
次に、並べ替えユニット101は、例えば、他の関数に対して並べ替えを行う。前述のように、並べ替えを行う時に次のような特徴に基づいて行われ、即ち、ブロックチェーンに関連する特徴、関数の構造複雑度、及び関数間のコール関係という特徴である。
【００２６】
一例では、ブロックチェーンに関連する特徴は、ブロックチェーンに関連する属性、スマート契約の取引操作に関する属性、及びスマート契約に係る取引操作の送信者（senderと受信者（receiver）に関連する属性という特徴のうちの少なくとも１つを含む。
【００２７】
例えば、ブロックチェーンに関連する属性は、関数の主体がブロック又はブロックに関連する属性、例えば、block.blockhash(uint  blockNumber)、block.gaslimit、block.coinbaseなど（Solidity形式のスマート契約）を有するかを含む。
【００２８】
スマート契約の取引操作に関連する属性は、例えば、msg.sender、msg.valueなどを含む。図2を例とすると、関数“sendCoin”は、“balances[msg.sender]＜amount”を条件として用いて評価を行う。
【００２９】
スマート契約に係る取引操作の送信者と受信者に関連する属性は、例えば、口座に関連する属性、例えば、<address>.send(uint256  amount)、<address>.balance(uint256)などを含む。
【００３０】
３つのブール論理値を用いて上述の３種類の属性をそれぞれ表す場合、Fbは、関数がブロックに関連する属性を有するかを示す値であり、Ftは、関数が取引操作に関連する属性を有するかを示す値であり、Faは、関数が口座に関連する属性を有するかを示す値であり、この場合、ブロックチェーンに関連する特徴は、次のように計算されても良い。
【００３１】
Wb＝Fb+Ft+Fa  （1）
そのうち、“+”は、“OR”演算を表す。理解すべきは、式（1）は、ブロックチェーンに関連する特徴の計算方法の１つのみを示しており、本発明は、これに限定されず、また、考慮すべき属性は、上述の３種類に限定されない。
【００３２】
また、関数の構造複雑度は、関数の入力の数量、関数の出力の数量及び関数に含まれる制御構造の数量のうちの少なくとも１つを用いて表すことができる。例えば、Solidity中の関数に含まれ得る制御構造は、包括“if/else”、“while”、“do”、“for”、“break”、“continue”、“?:”などを含む。
【００３３】
一例では、並べ替えユニット101は、各関数の構造複雑度と、全ての関数の構造複雑度の和との比に基づいて並べ替えを行うように構成されても良く、即ち、該比に基づいて関数の構造複雑度を計算することができる。
【００３４】
例えば、次のような式（2）を用いて関数の構造複雑度Wsを計算することができる。
【数１】
2018185808.tif 000003
【００３５】
そのうち、Niは、上述の入力、出力、制御構造の数量のうちの１つを表し、Nj,iは、スマート契約中の全ての関数に含まれる、対応するものの総数量を表す。Wsは、上述の３種類の数量により反映された構造複雑度の累積結果である。もちろん、３種類の数量のうちの１種類のみ又は２種類を採用して構造複雑度Wsを計算しても良いが、これに限定されない。
【００３６】
また、関数間のコール関係は、関数がスマート契約内で他の関数にコールされる頻度、及び該関数が他のスマート契約によりコールされる頻度に基づいて得ることができる
前述のように、関数の可視性は、“外部（external）”、“パブリック（public）”、“内部（internal）”、又は“プライベート（private）”と指定され得る。そのうち、“外部”又は“パブリック”を有する関数は、他の契約に見られ、コールされ得る。“内部”及び“プライベート”を有する関数は、内部のものにしかコールされない。図5は、関数間のコール関係の有向グラフを示している。
【００３７】
例えば、それぞれ、次のような２つの指標を用いて内部コール関係及び外部コール関係を評価することができる。１つは、IIF（逆コール頻度）である。IIF（逆コール頻度）は、次の式（3）に示すように、関数が内部関数にコールされる頻度の逆（inverse）である。
【数２】
2018185808.tif 000004
【００３８】
そのうち、niは、第i個目の関数がコールされる回数であり、Σnjは、該スマート契約内の全てのコール関係の数量である。図5を例とすると、f3がf2及びf4にコールされ、コールされる回数は、2であり、また、スマート契約1には、4個のコール関係が存在するので、f3のIIF値は、IIF3=log(4/(2+1))である。理解できるように、１つの関数がコールされる回数が多いほど、基礎関数（base  function）である確率が高いため、その重要度が低く、重み（weight）が小さいとの特徴として表される。
【００３９】
もう１つは、CIF（交差コール頻度）である。CIF（交差コール頻度）は、次の式（4）に示すように、関数が他のスマート契約にコールされる頻度である。
【数３】
2018185808.tif 000005
【００４０】
そのうち、|D|は、契約の総数を表し、|j:fi∈dj|は、該関数fiをコールする契約の数量を表す。図5を例とすると、トータルで３つのスマート契約があり、関数f4は、契約2の関数f9にコールされる。よって、f4のCIF値は、CIF4=(1+1)/3である。
【００４１】
最後に、関数のコール関係の特徴は、次の式（5）に示すように、上述の２つの指標の乗積として表することができる。
【００４２】
Wr＝IIF*CIF  （5）
関数f3及びf4を例とすると、次のように計算することができる。
【数４】
2018185808.tif 000006
【００４３】
【数５】
2018185808.tif 000007
【００４４】
以上、各特徴及びその計算の例を示したが、理解すべきは、本発明は、これに限定されず、他の特徴又は他の計算方式を適切に採用しても良い。その後に、並べ替えユニット101は、計算により得られた特徴に対して加重和を求めることで、各関数の最終の並べ替え重みを次の式（8）に示すように得ることができる。
【数６】
2018185808.tif 000008
【００４５】
そのうち、α及びβは、経験値に基づいて設定されても良い。α又はβが0のときに、対応する特徴は、並べ替え時に考慮されない。
【００４６】
各関数のW値を算出した後に、該値に基づいて並べ替えを行い、そして、例えば、W値が最大であるN個の関数を選択し、これにより、テスト設定ユニット103に、これらの関数にイベントモニター及びモニタリングすべきパラメータを設定させる。そのうち、Nの大小は、スマート契約中の数量の変化に伴って変化しても良く、且つ期待されるテスト精度及び受け入れられる時間コストに依存する。
【００４７】
イベントモニターは、関数中のどの行（１行以上）がイベントによりモニタリングされるべきかを指示し、モニタリングすべきパラメータは、どの種類（１種類以上）のパラメータを欠陥診断のためにモニタリングすべきかを指示する。
【００４８】
一例では、テスト設定ユニット103は、関数の次のような位置のうちの少なくとも１つの位置にイベントモニターを設定するように構成されても良く、即ち、スマート契約に係る取引操作の実行前、戻り値の取得前、及び制御構造内という位置である。
【００４９】
例えば、関数が口座関連属性又はイーサ（Ether）関連属性を有すれば、特に、次のような、イーサ（Ether）を送信する時のコール、即ち、<address>.send(uint256  amount)  returns  (bool)；<address>.call.value(uint256  amount)()  returns  (bool)を有するときに、これらのコールの前にイベントモニターを挿入すべきである。
【００５０】
関数がリターンを有する場合、さらにリターンをコールする前にイベントモニターを插入しても良い。関数がリターンを有しない場合、関数の最後の１行にイベントモニターを挿入しても良い。
【００５１】
関数が制御構造を有れば、制御構造の主体内にイベントモニターを設定すべきである。例えば、“if/else”の各ブランチ（branch）中或いは“for”又は“while”のループ（loop）内にイベントモニターを設定することができる。
【００５２】
前述のように、デフォルトイベントログには、テストのための十分な情報が含まれない。よって、十分なテスト用情報を得るために、テスト設定ユニット103は、さらに、どの種類のパラメータがモニタリングされるべきかを指示するために用いられる。
【００５３】
例えば、テスト設定ユニット103は、次のようなパラメータのうちの少なくとも１つに対してモニタリングを行うように構成されても良く、即ち、コール階層情報、ブロックチェーン関連情報、オフラインデバッグのためのパラメータ（オフラインデバッグ用パラメータ）というパラメータである。
【００５４】
一例として、コール階層情報は、次のような情報のうちの少なくとも１つを含んでも良く、即ち、イベントモニターが設定される位置、例えば、行番号；スマート契約の名称（ログ検索のためのものであると標識され得る）；及び、イベントモニターが実行される時間、例えば、タイムスタンプ（timestamp）（ログに対して並べ替えを行うために用いられ得る）である。
【００５５】
ブロックチェーン関連情報は、次のような情報のうちの少なくとも１つを含んでも良く、即ち、スマート契約に係る取引操作のパラメータ、例えば、送受信されるべきイーサ（Ether）の数量；スマート契約に係る取引操作の送信者と受信者、例えば、送信口座と受信口座；スマート契約に係る取引操作を行う前の剰余計算資源（resource）量である。例えば、スマート契約実行前に、一定のgas、即ち、計算資源量を得る必要があり、該gas内でスマート契約の実行が完了するように保証する必要があり、スマート契約に係る取引操作を行う前の剰余計算資源量は、例えば、イーサ（Ether）の送受信を行う前の剰余gas量である。
【００５６】
オフラインデバッグのためのパラメータは、次のようなもののうちの少なくとも１つを含んでも良く、即ち、関数の入力パラメータ値；関数の出力パラメータ値；及び、関数に関連する共通変数というものである。例えば、図5に示す例では、var1が関数f6により影響される可能性があるから、f6のイベント中で共通変数var1をモニタリングすべきである。
【００５７】
図6は、本発明の技術を応用するシナリオを示す図である。そのうち、先ず、イベントが定義されないスマート契約に対して解析を行うことで、並べ替えを行う必要がある関数を取得し、そして、並べ替えユニット101により、例えば、並べ替え重みの降順で並べ替えを行い、それから、選択ユニット102により、前のN個の関数を選択し、そして、テスト設定ユニット103により、N個の関数中の各関数にイベントモニター及びモニタリングすべきパラメータを挿入する。その後に、イベント付きスマート契約をブロックチェーンにデプロイさせて実行させることで、ログを取得(capture）する。ユーザ例えば開発者は、取得されたログをチェックして欠陥を診断することができる。
【００５８】
以上のことから、本実施例における装置100により、スマート契約中の関数の特徴値に基づいて重要関数を選択し、そして、これらの関数にイベントモニター及びモニタリングすべきパラメータを設定することで、大量の階層情報及びパラメータ値を取得し、スマート契約への有効なテストを実現することができる。
【００５９】
＜2．ブロックチェーンに基づくスマート契約に対してテストを行うための方法＞
前述の実施方式において、ブロックチェーンに基づくスマート契約に対してテストを行うための装置を説明したときに、幾つかの処理や方法が既に開示されている。以下、既に記載された一部の説明が省略される。なお、これらの処理や方法は、ブロックチェーンに基づくスマート契約に対してテストを行うための装置を説明したときに開示されているが、必ずしも、説明された部品を採用し、又は、説明された部品により実行される必要がない。例えば、ブロックチェーンに基づくスマート契約に対してテストを行うための装置の実施方式の一部又は全部は、ハードウェア及び／又はファームウェアにより実現されても良い。また、以下に説明する処理や方法は、もちろん、上述のような、ブロックチェーンに基づくスマート契約に対してテストを行うための装置のハードウェア及び／又はファームウェアを採用することができるが、コンピュータ実行可能なプログラムにより実現することもできる。
【００６０】
図7は、本発明の一実施例における、ブロックチェーンに基づくスマート契約に対してテストを行うための方法のフローチャートである。該方法は、スマート契約中の関数の特徴に基づいて関数に対して並べ替えを行い（S11）；並べ替えの結果に基づいて所定数量の関数を選択し（S12）；及び、選択された各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定する（S13）ことを含む。
【００６１】
例えば、ステップS11では、関数の次のような特徴のうちの少なくとも１つに基づいて、特徴の関数に対して並べ替えを行うことができ、即ち、ブロックチェーンに関連する特徴、関数の構造複雑度、及び関数間のコール関係という特徴である。そのうち、特徴の加重和に基づいて、関数に対して並べ替えを行う。
【００６２】
そのうち、前述のブロックチェーンに関連する特徴は、次のようなもののうちの少なくとも１つを含んでも良く、即ち、ブロックチェーンに関連する属性、スマート契約の取引操作に関連する属性、及びスマート契約に係る取引操作の送信者と受信者に関連する属性というものである。関数の構造複雑度は、関数の入力の数量、関数の出力の数量、及び関数中の制御構造の数量のうちの少なくとも１つを採用して表すことができ、また、並べ替えは、各関数の構造複雑度と、全ての関数の構造複雑度の和との比に基づいて行うことができる。関数間のコール関係は、関数がスマート契約内で他の関数にコールされる頻度、及び関数が他のスマート契約にコールされる頻度に基づいて得ることができる。
【００６３】
ステップS13では、関数の次のような位置の少なくともの１つにイベントモニターを設定することができ、即ち、スマート契約に係る取引操作の実行前、戻り値の取得前、及び制御構造内という位置である。また、次のようなパラメータのうちの少なくとも１つに対してモニタリングを行うことができ、即ち、コール階層情報、ブロックチェーン関連情報、及びオフラインデバッグ用パラメータというものである。コール階層情報は、次のようなもののうちの少なくとも１つを含んでも良く、即ち、イベントモニターの設定位置、スマート契約の名称、イベントモニターの実行時間というものである。ブロックチェーン関連情報は、次のようなもののうちの少なくとも１つを含んでも良く、即ち、スマート契約に係る取引操作のパラメータ、スマート契約に係る取引操作の送信者と受信者、スマート契約に係る取引操作実行前の剰余計算資源量というものである。オフラインデバッグ用パラメータは、次のようなもののうちの少なくとも１つを含んでも良く、即ち、関数の入力パラメータ値、関数の出力パラメータ値、及び関数に関連する共通変数というものである。
【００６４】
なお、この実施例中の関連する細部は、ブロックチェーンに基づくスマート契約に対してテストを行うための装置についての説明に既に記載されているので、ここでは省略される。
【００６５】
＜3．本発明の装置及び方法を実施する計算装置＞
上述の装置中の各構成モジュールやユニット（構成要素）は、ソフトウェア、ファームウェア、ハードウェア又はその組み合わせにより構成されても良い。なお、構成時に使用し得る具体的な手段や方式は、当業者にとって周知であるため、ここでは省略される。ソフトウェア又はファームウェアにより実現される場合、記憶媒体又はネットワークから、専用ハードウェア構造を持つコンピュータ（例えば、図8に示すような汎用コンピュータ800）に、該ソフトウェアを構成するプログラムをインストールすることができ、また、該コンピュータは、各種のプログラムがインストールされている時に、各種の機能を実現することができる。
【００６６】
図8では、中央処理装置（CPU）801は、ROM  802に記憶されているプログラム、又は、記憶部808からRAM  803にロードされているプログラムに基づいて、各種の処理を行う。RAM  803には、必要に応じて、CPU  801が各種の処理を実行する時に必要なデータを記憶しても良い。なお、CPU  801、ROM  802及びRAM  803は、バス804を経由して接続される。また、入力／出力インターフェース805も、バス804に接続される。
【００６７】
次のような部品は、入力／出力インターフェース805に接続され、即ち、入力部806（キーボード、マウスなどを含む）、出力部807（表示器、例えば、CRT、LCDなど、及びスピーカーなどを含む）、記憶部808（ハードディスクなどを含む）、及び通信部809（ネットワーク・インターフェース・カード、例えば、LANカード、モデムなどを含む）というような部品である。通信部809は、ネットワーク、例えば、インターネットを経由して通信処理を行う。なお、必要に応じて、ドライブ810を入力／出力インターフェース805に接続させても良い。取り外し可能な媒体811、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体記憶器などは、必要に応じて、ドライブ810にセットされ、その中から読み出されたコンピュータプログラムが必要に応じて記憶部808にインスタールされるようにさせることができる。
【００６８】
ソフトウェアにより上述の一連の処理を実現する場合、ネットワーク、例えば、インターネット、又は記憶媒体、例えば、取り外し可能な媒体811から、ソフトウェアを構成するプログラムをインストールすることができる。
【００６９】
なお、当業者が理解すべきは、このような記憶媒体は、図8に示すような取り外し可能な811に限定されない。取り外し可能な媒体811は、例えば、磁気ディスク（フロッピーディスク（登録商標）を含む）、ディスク（CD-ROM及びDVDを含む）、光磁気ディスク（MD（登録商標）を含む）、及び半導体記憶器を含む。或いは、記憶媒体は、ROM  802、記憶部分808中のハードディスクなどであっても良い。
【００７０】
本発明は、さらに、マシン可読指令コードを含むプログラムプロダクト（プログラム）に関する。指令コードは、マシン（例えば、コンピュータ）により読み出されて実行される時に、前述の実施例における方法を実行することができる。
【００７１】
それ相応に、前述のようなマシン可読取指令コードを含むプログラムプロダクトを記憶した記憶媒体も本発明の開示に含まれる。該記憶媒体は、フロッピーディスク、光ディスク、光磁気ディスク、メモリカードなどを含むが、これらに限定されない。
【００７２】
また、上述の各実施例に関し、さらに次のような付記を開示する。
【００７３】
（付記1）
ブロックチェーンに基づくスマート契約に対してテストを行うための装置であって、
スマート契約中の関数の特徴に基づいて、前記関数に対して並べ替えを行うための並べ替えユニット；
前記並べ替えの結果に基づいて、所定数量の関数を選択するための選択ユニット；及び
前記選択ユニットが選択した各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定するためのテスト設定ユニットを含む、装置。
【００７４】
（付記2）
付記1に記載の装置であって、
前記並べ替えユニットは、前記ブロックチェーンに関連する特徴、前記関数の構造複雑度、及び関数間のコール関係という前記関数の特徴のうちの少なくとも１つに基づいて、前記関数に対して並べ替えを行い、
前記並べ替えユニットは、前記特徴の加重和に基づいて、前記関数に対して並べ替えを行う、装置。
【００７５】
（付記3）
付記2に記載の装置であって、
前記ブロックチェーンに関連する特徴は、前記ブロックチェーンに関連する属性、前記スマート契約の取引操作に関連する属性、及び、前記スマート契約に係る取引操作の送信者と受信者に関連する属性のうちの少なくとも１つを含む、装置。
【００７６】
（付記4）
付記2に記載の装置であって、
前記関数の構造複雑度は、前記関数の入力の数量、前記関数の出力の数量、及び前記関数中の制御構造の数量のうちの少なくとも１つを用いて表され、
前記並べ替えユニットは、各関数の構造複雑度と、全ての関数の構造複雑度の和との比に基づいて並べ替えを行う、装置。
【００７７】
（付記5）
付記2に記載の装置であって、
前記関数間のコール関係は、前記関数が前記スマート契約内で他の関数にコールされる頻度、及び前記関数が他のスマート契約にコールされる頻度に基づいて得られる、装置。
【００７８】
（付記6）
付記1に記載の装置であって、
前記テスト設定ユニットは、前記関数の次のような位置のうちの少なくとも１つに前記イベントモニターを設定し、即ち、前記スマート契約に係る取引操作の実行前、戻り値の取得前、及び制御構造内という位置である、装置。
【００７９】
（付記7）
付記1に記載の装置であって、
前記テスト設定ユニットは、コール階層情報、ブロックチェーン関連情報、及びオフラインデバッグ用パラメータというパラメータのうちの少なくとも１つに対してモニタリングを行う、装置。
【００８０】
（付記8）
付記7に記載の装置であって、
前記コール階層情報は、前記イベントモニターの設定位置、前記スマート契約の名称、及び前記イベントモニターの実行時間という情報のうちの少なくとも１つを含む、装置。
【００８１】
（付記9）
付記7に記載の装置であって、
前記ブロックチェーン関連情報は、前記スマート契約に係る取引操作のパラメータ、前記スマート契約に係る取引操作の送信者と受信者、及び前記スマート契約に係る取引操作実行前の剰余計算資源量という情報のうちの少なくとも１つを含む、装置。
【００８２】
（付記10）
付記7に記載の装置であって、
前記オフラインデバッグ用パラメータは、前記関数の入力パラメータ値、前記関数の出力パラメータ値、及び前記関数に関連する共通変数というもののうちの少なくとも１つを含む、装置。
【００８３】
（付記11）
ブロックチェーンに基づくスマート契約に対してテストを行うための方法であって、
スマート契約中の関数の特徴に基づいて前記関数に対して並べ替えを行い；
前記並べ替えの結果に基づいて所定数量の関数を選択し；及び
選択された各関数について、それぞれ、テストのためのイベントモニター及びモニタリングすべきパラメータを設定することを含む、方法。
【００８４】
（付記12）
付記11に記載の方法であって、
前記関数の特徴、即ち、前記ブロックチェーンに関連する特徴、前記関数の構造複雑度、及び関数間のコール関係、のうちの少なくとも１つに基づいて前記関数に対して並べ替えを行い、
そのうち、前記特徴の加重和に基づいて前記関数に対して並べ替えを行う、方法。
【００８５】
（付記13）
付記12に記載の方法であって、
前記ブロックチェーンに関連する特徴は、記ブロックチェーンに関連する属性、前記スマート契約の取引操作に関連する属性、及び、前記スマート契約に係る取引操作の送信者と受信者に関連する属性のうちの少なくとも１つを含む、方法。
【００８６】
（付記14）
付記12に記載の方法であって、
前記関数の構造複雑度は、前記関数の入力の数量、前記関数の出力の数量、及び前記関数中の制御構造の数量のうちの少なくとも１つにより表され、
前記並べ替えは、各関数の構造複雑度と、全ての関数の構造複雑度の和との比に基づいて行われる、方法。
【００８７】
（付記15）
付記12に記載の方法であって、
前記関数間のコール関係は、前記関数が前記スマート契約内で他の関数によりコールされる頻度、及び前記関数が他のスマート契約によりコールされる頻度に基づいて取得される、方法。
【００８８】
（付記16）
付記11に記載の方法であって、
前記関数の次のような位置、即ち、前記スマート契約に係る取引操作の実行前、戻り値の取得前、及び制御構造内という位置のうちの少なくともの１つの処に前記イベントモニターを設定する、方法。
【００８９】
（付記17）
付記11に記載の方法であって、
コール階層情報、ブロックチェーン関連情報、及びオフラインデバッグ用パラメータのうちの少なくとも１つに対してモニタリングを行う、方法。
【００９０】
（付記18）
付記17に記載の方法であって、
前記コール階層情報は、次の情報、即ち、前記イベントモニターの設定位置、前記スマート契約の名称、及び前記イベントモニターの実行時間のうちの少なくとも１つを含む、方法。
【００９１】
（付記19）
付記17に記載の方法であって、
前記ブロックチェーン関連情報は、前記スマート契約に係る取引操作のパラメータ、前記スマート契約に係る取引操作の送信者と受信者、及び前記スマート契約に係る取引操作実行前の剰余計算資源量のうちの少なくとも１つを含む、方法。
【００９２】
（付記20）
付記17に記載の方法であって、
前記オフラインデバッグ用パラメータは、前記関数の入力パラメータ値、前記関数の出力パラメータ値、及び前記関数に関連する共通変数のうちの少なくとも１つを含む、方法。
【００９３】
以上、本発明の好ましい実施形態を説明したが、本発明はこの実施形態に限定されず、本発明の趣旨を離脱しない限り、本発明に対するあらゆる変更は本発明の技術的範囲に属する。
【図１】
2018185808.tif 000009
【図２】
2018185808.tif 000010
【図３】
2018185808.tif 000011
【図４】
2018185808.tif 000012
【図５】
2018185808.tif 000013
【図６】
2018185808.tif 000014
【図７】
2018185808.tif 000015
【図８】
2018185808.tif 000016