Marlowe(マーロウ)のPlutus(プルータス)バリデータの効率性が向上し、カルダノブロックチェーン上のスマートコントラクト取引の実行コストが大幅に削減されました。これにより、Marloweの取引はより低い手数料で、より複雑なロジックを含むことが可能になりました。
また、新しいPlutusTx.AsDataハスケルモジュールを適切に使用することで、Marlowe契約のコストをさらに削減できます。これらの改訂により、Marloweでより多くのことをより低いコストで実行することが可能になりました。
これをMarloweブログが記事で伝えています。主な内容は以下の通りです。
- MarloweのPlutusバリデータの改善: カルダノブロックチェーン上でのマーロウスマートコントラクト取引の実行コストが大幅に削減されました。これにより、Marloweの取引はより低い手数料で、より複雑なロジックを含めることが可能になります。新しい
PlutusTx.AsData
ハスケルモジュールの使用により、Marlowe契約のコストをさらに削減できるとされています。 - 実行コスト削減の影響: Marloweの取引は現在、以前より複雑なロジックを含むことができます。新しいバージョンのPlutusTxコンパイラは、Marlowe契約の実行コストを20%以上削減します。
PlutusTx.AsData
モジュールの使用により、典型的なMarlowe契約のコストをさらに25%削減することができます。 - Marloweのセマンティクスバリデータの改訂: これらの改訂により、新たな外部監査は必要なく、専門の開発者はバリデータをカスタマイズして、冗長な前提条件と事後条件チェックの一部を無効化することができます。これにより、Marloweでより多くのことをより低いコストで実行することが可能になります。
- 実行コストの削減の必要性: Marloweのバリデータは、カルダノのスマートコントラクトバリデータと同様に、Plutus取引で発生できる計算量に制限を受けています。効率的なバリデータにより、Marlowe取引でより多くの計算を行う余地が生まれ、より複雑な契約を可能にします。
- Marloweの新しい効率: Marloweのセマンティクスバリデータの最新の改訂により、その効率が向上しました。PlutusTxバージョン1.15.0.0コンパイラを使用することで、すべてのMarlowe契約に対して即座に改善が得られます。
- 全体的な影響: 最新のMarloweバリデータの改訂により、最悪の場合のパフォーマンスが15%、典型的なパフォーマンスが50%改善し、セキュリティを犠牲にすることなく実現されています。
これはMarloweのユーザー、契約設計者、DApp開発者にとって重要な意味を持っています。
以下はMarloweブログ記事「Lower Marlowe execution costs」を翻訳したものです。
Lower Marlowe execution costs:Marloweの取引実行コストが大幅に削減
by Brian Bush 2024年1月26日
エグゼクティブサマリー
MarloweのPlutusバリデータの効率性の向上により、カルダノブロックチェーン上のスマートコントラクト取引の実行コストが大幅に削減されました。これには、Marloweのユーザー、契約設計者、およびDApp開発者にとって二つの重要な意味があります:
- Marloweの取引は現在、より低い手数料で、以前より複雑なロジックを含めることができます。新しいバージョンのPlutusTxコンパイラは、マーロウ契約の実行コストを20%以上削減します。
- さらに、Marloweのセマンティクスバリデータのソースコードで新しい
PlutusTx.AsData
ハスケルモジュールを適切に使用することで、典型的なMarlowe契約のコストをさらに25%削減します。バリデータがマルチアセット値を比較する方法を特化することで、ネイティブトークンを含む契約のコストがさらに削減されます。
これらのMarloweのセマンティクスバリデータへの改訂は、新たな外部監査を引き起こしません。これらのコスト削減最適化を超えて、専門の開発者はバリデータをオプションでカスタマイズして、冗長な前提条件と事後条件チェックの一部を無効化することができます。全体として、これらのアップデートにより、より低いコストでより多くのことをMarloweで実行することが可能になります。
実行コストの削減の必要性
Marloweのバリデータは、他のすべてのカルダノのスマートコントラクトバリデータと同様に、単一のPlutus取引で発生できる計算量に制限を設ける台帳ルールの対象となっています。現在のルールでは、取引は1400万Plutusメモリーユニットと100億プルータスステップ(CPU)ユニットに制限されています。Marlowe言語は、Marlowe契約またはマーロウ取引内の論理的、算術的、および簿記計算の数に制限を設けていないため、契約がカルダノ取引で許可されるよりも多くの計算を試みる状況が常に存在します。Marlowe安全性に関する当社のブログ投稿では、この例が提供され、Marloweのベストプラクティスガイドでは、これらの実行コスト制限を下回る契約のデザインパターンを提案しています。したがって、Marloweのバリデータをより効率的にすることで、契約が必要とする場合、すべてのMarlowe取引でより多くの計算を行う余地ができます。この追加の「計算予算」により、より複雑な契約が以下のことを可能にします:
- Marloweの内部状態でより多くのアカウントを管理する
- 一度により多くの当事者に支払う
- 単一の取引でより多くのアクションを実行する
- より精巧な算術と論理の計算を行う
- 契約の有効期間中により多くの選択肢を行ったり、より多くの変数を割り当てたりする。
Marloweの新しい効率
Marloweのセマンティクスバリデータの最新の改訂には、その効率を改善するいくつかのアップデートが含まれています。これらの変更の一部は、すべてのMarlowe取引のコストを削減し、他の一部はMarloweバリデータの「ホットスポット」を対象としていて、それは以前に特定の状況で特に高価でした。
PlutusTxバージョン1.15.0.0コンパイラを使用してMarloweバリデータをコンパイルすると、すべてのMarlowe契約に対して即座に改善が得られます。そのPlutusTxリリースは、ハスケル(マーロウのような)で書かれたPlutusコードを効率的なUntyped Plutus Core(UPLC)に最適化するためのAlonzoとBabbage時代からの教訓を取り入れています。
以下に示されているヒストグラムでは、ランダムに選ばれた代表的な100件のMarlowe取引の例について、最小メモリコストの削減は23%ですが、一部の場合では30%以上の削減が見られます。ステップコストの削減も同様です。
最新のPlutusライブラリには、新しいPlutusTx.AsDataモジュールも含まれています。これには、Template Haskell (TH) コードが含まれており、これによりPlutus Core内のDataオブジェクトとして代数データ型 (ADTs) を作成します。これは、積み上げられた製品の項に対して行われます。PlutusのAsData機能は進化しており、最終的にはMapやScriptContextのようなPlutusTxタイプも含むようになるかもしれません。これにより、さらなるパフォーマンス向上がもたらされる可能性があります。MarloweのキーADTsの一つであるCaseをasDataTH関数でラップすることにより、Marlowe契約やそれに対するアクションを表す台帳の生のバイトをMarlowe言語の意味的に意味のあるデータ構造に変換する逆シリアライゼーションに劇的な改善が見られます。下の2つの「フレームグラフ」は、Marloweトランザクションの例を使用してPlutusのプロファイリングツールで取得したもので、左側のグラフの左側にある逆シリアライゼーションコードの「山」(1a)が、右側のグラフで小さな「丘」(1b)になる様子を示しています(asDataが使用されている場合)。グラフ上の他の詳細は、UPLC内の関数呼び出しの順序とコストを示しています。asDataの利点は、PlutusのMarlowe実装と実行される特定のMarlowe契約の両方に依存します。プロファイルの開始時には山を小さな丘に縮小しましたが、プロファイルの後半部分で追加のオーバーヘッドを作成しました。一般的に、asDataは、計算の負担を値が使用される場所に近づけ、評価を厳格から遅延へと変えるという意味で、大まかに言えば計算を行います。
より大きな契約や可能なアクションが多い契約は、この最適化からより多くの利益を得る傾向があり、一部の取引はそれほど利益を得られません。一般的に、コスト削減は10%から50%の間です。
カルダノのネイティブアセットをいくつか含むMarloweの取引の有効性を確認するためには、スマートコントラクトのセキュリティと正確な動作を確保するために、ネイティブアセットの識別子と量の多くの比較が必要となります。これらの比較は累積すると、上記のフレームグラフの「丘」(2aと2b)に対応し、非常に高価になることがあります。多くのマーロウ契約は一度に単一のアセットを支払うため、この最適化は単一アセットのケースで一部の広範なチェックをよりシンプルなチェックに置き換えます。マーロウのセマンティクスバリデータの直接的な改訂は、それが適用される状況でより安価な比較を行うことで、この特殊なケースを利用します。この結果、ベンチマークケースでは平均的なコスト削減が約4%ですが、削減がそれの2倍であるベンチマークもかなりあります。
上記の計算効率もまた、Marloweバリデータのサイズを約12キロバイトから11キロバイトに削減するため、マーロウバリデータのオンチェーンバージョンを保持する参照UTXOに格納されるadaの量を削減します。
全体的な影響
最新のMarloweバリデータの改訂を組み合わせると、最悪の場合のパフォーマンスを15%、典型的なパフォーマンスを50%改善し、セキュリティを犠牲にすることなく実現します。以下のプロットは(対数スケールで)、100のベンチマークMarloweトランザクションのプロトコル制限に対する改訂前(水平軸)と改訂後(垂直軸)のメモリコストを示しています。垂直線と水平線の1.0はプロトコル制限を示しています。これらの線の上または右側の取引は、メインネットワークで実行するにはコストが高すぎます。すべてのポイントが対角線の下にあるため、すべての取引は改訂されたバリデータでより安価です。対角線近くのポイントは、比較的小さな改善を示す取引を表し、対角線の右側遠くのポイントは、劇的な改善を示す取引を表します。赤い垂直線の右側のポイントは、以前は不可能だった取引を表すが、現在では台帳制限内で可能です。新しいMarloweバリデータは、Marloweランタイムバージョン1.0.0で利用可能です。
Website
Twitter
GitHub
Discord
Cardano Forum
Cardano Stack Exchange