EVMとはなにか?

この記事は、以下の動画の内容を簡単に訳したものです。

What is the EVM? Ethereum Virtual Machine - Explained with Animations
Whiteboard Crypto

https://youtu.be/sTOcqS4msoU

EVMとは、イーサリアムバーチャルマシンの頭文字です。これは、クラウドコンピュータのようなもので、各ノードによって、操作されます。つまり、ひとつのコンピュータのことではなくて、世界中の何千ものコンピュータの集まりです。私やあなたのような人が操作しています。スマートコントラクトの取引を計算して出力するソフトウェアを動かしています。
クラウドコンピュータであるEVMは、リアルのコンピュータと同じような部分を持っています。メモリ、ストレージ、それから特定のコンピュータ番号です。リアルコンピュータのようにキーボードやマウスなどはありませんが、スマートコントラクトコードを読むために必要なものがあります。EVMはスマートコントラクトのトランザクションを処理するのに特化したコンピュータです。スマートコントラクトのコードはEVMがどう動くかを開発者が書いたものですが、開発者が書く言語はいくつかの異なるEVM言語が含まれています。しかし、一番多いのはソリディティです。ソリディティは、コードがどのように動くかを開発者が理解し、予測できるプログラミング言語です。しかし、実際には、コードは思いもかけないように動くことがあります。
でも、ソリディティは、EVMが読んだり、処理したりするコードではありません。EVMは0と1でできているバイコードと呼ばれるものを読みます。コンピュータは1と0で計算をするのを知っていますよね。開発者がスマートコントラクトを書くとき、彼らはそれをコンパイルしなければいけません。言い換えると、彼らは人間が読めて理解できるソリディティ言語をバイコードに変換して、EVMが読めるようにしなければいけません。人間は0と1でできたコードを読めないので、効率よくそれを読んでくれるソリディティが必要になりました。つまり、このコンパイルというプロセスは、人間が読むコードをマシンが読むコードに直すというものです。このプロセスは脆弱性がありますが、それはまた別の動画で解説します。
仮説的に言うと、ソリディティとバイコードの間には、オップコードという理論上の中間言語があります。オップコードはオペレーションコードのことで、指示のコードです。その指示はEVMがスマートコントラクトを実行するときに使うものです。オップコードが何をするか、知っている人もいるかもしれません。たとえばPUSH、mSTORE、ISZERO、CALLなどです。でも、オップコードは100以上あります。これらを理論上の中間言語と呼んでいるのは、オップコードは誰も書かないし、EVMはこれらを読むこともしません。これらはEVM上で動くときにお金を必要とします。もし、一つのスマートコントラクトにあるオップコードをすべて足し合わせて、それぞれのオップコードのコストを合計すると、あなたはスマートコントラクトを使うためにその合計のガス代、つまりお金を払うことになります。スマートコントラクトが複雑であればあるほど、EVMをより働かせることになるので、ガス代は高くなります。各スマートコントラクトは作業に分けてリスト化され、オップコードによって名前がついています。あるオップコードは他のよりコストがかかったり、他のよりも安かったりします。
EVMを使うブロックチェーンのおもしろいところは、プロジェクトやアプリケーションをEVMチェーンから他のEVMチェーンに移動することが簡単だということです。たとえば、あなたがポリゴンのアプリを持っているならば、ファントムやアバランチ、イーサリアムに乗り換えるのは簡単です。お客がいそうなところに移動できます。これは、RUST言語を使っているカルダノやソラナとは異なります(つまり、これらは移動できない)。開発者はチェーンを移動することで、大きなマーケットにリーチできるので、高い収益を得ることができます。
次は、EVMがどのようにトランザクションを処理するかについてお話しします。
EVMはトランザクションを一つ一つ順番に処理します。つまり、一度に処理できないということです。もし、処理が何かの理由で動かないとき、たとえばあなたが誰かに1イーサを送りたいけど、あなたのアカウントには3/4イーサしかないとき、EVMがトランザクションを実行しようとするとEVMはスキップすることになります。これを「EVMのステートがアップデートされた」と言います。EVMは情報データの集まりなので、EVMが処理する各トランザクションは、ただEVM上のデータを変更しているのです。このデータの集まりをステートと呼びます。一つの数字が変わっただけでも、「EMVのステートが変わった」と言います。各トランザクションはブロックチェーンのステートを変えます。もし、必要ならブロックチェーンのコピーを作ることはできます。そして、それを過去の時点のステートに戻すこともできます。
つまり、EVMが変更されると、あるいはEVMがトランザクションを処理すると、トランザクションの前と後にはそのEVMがどうだったか、という完全な記録があるということです。この記録のリストのことをブロックチェーンというのです。
まとめると、EVMというのは、同じトランザクションをしている何千もの各コンピュータの集合体です。この仮想コンピュータにはルールがあります。それは0と1でできたバイナリーコードを理解するということです。開発者たちはそこに書き込むために、英語で書かれた第二の言語、ソリディティを使います。バイナリーコードを理解しなくても、EVMにやってほしいことをさせることができます。ガス代は、EVMがどんな仕事(データを読む、書くなど)をしたか、どれだけその仕事をしたか(どれだけ読んだか、書いたか)で単純に計算されます。それだけの費用がかかったかを見るには、オップコードを見ます。それがどんな指示をしたかの総計で決まります。たとえば、2つの数字を付け加えると、1/1000ドルが加算されます。また、EVMによって処理されるよう提出されたトランザクションは順番に処理されるので、EVMが持つデータの集積、つまりステートが変わります。これらのデータが、トークンの収支になったり、ローンの支払いの総計になったり、チャットのメッセージになったりします。EVMは実によくできたアイデアですが、とりわけ、DeFi取引の処理に設計されたものです。

Web3の世界での大発明は、イーサリアムのEVMです。これが理解できると、かなりWeb3の世界が理解できますね!

この記事が気に入ったらサポートをしてみませんか?