OP_RETURN とは限らない
つぶやき。ぽえむ。…でもないか。
基本線として
オープンソースだからコード読む。以上。解散。
なのですが。技術勢にはスパルタクスなムーブ。
ただまあヒントくらいは、まあ。
Ⓜ
「モナパーティって OP_RETURN という仕組みを使って、モナコインのチェーンにメッセージを埋め込んでいるんだよね?」
は、正しいですが、生半可な知識です。
実際には、OP_RETURN 以外の埋め込み方も存在しています。
ビットコインの制約由来で、OP_RETURN を使う場合には、あまり長いメッセージは埋め込めません。
一方、OP_RETURN の利用では収まりがつかない長さのメッセージへの需要があります。身近なユースケースでは、Monacard 2.0 での issuance 時の description が挙げられます。
以上。詳しいことはソース嫁。
Ⓜ
…なのですが。当ポエムの読者は技術勢とは限らないので、もう少し噛み砕いておきます。
引用ツイートで用いられたトランザクションは OP_CHECKMULTISIG を使うパターンです。
当該トランザクションを注意深く読めば判ると思うのですが、outputs は 2 つの要素から成り立っています。
* input のアドレスが必ず最後に登場する、1 of 3 マルチシグの塊。
* 最後に input と同じアドレスへの output (お釣り)。
なお、マルチシグの塊はいずれも 1 of 3 なので、input にあるアドレスに対応する秘密鍵を所有していれば、この output に含まれるモナコインは回収可能です。(ただし、"可能" なだけで、回収機能を持ったウォレットは、おそらく現存しない…「望む人が作る」の原則が発動される)
回収可能なので手数料ではないですが、現時点では微量の MONA が半ば burn している状態になります。
回収可能なので手数料ではなくめでたしめでたし(?)として…
1 of 3 の残りは? というと、その領域にモナパーティのメッセージ(を分割したもの)が含まれています。疑問への回答としては、こちらのほうが本質情報かもしれん。
分割されたメッセージのバイト列は、モナコインのアドレスへ変換可能です。よって、モナコインの block explorer ではアドレスとして表示されます。しかし、アドレスに対応する秘密鍵は事実上存在しません。大量の計算リソースを使って秘密鍵を見つけられたとしても、得られるのが 0.00078 MONA とかなら割に合わなさすぎます。
ともあれ、counterparty-server はこれらのデータを結合してメッセージを復号しています。counterparty-lib ではこの辺り。
かくして、モナコインのチェーンのお約束に沿った形、かつトランザクションを作成したアドレス以外の誰かにモナコインを盗まれる可能性を事実上無くした形で、モナパーティ用の長めのメッセージをトランザクションの中に含めることが可能となっています。
諸々の結果として、同じ txid で mpchain に問い合わせてみると、MONACHEN.0001 アセットの issuance として解釈されていることを確認できます。
ぽえむ。
厳しい言葉とはうらはらに、非常に丁寧なヒントありがとうございます!