暗号通貨Tezosについて紹介する日本語の記事がウェブ上で時々見られます。 それらの多くが肯定的にTezosの事を紹介しているので、関わっている私も嬉しい…のですが、 残念ながら間違いが多い。特に技術的な部分で非常に間違いが多いです。

日本では言語バリアが高すぎるせいか、問題がある内容でも日本語である、というだけで、 それが回覧され、さらなる間違い記事が生まれているという悪循環もあるようです。

間違いを一つ一つ指摘して回るのも大変ですし、指摘される方もあまり気分が良くないでしょうから、 あんまり突っ込まないようにしています。 じゃあどうするんだお前は、間違いを放っておいて日本語でのTezosの情報をガンガン出さないのは 何らかの善管注意義務に反しているんじゃないか、と言われても、私は翻訳業をやっているわけでは ないので、私独りで全部訳すとかとてもできません。

そこで、Tezosの技術面に関して日本語で見かける誤解についてだけでも、 正しい情報を書いておこうと思います。

Tezosに関するよくある誤解

名前について

誤解: 😵< Tezosとは古代ギリシャ語でスマートコントラクトを意味する

落ち着いてください。

古代ギリシャにスマートコントラクトがあったと思いますか?これは冗談です。 同意形成アルゴリズムのPaxosみたいな冗談を目指したんじゃないかなとと思いますが、 まあ、かんちがいする人が出てくるあたりでスベってますね。

Tezosという名前に意味はありません。 ギリシア語っぽい響きを持つ、まだ取られていないサイト名から選んだと聞いています。

ハードフォークについて

誤解: 😵< Tezosはハードフォークがない

間違いです。

Tezosは、プロトコル改訂手続きがチェーン上に実装されているから、 オンチェーンガバナンスでハードフォークがない!…といいんだけど、そういうことはない。

ブロックチェーンのプロトコルのフォークにはソフトとハードの2つがあります。 Tezos position paper (和訳もあるよ)では次のように規定している:

ハードフォーク
今まで有効であったブロックを無効としてしまうプロトコル変更
ソフトフォーク
それ以外の、ブロックの有効性を変化させないプロトコル変更

ソフトフォークは、例えばネットワークの効率を改善させるための通信プロトコルの変更などです。これはブロックの意味を変えるわけではないし、古い通信プロトコルと新しい通信プロトコルを両立可能なので大きな議論を生むことはありません。

ハードフォークは例えばブロック生成に関わる重要な定数の変更(ブロックサイズ、報酬計画など)や、根本となる合意形成アルゴリズムの変更などです。

当然ですが、Tezosではこの意味でのソフトフォークはもちろんハードフォークがありえます。そもそも「自己修正台帳」という二つ名からしてプロトコルはハードフォークにより修正される運命にあるのは明らか。

Tezosがハードフォークについて何が特別か。それはハードフォークによるコミュニティ分裂とそれに伴うブロックチェーン上に保持される価値の毀損を防ぐ仕組みがチェーン上に実装されているところです。

皆さんもBitcoinCashにおける最近の通貨分裂、主導権争いのハッシュパワー争奪戦争、それをきっかけにした暗号通貨の価格暴落をご存知だと思います。このことを「ハードフォーク」と呼ぶ人もあると思いますが、上記のハードフォークの定義からすると、これはプロトコルのハードフォークをきっかけとしたコミュニティの分裂というべきものです。

Tezosはこのプロトコルハードフォークによるコミュニティの「ハードフォーク」、つまり分裂、を防ぎたい。そのために、オンチェーンガバナンスとして、プロトコルの改訂、つまりハードフォークの提案とその投票が組み込まれています。 投票を経ずにコミュニティのハードフォークを試みることはそれでも常に可能ですが、 そのような「クーデター」が、コミュニティの多くの支持を得られるかというと、難しい。 そもそもコミュニティの支持を得られるようなものであれば、投票にかければよいはずですから。 この辺りのことも上のposition paperに説明されていますので参考にしてください。

誤解: 😵< Tezosはコミュニティのハードフォークがない

いやそうでしょうか。

コミュニティのハードフォークが無いとは言えません。 投票はコミュニティのお墨付きを与える仕組みを提供することで、 コミュニティの分裂を防ごうとしますが、これは絶対の防止策というわけではない。

Tezosの詳しい投票プロセスについてはこの解説記事が詳しいですが、 現在Tezosのプロトコル改訂投票は有効票の8割という、かなり過大な賛成票を必要とします。 4割や6割の支持率のある改訂案は通りません。このような中規模の支持を持つ改訂案が、 投票にかけてもどうせ通らないから、という理由で投票抜きのハードフォークを試みることは 将来あり得るのかもしれません。(そういった事を防止するために8割という線を プロトコル改訂によって下げていく、ということはありうるでしょう。)

もしTezosのようなPoS通貨に分裂が起こった場合、PoWでのハッシュ戦争のようなことは起こりません。 じゃあいったい何が起こるのか、私はよくわかりません。考えてみると面白いかもしれません。 まあ当然ですが分裂した通貨両者ともにその価値はある程度毀損されることにはなるでしょう。

誤解: 😵< Tezosはハードフォークは必ず投票で決定される

いえ、そんなことはないです。

Tezosにはバグがないとは誰も言い切れない。バグが見つかれば必要な修正が行われます。 もしそれがセキュリティに関するものである場合は、放っておくと攻撃対象とされてしまいます。 最低3ヶ月かかる投票プロセスを経ている時間はありません。即座にハードフォークによる修正が行われます。 この辺りはすでにArthur Breitmanが詳しく説明しています。

Tezosでは実際にすでにそのような緊急ハードフォークが一度行われています。

投票プロセスの目的はあくまでもコミュニティの分裂を避けるためで、 コミュニティそのものが分裂以前に存続できなくなってしまう緊急事態を回避するためには、投票は使いません。 Tezosに限らず、議論や投票を経ない緊急ハードフォークは当然批判を受けることになり、 暗号通貨としての評判が下がり、通貨価値が下がることになるでしょう。 しかし、それは緊急ハードフォークをせず価値がゼロになってしまう事と比べれば、 支払うべき代償です。

もちろん、緊急性がないプロトコルの変更に対して緊急ハードフォークは行いません。 もしそんなことをしたら批判されてしまいますし、それこそ通貨分裂もありえますからね。

このことを説明した上で、まだ緊急ハードフォークするのはおかしいとゴネる人は、 何らかの理由で、その暗号通貨がなくなる事で得をする人間です。相手にする必要は全くありません。

誤解: 😵< Tezosは投票があるから、あれも、あれも投票で入るよ!!

ええ、もしあなたがそのコードを書けば、入るかもしれないですね。

プロトコル改訂提案には具体的なソースコードの提出が必要です。 「XXX入れたい!」という適当な議題を上げて、もしそれが通ったら Tezos devチームが細かい仕様を忖度して必死こいて実装してくれる、 というバラ色の話はありません。

TezosはOCamlというプログラミング言語で実装されているので、 プロトコル改訂はOCamlでパッチを書くことになります。OCamlなんて知らない? いい機会なのでぜひ勉強してください。学部の学生さんでも1年あれば十分使えるように なります。日本でも意外と多くの大学で学生さんたちがプログラミング演習で学んでいます。 当然あなたでも大丈夫ですヨ。

LPoSについて

誤解: 😵< TezosはPoSなので民主的

民主主義って何か知っているんだろうか。

PoSでは通貨を持ってない人は権力がありません。 持っている人は持っている通貨の量に比例して権力を持てます。 これを民主的というか甚だ疑問です。株主民主主義のことを民主主義とは言いませんよね。

PoSがPoWよりも良いと主張されるのは、そのマイニングを行うのが通貨を所持している 当事者(ステークホルダー)であり、プロトコル変更に際してはステークホルダーの意思が 尊重され、彼らが所持する価値が毀損されにくいことです。この文脈では、PoWではマイナーや マインイングプール運営者はステークホルダーとは一致しないにも関わらず、 プロトコルの変更はしばしば彼らの都合の良いように行われる、とされています。

PoSはステークホルダーにやさしい、が、それは別に民主的とは言わんやろ。

誤解: 😵< TezosはDPoSなので早い

Tezosは遅せぇ!とか言われてるので、心温まるコメントですが…

DPoSは早いと言われます。それはブロック生成に関わるマイナーの数を劇的に減らしているため、 同意形成に時間がかからないからですね。少数のマイナーしかいなければ、悪意のあるマイナー にとってブロックチェーンをハックする難易度も劇的に下がりますが、それは投票でマイナーを 変更することでなんとかすると。それでDelegated PoSと呼ばれます。

Tezosもdelegationがあるので他のDPoSと同じだと思われがちですが、仕組みがかなり違います。 Tezosは、マイナーの数をごく少数に絞りません。一定量の通貨を保持している者なら誰でも その通貨量に比例したマイニング権がランダムに与えられます。 マイニングは成功報酬を伴いますが、Tezosノードとマイナーを動かす必要がありますし、 保証金も必要で、変なことをすると保証金は没収されてしまいます。 面倒を避けたい人は、他のマイナーにマイニング権を委任することができます。

これが、いわゆるDPoSと違うのがわかるでしょうか。他のDPoSとの混乱を避けるため、 このごろTezosの”DPoS”はLPoS(Liquid Proof-of-Stake)と呼ぶようになっています。 LPoSについては、この解説記事が参考になるでしょう。

例えばTezosは現在450強のマイナーが存在しています。 そうなるとブロック生成スピードはいわゆるDPoSよりもっと遅くなります。現在のところ、 Tezosのtpsはせいぜい40から45位です。これはDPoSの通貨が主張しているスピードと比べると かなり控えめな値です。

現在のパラメータは保守的な物なので、将来的にはblocktimeを小さくしたり(現在は1block/分)、 ブロックサイズを大きくすることでtpsを上げることはできますが、そんなに驚くほどtpsが上がるとも 思えません。また、現状のトランザクション量は現在の理論最高値には程遠いので、今はその必要も ありません。

サイドチェーンを使ってtpsを上げる、という手もありますが、今の所Tezosはサードパーティが やればよい、という立場みたいです。Tezos devチームは他に優先度の高いタスクでいっぱいいっぱいなので、、、

Tpsを上げる一番の方法は合意形成を甘くして安全性を下げることです。 Tezosはその安全性を一番の推しにしている暗号通貨なので、 そういったtps戦争に安易に乗ることはないと思われます。

スマートコントラクト

誤解: 😵< TezosはOCamlがわからないとアプリやスマートコントラクト書けない

そんなことはありません。

Tezosは最下部のサードパーティライブラリを除きすべて関数型言語OCamlで書かれています。これは、通貨という高度な金融システムを記述するにあたって、複雑なアルゴリズムを簡潔なおかつ堅牢なコードで記述でき、さらに形式検証によってその正しさを証明できる道具が揃っている、という条件を最も満たすプログラミング言語が現在のところOCamlだからです。(他の言語のファンの方には異論あるかもしれませんが、ここはそれが本題ではないので勘弁してもらいやしょう。)

しかし、TezosがOCamlで書かれているからといって、TezosのスマートコントラクトやTezosを使うアプリケーションもOCamlで書かなければいけないということはありません。

まずアプリケーションから。TezosノードはJSONを介してHTTPでRPCできます(いわゆるJSON RPCではない)。ですのでHTTPとJSONが扱えるのであればどんな言語でもTezosのアプリケーションは書けます。

スマートコントラクトはLiquidityというOCamlに似た言語がわりと広く使われています、が、実はこれ、Tezosの正式な推し言語じゃないです。OCamlProが勝手に作っちゃったw。

コミュニティ的にはLiquidityがデファクトスタンダードっぽいですが、Tezos公式推しの言語は今のところMichelsonです。MichelsonはOCamlじゃなくてスタックVMの言語なので言語仕様はカンタンですw、が、人間が書くのはちょっと辛い言語です。でも他の暗号通貨のスマートコントラクトのVM言語と比べると、いろいろ工夫があって書きやすい部類です。 Michelsonについては仕様書が詳しいです。(https://www.michelson-lang.com/ はクッソ古いので読まない方が良い。)

とは言え、なんでVMを言語を手書きせなアカンねんアホか、というご意見もあろうかと思います。 ので現在Tezos devチームではMichelsonへとコンパイルする高級中間言語を作っているところです。 この高級中間言語はおそらくCore MLっぽいものになるはずですが、みなさんの大好きなJavaとか JavaScriptとかPythonっぽい文法を複数サポートするので、お好きなガワを選んでスマートコントラクト が書けるようになるはずです。2019Q2あたりに出てくれば、という印象。 それまではLiquidityかMichelsonを使うことになりますね。

しかし、どんな暗号通貨のスマートコントラクトでも、最終的にガス料金計算の最適化をはじめると、 ガス料金が決定されるMichelsonをはじめとするVMオプコードの理解が必要になってきます。 そこが面倒臭い、という場合は高級言語でスマートコントラクトを書いたのち、 そのガス最適化を専門業者に発注する、ということも将来はできるようになるでしょう。

形式検証

誤解: 😵< Tezosは形式検証されているので安全

形式検証が何かわかっておられないのではないでしょうか。

まず形式検証について。

システムが、意図したとおりの好ましい性質を持っているかどうかを数学的、論理的に証明することで、その性質を保証する技術を形式検証といいます。ここで言う証明は数学における証明であって、非常に厳密なものです。そのため、ある性質の証明が得られれば、その性質は必ず成り立つ。

また、この証明はコンピュータ上で記述されます。そのため、第三者が行った証明であっても、それが本当に正当なものであるかどうか、コンピュータによって自動的に確かめることができます。

プログラムテストは、想定されたさまざまな条件の元でシステムを動作させ、システムが不具合を示さないことを確認します。テストの問題は、基本的に気休めでしかないことです。ありとあらゆる全ての条件下でシステムを動かすことは通常不可能ですから、可能な条件のごく一部についてしかテストができない。テストした条件全てで問題なくシステムが動いたとしても、本番においてテストしていない別の条件の元でちゃんと動作する保証は全くありません。きちんとテストされたと主張されたシステムが、想定外の条件下で大問題を引き起こしたことは歴史上数多くあります。

それに対し、形式検証はありうる全ての場合についてシステムが成り立つ性質を数学的に証明します。条件を変えてシステムを何度か動かせば良いテストと比べると、証明する難しさはありますが、証明できた性質は、どのような条件下でも必ず成り立つ点でテストと比べ非常に強力なのです。 (モデル化が間違ってたらどうすんねんとかいうツッコミはここでは無し。)

おお形式検証というのは素晴らしい。じゃあTezosは安全なんだ!?

残念ながら、違います。

まず、当然ですが、形式検証によって性質が保証されるのは検証が行われた性質だけです。 それ以外のものが勝手に形式検証されて安全になる、というオメデタイことはありません。

Tezosは形式検証しやすいようにデザイン実装されています。じゃあ実際に何が形式検証されて いるか、というと、今のところ、そう多くはありません。例えば、暗号関連関数の正しさであるとか、 スマートコントラクトがちゃんと型付けされているかなどは検証されている、とか、と私は聞いています。 これからも検証される対象はどんどん増えていきますが、間違ってもTezosの全ての良い性質が 形式検証される、などということはありません。これからもTezosの形式検証されていない 領域のコードのバグは見つかるでしょうし、そのバグフィクスも行われていくことになります。

誤解: 😵< Tezosのスマートコントラクトは形式検証されているのでバグフリー

これも、もう皆さんおわかりだと思います。

もしあなたが、あなたが誰かからトークンを貰うコントラクトを書こうとして、 実際には逆にあながた誰かにトークンをあげるコントラクトを実装したとします。 それを形式検証が正してくれると思いますか?もちろんしてくれません。 Tezosはあなたが実装した通りにコントラクトを実行してあなたのアカウントの残高は 減ってしまいます。

当たり前ですが、Tezosはあなたのコントラクトがあなたがトークンを貰うために 書いたのだという意図を勝手に汲んでくれません。もしあなたがあなたのスマートコントラクトが 正しい、ということを保証したければ、あなたが保証したい事を仕様として記述し、 あなたが書いた実装と一致している事を形式検証によって証明しなければいけません。

Tezosのスマートコントラクト言語であるMichelsonは純粋関数型を採用しており、 また高度なデータ型も使えるので、少なくとも、他のメジャーな暗号通貨のVMよりは 形式検証しやすいようにデザインされていますが、それでも形式検証はそのノウハウを 知っていないとできません。えーじゃあ無理じゃん? 確かに、あなたには難しいかもしれませんが、形式検証士ともいうべき人に外注することは可能です。

そんな敷居の高いスマートコントラクトの形式検証ですが、一部は自動的に行うことが可能です。 例えば、停止性やごく単純な残高の保存則(勝手にアカウントの残高が他に支払われない)などは コントラクトが単純であれば一部は自動的に証明できそうです。 もちろん、残高の保存を意図していないコントラクトでは、 残高の保存則は証明できません。ただ、コントラクトを書いてそれを投げると、 これはちゃんと停止するよ、これは残高を使わないよ、とわかる範囲で 自動的に検証してくれるシステムがあれば嬉しいですね。

その他の無根拠な明るい言説

誤解: 😵< TezosにXXXがもう直ぐ入るからヤッター!

誤解: 😵< XXXがTezosを上場決定オメデト!

眉に唾をつけましょう。私ならまずソースを確認します。

「TezosにはXXXを採用することもできるね」「XXXがTezosの上場を検討中」 という英語の一次ソースの文章が、いつの間にか「TezosはXXXを採用した!!」 「XXXがTezos上場決定!」という日本語に変わって流布されるのは、ほんと多いです。

これが英語を読めないので行間を希望的観測で埋めているのか、 嘘でもなんでもいいから値段を上げたいだけの意図的なツリなのかはわかりませんが、 中の人が知らないことが「決定」されているのはよく見られます。

実際に実装に入っていないものは、もし「採用される!!」という文章を見ても、 採用される予定があるかは分からない、くらいに割り引いて読むほうが安全です。

例えば、仮にですよ、ゼロ知識証明ライブラリへのOCamlインターフェースがレポジトリに入ったからといって、 実際にそれについて中の人から何か発表があったとか、でもない限り、 実際にそれを使ったコードを見るまでは、まあそういうこともあるかもしれないね、 という感じで暖かく見守る方が健全です。 (なお、Twitterアカウント名に”tezos”という文字が入っているものは山ほどありますが、 そのほとんどは公式のものではありません。わりと適当な発言をしたり、適当な発言をRTしている アカウントは多いです。)

以下に私が信用している情報元を列挙しておきます

ここから紹介されているものは大体信用できます。

まとめ

以上です。どの暗号通貨でも、明るいニュースが流れるのは良いことだと思いますが、 できれば、正しい情報が流れてほしい…正しい理解をされたい方は、どうか一次情報を 当たっていただければ、と思います。