(57)【要約】      （修正有）【課題】スマート・コントラクトのための不確定性要因検出装置、方法及び媒体を提供する。【解決手段】スマート・コントラクトのための不確定性要因検出装置１００は、分析ユニット１０１及び検出ユニット１０２を含む。分析ユニット１０１は、スマート・コントラクトを抽象構文木に変換する。抽象構文木に対して走査を行い、台帳操作及び台帳書き込み操作の実行経路を取得する。検出ユニット１０２は、実行経路について、台帳操作に不確定性要因が含まれるかを検出する。【選択図】図１
2020042795.tif 000002
【特許請求の範囲】
【請求項１】
スマート・コントラクトのための不確定性要因検出装置であって、
前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析する分析ユニット；及び
前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出する検出ユニットを含み、
前記分析ユニットは、前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する、検出装置。
【請求項２】
請求項1に記載の検出装置であって、
前記分析ユニットは、さらに、
前記スマート・コントラクトを抽象構文木に変換し；及び
前記抽象構文木の走査のための標準ライブラリを、前記トラバーサル経路を記録するために修正する、検出装置。
【請求項３】
請求項1又は2に記載の検出装置であって、
前記不確定性要因は、コード不確定性要因及び取引不確定性要因を含む、検出装置。
【請求項４】
請求項3に記載の検出装置であって、
前記検出ユニットが、前記台帳操作に前記コード不確定性要因が含まれるかを検出することは、
バックトラッキングの方式で、前記台帳操作の対象及び値にコード不確定性要因が含まれるかを判断することを含む、検出装置。
【請求項５】
請求項4に記載の検出装置であって、
前記台帳操作は、台帳読み取り操作及び台帳書き込み操作を含む、検出装置。
【請求項６】
請求項5に記載の検出装置であって、
前記検出ユニットが、前記台帳操作に前記取引不確定性要因が含まれるかを検出することは、
前記台帳読み取り操作でエンドする実行経路において、バックトラッキングの方式で、該実行経路に前記台帳書き込み操作が発生したかを判断することを含む、検出装置。
【請求項７】
請求項6に記載の検出装置であって、
前記台帳読み取り操作及び前記台帳書き込み操作は、同じ台帳対象に対して行われる、検出装置。
【請求項８】
請求項7に記載の検出装置であって、
前記検出ユニットが、前記台帳操作に前記取引不確定性要因が含まれるかを検出することは、さらに、
前記台帳書き込み操作及び前記台帳読み取り操作の前に前記台帳対象の変数が修正されたかを判断することを含む、検出装置。
【請求項９】
スマート・コントラクトのための不確定性要因検出方法であって、
前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析し；及び
前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出することを含み、
前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する、検出方法。
【請求項１０】
プログラムを記憶しているコンピュータ読み取り可能な記憶媒体であって、
前記プログラムは、コンピュータに、請求項9に記載の検出方法を実行させるためのものである、記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ブロックチェーンの技術分野に関し、特に、スマート・コントラクトのための不確定性要因（Uncertainty  Factor）の検出装置及び方法に関する。
【背景技術】
【０００２】
この部分では、本開示に関連する背景情報が記載されるが、それは、必ずしも従来技術でない。
【０００３】
今のところ、ハイパーレジャー（Hyper  ledger）が最も流行っている、コンソーシアムブロックチェーン（Consortium  Blockchain）に適したブロックチェーン・フラットフォームであり、その特徴は、開発者に有利であり、企業は、自身のニーズに応じて、複雑な業務のアプリケーションを開発することができる。ハイパーレジャーでは、スマート・コントラクトを書くコアな言語がGo言語であり、また、ハイパーレジャーでは、スマート・コントラクトにより生成される取引において一連のノードの裏書き（Endorsement）が必要となり、裏書き段階では、各ノードが生成する台帳のRWSet（Read／Write  Set）が不一致の場合、取引の失敗を来すことがある。よって、Go言語で書かれるスマート・コントラクトの、各裏書きノード上の実行結果の一致性を確保する必要があり、即ち、不確定性を含むことができない。
【０００４】
しかし、開発者は、通常、スマート・コントラクトのコード又は取引の不確定性問題を無視し、取引の失敗を引き起こしやすいスマート・コントラクト・コードを書いてしまう恐れがある。
【０００５】
また、スマート・コントラクトにより生成される取引は、即時に有効になるのでなく、裏書き手順（模擬実行）、取引並べ替え手順、台帳提出手順を経る必要があり、また、台帳提出手順のみにおいては、コード中の台帳に対しての修正が有効になる。従来では、プログラマは、開発過程において、通常、１つの状態値を修正し、該状態値を台帳へ書き戻し、また、該状態値を再び読み取るときに修正後の状態値を取得し得ると思う。実際には、裏書き段階において台帳へ書き戻される状態値がすぐに有効になるのでなく、再び読み取った状態値が依然として一回目に読み取ったものと同じ値であるため、取引の不確定性を引き起こしやすく、即ち、取引の実行結果は、開発者の予期と不一致になる可能性がある。よって、従来では、このようなコード又は取引の不確定性を検出し得るツールが望ましい。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本開示の目的は、上述のような問題を解決し得る技術案を提供し、特に、スマート・コントラクトのための不確定性要因検出装置及び方法を提供することにある。
【課題を解決するための手段】
【０００７】
本開示の一側面によれば、スマート・コントラクトのための不確定性要因検出装置が提供され、それは、分析ユニットであって、前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析するためのもの；及び、検出ユニットであって、前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出するためのものを含み、そのうち、前記分析ユニットは、前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する。
【０００８】
本開示の他の側面によれば、スマート・コントラクトのための不確定性要因検出方法が提供され、それは、前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析し；及び、前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出することを含み、そのうち、前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する。
【０００９】
本開示の他の側面によれば、プログラムプロダクトが提供され、該プログラムプロダクトは、その中にマシン可読指令コードが含まれおり、そのうち、前記指令コードは、コンピュータにより読み取られて実行されるときに、前記コンピュータに、本開示によるスマート・コントラクトのための不確定性要因検出方法を実行させることができる。
【００１０】
本開示の他の側面によれば、マシン可読記憶媒体が提供され、その中に本開示によるプログラムプロダクトが含まれている。
【００１１】
本開示によるスマート・コントラクトのための不確定性検出装置及び方法は、スマート・コントラクトの開発者の効率を大幅に向上させることができ、また、コントラクト実行過程においてコードの不確定性による裏書きの失敗を減らすことができるとともに、取引の不確定性の発生を低減することもできる。
【図面の簡単な説明】
【００１２】
【図１】本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出装置のブロック図である。
【図２】本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出装置の分析ユニットが経路拡張を行うことを示す図である。
【図３】本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出装置の検出ユニットが検出を行うことを示す図である。
【図４】本開示の一実施例における取引の不確定性を示す図である。
【図５】本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出案全体の構成図である。
【図６】本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法のフローチャートである。
【図７】本開示の実施例におけるスマート・コントラクトのための不確定性要因検出装置及び方法を実現し得る汎用コンピュータの構成図である。
【発明を実施するための形態】
【００１３】
以下、添付した図面を参照しながら、本開示を実施するための好適な形態を詳細に説明する。なお、このような実施形態は、例示に過ぎず、本開示を限定するものでない。
【００１４】
本開示の技術案をより良く理解し得るために、以下、本開示のスマート・コントラクトのための不確定性要因検出装置及び検出方法について詳しく説明する。
【００１５】
本開示の一実施例によれば、スマート・コントラクトのための不確定性要因検出装置が提供され、それは、分析ユニットであって、前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析するもの；及び、検出ユニットであって、前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出するものを含み、そのうち、前記分析ユニットは、前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する。
【００１６】
図1は、本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出装置100を示す。図1に示すように、本開示によるスマート・コントラクトのための不確定性要因検出装置100は、分析ユニット101及び検出ユニット102を含んでも良い。
【００１７】
分析ユニット101は、スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析する。例えば、本開示の一実施例によれば、分析ユニット101は、まず、スマート・コントラクトを抽象構文木（AST）に変換する。その後、例えば、深さ優先トラバーサル（Depth  First  Traversal）アルゴリズムを用いて前記ASTに対して走査（Traversal）を行い、前記台帳操作（例えば、台帳読み取り操作（即ち、台帳を読み取る操作）及び台帳書き込み操作（即ち、台帳に書き込む操作））のトラバーサル経路、即ち、実行経路を取得する。ここで、当業者が理解すべきは、深さ優先トラバーサル・アルゴリズムは、例示に過ぎず、本開示は、これに限定されない。当業者は、従来技術中の任意の他の周知の走査方法を採用しても良い。
【００１８】
その後、前記分析ユニット101が前記ASTに対して構文分析を行うときに、行に跨る語句、例えば、if、switch、forなどの文が存在する場合があり、このような語句の間に台帳操作コードが無いとき、これらの行に跨る語句について、深さ優先トラバーサル・アルゴリズムは、通常、１行目のみの情報を記録する。しかし、記録されない語句の間の情報には、台帳操作対象の変数に対しての修正が存在する可能性があるので、具体的な台帳操作対象に変化があるかを判断するときに、これらの行に跨る語句の間（内部）の全ての語句を記録する必要がある。即ち、これらの行に跨る語句に対して内部拡張を行う必要がある。
【００１９】
本開示の一実施例によれば、前記分析ユニット101は、前記台帳操作のトラバーサル経路に分岐構造、即ち、行に跨る語句、例えば、if、switch、forなどの文が含まれるかを判断するように構成されても良い。前記トラバーサル経路に分岐構造が含まれている場合、前記トラバーサル経路を拡張する。
【００２０】
具体的には、まず、前記分析ユニット101は、構文分析により、抽出した、行に跨る語句、例えば、if、switch、forなどの文の開始位置を記録する。その後、全ての台帳操作に関連する実行経路においてこれらの行に跨る語句の１行目が含まれるかを判断する。これらの行に跨る語句の１行目が含まれている場合、該１行目をその対応する範囲内の全ての行に置き換える。
【００２１】
例えば、図2に示すように、台帳操作関数GetState(K1)の実行経路にif分岐構造を表す１行目L3が含まれており、台帳操作関数GetState(K1)のL10行を実行するときに、L3行は、既に実行されている。しかし、このときに、台帳操作関数GetState(K1)の実行経路は、L1、L2、L3、L9、L10のみである。L3行が表すif分岐構造の内部、例えば、L5行に台帳の操作対象変数への修正が生じる場合（例えば、状態更新操作PutState(K1、V1)が行われるとき）、不確定性リスクの発生を引き起こす可能性がある。よって、L3行が表すif分岐条件の他の範囲を実行経路に拡張する必要がある。図2に示すように、L3行が表すif分岐条件の他の範囲は、L3、L4、L5、L6、L7、L8である。よって、拡張後の台帳操作関数GetState(K1)の拡張後の実行経路は、L1、L2、L3、L4、L5、L6、L7、L8、L9、L10である。このような拡張方法を採用することにより、後続の制御流分析時に、if分岐条件の内部のコードを無視することができない。
【００２２】
続いて、検出ユニット102は、前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出しても良い。本開示の一実施例によれば、前記不確定性要因は、コード不確定性要因及び取引不確定性要因を含んでも良い。
【００２３】
また、Go言語標準ライブラリでは、抽象構文木（AST）に対して深さ走査（トラバーサル）を行うツールが提供されているが、トラバーサル経路情報を記録することができない。よって、本開示の一実施例によれば、前記分析ユニット101は、さらに、前記トラバーサル経路を記録するために、前記ASTの走査のための標準ライブラリを修正するように構成されても良い。
【００２４】
例えば、本開示の実施例によれば、前記ASTに対して深さ走査を行うときに、前記分析ユニット101は、構文分析により、台帳操作コード（例えば、PutState()及びGetState()）を検出し、台帳操作コードを検出したときに、該台帳操作コードに対応する具体的な実行経路も同時に記録することができる。
【００２５】
＜コード不確定性の検出＞
本開示の一実施例によれば、不確定性要因は、コード不確定性要因を含む。コード不確定性要因は、例えば、Go言語自身による不確定性要因、例えば、乱数生成、グローバル変数、タイムスタンプ、キーと値のペアのデータ構造の走査、及び対象アドレスなどを含む。コード不確定性要因は、さらに、外部呼び出し、例えば、ネットワークサービス、外部ライブラリ呼び出し、及びシステム命令などを含んでも良い。また、コード不確定性要因は、さらに、Fabric実行メカニズムによる不確定性、例えば、クロス・チャンネル・チェーン・コード(chaincode)呼び出し及びレンジ（range）・クエリ・リスクなどを含んでも良い。なお、当業者が理解すべきは、このようなコード不確定性要因は、例示に過ぎず、本開示は、これに限定されない。
【００２６】
本開示は、スマート・コントラクトのためのコード不確定性検出装置を提供する。
【００２７】
本開示によるスマート・コントラクトのためのコード不確定性検出装置は、分析ユニットであって、前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析するもの；及び、検出ユニットであって、前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出するものを含み、そのうち、前記分析ユニットは、前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張し、また、前記検出ユニットは、さらに、前記トラバーサル経路について、バックトラッキングの方式で、前記台帳操作の対象及び値にコード不確定性要因が含まれるかを判断するように構成される。
【００２８】
ここで、分析ユニットに関連する構成は、上述の実施例における分析ユニット101の構成と同じであるため、詳しい説明が省略される。
【００２９】
本開示の一実施例によれば、前記検出ユニットは、さらに、前記トラバーサル経路について、バックトラッキングの方式で、前記台帳操作の対象及び値にコード不確定性要因が含まれるかを判断するように構成されても良い。具体的には、前記検出ユニット102は、全ての台帳操作の操作対象を抽出し、その後、バックトラッキングの方式で該台帳操作に対応する実行経路上の操作対象（変数）に不確定性因子が含まれるかを分析することができる。含まれている場合、コード不確定性リスクが発生し得ると判定する。具体的なプロセスは、図3に示す通りである。そのうち、行76は、見つけた台帳操作、即ち、PutState()を表し、該台帳操作PutState()は、２つの可能な実行経路（実線で示される）を有する。その後、該台帳操作PutState()の操作対象K1及びV1を抽出する。そして、バックトラッキングの方式（破線でバックトラッキング経路を示す）で、該台帳操作PutState()に対応する実行経路中の操作対象K1及びV1に不確定性因子が含まれるかを分析する。操作対象に不確定性因子が含まれるかを判断するときに、本開示では、少なくとも3種類のフォーマットの操作対象、例えば、変数、定数、定数と変数との組合せの分析をサポートし得る。しかし、定数は、直接比較することができるため、ここでは、その詳しい説明が省略される。換言すると、ここでは、変数のみを抽出し、実行経路に対してバックトラッキング分析を行うときに、該変数に係る部分に不確定性リスクが含まれるかを判断しても良い。なお、当業者が理解すべきは、このような検出プロセスは、例示に過ぎず、本開示は、上述のようなプロセスにおけるステップ及びその順序に限定されない。
【００３０】
本開示の一実施例によれば、前記台帳操作は、台帳読み取り操作及び台帳書き込み操作を含んでも良い。もちろん、当業者が理解すべきは、このような台帳読み取り操作及び台帳書き込み操作は、例示に過ぎず、本開示は、これに限定されない。
【００３１】
本開示による制御流分析に基づくスマート・コントラクト不確定性検出装置を用いることにより、実行経路を拡張することでスマート・コントラクトのコード不確定性リスクを有効に検出し、また、該リスクの所在する行を記録することができる。よって、ハイパーレジャーにおいてスマート・コントラクトにより生成される取引における裏書きの失敗を減らすことができる。
【００３２】
＜取引不確定性の検出＞
スマート・コントラクトの実行が裏書き段階で行われ、また、裏書き段階では、台帳に対して更新操作が行われないので、１つのコントラクトにおいて１つの特定の台帳状態に対して、先に修正を行い、それから読み取るという操作を行うときに、開発者の読み取った内容が依然として修正前のものと同じである可能性があるため、取引の不確定性のリスクを来しやすい。本開示では、このような不確定性リスクを「RYWリスク」（“Read-Your-Write  Risk”）と言い、具体的には、図4に示す通りである。
【００３３】
１つの取引では、台帳の操作対象K1及び値V1について、開発者が「K1=V1」を書き込んだ場合、前述のように、スマート・コントラクトにより生成される取引は、すぐに有効になるのでなく、即ち、該書き込みは、即時に有効にならず、台帳データベースには、K1が依然としてV0に等しい。この場合、開発者がK1の値を取得する必要があるときに、「K1=V1」でなく、「K1=V0」を得るため、取引の不確定性を引き起こすことができる。
【００３４】
よって、本開示は、スマート・コントラクトのための取引不確定性検出装置を提供する。
【００３５】
スマート・コントラクトのための取引不確定性検出装置は、前述の分析ユニット101及び検出ユニット102を含み、以上では、前記分析ユニット101について既に詳細に説明しているから、ここでは、その詳しい記載を省略する。
【００３６】
本開示の一実施例によれば、検出ユニット102が、前記台帳操作に前記取引不確定性要因が含まれるかを検出することは、前記台帳読み取り操作でエンド（end）する実行経路において、バックトラッキングの方式で、該実行経路に前記台帳書き込み操作が発生したかを判断することを含んでも良い。
【００３７】
具体的には、検出ユニット102は、全ての台帳読み取り操作（GetState()）について、その前の実行経路に台帳書き込み操作（PutState()）が含まれるかを分析しても良い。そのうちの１つの実行経路における台帳読み取り操作の前に台帳書き込み操作が含まれており、且つその操作の対象が同じ台帳状態（変数）である場合、さらに台帳書き込み操作及び台帳読み取り操作の前に該変数に修正があったかを判断する。該変数に修正がない場合、台帳読み取り操作及び台帳書き込み操作の対象が同じ台帳状態であることを示し、この場合、取引不確定性リスク即ちRYWリスクが発生したと判定する。
【００３８】
要するに、本開示は、制御流分析に基づくスマート・コントラクト不確定性要因の検出案を提供する。図5に示すように、まず、スマート・コントラクトを抽象構文木（AST）に変換し、その後、深さ走査アルゴリズムを最適化することで、それがトラバーサル経路（即ち、実行経路）を記録し得るようにさせる。そして、最適化後の深さ走査アルゴリズムを用いて、ASTに対して走査を行うことで、全ての台帳操作（台帳読み取り操作及び台帳書き込み操作）を見つけると同時に、各台帳操作の実行経路を記録する。また、ASTに対して構文分析を行うときに、行に跨る幾つかの語句の範囲、例えば、if、switch、forなどの文に係る範囲を抽出し、こられの行に跨る語句の範囲情報を用いて実行経路を拡張する。
【００３９】
続いて、スマート・コントラクトのコード不確定性検出について、まず、前記ASTに対して構文分析を行い、その後、台帳操作の実行経路においてバックトラッキングの方式で、台帳操作の対象及び値にコード不確定性要因が含まれるかを判断し、また、取引不確定性検出について、まず、台帳読み取り操作でエンドする全ての実行経路を分析し、該経路に台帳書き込み操作が発生したかを判断し、台帳書き込み操作及び台帳読み取り操作の対象が同じ台帳対象（変数）であり、且つ該対象が台帳書き込み操作と台帳読み取り操作との間に修正されたことがない場合、取引不確定性リスク即ちRYWリスクリスクが発生したと判断する。
【００４０】
本開示によるスマート・コントラクトのための不確定性検出装置を用いることにより、スマート・コントラクトの開発者の効率を大幅に向上させることができ、また、コントラクト実行過程においてコード不確定性による裏書きの失敗を減らすことができるとともに、取引不確定性の発生を低減することもできる。
【００４１】
以下、図6をもとに、本開示による実施例のスマート・コントラクトのための不確定性要因検出方法を説明する。図6に示すように、本開示の実施例におけるスマート・コントラクトのための不確定性要因検出方法は、ステップS610でスタートする。
【００４２】
ステップS610では、前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析し、前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する。
【００４３】
続いて、ステップS620では、前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出する。
【００４４】
本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法は、さらに、前記スマート・コントラクトを抽象構文木に変換し；及び前記抽象構文木の走査のための標準ライブラリを、前記トラバーサル経路を記録し得るように修正することを含む。
【００４５】
本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法では、前記不確定性要因は、コード不確定性要因及び取引不確定性要因を含む。
【００４６】
本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法では、前記台帳操作に前記コード不確定性要因が含まれるかの検出は、バックトラッキングの方式で、前記台帳操作の対象及び値にコード不確定性要因が含まれるかを判断することを含む。
【００４７】
本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法では、前記台帳操作は、台帳読み取り操作及び台帳書き込み操作を含む。
【００４８】
本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法では、前記台帳操作に前記取引不確定性要因が含まれるかの検出は、前記台帳読み取り操作でエンドする実行経路において、バックトラッキングの方式で、該実行経路に前記台帳書き込み操作が発生したかを判断することを含む。
【００４９】
本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法では、前記台帳読み取り操作及び前記台帳書き込み操作の対象は、同じ台帳対象の変数である。
【００５０】
本開示の一実施例におけるスマート・コントラクトのための不確定性要因検出方法では、前記台帳操作に前記取引不確定性要因が含まれるかの検出は、さらに、前記台帳書き込み操作及び前記台帳読み取り操作の前に前記台帳対象の変数が修正されたかを判断することを含む。
【００５１】
本開示によるスマート・コントラクトのための不確定性検出方法を用いることにより、スマート・コントラクトの開発者の効率を大幅に向上させることができ、また、コントラクト実行過程においてコード不確定性による裏書きの失敗を減らすことができるとともに、取引不確定性の発生を低減することもできる。
【００５２】
本開示の実施例におけるスマート・コントラクトのための不確定性要因検出方法における上述のステップの各種の具体的な実施方式は、前に既に詳細に説明されているがため、ここでは、その詳しい記載を割愛する。
【００５３】
また、明らかのように、本開示によるスマート・コントラクトのための不確定性要因検出方法の各操作プロセスは、各種のマシン可読記憶媒体に含まれているコンピュータ実行可能なプログラムにより実現することもできる。
【００５４】
さらに、本開示の目的は、次のような方式で実現されても良く、即ち、上述の実行可能なプログラムコードを含む記憶媒体を直接又は間接的にシステム又は機器に提供し、該システム又は機器中のコンピュータ又は中央処理ユニット（CPU）は、上述のプログラムコードを読み取って実行することである。このときに、該システム又は機器はプログラムを実行し得る機能を有すれば良い。なお、本開示の実施方式は、プログラムに限定されず、また、該プログラムは、任意の形式のものであっても良く、例えば、オブジェクトプログラム、インタプリタ実行のプログラム、又は、オペレーティングシステムに提供するスクリプトプログラムなどであっても良い。
【００５５】
これらのマシン可読記憶媒体は、各種の記憶デバイス、記憶ユニット、半導体記憶装置、ディスクユニット、例えば、光、磁気、及び光磁気ディスク、及び、記憶情報を記憶し得る他の媒体などを含んでも良いが、これに限定されない。
【００５６】
また、コンピュータがインターネット上のウェブサイトにアクセスし、本開示によるコンピュータプログラムコードをダウンロードしてインストールし、その後、該プログラムを実行することにより、本開示による技術案を実現することもできる。
【００５７】
なお、上述の一連の処理は、ソフトウェア及び／又はファームウェアにより実現されても良い。ソフトウェア及び／又はファームウェアにより実現される場合、記憶媒体又はネットワークから、専用ハードウェアを有するコンピュータ、例えば、図7に示す汎用コンピュータ1300に、該ソフトウェアを構成するプログラムをインストールし、該コンピュータは、各種のプログラムがインストールされているときに、各種の機能を実行することができる。
【００５８】
本開示の実施例におけるスマート・コントラクトのための不確定性要因検出装置及び方法を実現し得る汎用コンピュータの構成図である。
【００５９】
図7では、中央処理装置（CPU）1301は、ROM  1302に記憶されているプログラム又は記憶部1308からRAM  1303にロードされているプログラムに基づいて各種の処理を行う。RAM  1303では、さらに、CPU  1301が各種の処理などを実行するときに必要なデータを記憶しても良い。CPU  1301、ROM  1302、及びRAM  1303は、バス1304により互いに接続される。入力／出力インターフェース1305もバス1304に接続される。
【００６０】
また、次のような部品は、入力／出力インターフェース1305に接続され、即ち、入力部606（キーボード、マウスなどを含む）、出力部1307（表示器、例えば、CRT、LCDなど、及びスピーカーなどを含む）、記憶部1308（ハードディスクなどを含む）、及び通信部1309（ネットワーク・インターフェース・カード、例えば、LANカード、モデムなどを含む）というような部品である。通信部1309は、ネットワーク、例えば、インターネットを経由して通信処理を行う。なお、必要に応じて、ドライブ1310を入力／出力インターフェース1305に接続させても良い。取り外し可能な媒体1311、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体記憶器などは、必要に応じて、ドライブ1310にセットされ、その中から読み出されたコンピュータプログラムが必要に応じて記憶部1308にインスタールされるようにさせることができる。
【００６１】
また、本開示は、さらに、マシン可読指令コードを含むプログラムプロダクトを提供する。このような指令コードは、マシンにより読み取られて実行されるときに、上述の本開示の実施形態における方法を実行することができる。それ相応に、このようなプログラムプロダクトをキャリー（carry）する、例えば、磁気ディスク（フロッピーディスク（登録商標）を含む）、光ディスク（CD-ROM及びDVDを含む）、光磁気ディスク（MD（登録商標）を含む）、及び半導体記憶器などの各種記憶媒体も、本開示に含まれる。
【００６２】
上述の記憶媒体は、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体記憶器などを含んでも良いが、これらに限定されない。
【００６３】
また、本開示の上述の方法の各操作（処理）は、各種のマシン可読記憶媒体に記憶されているコンピュータ実行可能なプログラムの方式で実現することもできる。
【００６４】
また、以上の実施例などに関し、さらに以下のように付記を開示する。
【００６５】
（付記1）
スマート・コントラクトのための不確定性要因検出装置であって、
分析ユニットであって、前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析するもの；及び
検出ユニットであって、前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出するものを含み、
前記分析ユニットは、前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する、検出装置。
【００６６】
（付記2）
付記1に記載の検出装置であって、
前記分析ユニットは、さらに、
前記スマート・コントラクトを抽象構文木に変換し；及び
前記抽象構文木の走査のための標準ライブラリを、前記トラバーサル経路を記録するために修正する、検出装置。
【００６７】
（付記3）
付記1又は2に記載の検出装置であって、
前記不確定性要因は、コード不確定性要因及び取引不確定性要因を含む、検出装置。
【００６８】
（付記4）
付記3に記載の検出装置であって、
前記検出ユニットが、前記台帳操作に前記コード不確定性要因が含まれるかを検出することは、
バックトラッキングの方式で、前記台帳操作の対象及び値にコード不確定性要因が含まれるかを判断することを含む、検出装置。
【００６９】
（付記5）
付記4に記載の検出装置であって、
前記台帳操作は、台帳読み取り操作及び台帳書き込み操作を含む、検出装置。
【００７０】
（付記6）
付記5に記載の検出装置であって、
前記検出ユニットが、前記台帳操作に前記取引不確定性要因が含まれるかを検出することは、
前記台帳読み取り操作でエンドする実行経路において、バックトラッキングの方式で、該実行経路に前記台帳書き込み操作が発生したかを判断することを含む、検出装置。
【００７１】
（付記7）
付記6に記載の検出装置であって、
前記台帳読み取り操作及び前記台帳書き込み操作は、同じ台帳対象に対して行われる、検出装置。
【００７２】
（付記8）
付記7に記載の検出装置であって、
前記検出ユニットが、前記台帳操作に前記取引不確定性要因が含まれるかを検出することは、さらに、
前記台帳書き込み操作及び前記台帳読み取り操作の前に前記台帳対象の変数が修正されたかを判断することを含む、検出装置。
【００７３】
（付記9）
付記7に記載の検出装置であって、
前記台帳対象の類型は、括定数、変数、及び、定数と変数との組合せを含む、検出装置。
【００７４】
（付記10）
スマート・コントラクトのための不確定性要因検出方法であって、
前記スマート・コントラクトの台帳操作について、そのトラバーサル経路を分析し；及び
前記トラバーサル経路について、前記台帳操作に不確定性要因が含まれるかを検出することを含み、
前記トラバーサル経路に分岐構造が含まれていると判断したときに、前記トラバーサル経路を拡張する、検出方法。
【００７５】
（付記11）
付記10に記載の検出方法であって、さらに、
前記スマート・コントラクトを抽象構文木に変換し；及び
前記抽象構文木の走査のための標準ライブラリを、前記トラバーサル経路を記録するために修正することを含む、検出方法。
【００７６】
（付記12）
付記10又は11に記載の検出方法であって、
前記不確定性要因は、コード不確定性要因及び取引不確定性要因を含む、検出方法。
【００７７】
（付記13）
付記12に記載の検出方法であって、
前記台帳操作に前記コード不確定性要因が含まれるかを検出することは、
バックトラッキングの方式で、前記台帳操作の対象及び値にコード不確定性要因が含まれるかを判断することを含む、検出方法。
【００７８】
（付記14）
付記13に記載の検出方法であって、
前記台帳操作は、台帳読み取り操作及び台帳書き込み操作を含む、検出方法。
【００７９】
（付記15）
付記14に記載の検出方法であって、
前記台帳操作に前記取引不確定性要因が含まれるかを検出することは、
前記台帳読み取り操作でエンドする実行経路において、バックトラッキングの方式で、該実行経路に前記台帳書き込み操作が発生したかを判断することを含む、検出方法。
【００８０】
（付記16）
付記15に記載の検出方法であって、
前記台帳読み取り操作及び前記台帳書き込み操作は、同じ台帳対象に対して行われる、検出方法。
【００８１】
（付記17）
付記16に記載の検出方法であって、
前記台帳操作に前記取引不確定性要因が含まれるかを検出することは、さらに、
前記台帳書き込み操作及び前記台帳読み取り操作の前に前記台帳対象の変数が修正されたかを判断することを含む、検出方法。
【００８２】
（付記18）
付記16に記載の検出方法であって、
前記台帳対象の類型は、定数、変数、及び、定数と変数との組合せを含む、検出装置。
【００８３】
（付記19）
コンピュータに、付記10-18のうちの任意の1項に記載の検出方法を実行させるためのプログラム。
【００８４】
（付記20）
付記19に記載のプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【００８５】
以上、本開示の好ましい実施形態を説明したが、本開示はこの実施形態に限定されず、本開示の趣旨を離脱しない限り、本開示に対するあらゆる変更は、本開示の技術的範囲に属する。
【図１】
2020042795.tif 000003
【図２】
2020042795.tif 000004
【図３】
2020042795.tif 000005
【図４】
2020042795.tif 000006
【図５】
2020042795.tif 000007
【図６】
2020042795.tif 000008
【図７】
2020042795.tif 000009