ブログ > 2022 > March > Marlowe Playgroundにディープダイブ

Marlowe Playgroundにディープダイブ

Marloweコントラクトで自分のテンプレートを作成する方法と、カスタムメタデータを使用するための秘訣を公開

2022年 3月 4日 Pablo Lamela 11 分で読めます

Marlowe Playgroundにディープダイブ

Marloweは、Haskellに組み込まれたドメイン固有言語(DSL)で、ブロックチェーン用に、誰でもコーディングが可能な金融コントラクトを提供します。これは分散型金融(DeFi)用のプラットフォームであり、P2Pの直接的な融資、差金決済取引(CFD)、その他の類似商品をサポートします。Marloweによって、ユーザーは、ソフトウェア開発やブロックチェーン、スマートコントラクトにつきものの困難な学習をせずとも、自分の専門分野の知識を活かして、コントラクトを便利に作成、管理できます。

Marlowe Playgroundは、金融コントラクトを作成する練習ができるサンドボックス環境です。Playgroundは、Marloweを始め、JavaScriptHaskellBlocklyなど、希望に応じてさまざまな言語で直接作業するオプションを提供します。Marlowe Playgroundには最近、テンプレートを作成、編集し、メタデータをカスタマイズするための新機能と、コントラクト自体のJSONダウンロードオプションが新たに追加されました。本稿では、これらの新機能を紹介します。

コントラクトからテンプレートへ

Marlowe Runの導入とともに、Marlowe Playgroundを拡張して、いわゆるテンプレートをサポートできるようにしました。テンプレートは、Marloweの拡張版(Marlowe Playgroundで利用可能なバージョン、Extended Marloweを指す)を使って実装されています。新しいテンプレートによって、ユーザーはさまざまなシナリオやコンテクストで、コントラクトを簡単に再利用できるようになります。

Extended Marloweは、通常のMarlowe(Core Marlowe)よりもはるかにフレキシブルです。コントラクトは非常に具体的であり、元々はスロット番号を通じて、最近では標準化されたタイムスタンプ(POSIXタイム)を使用して、絶対値でタイムアウトを指定します。

さらに、MarloweのValues(値)は、Inputsとして渡されるものを除いて、通常Marloweでハードコーディングされます。たとえば、₳100のローンの実装や、When構文のChoice(選択)によってユーザーに融資する金額を尋ねるローンの実装はできますが、いつでも、任意のパラメーターで展開できる再利用可能なMarloweコントラクトをもつことはできませんでした。Extended Marloweは、コントラクトパラメーターを含むオプションを追加することにより、こうした制限に対処しています。現在、Extended Marloweは通常のMarloweと実質的に同じですが、テンプレートパラメーターを表す2つの追加的なコンストラクターを備えています。

  • SlotParamWhen構文のタイムアウトの代わりに作成できる
  • ConstantParamValue構文の一種

どちらのコンストラクターも、パラメーターの識別子として機能する文字列を唯一のパラメーターとして受け取ります。 以下に例を示します。

  • SlotParam "Payment deadline
  • ConstantParam "Price"

同じ識別子を持つ同タイプの2つのパラメーター(SlotParamまたはConstantParam)は、異なる場所に表示されても同じパラメーターとみなされます。

コントラクトにパラメーターが含まれている場合(つまり、テンプレートである場合)、ユーザーは、コントラクトのシミュレーションを開始する前、またはMarlowe Runでコントラクトをデプロイする前に、これらのパラメーターの値を入力するように求められます。

図1:シミュレーションダイアログ

図に示されたテンプレートパラメーターの入力フィールドは、単なる整数入力フィールドではありません。むしろ小数の数値を想定しており、さらに通貨記号付きラベルもあります。これは、数値がADAの量を表すことを想定していることを示しています。このルールは、When構文のChoiceで要求される値にも当てはまります。また、ChoiceがADAの量を表す必要はありません。以下のように、割合などなんでも表現できます。

図2:アクションダイアログ

各用語の横にある紫色の疑問符をクリックすると、各パラメーターのヒントを表示できます。ヒントのテキストはコントラクトテンプレート固有のものであり、太字斜体下線付きなど、書式設定されたテキストが含まれます。

図3:パラメーターのヒント

ユーザー定義のコントラクトは、メタデータを使用してこれらすべてのディテールをカスタマイズできます。その方法を紹介します。

メタデータのカスタマイズ

Marlowe Playgroundの各エディターの下部にはMetadataタブがあります。ここからユーザーは、次の例のように必要に応じてメタデータをカスタマイズできます。

図4:メタデータタブ

メタデータには、次のようにすべてのコントラクトに含まれることが想定される基本的なものがいくつかあります。

  • Contract type — コントラクトのタイプです。このカテゴリーはコントラクトを分類して、将来見つけやすくします。現在使用できるカテゴリーは少数ですが、今後追加される予定です。コントラクトに合うカテゴリーがない場合には、「Other(その他)」を選びます。
  • Contract name — コントラクトを識別するための短い名前です。
  • Contract short description — リストに表示される概要です。
  • Contract long description — ユーザーがすでにテンプレートを選択し、詳細が知りたい場合(たとえば、Marlowe Runでコントラクトを作成しているときなど)に概要の後に表示される、より詳しい説明です。

説明のテキストは、Markdownを含む書式設定機能を一部サポートしています。たとえば、テキストの前後にアスタリスクを2つずつ付けると、前セクションで見たように、コントラクトのシミュレーション時にテキストは太字で表示されます。この方法で、プレーンなテキスト

Amount of **money** to pay

Amount of money to pay とレンダリングされます。

この機能を使って、たとえばRole(役割)名やChoice名など、コントラクトの文脈で特別な意味をもつキーワードを強調することを推奨します。

Metadataタブは、コントラクトで定義されたRoleやChoice、Slot、Valueパラメーターのヒント、そして、ChoiceやValueパラメーターの書式設定をサポートしています。

コントラクトに追加された新しいRoleやChoice、Slot、Valueパラメーターは、Metadataタブに赤く表示されます。HaskellやJavaScriptエディターでは、場合によって事前にコードをコンパイルしておく必要があります。

図5:メタデータタブ - メタデータエントリーの追加

赤の+ボタンを押すと、対象アイテムの新しいメタデータエントリーが作成されます。同様に、Role、Choice、Slot、あるいはValueパラメーターがコントラクトで使用されなくなると、既存のメタデータは削除のために赤く表示されます。メタデータエントリーをコントラクトから削除するには、ユーザーが-ボタンを押す必要があります。

図6:メタデータタブ - メタデータエントリーの削除

ChoiceとValueパラメーターの場合は、オプションとして、説明に加えエンドユーザーが提供する数値の書式を指定することができます。これは、ドロップダウンメニューのFixed point amountから選択します。これにより、2つのフィールドが提供されます。

  • Valueの小数点以下の数(左下)- Marloweの数値は内部では常に整数ですが、便宜上、ユーザーは固定小数点として入力できます。たとえば、MarloweでADAはLovelace(100万分の1ADA)で表記されますが、一般にエンドユーザーはADAで作業することを好みます(読みやすいため)。開発者は、小数点以下6桁にすることでこれをサポートできます。その結果、内部的にコントラクトはLovelaceで機能していても、エンドユーザーには6桁に小数点が表示されます。
  • Valueの通貨記号(右下)- 開発者はValueの入力ボックスの横に通貨記号を表示して、エンドユーザーに金額の単位を示唆することができます。たとえば、ADAの場合は記号「₳」を入れます。

図7:数値の書式設定

最後に、パラメーターの順序は重要です。たとえば、エンドユーザーが選択するSlotパラメーターが複数あるとします。パラメーターは時系列で表示するのが論理的です。

メタデータをアレンジするには、希望する順序にエントリーをドラッグします。

図8:メタデータの順序

メタデータ内のパラメーターの順序は、シミュレーションまたはコントラクト実行の開始時に表示されるフォームの生成に使用されます。

結論

Marloweの新テンプレートとメタデータ拡張によって、コントラクト開発者はヒントやパラメーターを提供し、エンドユーザーがコントラクトのフル実装や詳細を理解しなくても、複数の環境で同じコントラクトを再利用することを容易にすることができます。

これは、Marloweチームが取り組み続けている改良のほんの一部です。今後もさらなる改良の詳細をお届けすることを楽しみにしています。

今後のMarloweリリースと新機能の詳細は、ソーシャルメディアチャネルや、新しいMarlowe Discordチャネルをご覧ください。また、まもなく開始される第1期Marloweパイオニアプログラムの詳細もお楽しみに。