私の
SuiのMoveVMはオリジナルの
ただし、プロトコルが単純すぎて構造化されていない場合は、重大な妥協が生じます。たとえば、認証などの一般的なシステム機能には、アプリケーション領域での複雑な実装が必要になり、標準インターフェースがさらに断片化され、パフォーマンスの最適化が困難になる可能性があります。
一方、Radix Engine は、非汎用的なシステム全体のロジックをコア技術目標として実行するように設計されており、次のことが可能になります。
ヴィタリックは最近この考えについて「
抽象化 (つまり、将来的/多様なユーザー ニーズ) をサポートしながらパフォーマンス/セキュリティ/ユーザビリティ (つまり、エンシュリンメント) を維持するというこのバランスは、実は非常に古いコンピュータ サイエンスの問題です。特にオペレーティング システムの設計は、過去数十年間、同様の問題を解決しようとしてきました。つまり、高速で安全で使いやすいシステムを維持しながら、さまざまな抽象アプリケーションをサポートするにはどうすればよいかということです。
この記事では、Radix Engine がオペレーティング システム モデルを使用して、プロトコルの複雑さの負荷や Vitalik が懸念する柔軟性の低下を招くことなく、あらゆる種類の「組み込み」が可能なフレームワークを作成する方法について説明します。
まず、現在の業界標準である Ethereum 仮想マシン (EVM) について見てみましょう。
EVM は、次のオペコードを使用して仮想マシン (VM) としてモデル化できるほど基本的なものです。
EVM バイトコードにコンパイルされたスマート コントラクトは、そのような VM 上で実行できます。
このモデルでは、いかなる形式の「エンシュリンメント」もEVMまたはVMハードウェアの変更を必要とします。たとえば、BLSシグネチャサポートをエンシュリンメントするには、新しいプリコンパイルを追加する必要があります。
このモデルの一般的な問題は、抽象化/エンシュリンメントの二分法がソフトウェア/ハードウェアの二分法と結びつきすぎていることです。つまり、ロジックをプロトコルにエンシュリンメントすると、VM に埋め込まれることになります。「エンシュリンメントされたソフトウェア」やシステムの一部であるソフトウェアを表現する方法はありません。
オペレーティング システムは、「システム ソフトウェア」という概念でこの二分法を解決しました。詳しく見てみましょう。
オペレーティング システムの主な目的の 1 つは、ソフトウェアとハードウェアの二分法、より具体的には、アプリケーションとハードウェアの二分法を管理することです。オペレーティング システムの中核部分はカーネルです。カーネルは、ユーザー空間のアプリケーションとハードウェアへのアクセスを管理するソフトウェアです。カーネル モジュールとドライバーは、サポートされるハードウェアのセットを拡張したり、カーネルの機能を拡張したりする追加のシステム ソフトウェアです。
\「神聖化」の観点から見ると、カーネルとそのモジュールはシステムの神聖化された部分ですが、ソフトウェアの柔軟性を備えています。カーネル モジュール、仮想マシン (VM)、およびユーザー空間のシステム プロセスは、カーネル自体から抽象化されているため、さらに「柔軟」です。
このモデルでは、アプリケーションとハードウェア間の間接層により、ソフトウェア/ハードウェアの二分法を抽象化/エンスリンメントの二分法から切り離すことができます。「システム ソフトウェア」により、ハードウェアに過度の負担をかけずにエンスリンメントが可能になります。
このオペレーティング システム モデルを参考にして、Radix Engine には、それぞれ特定の責任と抽象化を持つ複数のレイヤーが含まれており、システムのモジュール性とプラグイン可能性を実現しています。
このようなモジュール設計により、システム ロジックを強制できると同時に、次のことも可能になります。
それでは、各レイヤーを詳しく見ていき、それぞれの役割を確認してみましょう。
アプリケーション層は、高レベルのロジックを定義する役割を担います。このロジックを記述するバイトコードは、他の静的情報とともに、パッケージと呼ばれる実行可能形式でまとめられます。パッケージは台帳上に保存され、実行できるようになります。
DeFi開発用に構築したRustベースの言語であるScryptoで書かれたアプリケーションは、このレイヤーに存在します。Scryptoプログラムは、プログラムがシステム/カーネルサービスにアクセスできるようにする一連の関数エクスポートにアクセスできるWASMプログラムにコンパイルされます。
次の層に移ると、VM 層はアプリケーション層にコンピューティング環境を提供する役割を担います。これには、チューリング完全な VM とシステム層にアクセスするためのインターフェイスが含まれます。
Radix Engine は現在、Scrypto アプリケーションを実行するために使用される Scrypto WASM VM と、ホストの環境に合わせてコンパイルされたネイティブ パッケージを実行するネイティブ VM の 2 つの VM をサポートしています。
Scrypto WASM VM を具体的に見てみると、次のようになります。
これは本質的には EVM モデルと同じように見えますが、2 つの重要な違いがあります。
ストレージへの直接アクセスの削除。各スマートコントラクトが所有するストレージにのみアクセスできるのではなく、状態の読み取り/書き込みはシステムコールを通じて行われます。この間接層により、アプリケーション間での状態共有、状態の仮想化など、システムに多くの興味深いものを実装できます。この間接層は、
システムコールの追加。システムコールは、アプリケーション層がシステム層のサービスにアクセスするためのメカニズムであり、他のアプリケーションを呼び出したり、オブジェクトにデータを書き込んだりするために使用されます。これらのシステムコールは、実際のCPUのソフトウェア割り込み命令に似ています(例:
システム層は、システムの機能を拡張できるシステムモジュールまたはプラグイン可能なソフトウェアのセットを管理する役割を担っています。これらはLinuxの
すべてのシステム コールで、システム レイヤーがカーネル レイヤーに制御を渡す前に、各システム モジュールが呼び出されます。呼び出されると、各システム モジュールは特定の状態 (たとえば、更新料金の支払など) を更新したり、パニックを起こしてトランザクションを終了したりします (たとえば、型チェッカーが失敗した場合)。
このパターンにより、システムはアプリケーション層とカーネル層の両方から分離しながら、認証、ロイヤリティ、型チェックなどの機能を実装できます。
カーネル層は、Radix Engine の 2 つのコア機能、つまりストレージ アクセスとアプリケーション間の通信を担当します。これは、従来のオペレーティング システムがディスクおよびネットワーク アクセスを担当する役割と多少似ています。
Radix Engine の場合、これには次の低レベルの管理が含まれます。
これらのレイヤーは、DLT プロトコルのエンシュリンメントとどのように関係しているのでしょうか? オペレーティング システムのカーネル レイヤーと同様に、Radix Engine のこれらの中間レイヤーは、抽象化/エンシュリンメントの二分法をソフトウェア/ハードウェアの二分法から切り離し、「エンシュリンメントされたソフトウェア」という概念を作成するために必要な間接性を提供します。
エンシャライズされたソフトウェアは、システム全体のロジックを適用する機能を維持しながら、ソフトウェアの柔軟性とセキュリティ特性を備えています。
Radix ネットワーク上で現在実行されているいくつかのエンシュリンメントの例を確認し、それらがどのように実装されているかを見てみましょう。
Radix DeFi/Web3 プラットフォームの中心的な差別化要因は、リソース (つまり、資産) はビジネス ロジックとは別に理解されるべき基本的なプリミティブであるという考え方です。この概念を定着させることで、すべての dApp、ウォレット、ツールが資産のインターフェイスと動作がどのようなものであるかを共通に理解できるようになり、構成がはるかに容易になります。
リソースはシステムの最も根深い部分の 1 つですが、その組み込みを実装するには、次の 2 つのモジュール ソフトウェアのみが必要です。
Buckets、Vaults、Proofsなどのリソースオブジェクトのロジックを処理するネイティブパッケージ
これらのオブジェクトのライフタイム不変条件(リソースの移動可能性や燃焼可能性など)を強制するシステムモジュール
Radix Engine がシステム/カーネルから抽象化されながら、標準化された移動可能なリソースの深い概念を表現できたという事実は、モジュール式システム ソフトウェア フレームワークの威力を示しています。
Radix Engine は、このロジックをビジネス ロジックから分離し、これらをシステム機能として実装することで、承認とロイヤリティを標準化します。これにより、ユーザーと開発者は、台帳上の任意の機能にアクセスするための要件を理解するための組み込みの共通の方法を持つことができます。
ビジネス ロジックをシステム ロジックから分離するモジュール性により、通常の認証チェックなしでトランザクションをプレビューする機能など、便利な開発/デバッグ オプションも可能になります (1,000 万 USDC をどこかに送信した結果をシミュレートしたいですか? 認証を無効にすると、プレビュー トランザクションで鋳造を実行できます)。
認証とロイヤリティを制定するには、次の 4 つのモジュール ソフトウェアが必要です。
アプリケーション層が任意のオブジェクトの認証/ロイヤリティにアクセスできるようにする認証およびロイヤリティのネイティブ パッケージ (たとえば、メソッドにアクセスするための認証ルールを取得したり、ロイヤリティを請求したりする)。
Auth および Royalties システム モジュールは、オブジェクト メソッド呼び出しの前に呼び出され、呼び出し元が呼び出しを行ってロイヤルティを徴収するのに十分な権限を持っているかどうかを確認します。
あらゆるシステムを使いやすくするには、ユーザーとシステム間の適切なインターフェースが最も重要です。使いやすくするには、インターフェースは使いやすさとパワー/柔軟性の間で適切なバランスを見つける必要があります。
オペレーティング システムの世界で最も一般的なインターフェイスはターミナルです。ターミナルは、ユーザーにさまざまなシステム コールを呼び出して作成するためのコマンド ライン ツールを提供するユーザー空間プロセスです。
DLT の世界では、このインターフェースはトランザクションです。トランザクションの業界標準は、単一の低レベルの汎用呼び出し呼び出しを使用することです。残念ながら、これは単純すぎるため、システムと対話するときに実際に何をしているのか理解するのが難しくなります。
一方、Radix Engine は従来の OS パターンを使用し、アプリケーション言語 (bash などのターミナル スクリプト言語に類似) を組み込み、単一のトランザクションでシステム コールを呼び出し、構成します。
トランザクションのエントリ ポイントはアプリケーション層で動作するため、言語インタープリターはトランザクション プロセッサ ネイティブ パッケージを追加することによって実装されます。
BLS 署名は、しきい値署名の可能性を可能にする重要な暗号プリミティブです。残念ながら、WASM でこのようなロジックを実行すると、最大コスト単位がすぐに消費されます。最近の「Anemone」アップデートでは、BLS をネイティブに実行することで実装し、WASM と比較してパフォーマンスが 500 倍向上しました。
BLS ロジックはステートレスであるため、Scrypto WASM VM への追加のプリコンパイルとして簡単に追加できます。
何を制定し、何を制定しないかは、あらゆる DLT プロトコルにとって重要です。残念ながら、業界の既存の VM モデルでは、すべての制定の決定が重大な決定となります。
Radix Engine は、オペレーティング システム モデルを参考にして、「ソフトウェア」と「ハードウェア」の間に間接レイヤーを追加することでこの問題を解決します。これにより、Radix Engine は「エンシャリンド ソフトウェア」の概念を表現できるようになり、プロトコルは、リスクの高い妥協の決定をすることなく、新しいエンシャリンド システムを簡単に追加、変更、表現できるようになります。
もともと、オペレーティング システムは、複数のアプリケーションの共有リソースを管理するために設計された小さなソフトウェアでした。より優れた、より高速で、より安全なプラットフォームを求めるユーザーの要求が高まるにつれて、オペレーティング システムはますます大きなソフトウェア スイートで、より多くの責任を負うようになりました。
DeFi も例外ではありません。より高速で、より安全で、より使いやすい DeFi プラットフォームの需要が高まるにつれて、導入も増えるでしょう。Radix Engine はこれを念頭に置いて設計されており、将来に向けて導入を拡大するために必要なスケーラブルで安全なフレームワークを提供します。