主页 > 苹果手机怎么下载imtoken > web3学习:什么是以太坊

web3学习:什么是以太坊

苹果手机怎么下载imtoken 2023-10-13 05:12:04

以太坊是“世界的计算机”,这是对以太坊平台的常见描述。 这是什么意思? 让我们从以计算机科学为中心的描述开始,然后转向对以太坊的功能和属性进行更实际的解释,将其与比特币和其他分布式账本技术(为简单起见,我们经常使用“区块链”参考)进行比较。

从计算机科学的角度来看,以太坊是一个确定性但实际上无界的状态机,具有两个基本功能,第一个是全局可访问的单例状态,第二个是对状态虚拟机进行更改。

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

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

与比特币的比较

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

区块链的组成部分

开源、公共区块链通常包括以下组件:

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

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

并非所有的区块链都是平等的。 当你被告知某个东西是区块链时,你没有答案,你需要问很多问题来弄清楚“区块链”是什么意思。 先询问对上述组成部分的描述,再询问这条“区块链”是否表现出开源、公开等特征。

以太坊开发

以太坊的目标和构建在很多方面不同于以前的开源区块链,包括比特币。

以太坊的目的主要不是数字货币支付网络。 但是数字货币_ether_对于以太坊的运行来说既是不可或缺的,也是必不可少的,并且以太币也被认为是一种_实用货币_来支付使用以太坊平台的费用。

与脚本语言非常有限的比特币不同,以太坊被设计为一个通用的可编程区块链,运行一个能够执行任意和无限复杂代码的“虚拟机”。 比特币的脚本语言有意局限于简单的真/假消费条件判断,以太坊的语言是_Turing-complete_,也就是说它相当于一台通用计算机,理论上的图灵机可以运行的任何东西都可以运行。 计算。

以太坊的诞生

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

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

2013 年 12 月,Vitalik 开始分享一份描述以太坊背后理念的白皮书:一个图灵完备的可编程通用区块链。 数十人看到了这份初稿,并向 Vitalik 提供了反馈,帮助他改进提案。

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

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

当时的以太坊协议完全是我自己创造的。 然而,从这里开始,新玩家开始加入。 迄今为止,在交易方面最突出的参与者是加文伍德。

……

Gavin 也将以太坊视为构建可编程货币平台的微妙转变,基于区块链的合约可以持有数字资产并根据预设规则将其转移到通用计算平台。 这始于重点和术语的轻微转变,随着对“Web 3”系统的日益重视,这种影响已经加剧,该系统将以太坊视为一套去中心化技术的一部分,另外两个是 Whisper 和 Swarm。

从 2013 年 12 月开始,Vitalik 和 Gavin 完善并发展了这个想法,共同构建构成以太坊的协议层。

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

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

创始人花了数年时间来构建和完善愿景。 2015 年 7 月 30 日,第一个以太坊区块被开采。 世界计算机开始为世界服务……

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

你可以继续阅读。

以太坊发展的四个阶段

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

四个主要的开发阶段代号为 Frontier、Homestead、Metropolis 和 Serenity。 中间的硬分叉代号为“冰河时代”、“DAO”、“橘哨”、“伪龙”、“拜占庭”和“康斯坦丁”。 君士坦丁堡”。下面列出了它们,以及发生硬分叉的区块编号:

先前的过渡

区块 #0

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

区块 #200,000

“冰河时代”- 一个引入指数级难度增长的谜题,推动向权益证明的过渡。

区块 #1,150,000

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

区块 #1,192,000

“DAO”——硬分叉以恢复损坏的 DAO 合约,导致以太坊和以太坊经典分裂成两个相互竞争的系统。

区块 #2,463,000

“Tangerine Whistle”——一个硬分叉,它改变了某些 IO 密集型操作的 gas 计算方法,并清除了利用这些操作的低 gas 成本的拒绝服务攻击的累积状态。

区块 #2,675,000

“Spurious Dragon”——硬分叉以解决更多拒绝服务攻击向量和另一个状态清理,还包括转播攻击保护机制。

当前状态

我们目前处于 _Metropolis_ 阶段,计划作为两个次要版本的硬分叉(参见 [hard_fork]),代号为拜占庭和君士坦丁堡。 拜占庭于 2017 年 10 月生效,君士坦丁堡预计于 2018 年年中生效。

区块 #4,370,000

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

未来的计划

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

君士坦丁堡

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

宁静

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

以太坊:通用区块链

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

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

以太坊的组成部分

在以太坊中,区块链组件中描述的区块链系统组件包括:

P2P网络

以太坊在以太坊主网上运行以太坊平台特性,可通过 TCP 端口 30303 访问,并运行称为 ÐΞVp2p 的协议。

共识规则

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

交易

以太坊交易(见【交易】)是网络消息,包括发送者、接收者、价值和数据负载等。

状态机

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

区块链

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

共识算法

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

客户

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

其他参考资料

以太坊黄皮书:

“The Beige Book”:“The Beige Book”以不太正式的语言为更广泛的受众重写:

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

以太坊状态机 - 一个“很棒的”资源列表 (EVM)-Awesome-List

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

Merkle Patricia 树:

Ethash 工作量证明共识算法:

Casper 股权证明 v1 实施指南:

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

Parity 以太坊客户端:

以太坊和图灵完备性

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

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

Alan Turing 进一步将一个系统定义为_Turing Complete_,如果它可以用来模拟任何图灵机。 这样的系统称为通用图灵机 (UTM)。

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

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

图灵完备性是一个“属性”

听到以太坊是图灵完备的,您可能会得出结论,这是图灵不完备系统所缺乏的功能。 反之,则相反。 需要努力来约束系统,使其不是图灵完备的。 即使是最简单的状态机也会出现图灵完备。 事实上,已知最简单的图灵完备状态机(Rogozhin,1996)有 4 个状态并使用 6 个符号,状态定义只有 22 条指令长。

不仅可以在最简单的系统中实现图灵完备,而且故意设计为限制图灵不完备的系统通常被称为“意外图灵完备”。 图灵不完备的约束系统更难设计,必须小心维护以保持图灵不完备。

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

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

图灵完备性的含义

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

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

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

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

以太坊最初是一种通用区块链,可用于多种用途。 但很快,以太坊的愿景扩展为一个用于编写去中心化应用程序 (DApps) 的平台。 DApps 代表了比“智能合约”更广阔的视角。 DApp 至少是一个智能合约和一个网络用户界面。 更广泛地说,DApp 是一种基于开放、去中心化、点对点基础设施服务的网络应用程序。

DApp至少由以下部分组成:

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

提示

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

万维网的演变

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

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

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

以太坊平台特性_以太坊有虚拟平台吗_以太坊是不是传销平台

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

以太坊的发展文化

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

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

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

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

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

然而,从积极的一面来看,以太坊正在迅速增长。 “自行车掉下来”的可能性很小——这个表达方式意在争论一些小细节,比如如何在建筑物后面建造一个自行车棚。 如果你开始骑自行车,你可能会突然发现其他开发团队已经改变了他们的计划,放弃了自行车,转而使用自主气垫船。 以太坊中几乎没有神圣的原则、最终标准或固定接口。

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

为什么要研究以太坊?

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

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

这本书会教你什么?

这本书深入到以太坊的每一个组成部分。 您将从一个简单的交易开始,分析它是如何工作的,建立一个简单的合同,让它变得更好,并在以太坊系统中遵循它的路径。

您将了解 Ethereum 的工作原理,以及它为何如此设计。 您将能够了解每个组件的工作原理、它们如何组合在一起以及为什么。