(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022101466
(43)【公開日】2022-07-06
(54)【発明の名称】イーサリアム仮想マシンのトランザクション処理方法、装置、機器、プログラムおよび媒体
(51)【国際特許分類】
G06F 8/76 20180101AFI20220629BHJP
【FI】
G06F8/76
【審査請求】有
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2021176775
(22)【出願日】2021-10-28
(31)【優先権主張番号】202011543553.3
(32)【優先日】2020-12-24
(33)【優先権主張国・地域又は機関】CN
(71)【出願人】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
【氏名又は名称原語表記】Beijing Baidu Netcom Science Technology Co., Ltd.
【住所又は居所原語表記】2/F Baidu Campus, No.10, Shangdi 10th Street, Haidian District, Beijing 100085, China
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】▲張▼ 磊
(72)【発明者】
【氏名】樊 冰新
(72)【発明者】
【氏名】▲鄭▼ 旗
(72)【発明者】
【氏名】肖 ▲偉▼
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376DA26
(57)【要約】 (修正有)
【課題】イーサリアム仮想マシンを別のブロックチェーンシステムへ移植するトランザクション処理方法を提供する。
【解決手段】方法は、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得することと、処理待ちトランザクション要求を実行する過程で、コントラクト内変数に対するデータアクセス要求を発生させてインタフェースモジュールに転送することと、インタフェースモジュールによって、データアクセス要求機能に対応するコントラクト内変数アクセス用インタフェースを確定するために、データアクセス要求に応じて命令変換を行うことと、インタフェースモジュールによってコントラクト内変数アクセス用インタフェースを呼び出し、コントラクトスペースにおけるコントラクト内変数に対してアクセス操作を行い、アクセス結果を仮想マシンインスタンスにフィードバックすることと、を含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ブロックチェーンノードに適用される、イーサリアム仮想マシンに基づくトランザクション処理方法であって、
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得することと、
前記仮想マシンインスタンスによって前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させてインタフェースモジュールに転送することと、
前記インタフェースモジュールによって、前記データアクセス要求機能に対応するコントラクト内変数アクセス用インタフェースを確定するために、前記データアクセス要求に応じて命令変換を行うことと、
前記インタフェースモジュールによって、前記ブロックチェーンのデータストレージスペースにおけるコントラクトスペースに対して、前記コントラクト内変数アクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に対して、アクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックすることと、を含み、
前記データアクセス要求には、データ読取要求及び/又はデータ書込要求が含まれ、
前記コントラクト内変数には、スマートコントラクト内のパラメータ変数および変数値が含まれ、
前記コントラクトスペースにおけるコントラクト内変数が、ブロックチェーンのオンチェーンデータを更新することに用いられる、
方法。
【請求項2】
前記ブロックチェーンのデータストレージスペースには、外部アカウントにおけるアカウントデータおよびコントラクトアカウントにおけるアカウントデータを記憶することに用いられるアカウントスペースと、コントラクトアカウントにおけるコントラクトデータを記憶することに用いられるコントラクトスペースと、が含まれ、
前記コントラクトデータには、アカウント識別子と、コントラクトバイトコードと、コントラクト内変数と、が含まれている、
請求項1に記載の方法。
【請求項3】
前記アカウントデータには、アカウント識別子と、取引シーケンス番号と、アカウント公開鍵と、トークンと、が含まれ、
前記アカウントデータが、鍵値対による記憶形態を使用し、
前記アカウント識別子が、鍵値として鍵値域に記憶され、
前記取引シーケンス番号と、アカウント公開鍵と、トークンとが、値域に記憶されている、
請求項2に記載の方法。
【請求項4】
前記アカウント識別子は、スマートコントラクトのコントラクト呼出識別子であり、
前記コントラクトデータが、鍵値対による記憶形態を使用し、
前記アカウント識別子が、鍵値のプレフィックスとされ、前記コントラクトバイトコードおよびコントラクト内変数のそれぞれの識別子と組み合わせて鍵値域に記憶され、
前記コントラクトバイトコードおよびコントラクト内変数が、値域に記憶されている、
請求項3に記載の方法。
【請求項5】
前記コントラクト内変数アクセス用インタフェースには、コントラクト内変数記憶インタフェースと、コントラクト内変数読取インタフェースと、が含まれている、
請求項4に記載の方法。
【請求項6】
前記コントラクト内変数読取インタフェースの入力パラメータは、アカウント識別子と、変数識別子と、を含み、
前記アカウント識別子と変数識別子との組み合わせが、鍵値対の鍵値として、読取待ち変数の数値を照会して読み取ることに用いられる、
請求項5に記載の方法。
【請求項7】
前記コントラクト内変数記憶インタフェースの入力パラメータは、アカウント識別子と、変数識別子と、変数値と、を含み、
前記アカウント識別子と変数識別子との組み合わせが、鍵値対の鍵値として、記憶待ち変数の位置する鍵値対を照会し、前記変数を前記鍵値対の値域に入力して書き込むことに用いられる、
請求項5に記載の方法。
【請求項8】
前記コントラクト内変数記憶インタフェースと、コントラクト内変数読取インタフェースとがブロックチェーンアクセス用インタフェースとされ、
前記ブロックチェーンアクセス用インタフェースは、
コントラクトアカウント作成インタフェースと、
コントラクトバイトコード初期化インタフェースと、
コントラクトアカウント削除インタフェースと、のうちの少なくとも1つのブロックチェーン書込インタフェースと、をさらに含む、
請求項5に記載の方法。
【請求項9】
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得した後に、
前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント作成要求であると識別すると、前記処理待ちトランザクション要求を前記インタフェースモジュールに転送することと、
前記インタフェースモジュールによって、対応するコントラクトアカウント作成インタフェースを確定するために、前記コントラクトアカウント作成要求に応じて命令変換を行うことと、
前記インタフェースモジュールによって、コントラクトアカウント作成インタフェースを呼び出し、前記アカウントスペースに新規のコントラクトアカウントを作成し、新規作成した前記コントラクトアカウントのアカウントデータを書き込むことと、
前記インタフェースモジュールによって、前記コントラクトアカウント作成インタフェースを実行する過程において、前記コントラクトバイトコード初期化インタフェースを呼び出して作成待ちスマートコントラクトをコンパイルし、コントラクトバイトコードを形成して前記コントラクトスペースに書き込むことと、
前記インタフェースモジュールによって前記コントラクトアカウント作成インタフェースを実行する過程において、前記コントラクト内変数記憶インタフェースを呼び出し、前記コントラクトスペースに前記スマートコントラクトのコントラクト内変数を作成して記憶することと、をさらに含む、
請求項8に記載の方法。
【請求項10】
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得した後に、
前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント削除要求であると識別すると、前記処理待ちトランザクション要求を前記インタフェースモジュールに転送することと、
前記インタフェースモジュールによって、対応するコントラクトアカウント削除インタフェースを確定するために、前記コントラクトアカウント削除要求に応じて命令変換を行うことと、
前記インタフェースモジュールによって、コントラクトアカウント削除インタフェースを呼び出し、削除待ちコントラクトアカウントのアカウントデータを前記アカウントスペースから削除し、前記コントラクトスペースにおける前記削除待ちコントラクトアカウントのコントラクトデータを削除することと、をさらに含む、
請求項8に記載の方法。
【請求項11】
前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求の実行を完了した後に、ブロックチェーンアクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に基づいてブロックチェーンのオンチェーンデータを更新することと、をさらに含む、
請求項1に記載の方法。
【請求項12】
ブロックチェーンノードに適用され、請求項1乃至11のいずれか一項に記載の方法を実行することに用いられる、イーサリアム仮想マシンに基づくトランザクション処理装置であって、
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得することに用いられる、処理待ちトランザクション要求取得モジュールと、
前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させて、インタフェースモジュールに転送することに用いられる、データアクセス要求生成および転送モジュールと、
前記インタフェースモジュールによって、前記データアクセス要求機能に対応するコントラクト内変数アクセス用インタフェースを確定するために、前記データアクセス要求に応じて命令変換を行うことに用いられる、命令変換モジュールと、
前記インタフェースモジュールによって、前記ブロックチェーンのデータストレージスペースにおけるコントラクトスペースに対して、前記コントラクト内変数アクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックすることに用いられる、コントラクト内変数アクセス用インタフェース呼出モジュールと、を備え、
前記データアクセス要求には、データ読取要求及び/又はデータ書込要求が含まれ、
前記コントラクト内変数には、スマートコントラクト内のパラメータ変数および変数値が含まれ、
前記コントラクトスペースにおけるコントラクト内変数が、ブロックチェーンのオンチェーンデータを更新することに用いられる、
装置。
【請求項13】
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサと通信接続される記憶装置と、を備え、
前記記憶装置には、前記少なくとも1つのプロセッサにより実行可能な命令が記憶され、
前記命令は、前記少なくとも1つのプロセッサにより実行されると、前記少なくとも1つのプロセッサに請求項1乃至11のいずれか一項に記載の方法を実施させる、
電子機器。
【請求項14】
コンピュータ命令が記憶され、
前記コンピュータ命令は、コンピュータに、請求項1乃至11のいずれか一項に記載の方法を実行させる、
非瞬時性コンピュータ可読記憶媒体。
【請求項15】
複数のコンピュータ命令を含むコンピュータプログラムであって、
前記コンピュータ命令がプロセッサによって実行されると、請求項1乃至11のいずれか一項に記載の方法をコンピュータに実行させる、
コンピュータプログラム
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ技術分野、特にブロックチェーン技術に関し、具体的には、イーサリアム仮想マシンのトランザクション処理方法、装置、機器、プログラムおよび媒体に関する。
【背景技術】
【0002】
ブロックチェーンは、分散型データ記憶、ポイント・ツー・ポイント伝送、コンセンサスメカニズム、暗号化アルゴリズムといったコンピュータ技術の新型の適用方式である。ブロックチェーンは、公開で透明であり、変造不可能などの特性により、金融、トレーサビリティ、保険などの分野にますます広く使用されている。
【0003】
ブロックチェーン技術は、最初のビットコインシステムからイーサリアムまで継続的に開発されており、近年、より優れた技術を使用する多くのブロックチェーンシステム、例えば、Polkadot、CosmosなどのPoSコンセンサスメカニズムに基づく新規ブロックチェーン技術も続々と生まれている。ブロックチェーンアプリケーション分野において、技術は継続的にアップグレードおよび更新しているが、イーサリアム技術に基づく生態環境は、すでにある程度の規模を有しており、ブロックチェーンアプリケーションの多くがイーサリアムのスマートコントラクトに基づいて構築されたものである。アプリケーションの開発者も使用者もある程度でイーサリアムのスマートコントラクトの使用に慣れている。
【0004】
しかしながら、技術の発展に伴い、イーサリアムには、例えば、非効率的なコンセンサスアルゴリズムなどの問題により、その取引性能が真の大規模な商用化シナリオをサポートするのに十分でないことになるなど、いくつかの欠陥が露呈した。イーサリアムの生態効果に鑑み、イーサリアムをそのまま放棄することよりも、イーサリアムおよび別のブロックチェーン技術と互換性のあるシステムの登場がさらに期待される。イーサリアムスマートコントラクトは、イーサリアム仮想マシン(Ethereum Virtual Machine、EVM)に基づいて実現されることから、イーサリアムと別のブロックチェーン技術との互換性を実現するためには、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決しなければならない。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、イーサリアム仮想マシンのトランザクション処理方法、装置、機器、プログラムおよび媒体を提供する。
【課題を解決するための手段】
【0006】
本発明の一態様によれば、ブロックチェーンノードに適用され、
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得することと、
前記仮想マシンインスタンスによって前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させてインタフェースモジュールに転送することと、
前記インタフェースモジュールによって、前記データアクセス要求機能に対応するコントラクト内変数アクセス用インタフェースを確定するために、前記データアクセス要求に応じて命令変換を行うことと、
前記インタフェースモジュールによって、前記ブロックチェーンのデータストレージスペースにおけるコントラクトスペースに対して、前記コントラクト内変数アクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックすることと、を含み、
前記データアクセス要求に、データ読取要求及び/又はデータ書込要求が含まれ、
前記コントラクト内変数にスマートコントラクト内のパラメータ変数および変数値が含まれ、
前記コントラクトスペースにおけるコントラクト内変数がブロックチェーンのオンチェーンデータを更新することに用いられる、
イーサリアム仮想マシンに基づくトランザクション処理方法を提供する。
【0007】
本発明の別の態様によれば、
ブロックチェーンノードに適用され、
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得することに用いられる処理待ちトランザクション要求取得モジュールと、
前記仮想マシンインスタンスによって前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させてインタフェースモジュールに転送することに用いられる、データアクセス要求生成および転送モジュールと、
前記インタフェースモジュールによって、前記データアクセス要求機能に対応するコントラクト内変数アクセス用インタフェースを確定するために、前記データアクセス要求に応じて命令変換を行うことに用いられる、命令変換モジュールと、
前記インタフェースモジュールによって、前記ブロックチェーンのデータストレージスペースにおけるコントラクトスペースに対して、前記コントラクト内変数アクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックすることに用いられる、コントラクト内変数アクセス用インタフェース呼出モジュールと、を備え、
前記データアクセス要求に、データ読取要求及び/又はデータ書込要求が含まれ、
前記コントラクト内変数に、スマートコントラクト内のパラメータ変数および変数値が含まれ、
前記コントラクトスペースにおけるコントラクト内変数がブロックチェーンのオンチェーンデータを更新することに用いられる、
イーサリアム仮想マシンに基づくトランザクション処理装置を提供する。
【0008】
本発明の別の態様によれば、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサと通信接続される記憶装置と、を備え、
前記記憶装置に前記少なくとも1つのプロセッサにより実行可能な命令が記憶され、前記命令は、前記少なくとも1つのプロセッサが本発明の実施例のいずれか1項に記載の方法を実行可能であるように、前記少なくとも1つのプロセッサにより実行される、
電子機器を提供する。
【0009】
本発明の一態様によれば、本発明の実施例のいずれか1項に記載の方法をコンピュータに実行させるためのコンピュータ命令が記憶されている、
非瞬時性コンピュータ可読記憶媒体を提供する。
【0010】
本発明の別の態様によれば、プロセッサにより実行されることで、本発明の実施例のいずれか1項に記載のイーサリアム仮想マシンのトランザクション処理方法を実現するコンピュータプログラムを備える、
コンピュータプログラム製品を提供する。
【0011】
本発明の技術によれば、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムと別のブロックチェーン技術との互換性を向上させた。
【0012】
なお、この部分の説明内容は、本発明の実施例の鍵又は重要な構成を明示することを意図するものではなく、本発明の範囲を限定することを意図するものでもないことを理解すべきである。本発明の別の構成については、以下の明細書を通して容易に理解されるであろう。
【図面の簡単な説明】
【0013】
図面は、本技術案がよりよく理解されるように提供され、本発明を限定するものではない。
【
図1】本発明の実施例に係るイーサリアム仮想マシンに基づくトランザクション処理方法の概略図である。
【
図2】本発明の実施例に係る別のイーサリアム仮想マシンに基づくトランザクション処理方法の概略図である。
【
図3】本発明の実施例に係るさらなるイーサリアム仮想マシンに基づくトランザクション処理方法の概略図である。
【
図4】本発明の実施例に係るイーサリアム仮想マシンに基づくトランザクション処理プロセスの概略図である。
【
図5】本発明の実施例に係るイーサリアム仮想マシンに基づくトランザクション処理装置の概略図である。
【
図6】本発明の実施例に係るイーサリアム仮想マシンに基づくトランザクション処理方法を実現するための電子機器のブロック図である。
【発明を実施するための形態】
【0014】
以下は、図面を参照しながら、本発明の例示的な実施例について説明する。この内容には、理解を助けるための本発明の実施例の様々な詳細が含まれているが、単なる例示的なものと見なされるべきである。したがって、当業者なら、本発明の範囲および精神から逸脱することなく、本明細書に記載の実施例に対して様々な変更および修正を実行することができることを認識すべきである。同様に、はっきりとよくわかるように、以下の説明では公知の機能と構造についての説明を省略した。
【0015】
ブロックチェーンは、分散型データ記憶、ポイント・ツー・ポイント転送、コンセンサスメカニズム、暗号化アルゴリズムなどのコンピュータ技術の新型の適用方式である。最初に登場したブロックチェーン(Blockchain)は、ビットコインの重要な概念として、本質的には分散化されたデータライブラリであり、また、ビットコインの基盤技術として、暗号化形態を使用して関連付けて生成される一連のデータブロックとなって、それぞれのデータブロックに1ロットのビットコインネットワーク上の取引情報が含まれ、その情報の有効性を検証し次のブロックを生成することに用いられる。ブロックチェーンは、公開で透明であり、変造不可能などの特性により、金融、トレーサビリティ、保険などの分野にますます広く使用され、特に、金融分野において、各金融機関間の効率的な協力を実現できる。ブロックチェーン技術は、ビットコインを代表とするデジタル通貨時代に最初に登場した。ブロックチェーン技術の継続的な発展に伴い、デジタル通貨とスマートコントラクトとを組み合わせるイーサリアムが登場し、ブロックチェーンは従来の「グローバル帳簿」から「グローバルコンピュータ」にアップグレードし、市場全体を分散化させた。イーサリアムは、デジタル通貨とスマートコントラクトとを組み合わせ、金融分野のよりも幅広いシナリオおよびプロセスを最適化したアプリケーションであり、アップグレードされた一番大きなところはスマートコントラクトである。イーサリアムは、アプリケーションプラットフォームに位置づけ、このプラットフォームにおいて、スマートコントラクトをアップロードし実行でき、このコントラクトの実行が有効的に保証できる。
【0016】
真の大規模な商用化シナリオは、ほとんど効率的なコンセンサスアルゴリズムのサポートが必要であるが、ビットコインおよびイーサリアムなどの早期ブロックチェーン技術のコンセンサスにより、その取引性能が真の大規模な商用化シナリオをサポートするのに十分でないことになる。しかしながら、ブロックチェーンのアプリケーション分野において、イーサリアムの生態系は、最高の地位を独占しており、多くのブロックチェーンアプリケーションはいずれもイーサリアム生態系に依存して存在し、ゲーム分野のクリプトキティ(CryptoKitties)と、金融分野のDeFiプロジェクトDAIとのいずれもイーサリアムのスマートコントラクトに基づいて構築される。
【0017】
特にイーサリアムのスマートコントラクトの実行に用いられる仮想マシンは、イーサリアム的仮想マシン(EVM、Ethereum Virtual Machine)とも呼ばれ、イーサリアムのスマートコントラクトは、solidity、viperなどの言語によりコンパイル可能である。イーサリアムのスマートコントラクトおよびEVMは、ブロックチェーン分野に極めて広く適応され、ブロックチェーンのスマートコントラクト分野のデファクト標準の1つとなった。
【0018】
もしイーサリアムに基づくオリジナルコードが変更され、イーサリアムEVMを別のブロックチェーンシステムに用いると、イーサリアムEVMと、ブロックチェーンのデータ記憶形態およびアクセス形態との間に固有のバインディングが存在するはずであり、これにより、移植方案は汎用性がなくなり、移植後のEVMとチェーン自体とのバインディングが多くて、別のチェーンのイーサリアム仮想マシンへの移植に用いることが難しい。
【0019】
本発明は、イーサリアム仮想マシンに基づくトランザクション処理方法を提供し、モジュール化デザインのアィデアを組込み、イーサリアム仮想マシンをモジュールとしてモジュール化したブロックチェーンシステムに移植し、例えば、XuperChain、Cosmosなど、モジュール化デザインのアィデアを導入したブロックチェーンは、ブロックデータおよび実行ロジックを分割する。本発明の実施例に係る方法は、イーサリアム自体の技術生態系および応用生態系を十分に利用できるだけではなく、様々なイーサリアム生態系の自律分散型アプリケーション(Decentralized Applications、DAPP)がアプリケーション移植を実行することを極めて便利にし、別のブロックチェーンシステムの技術強みを深掘りして発揮できる。
【0020】
図1は、本発明の実施例に係るイーサリアム仮想マシンに基づくトランザクション処理方法の概略図である。本実施例は、イーサリアム仮想マシンを別のブロックチェーンシステムに移植してトランザクション処理を行う場合に適用可能であり、これによりイーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムおよび非イーサリアムの別のブロックチェーン技術と互換する互換性を向上させる。本実施例で開示されるイーサリアム仮想マシンに基づくトランザクション処理方法は、イーサリアム仮想マシンに基づくトランザクション処理装置により実行可能であり、当該装置はソフトウェア及び/又はハードウェアの形態で実現可能であり、コンピューティングおよび記憶機能が具備される電子機器に配置可能であり、当該電子機器はブロックチェーンノードである。ブロックチェーンネットワークは、複数のブロックチェーンノードより構成され、且つ分散的に動作するネットワークである。本発明の実施例に提供される方法は、いずれのブロックチェーンノードより実行してもよい。
【0021】
図1を参照すると、本実施例に提供されるイーサリアム仮想マシンに基づくトランザクション処理方法は、以下のことを含む。
【0022】
S110において、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得する。
【0023】
ここで、ブロックチェーンノードに仮想マシンプログラムが配置されており、動作ニーズがある場合、1つ又は複数の仮想マシンインスタンスを作成し、イーサリアム仮想マシンに基づく命令集合に用いて、スマートコントラクトのコンピューティングロジックを実行できる。
【0024】
処理待ちトランザクション要求とは、ブロックオンチェーンデータに対して操作を行うために、別のブロックチェーンノードから送信されたトランザクション要求、又は、ユーザがローカルノードで提出したトランザクション要求を指す。本発明の実施例において、トランザクション要求は、ブロックチェーンシステムでサポート可能な任意のトランザクション要求であってもよく、業務トランザクション要求であってもよく、管理トランザクション要求などであってもよい。処理待ちトランザクション要求は、ブロックオンチェーンデータに対するデータ読取要求又はデータ書込要求などであってもよい。
【0025】
ブロックノードは、処理待ちトランザクション要求を取得した後に、仮想マシンインスタンスを動作することで、当該処理待ちトランザクション要求を実行する。
【0026】
S120において、前記仮想マシンインスタンスによって前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させてインタフェースモジュールに転送し、前記データアクセス要求に、データ読取要求及び/又はデータ書込要求が含まれている。
【0027】
ここで、コントラクト内変数とは、スマートコントラクトに含まれる変数と、スマートコントラクトの実行過程で転送される当該変数のデータと、スマートコントラクトの実行過程で発生される中間変数と、を指す。具体的に、コントラクト内変数のデータアクセス要求は、仮想マシンインスタンスによって、コントラクトバイトコードと、処理待ちトランザクション要求における入力パラメータとに基づいて、処理待ちトランザクション要求を実行する場合、実行する過程において発生されるものである。ここで、コントラクトバイトコードは、スマートコントラクトをコンパイルして得られたものとして、実行プログラムと、1シーケンスのオペレーション(Operation、op)コード/データペアから構成されるバイナリファイル(Binary File)と、を含む、中間コードの1種である。
【0028】
処理待ちトランザクション要求における入力パラメータには、コントラクトパラメータおよびトークンが含まれる。ここで、トークンとは、デジタル形態で存在する権利証を指し、トークンが代表するものは、固有および内在する価値であり、デジタル化可能なあらゆる権利証を代表することができる。例示的に、トークンは、通貨、債券、勘定科目、所有権又は資格などの権利証であってもよい。仮想マシンインスタンスは、一般的に、処理待ちトランザクション要求を取得した後および実行を起動する過程において、ブロックチェーンデータに対する読取/書込アクセス要求を発生させる。ブロックチェーンシステムには、データの記憶に用いられるデータストレージスペースが設置されている。データは、オンチェーンデータと、ローカルデータに区分され、オンチェーンデータとは、ブロックに追加して各々のノードに記憶するデータを指す。ローカルデータは、それぞれのノードにおいて、オンチェーンデータのコンテンツおよびローカルインデックスのニーズに応じて、ノードのローカルに記憶するデータであり、それぞれのノードに記憶されるローカルデータが異なる場合がある。コントラクト内変数は、処理待ちトランザクション要求に係るデータとして、オンチェーンデータ又はローカルデータである可能性がある。
【0029】
即ち、コントラクト内変数は、すべてチェーンにアップロードして記憶することなく、コントラクト内変数は、コントラクトの実行過程で発生される中間値も含み、これらの中間値は、コントラクトの実行過程において、過程で発生される別の数値によって上書きされる場合がある。例示的に、勘定記録累計機能のある1つのスマートコントラクトには、変数Aおよび変数Bが含まれ、Aは既存金額であり、Bは今回の累計金額である。取引によってAおよびBの数値は異なっており、例えば、ユーザ甲より開始される1回の取引において、Aの10元(人民幣)に加えて、Bの2元(人民幣)を累計する。それでは、上記例において、AおよびBは変数となり、10および2は変数の値となり、A、BおよびAとBに対応する数値10と2はいずれもコントラクト内変数となって、コントラクトスペースに記録すべきである。しかしながら、スマートコントラクトの実行過程において、変数AとBに対応する変数値に変化が発生する場合があり、過程における変数の数値は、通常のようにチェーンに記憶することなく、変数AとBおよび両変数に対応する最終の変数値をチェーンにアップロードし記憶する。
【0030】
イーサリアム仮想マシンインスタンスは、所定の命令集合を有しており、処理待ちトランザクション要求を実行する過程において、生成されるデータ読取/書込命令によって、データアクセス要求を表す。
【0031】
本発明の実施例において、仮想マシン移植のターゲットブロックチェーンシステム自体は、仮想マシン命令によるブロックチェーンデータの読取/書込をサポートしないことから、命令で表す仮想マシンインスタンスのデータアクセス要求に対して解析および変換し、ブロックチェーンデータをアクセス可能なインタフェースを形成するために、インタフェースモジュールが設置されている。仮想マシンインスタンスは、発生されるコントラクト内変数に対するデータアクセス要求をインタフェースモジュールに転送する。
【0032】
代替的な実施例において、前記コントラクト内変数記憶インタフェースと、コントラクト内変数読取インタフェースとがブロックチェーンアクセス用インタフェースとされ、前記ブロックチェーンアクセス用インタフェースは、コントラクトアカウント作成インタフェースと、コントラクトバイトコード初期化インタフェースと、コントラクトアカウント削除インタフェースとのうちの少なくとも1項のブロックチェーン書込インタフェースをさらに含む。
【0033】
ここで、コントラクトアカウント作成インタフェースは、コントラクトスペースにコントラクトアカウントを作成することに用いられ、コントラクトバイトコード初期化インタフェースは、コントラクトスペースにおけるバイトコードを初期化することに用いられ、コントラクトアカウント削除インタフェースは、コントラクトスペースにおけるコントラクトアカウントを削除することに用いられる。
【0034】
S130において、前記インタフェースモジュールによって、前記データアクセス要求機能に対応するブロックチェーンアクセス用インタフェースを確定するために、前記データアクセス要求に応じて命令変換を行う。
【0035】
インタフェースモジュールは、データアクセス要求に対して命令の解析および変換を行い、データストレージスペースにおけるデータに対する様々な読取/書込機能を実現するために、複数のブロックチェーンアクセス用インタフェースが設置される。実は、インタフェースは、プログラムの1セグメントであり、データに対して1回又は複数回の読取/書込、コンピューティングなどの処理を実行可能であり、所定のプログラムに従って別のインタフェースを呼び出すこともできる。
【0036】
仮想マシンインスタンスで発生されるデータアクセス要求は、イーサリアム仮想マシンの命令形態であるため、そのままでは、イーサリアムをサポートしないデータ記憶システムによって識別できず、インタフェースモジュールを介してデータアクセス命令の命令変換を行わなければならない。
【0037】
データアクセス要求に応じて、オンチェーンデータの操作に相違があり、この相違は、データアクセス要求に対応する機能上の相違にて現れ、従って、様々なデータアクセス要求に対応するブロックチェーンアクセス用インタフェースにも相違がある。具体的に、データアクセス要求において、データ読取要求及びデータ書込要求に対応するブロックチェーンアクセス用インタフェースがそれぞれ異なる。
【0038】
代替的な実施例において、前記コントラクト内変数アクセス用インタフェースにコントラクト内変数記憶インタフェースおよびコントラクト内変数読取インタフェースが含まれる。
【0039】
ここで、コントラクト内変数読取インタフェースは、コントラクトデータ内のコントラクト内変数を読み取ることに用いられる。コントラクト内変数記憶インタフェースが記憶コントラクト内変数を記憶することに用いられる。
【0040】
仮想マシンインスタンスで発生されるコントラクト内変数のデータアクセス要求がコントラクト内変数読取請求である場合、インタフェースモジュールは、コントラクト内変数読取要求に応じて命令変換を行い、コントラクト内変数読取要求機能に対応するブロックチェーンアクセス用インタフェースをコントラクト内変数読取インタフェースとして確定する。
【0041】
仮想マシンインスタンスで発生されるコントラクト内変数のデータアクセス要求がコントラクト内変数記憶読取要求である場合、インタフェースモジュールは、コントラクト内変数記憶要求に応じて命令変換を行い、コントラクト内変数記憶要求機能に対応するブロックチェーンアクセス用インタフェースをコントラクト内変数記憶インタフェースとして確定する。
【0042】
代替的に、インタフェースモジュールにおいて、前記データアクセス要求に応じて命令変換を行い、前記データアクセス要求機能に対応するブロックチェーンアクセス用インタフェースを確定することは、具体的に、以下のステップを含む。
【0043】
ステップ1において、前記インタフェースモジュールは、前記データアクセス要求の所属の仮想マシンの命令および命令パラメータを識別する。
【0044】
ここで、仮想マシン命令および命令パラメータとは、仮想マシンインスタンスが処理待ちトランザクション要求を実行する時に生成されるものを指す。命令パラメータは、即ち、仮想マシン命令に含まれているパラメータ変数である。仮想マシン命令を実行することで、コントラクト内変数に対するアクセス操作を実現できる。コントラクト内変数は、アカウントデータとコントラクトデータを含む。従って、データアクセス要求は、即ち、アカウントデータとコントラクトデータに対する読取要求及び/又は書込要求である。
【0045】
イーサリアムスマートコントラクトはゲス(Go-Ethereum、Geth)によって開発されるものであることから、Gethはイーサリアムのgo言語バージョンのクライアントとして、イーサリアムスマートコントラクトの開発に必須のツールである。イーサリアムにおいては、アカウントの管理に、Gethから提供されるアカウント命令の操作命令がよく利用される。例示的に、データアクセス要求に対応する仮想マシン命令および命令パラメータはアカウントリスト命令のgeth account listであってもよく、アカウント更新命令のgeth account update又はアカウント作成命令のpersonal.newAccount(「Your Password」)であってもよい。データアクセス要求の所属仮想マシン命令および命令パラメータの具体的なコンテンツについては、実際の状況に応じて確定され、本明細書において限定されるものではない。
【0046】
ステップ2において、前記インタフェースモジュールは、プリセットされた仮想マシン命令とインタフェースマッピング関係に基づいて、前記データアクセス要求に対応するブロックチェーンアクセス用インタフェースを確定する。
【0047】
ここで、インタフェースマッピング関係とは、仮想マシン命令とブロックチェーンアクセス用インタフェースとの対応関係を指す。インタフェースマッピング関係は、ユーザが実際の状況に応じてインタフェースモジュールにプリセットされたものである。
【0048】
データアクセス要求と仮想マシン命令とは直接関連していることから、インタフェースマッピング関係が既知であれば、仮想マシン命令とインタフェースマッピングとの関係に基づいてデータアクセス要求に対応するブロックチェーンアクセス用インタフェースを確定し得る。
【0049】
冗長なマッピング関係が存在することを回避するために、代替的な実施例において、1つ又は複数の仮想マシン命令と1つのブロックチェーンアクセス用インタフェースとがインタフェースマッピング関係を有する。
【0050】
即ち、1つのブロックチェーンアクセス用インタフェースは、少なくとも1つの仮想マシン命令に対応する。異なる仮想マシン命令に同一のブロックチェーンアクセス用インタフェースが対応してもよい。仮想マシン命令と1つのブロックチェーンアクセス用インタフェースとのインタフェースマッピング関係は、本質的に、仮想マシン命令に対応するコントラクト内変数とブロックチェーンアクセス用インタフェースに対応するデータストレージスペースにおけるデータとの対応関係である。
【0051】
S140において、前記インタフェースモジュールによって、前記ブロックチェーンのデータストレージスペースに対して、前記ブロックチェーンアクセス用インタフェースを呼び出し、前記コントラクト内変数に対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックする。ここで、コントラクト内変数はブロックチェーンのデータストレージスペースに存在している。代替的に、データストレージスペースでは、様々なデータ構造をサポート可能であり、データ構造はブロックチェーンシステム自体の設置によって決定される。例えば、ブロックチェーンシステムには、一般的に、アカウント、ログ又はトランザクションデータ、スマートコントラクトなどが設置される必要があり、さらに、権限データなどが設置されてもよい。コントラクト内変数は、アクセスのためのいずれか1種のデータ構造であってもよい。
【0052】
代替的に、前記ブロックチェーンのデータストレージスペースに、外部アカウントにおけるアカウントデータおよびコントラクトアカウントにおけるアカウントデータを記憶するためのアカウントスペースと、コントラクトアカウントにおけるコントラクトデータを記憶するためのコントラクトスペースと、が含まれ、前記コントラクト内変数は、コントラクトデータである。
【0053】
イーサリアムにおいて、典型的には、外部アカウントと、コントラクトアカウントとが設置される。外部アカウントとは、鍵によって制御されるアカウントを指す。コントラクトアカウントとは、コントラクトコードによって制御されるアカウントを指す。2タイプのアカウントとも、1つのアカウントとしての基本的なオンチェーンデータが備えられる。コントラクトアカウントにおけるコントラクトデータとは、スマートコントラクトに関連するデータを指す。外部アカウントにはコントラクトデータが存在しない。イーサリアムにおいて、外部アカウントとコントラクトアカウントの両方ともアカウントタイプのデータ構造で記憶を行う。但し、スマートコントラクトコードが含まれるコントラクトアカウントに対して、移植先のブロックチェーンシステムでサポートしない場合は、異なる2タイプのデータを分離記憶するために、アカウントスペースとコントラクトスペースを区分して設置することが好ましい。
【0054】
インタフェースモジュールは、ブロックチェーンアクセス用インタフェースを呼び出すことで、ブロックチェーンアカウントスペースとコントラクトスペースとのデータに対するアクセス操作を実現可能であり、即ち、アカウントデータとコントラクトデータに対する読取操作及び/又は書込操作が実現でき、データに対応するアクセス結果が得られる。インタフェースモジュールは、アクセス結果を仮想マシンインスタンスにフィードバックする。アクセス結果は、具体的に、読み取られたデータであってもよく、アクセス成否に関するアクセスのステータスをフィードバックしてもよい。
【0055】
コントラクト内変数のデータアクセス要求がコントラクト内変数読取要求である場合、前記インタフェースモジュールは、前記ブロックチェーンのコントラクトスペースに対して、コントラクト内変数読取インタフェースを呼び出してコントラクト内変数の数値を読み取り、読み取られた数値を前記仮想マシンインスタンスにフィードバックする。
【0056】
ここで、インタフェースモジュールは、コントラクト内変数読取要求を受信した場合、コントラクト内変数読取要求に応じて、コントラクト内変数が記憶されているコントラクトスペースを確定し、前記ブロックチェーンのコントラクトスペースに対して、コントラクト内変数読取インタフェースを呼び出して呼び出し待ちコントラクトのコントラクト内変数を読み取り、読み取られたコントラクト内変数を前記仮想マシンインスタンスにフィードバックする。
【0057】
仮想マシンインスタンスが処理待ちトランザクション要求を実行する過程において、データ処理結果が発生するため、当該データ処理結果をコントラクトスペースに記憶するニーズがある場合、仮想マシンインスタンスは、コントラクト内変数記憶要求を発生させ、発生される前記コントラクト内変数記憶要求をインタフェースモジュールに転送する。前記インタフェースモジュールは、前記コントラクト内変数記憶要求に対応するコントラクト内変数記憶インタフェースを確定するために、前記データアクセス要求に応じて命令変換を行い、前記ブロックチェーンのコントラクトスペースに対して、コントラクト内変数記憶インタフェースを呼び出すことで、コントラクト内変数の数値を書き込む。
【0058】
具体的に、インタフェースモジュールは、コントラクト内変数記憶要求を受信した場合、コントラクト内変数記憶要求に応じて、コントラクト内変数の目標コントラクトスペースを確定し、前記ブロックチェーンのコントラクトスペースに対して、コントラクト内変数記憶インタフェースを呼び出し、コントラクト内変数の数値をコントラクトスペースに書き込む。本発明の実施例に係る技術案は、イーサリアム仮想マシンを別のブロックチェーンシステムに移植し、トランザクション処理を実行する際、インタフェースモジュールを構築し、インタフェースモジュールによってイーサリアム仮想マシン命令形態のデータアクセス要求に命令変換を行い、前記データアクセス要求機能に対応するブロックチェーンアクセス用インタフェースを確定することで、異なる構造のデータストレージスペースに対してアクセスできる。従って、ブロックチェーンを透明化/モジュール化させ、イーサリアム仮想マシンの別のブロックチェーンシステムへの移植の難易度を低減させた。また、本発明の実施例において、ブロックチェーンは、コントラクトデータおよびアカウントデータをそれぞれ記憶することで、様々なタイプのデータ記憶構造を互換可能となり、別のブロックチェーンで様々なデータに対して操作を行うことを容易にした。本発明の実施例は、インタフェースモジュールを構築することと、ブロックチェーンアカウントデータとコントラクトデータをそれぞれ記憶することとを組み合わせることで、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムと別のブロックチェーン技術との互換性を向上させた。本発明の実施例は、仮想マシンインスタンスとインタフェースモジュールとを協働させることで、処理待ちトランザクション要求を共に完成し、異なるブロックチェーン間のコントラクト内変数のアクセス操作を実現し、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムと別のブロックチェーン技術との互換性を向上させた。本発明の実施例において、前記仮想マシンインスタンスによって前記処理待ちトランザクション要求の実行を完了した後に、ブロックチェーンアクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に基づいてブロックチェーンのオンチェーンデータを更新してもよい。コントラクトスペースにおけるコントラクト内変数は、スマートコントラクトの実行過程で更新される新規変数であり、一般的には、トランザクション処理過程における中間データおよび最終データである。ブロックチェーンアクセス用インタフェースによって最終データをチェーンにアップロードし記憶させてもよい。
【0059】
本実施例は、上記実施例を基礎として提供される代替的な技術案である。具体的には、ブロックチェーンのデータストレージスペースにおけるアカウントデータとコントラクトデータとに対する記憶方法を細分化したものである。
【0060】
分かるように、イーサリアムにおいて、典型的には、外部アカウントと、コントラクトアカウントとが設置される。外部アカウントとは、鍵によって制御されるアカウントを指す。コントラクトアカウントとは、コントラクトコードによって制御されるアカウントを指す。2タイプのアカウントとも、1つのアカウントとしての基本的なオンチェーンデータが備えられる。コントラクトアカウントにおけるコントラクトデータとは、スマートコントラクトに関連するデータを指す。外部アカウントには、コントラクトデータが存在しない。コントラクトアカウントと外部アカウントの両方とも、ブロックチェーンのデータストレージスペースに記憶される。
【0061】
ここで、前記ブロックチェーンのデータストレージスペースは、少なくとも2タイプのアカウントのデータ操作をサポートすることに用いられ、各前記アカウントのアカウントデータに利用されるデータ構造は同じである。
【0062】
仮想マシンインスタンスがトランザクションデータ処理待ちトランザクション要求を過程において、ブロックチェーンのデータストレージスペースにおけるデータに対するデータ読取要求及び/又はデータ書込要求を発生させる。具体的に、ブロックチェーンのデータストレージスペースにおける外部アカウントと、コントラクトアカウントとのデータに対してデータアクセス操作を行う。データストレージスペースにおける外部アカウントと、コントラクトアカウントとに利用されるデータ構造は同じである。代替的に、外部アカウントとコントラクトアカウントの両方とも、アカウントタイプのデータ構造で記憶を行う。
【0063】
ここで、前記ブロックチェーンのデータストレージスペースに、外部アカウントにおけるアカウントデータと、コントラクトアカウントにおけるアカウントデータとを記憶することに用いられるアカウントスペースと、コントラクトアカウントにおけるコントラクトデータを記憶することに用いられるコントラクトスペースと、が含まれ、前記コントラクト内変数は、コントラクトデータである。
【0064】
イーサリアム仮想マシンを別のブロックチェーンシステムに移植する場合、もし移植先のブロックチェーンシステムにおいてスマートコントラクトコードが含まれるコントラクトアカウントをサポートしないと、異なる2タイプのデータを分離記憶するためには、データストレージスペースにおいてアカウントスペースと、コントラクトスペースを区分して設置することが好ましい。
【0065】
イーサリアムにおいて、外部アカウントと、コントラクトアカウントとは、いずれにも、アカウントデータが存在しており、外部アカウントと、コントラクトアカウントとの相違点としては、コントラクトアカウントに、アカウントデータに加えて、コントラクトデータが存在することである。アカウントデータと、コントラクトデータとを分離記憶するためには、外部アカウントおよびコントラクトアカウントにおけるアカウントデータをアカウントスペースに記憶させ、コントラクトアカウントにおけるコントラクトデータをコントラクト内に別途に記憶する。
【0066】
仮想マシンインスタンスは、処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させ、当該コントラクト内変数に対するデータアクセス要求が、即ち、コントラクトスペースにおけるコントラクト内変数に対するデータアクセス要求である。
【0067】
代替的な実施例において、前記アカウントデータには、アカウント識別子と、取引シーケンス番号と、アカウント公開鍵と、トークンとが含まれる。
【0068】
例示的に、ブロックチェーンのデータストレージスペースにおいて、以下のデータ構造でコントラクトアカウントおよび外部アカウントにおけるアカウントデータを記憶させてもよい。
【0069】
type AccountData struct {
Address string
Sequence uint
Pubkey string
Balance uint }
【0070】
ここで、Addressは、アカウント識別子を表し、Sequenceは取引シーケンス番号を表し、Pubkeyはアカウント公開鍵を表し、Balanceはトークンを表す。ここで、前記アカウント識別子はアカウントデータのデータ呼び出し識別子であり、アカウント識別子はアカウントアドレス又はアカウント名称であってもよく、異なるアカウントデータは異なるアカウント識別子を有する。取引シーケンス番号は、取引済み回数のデータを記録することに用いられる。アカウント公開鍵とは、暗号化アカウントに用いられる公開鍵を指す。トークンとはデジタル形態で存在する権利証を指し、トークンが代表するものは、固有および内在する価値であり、デジタル化可能なあらゆる権利証を代表することができる。例示的に、トークンは、通貨、債券、勘定科目、所有権又は資格などの権利証であってもよい。
【0071】
アカウントデータに対する管理効率を向上させるとともに、アカウントデータ操作の利便性を向上させるために、代替的な実施例において、前記アカウントデータが鍵値対(key value pair)による記憶形態を使用し、前記アカウント識別子が鍵値として鍵値域に記憶され、前記取引シーケンス番号と、アカウント公開鍵と、トークンとが値域に記憶される。
【0072】
アカウント識別子は、鍵情報として、取引シーケンス番号と、アカウント公開鍵と、トークンとの3タイプの値情報に対応する。鍵値とするアカウント識別子は、アカウントデータに対して操作を行う場合、アカウントデータに対するインデックスに用いられ、データアクセス命令に目標アカウントデータのアカウント識別子を追加することで、当該アカウント識別子に基づいて目標アカウントデータの取引シーケンス番号と、アカウント公開鍵と、トークン情報とを取得できる。
【0073】
代替的な実施例において、前記コントラクトデータに、アカウント識別子と、コントラクトバイトコードと、コントラクト内変数とが含まれ、当該コントラクトバイトコードは、スマートコントラクトをコンパイルして得られたものとして、実行プログラムと、1シーケンスのオペレーション(Operation、op)コード/データペアから構成されるバイナリファイル(Binary File)と、を含む、中間コードの1種である。ここで、コントラクト内変数は、変数名称および変数値を含む。ここで、コントラクトアカウントのアカウント識別子はスマートコントラクトのコントラクト呼出識別子である。異なるスマートコントラクトは異なるアカウント識別子を有する。スマートコントラクトを呼び出す時には、データアクセス要求にコントラクト呼び出し識別子を追加することで、当該コントラクト呼出識別子に基づいて呼び出ししようとするスマートコントラクトを確定できる。
【0074】
コントラクトデータに対して操作を行うシナリオにおいて、コントラクトデータの位置づけの速度および正確性を向上させるために、代替的な実施例において、前記コントラクトデータが鍵値対による記憶形態を使用し、前記アカウント識別子と変数識別子との組み合わせが鍵値対の鍵値とされ、記憶待ち変数の位置する鍵値対を照会することに用いられる。代替的に、前記アカウント識別子が鍵値のプレフィックスとされ、前記コントラクトバイトコードと、コントラクト内変数とのそれぞれの識別子が組み合わせて鍵値域に記憶され、前記コントラクトバイトコードと、コントラクト内変数が値域に記憶される。
【0075】
鍵値にはアカウント識別子と、コントラクトバイトコードおよびコントラクト内変数のそれぞれの識別子と、が含まれており、アカウント識別子は鍵値のプレフィックスとして異なるコントラクトデータを区分可能であり、具体的なコントラクトデータが位置づけられると、鍵値内のコントラクトバイトコードと、コントラクト内変数との識別子に基づいて、操作しようとするコントラクトデータをより一層正確に確定できる。
【0076】
アカウント識別子は、鍵情報として、コントラクトバイトコードと、コントラクト内変数との2タイプの値情報に対応する。鍵値とするアカウント識別子は、コントラクトデータに対して操作を行う場合、コントラクトデータに対してインデックスを行うことに用いられ、データアクセス命令に目標コントラクトデータのアカウント識別子を追加することで、当該アカウント識別子に基づいて、目標コントラクトデータのコントラクトバイトコードと、コントラクト内変数とを取得できる。
【0077】
同一コントラクトアカウントに属するアカウントデータと、コントラクトデータとのアカウント識別子は、一致するものであり、アカウントデータと、コントラクトデータとは、一対一に対応する。コントラクトアカウントにおけるアカウントデータと、コントラクトデータとに対して操作を行う場合、両方とも鍵値によってインデックスを行う。アカウントデータの鍵値には、アカウント識別子のみ含まれるが、コントラクトデータの鍵値は、アカウント識別子がプレフィックスとされ、コントラクトバイトコードおよびコントラクト内変数のそれぞれの識別子と共に構成されるものである。したがって、アカウントデータの鍵値と、コントラクトデータの識別子とを区分できる。
【0078】
本願の実施例は、データストレージスペースをアカウントスペースと、コントラクトスペースとに区分し、外部アカウントおよびコントラクトアカウントにおけるアカウントデータをアカウントスペースに記憶させ、コントラクトアカウントにおけるコントラクトデータをコントラクトスペースに記憶することで、アカウントデータと、コントラクトデータとを分離記憶することを実現し、異なるブロックチェーンシステムに記憶されるデータ構造の互換性を向上させた。コントラクトアカウントにおけるアカウントデータと、外部アカウントにおけるアカウントデータとが同じデータ構造を有することは、ブロックチェーン間のデータ操作の難易度を低減させるとともに、ブロックチェーンへの移植の難易度を低減させた。
【0079】
本実施例は、上記実施例を最適化したものであり、具体的には、コントラクト内変数に対する仮想マシンインスタンスのデータアクセス要求がコントラクト内変数読取要求又はコントラクト内変数記憶要求である場合、仮想マシンインスタンスが処理待ちトランザクション要求を実行する過程を細分化したものである。
【0080】
データアクセス要求がコントラクト内変数読取要求である場合、仮想マシンインスタンスが処理待ちトランザクション要求を実行する過程は以下の通りである。
【0081】
ステップ1において、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得する。
【0082】
ステップ2において、前記仮想マシンインスタンスは、前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するコントラクト内変数読取要求を発生させ、発生される前記コントラクト内変数読取要求をインタフェースモジュールに転送する。
【0083】
ステップ3において、前記インタフェースモジュールは、コントラクト内変数読取要求機能に対応するコントラクト内変数読取インタフェースを確定するために、コントラクト内変数読取要求に応じて命令変換を行う。
【0084】
ステップ4において、インタフェースモジュールは、前記ブロックチェーンのデータストレージスペースにおけるコントラクトスペースに対して、コントラクト内変数読取インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数の目標アクセスデータに対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックする。
【0085】
具体的に、インタフェースモジュールは、入力パラメータをコントラクト内変数読取インタフェースに転送する。前記コントラクト内変数読取インタフェースの入力パラメータは、アカウント識別子と変数識別子とを含み、前記アカウント識別子と変数識別子との組み合わせが鍵値対の鍵値とされ、読取待ち変数の数値を照会し読み取ることに用いられる。データストレージスペースにおけるコントラクトデータが鍵値対による記憶形態を使用し、アカウント識別子が鍵値内のプレフィックスとされ、前記コントラクトバイトコードおよびコントラクト内変数のそれぞれの識別子と組み合わせて鍵値として鍵値域に記憶される。入力パラメータアカウント識別子および変数識別子に基づいて、データストレージスペースのコントラクトアカウントに記憶されているコントラクト内変数を唯一に確定でき、値域における当該コントラクト内変数を読み取り、アクセス結果を仮想マシンインスタンスにフィードバックできる。
【0086】
例示的に、インタフェースモジュールは、GetStorage(address crypto.Address、 key binary.Word256) ([]byte、 error)によってコントラクト内変数読取インタフェース(GetStorage)を呼び出す。
【0087】
ここで、入力パラメータaddress crypto.Addressは、コントラクト識別子を表し、代替的には、コントラクトアドレス又はコントラクト名称であってもよく、入力パラメータkey binary.Word256は、変数識別子を表し、具体的には、変数名称である。
【0088】
データアクセス要求がコントラクト内変数記憶要求である場合、仮想マシンインスタンスが処理待ちトランザクション要求を実行する過程は以下の通りである。
【0089】
ステップ1において、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得する。
【0090】
ステップ2において、前記仮想マシンインスタンスは、前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対してコントラクト内変数記憶要求を発生させ、発生されるコントラクト内変数記憶要求をインタフェースモジュールに転送する。
【0091】
ステップ3において、前記インタフェースモジュールは、コントラクト内変数記憶要求機能に対応するコントラクト内記憶インタフェースを確定するために、コントラクト内変数記憶要求に応じて命令変換を行う。
【0092】
インタフェースモジュールは、前記ブロックチェーンのデータストレージスペースにおけるコントラクトスペースに対して、コントラクト内変数記憶インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数の目標アクセスデータに対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックする。
【0093】
具体的に、インタフェースモジュールは、入力パラメータをコントラクト内変数記憶インタフェースに転送する。前記コントラクト内変数記憶インタフェースの入力パラメータは、アカウント識別子と、変数識別子と、変数値とを含み、ここで、前記アカウント識別子と変数識別子との組み合わせが鍵値対の鍵値とされ、記憶待ち変数の位置する鍵値対を照会し、前記変数を前記鍵値対の値域に入力し書き込むことに用いられる。データストレージスペースにおけるコントラクトデータが鍵値対による記憶形態を使用し、アカウント識別子が鍵値内のプレフィックスとされ、前記コントラクトバイトコードおよびコントラクト内変数のそれぞれの識別子と組み合わせて鍵値として鍵値域に記憶される。入力パラメータアカウント識別子および変数識別子に基づいて、記憶待ち変数の位置する鍵値対を照会することで、データストレージスペースのコントラクトアカウントに記憶されているコントラクト内変数を唯一に確定でき、変数を前記鍵値対の値域に入力し書き込むことができる。
【0094】
例示的に、インタフェースモジュールは、SetStorage (address crypto.Address、 key binary.Word256、 value []byte)(error)によってコントラクト内変数記憶インタフェース(SetStorage)を呼び出す。
【0095】
ここで、入力パラメータaddress crypto.Addressはコントラクト識別子を表し、代替的には、コントラクトアドレス又はコントラクト名称であってもよく、入力パラメータkey binary.Word256は変数識別子を表し、具体的には変数名称である。入力パラメータvalue[]byteはコントラクト内変数記憶インタフェースの入力パラメータであり、変数値を表すものである。
【0096】
異なるコントラクトアドレスは異なるコントラクトを区分することに用いられ、さらに、コントラクトアカウント間のコントラクトデータの分離を実現し、たとえ異なる2つのコントラクトアカウントに同じ鍵値があるとしても、ブロックオンチェーンに記憶されるコントラクトアカウントの位置は、同じ位置にあるわけではない。これにより、異なるコントラクトアカウントにおけるコントラクト内変数のスペース上の分離を実現できる。
【0097】
本発明の実施例において、仮想マシンインスタンスは、前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させてインタフェースモジュールに転送し、前記インタフェースモジュールは、前記ブロックチェーンのデータストレージスペースに対して、前記ブロックチェーンアクセス用インタフェースを呼び出し、前記コントラクト内変数に対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックする。本発明は、仮想マシンインスタンスとインタフェースモジュールとを協動させることで、処理待ちトランザクション要求を共に完成し、異なるブロックチェーン間のデータアクセス操作を実現し、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムと別のブロックチェーン技術との互換性を向上させた。
【0098】
図2は、本発明の実施例に係るイーサリアム仮想マシンに基づくトランザクション処理方法の概略図であり、本実施例は上記実施例を最適化した好ましい実施例であり、具体的には、処理待ちトランザクション要求を1回実行する全過程を説明する。
【0099】
図2を参照すると、本実施例に提供されるイーサリアム仮想マシンに基づくトランザクション処理方法は、以下のステップを含む。
【0100】
ステップ1において、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得する。
【0101】
代替的に、処理待ちトランザクション要求は1回の取引(Transaction)のトランザクション要求である。取引のトランザクション要求には、コントラクトの呼び出し側(From)と、呼び出されるコントラクト(To)と、呼び出されるコントラクトから転送されるトークン(Token)量(Amout)と、呼び出されるコントラクト方法の方法署名(Method Signature)及び入力パラメータ(Data)との4つのパラメータが含まれる。ブロックチェーンノードは、取引のトランザクション要求に含まれているFrom、To、AmoutおよびDataを仮想マシンインスタンスに転送し、仮想マシンインスタンスにおいて呼び出し側(Caller)、呼び出される側(Callee)、数値(Value)および入力パラメータ(Input)として存在する。
【0102】
具体的に、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、コントラクト呼び出し側から開始された処理待ちトランザクション要求を取得する。ここで、処理待ちトランザクション要求には、コントラクト呼び出し側の識別子と、呼び出し待ちコントラクトの識別子と、コントラクトパラメータと、トークン(Token)とが含まれる。処理待ちトランザクション要求が取引のトランザクション要求である場合、仮想マシンインスタンスにおける呼び出し側(Caller)はコントラクト呼び出し側の識別子であり、呼び出される側(Callee)は呼び出し待ちコントラクトの識別子であり、数値(Value)はトークンであり、入力パラメータ(Input)はコントラクトパラメータである。
【0103】
ステップ2において、仮想マシンインスタンスは呼び出し側(Caller)および呼び出される側(Callee)に応じて、インタフェースモジュールにおけるオンチェーンアカウント照会インタフェース(Acc Exists)およびオンチェーンコントラクト照会インタフェース(Contract Exists)を呼び出してブロックチェーンのデータストレージスペースに呼び出し待ちコントラクトおよびコントラクト呼び出し側の存否についてそれぞれに照会する。
【0104】
具体的に、仮想マシンインスタンスが取引のトランザクション要求を受信した場合、仮想マシンインスタンスは、取引のトランザクション要求内のコントラクト呼び出し側の識別子および呼び出し待ちコントラクトの識別子に基づいて、呼び出し側のオンチェーンアカウント照会要求とオンチェーンコントラクト照会要求とをそれぞれ発生させ、前記インタフェースモジュールに転送する。ここで、インタフェースモジュールには、仮想マシンインスタンスインタフェースがカプセル化されている。インタフェースモジュールは、オンチェーンアカウント照会要求に応じて、ブロックチェーンのアカウントスペースに対して、オンチェーンアカウント照会インタフェースを呼び出し、オンチェーンにコントラクト呼び出し側アカウントの存否について照会する。インタフェースモジュールは、オンチェーンコントラクト照会要求に応じて、ブロックチェーンのコントラクトスペースに対して、オンチェーンコントラクト照会インタフェースを呼び出し、オンチェーンに呼び出し待ちコントラクトの存否について照会する。インタフェースモジュールは、コントラクト呼び出し側アカウントおよび呼び出し待ちコントラクトに対する照会結果を仮想マシンインスタンスにフィードバックする。
【0105】
ステップ3において、ブロックチェーンのデータストレージスペースにコントラクト呼び出し側と呼び出し待ちコントラクトの両方とも存在する場合、仮想マシンインスタンスは、コントラクトスペース(Contract Store)に格納されているコントラクトバイトコード(Code)を取得するために、インタフェースモジュール内のコントラクトバイトコード読取インタフェース(Get Code)を呼び出す。
【0106】
具体的に、インタフェースモジュールからフィードバックされた照会結果が、オンチェーンアカウントおよびオンチェーンコントラクトが存在することであると、仮想マシンインスタンスは、呼び出し待ちコントラクトの識別子に基づいてコントラクトバイトコード読取要求を発生させ、発生されるコントラクトバイトコード読取要求をインタフェースモジュールに転送する。インタフェースモジュールは、前記ブロックチェーンのコントラクトスペースに対して、コントラクトバイトコード読取インタフェースを呼び出し、呼び出し待ちコントラクトのコントラクトバイトコードを読み取り、読み取られたコントラクトバイトコードを前記仮想マシンインスタンスにフィードバックする。
【0107】
ステップ4において、仮想マシンインスタンスは、EVM Executeが取引のトランザクション要求を実行するように、Caller、Value、InputおよびCodeを仮想マシンインスタンス実行モジュール(EVM Execute)に転送する。
【0108】
ステップ5およびステップ6において、EVM Executeは、Caller、Value、InputおよびCodeに基づいて、取引のトランザクション要求を実行し、取引のトランザクション要求を実行する過程には、コントラクトのステータス変更を実現するために、コントラクト内変数の読み取りや記憶が伴う。
【0109】
具体的に、仮想マシンインスタンスは、インタフェースモジュールからフィードバックされたコントラクトバイトコードと、処理待ちトランザクション要求内のコントラクトパラメータおよびトークンと、に基づいて、処理待ちトランザクション要求を実行し、実行する過程においてコントラクト内変数読取要求を発生させ、発生される前記コントラクト内変数読取要求を前記インタフェースモジュールに転送する。ここで、コントラクト内変数に、スマートコントラクトの動作過程における変数および変数値が含まれる。インタフェースモジュールは、前記ブロックチェーンのコントラクトスペースに対して、コントラクト内変数読取インタフェースを呼び出し、コントラクト内変数の数値を読み取り、読み取られた数値を前記仮想マシンインスタンスにフィードバックする。
【0110】
仮想マシンインスタンスは、処理待ちトランザクション要求を実行する過程において、コントラクト内変数記憶要求を発生させ、発生されるコントラクト内変数記憶要求をインタフェースモジュールに転送し、インタフェースモジュールは、前記ブロックチェーンのコントラクトスペースに対して、コントラクト内変数記憶インタフェースを呼び出し、コントラクト内変数の数値を書き込む。なお、
図2において、接続ラインおよび数字をつけて示しているものは、数字が示しているステップにおけるデータの流れ方向である。
【0111】
本発明の実施例において、仮想マシンインスタンスは、前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生させてインタフェースモジュールに転送し、前記インタフェースモジュールは、前記ブロックチェーンのデータストレージスペースに対して、前記ブロックチェーンアクセス用インタフェースを呼び出し、前記コントラクト内変数に対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックする。本発明は仮想マシンインスタンスとインタフェースモジュールとを協動させることで、処理待ちトランザクション要求を共に完成し、異なるブロックチェーン間のデータアクセス操作を実現し、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムと別のブロックチェーン技術との互換性を向上させた。
【0112】
図3は、本発明の実施例に係るさらなるイーサリアム仮想マシンに基づくトランザクション処理方法の概略図である。本実施例は上記実施例を基礎として提供される代替的な技術案である。具体的には、処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント作成要求である場合、当該処理待ちトランザクション要求を実行する過程を細分化したものである。
【0113】
図3を参照すると、本実施例に提供されるイーサリアム仮想マシンに基づくトランザクション処理方法は、以下のことを含む。
【0114】
S310において、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得する。
【0115】
S320において、前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント作成要求であると識別すると、前記処理待ちトランザクション要求を前記インタフェースモジュールに転送する。
【0116】
ここで、コントラクトアカウントに基づいたコントラクトアカウント作成要求とは、新規コントラクトアカウントを作成するための要求を指す。コントラクトアカウント作成要求には、新規作成されたコントラクトアカウントのアカウントデータとコントラクトデータを書き込むことが含まれる。コントラクトアカウントに基づいたコントラクトアカウント作成要求には、新規作成されたコントラクトアカウントのアカウントデータとスマートコントラクトを書き込むことが含まれる。
【0117】
仮想マシンインスタンスは、コントラクトアカウントに基づいたコントラクトアカウント作成要求を実行し、目標コントラクトアカウントに対するデータアクセス要求を発生させる。コントラクトアカウントにコントラクトデータおよびアカウントデータが含まれることから、具体的には、コントラクトアカウントに対するアカウントデータ書込要求とコントラクトデータ書込要求を発生させる。アカウントデータ書込要求は、コントラクトアカウントのアカウントスペースに対してアカウントデータを書き込む要求であり、コントラクトデータ書込要求は、コントラクトアカウントのコントラクトスペースに対してコントラクトデータを書き込む要求である。ここで、コントラクトスペースとアカウントスペースとはスペースにおいて別々に設けられたものである。
【0118】
S330において、前記インタフェースモジュールによって、対応するコントラクトアカウント作成インタフェースを確定するために、前記コントラクトアカウント作成要求に応じて命令変換を行う。
【0119】
インタフェースモジュールは、当該コントラクトアカウント作成要求の所属仮想マシン命令および命令パラメータを識別すると、プリセットされた仮想マシン命令とインタフェースマッピング関係に基づいて、コントラクトアカウント作成要求に対応するブロックチェーンアクセス用インタフェースを確定する。
【0120】
S340において、前記インタフェースモジュールによって、コントラクトアカウント作成インタフェースを呼び出し、前記アカウントスペースにコントラクトアカウントを作成し、前記コントラクトアカウントのアカウントデータを書き込み、コントラクトスペースを作成する。
【0121】
通常の場合、ブロックチェーンには、もれなくアカウントスペースが存在することから、インタフェースモジュールは、コントラクトアカウント作成要求を受信した場合、コントラクトアカウント作成要求に応じて、すぐに目標アカウントスペースを確定でき、ブロックチェーンのアカウントスペースに対して、コントラクトアカウント作成インタフェースを呼び出し、アカウントスペースにコントラクトアカウントを作成しコントラクトアカウントのアカウントデータを書き込む。しかしながら、コントラクトスペースは、コントラクトデータを記憶するためのスペースであり、コントラクトアカウントを作成する時には、コントラクトスペースを作成しなければならない。
【0122】
S350において、前記インタフェースモジュールによって前記コントラクトアカウント作成インタフェースを実行する過程において、前記コントラクトバイトコード初期化インタフェースを呼び出して作成待ちスマートコントラクトをコンパイルし、コントラクトバイトコードを形成して前記コントラクトスペースに書き込む。
【0123】
ここで、コントラクトバイトコード初期化インタフェースは、作成待ちスマートコントラクトをコンパイルしてコントラクトバイトコードを得、当該バイトコードをコントラクトスペースのインタフェースに書き込むことに用いられる。
【0124】
コントラクトスペースを作成した後に、コントラクトスペースのコントラクトデータに対して初期化する必要があり、インタフェースモジュールは、コントラクトアカウント作成インタフェースを実行する過程において、コントラクトバイトコード初期化インタフェースを呼び出し、スマートコントラクトをコンパイルし、コントラクトバイトコードを形成して前記コントラクトスペースに書き込む。
【0125】
S360において、前記インタフェースモジュールによって前記コントラクトアカウント作成インタフェースを実行する過程において、前記コントラクト内変数記憶インタフェースを呼び出し、前記コントラクトスペースに前記スマートコントラクトのコントラクト内変数を作成し記憶する。
【0126】
スマートコントラクトに変数が存在し、スマートコントラクトの実行過程において、これらの変数に対して操作を行う場合があることから、スマートコントラクト内で係る変数および変数値についてもコントラクトスペースに記憶するべきである。インタフェースモジュールは、コントラクトアカウント作成インタフェースを実行する過程において、コントラクト内変数記憶インタフェースを呼び出し、コントラクトスペースにスマートコントラクトのコントラクト内変数を作成し記憶する。
【0127】
本発明の実施例に係る技術案は、仮想マシンインスタンスとインタフェースモジュールとを協動させることで、コントラクトアカウントに基づいたコントラクトアカウント作成方案を提供し、これにより、ユーザが自身のニーズに応じてコントラクトアカウントを作成できるように、アカウントスペースとコントラクトスペースを分離させ、ブロックチェーンの業務上の拡張性を向上させた。
【0128】
図4は、本発明の実施例に係るさらなるイーサリアム仮想マシンに基づくトランザクション処理方法の概略図である。本実施例は、上記実施例を基礎として提供される代替的な技術案である。具体的に、処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント削除要求である場合、当該処理待ちトランザクション要求を実行する過程を細分化したものである。
【0129】
図4を参照すると、本実施例に提供されるイーサリアム仮想マシンに基づくトランザクション処理方法は以下のことを含む。
【0130】
S410において、ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得する。
【0131】
S420において、前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント削除要求であると識別すると、前記処理待ちトランザクション要求を前記インタフェースモジュールに転送する。
【0132】
ここで、コントラクトアカウントに基づいたコントラクトアカウント削除要求とは、コントラクトアカウントから既存のコントラクトアカウントを削除するための要求を指す。コントラクトアカウントに基づいたコントラクトアカウント削除要求には、目標コントラクトアカウントのアカウントデータとコントラクトデータとを削除することが含まれる。コントラクトアカウントに基づいたコントラクトアカウント削除要求には、削除しようとするコントラクトアカウントのアカウント識別子が含まれる。
【0133】
仮想マシンインスタンスはコントラクトアカウントに基づいたコントラクトアカウント削除要求を実行し、目標コントラクトアカウントに対するデータアクセス要求を発生させる。コントラクトアカウントにコントラクトデータおよびアカウントデータが含まれることから、具体的には、コントラクトアカウントに対するアカウントデータ書込要求とコントラクトデータ書込要求を発生させる。アカウントデータ書込要求は、コントラクトアカウントのアカウントスペースに対してアカウントデータを書き込む要求であり、コントラクトデータ書込要求は、コントラクトアカウントのコントラクトスペースに対してコントラクトデータを書き込む要求である。ここで、コントラクトスペースとアカウントスペースとはスペース上で別々に設けられたものである。コントラクトアカウントを削除することは、コントラクトアカウントにおけるコントラクトデータおよびアカウントデータを全部ヌルにしてもよく、コントラクトデータおよびアカウントデータのアカウント識別子フィールドのみをヌルにしてもよく、これにより、当該コントラクトアカウントは、他のユーザによってインデックスされることなく、コントラクトアカウントを削除する目的を達成する。
【0134】
S430において、前記インタフェースモジュールによって、対応するコントラクトアカウント削除インタフェースを確定するために、前記コントラクトアカウント削除要求に応じて命令変換を行う。
【0135】
インタフェースモジュールは、当該コントラクトアカウント削除要求の所属仮想マシンの命令および命令パラメータを識別し、プリセットされた仮想マシン命令とインタフェースマッピング関係に基づいて、コントラクトアカウント削除要求に対応するブロックチェーンアクセス用インタフェースを確定する。
【0136】
S440において、前記インタフェースモジュールによって、コントラクトアカウント削除インタフェースを呼び出し、削除待ちコントラクトアカウントのアカウントデータを前記アカウントスペースから削除し、前記コントラクトスペースにおける前記削除待ちコントラクトアカウントのコントラクトデータを削除する。コントラクトアカウントにコントラクトデータおよびアカウントデータが含まれ、コントラクトデータおよびアカウントデータはそれぞれにコントラクトスペースおよびアカウントスペースに記憶されていることから、コントラクトアカウントを削除する場合、インタフェースモジュールは、コントラクトアカウント削除要求に応じてコントラクトアカウント削除インタフェースを呼び出して削除待ちコントラクトアカウントのアカウントデータをアカウントスペースから削除し、前記コントラクトスペースにおける削除待ちコントラクトアカウントのコントラクトデータを削除する。
【0137】
本発明の実施例は、仮想マシンインスタンスとインタフェースモジュールとを協動させることで、ユーザが他のユーザにコントラクトアカウントを使用させたくない場合、又はコントラクトアカウントを廃棄したい場合に、当該コントラクトアカウントを削除できるように、コントラクトアカウントに基づいたコントラクトアカウントの削除方案を提供し、これにより、ブロック記憶リソースが無駄になることを回避するとともに、コントラクトアカウントのプライバシーを向上させることに役立てる。
【0138】
図5は、本発明の実施例に係るイーサリアム仮想マシンに基づくトランザクション処理装置の概略図である。
図5を参照すると、本発明の実施例では、イーサリアム仮想マシンに基づくトランザクション処理装置500が開示されており、当該装置500は、
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得することに用いられる処理待ちトランザクション要求取得モジュール510と、
前記仮想マシンインスタンスにおいて、前記処理待ちトランザクション要求を実行する過程において、コントラクト内変数に対するデータアクセス要求を発生し、インタフェースモジュールに転送することに用いられる、データアクセス要求生成および転送モジュール520と、
前記インタフェースモジュールが、前記データアクセス要求機能に対応するコントラクト内変数アクセス用インタフェースを確定するために、前記データアクセス要求に応じて命令変換を行うことに用いられる命令変換モジュール530と、
前記インタフェースモジュールは、前記ブロックチェーンのデータストレージスペースにおけるコントラクトスペースに対して、前記コントラクト内変数アクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に対してアクセス操作を行い、アクセス結果を前記仮想マシンインスタンスにフィードバックすることに用いられる、コントラクト内変数アクセス用インタフェース呼出モジュール540と、を備えてもよく、
前記データアクセス要求に、データ読取要求及び/又はデータ書込要求が含まれ、
前記コントラクト内変数にスマートコントラクト内のパラメータ変数および変数値が含まれ、前記コントラクトスペースにおけるコントラクト内変数は、ブロックチェーンのオンチェーンデータを更新することに用いられる。
【0139】
本発明の実施例に係る技術案は、イーサリアム仮想マシンを別のブロックチェーンシステムに移植し、トランザクション処理を実行する際、インタフェースモジュールを構築し、インタフェースモジュールによってイーサリアム仮想マシンの命令形態のデータアクセス要求に対して命令変換を行い、前記データアクセス要求機能に対応するブロックチェーンアクセス用インタフェースを確定することで、異なる構造のデータストレージスペースをアクセスできる。従って、ブロックチェーンが透明化、モジュール化となり、イーサリアム仮想マシンの別のブロックチェーンシステムへの移植の難易度を低減し、さらに、本発明の実施例において、ブロックチェーンコントラクトデータおよびアカウントデータをそれぞれ記憶することで、様々なタイプのデータ記憶構造を互換可能となり、別のブロックチェーンで様々なデータに対する操作を容易にした。本発明の実施例は、インタフェースモジュールを構築し、ブロックチェーンアカウントデータとコントラクトデータをそれぞれ記憶することとを組み合わせることで、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムと別のブロックチェーン技術との互換性を向上させた。本発明の実施例は、仮想マシンインスタンスとインタフェースモジュールとを協動させることで、処理待ちトランザクション要求を共に完成し、異なるブロックチェーン間のコントラクト内変数のアクセス操作を実現し、イーサリアム仮想マシンを別のブロックチェーンシステムへ移植する課題を解決し、イーサリアムと別のブロックチェーン技術との互換性を向上させた。
【0140】
代替的に、前記ブロックチェーンのデータストレージスペースに、外部アカウントにおけるアカウントデータおよびコントラクトアカウントにおけるアカウントデータを記憶することに用いられるアカウントスペースと、前記コントラクトスペースは、コントラクトアカウントにおけるコントラクトデータを記憶することに用いられるコントラクトスペースと、が含まれ、前記コントラクトデータに、アカウント識別子と、コントラクトバイトコードと、コントラクト内変数とが含まれる。
【0141】
代替的に、前記アカウントデータにアカウント識別子と、取引シーケンス番号と、アカウント公開鍵と、トークンと、が含まれ、前記アカウントデータが鍵値対による記憶形態を使用し、前記アカウント識別子が鍵値として鍵値域に記憶され、前記取引シーケンス番号と、アカウント公開鍵と、トークンとが値域に記憶される。
【0142】
代替的に、前記アカウント識別子は、スマートコントラクトのコントラクト呼出識別子であり、前記コントラクトデータが鍵値対による記憶形態を使用し、前記アカウント識別子を鍵値のプレフィックスとされ、前記コントラクトバイトコードおよびコントラクト内変数のそれぞれの識別子と組み合わせて鍵値域に記憶され、前記コントラクトバイトコードおよびコントラクト内変数が値域に記憶される。
【0143】
代替的に、前記コントラクト内変数アクセス用インタフェースにコントラクト内変数記憶インタフェースおよびコントラクト内変数読取インタフェースが含まれる。
【0144】
代替的に、前記コントラクト内変数読取インタフェースの入力パラメータは、アカウント識別子と、変数識別子とを含み、前記アカウント識別子と変数識別子との組み合わせが鍵値対の鍵値とされ、読取待ち変数の数値を照会し読み取ることに用いられる。
【0145】
代替的に、前記コントラクト内変数記憶インタフェースの入力パラメータは、アカウント識別子と、変数識別子と、変数値とを含み、前記アカウント識別子と変数識別子との組み合わせが鍵値対の鍵値とされ、記憶待ち変数の位置する鍵値対を照会し、前記変数を前記鍵値対の値域に入力し書き込むことに用いられる。
【0146】
代替的に、前記コントラクト内変数記憶インタフェースと、コントラクト内変数読取インタフェースとがブロックチェーンアクセス用インタフェースとされ、前記ブロックチェーンアクセス用インタフェースは、コントラクトアカウント作成インタフェースと、コントラクトバイトコード初期化インタフェースと、コントラクトアカウント削除インタフェースとのうちの少なくとも1項のブロックチェーン書込インタフェースをさらに含む。
【0147】
代替的に、前記装置は、
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得した後に、前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント作成要求であると識別すると、前記インタフェースモジュールに転送することに用いられるコントラクトアカウント作成要求転送モジュールと、
前記インタフェースモジュールは、対応するコントラクトアカウント作成インタフェースを確定するために、前記コントラクトアカウント作成要求に応じて命令変換を行うことに用いられる、コントラクトアカウント作成インタフェース確定モジュールと、
前記インタフェースモジュールは、コントラクトアカウント作成インタフェースを呼び出し、前記アカウントスペースにコントラクトアカウントを作成し、前記コントラクトアカウントのアカウントデータを書き込み、コントラクトスペースを作成することに用いられるコントラクトアカウント作成モジュールと、
前記インタフェースモジュールは、前記コントラクトアカウント作成インタフェースを実行する過程において、前記コントラクトバイトコード初期化インタフェースを呼び出して作成待ちスマートコントラクトをコンパイルし、コントラクトバイトコードを形成して前記コントラクトスペースに書き込むことに用いられる、コントラクトバイトコード初期化インタフェース呼出モジュールと、
前記インタフェースモジュールは、前記コントラクトアカウント作成インタフェースを実行する過程において、前記コントラクト内変数記憶インタフェースを呼び出し、前記コントラクトスペースに前記スマートコントラクトのコントラクト内変数を作成し記憶することに用いられる、コントラクト内変数記憶インタフェース呼出モジュールと、をさらに備える。
【0148】
代替的に、前記装置は、
ブロックチェーンノード上で動作する仮想マシンインスタンスによって、処理待ちトランザクション要求を取得した後に、前記仮想マシンインスタンスによって、前記処理待ちトランザクション要求がコントラクトアカウントに基づいたコントラクトアカウント削除要求であると識別すると、前記処理待ちトランザクション要求を前記インタフェースモジュールに転送することに用いられる、コントラクトアカウント削除要求転送モジュールと、
前記インタフェースモジュールは、対応するコントラクトアカウント削除インタフェースを確定するために、前記コントラクトアカウント削除要求に応じて命令変換を行うことに用いられる、コントラクトアカウント削除インタフェース確定モジュールと、
前記インタフェースモジュールは、コントラクトアカウント削除インタフェースを呼び出し、削除待ちコントラクトアカウントのアカウントデータを前記アカウントスペースから削除し、前記コントラクトスペースにおける前記削除待ちコントラクトアカウントのコントラクトデータを削除することに用いられる、コントラクトアカウント削除モジュールと、をさらに備える。
【0149】
代替的に、前記装置は、前記仮想マシンインスタンスによって前記処理待ちトランザクション要求の実行を完了した後に、ブロックチェーンアクセス用インタフェースを呼び出し、前記コントラクトスペースにおけるコントラクト内変数に基づいてブロックチェーンのオンチェーンデータを更新することに用いられるオンチェーンデータ更新モジュールをさらに備える。
【0150】
本発明の実施例に提供されるイーサリアム仮想マシンに基づくトランザクション処理装置は、本発明のいずれの実施例に提供されるイーサリアム仮想マシンに基づくトランザクション処理方法を実行可能であり、イーサリアム仮想マシンに基づくトランザクション処理方法を実行するためのそれぞれの機能モジュールおよび有利な効果が具備されている。
【0151】
本発明の実施例によれば、本発明は電子機器、可読記憶媒体およびコンピュータプログラム製品をさらに提供する。
【0152】
図6では、本発明の実施例を実施するための例示的な電子機器600の概略的ブロック図を示した。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレームコンピュータおよびその他の適切なコンピュータなど、様々な形態のデジタルコンピュータを表すことを意図している。電子機器は、パーソナルデジタル処理、携帯電話、スマートフォン、ウェアラブル機器及びその他の類似的なコンピューティング機器などの様々な形態のモバイル機器を表すこともできる。本明細書に記載の構成要素、それらの接続及び関係、ならびにそれらの機能は、単に例示的なものであり、本明細書に記載及び/又は要求される本発明の実現を制限することを意図するものではない。
【0153】
図6に示すように、機器600には、コンピューティングユニット601が備えられており、当該コンピューティングユニット601は読取専用メモリ(Read-Only Memory、ROM)602に記憶されているコンピュータプログラム又は記憶ユニット608からランダムアクセスメモリ(Random Access Memory、RAM)603にアップロードされるコンピュータプログラムに基づいて、様々な適切な動作及び処理を実行することができる。RAM 603には、機器600の操作に要求される様々なプログラムおよびデータが記憶されていてもよい。コンピューティングユニット601と、ROM 602およびRAM 603はバス604を介して互いに接続される。入力/出力(I/O)インタフェース605もバス604に接続される。
【0154】
電子機器600内の複数の構成要素はI/Oインタフェース605に接続され、当該I/Oインタフェース605には、鍵値ボード、マウスなどの入力ユニット606と、様々なタイプのディスプレイ、スピーカなどの出力ユニット607と、磁気ディスク、光ディスクなどの記憶ユニット608と、ネットワークカード、モデム、無線通信送受信機などの通信ユニット609と、が備えられている。通信ユニット609は、インターネットなどのコンピュータネットワーク及び/又は様々な電気通信ネットワークを経由して機器600と別の機器との情報およびデータ交換を可能にする。
【0155】
コンピューティングユニット601は様々な処理およびコンピューティング機能を有する汎用及び/又は特定用途向け処理コンポーネントであってもよい。コンピューティングユニット601のいくつかの例には、中央処理装置(Central Processing Unit、CPU)、グラフィックスプロセッサ(Graphics Processing Unit、GPU)、様々な特定用途向けの人工知能(Artificial Intelligence、AI)コンピューティングチップ、機械学習モデルアルゴリズムを実行する様々なコンピューティングユニット、数字信号処理(Digital Signal Processing、DSP)、および任意の適切なプロセッサ、コントローラ、マイクロコントローラなどが含まれるが、これらに限定されない。
【0156】
コンピューティングユニット601は、上述した様々な方法および処理、例えば、イーサリアム仮想マシンに基づくトランザクション処理方法を実行する。例えば、いくつかの実施例において、イーサリアム仮想マシンに基づくトランザクション処理方法は、記憶ユニット608などの機械可読媒体に有形的に含まれるコンピュータソフトウェアプログラムによって実行可能である。いくつかの実施例において、コンピュータプログラムの一部又は全部は、ROM 602及び/又は通信ユニット609を介して機器600にアップロード及び/又はインストールされ得る。コンピュータプログラムは、RAM 603にアップロードされ、コンピューティングユニット601により実行されることで、上述したイーサリアム仮想マシンに基づくトランザクション処理方法の1つ又は複数のステップを実行できる。代替的に、別の実施例において、コンピューティングユニット601は、他の任意の適切な形態で(例えば、ファームウェアによって)イーサリアム仮想マシンに基づくトランザクション処理方法を実行するように構成される。
【0157】
本明細書に記載の上記システムおよび技術の様々な実施形態は、デジタル電子回路システム、集積回路システム、フィールドプログラマブルゲートアレイ(Field-Programmable Gate Array、FPGA)、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、特定用途向け標準製品(Application Specific Standard Product、ASSP)、組み込みシステムオンチップ(System-On-a-Chip、SOC)、複雑なプログラマブル・ロジック・機器(Complex Programmable Logic Device、CPLD)、コンピュータハードウェア、ファームウェア、ソフトウェア、及び/又はそれらの組み合わせによって実現可能である。これらの様々な実施形態は、1つ又は複数のコンピュータプログラムで実施され、当該1つ又は複数のコンピュータプログラムは、少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステムで実行及び/又は解釈可能であり、当該プログラマブルプロセッサは、特定用途向け又は汎用プログラマブルプロセッサであってもよく、記憶システムと、少なくとも1つの入力装置と、少なくとも1つの出力装置とからデータおよび命令を受信し、かつ、データおよび命令を当該記憶システムと、当該少なくとも1つの入力装置と、当該少なくとも1つの出力装置とに伝送することができる。
【0158】
本発明の方法を実施するためのプログラムコードは、1つ又は複数のプログラミング言語の任意の組み合わせでプログラミングできる。これらのプログラムコードは、汎用コンピュータ、特定用途向けコンピュータ又はその他のプログラマブルデータ処理装置のプロセッサ又はコントローラに提供され、プロセッサ又はコントローラによって実行されることで、フロー図及び/又はブロック図の所定の機能/操作を実行させる。プログラムコードは、全部マシンで実施されてもよく、一部がマシンで実施されてもよく、独立したパッケージソフトウェアとして一部はマシンで実行および一部はリモートマシンで実行、又は、全部リモートマシン又はサーバで実行されてもよい。
【0159】
本発明の文脈において、機械可読媒体は有形的な媒体であってもよく、当該媒体に、命令実行システム、装置又は機器に利用されるプログラム、又は、命令実行システム、装置又は機器と組み合わせて利用されるプログラムが備えられるか、又は、記憶されていてもよい。機械可読媒体は、機械可読信号媒体であってもよく、又は機械可読記憶媒体でもよい。機械可読媒体は、電子、磁気、光学、電磁気、赤外線、又は半導体システム、装置又は機器、又は上述した内容の任意の適切な組み合わせを含んでもよいが、これに限定されるものではない機械可読記憶媒体のより具体的な例には、1つ又は複数のケーブルに基づく電気接続、ポータブルコンピュータディスク、ハードディスク、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、消去可能プログラマブル読取専用メモリ(Erasable Programmable Read Only Memory、EPROM又はフラッシュメモリ)、光ファイバ、コンパクトディスクによる読み出し専用メモリ(Compact Disc Read Only Memory、CD-ROM)、光学記憶装置、磁気記憶装置、又は上述した内容の任意の適切な組み合わせが含まれる。
【0160】
ユーザとの相互作用を提供するために、本明細書に記載のシステム及び技術はコンピュータで実施されてもよく、当該コンピュータは、例えば、陰極線管(Cathode Ray Tube、CRT)又は液晶ディスプレイ(Liquid Crystal Display、LCD)モニタなどのユーザに情報を表示するための表示装置と、鍵値ボードと、例えば、マウス又はトラックボールなどのポインティング機器(Pointing device)と、を有しており、ユーザは、当該鍵値ボード及び当該ポインティング機器を介してコンピュータに入力を提供してもよい。ユーザとの相互作用を提供するために、その他のタイプの装置を使用してもよく、例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックの任意の形態の感覚フィードバックであってもよく、音声入力又は触覚入力を含む任意の形態でユーザからの入力を受信してもよい。
【0161】
本明細書に記載のシステムおよび技術は、バックエンド構成要素を含むコンピューティングシステム(例えば、データサーバとして)、又は、ミドルウェア構成要素を含むコンピューティングシステム(例えば、アプリケーションサーバ)、又は、フロントエンド構成要素を含むコンピューティングシステム(例えば、グラフィックスユーザインターフェース、又は、ネットワークブラウザを有するユーザコンピュータであり、ユーザは当該グラフィックスユーザインターフェース又は当該ネットワークブラウザを介して本明細書に記載のシステムおよび技術の実施形態と相互作用してもよい)、又は、これらのバックエンド構成要素、ミドルウェア構成要素、又は、フロントエンド構成要素の任意の組み合わせを含むコンピューティングシステムで実施されてもよい。システムの構成要素は、任意の形態又は媒体によるデジタルデータ通信(例えば、通信ネットワーク)によって相互接続されてもよい。通信ネットワークの例には、ローカルエリアネットワーク(Local Area Network、LAN)、ワイドエリアネットワーク(Wide Area Network、WAN)、ブロックチェーンネットワーク(Blockchain Network)およびインターネットが含まれる。
【0162】
コンピュータシステムは、クライアントおよびサーバを備えてもよい。クライアントとサーバとは、普通、互いに遠く離れており、通常、通信ネットワークを介して相互作用を実行する。それぞれのコンピュータで動作し、互いにクライアント‐サーバ関係を有するコンピュータプログラムによってクライアントとサーバの関係を生成する。サーバは、クラウドコンピューティングサーバ又はクラウドホストとも呼ばれるクラウドサーバであってもよく、クラウドコンピューティングサービスシステムにおける1つのホスト製品として、従来の物理ホストとVPSサービスにおける、管理の難易度が高く、業務の拡張性が弱いという欠点を解決した。
【0163】
なお、上記の様々な形態のプロセスを使用して、ステップを並べ替え、追加又は削除できる。例えば、本発明の開示に記載の各ステップは、並行的に実行してもよく、順次的に実行してもよく、異なる順序で実行してもよく、本発明に開示の技術案で要望される結果が達成できる限り、本明細書において、これらに限定されるものではないことを理解すべきである。
【0164】
なお、上記の様々な形態のプロセスは、ステップを並べ替え、追加又は削除して使用することができる。例えば、本発明に記載の各ステップは、並行的に実行されてもよく、順次的に実行されてもよく、異なる順序で実行されてもよく、本発明に開示される発明が所望の結果を達成できる限り、本明細書によって限定されないことを理解すべきである。
【0165】
本発明は、上述した実施するための具体的な形態によって保護範囲が限定されるものではない。当業者なら、設計要件およびその他の要因に従って様々な修正、組み合わせ、下位組み合わせ及び代替を実行できることを認識すべきである。本発明の精神と原則の範囲内で行われるいわゆる修正、均等置換および改良等はすべて本発明の保護範囲に含まれるものである。