Monascript と Monaparty Automation
ツイートへのリプライでも良かったのですが、FAQ 化するかなとも思ったので。
違いを一言でいうと
* Monascript は Layer-1 のコントラクト拡張
* Monaparty Automation は Layer-2 のメッセージに対し副作用を与えるもの
です。
…いや、これだけで判るなら、疑問に思ったりしませんね。少し噛み砕きます。
Monascript とは
おさらい
まず Monacoin (というか Bitcoin 系全般) の仕組みをおさらいします。
$MONA で表される量は、トランザクションというものに封じられています。
トランザクションには、プログラムの切れ端が入っています。
トランザクションから $MONA を引き出すには、引き出したい $MONA の分量とプログラムの足りない部分を補足した新しいトランザクションを提出します。
検証ノードは、両方のトランザクションにあるプログラムの切れ端をつなぎ合わせて、プログラムを実行します。期待通りに終了したら、新しいトランザクションへ $MONA が移り、古いトランザクションには使用済みの印が付きます。プログラムが正常終了しなければ、新しいトランザクションは不正なものとして破棄されます。
この後、正当なトランザクションを採掘者がブロックに纏めたりします。…が、その辺りは本編に関係ないので割愛。
本題、Monascript とは
おさらいはこれくらいにして。
新たなトランザクションに含める "プログラムの切れ端" 次第で、誰でも $MONA を引き出せるトランザクションも、誰も $MONA を引き出せないトランザクションも、実は作れます。
意図せぬバグで、そのようなトランザクションになってしまう可能性もあります。ブロックに取り込まれ十分な時間を経たトランザクションは、撤回できません。Ethereum で頻繁にバグによるトラブルが発生していることから、想像できるでしょう。
トラブルが発生するのは怖いので、プログラムの切れ端の作り方には、いくつか定型があります。
Monascript は、そのバグのリスクを回避しつつ定形から外れた、プログラムの切れ端をつくるための言語です。
Monascript は、Monacoin のトランザクションにのみ依存します。よって、どこかで Monacoin のノードが生きている限り、使えます。仮に Monaparty のノードが全滅しても、使えます。(まだ開発中ですが)
Monaparty Automation とは
さて、今回、開発開始が表明された Monaparty Automation (以下、単に Automation と略)について。
これは、名前の通り、Monacoin のチェーンに子亀として乗っている Monaparty で用いられる技術です。Monaparty のノードが一つでも生きている限り、使えます。
まずは、Monaparty の仕組みについて、おさらいしてきます。
Monaparty とメッセージ
Monaparty では、親亀である Monacoin とは異なり、全てはメッセージに基づいて行われます。
(メッセージの配信はには Monacoin のトランザクションが使われますが、Monaparty にとっては「秘密鍵の持ち主による署名が確認されたデータ」以上の意味を持ちません。結果、Monacoin 側から見ると送金元と送金先が同じトランザクションなのに、Monaparty のアセットが別のアドレスに送れている、といった、Monacoin 側からすれば不可解なことが起こります。)
Monaparty の利用者は、メッセージをノードに投げることで送金や DEX などの操作を指示します。ノードはメッセージの正当性を確認しつつ、データベースの状態を変更します。
本題、Monaparty Automation とは
Automation は、メッセージをノードが処理したとき、その内容に応じて別のメッセージを代行送信する機能です。
今までの Monaparty ではメッセージの送信を、人力、または外部のサーバにある Bot に頼る必要がありました。それらの一部は、 Automation で代行できるようになるでしょう。担保型レンディングに関しては、既に実装検討が済んでいます。
Automation の設定もメッセージ送信で行います。Automation がどのような処理を行うかは Monacoin のブロックチェーンに記録されるため、透明性も増すでしょう。MONANA アセットのような仕組みを、高い透明性で実現できるようになるはずです。(秘密鍵の持ち主による盗難リスクは残りますし、日本の法的な課題も残りますが)
両者は別物?
両者は別物かというと、別物ですが、そうでもないです。
さきほど「メッセージをノードが処理したとき、その内容に応じて」と書きましたが、「その内容」を決めるのは、Automation をデプロイするユーザが埋め込んだプログラムです。
このプログラムを記述する言語は、現在のところ BitcoinCash Script を採用予定としています。
この言語は、スマートコントラクト向けにいくつか修正されているものの、Monacoin が "プログラムの切れ端" で使っている Script 言語と基本的な構造は同じです。
つまり、Automation に含めるプログラムが高度化・複雑化したとき、Monascript のツール類が使える可能性が極めて高くなります。
というわけで、両者は別物ですが、そうでもないです。