以太坊诞生
Vitalik Buterin在2013年发表了一篇名为《以太坊:终极智能合约与去中心化应用程序平台》的博客,他首次提出"以太坊"这个概念,并介绍了一种"图灵完备区块链"的理念。
什么是以太坊?
以太坊(Ethereum)是一个建立在区块链技术上的去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。我们姑且可以理解为以太坊是区块链里的Android,它是一个开发平台,让我们可以像基于Android Framwork一样基于区块链技术写应用。
在没有以太坊之前,写区块链应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法,共识机制,网络协议等等(很多山寨币就是这样,改改就出来一个新币)。
以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,只要专注于开发应用本身逻辑的智能合约,这样就可以大大降低开发难度。
以太坊与比特币的区别
比特币主要目标是提供一种无需中介的电子现金系统, 比特币的脚本语言相对简单和非图灵完备,只能执行基本的脚本和条件交易,主要用于支付和简单的合约。
以太坊以太坊支持图灵完备的智能合约,能够编写复杂的逻辑,用户可以基于合约编写去中心化应用程序(DApp)。已经广泛用于DeFi、DAO、NFT等领域。
除此之外,比特币采用 POW 共识,以太坊已经过渡到 POS 共识,比特币出块时间约为 10 分钟左右,以太坊为 12 秒。
关键概念
智能合约
以太坊网络上运行程序就称为智能合约,它和其他的程序一样,也是代码和数据(状态)的集合。
智能合约最早由尼克萨博在95年提出,它的概念很简单,就是将法律条文写成可执行代码。让法律条文的执行中立化,这个理念和区块链上的程序可以不被篡改、不被干预(只有有人触发交易,它将自动执行)的执行不谋而合,因此区块链引入了这个概念。了解更多参考 智能合约百科。
编程语言:Solidity
以太坊智能合约现在的主要编程语言是Solidity和Vyper,Solidity更成熟,他们编写的代码都会被编译为以太坊虚拟机字节码之后,再部署到以太坊网络。了解更多参考 Solidity百科 。
EVM
EVM(Ethereum Virtual Machine,以太坊虚拟机)是以太坊的核心组件之一。它是一种图灵完备的虚拟机,允许任何人通过智能合约在区块链上运行代码。
Solidity语言 与 EVM, 类似语 Java 与 JVM,由于 EVM 的存在,让以太坊成为一个全球无需可的计算机。
EVM 执行原理
- 合约编译/部署 :智能合约通常使用Solidity语言编写,然后编译成EVM字节码,编译后的字节码通过交易的方式部署到以太坊链。
- 执行交易:每次调用智能合约方法时,都会生成一个交易,这个交易包含了要执行的函数(选择器)以及相关的输入数据。
- Gas 计算 :在EVM中,每条指令的执行都需要消耗一定的Gas。Gas 机制用于防止网络资源被滥用。每个交易发送者在发起交易时需要预先指定愿意支付的最大 Gas 量。
- 指令执行:EVM 以堆栈为基础架构,字节码被加载到 EVM 后,依次执行每条指令。这些指令可以进行算术运算、堆栈操作、存储操作、条件跳转等。
- 存储与内存:EVM 具有两种主要的存储区域:永久存储(Storage)和临时内存(Memory)。永久存储用于保存智能合约状态,存储在区块链上;临时内存用于在交易执行过程中存储中间数据,交易结束后会被清空。
- 结果返回:指令执行完毕后,EVM 返回执行结果。如果执行成功,状态改变和输出结果会被记录到区块链上;如果执行失败,则回滚所有状态变化,并返回错误信息。
- 账户状态更新:根据交易的执行结果,更新相关账户的状态(例如余额、存储数据等)。
EVM 执行过程中的关键点在于其去中心化和一致性。所有节点都运行相同的EVM代码,确保每个节点在处理同一交易时都能得到相同的结果。
EVM 是一个封闭沙盒环境,只能读取链内部的状态。
Gas 机制
在以太坊中引入了 Gas 作为驱动程序运性的燃料,如同汽车无法在燃料耗尽的情况下行驶,合约也不能在没有燃料费的情况下运行。而 Gas 与合约的复杂度和难度有关,复杂度越高的合约其所需支付的 Gas 也就越高。
在交易时,需要使用以太币支付燃料费(也称手续费或交易费)。手续费是用于执行某些操作的燃料数量(Gas),乘以每单位燃料的成本(Gas price) 。如果网络拥挤并且许多用户都在参与交易,Gas price 就会上涨。相反,如果交易量少,Gas price 也会下降。
在 EIP-1559 升级后,燃料费分为两部分:base fee
和 priority fee
(小费)。Base fee
由协议设定,并被系统燃烧掉,Priority fee
是小费,用来吸引验证者选择将你的交易添加到下一个区块。了解更多参考 Gas 百科。