今日は歴史を目撃した。著名なDEXプロトコルCurveFinanceが攻撃を受け、複数のプールの流動性が奪われた。初歩的な調査によると、なんとスマートコントラクトコンパイラのVyperのせいだ!あまりにも信じられず、人々は思わず「すごい」と叫んでしまった。初歩的な統計では損失は5000万ドルを超え、CRVプラットフォームのトークンの瞬時価格は一度ほぼゼロに近づいた!

技術を知らない友人に簡単に説明すると、私たちがブロックチェーンを使用する際、多くの場合はブロックチェーン上で実行されるコードとやり取りしている。このコードは「スマートコントラクト」と呼ばれる。

イーサリアムのようなスマートコントラクトを主打ちとするパブリックチェーンには、開発者がアプリケーション(dApp、分散型アプリ)を作成して実行できるためのスマートコントラクトの標準コードが用意されている。例えば、UniswapやCurveなどは、イーサリアム上で動作するdAppアプリケーションである。

コンピュータが動作しやすく、ストレージスペースを節約するため、ブロックチェーン上に保存される標準コードは、機械語に非常に近いコンパクトなバイナリ数字であり、人間が直接読み書きするのはあまり便利ではない。

アプリケーションのオープンをより便利にするために、多くの人間が読み書きしやすい「高級言語」を発明してプログラムを書くために使った。イーサリアム上ではかつて三種類の高級言語が存在した。同じ文法のLISP言語は流行せず、一つはPython言語に似ていて、Vitalik(イーサリアム創設者)が推進したVyperと呼ばれるものだ。最後の一つはJavascript言語に似たSolidityと呼ばれるものである。

プログラマーはこれらの高級言語でスマートコントラクトプログラムを作成した後、イーサリアムブロックチェーンが実行できる「機械語」、つまり標準コードに「翻訳」するための「コンパイラ」と呼ばれるツールプログラムを使用する必要がある。

明らかに、異なる高級言語はそれぞれ異なるコンパイラを持つ。これは理解しやすい。日本語の翻訳と英語の翻訳は明らかに異なる。この悪さは、このコンパイラ/翻訳者にある。

今回のCurve攻撃は、Curveの一部プールが使用していたVyperコンパイラの特定バージョンに欠陥があったためだ(疑わしいが、さらなる調査中)。これは、あなたが日本語で「お酒を飲みたい」と言ったのに、翻訳者が中国語に翻訳する際に「カニを食べたい」と翻訳してしまったようなものだ。あまりにもおかしい。

幸いなことに、このVyperの普及度はそれほど高くなく、現在イーサリアムと互換性のあるチェーンでは、最も使われているのはやはりSolidityだ。英語の翻訳者は比較的明確で、翻訳ミスはなかった。有難いことだ。

DEXのトップであるUniswapは、最も初期の頃、創設者のHaydenがVyper言語でコードを書いていた。幸運なことに、その後Haydenは専門のCTOを雇い、コードをSolidityに変更した。そのため、今回のVyperコンパイラの問題でUniswapは無傷であった。一方で、大量にVyper言語を使用しているCurve Financeは被害を受けた。

この欠陥が引き起こした問題は古典的な「再入問題」だ。遥か昔、2015年にThe DAO事件が直接的にイーサリアムのハードフォークを引き起こし、ETHとETCに分裂したのもこの再入問題で、まさに歴史の呪いだ!

しかし、当時のThe DAOの再入問題は高級言語のレベルで発生した。つまり、あなたの英語が間違っていて、本来飲みたかったお酒をカニを食べたいと言ってしまったということだ。翻訳者は間違っていなかった。

そして今回のCurve事件で恐ろしいのは、あなたが正しいことを言ったのに、翻訳者が間違えてしまったことだ。あなたは理解できず(監査会社もコンパイル後のバイナリコードを監査しない)、結果として知らないうちに致命的なバグを引き入れてしまった!これは今日のDeFi業界やブロックチェーン業界全体に警鐘を鳴らすものだ!

今日すべて、コードを書く人からコードをレビューする人、第三者監査まで、誰もコンパイル後のバイナリコードを見ようとはしない。皆はコンパイラに問題がないことを当然視し、高級言語が正しく書かれていれば問題ないと考えている。

なぜ中本聡はBTCのスクリプトに強力すぎるスマートコントラクト機能を追加しなかったのか?それは、複雑さが高まり、取り返しのつかないエラーを引き起こすのを避けるためだ。誰かがBTCを保守的だと批判するが、数百万、数千万、あるいは数億ドルの資産の前では、慎重さや保守は決して過剰ではない。大多数の人は普通の人であり、数十万、数百万ドルの損失が誰の身に降りかかっても、それは致命的な一撃となる。

これもまた、ムーレイの法則の警告を浮き彫りにしている: 可能性のあるすべてのエラーの要素は、十分な時間が経てば必ずエラーが発生する。今回のVyperは幸運だった。未来は?もしSolidityに致命的な欠陥が現れたら?全てのDeFi、無数のプロトコル、数十億、数百億の資産が、砂上の楼閣の上に築かれ、一瞬で崩れ去ってしまう。非常に恐ろしいことではないか?

なぜ周期を超えるのが難しいのか?この夢の目標を追い求める前に、まず自分が「その日まで生き残れるか」を見つめ直すべきだ。多くの場面で、生き残ることが勝利であり、残った者が王となる。