大数跨境

【学习专栏】「共识」以太坊是如何运作的?上

【学习专栏】「共识」以太坊是如何运作的?上 FastDaily
2022-04-02
0
导读:今天这个有点难。

转载请微信联系:huangdiezi,更多DAOWeb3NFTMetaverse资讯请关注老雅痞👇

亲爱的朋友们,大家好,我是公众号老雅痞的小编波动,雅痞哥为了敦促我学习区块链/DAO/NFT知识(我并不信,他就是想让我干活),我们将单独开始一个专栏,从零开始学习。每天在公众号FastDaily和这里各更新一篇。欢迎大家和我一起学习进步(暗号yaoyaobigc)~揪咪~


让我们每天学点新东西,争取不白活。


今天是一些关于以太坊共识的知识。


这篇文章有很多要消化的东西。可能需要反复阅读,才能真的搞清楚到底是怎么回事。


尽管如此,我希望此概述对您有所帮助。


让我们共同进步。

以太坊区块链是什么?

这是一个保存数字交易永久记录的公共数据库。

该数据库不需要任何中央机构来维护和保护它。

它作为一个“无需信任”的交易系统运行——一种框架,个人可以在其中进行点对点交易,而无需信任第三方或彼此。

这篇文章的目的是解释以太坊如何在技术层面上运行,而不需要复杂的数学或看起来很吓人的公式。即使你不是程序员,也可以看懂。如果某些部分技术性太强且难以理解,那完全没问题!真的没有必要了解每一个小细节。我建议只专注于在广泛的层面上理解事物。
这篇文章中涵盖的许多主题都是对黄皮书中讨论的概念的细分。我添加了自己的解释和图表,以使理解以太坊更容易。那些勇于接受技术挑战的人也可以阅读以太坊黄皮书。

让我们开始吧!

区块链定义

区块链是“具有共享状态的加密安全交易单机”( cryptographically secure transactional singleton machine with shared-state.)。让我们分解一下开帮助你理解概念。

  • “加密安全” “Cryptographically secure”意味着数字货币的创建是由复杂的数学算法保护的,这些算法非常难以破解。它们几乎不可能欺骗系统(例如创建虚假交易、删除交易等)

  • “单例事务机器” “Transactional singleton machine”意味着有一个单一规范的机器实例负责系统中正在创建的所有事务。换句话说,每个人都相信一个单一的全球真理。

  • 共享状态“With shared-state”意味着存储在这台机器上的状态是共享的,对所有人开放。

以太坊实现了这种区块链范式。

以太坊区块链范式解释

以太坊区块链本质上是一个基于交易的 状态机(transaction-based state machine)。在计算机科学中,状态机是指将读取一系列输入并根据这些输入转换到新状态的东西。状态机不是指一台实际机器,而是指一个数学模型。状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。

我们从“创世状态”开始,说回以太坊的状态机。这类似于在网络上发生任何交易之前的一张白纸。当交易被执行时,这个创世状态转换到某个最终状态。在任何时间点,这个最终状态都代表了以太坊的当前状态。

以太坊的状态有数百万笔交易。这些交易被分组为“块”。一个区块包含一系列交易,每个区块都与其前一个区块链接在一起。

要引起从一种状态到下一种状态的转换,交易必须是有效的。为了使交易被认为是有效的,它必须经过一个称为挖掘的验证过程。挖矿是指一组节点(就是计算机)花费他们的计算资源来创建一个有效交易块。

网络上任何自称为矿工的节点都可以尝试创建和验证区块。来自世界各地的许多矿工试图同时创建和验证区块。每个矿工在向区块链提交区块时都会提供一个数学“证明”,这个证明起到了保证的作用:如果证明存在,则该区块必须是有效的。

对于要添加到主区块链的区块,矿工必须比任何其他竞争矿工更快地证明它。通过让矿工提供数学证明来验证每个区块的过程被称为“工作证明”。

验证新区块的矿工因完成这项工作而获得一定的价值奖励。那价值是什么?以太坊区块链使用一种称为“以太”的内在数字代币。每次矿工证明一个区块时,都会生成并奖励新的以太币。

什么保证每个人都坚持一个区块链?我们如何确定自己所在的区块链的矿工子集是不存在的呢?

本文开头刚才已经说了,我们将区块链定义为具有共享状态的事务单例机器。使用这个定义,我们可以理解为,正确的当前状态是一个单一的全局真理,每个人都必须接受。拥有多个状态(或链)会破坏整个系统,因为不可能就“哪个状态是正确的”达成一致。如果链条分叉,你可能在一个链条上拥有 10 个币,在另一个链条上拥有 20 个币,在另一个链条上拥有 40 个币。在这种情况下,将无法确定哪个链是最“有效的”。

每当生成多个路径时,就会发生“分叉”。我们通常希望避免分叉,因为它们会破坏系统并迫使人们选择他们“相信”的链。

为了确定哪条路径最有效并防止出现多条链,以太坊使用了一种称为“GHOST 协议”的机制。

“GHOST” = 贪婪的最重观测子树Greedy Heaviest Observed Subtree

简单来说,GHOST 协议要求我们必须选择完成最多计算量的路径。确定该路径的一种方法是使用最近块(叶子节点the “leaf block”)的块号,它表示当前路径中的总块数(不包括创世块)。块数越高,路径越长,到达叶子节点的挖矿工作量就越大。使用这种推理,我们可以就当前状态的规范版本达成一致。

现在您已经了解了区块链的概述,让我们更深入地了解以太坊系统的主要组成部分:

  • 帐户

  • 状态

  • 汽油和费用

  • 交易

  • 交易执行

  • 矿业

  • 工作证明

注意事项:每当我说 X 的“散列”时,我指的是以太坊使用的KECCAK-256散列。

账户accounts

以太坊的全球“共享状态”由许多能够通过消息传递框架相互交互的小对象(“账户”)组成。每个帐户都有一个与之关联的状态和一个 20 字节的地址。以太坊中的地址是一个 160 位的标识符,用于识别任何帐户。

有两种类型的帐户:

  • 外部拥有的帐户,由私钥控制并且没有与之关联的代码。

  • 合约账户,由其合约代码控制,具有与之关联的代码。

外部拥有的账户与合约账户

了解外部拥有账户和合同账户之间的根本区别很重要。

外部拥有的账户可以通过使用其私钥创建和签署交易来向其他外部拥有的账户或其他合约账户发送消息。两个外部拥有的账户之间的消息只是价值转移。但是从外部拥有的账户到合约账户的消息会激活合约账户的代码,允许其执行各种操作(例如转移代币、写入内部存储、铸造新代币、执行一些计算、创建新合约等)。

与外部拥有的账户不同,合约账户不能自行发起新交易。相反,合约账户只能触发交易,以响应他们收到的其他交易(来自外部拥有的账户或来自另一个合约账户)。我们将在“交易和消息”部分了解有关合约到合约调用的更多信息。

因此,在以太坊区块链上发生的任何行动总是由外部控制账户发起的交易启动。

账户状态Account state

帐户状态由四个组件组成,无论帐户类型如何,它们都存在:

  • nonce:如果账户是外部拥有的账户,这个数字代表从账户地址发送的交易数量。如果账户是合约账户,nonce 就是该账户创建的合约数量。

  • balance : 该地址拥有的 Wei 数量。每个以太币有 1e+18 Wei。

  • storageRoot:Merkle Patricia 树的根节点的哈希(我们稍后会解释 Merkle 树)。该树对该账户的存储内容进行哈希编码,默认为空。

  • codeHash:此帐户的 EVM(以太坊虚拟机 - 稍后会详细介绍)代码的哈希值。对于合约账户,这是经过哈希处理并存储为codeHash的代码。对于外部拥有的账户,codeHash字段是空字符串的哈希值。

世界状态World state

好的,所以我们知道以太坊的全局状态由帐户地址和帐户状态之间的映射组成。此映射存储在称为Merkle Patricia 树的数据结构中。

Merkle 树(或也称为“Merkle trie”)是一种由一组节点组成的二叉树,其中:

  • 包含底层数据的树底部的大量叶节点

  • 一组中间节点,其中每个节点是其两个子节点的哈希

  • 单个根节点,也由其两个子节点的哈希形成,表示树的顶部

树底部的数据是通过将我们要存储的数据分成,然后将块分成,然后取每个桶的哈希并重复相同的过程,直到剩余的哈希总数变为只有一个:根哈希。


这棵树需要为其中存储的每个值都有一个键。从树的根节点开始,key 告诉你要跟随哪个子节点来获取对应的值,该值存储在叶子节点中。在以太坊的例子中,状态树的键/值映射在地址和它们关联的账户之间,包括每个账户的余额、nonce、codeHash 和 storageRoot(其中 storageRoot 本身就是一棵树)。

资料来源:以太坊白皮书

同样的 trie 结构也用于存储交易和收据。更具体地说,每个块都有一个“头”,它存储三个不同 Merkle trie 结构的根节点的哈希,包括:

  • 状态树State trie

  • 事务树Transactions trie

  • 收据尝试Receipts trie

在 Merkle 尝试中,有效存储所有这些信息的能力,对于我们所说的“轻客户端”或“轻节点”非常有用(在以太坊中)。请记住,区块链由一堆节点维护。

从广义上讲,有两种类型的节点:全节点和轻节点。

完整存档节点通过下载完整链(从创世块到当前头块)来同步区块链,执行其中包含的所有事务。通常,矿工存储完整的存档节点,在挖掘过程中矿工需要这样做。也可以在不执行每笔交易的情况下下载完整节点。无论如何,任何完整节点都包含整个链。

但是,除非节点需要执行每笔交易或轻松查询历史数据,否则实际上没有必要存储整个链。这就是轻节点概念的用武之地。轻节点不是下载和存储整个链并执行所有交易,而是仅下载从创世块到当前头的头链,而不执行任何交易或检索任何关联的状态。因为轻节点可以访问包含三次尝试哈希的块头,所以它们仍然可以轻松生成和接收有关交易、事件、余额等的可验证答案。

这样做的原因是因为 Merkle 树中的哈希是向上传播的——如果,恶意用户试图将虚假交易交换到 Merkle 树的底部,这种变化将导致上面节点的哈希发生变化,这将改变上面节点的哈希值,依此类推,直到它最终改变树的根。

任何想要验证一段数据的节点都可以使用称为默克尔证明“Merkle proof”来实现。默克尔证明包括:

  • 待验证的数据块及其哈希

  • 树的根哈希

  • “分支”(所有伙伴哈希沿着从块到根的路径上升)

任何阅读证明的人都可以验证该分支的散列在树的整个过程中是一致的,因此给定的块实际上是在树中的那个位置。

总之,使用 Merkle Patricia 树的好处是该结构的根节点在密码学上依赖于存储在树中的数据,因此根节点的哈希可以用作该数据的安全身份。由于区块头包含状态、交易和收据树的根哈希,因此,任何节点都可以用于以太坊的一小部分状态的验证(不需要存储整个状态,这可能是无限大小的)。

Gas 费和付款payment

以太坊中一个非常重要的概念是费用的概念。由于以太坊网络上的交易而发生的每次计算都会产生费用——是的!不论干啥都要花钱的!这笔费用以称为“gas”。

Gas是用于衡量特定计算所需费用的单位。Gas 价格是在每单位 Gas 上花费的 Ether 数量,以“gwei”为单位。“Wei”是 Ether 的最小单位,其中 1⁰¹⁸ Wei 代表 1 Ether。一gwei就是一百万威。

对于每笔交易,发送者都会设置gas 的限制gas 的价格gas pricegas limit的乘积代表发送方愿意为执行交易支付的最大 Wei 金额。

例如,发送者将 gas 限制设置为 50,000,将 gas 价格设置为 20 gwei。这意味着发送者愿意花费最多 50,000 x 20 gwei = 1,000,000,000,000,000 Wei = 0.001 Ether 来执行该交易。

请记住,gas 限制代表发送者愿意花钱的最大 gas。如果他们的账户余额中有足够的以太币来支付这个最大值,那就没有任何问题。在交易结束时,发件人将获得任何未使用的 gas 的退款,并以原始汇率进行兑换。

如果发件人没有提供执行交易所需的gas,则交易因为“用尽gas”被视为无效。在这种情况下,交易处理中止并且发生的任何状态更改都被逆转,这样我们最终会回到交易之前的以太坊状态。此外,还会记录交易失败的记录(显示尝试了哪些交易以及失败的位置)。另外,由于机器在用完 gas 之前已经花费了精力来运行计算,因此从逻辑上讲,没有任何 gas 会退还给发送者。

这些gas钱到底去哪儿了?发件人花在 gas 上的所有钱都会发送到“受益人”地址,该地址通常是矿工的地址。由于矿工正在花费精力来运行计算和验证交易,因此矿工会收到gas费作为奖励。

通常,发送者愿意支付的 gas 价格越高,矿工从交易中获得的价值就越大。因此,矿工利益驱动下更有可能选择它。通过这种方式,矿工可以自由选择他们想要验证哪些交易,忽略哪些交易。为了指导发送者设置什么 gas 价格,矿工可以选择公布他们将执行交易的最低 gas 价格。

存储也有费用

gas不仅用于支付计算步骤,还用于支付存储使用费用。存储的总费用与使用的 32 字节的最小倍数成正比。

存储费用有一些微妙的方面。例如,由于增加的存储会增加所有节点上的以太坊状态数据库的大小,因此,大家都有动力保持较小的数据存储量。出于这个原因,如果交易有清除存储中的条目的步骤,则免除执行该操作的费用,并退款以释放存储空间。

收费的目的是什么?

以太坊工作方式的一个重要方面是网络执行的每一个操作都同时受到每个完整节点的影响。然而,以太坊虚拟机上的计算步骤非常昂贵。因此,以太坊智能合约最适合用于简单的任务,例如运行简单的业务逻辑,或验证签名和其他加密对象。而不是更复杂的用途,例如文件存储、电子邮件或机器学习,这会给网络带来压力。征收费用可以防止用户对网络过度征税。

以太坊是图灵完备的语言。(简而言之,图灵机是一种可以模拟任何计算机算法的机器(对于那些不熟悉图灵机的人,我们邪恶学习专栏后期会专门讲)。这允许循环并使以太坊容易受到停机问题的影响,在这个问题中,你无法确定程序是否会无限运行。如果没有费用,恶意行为者可以很容易地尝试通过在交易中执行无限循环来破坏网络,而不会承担任何后果。因此,费用可以保护网络免受蓄意攻击。

那么“为什么我们还要为存储付费?” ,就像计算一样,以太坊网络上的存储是整个网络必须承担的成本。

下集我们在老雅痞公众号继续讨论。

来源:r/以太坊 作者Preethi Kasireddy



往期学习回顾:

区块链到底是个啥?

区块链和比特币到底是怎么工作的?

「DAO」为什么去中心化很重要

DAO 的定义:大局观

DAO《术语指南》:智能合约、自治代理、去中心化应用等

所有权经济:加密和消费软件的下一个前沿(已经是了)

NFT 让互联网赋予用户所有权

加密货币将改变价值,NFT 将改变社会

区块链:硬分叉、软分叉、默认和强制

区块链经济:机构加密经济学初学者指南

【声明】内容源于网络
0
0
FastDaily
日更新闻
内容 0
粉丝 0
FastDaily 日更新闻
总阅读0
粉丝0
内容0