Bitcoin
Monacoin
Counterparty
暗号通貨
Monaparty

Counterparty の周辺をざっくり解説してみる

More than 1 year has passed since last update.

一日目なので、いきなりコーディングに入らず、肩慣らしから。

そもそも Counterparty ってなに?

Counterparty は、仮想通貨 Bitcoin のブロックチェーンを使って独自の通貨(トークン)を発行し、またそのトークンを使った経済圏を作るためのフレームワークです。

全てのソースコードは、GitHub 経由で入手できます。

今のところ、トークンの送付、分散取引所 (DEX)、賭け事 (Binary bet) 、テキストメッセージのブロードキャスト配信、トークン保持者に対する配当等ができます。

かつては、Ethereum の実行エンジン EVM を移植したスマートコントラクトの試験実装が行われていましたが、開発中止が決定され、2017年11月に削除されました。(残念)

Qiita なのでコードに関わる情報を…

具体的にどんなことができるのかは、ドキュメントの create_ 系 API を読むと解ります。

そもそも Monaparty ってなに?

Monaparty は、Counterparty のソースコードを基に、使用するブロックチェーンを Bitcoin から Monacoin に変更したものです。Monaparty も Counterparty と同様に Github からソースコードを入手できます。 1

なんで Counterparty があるのに Monaparty が登場したの?

Monaparty の開発者が、モナコイナーだからっぽいです。冗談です。

Counterparty は Bitcoin のブロックチェーンを使っているため、Counterparty が提供する機能を使うたびに Bitcoin の送金手数料がかかります。
昨今の Bitcoin ブロックチェーンの混雑により送金手数料が高騰し、「100円相当のトークンを送るために1000円の送金手数料を要する」というような状態に陥っています。

一方、Monacoin は、オフチェーンのサービスが多く、ブロック生成間隔が Bitcoin よりも短いため、ブロックチェーンはスカスカです。また、Monacoin は Bitcoin よりも3桁以上安いので、対円での送金手数料も低くなります。

使いやすく高性能のトークンプラットフォームを目指して Monaparty は移植されました。

どういう原理になっているの? ブロックチェーンを使わず説明してよ

(以下、単に Counterparty や Bitcoin と記した場合には、Monaparty や Monacoin にも当てはまります。)

ブロックチェーンに関する細かいことを省いて説明すると、Counterparty はキューイングされたメッセージにより状態遷移する処理系です。

Counterparty を使うアプリは create_* 系の API でメッセージを作り、それをキュー(実際はブロックチェーン)に積んでいきます。

Counterparty のコアは、データベース(実際 sqlite3 です)を持っていて、キューに貯まっているメッセージを古い順から読んでデータベースの情報を書き換えていきます。

この設計は、Bitcoin のブロックチェーン上に構築されているものの、むしろライバルである Ethereum に近いです。実際、Counterparty の公式 Slack では、開発者たちが「Ethereum に近いけど、違うのはコントラクトがハードコードされていることだね。だから Ethereum よりも安全(ユーザ作成コントラクトのバグで GOX したり資金凍結になったりするリスクが低い)」と説明している場面をしばしば見かけます。

Bitcoin を直接使うアプリと比べて難易度はどうよ?

Counterparty には JSON と REST の API が用意されています。Bitcoin-core にも JSON API がありますので、この点では互角です。

しかし、データの実体がブロックチェーンではなく構造化されたデータベースに格納されているので、参照系の API は Counterparty のほうがかなり楽です。
別記事で解説しますが、(高機能 NoSQL によくある) JSON を使ったクエリ言語を含められる API もあります。

Counterparty の内部状態に影響を及ぼす API も、Counterparty のほうが楽かもしれません。

Bitcoin を使ったアプリケーションの場合、たかが送金だけで「utxo をかき集めて、お釣りを設定して未署名トランザクションを組み上げて」のような手順を踏む必要があります。
一方、Counterparty の場合は、未署名トランザクション署名の組み上げまでの面倒を API で見てくれます。

秘密鍵管理やトランザクション署名等の、暗号通貨特有の面倒なところは Counterparty API を使ったアプリにもあるのですが、薄いライブラリに隠蔽可能なレベルです。

まとまっていないまとめ

Advent calendar 初日ということで、コードに深入りせず、概観の説明としました。
もし「これがわからん」ということがありましたら、コメント頂ければ本記事を修正するなり、別記事を立てるなりいたします。


  1. しかし2017年12月1日現在、全てのソースコードがcommitされていません。2017年中に全ソースコードが commit され docker イメージとしての配布も開始される予定です。