上一篇 简单介绍了什么是区块链,也介绍了以太坊的产生和基本概念,其中提到: 以太坊 是一个去中心化的、开源的、图灵完备的、有智能合约功能的区块链开放平台。作为开放平台和”世界超级计算机”,以太坊以智能合约为核心为去中心化应用(DApp)建设提供了整套解决方案。这一篇我们将详细介绍什么是以太坊。

1. 为什么要学习以太坊

以太坊是目前最大的区块链开发平台,也是“世界计算机”。以太坊是区块链开发工作的必经之路,原因如下:

  • 以太坊是目前最大的区块链开发平台,拥有庞大的用户群和社区

  • 以太坊发展早,技术相对成熟,资料、文档众多

  • 以太坊生态体系完备,除了智能合约、DApp、DAO、DeFi,还提供了 ENS、Swarm等DApp构建所需技术体系

  • 以太坊减缓了区块链陡峭的学习曲线,以应用入手,使得区块链的开发上手快速、简单

  • 以太坊与 JavaScript 结合紧密,开发者学习难度小

总之,以太坊好比微信开放平台,DApp开发好比基于微信公众号、小程序的开发,我们不用太关注底层的东西,而是使用以太坊和微信已经提供好的功能来开发自己的DApp和微信公众号,只是以太坊是基于去中心化的区块链,而微信则是中心化应用。

2. 以太坊的诞生

上一篇 介绍了什么是区块链,其中提到, Vitalik Buterin (V神)在2013年发表了《以太坊:一个下一代智能合约和去中心化应用平台》,提出了以太坊的基本构想。

V神是比特币的狂热粉丝,他不断思考着如何扩展比特币和其智能合约协议 Mastercoin,并提出了一种可替代 Mastercoin 的专用合约语言的更灵活和脚本的智能合约机制,这只是一个他的初步构想,尽管比特币团队非常感兴趣,但是这种想法过于超前,而且与比特币的开发计划存在冲突,所以并没有得到支持。

V神

Vitalik Buterin

2013年12月,V神发表了 以太坊白皮书,勾勒出以太坊背后的思想:一个图灵完备的通用目的的区块链。以太坊白皮书发布后,不断有区块链爱好者向V神提交并反馈自己的想法,帮助其不断完善这个想法。其中,Gavin Wood(Mastering Ethereum的作者之一)在C++语言上对以太坊给与了极大地帮助,后来成为了以太坊的联合创始人和CTO,并编写了 以太坊黄皮书

Gavin Wood

Gavin Wood

白皮书与黄皮书
  • 白皮书由V神编写,旨在提出改进比特币背后区块链技术的一种构想,使其成为一种通用的、适用于多个方面而不仅仅是虚拟货币的区块链技术,这仅仅是一种理论,在以太坊的成长过程中得以逐步实现;

  • 黄皮书是由以太坊CTO Gavin Wood 博士编写,旨在定义以太坊的技术规范,详细描述了以太坊背后的技术实现细节,其中包含了大量的数学公式,比如,黄皮书定义了产生每一笔交易包含的通用字段、如何验证交易,以太坊虚拟机规范(EVM)等等。黄皮书着重于以太坊技术规范的制定,包含大量数学公式,专业性很强,比较难懂,这里[1]有一个面向普通大众的浅黄版本。

白皮书 vs. 黄皮书
Figure 1. 白皮书 vs 黄皮书

V神与Gavin Wood一起,不断完善以太坊的协议层和技术体系,逐步实现“可编程的、安全的、通用的区块链”这一目标。2015年7月30日,第一个以太坊区块被成功挖出,以太坊作为“世界计算机”正式运行并对外提供服务。

3. 以太坊发展的四大阶段

以太坊的发展并不是一帆风顺的,以太坊的发展整体上分为四个阶段 [2],代号分别为:Frontier(边疆)、Homestead(家园)、Metropolis(都会) 和 Serenity(宁静),每一个阶段都以"硬分叉"的方式发布,因此新版本不能与老版本兼容。并且,每一个阶段都在不断完善其新功能和安全性,比如2016年以太坊遭受DAO攻击,而分叉了 "以太坊经典" 和 "以太坊" 这样的相互竞争、并行的以太坊版本。

阶段和硬分叉按照区块高度编号并标注日期,包括:

  • Frontier: 区块高度为0,以太坊的初始阶段,持续时间为2015年7月30日至2016年3月。

  • Ice Age: 冰河期,区块高度为 200,000,引入指数难度增加的硬分叉,以便在准备就绪时将激励机制过度到Pos(权益证明)。

  • Homestead:家园,区块高度 1,150,000, 以太坊的第二阶段,发布于2016年3月。

  • DAO: 区块高度 1192000,以太坊遭受严重的攻击而不得不硬分叉,从而产生了 以太坊经典(Ethereum Classic, ETC) 和 以太坊(ETH) 两个相互竞争的系统 [3]

  • Tangerine Whistle:橘子口哨,区块高度 2,463,000,改变某些IO密集操作的燃气计算方法和清除拒绝服务攻击(利用这些操作的低燃气成本)累积状态的硬分叉。

  • Spurious Dragon:伪龙,区块高度 2,675,000,2016 年 11 月 22 日发生的另一次计划外的硬分叉,包括四项提案,用以解决一些攻击问题:

    • EIP 155: 简单重放攻击保护

    • EIP 160: 提升EXP操作码的费用

    • EIP 161: 状态树清理 (不变量保持替代)

    • EIP 170: 调整智能合约的最大字节数限制

  • Byzantium:拜占庭,区块高度 4,370,000,以太坊计划的第三阶段为“大都会”(Metropolis),而拜占庭是该阶段的前半部分。其中包括许多更新:增加4个新操作码和4条预编译;减少区块奖励;推迟冰河时代难度炸弹 (difficulty bomb)。

  • Constantinople / St. Petersburg:君士坦丁堡/圣彼得堡,区块高度 7,280,000,大都会的第二个阶段便是君士坦丁堡硬分叉,

  • Istanbul:伊斯坦布尔,区块高度 9,069,000, 此分叉更新了两条操作码、一条预编译和一些gas上的调整。

  • Muir Glacier:缪尔冰川,发生于区块高度 9,200,000,分叉只包含EIP-2384,目的是再一次推迟难度炸弹。

  • Serenity:宁静,以太坊线路图的下一阶段便是宁静,也被称作ETH2.0。这次更新将包括加入PoS信标链、分片链、eWASM等等。

4. 以太坊的组件

以太坊包括非常多的组件,包括:

P2P Network

以太坊在 以太坊主网 上运行,可以通过TCP端口 30303 访问,运行称作 ÐΞVp2p 的协议。

Consensus rules

以太坊的共识规则,在参考规范,即 黄皮书 中定义。

Transactions

Ethereum交易(transactions)是网络消息,包括发送者,接收者,值和数据负载等。

State Machine

以太坊的状态转移由 Ethereum虚拟机(EVM) 处理,这是一个执行 bytecode(机器语言指令)的基于栈的虚拟机。称为“智能合约”的EVM程序以高级语言(如 Solidity)编写,并编译为字节码以便在EVM上执行。

Blockchain

以太坊的区块链作为 database(通常是Google的LevelDB)存储在每个节点上,该区块链在称作 梅克尔帕特里夏树 Merkle Patricia Tree 的序列化哈希数据结构中包含交易和系统状态,。

Consensus Algorithm

以太坊目前使用名为 Ethash 的工作量证明算法,但有计划在不久的将来将过渡到称为 Casper 的权益证明(Proof-of-Stake)系统。

Clients

以太坊有几个可互操作的客户端软件实现,其中最突出的是 Go-Ethereum(Geth)和Parity。

5. 以太坊和图灵完备

图灵完备性 [4]:在可计算性理论中,如果一个数据操作规则系统(例如计算机的指令集、编程语言或元胞自动机)可以用来模拟任何图灵机(设计由英国数学家和计算机科学家艾伦图灵),那么它就是图灵完备的。这意味着该系统能够识别或决定其他数据操作规则集。图灵完备性被用作表达这种数据操作规则集的力量的一种方式。今天几乎所有的编程语言都是图灵完备的。

简单而言,图灵完备指无法在计算机上通过模拟的方式判断程序是否会终止。也就是说,图灵完备的程序可以在无限循环中一直运行。尽管我们不会编写无限循环的代码,但是一旦产生无限循环,则程序不能终止。在区块链中,这是非常危险的,主要原因再于,区块链上的智能合约程序运行时,一旦产生无限循环,则会无限消耗CPU、内存、电子等资源,这无疑是一场灾难。

以太坊是图灵完备的,为了解决上述资源浪费等问题,以太坊通过引入 gas 计量机制。当 EVM 在运行只能合约时,它会计算每一个执行指令的开销,以 gas 为单位,当智能合约的执行所消耗的 gas 超过了设定的上限(gas limit),则执行失败并回滚。通过这种机制,成功限制了智能合约可以使用的资源上限,保证图灵完备的同时也避免了资源的浪费。

在以太坊中,每一笔交易都需要消耗一定数量的 gasgas 是通过 ETH 以太币来支付的。因此,交易发起方需要设定 gas limitgas price (gas的单价) 并在发起交易时支付自己设定的 gas 费用,如果gas不足则交易失败并抛出 out of gas 异常,gas足够则交易成功,并会退还剩余的gas。

transaction gas
Figure 2. 交易gas费
  • Gas Price:交易发起人设定的gas单价,价格越高,交易越容易先被矿工打包

  • Gas Limit:交易发起人设定的完成这笔交易的gas上限,超过上限则交易失败,并返回 out of gas,一般 gas limit 不少于 21000个

  • Gas Used:实际使用的gas数量,乘以gas price就是实际消耗的gas费,剩余的会退还

  • Transaction Fee: 实际消耗的gas费

6. 以太坊与智能合约

智能合约是运行在以太坊虚拟机(EVM)上的程序,通过智能合约,开发者可以编程实现区块链程序运行逻辑,从而实现多个业务场景支持的目标。目前使用最广泛的智能合约编程语言是以太坊开发的 Solidity。智能合约具有如下特点:

  • 计算机程序:智能合约本质上是一系列计算机程序,它们通过字节码的形式运行在EVM中

  • 不可改变:智能合约的编写如同制造航天火箭,一旦发布不可改变,如果存在问题,只能重新发布新的智能合约

  • 确定性:智能合约的输出对于每一个调用它的人而言都是确定的

  • 单线程:智能合约的执行可以被视为在单线程环境中(基于堆栈),并发的执行智能合约毫无意义

  • 去中心化的世界计算机:所有EVM节点的计算机运行某个智能合约都有相同的初始状态和最终状态,看起来就如同一台计算机

7. 总结

以太坊是图灵完备的世界超级状态机,也是世界级的区块链开发平台,极大的减缓了区块链的开发学习曲线。


1. 黄皮书浅黄版本,面向普通读者,不包含大量数学公式的修订版: https://github.com/chronaeon/beigepaper/blob/master/beigepaper.pdf
2. 以太坊的发展阶段详细介绍可以看这里: https://www.ethereum.cn/the-history-of-ethereum-hard-forks

相关阅读