(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-18
(45)【発行日】2023-07-26
(54)【発明の名称】スマートコントラクトのクライアントプログラムの生成方法、システム、機器、及び媒体
(51)【国際特許分類】
G06F 8/30 20180101AFI20230719BHJP
【FI】
G06F8/30
(21)【出願番号】P 2022511395
(86)(22)【出願日】2020-09-15
(86)【国際出願番号】 CN2020115407
(87)【国際公開番号】W WO2021052338
(87)【国際公開日】2021-03-25
【審査請求日】2022-02-21
(31)【優先権主張番号】201910870035.3
(32)【優先日】2019-09-16
(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)【発明者】
【氏名】張 丁文
【審査官】坂庭 剛史
(56)【参考文献】
【文献】中国特許出願公開第108304307(CN,A)
【文献】中国特許出願公開第109614102(CN,A)
【文献】中国特許出願公開第107463376(CN,A)
【文献】特開2013-073400(JP,A)
【文献】米国特許出願公開第2013/0124608(US,A1)
【文献】米国特許出願公開第2019/0188063(US,A1)
【文献】モディ リテシュ,Solidityプログラミング,株式会社講談社,2019年09月05日,p.20-21,30,ISBN: 978-4-06-515537-0
【文献】立石孝彰 ほか,"ブロックチェーンアプリケーション開発の実践と今後の課題",ソフトウェアエンジニアリングシンポジウム2017 [online],日本,情報処理学会,2017年08月23日,Vol.2017,p204-211,[2017年08月23日検索],インターネット<URL:https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=183231&file_id=1&file_no=1>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/30-8/38
(57)【特許請求の範囲】
【請求項1】
ソリディティスマートコントラクトのJavaクライアントプログラムを自動的に生成する方法において、
(1)スマートコントラクトのABIまたはソースコードに応じて、スマートコントラクトのインタフェースを解析するステップと、
(2)インタフェース解析結果に応じて、当該スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを自動的に生成するステップ
であって、具体的には、
実体クラスが含まれるパッケージ名がコントラクト名によって決定され、実体クラスの名付けがインタフェース名とインタフェース定義番号によって決定され、
実体クラスのフィールドタイプがインタフェースパラメータのタイプに応じて相応的に変換され、
実体クラスのフィールドの名付けがインタフェースパラメータの名付け情報によって決定され、実体クラスのコンストラクタ、Get、Set、ToString、Equals、HashCode方法がPOJO仕様にしたがって相応的に生成される、ステップと、
(3)インタフェース解析結果に応じて、当該スマートコントラクトのインタフェースに対応する呼び出し方法を自動的に生成するステップと、
(4)関連する呼出し階層フレームワーク設計パターンに応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成するステップと、を含む
ことを特徴とする方法。
【請求項2】
前記ステップ(1)におけるスマートコントラクトのインタフェースを解析するステップは、具体的に、以下の通りであり、
スマートコントラクトのABIが提供される場合、ABIに対応するABI解析対象を構築し、JSON変換によってABIテキストをABI解析対象に変換し、これにより、スマートコントラクトのすべてのインタフェースの情報を取得し、
スマートコントラクトのソースコードが提供される場合、スマートコントラクトソースコードテキストに構文解析を行い、構文木を構築し、これによりスマートコントラクトのすべてのインタフェースの情報を取得する
ことを特徴とする請求項1に記載の方法。
【請求項3】
前記ステップ(3)における当該スマートコントラクトのインタフェースに対応する呼び出し方法を自動的に生成するステップは、具体的に、以下の通りであり、
(1)呼出し階層のインタフェースを定義し、そのうち、呼出し階層インタフェース名がコントラクト名によって決定され、インタフェースにおける方法がスマートコントラクトに露出されるインタフェースに対応し、方法名がインタフェース名とインタフェース定義番号によって決定され、方法の入力パラメータと戻りパラメータが対応する実体クラスであり、
(2)呼出し階層のインタフェースに対応する実装クラスを実装し、そのうち、実装クラスの名付けがコントラクト名によって決定され、実装クラスにおける方法は、
方法パラメータで導入される実体クラスを対応するスマートコントラクトパラメータに変換する第一ステップと、
対応するスマートコントラクトのインタフェースを指定し、スマートコントラクトパラメータを導入し、当該スマートコントラクトにより提供されるAPIにより対応するインタフェースを呼び出して、戻りパラメータを取得する第二ステップと、
スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、方法により当該実体クラスを返す第三ステップと、
という三つのステップを経て実現されることを特徴とする請求項1に記載の方法。
【請求項4】
前記ステップ(4)におけるスマートコントラクトのクライアントの呼出し階層プログラムを生成するステップは、具体的に、以下の通りであり、
(1)実体クラスをスマートコントラクトパラメータに変換するツールクラスを定義して実装し、スマートコントラクトにおける基本タイプについては、一対一で直接に変換を行い、スマートコントラクトにおける配列と可変長文字列タイプについては、分割して分割後の各セグメントの長さを変換し、
(2)スマートコントラクトにより提供されるAPIをパッケージングする
ことを特徴とする請求項1に記載の方法。
【請求項5】
スマートコントラクトのクライアントプログラムの生成方法において、
スマートコントラクトのABIまたはソースコードに応じて、前記スマートコントラクトのインタフェースを解析するステップと、
インタフェース解析結果に応じて前記スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを生成するステップ
であって、具体的には、
コントラクト名に応じて前記実体クラスが含まれるパッケージ名を決定し、インタフェース名とインタフェース定義番号に応じて実体クラスの名付けを決定するステップと、
前記インタフェースの入力パラメータと戻りパラメータのタイプに応じて変換を行って、前記実体クラスのフィールドタイプを取得するステップと、
前記インタフェースの入力パラメータと戻りパラメータの名付け情報に応じて、前記実体クラスのフィールドの名付けを決定するステップと、
POJO仕様に従って前記実体クラスのコンストラクタ、Get、Set、ToString、Equals、HashCode方法を相応的に生成するステップと、を含む、ステップと、
前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成するステップと、
関連する呼出し階層フレームワーク設計パターン、前記実体クラス、前記呼び出し方法に応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成するステップと、を含む
ことを特徴とするスマートコントラクトのクライアントプログラムの生成方法。
【請求項6】
前記スマートコントラクトのインタフェースを解析するステップは、
前記スマートコントラクトのABIが提供される場合、JSON変換によってABIテキストをABI解析対象に変換し、これにより前記スマートコントラクトのすべてのインタフェースの情報を取得するステップと、
前記スマートコントラクトのソースコードが提供される場合、前記スマートコントラクトのソースコードテキストに構文解析を行い、構文木を構築し、これにより、前記スマートコントラクトのすべてのインタフェースの情報を取得するステップと、を含む
ことを特徴とする請求項5に記載のスマートコントラクトのクライアントプログラムの生成方法。
【請求項7】
前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成するステップは、
呼出し階層のインタフェースを定義するステップであって、呼出し階層のインタフェース名がコントラクト名に応じて決定され、前記呼出し階層のインタフェースにおける方法が前記スマートコントラクトに露出されるインタフェースに対応し、呼び出し方法名がインタフェース名とインタフェース定義番号によって決定され、前記呼び出し方法の入力パラメータと戻りパラメータが対応する実体クラスであるステップと、
前記呼出し階層のインタフェースに対応する実装クラスを実装するステップであって、実装クラスの名付けがコントラクト名に応じて決定され、前記実装クラスにおける方法は、
前記方法の入力パラメータとしての実体クラスを対応するスマートコントラクトパラメータに変換するステップと、
対応するスマートコントラクトのインタフェースを指定して前記スマートコントラクトパラメータを導入し、前記スマートコントラクトにより提供されるAPIによって対応するインタフェースを呼び出し、戻りパラメータを取得するステップと、
前記スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、前記呼び出し方法により当該実体クラスを返すステップと、を含むステップと、
を含む
ことを特徴とする請求項
5に記載のスマートコントラクトのクライアントプログラムの生成方法。
【請求項8】
関連する呼出し階層フレームワーク設計パターン、前記実体クラス、前記呼び出し方法に応じてスマートコントラクトのクライアントの呼出し階層プログラムを生成するステップは、
前記実体クラスをスマートコントラクトパラメータに変換するツールクラスを定義して実装し、前記スマートコントラクトにおける基本タイプについては、一対一で直接に変換を行い、前記スマートコントラクトにおける配列と可変長文字列タイプについては、分割して分割後の各セグメントの長さを変換するステップと、
前記スマートコントラクトにより提供されるAPIをパッケージングするステップと、を含む
ことを特徴とする請求項
5に記載のスマートコントラクトのクライアントプログラムの生成方法。
【請求項9】
スマートコントラクトのクライアントプログラムの生成システムにおいて、前記生成システムは、
スマートコントラクトのABIまたはソースコードに応じて、前記スマートコントラクトのインタフェースを解析するために用いられるインタフェース解析モジュールと、
インタフェース解析結果に応じて、前記スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを生成するために用いられる実体クラス生成モジュール
であって、実体クラスが含まれるパッケージ名がコントラクト名によって決定され、実体クラスの名付けがインタフェース名とインタフェース定義番号によって決定され、実体クラスのフィールドタイプがインタフェースパラメータのタイプに応じて相応的に変換され、実体クラスのフィールドの名付けがインタフェースパラメータの名付け情報によって決定され、実体クラスのコンストラクタ、Get、Set、ToString、Equals、HashCode方法がPOJO仕様にしたがって相応的に生成される、実体クラス生成モジュールと、
前記インタフェース解析結果に応じて、前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成するために用いられる呼び出し方法生成モジュールと、
関連する呼出し階層フレームワーク設計パターン、前記実体クラス、前記呼び出し方法に応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成するために用いられるプログラム生成モジュールと、を含む
ことを特徴とするスマートコントラクトのクライアントプログラムの生成システム。
【請求項10】
コンピュータプログラムが記憶されるメモリと、プロセッサとを含むスマートコントラクトのクライアントプログラムの生成機器であって、前記コンピュータプログラムが前記プロセッサによって実行されると、請求項1~
8のいずれか一項に記載の方法のステップが実現されることを特徴とするスマートコントラクトのクライアントプログラムの生成機器。
【請求項11】
コンピュータプログラムが記憶される読み取り可能な記憶媒体であって、前記コンピュータプログラムがプロセッサによって実行されると、請求項1~
8のいずれか一項に記載の方法のステップが実現されることを特徴とする読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の参照]
本願は、2019年9月16日に出願された、出願番号が201910870035.3であり、発明の名称が「ソリディティスマートコントラクトのJavaクライアントプログラムを自動的に生成する方法」である中国特許出願の優先権を主張し、その全体が援用によりにより本願に取り込まれている。
【0002】
本願は、スマートコントラクトの技術分野に関し、特に、スマートコントラクトのクライアントプログラムの生成方法、システム機器、及び媒体に関する。
【背景技術】
【0003】
スマートコントラクトは、ブロックチェーン上で実行可能なコンピュータプログラムであり、スマートコントラクトがブロックチェーンに配置された後、クライアントプログラムにより呼び出すことにより、スマートコントラクトで定義された対応するインタフェースのサービスを取得できる。Javaは、オブジェクト指向プログラミング言語であり、現在のバックグラウンド開発の主流言語の1つである。Javaクライアントプログラムは、多くの開発者がスマートコントラクトのインタフェースを呼び出すための主要な選択である。一般には、開発者にとって、スマートコントラクトを作成した後、そのスマートコントラクトを呼び出すためのクライアントプログラムを対応的に作成する必要もあり、スマートコントラクトのクライアントプログラムを開発するプロセスは煩雑であり、効率が低い。
【発明の概要】
【0004】
本願の各実施例によると、ソリディティスマートコントラクトのJavaクライアントプログラムを自動的に生成する方法を提供し、前記方法は、
(1)スマートコントラクトのABIまたはソースコードに応じて、スマートコントラクトのインタフェースを解析するステップと、
(2)インタフェース解析結果に応じて、当該スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを自動的に生成するステップと、
(3)インタフェース解析結果に応じて、当該スマートコントラクトのインタフェースに対応する呼び出し方法を自動的に生成するステップと、
(4)関連する呼出し階層フレームワーク設計パターンに応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成するステップと、を含む。
【0005】
一実施例において、ステップ(1)におけるスマートコントラクトのインタフェースを解析するステップは具体的に以下のステップを含み、
スマートコントラクトのABIが提供される場合、ABIに対応するABI解析対象を構築し、JSON変換によってABIテキストをABI解析対象に変換し、これにより、スマートコントラクトのすべてのインタフェースの情報を取得し、
スマートコントラクトのソースコードが提供される場合、スマートコントラクトソースコードテキストに構文解析を行い、構文木を構築し、これによりスマートコントラクトのすべてのインタフェースの情報を取得する。
【0006】
一実施例において、ステップ(2)における当該スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを自動的に生成するステップは具体的に以下のステップを含み、
実体クラスが含まれるパッケージ名がコントラクト名によって決定され、実体クラスの名付けがインタフェース名とインタフェース定義番号によって決定され、実体クラスのフィールドタイプがインタフェースパラメータのタイプに応じて相応的に変換され、実体クラスのフィールドの名付けがインタフェースパラメータの名付け情報によって決定され、実体クラスのコンストラクタ、Get、Set、ToString、Equals、HashCode方法がPOJO仕様にしたがって相応的に生成される。
【0007】
一実施例において、ステップ(3)における当該スマートコントラクトのインタフェースに対応する呼び出し方法を自動的に生成するステップは以下のステップを含み、
(1)呼出し階層のインタフェースを定義する。そのうち、呼出し階層インタフェース名がコントラクト名によって決定され、インタフェースにおける方法がスマートコントラクトに露出されるインタフェースに対応し、方法名がインタフェース名とインタフェース定義番号によって決定され、方法の入力パラメータと戻りパラメータが対応する実体クラスである。
(2)呼出し階層のインタフェースに対応する実装クラスを実装する。そのうち、実装クラスの名付けがコントラクト名によって決定され、実装クラスにおける方法は、方法パラメータとして導入される実体クラスを対応するスマートコントラクトパラメータに変換する第一ステップと、対応するスマートコントラクトのインタフェースを指定してスマートコントラクトパラメータを導入し、当該スマートコントラクトにより提供されるAPIにより対応するインタフェースを呼び出して、戻りパラメータを取得する第二ステップと、スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、方法により当該実体クラスを返す第三ステップと、という三つのステップを経て実現される。
【0008】
一実施例において、ステップ(4)におけるスマートコントラクトのクライアントの呼出し階層プログラムを生成するステップは具体的に以下のステップを含み、
(1)実体クラスをスマートコントラクトパラメータに変換するツールクラスを定義して実装する。スマートコントラクトにおける基本タイプについては、一対一で直接に変換を行い、スマートコントラクトにおける配列と可変長文字列タイプについては、分割して分割後の各セグメントの長さを変換する。
(2)スマートコントラクトにより提供されるAPIをパッケージングする。
【0009】
本願の有益な効果は以下の通りである。本願の方法により汎用のスマートコントラクトのインタフェース解析、パラメータ変換方法、及び関連する呼出し階層フレームワーク設計パターンが提供され、スマートコントラクトのクライアントプログラムが自動的に生成され、呼び出し者は本願の呼出し階層フレームワークの規定にしたがって、インタフェースの解析とパラメータの変換に注目しなく、スマートコントラクトのインタフェースを便利に呼び出すことができ、従来のスマートコントラクトの開発プロセスが簡略化され、スマートコントラクトの開発効率が向上する。
【0010】
本願の各実施例によると、スマートコントラクトのクライアントプログラムの生成方法も提供され、前記生成方法は、
スマートコントラクトのABIまたはソースコードに応じて、前記スマートコントラクトのインタフェースを解析するステップと、
インタフェース解析結果に応じて前記スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを生成するステップと、
前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成するステップと、
関連する呼出し階層フレームワーク設計パターン、前記実体クラス、前記呼び出し方法に応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成するステップと、を含む。
【0011】
一実施例において、前記スマートコントラクトのインタフェースを解析するステップは、
前記スマートコントラクトのABIが提供される場合、JSON変換によってABIテキストをABI解析対象に変換し、これにより前記スマートコントラクトのすべてのインタフェースの情報を取得するステップと、
前記スマートコントラクトのソースコードが提供される場合、前記スマートコントラクトのソースコードテキストに構文解析を行い、構文木を構築し、これにより、前記スマートコントラクトのすべてのインタフェースの情報を取得するステップと、を含む。
【0012】
一実施例において、前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを生成するステップは、
コントラクト名に応じて前記実体クラスが含まれるパッケージ名を決定し、インタフェース名とインタフェース定義番号に応じて実体クラスの名付けを決定するステップと、
前記インタフェースの入力パラメータと戻りパラメータのタイプに応じて変換を行って、前記実体クラスのフィールドタイプを取得するステップと、
前記インタフェースの入力パラメータと戻りパラメータの名付け情報に応じて、前記実体クラスのフィールドの名付けを決定するステップと、
POJO仕様に従って前記実体クラスのコンストラクタ、Get、Set、ToString、Equals、HashCode方法を相応的に生成するステップと、を含む。
【0013】
一実施例において、前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成するステップは、
呼出し階層のインタフェースを定義するステップであって、呼出し階層のインタフェース名がコントラクト名に応じて決定され、前記呼出し階層のインタフェースにおける方法が前記スマートコントラクトに露出されるインタフェースに対応し、呼び出し方法名がインタフェース名とインタフェース定義番号によって決定され、前記呼び出し方法の入力パラメータと戻りパラメータが対応する実体クラスであるステップと、
前記呼出し階層のインタフェースに対応する実装クラスを実装するステップであって、実装クラスの名付けがコントラクト名に応じて決定され、
前記実装クラスにおける方法は、
前記方法の入力パラメータとしての実体クラスを対応するスマートコントラクトパラメータに変換するステップと、
対応するスマートコントラクトのインタフェースを指定して前記スマートコントラクトパラメータを導入し、前記スマートコントラクトにより提供されるAPIによって対応するインタフェースを呼び出し、戻りパラメータを取得するステップと、
前記スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、前記呼び出し方法により当該実体クラスを返すステップと、を含むステップと、
を含む。
【0014】
一実施例において、関連する呼出し階層フレームワーク設計パターン、前記実体クラス、前記呼び出し方法に応じてスマートコントラクトのクライアントの呼出し階層プログラムを生成するステップは、
前記実体クラスをスマートコントラクトパラメータに変換するツールクラスを定義して実装し、前記スマートコントラクトにおける基本タイプについては、一対一で直接に変換を行い、前記スマートコントラクトにおける配列と可変長文字列タイプについては、分割して分割後の各セグメントの長さを変換するステップと、
前記スマートコントラクトにより提供されるAPIをパッケージングするステップと、を含む。
【0015】
本願の各実施例によると、スマートコントラクトのクライアントプログラムの生成システムも提供され、前記生成システムは、
スマートコントラクトのABIまたはソースコードに応じて、前記スマートコントラクトのインタフェースを解析するために用いられるインタフェース解析モジュールと、
インタフェース解析結果に応じて、前記スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを生成するために用いられる実体クラス生成モジュールと、
前記インタフェース解析結果に応じて、前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成するために用いられる呼び出し方法生成モジュールと、
関連する呼出し階層フレームワーク設計パターン、前記実体クラス、前記呼び出し方法に応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成するために用いられるプログラム生成モジュールと、を含む。
【0016】
本願の各実施例によると、コンピュータプログラムが記憶されるメモリと、プロセッサとを含むスマートコントラクトのクライアントプログラムの生成機器も提供され、前記コンピュータプログラムが前記プロセッサによって実行されると、上記のスマートコントラクトのクライアントプログラムの生成方法のステップが実現される。
【0017】
本願の各実施例によると、コンピュータプログラムが記憶される読み取り可能な記憶媒体も提供され、前記コンピュータプログラムがプロセッサによって実行されると、上記のスマートコントラクトのクライアントプログラムの生成方法のステップが実現される。
【図面の簡単な説明】
【0018】
ここに開示される発明の実施例および/または例示をよりよく記述し説明するために、1つまたは複数の図面を参照することができる。添付の図面を説明するための追加の詳細または例示は、開示された発明、現在説明されている実施例および/または例示、ならびに現在理解されているこれらの発明の最適形態のうちのいずれか一つの範囲を限定するものとみなされるべきではない。
【
図1】本願の実施例に係るソリディティスマートコントラクトのJavaクライアントプログラムを自動的に生成する方法のフローチャートである。
【
図2】本願の実施例に係るソリディティスマートコントラクトのJavaクライアントプログラムの自動生成に基づくUML図である。
【
図3】本願の実施例に係るスマートコントラクトのクライアントプログラムの生成方法を示すフローチャートである。
【
図4】本願の実施例に係るスマートコントラクトのクライアントプログラムの生成システムの概略構造図である。
【
図5】本願の実施例に係るスマートコントラクトのクライアントプログラムの生成機器の内部構成図である。
【発明を実施するための形態】
【0019】
本願に対する理解を容易にするために、本願の上記の目的、特徴および利点をより明確に理解されるように、以下に本願の具体的な実施形態を添付の図面を参照して詳細に説明する。本願が十分に理解されるように、多くの具体的な詳細が以下の説明で説明されており、本願の好ましい実施形態が添付の図面に示されている。しかし、本願は、多くの異なる形態で実施することができ、本明細書に記載の実施形態に限定されない。むしろ、これらの実施形態は、本願の開示をより完全に理解するために提供される。本願は、本明細書に記載された以外の多くの方法で実施することができ、当業者は、本願の意図から逸脱することなく類似な改良を行うことができ、したがって、本願は、以下に開示される具体的な実施例に限定されない。
【0020】
また、用語「第1」、「第2」は、説明だけのために使用され、相対的重要性を示すまたは示唆する、あるいは指示された技術的特徴の数を暗黙的に示すものとして理解されるべきではない。したがって、「第1」、「第2」が限定される特徴は、少なくとも1つの特徴を明示的または暗黙的に含むことができる。本願の記載において、「複数」とは、別途明確に定義されない限り、少なくとも2つ、例えば2つ、3つなどを意味する。本願の説明において、「いくつかの」とは、別途明確に定義されない限り、少なくとも1つ、例えば1つ、2つなどを意味する。
【0021】
別途定義されない限り、本明細書で使用される全ての技術用語および科学用語は、本願の技術分野に属する当業者によって一般に理解されるものと同じ意味を有する。本明細書で使用される用語は、ただ具体的な実施形態を説明するためのものであって、本願を限定することを意図するものではない。本明細書で使用される「及び/または」という用語は、1つまたは複数の関連する列挙された項の任意及びすべての組み合わせを含む。
【0022】
図1に示すように、ソリディティスマートコントラクトのJavaクライアントプログラムを自動的に生成する方法は、以下のステップS1~S4を含む。
【0023】
S1:前記スマートコントラクトのABIまたはソースコードに応じて、前記スマートコントラクトのインタフェースを解析する。
【0024】
スマートコントラクトのABI(アプリケーション二値インタフェース)が提供される場合、ABIに対応する解析対象を構築し、JSON(JavaScript Object Notation)変換によってABIテキストをABI解析対象に変換し、これにより、スマートコントラクトのすべてのインタフェースの情報を取得する。
【0025】
スマートコントラクトのソースコードが提供される場合、スマートコントラクトのソースコードテキストに構文解析を行い、構文木を構築し、これにより、スマートコントラクトのすべてのインタフェースの情報を取得する。
【0026】
構文木からインタフェース情報を抽出する場合、publicの関数を抽出すればよい。
【0027】
S2:インタフェース解析結果に応じて、当該スマートコントラクトのインタフェースの入力パラメータと戻りパラメータに対応する実体クラスを自動的に生成する。
【0028】
実体クラスが含まれるパッケージ名はコントラクト名によって決定され、実体クラスの名付けはインタフェース名とインタフェース定義番号によって決定される。
【0029】
実体クラスのフィールドタイプは、インターフェースの入力パラメータおよび戻りパラメータのタイプに応じて、対応的に変換される。ソリディティは、ソリディティスマートコントラクトおよびJavaクライアントプログラムに適用される場合、スマートコントラクトを記述するコンピュータ高級言語であり、イーサリアム仮想マシンEVM上で実行され、ソリディティスマートコントラクトの中のデータの基本単位が256バイトのものであるので、Javaクライアントで完全に表現させるために、Java実体クラスのフィールドタイプは、それと対応するように、すべて文字列タイプを採用している。ソリディティにおける配列タイプについては、Java実体クラスにおいて文字列配列タイプとして表される。
【0030】
実体クラスのフィールドの名付けは、インターフェースの入力パラメータおよび戻りパラメータの名付け情報によって決定される。
【0031】
実体クラスのコンストラクタ、Get、Set、ToString、Equals、HashCode方法は、POJO(Plain Ordinary Java Object 簡単なJava対象)仕様に従って相応的に生成される。
S3:インタフェース解析結果に応じて、当該スマートコントラクトのインタフェースに対応する呼び出し方法を自動的に生成する。
【0032】
具体的には、(1)呼出し階層のインタフェースを定義する。そのうち、呼出し階層のインタフェース名はコントラクト名によって決定され、呼出し階層のインタフェースにおける方法はスマートコントラクトに露出されるインタフェースに対応し、方法名はインタフェース名及びインタフェース定義番号によって決定され、方法の入力パラメータ及び戻りパラメータは対応する実体クラスである。
【0033】
(2)呼出し階層のインタフェースに対応する実装クラスを実装する。そのうち、実装クラスの名付けはコントラクト名によって決定され、実装クラスにおける方法は主に三つのステップを経て実現される。第一ステップでは、方法の入力パラメータとしての実体クラスを対応するスマートコントラクトパラメータに変換する。第二ステップでは、対応するスマートコントラクトのインタフェースを指定してスマートコントラクトパラメータを導入し、当該スマートコントラクトにより提供されるAPIにより対応するインタフェースを呼び出して、戻りパラメータを取得する。第三ステップでは、スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、方法により当該実体クラスを返す。
【0034】
S4:関連する呼出し階層フレームワーク設計パターンに応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成する。
【0035】
具体的には、(1)実体クラスをスマートコントラクトパラメータに変換するツールクラスを定義して実装する。スマートコントラクトにおける基本タイプについては、一対一で直接に変換を行い、スマートコントラクトにおける配列タイプおよび可変長文字列タイプについては、分割して分割後の各セグメントの長さを変換する。このうち、Java実体クラスをソリディティスマートコントラクトの入力パラメータに変換する場合、本質的には文字列をソリディティにおける対応するデータタイプに変換することであり、スマートコントラクトAPI(アプリケーションプログラミングインタフェース)に提供される呼び出しインタフェースに応じて、最終的にAPIに導入されるデータも最終的に文字列の形式で送信される。1つのJava実体クラスにソリディティの同一タイプに対応するフィールドが複数存在する場合、当該タイプの配列に統合して統一に導入することにより、ソリディティスマートコントラクトのパラメータ数を低減させて、EVMのスタック制限を超えることを回避することができる。このとき、Java実体クラスに当該タイプの配列タイプが存在する場合、占有する配列の長さの違いにより、各フィールドが入力パラメータ配列に占有する配列長さを記録し、別の正の整数配列に記録する必要がある。同様に、ソリディティスマートコントラクトの戻りパラメータをJava実体クラスに変換する場合、配列タイプが返されると、上記の分割規則に従って、Java実体クラスにおける文字列に対応的につなぎ合わせて、配列要素のつなぎ合わせの時に分割時の長さ定義に合致することを保証する。
【0036】
(2)スマートコントラクトにより提供されるAPIをパッケージングする。これは、異常の捕捉、同期非同期呼び出しなどの特性のサポートを提供することができる。当該パッケージの実現および関連する特性のサポートは、具体的なブロックチェーンプロトコルおよび提供されるAPIインタフェースに依存するが、基本的なスマートコントラクトのインタフェースの呼び出し機能を満たすべきである。
【0037】
本願の方法により、ソリディティスマートコントラクトのJavaクライアントプログラムが自動的に生成され、開発者は、呼出し階層プログラムフレームワークの相応の規定に従って、Java実体クラスをスマートコントラクトのインタフェースの入力パラメータとして導入し、Java実体クラスの戻り結果を取得する。開発者は、スマートコントラクトの呼出し階層だけに注目すればよく、スマートコントラクトのインタフェース解析及びパラメータ変換のステップが省略され、クライアントプログラムの開発作業量が大幅に低減する。
【0038】
本願の方法により、ソリディティスマートコントラクトのJavaクライアントプログラムが自動的に生成され、最終的に生成されるクライアントプログラムは、
図2にUML図の形式で示される。当該クライアントプログラムに具体的に以下のJava構造を含む。
(1)実体クラスパッケージ:このパッケージは、すべてのプロジェクトにおける実体クラス、特に、スマートコントラクトの呼び出しに関連する入力パラメータ実体クラスおよび戻りパラメータ実体クラスを管理するために使用される。
(2)あるコントラクト実体クラスパッケージ:このパッケージは、あるスマートコントラクトにおけるすべてのインタフェースの入力パラメータ実体クラスおよび戻りパラメータ実体クラスを管理するために使用され、パッケージ名はコントラクト名によって決定される。
(3)ある入力パラメータまたは戻りパラメータ実体クラス:当該実体クラスはあるコントラクトにおけるあるインタフェースの入力パラメータに対応し、そのフィールドタイプは文字列または文字列配列であり、そのフィールド名はパラメータ名によって決定され、POJOクラスのデフォルトのコンストラクタ、Get、Set、ToString、Equals、HashCode方法を含み、実体クラス名はインタフェース名とインタフェース番号によって決定される。
(4)コントラクト層パッケージ:このパッケージは、すべてのスマートコントラクトの呼び出しインタフェースおよびインタフェース実装クラスを管理するために使用される。
(5)あるコントラクトインタフェース:当該インタフェースはあるコントラクトのすべてのインタフェースに対応し、すなわちある方法はスマートコントラクトにおける一つの公開関数に対応し、方法名はインタフェース名とインタフェース番号によって決定され、方法の入力パラメータは当該方法に対応する入力パラメータ実体クラスであり、方法の戻りパラメータは当該方法に対応する戻りパラメータ実体クラスであり、入力パラメータのないインタフェースの場合、当該方法の入力パラメータはNULLであり、戻りパラメータのないインタフェースの場合、当該方法の戻りパラメータはvoidである。
(6)インタフェース実体クラスパッケージ:当該パッケージは、すべてのコントラクトのインタフェースの実装クラスを管理するために使用される。
あるコントラクトのインタフェースの実装クラス:当該クラスはあるコントラクトのインタフェースの実装に対応し、そのうち、方法の宣言はインタフェースの方法の宣言と一致して保持され、方法の実現ロジックは主に三つのステップを経る。第一ステップでは、方法の入力パラメータとしての実体クラスを対応するスマートコントラクトパラメータに変換する。第二ステップでは、対応するスマートコントラクトのインタフェースを指定してスマートコントラクトパラメータを導入し、当該スマートコントラクトにより提供されるAPIにより対応するインタフェースを呼び出して、戻りパラメータを取得する。第三ステップでは、スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、方法により当該実体クラスを返す。
(7)フレームワークツール層:このパッケージは、すべてのコントラクト呼び出しに関連するインタフェース解析、パラメータ変換などのツールクラスを管理するために使用される。
(8)実体クラス変換ツールクラス:入力パラメータまたは戻りパラメータ実体クラスを、スマートコントラクトパラメータとの間に相互変換するツールクラスであって、その変換規則は上述の通りである。
(9) API呼び出しツールクラス:スマートコントラクトのインタフェースを呼び出す基礎的なツールクラスであり、その実装は具体的なブロックチェーンプロトコルおよび提供されるAPIインタフェースに依存するが、基本的なスマートコントラクトのインタフェースの呼び出し機能を満たすべきである。
【0039】
さらに、ソリディティはスマートコントラクトを記述するコンピュータ高級言語であり、他のプログラミング言語を採用する場合でも、スマートコントラクトを記述することができ、本願の方案は同様に適用される。したがって、
図3に示すように、スマートコントラクトに対して、以下の方案でスマートコントラクトのクライアントプログラムの生成を実現することができる。
S110:スマートコントラクトのABI又はソースコードに応じて、前記スマートコントラクトのインタフェースを解析する。
S120:インタフェース解析結果に応じて前記スマートコントラクトのインタフェースの入力パラメータ及び戻りパラメータに対応する実体クラスを生成する。
S130:前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成する。
S140:関連する呼出し階層フレームワーク設計パターン、前記実体クラス、前記呼び出し方法に応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成する。
【0040】
一実施例において、前記スマートコントラクトのインタフェースを解析することは以下のステップを含み、
前記スマートコントラクトのABIが提供される場合、JSON変換によってABIテキストをABI解析対象に変換し、それにより前記スマートコントラクトの全てのインタフェースの情報を取得し、
前記スマートコントラクトのソースコードが提供される場合、前記スマートコントラクトのソースコードテキストに構文解析を行い、構文木を構築することにより、前記スマートコントラクトのすべてのインタフェースの情報を取得する。
【0041】
一実施例において、前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースの入力パラメータ及び戻りパラメータに対応する実体クラスを生成することは、
コントラクト名に応じて前記実体クラスが含まれるパッケージ名を決定し、インタフェース名及びインタフェース定義番号に応じて実体クラスの名付けを決定するステップと、
前記インタフェースの入力パラメータ及び戻りパラメータのタイプに応じて変換を行い、実体クラスのフィールドタイプを取得するステップと、
インタフェースの入力パラメータ及び戻りパラメータの名付け情報に応じて実体クラスのフィールド名付けを決定するステップと、
POJO仕様に従って、前記実体クラスのコンストラクタ、Get、Set、ToString、Equals、HashCode方法を生成するステップと、を含む。
【0042】
一実施例において、前記インタフェースの解析結果に応じて前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成することは、
呼出し階層インタフェースを定義するステップであって、呼出し階層インタフェース名がコントラクト名に応じて決定され、前記呼出し階層インタフェースにおける方法が前記スマートコントラクトに露出されるインタフェースに対応し、呼び出し方法名がインタフェース名及びインタフェース定義番号に応じて決定され、前記呼び出し方法の入力パラメータ及び戻りパラメータが対応する実体クラスであるステップと、
前記呼出し階層のインタフェースに対応する実装クラスを実装するステップであって、実装クラスの名付けがコントラクト名に応じて決定されるステップと、を含み、
前記実装クラスにおける方法は、
方法の入力パラメータとしての実体クラスを対応するスマートコントラクトパラメータに変換するステップと、
対応するスマートコントラクトのインタフェースを指定して前記スマートコントラクトパラメータを導入し、前記スマートコントラクトにより提供されるAPIにより対応するインタフェースを呼び出して、戻りパラメータを取得するステップと、
前記スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、方法により当該実体クラスを返すステップと、を含む。
【0043】
一実施例において、前記関連する呼出し階層フレームワーク設計パターン、前記実体クラス、及び前記呼び出し方法に応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成することは、
前記実体クラスをスマートコントラクトパラメータに変換するツールクラスを定義して実装するステップであって、前記スマートコントラクトにおける基本タイプについては、一対一で直接に変換を行い、前記スマートコントラクトにおける配列タイプおよび可変長文字列タイプについては、分割して分割後の各セグメントの長さを変換するステップと、
前記スマートコントラクトにより提供されるAPIをパッケージングするステップと、を含む。
【0044】
一実施例では、
図4に示すように、スマートコントラクトのクライアントプログラムの生成システムが提供され、インタフェース解析モジュール210、実体クラス生成モジュール220、呼び出し方法生成モジュール230、及びプログラム生成モジュール240を含み、そのうち、
インタフェース解析モジュール210は、前記スマートコントラクトのABI又はソースコードに応じて、前記スマートコントラクトのインタフェースを解析するために用いられ、
実体クラス生成モジュール220は、インタフェース解析結果に応じて、前記スマートコントラクトのインタフェースの入力パラメータ及び戻りパラメータに対応する実体クラスを生成するために用いられ、
呼び出し方法生成モジュール230は、前記インタフェース解析結果に応じて前記スマートコントラクトのインタフェースに対応する呼び出し方法を生成するために用いられ、
プログラム生成モジュール240は、関連する呼出し階層フレームワーク設計パターン、前記実体クラス、および前記呼び出し方法に応じて、スマートコントラクトのクライアントの呼出し階層プログラムを生成するために用いられる。
【0045】
一実施例において、インタフェース解析モジュール210は、さらに、前記スマートコントラクトのABIが提供される場合、JSON変換によりABIテキストをABI解析対象に変換することにより、前記スマートコントラクトのすべてのインタフェースの情報を取得し、前記スマートコントラクトのソースコードが提供される場合、前記スマートコントラクトのソースコードテキストに構文解析を行い、構文木を構築することにより、前記スマートコントラクトのすべてのインタフェースの情報を取得するために用いられる。
【0046】
一実施例において、実体クラス生成モジュール220は、さらに、コントラクト名に応じて実体クラスが含まれるパッケージ名を決定し、インタフェース名とインタフェース定義番号に応じて実体クラスの名付けを決定し、インタフェースの入力パラメータと戻りパラメータのタイプに応じて変換を行い、実体クラスのフィールドタイプを取得し、インタフェースの入力パラメータと戻りパラメータの名付け情報に応じて実体クラスのフィールド名付けを決定し、 POJO仕様にしたがって実体クラスのコンストラクタ、Get、Set、ToString、Equals、およびHashCode方法を相応的に生成するために用いられる。
【0047】
一実施例では、呼び出し方法生成モジュール230は、さらに、呼出し階層のインタフェースを定義するために用いられ、そのうち、呼出し階層インタフェース名がコントラクト名に応じて決定され、前記呼出し階層のインタフェースにおける方法が前記スマートコントラクトに露出されるインタフェースに対応し、呼び出す方法名がインタフェース名およびインタフェース定義番号に応じて決定され、前記呼び出し方法の入力パラメータおよび戻りパラメータは、対応する実体クラスである。
【0048】
また、呼び出し方法生成モジュール230は、さらに、前記呼出し階層のインタフェースに対応する実装クラスを実装するために用いられ、そのうち、実装クラスの名付けがコントラクト名に応じて決定され、前記実装クラスにおける方法は、
方法の入力パラメータとしての実体クラスを対応するスマートコントラクトパラメータに変換するステップと、
対応するスマートコントラクトのインタフェースを指定して前記スマートコントラクトパラメータを導入し、前記スマートコントラクトにより提供されるAPIにより対応するインタフェースを呼び出して、戻りパラメータを取得するステップと、
前記スマートコントラクトの戻りパラメータを対応する実体クラスに変換し、方法により当該実体クラスを返すステップと、を含む。
【0049】
一実施例において、プログラム生成モジュール240は、さらに、前記実体クラスをスマートコントラクトパラメータに変換するためのツールクラスを定義して実装するために用いられ、前記スマートコントラクトにおける基本タイプについては、一対一で直接に変換を行い、前記スマートコントラクトにおける配列および可変長文字列タイプについては、分割して分割後の各セグメントの長さを変換し、前記スマートコントラクトにより提供されるAPIをパッケージングする。
【0050】
スマートコントラクトのクライアントプログラムの生成システムの具体的な限定については、上述したスマートコントラクトのクライアントプログラムの生成方法に対する限定を参照することができ、ここでは説明を省略する。上述したスマートコントラクトのクライアントプログラムの生成システムにおける各モジュールの全部または一部がソフトウェア、ハードウェア、およびそれらの組み合わせによって実現されてもよい。上記の各モジュールは、ハードウェアとしてコンピュータ機器のプロセッサに内蔵または独立されてもよいし、プロセッサが以上の各モジュールに対応する操作を呼び出して実行しやいように、ソフトウェアとしてコンピュータ機器のメモリに記憶されてもよい。
【0051】
一実施例において、スマートコントラクトのクライアントプログラムの生成機器が提供され、当該スマートコントラクトのクライアントプログラムの生成機器は端末であってもよく、その内部構成図は
図5に示されるようなものであってもよい。当該スマートコントラクトのクライアントプログラムの生成機器は、システムバスによって接続されているプロセッサ、メモリ、ネットワークインタフェース、ディスプレイ、および入力装置を含む。そのうち、当該スマートコントラクトのクライアントプログラムの生成機器のプロセッサは、計算能力および制御能力を提供するために使用される。当該スマートコントラクトのクライアントプログラムの生成機器のメモリは、不揮発性記憶媒体、内部メモリを含む。当該不揮発性記憶媒体には、オペレーティングシステムおよびコンピュータプログラムが記憶されている。当該内部メモリは、不揮発性記憶媒体におけるオペレーティングシステムおよびコンピュータプログラムの実行に環境を提供する。当該スマートコントラクトのクライアントプログラムの生成機器のネットワークインタフェースは、ネットワーク接続を介して外部の端末と通信するために用いられる。当該コンピュータプログラムは、プロセッサによって実行される時に、スマートコントラクトのクライアントプログラムの生成方法が実装される。当該スマートコントラクトのクライアントプログラムの生成機器のディスプレイは、液晶ディスプレイまたは電子インクディスプレイであってもよく、当該スマートコントラクトのクライアントプログラムの生成機器の入力装置は、ディスプレイに覆われるタッチ層であってもよく、スマートコントラクトのクライアントプログラムの生成機器の筐体に設けられるボタン、トラックボールまたはタッチパッドであってもよく、また外付けのキーボード、タッチパッドまたはマウスなどであってもよい。
【0052】
図5に示される構造は、本願の方案に関連する部分的な構造のブロック図にすぎず、本願の態様が適用されるスマートコントラクトのクライアントプログラムの生成機器に対する限定を構成するものではなく、具体的には、スマートコントラクトのクライアントプログラムの生成機器は、図面に示されるものよりも多くのまたは少ない部品、あるいは、いくつかの部品を組み合わせたものを含み、或いは異なる部品配置を有することができることは、当業者であれば、理解するであろう。
【0053】
一実施例において、コンピュータプログラムが格納されているメモリと、プロセッサとを含むスマートコントラクトのクライアントプログラムの生成機器が提供され、当該プロセッサによりコンピュータプログラムが実行されると、上記のスマートコントラクトのクライアントプログラムの生成方法のステップが実現される。
【0054】
一実施例において、コンピュータプログラムが記憶されている読み取り可能な記憶媒体が提供され、コンピュータプログラムがプロセッサによって実行されると、上記のスマートコントラクトのクライアントプログラムの生成方法のステップが実現される。
【0055】
実装の実施例の方法におけるフローの全部または一部を実現することは、関連するハードウェアを、コンピュータプログラムによって命令することによって行うことができ、前記のコンピュータプログラムは、不揮発性のコンピュータ可読記憶媒体に記憶されることができ、当該コンピュータプログラムが実行されると、上述の各方法の実施例のフローを含むことができることは、当業者であれば理解するであろう。そのうち、本願で提供される各実施例で使用されるストレージ、メモリ、データベース、または他の媒体への任意の引用は、いずれも不揮発性および/または揮発性メモリを含むことができる。不揮発性メモリは、読み出し専用メモリ( ROM)、プログラマブルROM(PROM)、電気的にプログラマブルROM( EPROM)、電気的に消去可能プログラマブルROM( EEPROM)、またはフラッシュメモリを含むことができる。揮発性メモリは、ランダムアクセスメモリ( RAM)または外部キャッシュメモリを含むことができる。限定ではなく例として、RAMは、スタティックRAM(SRAM)、ダイナミックRAM( DRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレートSDRAM(DDRSDRAM)、エンハンスドSDRAM(ESDRAM)、同期リンク(Synchlink)、DRAM(SLDRAM)、メモリバス(Rambus)、ダイレクトRAM(RDRAM)、ダイレクトメモリバスダイナミックRAM(DRDRAM)、およびメモリバスダイナミックRAM(RDRAM)などの様々な形態で入手可能である。
【0056】
以上説明した実施例の各技術的特徴は、任意に組み合わせることが可能であり、説明を簡潔にするために、上記実施例における各技術的特徴の全ての可能な組み合わせについては説明していないが、これらの技術的特徴の組み合わせに矛盾がない限り、本明細書に記載される範囲内であると考えられるべきである。
【0057】
上記の実施例は、本願のいくつかの実施形態を示しているに過ぎず、その叙述は具体的かつ詳細であるが、本願の発明の範囲を限定するものとして理解されるべきではない。当業者であれば、本願の思想から逸脱することなく、本願の範囲に含まれるいくつかの変形および改善を行うことができることに留意されたい。したがって、本願の特許の範囲は、添付の特許請求の範囲に従うものとする。