【ガイド】
前回の「スマートコントラクト実行エンジンの今と昔」と「身近な新友 - オンチェーンJVM」では、スマートコントラクトの起源と、Javaスマートコントラクトを実行できる自社開発の実行エンジンHVMについて紹介しました。 HVM のパフォーマンスは EVM に比べて大幅に向上していますが、バイトコードの数が多いため、解釈実行シナリオでの実行パフォーマンスは非常に限られています。一方で、契約の抜け穴(ビジネスロジックの抜け穴に関わらず)によるセキュリティ問題は毎年発生し、深刻な経済的損失を引き起こしていますが、ユーザーが個人的な要素を脇に置いて、可能な限り安全な契約を作成できる解決策はあるのでしょうか?
これら 2 つの緊急の問題を解決するために、wasm 仮想マシン FVM と Rust コントラクト作成フレームワークを導入しました。次の記事では、スマート コントラクトの分野におけるこれら 2 つの部分の応用について詳しく紹介します。
【安全性】
人々"人々"、量子科学の色彩をもたらすことが多いため、契約の正確性を保証するために別の一連のメカニズムを用意する方が良いでしょう。
効率的で信頼性の高い汎用言語である Rust は、間違いなく利用可能な最良のソリューションです。
Rust 言語の信頼性は、豊富な型システムと所有権モデル、そしてコンパイル時に古典的なエラーを捕捉できる強力なコンパイラに依存しています。これにより、開発者は、コントラクトを作成するプロセスで記述するコードの各行の正確性について考え、コンパイラによってチェックされるコントラクト コードが安全であることをコンパイラを通じて確認する必要が生じ、これにより、コントラクト コードのセキュリティが大幅に向上します。契約と信頼性。
さらに、当社が独自に開発した契約フレームワークはランタイム テスト フレームワークを提供し、開発者が契約の運用をシミュレートし、展開することなくオフチェーンで契約の問題を発見できるようにします。これにより、チェーン上の契約に保険の層が追加されることは間違いありません。
さらに、私たちのコントラクトフレームワークはRustのマクロ拡張テクノロジーを使用して、操作をマクロアノテーションに配置します。これにより、開発者は自分のコントラクトのビジネスロジックに注意を払いながら利用できるようになり、コントラクトロジックの安全性がある程度確保され、他の要素に干渉されることなく、ある部分だけに注目すれば済むため、開発者は安心して利用できるようになります。より精進し、ロジックの細部を磨き上げる。
【効果】
EVM は本質的にはスクリプト プログラムおよびスタック ベースの仮想マシンであり、コンパイラによって命令に変換されてから実行される、つまり解釈されて実行される必要があるため、EVM の実行効率が非常に低くなります。対照的に、wasm はコンパイルと実行の方法を使用し、仮想マシン/バイトコード テクノロジを採用し、コンパクトなバイナリ形式を定義するため、スマート コントラクトの実行速度がより高速になります。そこで契約全体の業務効率を大幅に向上させるためにwasmを導入しました。
WASM (WebAssembly) は文字通り Web アセンブリを意味し、Web ブラウザー用にカスタマイズされたアセンブリ言語です。ここでカスタマイズと言っていますが、精神性の発展に伴い、それはWebだけに適用できるものではなく、その「コア仕様」はプラットフォームとは何の関係もありません。アセンブリと呼ばれているので、明らかにアセンブリ言語の特徴があります。
1) 低レベルで機械語に近く、作業効率が向上します。
2) 適用範囲を拡張するために他の高級言語 (C/C++/Rust/Go など) コンパイラーによって生成されたオブジェクト コードとして適しています。
また、モジュールとは、wasmプログラムのコンパイル、送信、ロードの単位です。 wasm は 2 つのモジュール形式を定義します。
バイナリ形式: wasm モジュールの主要なエンコード形式であり、ファイルの接尾辞は .wasm です。非常にコンパクトなフォーマット設計により、バイナリ サイズを小さくすることができ、より高速な転送と実行効率が得られます。
テキスト形式: ファイルの接尾辞は .wat ですが、ここでは詳しく説明しません。
モジュールの分割により、wasm の組織構造がより明確になり、分析がより便利になり、分析の効率が大幅に向上します。
【FVMの詳細説明】
そのため、Rust を使用してコントラクトを作成し、コントラクトを wasm バイトコードにコンパイルすることに加えて、コントラクトを実際に実行するには、やはり wasm 用のオペレーティング環境を提供する必要があり、これが FVM の機能です。
意味的に言えば、wasm モジュールはバイナリ形式から最終実行までの 3 つの段階 (デコード、検証、実行) に分割できます。デコード フェーズではバイナリ モジュールをメモリ形式にデコードし、検証フェーズではモジュールを静的に分析して、モジュールの構造が仕様要件を満たしていること、および関数のバイトコードに不正な動作がないことを確認します。実行フェーズは 2 つに分割できます。部分: インスタンス化と関数呼び出し。
(1) FVMの構成
明らかに、FVM の完全な機能には、上記のデコード、検証、インスタンス化、および関数呼び出しが含まれている必要があります。全体のプロセスに従ってFVMを実装しましたが、実際の動作では、実行プロセスはメモリの読み取り、書き込み、割り当てに多くのパフォーマンスを消費することがわかりました。 FVM の実行パフォーマンスをさらに向上させるために、コンパイル モジュールの層を追加しました。これは、wasm スタック メモリをレジスタベースのメモリに変換し、メモリをマークして再利用し、メモリの頻繁な割り当てを回避し、全体的な実行効率を大幅に向上させます。 。
文章
文章
(3) 全体の流れ
全体の紹介を終えると、誰もが Rust スマート コントラクトの使用についての一般的な印象を持ったと思います。プロセス全体の概要は次のとおりです。
ステップ1: ユーザーはRustコントラクトフレームワークを通じてスマートコントラクトを作成します(テストが必要)
ステップ 2: コントラクトを wasm ファイルにコンパイルします
ステップ 3: wasm コントラクト ファイルを FVM にデプロイする
上記の手順を完了すると、契約が正常に実行されます❤。
文章
現在の契約は比較的単純なビジネスのみを対象としていますが、当社のプランでは、既存の契約シナリオだけでなく、複雑なビジネスや契約締結スピードの要求が高いシナリオにもFVMを適用することが可能です。同時に、非ブロックチェーン業界の技術者には、使い慣れたプログラミング言語を使用して契約書を作成するという、チェーンに行くための「学習コストゼロ」の方法が与えられます。ブロックチェーン技術の適用シナリオと影響範囲は、より多くのブロックチェーン技術の上陸ソリューションを探索するために拡大されました。
現時点では、FVM のパフォーマンスは十分に期待に応えていますが、私たちは現状と停滞に満足するつもりはありません。フォローアップ計画では、次のようないくつかの最適化ソリューションを引き続き検討していきます。
1) 仮想マシンのキャッシュの最適化。
2) AOT (Ahead-of-Time)、つまりプリコンパイルの方法を導入し、既存のバイトコードの解釈と実行を置き換え、wasm モジュールを go コードに直接コンパイルし、go のプラグイン機構を使用して直接ロードします走って、究極のパフォーマンス体験を手に入れましょう。
テクノロジーは常に新しいものを導入しており、最適化作業は今後も継続されますが、「常に進化し続ける」ことが私たちの目標です。
【まとめ】
著者について
著者について
リー・カイ
参考文献
参考文献
[1] Rustプログラミング言語
[2]「WebAssemblyの原理とコア技術」
