1. 为什么要学习以太坊
以太坊是目前最大的区块链开发平台,也是“世界计算机”。以太坊是区块链开发工作的必经之路,原因如下:
以太坊是目前最大的区块链开发平台,拥有庞大的用户群和社区
以太坊发展早,技术相对成熟,资料、文档众多
以太坊生态体系完备,除了智能合约、DApp、DAO、DeFi,还提供了 ENS、Swarm等DApp构建所需技术体系
以太坊减缓了区块链陡峭的学习曲线,以应用入手,使得区块链的开发上手快速、简单
以太坊与 JavaScript 结合紧密,开发者学习难度小
总之,以太坊好比微信开放平台,DApp开发好比基于微信公众号、小程序的开发,我们不用太关注底层的东西,而是使用以太坊和微信已经提供好的功能来开发自己的DApp和微信公众号,只是以太坊是基于去中心化的区块链,而微信则是中心化应用。
2. 以太坊的诞生
上一篇 介绍了什么是区块链,其中提到, Vitalik Buterin (V神)在2013年发表了《以太坊:一个下一代智能合约和去中心化应用平台》,提出了以太坊的基本构想。
V神是比特币的狂热粉丝,他不断思考着如何扩展比特币和其智能合约协议 Mastercoin
,并提出了一种可替代 Mastercoin
的专用合约语言的更灵活和脚本的智能合约机制,这只是一个他的初步构想,尽管比特币团队非常感兴趣,但是这种想法过于超前,而且与比特币的开发计划存在冲突,所以并没有得到支持。
2013年12月,V神发表了 以太坊白皮书,勾勒出以太坊背后的思想:一个图灵完备的通用目的的区块链。以太坊白皮书发布后,不断有区块链爱好者向V神提交并反馈自己的想法,帮助其不断完善这个想法。其中,Gavin Wood(Mastering Ethereum的作者之一)在C++语言上对以太坊给与了极大地帮助,后来成为了以太坊的联合创始人和CTO,并编写了 以太坊黄皮书。
白皮书与黄皮书
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
),则执行失败并回滚。通过这种机制,成功限制了智能合约可以使用的资源上限,保证图灵完备的同时也避免了资源的浪费。
在以太坊中,每一笔交易都需要消耗一定数量的 Figure 2. 交易gas费
|
6. 以太坊与智能合约
智能合约是运行在以太坊虚拟机(EVM)上的程序,通过智能合约,开发者可以编程实现区块链程序运行逻辑,从而实现多个业务场景支持的目标。目前使用最广泛的智能合约编程语言是以太坊开发的 Solidity
。智能合约具有如下特点:
计算机程序:智能合约本质上是一系列计算机程序,它们通过字节码的形式运行在EVM中
不可改变:智能合约的编写如同制造航天火箭,一旦发布不可改变,如果存在问题,只能重新发布新的智能合约
确定性:智能合约的输出对于每一个调用它的人而言都是确定的
单线程:智能合约的执行可以被视为在单线程环境中(基于堆栈),并发的执行智能合约毫无意义
去中心化的世界计算机:所有EVM节点的计算机运行某个智能合约都有相同的初始状态和最终状态,看起来就如同一台计算机
7. 总结
以太坊是图灵完备的世界超级状态机,也是世界级的区块链开发平台,极大的减缓了区块链的开发学习曲线。