一日目なので、いきなりコーディングに入らず、肩慣らしから。
そもそも 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 初日ということで、コードに深入りせず、概観の説明としました。
もし「これがわからん」ということがありましたら、コメント頂ければ本記事を修正するなり、別記事を立てるなりいたします。
-
しかし2017年12月1日現在、全てのソースコードがcommitされていません。2017年中に全ソースコードが commit され docker イメージとしての配布も開始される予定です。 ↩