Counterparty にある危機とモナパーティの近未来リスク
つぶやき。ぽえむ。TL;DR
予告編出していたやつの続き。
Ⓜ
一口に「ブロックチェーン」といっても、その価値の保存方法は様々です。主流どころはUTXO 方式(Bitcoin 系)とアカウント方式(Ethereum とか NEM とか 系)で大きく分かれます。…なんとなく聞いたことがある方もいらっしゃるでしょう。
両者の技術的な違いは、本稿ではあまり関係なく、「マスタリング・ビットコイン」とか「マスタリング・イーサリアム」とか名著が既にありますので、そちらに譲ります。
ビットコインの系譜の上にあるモナコインは、UTXO を採用しています。一方、モナパーティはアカウントを採用しています。
ここまで聞いて「あ、モナパーティは Ethereum と同じなのね…」と思うかもしれませんが、それは早合点です。
アカウント方式でも、思想的に最低でも 2 種類の流派があります。
* ブロックが生成された瞬間の、配下にあるすべての状態を、ブロックに記録する。
* ブロックには状態を記録しない。各ノードが後で再生して組み立てる。
(ここでいう「状態」とは、各アセットの残高だと思えば、だいたいあっています。)
Ethereum は前者、状態をブロックに記録します。彼らが駆使する宇宙語では "ワールドステート" と呼ぶようです。
Ethereum はすべての状態をブロックに記録します。後から状態を改ざんすれば、すぐに検出できるようになっています。暗号学的に安全なわけですが、引き換えとしてものすごく高いスペックを持つノードが必要になりがち。
一方、モナパーティは(基となった Counterparty も)、後者、ブロックには生成時点での状態は記録しません。
現実世界のモノと対比させるのは難しいのですが。
敢えて喩えるなら、Ethereum モナパーティのやり方は、更新履歴付きの総勘定元帳。
モナパーティは、仕訳伝票の束です。
総勘定元帳は、仕訳伝票から作成されます。ならば、仕訳伝票だけチェーンに記録して、各ノードが記帳して総勘定元帳を作ればよいのでは? …というのがモナパーティの着想です。アカウント方式なのですが、UTXO方式の思想にも若干引っ張られていると、言えるかもしれません。
重い総勘定元帳を持ち歩かないという、モナパーティの考え方は合理的に思える気もします…が。
ノードが完璧に同じ挙動を示さない場合には、簡単にフォークします。フォークはブロックチェーンの定常運転ですが、モナパーティの場合はノード間の相互監視は基本的に無く、マイニング等による淘汰も無いので、自らがフォークしていることに気づかず実行し続ける可能性が低くありません。加えてコントラクトが、ノード組込みとはいえオフチェーンなので、ノード運用者が簡単に過去の契約履行を覆せます。
Ⓜ
悪意がなくてもこれらの事故は起こりえます。
よって、モナパーティを含む Counterparty 系のプラットフォームでは、ソースコードの修正によって過去の契約を覆してしまわぬよう、細心の注意が求められます。ちなみに、Counterparty 本家で "protocol change" という語が出た場合がその瞬間です。修正が過去の契約に及ぼす可能性が話されています。
最近の Counterparty 開発者で、protocol changes に対し最も敏感だったのは John Villar 氏でした。しかし彼はもう次のステージに行ってしまいました。残された core-dev が contributor と Counterparty プラットフォームを無事故で維持できるのか、個人的にはなかなか厳しいかもしれないと思っています。
FUD する気はありません。しかし存在するリスクは存在するので仕方ありません。
八方塞がりというわけでもないでしょう。開発企業が精算した Factom にも値段が付いているわけですし、最低限の保守さえ行われていれば XCP アセットの上場や価格の維持は可能かもしれません。
無職業者 BOT は実験用としての最低限の XCP しか持っていないので、あまり興味ないですが。
Ⓜ
振り返ってモナパーティ。無職業者BOTは壊れるかもしれませんし、中の人がくたばるかもしれません。Counterparty を基にしている以上、同じリスクを内在しています。
だから何をするという具体的なアクションは無くもないのですが、何にせよゼロリスクは無さそうです。