主页 > imtoken国内版 > 《精通以太坊》——什么是以太坊?

《精通以太坊》——什么是以太坊?

imtoken国内版 2023-04-03 06:26:09

原文:什么是以太坊?

以太坊是“世界计算机”。 这是对以太坊平台最常见的描述之一。 但是,这是什么意思? 让我们尝试从以计算机科学为中心的描述开始,然后尝试通过对以太坊的功能和属性进行更实际的分析来解压缩它,同时将其与比特币和其他分布式账本技术(为简单起见,我们通常将其称为“区块链”)。

从计算机科学的角度来看,以太坊是一个确定性但实际上不受限制的状态机,具有两个基本功能; 第一个是全局可访问的单例状态,第二个是将更改应用于该状态虚拟机。

在更实际的层面上,以太坊是一种开源的全球分布式计算基础设施,可执行称为智能合约的程序。 它使用区块链来同步和存储系统状态,并使用一种称为以太币的加密货币来计量和限制执行资源成本。

以太坊平台使开发人员能够构建具有内置经济功能的强大去中心化应用程序。 它还减少或消除审查、第三方接口和交易对手风险,同时提供持续的正常运行时间。

与比特币比较

许多人来到以太坊之前都有使用加密货币的经验,尤其是比特币。 以太坊与其他开放式区块链共享许多共同元素:连接参与者的 P2P 网络、状态同步共识算法(工作量证明)、数字货币(以太币)和全球账本(区块链)。

区块链的组成部分

开放式公共区块链的组成部分(通常)是:

所有或大部分这些组件通常组合在一个软件客户端中。 例如,在比特币中,参考实现是由比特币核心开源项目开发并作为比特币客户端实现的。 在以太坊中,没有参考实现,而是参考规范,即黄皮书中系统的数学描述。 有许多客户端是根据参考规范构建的。

过去,我们使用术语“区块链”来指代上述所有组件,作为包含上述所有特征的技术组合的简称。 然而,今天,区块链这个词已经被营销人员和奸商淡化了,他们希望炒作他们的项目并为他们的初创企业获得不切实际的估值。 其实它本身是没有意义的。 我们需要限定符来帮助我们理解所讨论的区块链的特征,例如开放、公共、全球、去中心化、中立和审查制度,以确定这些组件允许的“区块链”系统的重要新兴特征。

并非所有的区块链都是平等的。 当你被告知某物是区块链时,你没有答案,但你需要开始问很多问题来弄清楚“区块链”的含义。 首先要求对上述组成部分的描述,然后询问这个“区块链”是否公开、公开等。

以太坊的发展

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

以太坊的目的主要不是数字货币支付网络。 虽然数字货币以太币是以太坊运营不可或缺的一部分,但以太币是使用以太坊平台支付公用事业费用的货币。

与脚本语言非常有限的比特币不同,以太坊被设计为一个通用的可编程区块链,运行一个能够执行任意和无限复杂代码的虚拟机。 比特币的脚本语言有意限制为对支出条件进行简单的真/假评估,而以太坊的语言是图灵完备的,这意味着它等同于可以运行理论图灵机可以运行的任何计算的通用计算机。

以太坊的诞生

所有伟大的创新都解决了实际问题,以太坊也不例外。 以太坊是在人们认识到比特币模型的力量并试图超越加密货币应用程序的使用而进入其他项目的时候构想出来的。 但开发人员面临一个难题:他们要么需要在比特币之上构建,要么启动一个新的区块链。 建立在比特币上意味着生活在网络的故意限制内并试图找到解决方法。 数据存储的有限类型和大小似乎限制了可以作为第二层解决方案运行的应用程序类型。 程序员需要构建仅使用一组有限的变量、事务类型和数据的系统。 对于需要更多自由、更大灵活性的项目,推出新的区块链是唯一的选择。

2013 年底,年轻的程序员和比特币爱好者 Vitalik Buterin 开始考虑进一步扩展比特币和 Mastercoin 的功能,Mastercoin 是一种覆盖协议,可扩展比特币以提供基本的智能合约。 2013 年 10 月,Vitalik 为 Mastercoin 团队提出了一种更通用的方法,允许灵活且可编写脚本(但不是图灵完备)的合约取代 Mastercoin 的专门合约语言。 虽然 Mastercoin 团队印象深刻,但该提案过于激进,不适合他们的发展路线图。

2013 年 12 月,Vitalik 开始分享一份概述以太坊背后理念的白皮书:一个图灵完备的可编程通用区块链。 数十人看到了这个早期草案并向 Vitalik 提供了反馈,帮助他随着时间的推移完善提案。

本书的两位作者都收到了白皮书的早期草稿并对其进行了评论。 Andreas M. Antonopoulos 对这个想法很感兴趣,并向 Vitalik 问了很多关于使用单独的区块链来执行智能合约执行共识规则的问题,以及图灵完备语言的含义。 Andreas 继续以极大的兴趣关注以太坊的发展,但直到很久以后,在撰写他的书“掌握比特币”的早期阶段才直接参与以太坊。 然而,Gavin Wood 博士是第一批接触 Vitalik 并提供帮助以提高他的 C++ 编程技能的人之一。 加文成为以太坊的联合创始人、联合设计师和首席技术官。

正如 Vitalik 在他的“以太坊史前史”中所说:

sitejianshu.com 什么叫以太坊_sitejianshu.com 以太坊以太经典那个好_什么叫以太坊

这是以太坊协议完全是我自己创造的时候。然而,从现在开始,新的参与者开始加入这一行列。
到目前为止,协议方面最突出的是Gavin Wood。

...

通过将以太坊作为构建可编程货币的平台,以及基于区块链的合约,可以保存数字资产并根据预先
设定的规则将其转移到通用计算平台,Gavin也可以在很大程度上归功于视觉的细微变化。
这开始于重点和术语的微妙变化,随后越来越强调“Web 3”集合,将以太坊视为
一组去中心化技术的一部分,另外两个是Whisper和Swarm,这种影响变得更强。

从 2013 年 12 月开始,Vitalik 和 Gavin 一起完善和完善这个想法,构建了成为以太坊的协议层。

以太坊的创始人考虑的不是用于特定目的的区块链,而是可以编程以支持各种应用程序的区块链。 这个想法是,通过使用像以太坊这样的通用区块链,开发人员可以编写他们的特定应用程序什么叫以太坊,而无需引导 P2P 网络、区块链、共识算法等的底层机制。以太坊平台旨在抽象这些细节并提供确定性和分散式区块链应用程序的安全编程环境。

就像中本聪一样,Vitalik 和 Gavin 不仅发明了一项新技术,他们还以新颖的方式将他们的新发明与现有技术相结合,并提供了源代码来向世界证明他们的想法。

创始人工作多年,建立和完善愿景。 2015 年 7 月 30 日,第一个以太坊区块被开采。 “世界计算机”开始服务于世界……

Vitalik Buterin 于 2017 年 9 月发表的文章“以太坊的历史”以迷人的第一人称视角审视了以太坊的最早时刻。

您可以继续阅读。

以太坊的四个发展阶段

以太坊的诞生是第一阶段的发布,称为“Frontier”。 以太坊的发展计划分为四个不同的阶段,每个新阶段都会引入重大变化。 每个阶段都可能包括子版本,称为“硬分叉”,它们以向后不兼容的方式更改功能。

四个主要的开发阶段代号为 Frontier、Homestead、Metropolis 和 Serenity。 中间硬分叉代号为“冰河世纪”、“DAO”、“橘哨”、“伪龙”、“拜占庭”和“君士坦丁堡”。 发生硬分叉的区块编号如下:

区块 #0

“Frontier”——以太坊的初始阶段,从 2015 年 7 月 30 日持续到 2016 年 3 月。

区块 #200,000

“冰河时代”- 一个引入指数级难度增加的硬分叉,促使过渡到股权证明。

sitejianshu.com 以太坊以太经典那个好_sitejianshu.com 什么叫以太坊_什么叫以太坊

区块 #1,150,000

“Homestead”——以太坊的第二阶段,于 2016 年 3 月推出。

区块 #1,192,000

“DAO”——逆转被黑客攻击的 DAO 合约并导致以太坊和以太坊经典分裂成两个相互竞争的系统的硬分叉。

区块 #2,463,000

“Tangerine Whistle”——更改某些 IO 操作的气体计算,并清除利用这些操作的低气体成本的拒绝服务攻击的累积状态。

区块 #2,675,000

“Spurious Dragon”——一个解决更多拒绝服务攻击媒介和另一个状态清理的硬分叉。 此外,还有重放攻击保护机制。

当前的状况

我们目前处于“大都会”阶段,计划作为代号为拜占庭和君士坦丁堡的两个硬分叉。 拜占庭于 2017 年 10 月生效,君士坦丁堡预计将于 2018 年年中生效。

区块 #4,370,000

“Metropolis Byzantium”——Metropolis 是以太坊的第三阶段,目前在撰写本文时,于 2017 年 10 月推出。拜占庭是 Metropolis 两个硬分叉中的第一个。

未来的计划

在 Metropolis 的拜占庭硬分叉之后什么叫以太坊,Metropolis 计划进行另一个硬分叉。 Metropolis 之后是以太坊部署的最后阶段,代号为 Serenity。

君士坦丁堡

大都会阶段的第二部分计划于 2018 年年中进行。 预计将包括切换到混合 POW/POS 共识算法,以及其他变化。

宁静

以太坊的第四个也是最后一个阶段。 Serenity 还没有计划的发布日期。

以太坊:通用区块链

原始区块链(比特币的区块链)跟踪比特币单位的状态及其所有权。 您可以将比特币视为分布式共识状态机,其中交易会导致全局状态转换,从而改变硬币的所有权。 状态转换受共识规则约束,允许所有参与者(最终)在挖掘几个区块后收敛于系统的共同(共识)状态。

以太坊也是一个分布式状态机。 然而,以太坊不仅跟踪货币所有权的状态,还跟踪通用数据存储的状态转换。 通常,我们指的是可以表示为键值元组的任何数据。 键值数据存储仅存储键引用的任意值。 例如,存储值“Mastering Ethereum”,由“Book Title”键引用。 在某些方面,这与通用计算机使用的随机存取存储器 (RAM) 数据存储模型的目的相同。 以太坊拥有存储代码和数据的内存,并使用以太坊区块链来跟踪内存随时间的变化。 与通用存储程序计算机一样,以太坊可以将代码加载到其状态机中并运行该代码,将由此产生的状态变化存储在其区块链中。 与通用计算机的两个主要区别是,以太坊状态更改由共识规则管理,并且状态在全球范围内分布在共享分类账上。 以太坊回答了这个问题:“如果我们可以跟踪任意状态并对状态机进行编程,创建一个在共识下运行的全球计算机会怎么样?”。

以太坊的组成部分

什么叫以太坊_sitejianshu.com 以太坊以太经典那个好_sitejianshu.com 什么叫以太坊

在以太坊中,所描述的区块链系统中的组件更具体地说:

P2P网络

以太坊在以太坊主网络上运行,可在 TCP 端口 30303 上寻址并运行称为 ÐΞVp2p 的协议。

共识规则

参考规范中定义的以太坊共识规则。

贸易

以太坊交易是一种网络消息,包括(除其他外)发送者、接收者、价值和数据有效负载。

状态机

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

区块链

以太坊的区块链作为数据库(通常是谷歌的 LevelDB)本地存储在每个节点上,该数据库在称为 Merkle Patricia Tree 的序列化哈希数据结构中包含交易和系统状态。

共识算法

以太坊目前使用一种名为 Ethash 的工作量证明算法,但计划在不久的将来过渡到代号为 Casper 的权益证明系统。

客户

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

进一步参考

以太坊黄皮书:

“褐皮书”:用不太正式的语言为更广泛的受众改写“黄皮书”:

ÐΞVp2p 网络协议:%C3%90%CE%9EVp2p-Wire-Protocol

以太坊虚拟机 Awesome 列表:(EVM)-Awesome-List

LevelDB 数据库(最常用于存储区块链的本地副本):

Merkle Patricia 树:

sitejianshu.com 什么叫以太坊_什么叫以太坊_sitejianshu.com 以太坊以太经典那个好

Ethash 工作量证明共识算法:

Casper 股权证明 v1 实施指南:

Go-以太坊(Geth)客户端:

Parity 以太坊客户端:

以太坊和图灵完备性

一旦开始阅读以太坊,您会立即听到“图灵完备”一词。 他们说,与比特币不同,以太坊是“图灵完备的”。 这到底是什么意思?

“图灵完备”一词以英国数学家艾伦图灵的名字命名,他被认为是计算机科学之父。 1936 年,他创建了一个由状态机组成的计算机数学模型,该状态机通过在顺序存储器(类似于无限长的磁带)上读取和写入符号来操纵符号。 有了这个结构,艾伦图灵继续为回答关于普遍可计算性的(否定的)问题提供数学基础,这意味着是否所有问题都可以解决。 他证明了存在一些不可计算的问题。 具体来说,他证明了停机问题(试图评估程序是否最终会停机)是无法解决的。

如果一个系统可以用来模拟任何图灵机,艾伦·图灵进一步将其定义为图灵完备。 这样的系统称为通用图灵机 (UTM)。

以太坊能够在称为以太坊虚拟机的状态机中执行存储的程序,同时向内存读取和写入数据,使其成为图灵完备系统,从而成为通用图灵机。 鉴于有限内存的限制,以太坊可以计算任何图灵机可以计算的算法。

以太坊的突破性创新是将存储程序计算机的通用计算架构与去中心化的区块链相结合,打造分布式单态(singleton)世界计算机。 以太坊程序“无处不在”,但会产生共识状态,由共识规则保证。

图灵完备性作为“特征”

听说以太坊是图灵完备的,您可能会得出结论,这是图灵不完备系统中某种程度上缺乏的功能。 相反,它恰恰相反。 约束系统使其不图灵完备需要大量集中精力。 即使是最简单的状态机也会出现图灵完备。 事实上,已知的最简单的图灵完备状态机(Rogozhin,1996)有 4 个状态并使用 6 个符号,状态定义只有 22 条指令长。

不仅可以在最简单的系统中实现图灵完备,而且受设计限制以致于图灵不完备的系统经常被发现是“意外的图灵完备”。 图灵不完备的约束系统很难设计,必须小心维护以保持图灵不完备。

可以在此处找到对“意外图灵完备”系统的有趣参考:

以太坊是图灵完备的事实意味着任何复杂的程序都可以在以太坊中计算。 但这种灵活性带来了一些棘手的安全和资源管理问题。

图灵完备性的含义

图灵证明,您无法通过在计算机上模拟来预测程序是否会终止。 简单地说,我们无法在不运行程序的情况下预测程序的路径。 图灵完备系统可以在“无限循环”中运行,这是一个(过于简单化的)术语,用于描述不会终止的程序。 创建一个运行永不结束的循环的程序是微不足道的。 但是由于起始条件和代码之间的复杂交互,可能会在没有警告的情况下出现无意的永无止境的循环。 在以太坊中,这提出了一个挑战:每个参与节点(客户端)必须验证每笔交易,运行它调用的任何智能合约。 但正如图灵所证明的那样,以太坊无法预测智能合约是否会终止,或者它会在没有实际运行的情况下运行多长时间(可能永远)。 无论是无意还是有意,都可以创建一个智能合约以在节点尝试验证它时永远运行,这实际上是一种拒绝服务攻击。 当然,在一个需要一毫秒验证的程序和一个永远运行的程序之间,存在无穷无尽的浪费资源的令人讨厌的资源占用、内存膨胀、CPU 过热程序。 在世界计算机中,滥用资源的程序会滥用世界资源。 如果无法提前预测资源使用情况,以太坊如何限制智能合约使用的资源?

为了应对这一挑战,以太坊引入了一种称为气体的计量机制。 当 EVM 执行智能合约时,它会仔细考虑每条指令(计算、数据访问等)。 每条指令都有预先确定的 gas 成本。 当一笔交易触发智能合约的执行时,它必须包含一定数量的gas,用于设置智能合约运行时可以消耗的计算上限。 如果计算消耗的 gas 量超过交易中可用的 gas 量,EVM 将终止执行。 Gas 是以太坊用来允许图灵完备计算同时限制任何程序可以消耗的资源的机制。

2015 年,攻击者开发了成本远低于应有成本的 EVM 指令。 这允许攻击者创建使用大量内存并需要几分钟来验证的事务。 为了应对这种攻击,以太坊不得不更改其气体计算公式,以在向后不兼容(硬分叉)的更改中获取某些指令。 但即使有了这一变化,以太坊客户也不得不跳过或浪费数周时间来验证这些交易。

从通用区块链到去中心化应用程序 (DApps)

以太坊最初是作为一种制作通用区块链的方式开始的,该区块链可以针对各种目的进行编程。 但很快,以太坊的愿景扩展为一个去中心化应用程序 (DApps) 编程平台。 DApps 代表了比“智能合约”更广阔的视角。 DApp 至少是一个智能合约和一个 Web 用户界面。 更广泛地说,DApp 是一种基于开放、去中心化、p2p 基础设施服务构建的 Web 应用程序。

DApp 至少包含以下内容:

sitejianshu.com 什么叫以太坊_sitejianshu.com 以太坊以太经典那个好_什么叫以太坊

此外,许多 DApp 还包括其他去中心化组件,例如:

提示 你可能会看到 DApps 拼写为 ÐApps。 Ð 字符是一个名为“ETH”的拉丁字符,暗指以太坊。 要显示此字符,请在 HTML 中使用十进制实体 #208,并使用 Unicode 字符 0xCE (UTF-8) 或 0x00D0 (UTF-16)。

万维网的发展

2004 年,“Web 2.0”一词开始流行,描述了 Web 向用户生成内容、响应式界面和交互性的演变。 Web 2.0 不是一个技术规范,而是一个描述网络应用新焦点的术语。

DApps 的概念旨在将万维网带入下一个自然演变,将点对点协议的去中心化带到网络应用程序的各个方面。 用于描述这种演变的术语是 Web 3,意思是 Web 的第三个“版本”。 由 Gavin Wood 首次提出,Web 3 代表了 Web 应用程序的新愿景和焦点:从集中拥有和托管的应用程序到基于分散协议的应用程序。

在后面的章节中,我们将探索以太坊 web3.js JavaScript 库,它将浏览器中运行的 JavaScript 应用程序连接到以太坊区块链。 web3.js 库还包括一个名为 Swarm 的 P2P 存储网络接口和一个名为 Whisper 的 P2P 消息服务。 通过在 Web 浏览器中运行的 JavaScript 库中包含这三个组件,开发人员可以使用完整的应用程序开发套件来构建 web3 DApps:

sitejianshu.com 什么叫以太坊_sitejianshu.com 以太坊以太经典那个好_什么叫以太坊

图片

图 1. Web3:一组用于下一代 Web 的去中心化应用程序组件

以太坊的发展文化

到目前为止,我们已经讨论了以太坊的目标和技术与之前出现的其他区块链(例如比特币)有何不同。 以太坊也有非常不同的开发文化。

在比特币中,开发遵循保守原则:所有更改都经过仔细研究,以确保现有系统不会崩溃。 在大多数情况下,只会为向后兼容而实施更改。 现有客户可以“选择加入”,但如果他们决定不升级,将继续运营。

相比之下,在以太坊,开发文化侧重于速度和创新。 口头禅是“快速行动,打破常规”。 如果需要更改,它将被实施,即使这意味着使以前的假设无效、破坏兼容性或强制客户端更新。 以太坊的发展文化具有快速创新、快速发展和乐于参与实验的特点。

对于作为开发人员的您来说,这意味着您必须灵活并准备好在一些基本假设发生变化时重建您的基础架构。 不要假设任何东西都是静态的或永久的。 以太坊开发人员面临的一大挑战是将代码部署到不可变的分类账与仍在快速发展的开发平台之间的内在紧张关系。 您不能简单地“升级”智能合约。 你必须准备好部署一个新的,迁移用户、应用程序和资金,然后重新开始。

具有讽刺意味的是,这也意味着构建具有更多自主权和更少集中控制的系统的目标无法实现。 在接下来的几年里,自治和去中心化将需要平台比以太坊更稳定。 为了“发展”一个平台,你必须准备好废弃并重启你的智能合约,这意味着你必须对它们保持一定程度的控制。

然而,从积极的方面来看,以太坊正在快速发展。 “自行车从链条上掉下来”的可能性很小——这个表达的意思是争论细节,比如如何在建筑物后面建造一个自行车棚。 如果你开始自行车掉链条,你可能会突然发现开发团队的其他成员已经改变了他们的计划并放弃了自行车,转而支持自动气垫船。 以太坊中很少有神圣原则、最终标准或固定接口。

最终,以太坊核心协议的发展会放缓,其接口也会变得固定。 但与此同时,创新是驱动原则。 你最好跟上,因为没有人会为你放慢速度。

为什么要学习以太坊?

区块链有一个非常陡峭的学习曲线,因为它们将多个学科结合到一个领域:编程、信息安全、密码学、经济学、分布式系统、p2p 网络等。以太坊让这个学习曲线不那么陡峭,所以你可以快速入门。 但是,在一个看似简单的环境的表面之下,还有更多。 当您学习并开始更深入地思考时,总会有另一层复杂性和惊奇。

以太坊是了解区块链的绝佳平台,它正在以比任何其他区块链平台更快的速度建立庞大的开发者社区。 与其他任何区块链相比,以太坊更像是为开发者打造的区块链。 熟悉 JavaScript 应用程序的开发人员可以进入以太坊并很快开始生成工作代码。 在以太坊的最初几年,经常会看到 T 恤衫宣布你可以用五行代码创建一个代币。 当然,这是一把双刃剑。 编写代码很容易,但编写良好且安全的代码却非常困难。

这本书会教你什么?

本书深入研究了以太坊并检查了每个组件。 您将从一个简单的交易开始,剖析它的工作原理,构建一个简单的合约,让它变得更好,并跟随它在以太坊系统中的旅程。

您将了解 Ethereum 的工作原理,以及它设计成现在这样的原因。 您将能够了解每个部分的工作原理,以及它们如何以及为何组合在一起。