
Marlowe Run
Marlowe Pioneers Program (以下、MPP)受講の中でMarlowe Runを動かしてみたのでご紹介です。※ 2022/05/29時点での画面キャプチャ、URL情報になります。
Daedalus Marlowe Pioneers
講義の中では、開発や検証用のPrivate testnetを使います。なので、まずはその準備です。テストネット用の紫色のDaedalusをダウンロードし、インストールします。(こちらは予め提供されていました)

データベースの同期ができたら、メインネットと同じ手順で、下記の通りウォレットを3つ作りました。

ウォレットへPrivate testnetのfaucet (test ADA)を送って準備完了です。
余談ですが、送り方は特殊でウォレットアドレスを足したサイトのURLにポストコマンドを打ちます。
curl -X POST https://faucet.pioneers.testnet.marlowe-finance.io/send-money/<WALLET_ADDRESS>
コントラクト作成
https://marlowe-run-marlowe-pioneers.plutus.aws.iohkdev.io/
こちらのサイトはMPP向けに建てられたサイトだと思います。(そのため将来リンクが切れる可能性あり)今回の投稿ではこちらのサイトを元にMarlowe Runのご紹介をします。
一般向けに公開されているデモは下記サイトのデモからアクセスできます。

サイトにアクセスします。ここで事前に作成したウォレットを復元します。

ウォレットの名前と、復元フレーズを入力します。(通常はオンラインで復元フレーズを入力することはありません)

復元されウォレットの同期ができると、残高が表示されました。
これを他の2つのウォレットも同じように復元してブラウザで開きます。(以下はそれぞれ別人のウォレットを想定したオペレーションです)
Marlowe1(ウォレット名)はParty(例えばあなた)
Marlowe2(ウォレット名): Counter Party(例えば証券会社)
Marlowe3(ウォレット名): Oracle(外部データ)

「Choose a template」からテンプレートを選択します。「Purchase」、「Loan」、「CFD」が用意されています。今回はCFD(差金決済取引)を選択します。
オラクルを想定したウォレット(Marlowe3)でコントラクトを作成してきます。
このコントラクトでは、2つのパーティはADAをコントラクトへデポジットします。パーティは、コントラクトへの参加者で、パーティ(ユーザ)とカウンターパーティ(取引先金融機関)と呼びます。決められた時間が経つと、オラクルにレポートされる資産の価格変化に応じて、ADAは参加者へ再分配されます。
ADAにおける資産の価格が上昇すれば、差金がカウンターパーティのウォレットへ移動します。もし下がれば、差金はパーティのウォレットへ移動します。この時の額はデポジットした額が最大額です。

「Setup」を押します。

下記の通り、ウォレット名と役割を想定して、必要事項を入力します。
Marlowe1(ウォレット名): Party
Marlowe2(ウォレット名): Counter Party
Marlowe3(ウォレット名): Oracle

それぞれの工程ではタイムリミットが決められています。例: コントラクトが始まった後、カウンターパーティはここで決められた時間内にデポジットする必要があります。タイムリミットが過ぎるとコントラクトは閉じます。

パーティとカウンターパーティがコントラクトへデポジットする価格を入力します。「Review」を押します。


「Pay and start」を押して手数料を支払います。
トランザクションの手数料に加え、コントラクト作成のため手数料がかかります。RoleトークンであるPartyはNFTとしてミントされることで表現されます。

コントラクトが開始されました。
参加者のオペレーション
パーティ(Marlowe1)

パーティ(Marlowe1)の画面を確認すると、デポジットを促されます。「Deposit」を押します。

「Confirm」を押して、コントラクトに定められている10 ADAとトランザクション手数料を支払います。
カウンターパーティ(Marlowe2)

カウンターパーティ(Marlowe2)の画面でデポジットを促されます。「Deposit」を押します。

「Confirm」を押して、コントラクトに定められている10 ADAとトランザクション手数料を支払います。

待ち時間が設定されているので、しばらく待ちます。

オラクル(Marlowe3)

オラクルが5 ADA (5000000 Lovelace)をレポートします。「…」を押します。

「Confirm」を押してトランザクション手数料を支払います。

しばらく待ちます。

再びオラクルのアカウントから資産の価格を入力します。資産の価格が上昇したことをシミュレーションして、10 ADA (10000000 Lovelace)を入力します。

「Confirm」を押してトランザクション手数料を支払います。

ステップ5でコントラクトが完了しクローズします。
ステップ4の詳細を確認すると下記の通りです。

2度目にオラクルにレポートされた価格が5 ADA高かったため、その差益がカウンターパーティの(コントラクト内の)アカウントへ支払われます。その後、パーティとカウンターパーティそれぞれのウォレットへADAが移動されました。

最終的に内部的なウォレットのADAは関係者のウォレットへ全て戻されます。
まとめ
Marlowe Runは感覚的に操作するだけで動かすことができました。今後開発が進められ、実際のユースケースがでてきたり、モバイルアプリでの実装など、よりユーザに近く使いやすくなるといいなと思います。
Marloweはプログラミングが専門分野ではない、金融分野の管理者に向けたツールとなります。その点、個人的に難しいと思ったのは金融の知識が前提で必要だということです。
最後まで読んでいただき、ありがとうございます。
カルダノを一緒に応援したいという方は、Twitterのフォローなどしていただけると嬉しいです。
また、役に立ったなどありましたら、SUGARステークプールへのご委任のご協力をどうぞよろしくお願いいたします。