おさらい
2日目の記事で、下記2点を確認しました。
- Counterparty のメッセージは
OP_RETURN
という特殊な命令の後ろに隠れている - Bitcoin-core からは Counterparty のメッセージは認識できない
Counterparty のメッセージは、ブロックチェーンという道路を走る Bitcoin という車の、屋根に乗っているようなものです。
車内(Bitcoin)からは見ることができませんし、屋根(Counterparty)から車内を覗くこともできません。
Counterparty DEX で BTC/XCP 注文が約定しない理由
Counterparty にとっての FAQ なのですが、Counterparty DEX では BTC/XCP の注文は受け付けられるものの約定しません。
XCP だけでなく対 BTC の取引は同様に約定しません。
この仕様となっている理由は…答えを先に書きます。
「BTC の売り注文を出した人が、トークンをだまし取ることが可能であるから」です。
この仕様を理解するには、Bitcoin ブロックチェーンと Counterparty メッセージとの関係の理解が要ります。
騙しの手口
ブロックチェーンのお約束に従って、Alice と Bob にご登場いただきましょう。悪者は Bob に演じて頂くことにします。
- 話を簡単にするために BTC/XCP の板には何の注文もないことにします。
- 悪者 Bob は「1BTC 払って 1500XCP を買いたい」という注文メッセージを送信します。
- メッセージがブロックに採り込まれ、Counterparty server が板情報を更新します。
- 板情報の更新を確認した Bob は、1BTC を別のアドレスに移動します。
- Alice は「1500XCP を払って 1BTC を買いたい」という注文メッセージを送信します。
- メッセージがブロックに採り込まれ、Counterparty server がマッチングを実行し、Alice の 1500XCP を Bob のアドレスへ移動します。
- Bob の 1BTC は別のアドレスに移動済みなので Counterparty server は何もできません。
- Alice の丸損です。
Counterparty 内のトークン同士の場合には、注文メッセージの送信により売りたいトークンはロックされます。
具体的に、仮に Bob が「1500BANANA を払って 1500XCP を買いたい」という注文を出した場合、約定するかタイム・アウトするまで 1500BANANA は他の用途には使えません。
よってこのような問題は起きません。
Counterparty は Bitcoin の屋根に乗っているため、Bitcoin の送着金とは無関係であり、ロックを掛けられないのです。
対策案
どうしても BTC/XCP のトレードをしたい場合、atomic swap が解決策の一つとして考えられます。
atomic swap の説明は他に譲りますが、普通は Bitcoin と Litecoin との間の送金など、無関係なチェーン間での価値交換に用いられる技術です。
同じ Bitcoin ブロックチェーンに相乗りしている Counterparty と Bitcoin での使用が検討されるのは不思議に思えるかもしれませんが、いままで説明してきたとおり、両者は実質的に別の価値記録です。よって検討に値することになるわけです。
現実
しかし Coutnerparty では atomic swap が実現されていません。どうやら主な理由は下記のようなもののようです。
- atomic swap は 4トランザクションをやり取りする必要があり、ブロック承認間隔が 10分程度の Bitcoin では時間がかかって萎える
- BTC も XCP もオフチェーンで購入する手段がいくつもあり、頑張るだけ時間の無駄
Monaparty の場合
「対策案」の項は、Counterparty と Monaparty 両方で当てはまることでした。
しかし「現実」の項は Counterparty 側にたった現実です。
ブロック承認間隔が 90 秒と短く、MONA は買えても XMP は買えない、そんな現時点での Monaparty では、どうでしょうか。
atomic swap 実装はコストをかけるに充分なものかもしれません。
まとまっていないまとめ
BTC/XCP (MONA/XMP) が DEX で約定しない理由をブロックチェーンに近い側から概説しました。
2億円近い価値が burn により閉じ込められた XMP ですから、MONA/XMP の取引を可能にした方はクリプト界のヒーローに一躍躍り出ることでしょう。(大げさ?)
どなたか挑戦してみませんか? 実験コードならあるっぽいですよ。