IOGブログ, ニュース, ...

IOGブログ:Marlowe Playgroundをより深く知るために

以下はIOGブログに掲載された記事「Diving deeper into the Marlowe Playground」を翻訳したものです。

Marlowe Playgroundをより深く知るために

Marloweのコントラクトから独自のテンプレートを作成し、カスタムメタデータを使用してユーザーにヒントを提供する方法について説明します。

by Pablo Lamela 2022年3月4日

MarloweはHaskellに組み込まれたDSL(domain-specific language)で、誰もがコーディングできるブロックチェーン向けの金融契約を提供します。直接融資、ピアツーピア融資、差金決済取引(CFD)、その他類似の商品をサポートする分散型金融(DeFi)のためのプラットフォームです。Marloweは、ソフトウェア開発、ブロックチェーン、スマートコントラクトに関連する急な学習曲線なしで、ユーザーが自分のドメイン専門知識を適用して、便利に契約を書き、管理することを可能にします。

Marlowe Playgroundは、金融コントラクトを書く練習ができるサンドボックス環境です。このプレイグラウンドでは、Marlowe自体、JavaScriptHaskellBlocklyなど、さまざまな言語で直接作業することができるので、お好みに合わせてお選びください。最近、Marlowe Playgroundにテンプレートの構築・編集やメタデータのカスタマイズのための新機能が追加され、また契約書自体のJSONダウンロードオプションも追加されました。この記事では、これらの新機能を詳しく見ていきます。

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

Marlowe Runの導入に伴い、Marlowe Playgroundを拡張し、テンプレートと呼ばれるものをサポートしました。このテンプレートはMarloweの拡張版(Extended Marlowe、Marlowe Playgroundで利用可能なバージョン)を使って実装されています。この新しいテンプレートにより、ユーザーはさまざまなシナリオやコンテキストに応じた契約の再利用や再目的化を容易に行えるようになります。

Extended Marloweは、Plain Marlowe(またはCore Marlowe)よりも柔軟性に優れています。コントラクトは非常に具体的で、タイムアウトを絶対値で指定します。当初はスロット番号で、最近では標準的なタイムスタンプ(POSIX time)で指定するようになりました。

また、Marloweの値は、Inputsとして渡されるものを除き、通常ハードコードされています。例えば、₳100のローンや、いくら貸すかユーザに尋ねるものはWhen構文のChoiceで実装できますが、いつでも好きなパラメータでデプロイできる再利用可能なMarloweコントラクトを持つことができませんでした。Extended Marloweは、コントラクトのパラメータを含めるオプションを追加することで、これらの制限を解決しています。現在、拡張MarloweはプレーンなMarloweとほぼ同じですが、テンプレートのパラメータを表すコンストラクタを2つ追加しています。

  • SlotParam – Whenコンストラクタのタイムアウトの代わりに書くことができます。
  • ConstantParam – Valueコンストラクタの一種です。

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

  • SlotParam “支払期限
  • ConstantParam “価格”

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

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

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

写真にあるバリューテンプレートのパラメータ入力は、単なる整数の入力フィールドではないことに注意してください。むしろ、小数点を含む数値を想定しており、想定される数値がアダの金額を表す通貨記号のラベルが付いている。このルールは、When構文のChoiceで要求される値にも当てはまります。また、選択肢はadaの金額を表す必要はありません。以下のように、比率のように何でも表現することができる。

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

また、各パラメーターにはヒントがあり、各項目の横にある紫色のクエスチョンマークをクリックすることで表示させることができる。ヒント内のテキストは、契約書テンプレートに固有のもので、太字テキスト、斜体テキスト、下線テキストなど、フォーマットされたテキストが含まれています。

図3 ヒント パラメータ・ヒント

ユーザー定義の契約は、メタデータを使用することで、これらすべての詳細をカスタマイズすることができる。では、どのように行うのか見ていきましょう。

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

Marlowe Playgroundの各エディタの下部には、Metadataタブが用意されています。そこでは、ユーザーが必要に応じてメタデータをカスタマイズすることができます。たとえば、以下のようになります。

図4. メタデータタブ

すべての契約書には、以下のような基本的なメタデータが含まれることが期待されています。

  • 契約タイプ – どのような種類の契約なのか?このカテゴリは、将来的に契約を見つけやすくするために、契約を分類するのに役立ちます。現在、利用可能なカテゴリは非常に少ないですが、将来的にはさらに追加される予定です。もし、あなたの契約に合うカテゴリーがない場合は、いつでも「その他」を選択することができます。
  • 契約書名 – 契約書を識別するための短い名前です。
  • 契約書の簡単な説明 – リストに表示される非常に簡単な説明です。
  • 長い説明文 – 短い説明文の後に表示される、より詳しい説明文です。説明文のテキストはMarkdownに含まれるいくつかのフォーマット機能をサポートしていることに注意してください。

例えば、説明のテキストの一部の前後に2つのアスタリスクを追加すると、前のセクションで見たように、契約のシミュレーションを行う際にそのテキストが太字で表示されます。このようにして、プレーンテキストを

Amount of **money** to pay

は次のように表示されます。

Amount of money to pay

この機能を利用して、例えばロールや選択肢の名前など、契約の文脈で特別な意味を持つエンティティを表すキーワードを強調することをお勧めします。

メタデータタブは、契約で定義されたロール、選択肢、スロット、および値パラメータのヒントの指定や、選択肢および値パラメータの書式設定もサポートしています。

コントラクトに新たに追加されたロールや選択肢、スロット、値パラメータは、メタデータタブに赤色で表示されます。HaskellエディタとJavaScriptエディタの場合、この現象が起こる前にコードを正常にコンパイルする必要がある場合があります。

図5. メタデータ・タブ – メタデータ・エントリーの追加

赤い「+」ボタンを押すと、指定した項目の新しいメタデータ項目が作成されます。同様に、ロール、選択肢、スロットや値のパラメータが契約で使用されなくなった場合、既存のメタデータに削除の赤いフラグが立ち、ユーザは「-」ボタンを押して契約からメタデータエントリを削除する必要があります。

図6. メタデータ] タブ – メタデータ・エントリーの削除

選択肢と値パラメータの場合、説明文に加えて、ユーザーがエンドユーザーに提供してほしい数値のフォーマットをオプションで指定することができます。そのためには、ドロップダウンメニューから「定点観測量」を選択します。これによって、2つの追加フィールドが提供されます。

  • 値の小数点以下の桁数(左下) – Marloweの数値は内部的には常に整数ですが、便宜上、ユーザーが固定小数点として数値を入力することができます。例えばMarloweのadaはlovelace(adaの100万分の1)で表現されますが、一般にエンドユーザはadaの方が読みやすいので、adaで処理することを好みます。開発者は、小数点以下の桁数を6と書くことでこれをサポートすることができる。その結果、エンドユーザーには小数点以下の桁数が表示されますが、内部的にはまだラブレス (ada 単位) で動作しています。
  • 値の通貨ラベル(右下) – 開発者は、エンドユーザーに期待する金額の単位についてのヒントとして、値の入力ボックスの近くに通貨記号を表示することもできます。たとえば、adaの場合、adaの記号「₳」を書けばよい。
図7. 数値の書式

最後に、パラメータの順番が重要である。例えば、エンドユーザーが選択するスロットのパラメータがいくつかあるとします。それらのパラメータを時系列に表示するのが論理的でしょう。

メタデータを並べるには、例えばエントリーをドラッグして希望の順番に並べます。

図8. メタデータの順序

シミュレーションの開始時や契約の締結時に表示されるフォームの生成には、メタデータのパラメータの順番が使用されます。

まとめ

Marloweの新しいテンプレートとメタデータの拡張により、コントラクト開発者はヒントやパラメータを提供できるようになり、エンドユーザは完全な実装やコントラクトの詳細を理解しなくても、複数の状況で同じコントラクトを簡単に再利用できるようになりました。

これらは、Marloweチームが引き続き取り組んでいる新しい改良点の一部に過ぎません。近日中にさらなる改良点の詳細をお知らせできることを楽しみにしています。

今後のMarloweのリリースや新機能の詳細については、弊社のソーシャルメディアチャンネルや新しいMarlowe Discordチャンネルでご確認ください。また、初のMarlowe Pioneers Programの詳細も近日中に公開予定です。

カルダノエコシステムとSITION

お問い合わせ

Contact Us
SIPOのステーキングサービス、Cardano ADA、ADAの購入方法から保管方法についてご興味、ご質問がある方はこちらのフォームからお問い合わせください。24時間以内にメールにてご返信いたします。

最新投稿