IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 杭州趣鏈科技有限公司の特許一覧

特許7394211スマートコントラクトの並行実行の方法、装置、機器、及び媒体
<>
  • 特許-スマートコントラクトの並行実行の方法、装置、機器、及び媒体 図1
  • 特許-スマートコントラクトの並行実行の方法、装置、機器、及び媒体 図2
  • 特許-スマートコントラクトの並行実行の方法、装置、機器、及び媒体 図3
  • 特許-スマートコントラクトの並行実行の方法、装置、機器、及び媒体 図4
  • 特許-スマートコントラクトの並行実行の方法、装置、機器、及び媒体 図5
  • 特許-スマートコントラクトの並行実行の方法、装置、機器、及び媒体 図6
  • 特許-スマートコントラクトの並行実行の方法、装置、機器、及び媒体 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-29
(45)【発行日】2023-12-07
(54)【発明の名称】スマートコントラクトの並行実行の方法、装置、機器、及び媒体
(51)【国際特許分類】
   G06F 9/46 20060101AFI20231130BHJP
【FI】
G06F9/46 420
G06F9/46 430
【請求項の数】 16
(21)【出願番号】P 2022510861
(86)(22)【出願日】2020-08-19
(65)【公表番号】
(43)【公表日】2022-10-27
(86)【国際出願番号】 CN2020109984
(87)【国際公開番号】W WO2021032115
(87)【国際公開日】2021-02-25
【審査請求日】2022-02-17
(31)【優先権主張番号】201911180710.6
(32)【優先日】2019-11-27
(33)【優先権主張国・地域又は機関】CN
(31)【優先権主張番号】201910764308.6
(32)【優先日】2019-08-19
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】521389103
【氏名又は名称】杭州趣鏈科技有限公司
【氏名又は名称原語表記】HANGZHOU QULIAN TECHNOLOGY CO., LTD.
【住所又は居所原語表記】Room 2001, Building A, Building 2, No.399, Danfeng Road, Binjiang District, Hangzhou, Zhejiang, China
(74)【代理人】
【識別番号】110002262
【氏名又は名称】TRY国際弁理士法人
(72)【発明者】
【氏名】邱 ▲うぇい▼偉
(72)【発明者】
【氏名】李 偉
(72)【発明者】
【氏名】何 奇
(72)【発明者】
【氏名】陶 ▲いぇ▼▲ち▼
(72)【発明者】
【氏名】尹 可挺
(72)【発明者】
【氏名】李 啓雷
【審査官】三坂 敏夫
(56)【参考文献】
【文献】国際公開第2019/072305(WO,A1)
【文献】国際公開第2019/072283(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
H04L 9/32
G06F 16/27
(57)【特許請求の範囲】
【請求項1】
スマートコントラクトの並行実行の方法において、前記スマートコントラクトはクロスコントラクト呼び出しの註釈を含み、該方法は具体的に、
第一の取引におけるスマートコントラクトをロードし、反射によって前記第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得し、前記クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、前記クロスコントラクト呼び出しアドレスに対応するスマートコントラクトをロードし、前記第一の取引により呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブルを再帰的に取得するステップと、
前記第一の取引を含む実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び前記実行対象取引における各スマートコントラクトのコントラクトタイプに応じて、前記取引の呼び出し依存関係を特定し、前記呼び出し依存関係に基づいて実行中に相互に影響しない取引呼び出しリンクを得るステップと、
複数の仮想マシンのインスタンスにおいて前記取引呼び出しリンクを並行に実行させるステップであって、前記仮想マシンのインスタンスごとに1つの前記取引呼び出しリンクを実行させ、実行結果を返すことを含むステップと、を含む
ことを特徴とするスマートコントラクトの並行実行の方法。
【請求項2】
前記コントラクトタイプが呼び出しコントラクトおよびデプロイコントラクトを含み、
実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び前記実行対象取引における各スマートコントラクトのコントラクトタイプに応じて、前記取引の呼び出し依存関係を特定するステップは、
前記第一の取引の前記コントラクトタイプが前記呼び出しコントラクトである場合、前記クロスコントラクト呼び出しリンクテーブルに第二の取引におけるスマートコントラクトが含まれると、前記第二の取引と第一の取引を同一の前記取引呼び出しリンクに入れるステップと、
前記第一の取引の前記コントラクトタイプが前記デプロイコントラクトである場合、前記第一の取引が単独で前記取引呼び出しリンクを構成させるステップと、を含む
ことを特徴とする請求項1に記載のスマートコントラクトの並行実行の方法。
【請求項3】
反射によって前記第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得したステップの後に、
前記クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、前記クロスコントラクト呼び出しアドレスに対応するコントラクトソースコードを台帳データベースから取得し、前記コントラクトソースコードをロードするステップを含み、ただし、複数の前記コントラクトソースコードをロードする方法が一致である
ことを特徴とする請求項1または2に記載のスマートコントラクトの並行実行の方法。
【請求項4】
実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び前記実行対象取引における各スマートコントラクトのコントラクトタイプに応じて、前記取引の呼び出し依存関係を特定するステップは、
前記実行対象取引における各取引の前記クロスコントラクト呼び出しリンクテーブルをトラバーサルし、各前記クロスコントラクト呼び出しリンクテーブルに含まれるすべてのコントラクトアドレス、および前記実行対象取引におけるスマートコントラクトのコントラクトタイプに基づいて、前記取引の呼び出し依存関係を特定するステップを含む
ことを特徴とする請求項1または2に記載のスマートコントラクトの並行実行の方法。
【請求項5】
前記仮想マシンのインスタンスごとに1つの前記取引呼び出しリンクを実行させたステップの後に、
すべての前記仮想マシンのインスタンスにおいて前記取引呼び出しリンクの実行が終了してから、前記実行結果を返し、仮想マシンのうちの1つにおいて所定の時間内に前記実行結果が返られない場合、前記仮想マシンで実行されるすべての取引が不正であると判定するステップを含む
ことを特徴とする請求項1または2に記載のスマートコントラクトの並行実行の方法。
【請求項6】
前記呼び出し依存関係に基づいて実行中に相互に影響しない取引呼び出しリンクを得るステップの前に、
前記取引呼び出しリンクにおけるスマートコントラクトを呼び出す場合、反射によって前記スマートコントラクトにおけるメソッドのメソッド註釈を取得し、前記メソッド註釈に所定の第1註釈が付いている場合、前記スマートコントラクトのメソッドバイトコードに基づいて、前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断するステップと、
前記登録成功の並行実行可能なコントラクトメソッドが複数の取引により呼び出される場合、前記取引における前記コントラクトメソッドの呼び出しパラメータを分析し、前記呼び出しパラメータが異なる場合、前記コントラクトメソッドを並行に実行させ、前記呼び出しパラメータが同じ場合、前記取引の順序に応じて依存関係を構築し、有向非巡回グラフ(Directed Acyclic Graph)を生成して前記取引の優先順位を決定するステップと、を含む
ことを特徴とする請求項1に記載のスマートコントラクトの並行実行の方法。
【請求項7】
前記スマートコントラクトにおけるメソッドは、コントラクトクラスのメンバメソッドに属する
ことを特徴とする請求項6に記載のスマートコントラクトの並行実行の方法。
【請求項8】
反射によって前記スマートコントラクトにおけるメソッドのメソッド註釈を取得し、前記メソッド註釈に所定の第1註釈が付いている場合、前記スマートコントラクトのメソッドバイトコードに基づいて、前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断するステップは、
コントラクト実行エンジンは、java反射によって前記コントラクトクラスのメンバメソッドを走査し、前記コントラクトクラスのメンバメソッドが所定の第1註釈を有することを走査した場合、前記コントラクトのメンバメソッドにバイトコード検査を行い、前記コントラクトのメンバメソッドが登録成功の並行実行可能なコントラクトメソッドに属するかどうかを判定するステップ、を含む
ことを特徴とする請求項7に記載のスマートコントラクトの並行実行の方法。
【請求項9】
前記スマートコントラクトのメソッドバイトコードに基づいて前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断するステップは、
所定の第1註釈付きのスマートコントラクトのメソッドのメソッドパラメータ数とタイプを取得するステップであって、前記スマートコントラクトのメソッドにおいて、現在のメソッドスタックフレームのローカル変数テーブルから前記パラメータが取得されるステップと、
前記メソッドパラメータを解析し、メソッドバイトコードにおいて、前記メソッドパラメータがタイプ変更の命令に操作されることがあり、又はパラメータとして他のメソッドを呼び出すことがある場合、登録失敗と判定するステップと、
前記パラメータが所定の第2註釈の永続化変数のみに使用されることではない場合、登録失敗と判定するステップと、を含む
ことを特徴とする請求項6に記載のスマートコントラクトの並行実行の方法。
【請求項10】
前記スマートコントラクトのメソッドバイトコードに基づいて前記スマートコントラクトに前記登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断したステップの後に、
前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがある場合、前記コントラクトメソッドの名称、メソッドパラメータの数、およびメソッドパラメータのタイプを含むメソッド署名を、前記コントラクトメソッドの状態データに保存するステップを含む
ことを特徴とする請求項6に記載のスマートコントラクトの並行実行の方法。
【請求項11】
前記呼び出しパラメータが同じである場合、前記取引の順序に基づいて依存関係を構築し、有向非巡回グラフを生成して前記取引の優先順位を決定するステップは、
有向非巡回グラフ(Directed Acyclic Graph)を構築することで前記依存関係を構築し、番号の後の取引と番号の前の取引パラメータが同じである場合、前記有向非巡回グラフ(Directed Acyclic Graph)において前記番号の後の取引に向かう依存エッジを、前記番号の前の取引によって構築するステップを含み、ただし、前記番号とは、前記取引がパッキングされる順序を示す
ことを特徴とする請求項6に記載のスマートコントラクトの並行実行の方法。
【請求項12】
スマートコントラクトの並行実行の方法において、前記スマートコントラクトはクロスコントラクト呼び出しの註釈を含み、該方法は具体的に、
ブロックチェーンノードは、パッケージされた取引を受信して実行すると、まず、取引で指定されるコントラクトアドレスに基づいて、対応するコントラクトソースコードを台帳データベースから取り出してロードする第一ステップと、
ロードされた全てのコントラクトについて、反射によってコントラクトにクロスコントラクト呼び出しの註釈があるか否かを取得し、註釈がある場合、クロスコントラクト呼び出しのアドレスを取り出し、対応するソースコードを台帳データベースから取り出してロードし、コントラクトにおけるクロスコントラクト呼び出しのアドレスの分析を再帰的に行い、最後に、取引ごとに現在の取引に呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブルを取得する第二ステップと、
得られたすべての取引に対応するコントラクトの呼び出しリンクに基づいて、すべての取引に対する呼び出し依存関係分析を行い、取引のコントラクトが呼び出しコントラクトであれば、第二ステップで取得されたこのコントラクトに対応するコントラクト呼び出しリンクをトラバーサルし、コントラクト呼び出しリンクに他の取引に係るコントラクトが含まれていれば、その2つの取引を1つの取引呼び出しリンクに入れて、そうでなければ、この取引を単独で1つの取引呼び出しリンクとし、取引のコントラクトがデプロイコントラクトであれば、直接でこの取引を単独で取引呼び出しリンクとして扱い、すべての取引の依存関係分析を行った後、最終的には、実行が相互に影響しない複数の取引呼び出しリンクを得る第三ステップと、
第三ステップで得られた実行が相互に影響しない複数の取引呼び出しリンクを、予め起動された複数の仮想マシンのインスタンスに入れて並行に実行させ、仮想マシンごとに1つの取引リンクを実行させ、単一の仮想マシン内部では直列に実行させ、すべての仮想マシンでのリンク実行が終了した後、結果を収集してから上位層に返して他の操作を行う第四ステップと、を含む
を特徴をとするスマートコントラクトの並行実行の方法。
【請求項13】
前記第二ステップにおいて、クロスコントラクト呼び出しリンクテーブルは、現在の取引実行に係る全てのコントラクトアドレスを含み、その長さは少なくとも1である
ことを特徴とする請求項12に記載のスマートコントラクトの並行実行の方法。
【請求項14】
前記第二ステップにおいて、取得された複数のコントラクトソースコードをロードする方法は一致する
ことを特徴とする請求項12に記載のスマートコントラクトの並行実行の方法。
【請求項15】
前記第三ステップにおいて、分析比較する時に、他のすべての取引に係るすべてのコントラクトアドレスと比較しなければならず、つまりトラバーサル中に初めて同一のアドレスが見つかった後、直接終了するのではなく、トラバーサルし続けて全てのものを見つける
ことを特徴とする請求項12に記載のスマートコントラクトの並行実行の方法。
【請求項16】
前記第四ステップにおいて、結果を収集する時に、すべての仮想マシンの実行が完了すると実行結果を返し、所定の時間内に戻さない仮想マシンがある場合、この仮想マシンによって実行されるすべての取引が不正であると直接判定する
ことを特徴とする請求項12に記載のスマートコントラクトの並行実行の方法。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の参照]
本願は、2019年8月19日に出願され、出願番号が201910764308.6であり、名称が「Javaスマートコントラクトに基づく並行実行方法」である中国特許出願、及び2019年11月27日に出願され、出願番号が201911180710.6であり、名称が「Javaスマートコントラクトに基づく単一なコントラクト並行実行の方法、装置、機器、及び媒体」である中国特許出願の優先権を主張し、その全体が参照により本明細書に組み込まれる。
【0002】
本発明は、ブロックチェーン技術分野に関し、特に、スマートコントラクトの並行実行の方法、装置、機器、及び媒体に関する。
【背景技術】
【0003】
ブロックチェーン技術においては、ブロックチェーンとは、新型の分散型プロトコルであり、デジタル通貨の取引や他のデータを安全に記憶することができ、情報が偽造及び改竄することができない。スマートコントラクトとは、ブロックチェーンネットワーク環境においてデプロイ及び実行可能なコードであり、当該コードのデプロイ及び実行はいずれもブロックチェーンネットワークにおいて取引として表示されることが可能であり、そのデプロイ及び実行の結果は、取引に連れてネットワーク全体にコンセンサスされることができる。結果がコンセンサス層にコンセンサスされる必要があるため、実行の結果の各ノードでの統一性を保証しなければならない。
【0004】
従来のコンソーシアムブロックチェーンスマートコントラクト実行エンジンはevmとjvmを含むが、evmまたはjvmの実行にかかわらず、ブロックの各パッケージされた取引に対する全ての実行は全て直列的に実行され、1つのブロックにおける取引が多い場合、前の取引実行が完了するのを待たなければ、次の取引は開始できないため、現在の通常なコンピュータのマルチコア特性が充分に活用されず、ブロックチェーンスマートコントラクトの実行パフォーマンスはある程度制限される。同時に、1つのブロックにパッケージされた取引がすべて単純な並行なものである場合、クロスコントラクト呼び出しが存在するため、同一のコントラクト状態に対する同時操作の問題が生じる可能性がある。
【発明の概要】
【0005】
従来技術の欠点を克服するために、本発明は、スマートコントラクトの並行実行の方法、装置、機器、及び媒体を提供することを目的とする。
【0006】
本発明の1つの態様により、スマートコントラクトの並行実行の方法が提供され、前記スマートコントラクトはクロスコントラクト呼び出しの註釈を含み、該方法は具体的に、第一の取引におけるスマートコントラクトをロードし、反射によって前記第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得し、前記クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、前記クロスコントラクト呼び出しアドレスに対応するスマートコントラクトをロードし、前記第一の取引により呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブルを再帰的に取得するステップと、前記第一の取引を含む実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び前記実行対象取引におけるスマートコントラクトのコントラクトタイプに応じて、前記取引の呼び出し依存関係を特定し、前記呼び出し依存関係に基づいて、実行中に相互に影響しない取引呼び出しリンクを取得するステップであって、前記コントラクトタイプが呼び出しコントラクトおよびデプロイコントラクトを含むステップと、仮想マシンのインスタンスにおいて前記取引呼び出しリンクを並行に実行させ、前記仮想マシンのインスタンスごとに1つの前記取引呼び出しリンクを実行させ、実行結果を返すステップと、を含む。
【0007】
いくつかの実施例において、実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び前記実行対象取引におけるスマートコントラクトのコントラクトタイプに応じて、前記取引の呼び出し依存関係を特定する前記ステップは、前記第一の取引の前記コントラクトタイプが前記呼び出しコントラクトである場合、前記クロスコントラクト呼び出しリンクテーブルに第二の取引におけるスマートコントラクトが含まれると、前記第二の取引と前記第一の取引を同一の前記取引呼び出しリンクに入れるステップと、前記第一の取引の前記コントラクトタイプが前記デプロイコントラクトである場合、前記第一の取引が単独で前記取引呼び出しリンクを構成させるステップと、を含む。
【0008】
いくつかの実施例において、反射によって前記第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得したステップの後に、前記クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、前記クロスコントラクト呼び出しアドレスに対応するコントラクトソースコードを台帳データベースから取得し、前記コントラクトソースコードをロードするステップを含み、ただし、複数の前記コントラクトソースコードをロードする方法が一致である。
【0009】
いくつかの実施例において、実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び前記実行対象取引におけるスマートコントラクトのコントラクトタイプに応じて、前記取引の呼び出し依存関係を特定する前記ステップは、前記実行対象取引における各取引の前記クロスコントラクト呼び出しリンクテーブルをトラバーサルし、各前記クロスコントラクト呼び出しリンクテーブルに含まれるすべてのコントラクトアドレス、および前記実行対象取引におけるスマートコントラクトのコントラクトタイプに基づいて、前記取引の呼び出し依存関係を特定するステップを含む。
【0010】
いくつかの実施例において、前記仮想マシンのインスタンスごとに1つの前記取引呼び出しリンクを実行させたステップの後に、すべての前記仮想マシンのインスタンスにおいて前記取引呼び出しリンクの実行が終了してから、前記実行結果を返し、仮想マシンのうちの1つにおいて所定の時間内に前記実行結果が返られない場合、前記仮想マシンで実行されるすべての取引が不正であると判定するステップを含む。
【0011】
いくつかの実施例において、前記呼び出し依存関係に基づいて実行中に相互に影響しない取引呼び出しリンクを得るステップの前に、前記取引呼び出しリンクにおけるスマートコントラクトを呼び出す場合、反射によって前記スマートコントラクトにおけるメソッドのメソッド註釈を取得し、前記メソッド註釈に@Parallel註釈が付いている場合、前記スマートコントラクトのメソッドバイトコードに基づいて、前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断するステップと、前記登録成功の並行実行可能なコントラクトメソッドが複数の取引により呼び出される場合、前記取引における前記コントラクトメソッドの呼び出しパラメータを分析し、前記呼び出しパラメータが異なる場合、前記コントラクトメソッドを並行に実行させ、前記呼び出しパラメータが同じ場合、前記取引の順序に応じて依存関係を構築し、有向非巡回グラフ(Directed Acyclic Graph)を生成して前記取引の優先順位を決定するステップと、を含む。
【0012】
いくつかの実施例において、前記スマートコントラクトにおけるメソッドは、コントラクトクラスのメンバメソッドに属する。
【0013】
いくつかの実施例において、反射によって前記スマートコントラクトにおけるメソッドのメソッド註釈を取得し、前記メソッド註釈に@Parallel註釈が付いている場合、前記スマートコントラクトのメソッドバイトコードに基づいて、前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断するステップは、コントラクト実行エンジンは、java反射によって前記コントラクトクラスのメンバメソッドを走査し、前記コントラクトクラスのメンバメソッドが@Parallel註釈を有することを走査した場合、前記コントラクトのメンバメソッドにバイトコード検査を行い、前記コントラクトのメンバメソッドが登録成功の並行実行可能なコントラクトメソッドに属するかどうかを判定するステップ、を含む。
【0014】
いくつかの実施例において、前記スマートコントラクトのメソッドバイトコードに基づいて前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断するステップは、@Parallel註釈付きのスマートコントラクトのメソッドのメソッドパラメータ数とタイプを取得するステップであって、前記スマートコントラクトのメソッドにおいて、現在のメソッドスタックフレームのローカル変数テーブルから前記パラメータが取得されるステップと、前記メソッドパラメータを解析し、メソッドバイトコードにおいて、前記メソッドパラメータがタイプ変更の命令に操作されることがあり、又はパラメータとして他のメソッドを呼び出すことがある場合、登録失敗と判定するステップと、前記パラメータが@StoreFieldの永続化変数のみに使用されることではない場合、登録失敗と判定するステップと、を含む。
【0015】
いくつかの実施例において、前記スマートコントラクトのメソッドバイトコードに基づいて前記スマートコントラクトに前記登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断したステップの後に、前記スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがある場合、前記コントラクトメソッドの名称、メソッドパラメータの数、およびメソッドパラメータのタイプを含むメソッド署名を、前記コントラクトメソッドの状態データに保存するステップを含む。
【0016】
いくつかの実施例において、前記呼び出しパラメータが同じである場合、前記取引の順序に基づいて依存関係を構築し、有向非巡回グラフ(Directed Acyclic Graph)を生成して前記取引の優先順位を決定するステップは、有向非巡回グラフ(Directed Acyclic Graph)を構築することで前記依存関係を構築し、番号の後の取引と番号の前の取引のパラメータが同じである場合、前記有向非巡回グラフ(Directed Acyclic Graph)において前記番号の後の取引に向かう依存エッジを、前記番号の前の取引によって構築するステップを含み、ただし、前記番号とは、前記取引がパッキングされる順序を示す。
【0017】
本発明の別の態様により、スマートコントラクトの並行実行の方法が提供され、前記スマートコントラクトはクロスコントラクト呼び出しの註釈を含み、該方法は具体的に、ブロックチェーンノードは、パッケージされた取引を受信して実行すると、まず、取引で指定されるコントラクトアドレスに基づいて、対応するコントラクトソースコードを台帳データベースから取り出してロードする第一ステップと、ロードされた全てのコントラクトについて、反射によってコントラクトにクロスコントラクト呼び出しの註釈があるか否かを取得し、註釈がある場合、クロスコントラクト呼び出しのアドレスを取り出し、対応するソースコードを台帳データベースから取り出してロードし、コントラクトにおけるクロスコントラクト呼び出しのアドレスの分析を再帰的に行い、最後に、取引ごとに現在の取引に呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブルを取得する第二ステップと、得られたすべての取引に対応するコントラクトの呼び出しリンクに基づいて、すべての取引に対する呼び出し依存関係分析を行い、取引のコントラクトが呼び出しコントラクトであれば、第二ステップで取得されたこのコントラクトに対応するコントラクト呼び出しリンクをトラバーサルし、コントラクト呼び出しリンクに他の取引に係るコントラクトが含まれていれば、その2つの取引を1つの取引呼び出しリンクに入れて、そうでなければ、この取引を単独で1つの取引呼び出しリンクとし、取引のコントラクトがデプロイコントラクトであれば、直接でこの取引を単独で取引呼び出しリンクとして扱い、すべての取引の依存関係分析を行った後、最終的には、実行が相互に影響しない複数の取引呼び出しリンクを得る第三ステップと、第三ステップで得られた実行が相互に影響しない複数の取引呼び出しリンクを、予め起動された複数の仮想マシンのインスタンスに入れて並行に実行させ、仮想マシンごとに1つの取引リンクを実行させ、単一の仮想マシン内部では直列に実行させ、すべての仮想マシンでのリンク実行が終了した後、結果を収集してから上位層に戻して他の操作を行う第四ステップと、を含む。
【0018】
いくつかの実施例において、前記第二ステップにおいて、クロスコントラクト呼び出しリンクテーブルは、現在の取引実行に係る全てのコントラクトアドレスを含み、その長さは少なくとも1である。
【0019】
いくつかの実施例において、前記第二ステップにおいて、取得されたコントラクトソースコードをロードする方法は一致する必要がある。
【0020】
いくつかの実施例において、前記第三ステップにおいて、分析比較する時に、他のすべての取引に係るすべてのコントラクトアドレスと比較しなければならず、つまりトラバーサル中に初めて同一のアドレスが見つかった後、直接終了するのではなく、トラバーサルし続けて全てのものを見つける。
【0021】
いくつかの実施例において、前記第四ステップにおいて、結果を収集する時に、すべての仮想マシンの実行が完了すると実行結果を返し、所定の時間内に戻さない仮想マシンがある場合、この仮想マシンによって実行されるすべての取引が不正であると直接判定する。
【0022】
本発明のもう一つの態様によれば、スマートコントラクトの並行実行の装置が提供され、該装置は、Javaスマートコントラクトにおけるメソッドに@Parallel註釈が付いたか否かを判断し、@Parallel註釈付きのJavaスマートコントラクトのメソッドのJavaバイトコードを分析して、登録成功の並行実行可能なコントラクトメソッドに属するか否かを判断するための登録モジュールと、コントラクト呼び出しが開始される際に、まず呼び出されるコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを取得し、現在のブロックに並行実行可能なコントラクトメソッドを呼び出す取引が複数ある場合、スマートコントラクト実行器は、取引中にコントラクトメソッドに伝達されるパラメータを分析し、呼び出されるコントラクトのパラメータが異なる場合、該コントラクトメソッドを並行に実行させ、パラメータが同じである場合、ブロックにおける取引の順序に基づいて依存関係を構築し、有向非巡回グラフ(Directed Acyclic Graph)を生成し、これにより優先順位を決定する解析モジュールと、を含む。
【0023】
いくつかの実施例において、前記登録モジュールは、@Parallel註釈付きのJavaスマートコントラクトのメソッドのパラメータの数とタイプを取得するためのパラメータ取得ユニットであって、Javaスマートコントラクトのメソッドがパラメータを取得する際に、現在のメソッドスタックフレームのローカル変数テーブルから取得されることであり、メソッドスタックフレームが呼び出されると、メソッドスタックフレームのローカル変数テーブルにおける変数は即ち現在のメソッドのパラメータであるパラメータ取得ユニットと、ローカル変数テーブルから取得されたメソッドパラメータを解析するための第1解析判断ユニットであって、メソッドバイトコード全体において、タイプ変更の命令に操作されることがあり、又はパラメータとして他のメソッドを呼び出すことがあるかを判定し、タイプ変更の命令に操作される又はパラメータとして他のメソッドを呼び出すことがある場合、登録失敗とする第1解析判断ユニットと、該パラメータが@StoreFieldの永続化変数のみに使用されることではないかどうかを判断するための第2解析判断ユニットであって、@StoreFieldの永続化変数のみに使用されることではない場合、登録失敗とする第2解析判断ユニットと、を含む。
【0024】
本発明のもう一つの態様により、機器が提供され、該機器は、1つのまたは複数のプロセッサと、1つのまたは複数のプログラムを記憶するためのメモリと、を含み、前記1つのまたは複数のプログラムが前記1つのまたは複数のプロセッサによって実行されると、前記1つのまたは複数のプロセッサに、Javaスマートコントラクトにおけるメソッドに@Parallel註釈が付いたか否かを判断し、@Parallel註釈付きのJavaスマートコントラクトのメソッドのJavaバイトコードを分析して、登録成功の並行実行可能なコントラクトメソッドに属するか否かを判断するステップと、コントラクト呼び出しが開始される際に、まず呼び出されるコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを取得し、現在のブロックに並行実行可能なコントラクトメソッドを呼び出す取引が複数ある場合、スマートコントラクト実行器は、取引中にコントラクトメソッドに伝達されるパラメータを分析し、呼び出されるコントラクトのパラメータが異なる場合、該コントラクトメソッドを並行に実行させ、パラメータが同じである場合、ブロックにおける取引の順序に基づいて依存関係を構築し、有向非巡回グラフ(Directed Acyclic Graph)を生成し、これにより優先順位を決定するステップと、を含むスマートコントラクトの並行実行の方法を実現させる。
【0025】
本発明のもう一つの態様により、コンピュータプログラムが記憶されるコンピュータ読み取り可能な記憶媒体が提供され、該プログラムがプロセッサによって実行されると、Javaスマートコントラクトにおけるメソッドに@Parallel註釈が付いたか否かを判断し、@Parallel註釈付きのJavaスマートコントラクトのメソッドのJavaバイトコードを分析して、登録成功の並行実行可能なコントラクトメソッドに属するか否かを判断するステップと、コントラクト呼び出しが開始される際に、まず呼び出されるコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを取得し、現在のブロックに並行実行可能なコントラクトメソッドを呼び出す取引が複数ある場合、スマートコントラクト実行器は、取引中にコントラクトメソッドに伝達されるパラメータを分析し、呼び出されるコントラクトのパラメータが異なる場合、該コントラクトメソッドを並行に実行させ、パラメータが同じである場合、ブロックにおける取引の順序に基づいて依存関係を構築し、有向非巡回グラフ(Directed Acyclic Graph)を生成し、これにより優先順位を決定するステップと、を含むスマートコントラクトの並行実行のメソッドが実現される。
【0026】
上記スマートコントラクトの並行実行の方法、装置、機器、及び媒体によれば、実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び実行対象取引におけるスマートコントラクトのコントラクトタイプに基づいて、取引の呼び出し依存関係を特定し、呼び出し依存関係に基づいて実行中に相互に影響しない取引呼び出しリンクを取得し、このことにより、1つのブロックにパッケージされる取引を並行に実行させることができ、実行効率が向上し、且つ取引の並行実行において全ての状態量に対する変更により並行問題が発生することはない。
【図面の簡単な説明】
【0027】
図1】本発明の実施例に係るスマートコントラクトの並行実行方法を示すフローチャートである。
図2】本発明の実施例に係る単一なスマートコントラクトの並行実行方法を示すフローチャートである。
図3】本発明の具体的な実施例に係る単一なスマートコントラクトの並行実行においてコントラクトのデプロイ登録が並行することを示す模式図である。
図4】本発明の具体的な実施例に係る的単一なスマートコントラクトの並行実行を示すフローチャートである。
図5】本発明の実施例に係るスマートコントラクトの並行実行方法を示すフローチャートである。
図6】本発明の実施例に係る取引呼び出しリンクを取得するフローチャートである。
図7】本発明の実施例に係るスマートコントラクトの並行実行機器の概略構造図である。
【発明を実施するための形態】
【0028】
本願の目的、技術案及び長所をより明らかにするように、以下、図面及び実施例を参考して、本願に対して叙述及び説明する。ここで説明した具体的な実施例が、本願の解釈のみに用いられ、本願の限定に用いられないと理解すべきである。本願によって提供される実施例に基づいて、当業者によって発明的な努力を行わずに達成される他のすべての実施例は、本願の保護範囲内にある。
【0029】
明らかに、以下の説明される図面は、本願のいくつかの例または実施例にすぎず、当業者にとって、発明的な努力を行わずに、これらの図面に基づいて本願を他の類似の状況に適用することも可能である。また、このような開発プロセスにおいてなされる努力が複雑で長くなる可能性があるが、本願に開示される内容に関連する当業者にとって、本願に開示される技術内容の基に行われるいくつかの設計、製造、または生産などの変更は、通常の技術的手段に過ぎず、本願に開示される内容が不充分であると理解すべきではない。
【0030】
本願において「実施例」が言及されることは、実施例を組み合わせて説明した特定の特徴、構造、または特性が、本願の少なくとも1つの実施例に含まれ得ることを意味する。明細書の様々な箇所での語句の出現は、必ずしも同じ実施例を指しているわけではなく、他の実施例と相互排他的な独立した又は代替的な実施例を指しているわけでもない。本願に記載される実施例が、矛盾しない場合に他の実施例と組み合わせることができることは、当業者に明白かつ暗黙的に理解されるであろう。
【0031】
別途定義されない限り、本願に係る技術用語または科学用語は、本願の技術分野に属する当業者にとって理解される通常の意味を有すべきである。本願に係る「一」、「1つの」、「一種」、「該」などの類似な語句は、数量の限定を意味するものではなく、単数または複数を意味することができる。本願に係る用語「含む」、「包含」、「有する」、及びこれらの如何なる変形は、非排他的な包含をカバーすることを意図しており、例えば、一連のステップ又はモジュール(要素)を含むプロセス、方法、システム、製品、又は機器は、列挙されたステップ又は要素に限定されず、列挙されていないステップ又は要素を更に含むことができ、又はこれらのプロセス、方法、製品、又は機器に固有の他のステップ又は要素を更に含むことができる。本願に係る「接続」、「互いに接続」、「結合」などの類似の語句は、物理的または機械的な接続に限定されるものではなく、直接的または間接的なものを問わずに電気的な接続を含むことができる。本願に係る「複数の」とは、二つまたは二つ以上を意味する。「および/または」は、関連対象の関連関係を説明するものであり、三つの関係が存在してもよいことを示し、例えば、「Aおよび/またはB」は、Aが単独で存在する、AおよびBが同時に存在する、Bが単独で存在するという三つの場合を示してもよい。符号「/」は、一般に、前後の関連対象の「または」という関係を示す。本願に係る用語「第1」、「第2」、「第3」などは、類似する対象を区別するためのものにすぎず、対象の特定の順位付けを表すものではない。
【0032】
一実施例において、図1は、本発明の実施例におけるスマートコントラクトの並行実行の方法のフローチャートであり、図1に示すように、本発明は、スマートコントラクトの並行実行方法を提供し、該方法は以下のステップを含む。
【0033】
ステップS110において、第一の取引におけるスマートコントラクトをロードし、反射によって第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得し、クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、クロスコントラクト呼び出しアドレスに対応するスマートコントラクトをロードし、第一の取引により呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブルを再帰的に取得する。ブロックチェーンノードは、パッケージされた取引を受信して実行すると、まず、取引で指定されるコントラクトアドレスに基づいて、対応するコントラクトソースコードを台帳データベースから取り出し、ロードする。上記の第一の取引は即ち、パッケージされた取引のうちの1つの取引である。ロードされた全てのコントラクトについて、反射によってコントラクトにクロスコントラクト呼び出しの註釈があるか否かを取得し、ある場合、クロスコントラクト呼び出しのアドレスを取り出し、呼び出されるアドレスに対応するコントラクトソースコードを台帳データベースから取り出してロードし、その後、再び反射することによってコントラクトにクロスコントラクト呼び出しの註釈があるか否かを取得し、以下同様にして、コントラクトにおけるクロスコントラクト呼び出しアドレスのリンクを再帰的に取得する。最後に、各取引のいずれについても、現在の取引に呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブルが取得される。係るクロスコントラクト呼び出しリンクテーブルとは、クロスコントラクト呼び出しを分析するコントラクト再帰分析によって生成されるものであり、現在の取引実行に係る全てのコントラクトアドレスを含み、その長さは少なくとも1であり、且つ、クロスコントラクト呼び出しの註釈を取得する際に、コントラクトにおけるすべてのクロスコントラクト呼び出しの註釈を取得する必要がある。上記反射とは、コンピュータープログラミング言語における反射メカニズムであり、実行の時に自己検査を行い、内部メンバに操作を行うことで、文字列型で対応するクラスまたは関数を取得することができる。
【0034】
ステップS120において、実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び実行対象取引におけるスマートコントラクトのコントラクトタイプに基づいて、取引の呼び出し依存関係を特定し、呼び出し依存関係に基づいて実行中に相互に影響しない取引呼び出しリンクを得る。ここで、実行対象取引は第一の取引を含み、コントラクトタイプは、呼び出しコントラクトおよびデプロイコントラクトを含む。
【0035】
いくつかの実施例において、第一の取引のコントラクトタイプが呼び出しコントラクトである場合、クロスコントラクト呼び出しリンクテーブルに第二の取引におけるスマートコントラクトが含まれると、第二の取引と第一の取引を同一の取引呼び出しリンクに入れ、一方、第一の取引のコントラクトタイプがデプロイコントラクトである場合、第一の取引は単独で取引呼び出しリンクを構成する。得られたすべての取引に対応するコントラクトの呼び出しリンクに基づいて、すべての取引に対する呼び出し依存関係分析を行い、取引のコントラクトが呼び出しコントラクトであれば、第二ステップで取得されたこのコントラクトに対応するコントラクト呼び出しリンクをトラバーサルし、コントラクト呼び出しリンクに他の取引に係るコントラクトが含まれていれば、その2つの取引を1つの取引呼び出しリンクに入れて、そうでなければ、この取引は単独で1つの取引呼び出しリンクになる。取引のコントラクトがデプロイコントラクトであれば、直接でこの取引を単独で取引呼び出しリンクとして扱い、すべての取引の依存関係分析を行った後、最終的には、実行が相互に影響しない複数の取引呼び出しリンクが得られる。コントラクトタイプに応じて異なる取引リンクのマージ方法を選択することにより、取引呼び出しリンクの取得効率および正確さをさらに向上させることができる。
【0036】
ステップS130において、仮想マシンのインスタンスにおいて取引呼び出しリンクを並行に実行させ、仮想マシンのインスタンスごとに1つの取引呼び出しリンクを実行させ、実行結果を返す。ステップS120で得られた実行が相互に影響しない複数の取引呼び出しリンクを、予め起動された複数の仮想マシンのインスタンスに入れて並行に実行させ、仮想マシンのインスタンスごとに1つの取引呼び出しリンクを実行させ、単一の仮想マシン内部では直列に実行させ、すべての仮想マシンでのリンク実行が終了した後、結果を収集してから上位層に返して他の操作を行う。
【0037】
ステップS110からステップS130において、第一の取引におけるスマートコントラクトをロードし、反射によって第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得し、クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、クロスコントラクト呼び出しアドレスに対応するスマートコントラクトをロードし、第一の取引により呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブル再帰的に取得し、実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び実行対象取引におけるスマートコントラクトのコントラクトタイプに応じて、取引の呼び出し依存関係を特定し、呼び出し依存関係に基づいて、実行中に相互に影響しない取引呼び出しリンクを取得する。実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブル及び実行対象取引におけるスマートコントラクトのコントラクトタイプに基づいて、取引の呼び出し依存関係を特定し、呼び出し依存関係に基づいて実行中に相互に影響しない取引呼び出しリンクを取得し、このことにより、1つのブロックにパッケージされる取引を並行に実行させることができ、実行効率が向上し、且つ取引の並行実行において全ての状態量に対する変更により並行問題が発生することはない。
【0038】
いくつかの実施例において、反射によって第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得した後、クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、クロスコントラクト呼び出しアドレスに対応するコントラクトソースコードを台帳データベースから取得し、上記の複数のコントラクトソースコードする方法は一致するものであり、即ち、反射によって第一の取引におけるスマートコントラクトのクロスコントラクト呼び出しの註釈を取得し、クロスコントラクト呼び出しの註釈に対応するクロスコントラクト呼び出しアドレスを取得し、クロスコントラクト呼び出しアドレスに対応するスマートコントラクトをロードし、第一の取引により呼び出されるコントラクトアドレスを先頭アドレスとするクロスコントラクト呼び出しリンクテーブルを再帰的に取得する。
【0039】
いくつかの実施例において、取引の呼び出し依存関係は、実行対象取引における各取引のクロスコントラクト呼び出しリンクテーブルをトラバーサルし、各クロスコントラクト呼び出しリンクテーブルに含まれるすべてのコントラクトアドレス、および実行対象取引におけるスマートコントラクトのコントラクトタイプに基づいて特定される。呼び出されるコントラクトに対応するコントラクト呼び出しリンクをトラバーサルする時に、他のすべての取引に係るすべてのコントラクトアドレスと比較しなければならず、同一のアドレスが存在することを発見していれば、2つの取引を1つの取引呼び出しリンクに入れなければならない。つまり、トラバーサル中に初めて同一のアドレスが見つかった後、直接終了するのではなく、トラバーサルし続けて全てのものを見つける。本実施形態では、最終的に取得した取引呼び出しリンクが互いに影響しないものであるようにすることができ、取引呼び出しリンクの信頼性が向上する。
【0040】
いくつかの実施例において、仮想マシンのインスタンスごとに1つの取引呼び出しリンクを実行させた後、すべての仮想マシンのインスタンスにおいて取引呼び出しリンクの実行が終了してから、実行結果を返し、仮想マシンのうちの1つにおいて所定の時間内に実行結果が返られない場合、仮想マシンによって実行されるすべての取引が不正であると判定する。複数の仮想マシンを起動することによって、各仮想マシンがマルチスレッドで実行し、結果を収集する時すべての仮想マシンの実行が完了するのを待たなければ、結果を戻すことができない。ブロック取引を仮想マシンのインスタンス内で並行に実行させることによって、通常なコンピュータのマルチコア特性および計算リソースが充分に活用され、所定の時間内に戻さない仮想マシンがある場合、この仮想マシンによって実行されるすべての取引が不正であると直接判定し、取引の並行実行中に発生するデータ並行問題も回避される。
【0041】
上記スマートコントラクトの並行実行には単一なコントラクトの実行プロセスが存在し、単一なコントラクトの並行実行に関して、図2は本発明の実施例に係る単一なスマートコントラクトの並行実行方法のフローチャートであり、図2に示すように、いくつかの実施例において、該方法は、呼び出し依存関係に基づいて実行中に相互に影響しない取引呼び出しリンクを取得した後、以下のステップをさらに含む。
【0042】
ステップS210において、取引呼び出しリンクにおけるスマートコントラクトを呼び出す場合、反射によってスマートコントラクトにおけるメソッドのメソッド註釈を取得し、メソッド註釈に@Parallel註釈が付いている場合、スマートコントラクトのメソッドバイトコードに基づいて、スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断する。例えば、コントラクトの仮想マシン実行エンジンがJava仮想マシンである場合、該仮想マシン実行エンジンは、jar形式のコントラクトファイルを受け付けてブロックチェーンプラットフォーム上にデプロイし、カスタムのクラスでコントラクトファイルをロードし、初期化してコントラクトのインスタンスを作成し、インタフェースの形式でスマートコントラクトを呼び出す。いくつかの実施例において、スマートコントラクトにおけるメソッドはコントラクトクラスのメンバメソッドに属し、コントラクト実行エンジンは、java反射によってコントラクトクラスのメンバメソッドを走査し、コントラクトクラスのメンバメソッドが@Parallel註釈を有することを走査した場合、コントラクトのメンバメソッドにバイトコード検査を行い、コントラクトのメンバメソッドが、登録成功の並行実行可能なコントラクトメソッドに属するかどうかを判定し、@Parallel註釈がメソッドに提供し、この註釈がマークされた場合のみ並行実行可能な登録が行われる。
【0043】
ステップS220において、登録成功の並行実行可能なコントラクトメソッドが複数の取引により呼び出される場合、取引におけるコントラクトメソッドの呼び出しパラメータを分析し、呼び出しパラメータが異なる場合、コントラクトメソッドは並行に実行され、呼び出しパラメータが同じ場合、取引の順序に応じて依存関係を構築し、有向非巡回(Directed Acyclic Graph、略称DAG)グラフを生成して取引の優先順位を決定する。ステップS210及びS220によって提供される実施形態では、単一なコントラクトの実行効率を高めることができる。
【0044】
いくつかの実施例において、スマートコントラクトのメソッドバイトコードに基づいてスマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断することは以下のことを含み、すなわち、@Parallel註釈付きのスマートコントラクトメソッドのメソッドパラメータ数とタイプを取得し、メソッドパラメータを解析し、メソッドバイトコードにおいて、メソッドパラメータがタイプ変更の命令に操作されることがあり、又はパラメータとして他のメソッドを呼び出すことがある場合、登録失敗と判定し、該パラメータが@StoreFieldの永続化変数のみに使用されることではない場合、登録失敗と判定する。そのうち、スマートコントラクトのメソッドは、現在のメソッドスタックフレームのローカル変数テーブルからパラメータを取得する。本実施形態には、並行実行可能なコントラクトメソッドが登録成功か否かの判断方法を提供し、メソッドパラメータによってスマートコントラクトのメソッドバイトコードの判断をより迅速かつ正確にさせることができる。
【0045】
いくつかの実施例において、スマートコントラクトのメソッドバイトコードに基づいて、スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを判断した後、スマートコントラクトに登録成功の並行実行可能なコントラクトメソッドがある場合、コントラクトメソッドの名称、メソッドパラメータの数、およびメソッドパラメータのタイプを含むメソッド署名を、コントラクトメソッドの状態データに保存する。メソッド署名にコントラクトメソッドの名称、メソッドパラメータの数、およびメソッドパラメータのタイプが含まれるため、同一のメソッド署名が1つのコントラクトに存在することが不可能であることが保証され、コントラクトメソッドの判定をより正確にすることができる。
【0046】
いくつかの実施例において、有向非巡回グラフを構築することで依存関係を構築し、番号の後の取引と番号の前の取引にパラメータの競合がある場合、DAG図において番号の後の取引に向かう依存エッジが、番号の前の取引によって構築され、そのうち、番号とは、取引がパッキングされる順序を示す。例えば、ブロックチェーンノードは、取引のパッキング順序に従って、ポイントチャージインタフェースのパラメータが相互に排他的であるか否かを順次に判断し、以前のすべての取引(並行可能なコントラクトメソッドの取引を指す)のパラメータと相互に排他的である場合、DAGグラフの単独のノードとし、かつ、出次数を0とする。一方、以前の取引のパラメータと同じであることがある場合、現在の取引が、以前の同じパラメータがある取引と依存エッジを構築し、主として、現在の取引に入次数エッジが増加し、以前の同じパラメータがある取引に出次数エッジが増加し、依存関係は以前の取引から現在の取引に向かう。DAGグラフでは、依存関係をより直感的かつ明確にすることができる。
【0047】
1つの具体的な実施例において、単一なコントラクトの並行実行について、コントラクトの仮想マシン実行エンジンがJava仮想マシンであり、該仮想マシン実行エンジンは、jar形式のコントラクトファイルを受け付けてブロックチェーンプラットフォーム上にデプロイし、カスタムのクラスローダーでコントラクトファイルをロードし、初期化してコントラクトのインスタンスを作成し、インタフェースの形式でスマートコントラクトを呼び出す。Javaスマートコントラクト内の変数をブロックチェーン台帳に保存する必要がある場合、コントラクトのメンバ変数に@StoreField註釈をマークする必要がある。Javaスマートコントラクトにおけるメソッドは、コントラクトクラスのメンバメソッドに属し、@Parallel註釈によって並行の起動をマークし、デプロイまたはアップグレード時にコントラクトバイトコードによって検出され、@Parallel註釈はメソッドに提供され、この註釈がマークされた場合のみ並行実行可能登録が行われる。
【0048】
図3は本発明の具体的な実施例に係る単一なスマートコントラクトの並行実行においてコントラクトのデプロイ登録が並行することを示す模式図であり、図3に示すように、ブロックチェーンDAppを用いて説明する。本願の実施例に記載されるJavaスマートコントラクトは、ポイントのシナリオであってもよく、以下の並行実行がポイントのシナリオであることを例として詳細に説明する。
【0049】
本願の実施例において、異なる機関の間で消費者の消費を促進するために、ポイントを発行して消費者にポイントで実物を交換する報酬ポリシーを提供し、異なる機関に使用されるポイントチャージおよび交換のサーバをそれぞれブロックチェーンネットワークにおけるブロックチェーンノードとし、かつ各ブロックチェーンサーバにポイントチャージおよび交換のためのブロックチェーンアプリケーション、すなわち前記のJavaスマートコントラクトをデプロイし、コントラクトの予め設定されたロジックにより公開且つ透明な処理を行い、データが真実で改竄されなく、かつ各機関の間で消費者のポイントを共有することができることを保証する。
【0050】
図3の機関の間で合意してコントラクトのデプロイを開始し、コントラクトには、記憶される消費者のアカウントのIDと対応するポイント値、及び対応するポイント値で交換可能な実物及び実物の残りの数が含くまれ、また、該Javaスマートコントラクトは、機関に消費者が消費した後に生成されたポイントをユーザの対応するJavaスマートコントラクトのポイント記録アカウントにチャージさせることができ、各機関は定期的にいくつかのポイント値で交換可能な実物をオンラインにすることができ、最終的には、ユーザポイント照会、ポイント実物交換照会、及びポイント実物交換の機能がユーザに提供され、これらは、ポイントのシナリオのJavaスマートコントラクトの機能説明である。
【0051】
上述のJavaスマートコントラクトでは、ユーザの消費が非常に頻繁なものであることが知られており、これは、各々の機関から多数のユーザポイントチャージデータがブロックチェーンに送信されることを意味し、上述の予め定義されたスマートコントラクトで消費者にポイントチャージを行うと、従来のブロックチェーンのシナリオでは、コントラクト取引を直列的に実行させる必要があり、これは、機関が消費者にポイントチャージを行う時にサーバの応答時間が長くなることを必然的にもたらし、最終的には、ブロックチェーンにおいて実行を待っている取引が大量に蓄積されることになる。
【0052】
以上に説明したことから、機関がユーザにポイントチャージを行うことは、並行実行可能なものであり、且つブロックチェーンネットワークの最終的な状態の統一性に影響を与えないことが分かる。これにより、機関は、コントラクトをデプロイする前に、消費者にポイントチャージを行うためのコントラクトインタフェースを、並行可能なJavaスマートコントラクトのメソッドとして記述することができ、記述は@Parallel註釈によって行われ、コントラクトメソッドのパラメータは、消費者のコントラクトアカウントのIDとチャージされるポイント数の2つである。機構がスマートコントラクトの機能を定義した後、コントラクトのデプロイを開始し、Javaスマートコントラクトのセキュリティは、ブロックチェーンノードのセキュリティ検証により検証され、ここで該チャージメソッドが並行可能であるか否かのセキュリティは検証される。
【0053】
Javaスマートコントラクトにおいて@Parallel註釈がマークされるメソッド、すなわちポイントチャージインタフェースを分析し、該メソッドのJavaバイトコードを分析する。なお、仮想マシン実行エンジンが反射によって@Parallel註釈がマークされたメソッドを取得すると、実行エンジンは、当該メソッドのJavaバイトコードクラスファイルにおいて対応するコード属性を取得し、メソッドコード属性には、Javaバイトコード仕様において、メソッドの実行のすべてのプロセスが含まれる。クラスファイルにおけるメソッドのバイトコードを分析し、まずは、@Parallel註釈付きのJavaスマートコントラクトのメソッドのパラメータ数とタイプを取得し、そのうち、Javaスマートコントラクトのメソッドのパラメータ取得は、現在のメソッドスタックフレームのローカル変数テーブルから取得されることによるものであり、メソッドスタックフレームが呼び出されると、メソッドスタックフレームのローカル変数テーブルにおける変数は即ち現在のメソッドのパラメータであることが分かる。次に、ローカル変数テーブルから取得されたメソッドパラメータを解析し、メソッドバイトコード全体において、タイプ変更の命令に操作されることがあり、又はパラメータとして他のメソッドを呼び出すことがあるかを判定し、条件を満たさない場合登録失敗となる。最後に、該パラメータが@StoreFieldの永続化変数にしか使用されないかを判定し、@StoreFieldの永続化変数のみに使用されることではない場合も、登録失敗になる。
【0054】
ここでは、ポイントチャージの時には、@StoreField変数は、コントラクトの消費者アカウントとポイントのマップの関係テーブルである。コントラクト方法が検査により要件を満たしていると、ブロックチェーンノードにより、該メソッドが並行可能なコントラクトとして登録され、そうでなければ、登録は失敗になる。コントラクトをデプロイする時に@Parallelのメソッドが並行可能なものである場合、該コントラクトの状態データに現在の並行可能なメソッドのメソッド署名を保存し、メソッド署名には、コントラクトメソッドの名称、メソッドパラメータの数、及びメソッドパラメータのタイプが含まれ、同じメソッド署名が1つのコントラクトに存在しないことが保証される。
【0055】
なお、Javaバイトコードファイル仕様において、メソッドの属性は、該メソッドに用いられるローカル変数テーブルのサイズ、用いられる操作スタックデプスのサイズ、および実行される具体的な命令を含む。Javaのバイトコード仕様において、メソッドの署名は、メソッド名称、メソッドパラメータ数、及びタイプを含み、メソッド署名は、クラス内で一意であることが保証される。
【0056】
なお、ローカル変数テーブルから取得されるメソッドパラメータが変更されないことは、変更の命令によってローカル変数テーブル内のパラメータが使用されたか否かの判定により体現させることができる。パラメータが@StoreField註釈付きの永続化変数にしか使用されないことは、パラメータが異なる場合に記憶されるデータが並行安全であることを保証することができる。
【0057】
同様に、コントラクトのアップグレードを行う際にもコントラクトに走査を行い、ここでは説明を省略する。
【0058】
図4は本発明の具体的な実施例に係る単一なスマートコントラクトの並行実行のフローチャートであり、図4に示すように、機構によりポイントチャージのブロックチェーン取引を開始し、上記ステップで機構は並行可能なメソッドをすでに成功に登録し、ブロックチェーンノードにより一定の時間内の取引をパッケージして順序付けた後、各ノードは実行される取引を検証し、取引によるスマートコントラクト呼び出しのパラメータ分析を行う時、並行実行可能なコントラクトメソッドである場合、並行実行可能なコントラクトメソッドにDAGグラフ分析を行い、登録が成功であると判断される並行実行可能なメソッドは、並行分析の時にメソッドパラメータの相互排他、すなわち呼び出されるコントラクトのメソッドパラメータが一致しないことを保証する必要がある。機関のポイントチャージインタフェースにおいて、消費者のコントラクトアカウントのパラメータが一致せず、即ち並行実行可能であることが必要である。
【0059】
ブロックチェーンノードは、取引のパッキング順序に従って、ポイントチャージインタフェースのパラメータが相互に排他的であるか否かを順次に判断し、以前のすべての取引(並行可能なコントラクトメソッドの取引を指す)のパラメータと相互に排他的である場合、DAGグラフの単独のノードとし、かつ、出次数を0とする。一方、以前の取引のパラメータと同じであることがある場合、現在の取引が、以前の同じパラメータがある取引と依存エッジを構築し、主として、現在の取引に入次数エッジが増加し、以前の同じパラメータがある取引に出次数エッジが増加し、依存関係は以前の取引から現在の取引に向かう。
【0060】
DAG図が構築された後、トポロジカル整列のアルゴリズムにしたがって、ブロックチェーンノードにより、入次数が0である全ての取引を並行して、実行が完了した後DAG図を更新し、対応する取引に入次数を減少し、再び入次数が0である全ての取引を取得して並行して、終了まで順次にループする。最終的には、全ての取引実行が完了し、フロー実行が終了する。
【0061】
本発明の別の態様によれば、スマートコントラクトの並行実行の方法が提供される。図5は、本発明の実施例に係るスマートコントラクトの並行実行方法のフローチャートである。図6は、本発明の実施例に係る取引呼び出しリンクを取得するフローチャートである。図5図6に示すように、スマートコントラクトは、クロスコントラクト呼び出しの註釈を含み、並行実行メソッドは、コンソーシアムチェーンの背景におけるブロックチェーンスマートコントラクトの実行エンジンに適用され、1つのブロックにパッケージされた取引を並行に実行させることができるとともに、取引並行実行の過程においてすべての状態量に対する変更により並行問題が生じないことを保証でき、ブロックチェーン仮想マシン実行エンジンの下でJava仮想マシン実行エンジンの大きなブレークスルーである。該方法は、具体的に以下のステップを含む。第一ステップにおいて、ブロックチェーンノードは、パッケージされた取引を受信して実行すると、まず、取引で指定されるコントラクトアドレスに基づいて、対応するコントラクトソースコードを台帳データベースから取り出し、ロードする。第二ステップにおいて、ロードされた全てのコントラクトについて、反射によってコントラクトにクロスコントラクト呼び出しの註釈があるか否かを取得し、ある場合、クロスコントラクト呼び出しのアドレスを取り出し、対応するソースコードを台帳データベースから取り出してロードし、コントラクトにおけるクロスコントラクト呼び出しのアドレスの分析を再帰的に行う。最後に、取引毎に、現在の取引に呼び出されるコントラクトアドレスで始まるクロスコントラクト呼び出しリンクテーブルが得られ、係るクロスコントラクト呼び出しリンクテーブルとは、クロスコントラクト呼び出しを分析するコントラクト再帰分析によって生成されるものであり、現在の取引実行に係る全てのコントラクトアドレスを含み、その長さは少なくとも1であり、且つ、クロスコントラクト呼び出しの註釈を取得する際に、コントラクトにおけるすべてのクロスコントラクト呼び出しの註釈を取得する必要がある。取得された註釈毎に、再帰的に分析を行って最終的に呼び出しリンクテーブルを取得する必要がある。一実施形態として、取得されたコントラクトソースコードをロードする方法は一致しなければならない。第三ステップにおいて、得られたすべての取引に対応するコントラクトの呼び出しリンクに基づいて、すべての取引に対する呼び出し依存関係分析を行い、取引のコントラクトが呼び出しコントラクトであれば、第二ステップで取得されたこのコントラクトに対応するコントラクト呼び出しリンクをトラバーサルし、コントラクト呼び出しリンクに他の取引に係るコントラクトが含まれていれば、その2つの取引を1つの取引呼び出しリンクに入れて、そうでなければ、この取引は単独で1つの取引呼び出しリンクになる。取引のコントラクトがデプロイコントラクトであれば、直接でこの取引を単独で取引呼び出しリンクとして扱う。すべての取引の依存関係分析を行った後、最終的には、実行が相互に影響しない複数の取引呼び出しリンクが得られる。呼び出されるコントラクトに対応するコントラクト呼び出しリンクをトラバーサルする時に、他のすべての取引に係るすべてのコントラクトアドレスと比較しなければならず、同一のアドレスが存在することを発見していれば、2つの取引を1つの取引呼び出しリンクに入れなければならない。つまり、トラバーサル中に初めて同一のアドレスが見つかった後、直接終了するのではなく、トラバーサルし続けて全ての同一のアドレスを見つける。第四ステップにおいて、第三ステップで得られた実行が相互に影響しない複数の取引呼び出しリンクを、予め起動された複数の仮想マシンのインスタンスに入れて並行に実行させ、仮想マシンごとに1つの取引リンクを実行させ、単一の仮想マシン内部では直列に実行させ、すべての仮想マシンでのリンク実行が終了した後、結果を収集してから上位層に返して他の操作を行う。
【0062】
複数の仮想マシンを起動することによって、各仮想マシンがマルチスレッドで実行し、結果を収集する時すべての仮想マシンの実行が完了するのを待たなければ、結果を戻すことができない。ブロック取引を並行実行させることによって、通常なコンピュータのマルチコア特性および計算リソースが充分に活用され、さらに、取引間の呼び出し依存関係を分析することにより、取引の並行実行中にデータの並行問題が生じないことが保証される。所定の時間内に実行結果が返られない仮想マシンがある場合、この仮想マシンによって実行されるすべての取引が不正であると判定する。
【0063】
本発明の別の態様により、スマートコントラクトの並行実行装置が提供され、本発明はブロックチェーンプラットフォームに適用され、新規のスマートコントラクトの単一なコントラクト並行実行の装置を提供し、コントラクトバイトコードの分析、並行メソッド登録、メソッドパラメータ相互排他分析を実現し、ブロックチェーンプラットフォームのコントラクトに並行実行の方案を提供するとともに、コントラクトのデプロイ及びアップグレードの時に、メソッドの並行可能の分析及び登録を行う。該装置は、
Javaスマートコントラクトにおけるメソッドに@Parallel註釈が付いたか否かを判断し、@Parallel註釈付きのJavaスマートコントラクトのメソッドのJavaバイトコードを分析して、登録成功の並行実行可能なコントラクトメソッドに属するか否かを判断するための登録モジュールと、
コントラクト呼び出しが開始される際に、まず呼び出されるコントラクトに登録成功の並行実行可能なコントラクトメソッドがあるか否かを取得し、現在のブロックに並行実行可能なコントラクトメソッドを呼び出す取引が複数ある場合、スマートコントラクト実行器は、取引中にコントラクトメソッドに伝達されるパラメータを分析し、呼び出されるコントラクトのパラメータが異なる場合、該コントラクトメソッドを並行に実行させ、パラメータが同じである場合、ブロックにおける取引の順序に基づいて依存関係を構築し、DAGグラフを生成し、これにより優先順位を決定する解析モジュールと、を含む。
【0064】
さらに、登録モジュールは、@Parallel註釈付きのJavaスマートコントラクトのメソッドのパラメータの数とタイプを取得するためのパラメータ取得ユニットであって、Javaスマートコントラクトのメソッドのパラメータ取得は、現在のメソッドスタックフレームのローカル変数テーブルから取得されることによるものであり、メソッドスタックフレームが呼び出されると、メソッドスタックフレームのローカル変数テーブルにおける変数は即ち現在のメソッドのパラメータである、パラメータ取得ユニットと、ローカル変数テーブルから取得されたメソッドパラメータを解析するための第1解析判断ユニットであって、メソッドバイトコード全体において、タイプ変更の命令に操作されることがあり、又はパラメータとして他のメソッドを呼び出すことがあるかを判定し、条件を満たさない場合登録失敗とする第1解析判断ユニットと、該パラメータが@StoreFieldの永続化変数にしか使用されないかを判断するための第2解析判断ユニットであって、条件を満たさない場合、登録失敗にとする第2解析判断ユニットと、を含む。
【0065】
図7は本発明の実施例に係るスマートコントラクトの並行実行機器の概略構造図である。図7に示すように、本発明の実施形態を実現するのに適した例示的な機器1のブロック図が示される。図7に示される機器は、一例にすぎず、本発明の実施例の機能および使用範囲に何らの制限も課すべきではない。機器1は、典型的には、Javaスマートコントラクトに基づく単一なコントラクトの並行実行を実装する機器である。
【0066】
図7に示すように、汎用コンピューティング機器の形態で表される。機器1のコンポーネントは、1つまたは複数のプロセッサまたは処理ユニット2、メモリ3、および異なるシステムコンポーネント(メモリ3および処理ユニット2を含む)を接続するためのバス4を含むことができるが、これらに限定されない。
【0067】
バス4は、メモリバスまたはメモリコントローラ、周辺バス、アクセラレイティッド・グラフィックス・ポート、プロセッサ、または様々なバス構造のいずれかを使用する任意のバス構造のローカルバスを含む、いくつかのタイプのバス構造のうちの1つまたは複数を表す。例えば、これらのアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MAC)バス、拡張ISAバス、ビデオ電子標準協会(VESA)ローカルバス、およびペリフェラルコンポーネントインターコネクト(PCI)バスを含むが、これらに限定されない。
【0068】
機器1は、典型的には、様々なコンピュータシステム読み取り可能な媒体を含む。これらの媒体は、機器1によってアクセス可能な任意の利用可能な媒体であってもよく、揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体を含む。
【0069】
メモリ3は、揮発性メモリの形態のコンピュータシステム読み取り可能な媒体、例えばランダムアクセスメモリ(RAM)5および/またはキャッシュメモリ6を含むことができる。装置1はさらに、他のリムーバブル/非リムーバブル、揮発性/不揮発性のコンピュータシステム記憶媒体を含むことができる。一例に過ぎないが、メモリシステム8は、非リムーバブル、不揮発性磁気媒体(図3には示されていなく、一般に「ハードディスクドライブ」と呼ばれる)を読み書きするために使用されることができる。図7には示されていないが、リムーバブル不揮発性磁気ディスク(例えば、「フレキシブルディスク」)を読み書きするための磁気ディスクドライブ、およびリムーバブル不揮発性光ディスク(例えば、CDROM、DVD-ROM、または他の光学媒体)を読み書きするための光ディスクドライブを設けることができる。これらの場合、各ドライブは、1つまたは複数のデータ媒体インターフェースを介してバス4に接続されることができる。メモリ3は、本発明の各実施例の機能を実行させるように構成された1組の(例えば、少なくとも1つの)プログラムモジュールを有する少なくとも1つのプログラム製品を含むことができる。
【0070】
備えられる1組の(少なくとも1つ)プログラムモジュール8は、例えばメモリ3に格納されてもよく、このようなプログラムモジュール8は、オペレーティングシステム、1つまたは複数のアプリケーションプログラム、他のプログラムモジュール、およびプログラムデータを含むが、これらに限定されず、これらの例のそれぞれまたはいくつかの組合せには、ネットワーク環境の実装が含まれ得る。プログラムモジュール8は、一般に、本発明に記載される実施例における機能および/または方法を実行させる。
【0071】
機器1は、1つまたは複数の外部機器10(例えば、キーボード、ポインティング機器、表示機器9など)と通信することができ、ユーザが該機器1と対話できるようにする1つまたは複数の機器と通信することもでき、および/または該機器1が1つまたは複数の他のコンピューティング機器と通信できるようにする如何なる機器(例えば、ネットワークカード、モデムなど)と通信することもできる。このような通信は、入出力(I/O)インタフェース11を介して行うことができる。また、装置1は、ネットワークアダプタ12を介して、1つまたは複数のネットワーク(例えば、ローカル区域ネットワーク(LAN)、ワイドエリアネットワーク(WAN)、および/または公衆ネットワーク、例えばインターネット)と通信することもできる。図示のように、ネットワークアダプタ12は、バス4を介して機器1の他のモジュールと通信する。図3には示されていないが、マイクロコード、デバイスドライバ、冗長処理ユニット、外部磁気ディスクドライブアレイ、RAIDシステム、磁気テープドライブ、およびデータバックアップストレージシステムなどを含む他のハードウェアおよび/またはソフトウェアモジュールを、機器1に組み合わせて使用できるが、これらに限定されない。
【0072】
処理ユニット2は、メモリ3に格納されたプログラムを実行させることにより、各種の機能アプリケーション及びデータ処理を実行し、例えば本発明の実施例に係るブロックチェーンに基づくデータブロック化確認方法を実現する。
【0073】
本発明の別の態様により、本発明の実施例は、プロセッサによって実行されると、第1態様に記載のJavaスマートコントラクトに基づく単一なコントラクト並行実行メソッドを実装するコンピュータプログラムが格納されたコンピュータ読み取り可能な記憶媒体を提供する。
【0074】
本発明の実施例に係るコンピュータ記憶媒体は、1つのまたは複数のコンピュータ読み取り可能な媒体の任意の組み合わせを採用することができる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能な信号媒体又はコンピュータ読み取り可能な記憶媒体であっても良い。コンピュータ読み取り可能な記憶媒体は、例えば電気、磁気、光、電磁気、赤外線、または半導体のシステム、装置又はデバイス、或いはこれらの任意の組み合わせであっても良く、それらに限定されない。コンピュータ読み取り可能な記憶媒体の更なる具体的な例(網羅的ではない列挙)は、一つ又は複数の導線を備える電気的な接続、携帯型コンピュータ磁気ディスク、ハードディスク、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、消去可能なプログラマブル読取専用メモリ(EPROM又はフラッシュ)、光ファイバ、携帯型コンパクト磁気ディスク読取専用メモリ(CDROM)、光学記憶デバイス、磁気記憶デバイス、或いは上記の任意の適切な組合わせを含む。本明細書では、コンピュータ読み取り可能な記憶媒体は、プログラムを含むかまたは格納する任意の実体のある媒体であってもよく、該プログラムは、命令実行システム、装置、またはデバイスによって使用されるまたは組み合わせて使用されることが可能である。
【0075】
コンピュータ読み取り可能な信号媒体は、ベースバンドに伝送され或いはキャリアの一部として伝送され、コンピュータ読み取り可能なプログラムコードがロードされるデータ信号を含んでも良い。そのような伝送するデータ信号は、電磁信号、光信号、または上記の任意の適切な組み合わせを含む様々な形式を採用できるが、これらに限定されない。コンピュータ読み取り可能な信号媒体は、コンピュータ読み取り可能な記憶媒体以外の任意のコンピュータ読み取り可能な媒体であってもよく、該コンピュータ読み取り可能な媒体は、命令実行システム、装置、またはデバイスによって使用され、またはそ組み合わせて使用されるためのプログラムを送信、伝搬、または伝送することができる。
【0076】
コンピュータ読み取り可能な媒体に含まれるプログラムコードは、無線、ワイヤ、光ファイバケーブル、RFなど、または上記の任意の適切な組み合わせを含む任意の適切な媒体で伝送されることが可能であるが、これらに限定されない。
【0077】
本発明の操作を実行するためのコンピュータプログラムコードは、一種または多種のプログラミング言語またはそれらの組み合わせで記述されてもよく、前記プログラミング言語は、Java、Smalltalk、C++などのオブジェクト指向のプログラミング言語、および「C」言語または類似のプログラミング言語などの通常の手続き型プログラミング言語を含む。プログラムコードは、全体がユーザコンピュータに実行されても良く、一部がユーザコンピュータに実行されても良く、一つの独立なソフトウェアパッケージとして実行されても良く、一部がユーザコンピュータに実行され且つ一部がリモートコンピュータに実行されても良く、或いは全体がリモートコンピュータ又はサーバに実行されても良い。リモートコンピュータに関する場合に、リモートコンピュータはローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意の種類のネットワークによりユーザコンピュータに接続されても良く、或いは外部のコンピュータ(例えばインターネットサービスプロバイダを利用してインターネットにより接続する)に接続されても良い。
【0078】
以上の説明は、本発明の好適な実施例に過ぎず、本発明を限定するものではないことは、当業者には理解されるであろうが、前記実施例を参照して本願を詳しく説明したが、当業者であればわかるように、依然として前記の各実施例に記載の技術案を修正し、或いはそのうち一部の技術的特徴に等価的な置換を行うことができる。本発明の精神および原理の範囲内で、なされた修正、等価的な置換などは、本発明の保護範囲内に含まれるものとする。
図1
図2
図3
図4
図5
図6
図7