見出し画像

Epoch#231 | Marloweチュートリアル4章

こんにちは!4章は用語の説明が中心で重要ですが、馴染みのない言葉が多いため、一つ一つ調べながら見ていきました。インスタンスなどプログラミングの概念や、型の話が入っています。

トランザクションに関するUTxOモデルはオペレータをやっていて馴染みがあるので、ここで少しつながった気がします。

-----

contract(契約書):コントラクト
contract(契約):契約
omniscient:全知全能
fungible: 同等のタイプや価値のものと交換しやすいもの。等価交換可能

など、日本語に当てはめていくのが難しい単語や、見つからないものもありましたが、いったん読み進めていこうと思います。

4. Marloweモデル

Marloweは、ブロックチェーン上での金融コントラクトの実行をサポートするために設計されており、特にCardano上での作業をサポートするために設計されています。コントラクトは少数のコンストラクトを組み合わせることで構築され、様々な種類の金融コントラクトを記述することができます。

これらの構成を説明する前に、Marloweでコントラクトをモデル化するための一般的なアプローチと、Marloweのコントラクトが実行されるコンテキストであるCardanoブロックチェーンを見ておく必要があります。その際に使用する用語のいくつかを紹介し、イタリック体(ここでは太文字)で定義を示します。

4.1. コントラクト(契約書)

Marloweのコントラクトはブロックチェーン上で実行されますが、オフチェーンの世界と相互作用する必要があります。契約の当事者参加者とも呼ぶ)は様々な行動をとることができます。 預金を要求されたり、選択を迫られたりすることもあります。特定の商品の現在の価格などの外部価値(オラクル値とも呼ばれる)の通知は、他の可能な入力形態です。

また、コントラクトを実行し、コントラクトの当事者に支払いを行うことで、外部効果を生み出すことができます。

参加者と役割
我々は、Marloweのコントラクトにおいて参加者役割の概念を分離する必要があります。契約の役割は固定されており、不変であり、当事者取引相手などと呼ばれます。一方、契約の役割に紐づけられる参加者は、特定のコントラクトインスタンスの実行中に変わる可能性があります。これにより、トークン化のメカニズムを通じて、実行中のコントラクト内の役割を参加者間で取引することができます。これは、Marloweのオンチェーンの実装や、ウォレットスタイルのシミュレーションでも利用可能ですが、全知全能シミュレーションでは、単に契約の役割を提示します。

アカウント
Marloweモデルでは、資産を保存するための契約を可能にします。契約に参加するすべての当事者は、暗黙のうちに自分の名前でアカウントを所有しています。契約に貯えられるすべての資産は、当事者の1つのアカウントになければならなりません。そうすることで契約が閉鎖されるとき契約に残るすべての資産はそれぞれの所有者に払い戻しされます。これらのアカウントは、契約の実行中にのみ存在するローカルのもので、その間、契約の当事者によってのみアクセス可能です。

ステップと状態
通常、Marloweのコントラクトは最初のステップが書かれ、続いて別の(サブ)コントラクトが次に何をすべきか記載されることによって、一連のステップを記述します。例えば、「Pay a p t v cont」という契約には、"アカウントaから、当事者pへ、トークンtでv値の支払いをしなさい。contのコントラクトを続けなさい"と書いてあります。このcontを契約の継続と呼びます。

契約を実行する際には、現在の契約を把握しておく必要があります。上の例では、ステップを踏んだ後は、現在の契約は継続、contとなります。また、各口座にどれだけの金額があるかなど、他の情報も把握しておかなければなりません。この情報を状態と呼びます。これも各ステップで変化する可能性があります。また、ステップでは実行内容である、お金が入金されていることや、支払いなどの効果が発生していることなど、起こっているアクションを見ることもできます。

4.2. ブロックチェーン

Marloweは一般的にブロックチェーンで動作するように設計されていますが、Marloweのセマンティクス(データの意味)と実装を説明する際には、ブロックチェーンとの相互作用方法の詳細が関係してきます。

UTxOベースのブロックチェーンは、各ブロックにトランザクションの集まりが含まれるブロックの連結です。各トランザクションは入力と出力のセットを持ち、ブロックチェーンは未使用のトランザクション出力(UTxO)を新しいトランザクションの入力にリンクすることで構築されます。各スロットは1秒の長さで、最大で1つのブロックを生成することができます。

これらのブロックが生成されるメカニズムや、誰によって生成されるのかは、ここでは関係ありません。契約はスロット番号で表現され、ブロックチェーンの開始(「始まり」)ブロックから数えます。

UTxOとウォレット
ブロックチェーン上の価値は、所有者が保持する秘密鍵によって暗号的に保護されているUTxOに存在します。これらの鍵は出力を取り出すために使用できます。そして新しいトランザクションの入力として使用することができ、トランザクションは支出の値として見ることができます。ユーザーは通常、暗号化された安全なウォレットに秘密鍵とそれに付随する価値を保持しておきます。

ユーザーはウォレットを介して、Marloweコントラクトを含む、ブロックチェーン上で実行されているスマートコントラクトと対話することができます。ユーザーのウォレット上で入金は行われ、支払いを受け取ります。しかし、これらはユーザーのウォレットで実行されているコードによって制御される必要があるオフチェーンアクションであり、Marloweコントラクト自体によって実行されないことに注意してください。

全知全能とウォレットレベルのシミュレーション
Marloweプレイグラウンドでは、標準的な全知全能シミュレーションと、概念実証型のウォレットレベルシミュレーションの2種類のシミュレーションに対応しています。

全知全能シミュレーションでは、ユーザは任意の役割に対して任意のアクションを実行することができ、したがって、すべてのユーザの視点から実行を観察することができます。ウォレットスタイルのシミュレーションでは、異なるウォレット(異なる参加者)と、複数の契約における複数の役割への参加を明示的にモデル化しています。このようにして、このモデルはコントラクト内のある参加者に関して、コントラクト執行のより忠実な視点を提示します。


これまでの例では、値が必要なときは、もっぱら Ada を使用してきました。これは、Adaがカルダノでサポートされている基本的な通貨であることを考えると、非常に理にかなっています。

しかし、Marloweは、より一般的な価値の概念を提供しており、カスタムの等価交換可能なトークン、そうでないトークン、およびその中間のトークンをサポートしています。Marloweの価値とは何でしょう?

newtype Value = Value
    {getValue :: Map CurrencySymbol (Map TokenName Integer)}

CurrencySymbol型とTokenName型は、どちらもByteStringの単純なラッパーです。

この価値の概念は、Ada、交換可能なトークン(通貨を考えてください)、交換不可能なトークン(他のトークンと交換できないカスタム・トークン)、そしてよりエキゾチックな混合ケースが網羅されています。

・Ada は CurrencySymbol と TokenName として空のバイト文字列を持ちます。
・交換可能なトークンは、CurrencySymbolで表現され、その通貨記号には、任意の非負の整数(Adaは特殊なケース)を持つことができるTokenNameが1つだけ存在します。
・交換不可能なトークンのクラスは、複数の TokenNames を持つ CurrencySymbol であり、それぞれの TokenNames は1 つの量を持ちます。これらの名前のそれぞれが、1つのユニークな交換不可能なトークンに対応しています。
・混合トークンとは、複数の TokenNames を持ち、数量が 1 より大きいものを指します。

Cardanoでは、金融政策スクリプトを使って通貨を鍛造することで、新しい通貨を簡単に導入する方法を提供しています。これにより、Ethereum ERC-20/ERC-721規格をCardanoのプリミティブな価値として効果的に埋め込みます。チェーン上で実行されるMarloweコントラクトの参加者を表すためにカスタムトークンを使用しています。

4.3. Marloweコントラクトの実行

Cardanoブロックチェーン上でMarloweコントラクトを実行するということは、ユーザーが生成したトランザクションを契約のロジックに従って制約することを意味します。コントラクトがアリスから100 Adaの入金を期待している場合、そのようなトランザクションのみが成功し、それ以外のものは拒否されます。

トランザクションは、入力またはアクションの順序付きリストを含んでいます。Marloweインタプリタは、トランザクションの検証中に実行されます。最初に、入力を処理せずにそれ以上変更できなくなるまで、ステップバイステップで契約を評価します。これを静止状態と呼びます。この段階では、タイムアウトが渡されたWhenを通して、If、Let、Pay、Closeの各構文を、入力を消費することなく処理していきます。

最初の入力が処理され、その後、契約は静止状態になるまで再び1ステップ進められ、すべての入力が処理されるまでこの処理が繰り返されます。各ステップでは、現在のコンタクトと状態が変化し、いくつかの入力が処理され、支払いが行われます。

このような下図のように示されるトランザクションはブロックチェーンに追加されます。次に、Marloweコントラクトがどのように見えるかものか、また、どのようにステップバイステップで評価されるかを詳細に説明します。

我々が示したように、Marloweコントラクトの動作は入力がどのようにトランザクションに収集されるかに依存しないことを示しています。このように、契約のアクションをシミュレーションする際に、入力を明示的にトランザクションにグループ化する必要はありません。簡潔さのために、各トランザクションは最大で1つの入力を持つと考えることができます。契約のセマンティクスは、入力がどのようにトランザクションにグループ化されるかに依存しませんが、複数の入力を1つのトランザクションにグループ化することができれば、実行コストは低くなるかもしれません。

Marloweのプレイグラウンドで利用可能な全知全能シミュレーションでは、トランザクションのグループ化から抽象化していますが、役割ベースの「ウォレット」シミュレーションではトランザクションは明示的になります。

トランザクションの構成

画像2

4章は以上です。

Rewards

Epoch#231になりました!ということで今回(Epoch#229分)の報酬結果です。こちらの鯨の項で書いたように、Cardano Foundationが委任を移動したプールへついて行って(委任して)様子をみています。前エポックで、鯨は他のプールへ移動しましたが、もう3エポック委任を続けようと思います。そのため、今回の報酬も新しいプールでの分配になります。内容的には5%あたりで安定です。また、Kパラメータの件もあり新しいプールが急に増えています。

自分の委任量の場合、シミュレータによると年間2,056.081174 ADA、ROS: 5.1402%になります。

Epoch: 231
Total Staked: 19.96b (62.54%)
Active Pools: 1,226
Total Stake Addresses: 81,924
Rewards: 31.553 ADA
Total Rewards: 692.623 ADA
ROS: 5.31%
Lifetime ROS: 5.40%

ADA/USDチャート

画像2

今週はビットコインに続き、アルトコインも価格が大きく上がり、盛り上がりました。ADA/USDは200日の移動平均線(上段赤線)で3度目のサポートのあとうわ抜けました。50日移動平均線(上段緑)が100日移動平均線(上段黄)をうわ抜けようとしていますので、そうすると上昇トレンドのパーフェクトオーダーです。これは半年ぶりくらいで、ボリュームも入ってきてますので良いチャートに見えます。逆にRSI(中段黄緑色)で、9月の買いシグナル以来の売りシグナルが点灯しました。ここでは0.1ドルあたりを確認に戻ることを念頭に入れておこうと思います。個人的にADAの売りは考えていないです。

※ 日足チャートで長期目線で考えています。あくまで一つの見方なのでトレードは自己責任でお願いします。

最後まで読んでいただき、本当にありがとうございます。
役に立ったと思っていただけたら、スキや、Twitterのフォローをしていただけると幸いです。

よろしければ、過去のブログのまとめページもご確認をお願い致します。(ステークプールの宣伝を含みます)

この記事が気に入ったらサポートをしてみませんか?