本題に入る前のあらすじ
Monaparty は、ICO と Proof of Burn (PoB) のハイブリッドモデルで基軸トークン XMP を生成しました。
(Counterparty は PoB だけで基軸トークン XCP を生成)
ICO トークンは Counterparty 上の MONAPARTY トークンです。
その後 Monaparty の開発が完了した時点で MONAPARTY トークン保有者との交換用に、交換レートが非常に大きな 1 MONA の Burn (Big Burn と呼ぶことにします)を Proof of Burn イベントに先立って行いました。
ここで、Monaparty 開発者は、以下の作業を行う必要があります。
- Counterparty 上の COUNTERPARTY トークンを受け取る。
- 受け取った MONAPARTY トークンの量に応じた XMP トークンを Monaparty 上のアドレスに送る。
これらを確実にかつ透明性のある形で行う必要があります。
そしてこれは、ICO に関係なく、Counterparty から Monaparty へプラットフォーム移行したい方々にとって、汎用的な話題でもあります。
どのように実現したか
汎化して表現すると、クロスチェーン・スワップ になります。
アトミック・スワップのような手が取れれば技術的に萌えますが、残念ながら技術として確立しておらず、Monaparty の開発で疲労困憊の身でこれ以上難しいことをする体力もありませんでした。
そこで、以下の手順を取ることで切り抜けました。
- MONAPARTY トークン保持者に、XMP トークンを受け取りたい Monaparty アドレスをメモに添えて
1MonapartyMMMMMMMMMMMMMMMMMQ3QJNm
に送ってもらう。 - Monapary 開発者は、Counterparty 上の 1MonapartyMMMMMMMMMMMMMMMMMQ3QJNm への送金を定期的に監視し、送金確認されたらそのメモにある Monaparty アドレスへ必要な XMP トークンを送る
ソースコードにすると、下記のようになります。
本来ならば、署名済みトランザクションをウォレット・バックエンドやブロックチェーン・エクスプローラの API に投げ込めば全自動化も可能です。
しかし、自動化は、バグによる過払いのリスクがあります。そこで、上記リンク先のソースコードでは署名済みトランザクションの生成までで止めています。
表示された署名済みトランザクションを Insight にコピペして送信することで配布は完了となります。
メモを忘れた場合の対応
今のところ発生していないようなのですが、メモに Monaparty アドレスを入れ忘れて Burn アドレスへ送ってしまうというミスは考えられます。その場合は、ブロードキャストメッセージを使って Monaparty アドレスを送ってもらうと良いでしょう。Conterpatry 側のトークン保持者が望む Monaparty 側のアドレスがトラストレスに証明できますね。
資金決済法(仮想通貨交換業)との兼ね合い
MONAPARTY - XMP のトークンスワップの場合、MONAPARTY トークンは有限量でかつ Burn アドレス送りなので、業の要件となる継続反復性がありません。
しかし、このスクリプトを応用して双方のやり取りを可能にすると、資金決済法に抵触する可能性が出てきます。
紹介したスクリプトは MIT ライセンスにしましたのでご自由に応用していただいて構いませんが、その際には事前に金融庁へのお問合わせ等を推奨します。