鸵鸟区块链

第二! 他排中本聪与V神中间, 单靠文字就“打败”了敲代码的程序员!

区块链大本营 2019-06-19 14:25 5148
摘要:

他比V神更懂以太坊?

第二! 他排中本聪与V神中间, 单靠文字就“打败”了敲代码的程序员!

Andreas Antonopoulos 是谁?

他也许不是一个很好区块链发者,他对区块链的贡献也不在技术层面,但他真可谓是一位家喻户晓的区块链技术布道者。

在去年9月份 Strictly Crypto 网站上发布的一篇名为《The Most Influential Names In Crypto 2018》文章中,他被排到中本聪与V神中间,位列第二位。

究竟有多少人因他的影响开始了解区块链比特币这个庞大数字不得而知,但我们可以看一些能够统计的官方数字。

  • YouTube 上订阅者接近 17万,且每个视频都有上万的播放量;

  • Twitter 上也有48.5万关注者,推文竟然有2万+;

  • Facebook 上也有着接近3万的关注者

他还是一位高产的作家,有着奶牛一般的产量,著有包括《精通比特币》、《精通以太坊》和《精通区块链编程》等在内的15本区块链相关书籍。

姑且不说排名是否真实,但一定程度上也反映出,他在区块链领域的努力确实是被认可了。他有一种理解复杂技术细微差别的天赋,并以极其简单易懂的术语解释它们。

为什么 Andreas 写的技术书籍如此畅销?读完《精以太坊你就知道答案了,也许你会重新认识以太坊。

以太坊经常被称为“世界计算机”。但这到底是什么意思呢?让我们首先尝试从计算机科学的角度进行描述,接着通过与比特币和其他去中心化信息交换平台(也就是我们常说的区块链)技术的比较,从更加务实的角度分析以太坊的能力和特性。

从计算机科学的角度来看,以太坊是一个具备确定性但实际上却没有边际的状态机。它有两个特点:具有一个全球范围可访问的单体状态;还有一个执行状态更改的虚拟机。

从更加实际的角度来看,以太坊是一个开源的、全球去中心化的计算基础架构,可以执行称为智能合约的程序。它使用区块链同步和保存系统状态,借助以太币这种数字货币来计量并控制程序执行的资源开销。

以太坊平台使得开发者可以构建强大的去中心化应用,并且内建了经济性的功能。在提供高可用性、可审计性、透明和中立等特性的同时,减少或消除了审查、第三方介入和对手方风险。

以太坊与比特币的比较

很多人在接触以太坊之前,已经对数字货币有一定的了解,比如曾接触过比特币。以太坊跟其他公共区块链有很多共同点:一个连接参与各方的点对点网络、一个用于同步状态的拜占庭容错共识算法(工作量证明)、使用数字签名和哈希等密码学原理、一种数字货币(以太币)。

然而,在许多方面,以太坊的目的和结构都与之前的开放式区块链(包括比特币)截然不同。

以太坊的主要目的不是成为数字货币的支付网络。虽然以太币本身对于以太坊的构成和运营是不可或缺的,但以太币的主要目的是作为一种效用货币来支付使用以太坊这个“世界计算机”所产生的花费。

与具有非常有限的脚本语言的比特币不同,以太坊被设计为通用可编程区块链,它的虚拟机能够执行任意和无限复杂的代码。比特币的脚本语言被故意限制为对简单的支付条件的真/假判断,以太坊的语言是图灵完备的,这意味着以太坊可以直接用作通用目的的计算机。

区块链的组件

一个公开的公共区块链通常包含以下组件:

  • 一个连接参与方的点对点网络,用于传播交易和区块数据包,基于标准“gossip”协议。

  • 以交易形式体现的消息,代表状态的转换。

  • 一组共识规则,用于管理构成交易的内容以及实现有效的状态转换。

  • 一个状态机,根据共识规则处理交易。

  • 一组串联在一起的、由加密算法保证其安全的区块,这些区块是所有已验证和已接受的状态转换的记录日志。

  • 一个共识算法,用于在区块链上实现控制的去中心化,这类算法通过强制参与者之间的合作以实现共识规则的有效执行。

  • 在博弈论上合理的激励方案(例如,工作量证明、区块奖励),以在开放环境中经济地保护状态机。

  • 上述一个或多个开源软件实现(“客户端”)。

这些组件基本上都包含在一个单独的客户端软件中。例如,在比特币中,Bitcoin Core 开源项目开发了比特币客户端的参考实现,名为 bitcoind。相比参考实现,以太坊拥有一个参考标准—采用数学方式描述整个系统的黄皮书(详见后文的“扩展阅读”一节)。现有的很多以太坊客户端,都是根据黄皮书中的参考标准实现的。

过去,我们使用区块链来代表上述所有组件,这是对实现以上特点的技术的笼统描述。今天,市场上存在大量具有不同属性的区块链项目。我们需要一些修饰语来帮助我们理解区块链的特点,例如开放、公共、全局、去中心化、中立和抗审查性,以识别和理解这些区块链组件背后所浮现出的重要特性。

并不是所有的区块链都是一样的。当有人向你展示一个区块链时,你应该能够提出问题来明确这个区块链背后的含义。应该问清楚这个区块链所对应的上述每个组件的描述,以及这个区块链是否具备开放、公共等特征。

以太坊的诞生

所有伟大的创新都是为了解决具体的问题,以太坊也同样。当时,人们已经意识到了比特币背后这套体系的能力,并尝试在数字货币技术的基础上推广到更广泛的应用领域。但是开发者面临着一个难题:他们要么在比特币的大厦上添砖加瓦,要么就需要从头开始实现一个新的区块链。在比特币基础上构建意味着必须接受比特币网络的种种限制,并尝试找到解决办法。

比特币对数据存储的类型和规模有特殊的要求,这些要求限制了在比特币之上作为第二层解决方案可以运行的应用的类型。程序员所构建的应用只能建立在这些有限的变量、交易类型和数据之上,无法发挥公共区块链的众多优势。对于需要更多自由度和更复杂的应用,从头开始实现一个新的区块链是唯一的选择。但是从头开始实现一个新的区块链也意味着需要在基础架构、测试等领域白手起家。

2013年年末,一个年轻的程序员、比特币的狂热爱好者 Vitalik Buterin 开始思考未来如何扩展比特币和 Mastercoin(一个基于比特币之上的协议,提供初步的智能合约)。2013年10月,Vitalik 向 Mastercoin 团队提出了一个更具通用性的想法—可以用于替代Mastercoin专用合约语言的更灵活和脚本化(但还不是图灵完备)的合约机制。尽管 Mastercoin 团队很感兴趣,但是这个提议过于激进,以至于无法跟团队当前的开发计划吻合。

2013年12月,Vitalik 分享了一份白皮书,这份白皮书勾勒了以太坊背后的思想:一个图灵完备的通用目的的区块链。一些人阅读了白皮书并给 Vitalik 发回了反馈,帮助他逐步地完善这个想法。

本文的两个作者都收到了 Vitalik 的白皮书,并提出了反馈。Andreas M. Antonopoulos 对这个想法非常着迷,并向Vitalik提出了很多问题,这些问题包括使用独立的区块链来实现智能合约执行的共识规则,以及图灵完备编程语言背后的含义,等等。Andreas怀着巨大的兴趣持续关注着以太坊的发展,但由于忙于《Mastering Bitcoin》一书的编写工作,在此之后并没有直接参与项目。Gavin Wood 博士是最早接触 Vitalik 并在 C++ 编程领域提供帮助的人。 Gavin 成为以太坊的联合创始人、联合设计师和以太坊基金会的 CTO。

Vitalik 在《以太坊史前回忆》一文(http://bit.ly/2T2t6zs)中写道:

“当时以太坊协议还只是我一个人的创意。但从那时起,新的参与者开始加入,Gavin Wood 在协议层的贡献是最显著的。

有些人把以太坊看作一个可编程的数字货币平台,基于区块链的合约,根据事先约定的规则持有和转移数字资产,为了改变这种看法,Gavin 起了很大作用,他使人们相信以太坊将是一个通用目的的计算平台。这起源于一些关注点和术语的微妙变化,稍后随着“Web 3”概念的深入人心而更具影响力。Web 3 把以太坊视为去中心化技术的一部分,去中心化技术的另外两个重要组成部分是 Whisper 和 Swarm。”

从2013年12月开始,Vitalik 和 Gavin 重新定义和打磨这些想法,一同构建了以太坊今后的协议层。

以太坊的创始人都认为区块链不应该针对某个特定的目的,而是通过实现可编程性来支持更广泛的应用类型。这个想法就是,使用类似以太坊这样的通用目的区块链技术,开发者不必构建点对点网络、区块链、共识算法等基础设施,就可以开发自己的应用。以太坊平台的目的是把这些细节抽象化,提供一个确定性的、安全的编程环境,用于去中心化的区块链应用程序。

与Satoshi类似,Vitalik 和 Gavin 并没有发明一种新的技术,而是通过一些新奇的方式,把一些新的想法和发明与现有的技术相结合。随后,他们向全世界展示了这些想法的一个原型实现。

以太坊的创始人花了数年时间构建和完善这个愿景。2015年7月30日,第一个以太坊区块被挖矿成功。“世界计算机”开始为全世界提供服务。

Vitalik Buterin 在2017年9月撰写了一篇名为《以太坊史前回忆》的文章,以第一人称描述了以太坊早期发展的精彩历程。

你可以在这里阅读这篇文章:

http://vitalik.ca/general/2017/09/14/prehistory.html。

以太坊的四个开发阶段

以太坊的开发计划分为四个不同的阶段,每个阶段都会发生重大变化。阶段以“硬分叉”的方式发布,硬分叉意味着这次发布所做出的改变将无法后向兼容之前的旧版本。

四个主要发展阶段的代号为Frontier、Homestead、Metropolis和Serenity。到目前为止(或计划)发生的过渡性硬分叉代号为 Ice Age、DAO、Tangerine Whistle、Spurious Dragon、Byzantium 和 Constantinople。开发阶段和过渡性硬分叉都显示在以下时间轴上,按照区块高度编号的方式来标注日期:

区块高度:0

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

区块高度:200000

Ice Age:引入指数难度增加的硬分叉,以便在准备就绪时激励过渡到权益证明(PoS)。

区块高度:1150000

Homestead:以太坊的第二阶段,于2016年3月发布。

区块高度:1192000

DAO:一次硬分叉,用于补偿被攻击的 DAO 合约的受害者,并导致“以太坊”和“以太坊经典”分成两个互相竞争的系统。

区块高度:2463000

Tangerine Whistle:一次硬分叉,用于改变某些I/O密集型操作的 gas 计算,并消除能够利用这些操作的低 gas 成本的拒绝服务(DoS)攻击。

区块高度:2675000

Spurious Dragon:一个用于解决更多 DoS 攻击途径的硬分叉,以及另一次状态清除。同时也提供了针对重放攻击的保护机制。

区块高度:4370000

Metropolis Byzantium:这是以太坊的第三个阶段,于2017年10月推出。Byzantium 是 Metropolis 计划的两个硬分叉中的第一个。

在 Byzantium 分叉之后,还有一个 Metropolis 阶段规划的硬分叉:Constantinople。Metropolis 阶段之后将是以太坊部署的最后阶段,代号为 Serenity。

以太坊:一个通用目的的区块链

最初的区块链,也就是比特币背后的区块链,是用于跟踪比特币及其所有权状态的。你可以把比特币看作一个分布式的共识状态机,交易导致一次全局范围的状态转换,改变了比特币的所有权。状态转换受共识规则所限,在若干个区块被挖矿之后,允许所有的参与方(最终)对系统的状态达成一致的共识。

以太坊也是一个分布式状态机。但是不同于跟踪数字货币所有权的状态,以太坊跟踪的是一个通用目的的数据存储的状态转变。通用目的的意思是任何可以表示为键值元组的数据。基于键值的数据存储可以保存任意复杂的内容,通过一些键来引用。例如,保存本文的信息可以通过文章名来引用。

在一些通用计算机中的RAM数据存储模型就是采用同样的方式。以太坊拥有一个保存代码和数据的存储器,使用区块链来跟踪这个存储器随着时间的变化。就像通用目的存储程序计算机一样,以太坊可以把代码加载进状态机,然后运行这些代码,并把状态转换的结果保存在区块链上。

以太坊相比通用计算机的两个主要差异体现在:状态转换是由共识规则所控制的,状态是全局分布在一个共享的账本之上。如果能够基于共识规则来创建一台全局计算机,那么可以追踪任何复杂的状态变化并对状态机进行编程,这会带来什么?以太坊对这个问题提出了它的答案。

以太坊的组件

前文“区块链的组件”中所描述的内容,在以太坊中所对应的组件如下:

点对点(P2P)网络

以太坊运行在 Ethereum Main Network 上,这是一个通过 TCP 30303端口寻址的网络,网络层运行的协议名为 Vp2p。

共识规则

以太坊的共识规则,由以太坊黄皮书中的参考标准进行精确定义。

交易

以太坊交易是一个网络消息,主要包含交易的发送方、接收方、价值和数据载荷。

状态机

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

数据结构

以太坊的区块链以数据库(通常采用 Google 的 LevelDB)的方式保存在每一个节点之上,区块链内包含了交易和系统的状态,经过哈希处理的数据保存在 Merkle Patricia Tree 数据结构之内。

共识算法

以太坊使用比特币的共识模型 Nakamoto Consensus,它使用顺序单一签名块,由 PoW 加权重要性来确定最长链,从而确定当前状态。但是,有计划在不久的将来转向代号为 Casper 的 PoS 加权投票系统。

经济安全性

以太坊当前使用名为 Ethash 的工作量证明算法,这个算法迟早将被放弃,并切换到 PoS。

客户端

以太坊有多个可以互相交互的客户端软件实现,其中最广泛使用的是 Go-Ethereum(Geth) 和 Parity。

以太坊和图灵完备

只要阅读与以太坊有关的材料,你就会立刻听到“图灵完备”这个术语。大家都说以太坊不同于比特币,是一个图灵完备的系统。这到底是什么意思呢?

“图灵完备”一词来源于被称为计算机科学之父的英国数学家阿兰·图灵。1936年,图灵创建了一个数学模型之上的计算机,这个计算机包含操作符号的状态机,可以从连续的内存(例如无限长度的磁带)中读取和写入这些数据。

在这个构想之下,图灵进一步探索关于通用可计算性这个问题的数学基础,这也就意味着求证是否任何问题都可解(图灵的研究试图给出否定答案)。图灵证明了有一类问题是不可解的,特别是著名的停机问题(即给定任意程序和输入,试图证明程序最终是否会停止运行)是不可解的。

阿兰·图灵随后定义了一个名为图灵完备的系统,这个系统可以用来模拟所有的图灵机。这类系统被称为通用图灵机。

以太坊能够执行存储在区块链之上的程序的能力,是由被称为EVM的状态机完成的。能够从存储中读取和写入数据让这个状态机成为图灵完备的系统,也就是满足通用图灵机的定义。在给定无限内存的情况下,以太坊可以计算任何图灵机可以计算的算法。

以太坊的突破性创新在于,它把存储程序计算机这样的通用目的计算架构与去中心化区块链相结合,因此创建了一个分布式的单体状态世界计算机。无论以太坊的程序运行在任何地方,都能够产生一致的共识状态,通过共识规则确保安全。

图灵完备作为一项“功能”

听到以太坊的图灵完备概念,你可能首先想到这是针对那些“图灵不完备”系统的一种补充功能。其实,恰恰相反。要实现一个“图灵不完备”的系统,才是需要足够的努力才能做到的事情。即使是最简单的状态机,都是满足图灵完备要求的。实际上,已知的最简单的图灵完备状态机只需要4个状态,使用6种符号,其中的状态定义只有22个指令长度。有时,系统被发现“碰巧是图灵完备的”。

由于我们之前提到的停机问题,在公共区块链等开放式访问系统中,图灵完备是非常危险的。例如,现代打印机是图灵完备的,如果向打印机发送特殊格式的文件,可以导致打印机陷入死循环并一直运行。以太坊是图灵完备的事实意味着任何复杂程序都可以由以太坊计算。但这种灵活性带来了一些棘手的安全和资源管理问题。陷入死循环的打印机可以关闭并再次打开,但是这对于公共区块链却是不可能的。

图灵完备的隐含意义

图灵指出,人们无法通过在计算机上模拟的方式来判断程序的执行是否会终止。简单来说,在真正运行程序之前,人们无法预测程序的执行路径。图灵完备的系统可以在无限循环中运行,这是对一个不终止程序的极简描述方式。创建一个始终循环不退出的程序并不是什么难事。但是由于程序起始条件和代码之间的复杂交互,那些无意中陷入的死循环却可能突然出现。

在以太坊中,这意味着一个挑战:每一个参与以太坊的节点(客户端)都必须验证每一个交易,运行交易所调用的任何智能合约。但是根据图灵的理论,在真正运行合约之前,以太坊实际上无法预先判断一个合约是否会运行终止,或者它需要运行多久,也许这个合约会陷入死循环一直运行。无论是程序中的瑕疵,还是故意为之,智能合约都可能在一个节点试图验证它的时候永远不停地执行下去,这也就造成了一种 DDoS 攻击的后果。

相比于可能几个毫秒就能够验证和执行完的正常智能合约,这类永远运行的恶意合约会造成资源浪费、内存消耗、CPU 过载等,这就是浪费节点的资源。对于一台世界计算机而言,一个滥用资源的程序可能会蔓延到所有的节点之上,也就是对“全球”资源的浪费。如果无法提前预估,那么以太坊如何防止智能合约过度使用资源呢?

为了应对这个挑战,以太坊引入了名为 gas 的计量机制。EVM在执行智能合约时,它会仔细地计算每一个执行指令(计算量、数据访问,等等)。每一个指令都有一个预先定义好的开销,以 gas 为单位。当以太坊交易触发了智能合约的执行时,交易中必须包含这个智能合约执行过程中所需要的计算资源开销的上限。如果执行过程中的资源开销量超过了交易中指定的 gas 上限,那么 EVM 就会主动终止这个合约的执行。以太坊通过 gas 机制,在保证图灵完备计算的同时,限制了程序可以使用的资源量。

接下来的问题是,如何在以太坊世界计算机上获得 gas 以支付计算开销?你不会在任何交易所找到 gas。它只能作为交易的一部分购买,并且只能通过以太币购买。以太币需要与交易一起发送,并且需要明确标记 gas,以及可接受的 gas 价格。就像在加油站一样,gas 的价格也不固定。为交易而购买 gas,然后执行计算,并将任何未使用的 gas 退还给交易发送方。

从通用目的的区块链到 DApp

以太坊开启了通用目的区块链用于构建多种应用的道路。很快,以太坊的愿景扩展为用于去中心化应用(DApp)的编程平台。DApp 代表了更为广泛的“智能合约”。一个 DApp 只需要包括一个智能合约和一个 Web 用户界面。更广泛地说,DApp 是一个构建于开放的、去中心化的、点对点的基础设施之上的 Web 应用程序。

DApp 至少包含:

  • 位于区块链之上的智能合约

  • Web 前端用户界面

除此之外,很多 DApp 还包括其他的去中心化组件,比如:

  • 去中心化(P2P 形式)的存储协议和平台

  • 去中心化(P2P 形式)的消息协议和平台

互联网的第三次浪潮

从2004年起,“Web 2.0”的概念日渐引起人们的关注,它描述了面向用户生成内容、响应式界面和交互性的 Web 革命。Web 2.0并不是一个技术标准,而更像是一个描述 Web 应用新特点的术语。

DApp 的概念正引导着万维网走向它的下一次革命,在每一个 Web 应用中都引入了带有点对点协议的去中心化能力。人们使用 web3 这个术语来描述这场革命,意味着 Web 的第三个“版本”。web3 这个词首先由 Gavin Wood 博士提出,它代表 Web 应用新的愿景和关注点:从集中化和统一管理的应用,到构建于去中心化协议之上的应用。

在后续的章节我们会介绍以太坊的 web3.js JavaScript 程序库,它建立了运行于浏览器中的JavaScript程序和以太坊区块链之间的桥梁。web3.js 程序库也支持名为 Swarm 的 P2P 存储网络和名为 Whisper 的 P2P 消息服务。使用支持这三种服务组件的 JavaScript 程序库,开发者可以在浏览器中构建完整的应用程序开发套件,用于开发 web3 DApp。

以太坊的开发文化

到目前为止,我们已经讨论了以太坊的目标,以及它与前期区块链实现(例如比特币)在技术层面上的差异。以太坊同样也有着非常与众不同的开发文化。

在比特币的世界中,开发是由相对保守的原则所指导的:所有的更改必须严格检查,确保不会导致现有系统之上的问题。绝大多数情况下,只有那些能够后向兼容的修改才被允许实现。现有的客户端可以选择与新版的系统保持一致,但是也可以选择不更新而仍旧维持运行。

相比之下,在以太坊的世界中,开发文化更着眼于未来,对应的口号是:move fast and break things。如果需要一项更改,就实现它,即使这意味着废弃之前的假设、破坏兼容性,或者导致客户端被迫更新。以太坊开发文化的特点是快速创新、快速变革,敢于进行前瞻性实验,即使牺牲后向兼容性也在所不惜。

对于开发者而言,这意味着你需要保持一定的灵活度,当底层的假设改变时,准备好重新构建基础架构。以太坊开发者所面对的最大挑战是,把自己的代码部署到不可变的系统上,还是部署到不断发展和演化的平台上,这是一对固有的矛盾。仅仅“升级”智能合约是不够的。你必须准备好重新部署,还要迁移用户、应用和资金,全部重新开始。

有趣的是,这也意味着构建一个更具自治性和较少依赖中心控制的系统的目标是很难实现的。自治性和去中心化需要以太坊这样的平台在未来数年中有更好的稳定性。为了适应平台的不断“演进”,开发者必须随时把自己的智能合约推倒重来,这也意味着随着时间的推移,仍旧必须保持一定程度的控制。

但是,从乐观的角度来看,以太坊的推进速度很快。发生“自行车棚”效应的机会很小:这意味着过于争论细节,例如纠结于如何在核电站后面建造自行车棚。如果你发起了这样的细节争论,可能会突然发现开发团队的其他人都改变了计划,他们放弃了“自行车”,转向研究“自动气垫船”。

最终,以太坊平台的开发和演化会放慢脚步,它的接口会变得相对固定。但与此同时,创新是核心的驱动因素。你最好跟上这个步伐,因为没有人会停下来等你。

为什么要学习以太坊?

区块链的学习曲线非常陡峭,因为这个领域聚集了众多不同的知识:编程、信息安全、密码学、经济学、分布式系统、点对点网络,等等。以太坊让这条学习曲线变得不那么陡峭,你可以很快上手。但是在这个看上去简单的环境之下,却包含了很多。当你开始学习并深入思考时,总会发现更深一层的复杂性和奇迹。

以太坊是我们了解区块链的一个优秀的平台。以太坊建立在大规模的开发者社区之上,比其他区块链平台都要快。相比其他的区块链实现,以太坊更是一个开发者区块链,由开发者构建,为开发者服务。

熟悉 JavaScript 应用的开发者可以很快掌握以太坊并且开发出可用的代码。在以太坊的早期,很多宣传T恤都印着类似“只需要五行代码就能创建一个以太坊代币”这样的口号。当然,这也是一柄双刃剑。编写代码相对容易,但是编写优质和安全的代码却困难重重。

加入鸵鸟社群交流,微信id:tuoniao02

来源:区块链大本营(blockchain_camp)

作者:Andreas Antonopoulos、Gavin Wood

声明: 鸵鸟区块链所有发布内容均为原创或授权发布,如需转载,请务必注明文章作者以及来源:鸵鸟区块链(微信公众号:MyTuoniao),任何不尊重原创的行为鸵鸟区块链都将进行责任追究!鸵鸟区块链报道和发布内容,不构成任何投资建议。

区块链大本营

区块链开发者的基地,从这里出发,让区块链回归技术与应用的本质!

248 篇 作品
50.25W 总阅读量