主页 > imtoken钱包下载安卓官网 > 如何深入了解以太坊系统

如何深入了解以太坊系统

imtoken钱包下载安卓官网 2024-01-15 05:12:58

不仅在中国,从全球科技金融趋势来看,区块链注定会成为科技金融行业长期关注的技术。当然,如果你想参与并计划实施实际的区块链实施,了解以太坊系统是提高对区块链应用理解的一个非常重要的过程。这里总结一下以太坊系统的核心技术点和原理,让大家对系统有一个具体而不是抽象的认识。相信仔细阅读后会给我们一个系统的认知。本文从以下核心问题入手:

• 什么是以太坊?

• 以太坊挖矿如何运作?

• 什么是智能合约?

• 什么是以太坊虚拟机?

• 什么是 Ether 和 Gas?

• 什么是坚固性?

• Dapps 和 ICO。

什么是以太坊

以太坊官方定义:

“以太坊是一个可以运行智能合约的分布式平台:应用程序按照既定程序运行,没有停机、审查、欺诈或第三方干扰的可能性。这些应用程序运行在定制的区块链上,这是一个强大的全球共享基础设施以数字方式流动以代表财产所有权。”

虽然比特币是区块链技术的第一个应用,但它仍然只是一种货币。而以太坊带来了区块链技术的全部可能性。简而言之,以太坊旨在成为未来区块链应用的终极软件平台。如果未来去中心化和dAPP普及,那么以太坊肯定会成为未来的核心平台技术。

正如以太坊联合创始人 Gavin Wood 博士所说:

“比特币首先是一种货币,是区块链的一种特殊应用。然而,这远非唯一的应用。打个类似的比喻:电子邮件是互联网的一种特殊用途,当然有助于概括,但还有很多其他用途。”

以太坊挖矿如何运作?

截至目前,以太坊和比特币使用基本相同的工作量证明协议 (POW)。但基于以太坊在区块链2.0+的应用,POW不再适用,以太坊计划迁移到Proof of Stake(POS),他们会让Casper协议做这个迁移。

那么,POS 和 POW 有什么区别?

POS 与 POW

POW(工作量证明:)工作量证明:这是大多数加密货币(如以太坊和比特币)的情况 迄今为止硬币所遵循的共识算法。这意味着矿工通过使用专门的硬件(矿工)来执行挖矿的动作。

POS(Proof of stake):这种共识算法将使整个挖矿过程虚拟化。在这个系统中,我们有验证者而不是矿工。它的工作方式是,作为验证者,你首先必须锁定你的一些以太币(可以理解为存款)。然后验证者将开始验证区块,这意味着如果您发现任何您认为可以添加到区块链中的区块,您可以通过下注来验证它们。如果将区块添加到区块链中,您将获得与您投资的股份成比例的奖励。但是,如果您下注错误或恶意区块,您将失去之前的存款和相关权益。

为了实现“权益证明”,以太坊将使用 Casper 协议。

Casper 是一种基于安全存款的经济共识协议。协议中的节点,作为“绑定验证者”,必须支付押金(这一步称为“绑定”),才能参与区块生成和共识形成。 Casper 共识协议通过直接控制这些存款来限制验证者的行为。具体来说,如果验证者做了任何 Casper 认为“无效”的事情,他的押金将被削减以太坊发币的成本,出块和参与共识的权利将被取消。保证金的引入解决了“一无所有”的问题,即经典 POS 协议中做坏事的低成本。现在是有代价的,被客观证明是错误的验证者将付出这个代价。

一开始,以太坊会是一个混合共识算法的系统,其中大部分交易仍然使用POW方式,会使用少量的POS(每100笔交易使用POS机制)。

POS 权益证明的好处

• 降低整体能源和资本成本:世界各地的比特币矿工每小时花费约 50,000 美元的电费。即每天 120 万美元,每月 3600 万美元,每年约 4.5 亿美元!通过使用权益证明,您可以完全虚拟化整个流程并削减所有这些成本。

• 不依赖 ASIC:由于整个过程将是虚拟的,因此不依赖于谁拥有更好的设备或 ASIC(专用集成电路)。

• 使 51% 攻击更加困难:当一组矿工获得超过 50% 的哈希算力时,就会发生 51% 攻击。使用 POS 可以抵抗这种攻击。

• 恶意验证者:任何将其资金锁定在区块链中的验证者都将确保他们不会在链中添加任何错误或恶意的区块,因为这意味着他们将失去所有投资的份额。

• 创建块:使更新块的创建和整个过程更快。

• 可扩展性:通过引入“分片”的概念使区块链具有可扩展性(稍后会详细介绍)。

虽然之前关于 POS 共识机制有各种简单的争论,但 Casper 协议与其他协议的不同之处在于它激励诚实的矿工并惩罚不诚实的矿工。如果您将投资放在恶意区块上,您将失去所有投资和收益:惩罚任何不遵守规则的人。

“想象一下 100 个人坐在一张圆桌旁。一个人有一堆文件,每个人都有不同的交易历史。第一个参与者拿起笔并签名,然后传递给下一个做出类似选择的人. 如果每个参与者在大多数参与者登录的情况下签署交易历史,每个参与者只获得1美元。如果你想小动作,在一个页面上签名,然后在另一个页面上再签一个页面,你的房子就会被烧毁,“

什么是智能合约?

顾名思义,智能合约是自动合约。它们会自动执行,并在其代码上写入特定指令并在特定条件下执行。

智能合约在以太坊生态系统中是如何完成的:

智能合约执行流程

当有人想在以太坊上执行特定任务时,他们会与一个或多个人启动智能合约。

智能合约是一系列指令,用编程语言“solidity”编写,基于 IFTTT 逻辑(即 IF-THIS-THEN-THAT 逻辑有效:如果满足某个条件,则执行某项操作)。基本上,如果第一组指令完成,则执行下一个函数,然后执行下一个函数,不断重复,直到合约结束。

为了理解智能合约机制,我们可以想象一台自动售货机。您进行销售的每一步都像是下一步执行自身的触发器。这有点像多米诺骨牌效应。让我们看一下您在与自动售货机交互时将采取的步骤:

• 第 1 步:给自动售货机一些钱。

• 第 2 步:按下与所需项目对应的按钮。

• 第 3 步:您购买的商品自动从自动售货机中出来,然后您就拿到了。

现在看看所有这些步骤并考虑一下。如果没有执行上一步,是否有任何步骤有效?每一步都与前一步直接相关。还有一个因素需要考虑,它是智能合约的一个组成部分。您会发现您(请求者)在与自动售货机的交互过程中完全与机器(提供者)一起工作。绝对没有第三方参与。

那么现在这笔交易看起来像是发生在以太坊网络上的吗?

假设你刚从以太坊网络上的自动售货机买了东西,这些步骤会是什么样子?

•第 1 步:你给自动售货机一些钱,这将被以太坊网络中的所有节点记录下来,并在账本中更新交易。

•第2步:按下与您想要的项目对应的按钮,并更新以太坊网络和账本中的记录。

•第三步:货物自动出来,你拿到了,所有节点和账本都有记录。

您通过智能合约进行的每笔交易都将通过网络进行记录和更新。它的作用是让参与合同的每个人对自己的行为负责。它通过使每个操作对整个网络可见来消除恶意行为。

什么是以太坊虚拟机?

在了解以太坊虚拟机 (EVM) 之前,我们必须了解为什么需要“虚拟机”。

让我们回到智能合约。

我们希望我们的智能合约拥有哪些理想的属性?

在区块链上运行的任何东西都必须是不可变的,并且必须能够在不损害其完整性的情况下运行多个节点。因此,智能合约功能需要三个属性

• 确定性。

• 可以终止。

• 隔离。

特征 #1:确定性

如果一个程序对于给定的输入每次都给出相同的输出,那么它就是确定性的。例如。如果 3 + 1 = 4,则 3 + 1 始终为 4(假设底数相同)。因此,当一个程序为不同计算机上的同一组输入提供相同的输出时,就可以说它是确定性的。

程序可能以不确定的方式运行的不同时刻:

• 调用非确定性系统函数:当程序员在其程序中调用非确定性函数时。

• 非确定性数据资源:如果程序在运行时获取数据并且数据源是不确定的,则程序变得不确定。例如。假设一个程序获得了针对特定查询的前 10 个 Google 搜索。此列表可能会不断变化。

• 动态调用:当一个程序调用第二个程序时,称为动态调用。由于调用目标仅在执行期间确定,因此它本质上是非确定性的。

功能 #2:可终止

在数学逻辑中,我们有一个称为“暂停问题”的错误。基本上,它表明不可能知道给定程序是否可以在有限的时间内执行其功能。 1936年,艾伦·图灵利用康托尔的对角线问题推断出不可能知道一个给定的程序是否能在规定的时间内完成。

这显然是智能合约的一个问题,因为根据定义,合约必须能够在给定时间内终止。采取了一些步骤来确保有一种方法可以从外部“杀死”合约,而不会陷入消耗资源的无限循环:

•图灵不完备性:图灵不完备区域 区块链功能有限,不能进行跳转和/或循环。因此它们不能进入无限循环。

• 步数和计费器:程序可以简单地跟踪它已采取的编号“步数”,即执行的指令数,然后在执行特定步数后终止。另一种方法是费用表。这里的合同是在预付的基础上执行的。每个订单执行都需要特定的费用。如果费用超过预付费用,合同将终止。

• 定时器:这里保留了一个预定义的定时器。如果合约执行超过时限,将在外部终止。

功能 #3:隔离

在区块链中,任何人和每个人都可以上传智能合约。但是,正因为如此,这些合同可能会有意无意地包含病毒和错误。

如果合约不是孤立的,这可能会妨碍整个系统。因此,将合约隔离在沙箱中以保护整个生态系统免受任何负面影响至关重要。

通常,智能合约可以在两个系统之一上运行:

• 虚拟机:以太坊使用它。

• Docker:Fabric 使用它。

让我们比较两者并确定哪个是更好的生态系统。为简单起见,我们将比较 Ethereum(虚拟机)和 Fabric(Docker)。

EVM 与 Docker 对比

因此,可以看出虚拟机为智能合约、可终止和隔离环境提供了更好的确定性。然而,码头工人有一个明显的优势。他们正在为以太坊虚拟机等虚拟机提供灵活的编码语言。

EVM 是所有智能合约在以太坊中运行的虚拟机。它是一个简单而强大的图灵完备的 256 位虚拟机。图灵完备性意味着在 EVM 中执行的任何程序都可以解决给定资源和内存的任何问题。

要在 EVM 中编写智能合约,您需要学习编程语言 Solidity。

然后:

什么是 Solidity?

对于任何想要学习如何创建智能合约的人来说,Solidity 是绝对必须的。 Gavin Wood、Christian Reitwiessner、Alex Beregszaszi、Yoichi Hirai 和几位前以太坊核心成员开发了 Solidity,用于在以太坊等区块链平台上编写智能合约。

Solidity 是一种面向对象的语言,其语法与 ECMAScript (Javascript) 非常相似。从以太坊设计原则文档中,我们需要记住几个关键点,我们使用的是 32 字节指令字长堆栈和内存模型,EVM(以太坊虚拟机)让我们可以访问程序“堆栈”,就像一个寄存器空间,我们还可以粘贴内存地址来使程序计数器循环/跳转(对于顺序程序控制,EVM 需要智能合约中的完全确定性。

(注意:以太坊计划最终从 Solidity 迁移到 Viper。)

让我们看一个基本的 Solidity 合约示例。

让我们运行一个简单的while循环:

合约 BasicIterator { 地址创建者; // 保留一个“地址”类型的点 uint8[10] 整数; // 为数组中的 10 个 8 位无符号整数保留一块存储空间 function BasicIterator() { creator = msg.sender;uint8 x = 0; //第 1 节:赋值while(x < integers.length) { integers[x] = x; x++; } } 函数 getSum() 常量返回 (uint) { uint8 sum = 0; uint8 x = 0; //第2节:在数组中添加整数。while(x < integers.length) { sum = sum + integers[x];x++; } 返回总和; } // 第 3 节:终止合约function kill() { if ( msg.sender == creator) { 自杀(creator); }}}

让我们分析一下代码。为了便于理解,我们将代码分为三部分。

第 1 部分:赋值

在第一步中,我们将填充一个名为“整数”的数组,其中包含 10 个 8 位无符号整数。我们这样做的方式是通过一个while循环。让我们看看 while 循环内部发生了什么。

while(x < integers.length) {integers[x] = x;x++;}

请记住,我们已经为整数 x 分配了一个值“0”。 while 循环从 0 到整数。长度。 Integers.length 是一个返回数组最大容量的函数。所以如果我们确定数组会有 10 个整数,那么 arrayname.length 将返回值 10.在上面的循环中,x 的值从 0 变为 9 (

0,1, 2,3,4,5,6,7,8,9。

第 2 部分:添加数组内容

在 getSum() 函数内部,我们将添加数组本身的内容。这是通过重复上述while循环并使用变量“sum”来添加数组的内容来完成的。

第 3 部分:中止合同

此函数中止合约并将合约中的剩余资金返还给合约创建者。

当被问及创建 Solidity 背后的灵感和动机时,Gavin Woods 博士说:

“It [Solidity] 旨在成为开发合同的复杂工具,最终可以为开发人员和用户提供有关代码功能的完整信息。为了解决这个问题,我设计了 NatSpec,一种合同友好的文档格式。我还提出了一个正式的 A 校对语言子集(尚未实现),以便最大程度地保证正确性。

我将事件作为一等公民引入到 Solidity 语言中,以便提供类似 LOG 的函数调用 提供了一个很好的抽象。其灵感来自于 Qt 元对象系统的“信号”。

Christian R. 和我后来提出的一个功能是函数修饰符;部分放置的属性对视图函数体进行了一些修改。作为一种非常声明性的表达方式,这是一个非常适合面向合约编程世界的成语。”,如果对智能合约开发工具和环境感兴趣,也可以浏览:区块链开发:A最佳智能合约开发工具总结

什么是以太和天然气?

什么是以太币?生态系统中的主要代币(token)。激励参与者执行以太相关的智能合约项目。 Gas 是满足特定合约的所有需求所需的“gas”量,用于衡量一个操作或一组操作值得“工作量”多少。

当有人提交智能合约时,它具有预先确定的 gas 值。合约执行时,合约的每一步都需要执行一定量的gas。所以:gas 是计算成本但是,这些费用仍然以以太币计算。类似于我需要开多少gas(gas),但最终结算是以人民币(ether)结算的。

这可能导致两种情况:

• 所需气体超过设定限制。如果是这样的话,那么合约状态就恢复到原来的状态,所有的gas都用完了。

• 所需气体低于设定限值。如果是这样以太坊发币的成本,那么合约就完成了,剩余的 gas 就交给合约制定者了。

下面是平均gas价格图表。