当你作为 Solidity 开发者开始写 Ethereum 智能合约的时候,你会很快接触到一些概念像是EVM(Ethereum Virtual Machine),bytecode 和 ABI(application binary interface),如果你是一个 Javascript 开发者(就像我第一次学习代码的时候一样),这些专有名字可能对你来说并不陌生,你可能想知道在 Solidity 和 Ethereum 世界中,这些名字和你理解的意思一不一样。
这篇文章会从技术的角度去了解这三个概念,看完这篇文章以后,你会知道什么是 EVM,Bytecode 和 ABI,而且会了解怎么样在项目中快速生成和使用 bytecode 和 ABI。
VM 和 EVM
让我们从以太坊虚拟机(EVM)开始了解,首先先把 EVM 放在一边,理解什么是 VM。通俗的来讲,VM 也是一个能够在硬件上运行的软件,但是与其他软件不同的是,VM 主要是被设计来模拟硬件的。即这个软件是用来“假装”自己是一个硬件,就像音乐 App 是一个虚拟的播放系统一样,它不是一个物理的硬件,但是模拟了一个物理机器。
为什么我们需要虚拟机?答案是虚拟机可以有效地扩展,管理和升级软件运行所以来的基础设施。要使用 1000 个物理服务器的业务,你可能只需要使用 20 个然后在每一个物理服务器上跑 50 个虚拟机。你甚至可以让每一个虚拟机都运行不同的操作系统,比如一个虚拟机运行 Windows 服务器,第二个运行 Linux Debian,第三个运行 Gentoo Linux,然后第四个运行 ChromeOS!