3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

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

そもそも 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 イメージとしての配布も開始される予定です。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
3
Help us understand the problem. What are the problem?