什么是以太坊?
以太坊经常被称为“世界计算机”。
从计算机科学角度来看,以太坊是一个具备确定性但实际上却没有边际的状态机。
特点:1.具有一个全球范围可访问的单体状态。
2.一个执行状态更改的虚拟机。
从更加实际的角度看,以太坊是一个开源的,全球去中心化的计算基础架构,可执行称为智能合约的程序。使用区块链同步和同步系统状态,借助以太币这种数字货币来计量并控制程序执行的资源开销。
以太坊与比特币的比较
以太坊跟其他公共区块链有很多共同点:
- 一个连接参与各方的点对点网络
- 一个用于同步状态的拜占庭容错共识算法(POW)
- 使用数字签名和哈希等密码学原理
- 一种数字货币(以太币)
以太坊的主要目的是成为“世界计算机”(通用可编程区块链)。以太币的目的是作为一种效用货币来支付使用以太坊这个“世界计算机”所产生的花费。
区块链的组件
一个公开的公共区块链通常包括以下组件:
- 一个连接参与各方的点对点网络,用于传播交易和区块数据包,基于标准的“gossip”协议。gossip协议(流行病协议,流言算法)
- 以交易形式体现的消息,代表状态的转换。(即任何动作以交易的形式发出)。
- 一组共识规则,用于管理构成交易的内容以及实现有效的状态转换。
- 一个状态机,根据共识规则处理交易。
- 一组串联在一起的、由加密算法保证其安全的区块,这些区块是所有已验证和已接受的状态转换的记录日志。
- 一个共识算法,用于在区块链上实现控制的去中心化,这类算法通过强制参与者之间的合作以实现共识规则的有效执行。
- 在博弈论上合理的激励方案(例如:工作量证明(POW)、区块奖励、权益证明(POS)等),以在开放环境中经济地保护状态机。
- 一个或多个开源软件实现(‘客户端’,如:Geth)
区块链特点:开放、公共、全局、去中心化、中立、抗审查性。
以太坊的诞生
由于比特币对数据储存的类型和规模有特殊的要求,这些要求限制了在比特币之上作为第二层解决方案可以运行的应用类型,程序员所构建的应用只能建立在这些有限的变量,交易类型和数据之上,无法发挥公共区块链的众多优势。对于需要更多自由度和更复杂的应用,从头开始实现一个新的区块链是唯一的选择。
2015年7月30日,以太坊的第一个区块被挖矿成功。“世界计算机”开始为全世界服务。
以太坊的四个阶段
- 区块高度:0
Frontier(前沿版本):以太坊的初始阶段,持续时间为2015年7月至2016年3月。
- 区块高度:200 000
Ice Age(冰河期):引入直输难度增加的硬分叉,以便在准备就绪时激励过度到权益证明(POS)
- 区块高度:1 150 000
Homestead(家园版本):以太坊的第二个阶段,与2016年3月发布。
- 区块高度:1 192 000
DAO:一次硬分叉,用于补偿被攻击的DAO合约受害者,并导致“以太坊”和“以太坊经典”分成两个相互竞争的系统。
- 区块高度:2 463 000
Tangerine Whistle(蜜桔前哨):一次硬分叉,用于改变某些I/O密集型操作的gas计算,并消除能够利用这些操作的低gas成本的拒绝服务(DoS)攻击。
- 区块高度:2 675 000
Spurious Dragon(伪龙):一个用于解决更多DoS攻击途径的硬分叉,以及另一次状态清除。同时也提供了针对重放攻击的保护机制。
- 区块高度:4 370 000
Metropolis Byzantium(大都会阶段):这是以太坊的第三个阶段,于2017年10月推出。Byzantium是Metropolis 计划的两个硬分叉的第一个。
- 区块高度:7 080 000
Constantinople(君士坦丁堡):这是Metropolis 计划的两个硬分叉的第二个。
Metropolis阶段之后将是以太坊部署的最后阶段,代号为Serenity(宁静阶段)
以太坊:一个通用目的的区块链
最初的区块链,是指比特币背后的区块链,用于跟踪比特币及其所有权状态的。
可以把比特币看作一个分布式的共识状态机,交易导致一次全局范围的状态转换,改变了比特币的所有权。
状态转换受共识规则所限,在若干个区块被挖矿之后,允许所有的参与方对系统的状态达成一致的共识。
以太坊也是一个分布式状态机。但是不同于跟踪数字货币所有权的状态,以太坊跟踪的是一个通用目的的数据储存的状态转变。
通用目的的意思是任何可以表示为键值元组的数据。
以太坊拥有一个保存代码和数据的储存器。
以太坊可以把代码加载进状态机,然后运行这些代码,并把状态转换的结果保存在区块链上。
以太坊相比统用计算机的两个主要差异体现在:状态转换是由共识规则所控制的。状态是全局分布在一个共享的账本之上。
以太坊的组件
点对点(P2P)网络
以太坊运行在Ethereum Main Network上,这是一个通过TCP 30303端口寻址的网络。
共识规则
以太坊共识规则
交易
以太坊交易是一个网络消息,主要包括交易的发送方、接收方、价值和数据载荷。
状态机
以太坊的状态转换由以太坊虚拟机EVM处理,这是一个基于栈的虚拟机,执行bytecode(字节码)。被称为“智能合约”的EVM程序采用高级语言编写,并编译为通过EVM执行的字节码。
数据结构
以太坊的区块链以数据库(通常是Google的LevelDB)的方式保存在每一个节点上,区块链内包含了交易和系统的状态,经过哈希处理的数据保存在Merkle patricia Tree(默克尔帕克里夏树)数据结构之内。
共识算法
以太坊使用比特币的共识模型Nakamoto Consensus,它使用顺序单一签名块,由PoW加权重要性来确定最长链,从而确定当前状态。截止目前为止,共识算法已经转向代号为Casper的PoS加权投票系统。
经济安全性
以太坊在共识算法为PoW时使用名为Ethash的工作量证明算法
该算法已经被放弃并以切换到了PoS。
客户端
以太坊有多个可以相互交互的客户端软件实现,其中最广泛使用的是GO-Ethereum(Geth)和Parity。
LevelDB:一个轻量、开源的键值对储存库,它是单一用途的数据库,可以绑定到许多平台。
Merkle Patricia tree(默克尔帕特里夏树 ):以太坊协议中用于高效储存键值对的数据结构。
POS机制及其优点:理解POS机制
以太坊和图灵完备
以太坊能够执行储存在区块链上的程序的能力,是由EVM(以太坊虚拟机)的状态机完成的,能够从储存中读取和写入数据让这个状态机成为图灵完备的系统,也就是满足通用图灵机的定义。在给定无限内存的情况下,以太坊可以计算任何图灵机可以计算的算法。
以太坊的突破性创新在于,他把储存程序计算机这样的通用目的计算架构与去中心化区块链相结合,因此创建了一个分布式的单体状态世界计算机。无论以太坊程序运行在任何地方,都能够产生一致的公式状态,通过共识规则确保安全。
图灵完备(Turing complete):在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟单带图灵机,那么它是图灵完备的。
一个有图灵完备指令集的设备被定义为通用计算机。如果是图灵完备的,它(计算机设备)有能力执行条件转跳(if、while、goto语句)以及改变内存数据 ,如果某个东西展现出来图灵完备,那就有能力表现出可以模拟原始计算机。
图灵完备作为一种“功能”
图灵完备的语言或系统理论上能解决任何算法。但有可能陷入死循环。
以太坊是图灵完备的事实意味着任何复杂程序都可以由以太坊计算,但这种灵活性带来了一些安全和资源管理问题。
图灵完备的隐含意义
因为以太坊是图灵完备的,所以为了防止恶意合约造成资源浪费、内存消耗、CPU过载等问题,以太坊引入了名为gas的计量机制。
以太坊通过gas机制,在保证图灵完备计算的同时,限制了程序可以使用的资源量。
从通用目的的区块链到DAPP
以太坊开启了通用目的区块链用于构建多种应用的道路。以太坊的愿景拓展为用于去中心化应用(DAPP)的编程平台。DAPP代表了更为广泛的“智能合约”。一个DAPP只需要包括一个智能合约和一个Web用户界面。除此之外,还可以包括其他的去中心化组件,如:P2P形式的储存协议和平台、P2P形式的消息协议和平台 。
DApp是一个构建于开放的、去中心化的、点对点的基础设施之上的应用程序。
Web3
Web3代表Web应用新的愿景和关注点:从集中化和统一管理的应用,到构建于去中心化协议之上的应用。