1. 首页 > 产业新闻 > 节能环保

mpt币最新价格(mpro币)

你也许不太清楚以太坊具体是什么,但是我相信你一定听过它。它最近出现在很多新闻和杂志中,但如果你不了解以太坊到底是什么,那么阅读相关文章可能会觉得很难懂。

从本质上讲,以太坊是一个永久记录并保存数字交易的公共数据库。 与普通数据库不同的是,该数据库不需要任何中央机构来维护和保护它,它是作为一个“无需信任”的交易系统运行的,个人可以在这个框架中进行点对点交易,而无需信任第三方或彼此。

读完上面的介绍是不是仍然感受到很困惑?这就是为什么我要写这篇文章的原因,我希望从技术层面去解释什么是以太坊,但又不引入复杂的数学公式。即使你不是一个程序员,你也可以通过这篇文章去更好的使用区块链技术。如果本文出现一些太难理解的部分,你可以不用去深究。我希望读者能够对以太坊有个整体的理解就行。

这篇文章里面的很多内容都来自于《以太坊黄皮书》。我只是增加了个人的解释和图表来让你更好的理解以太坊。如果你有足够的勇气,也可以去直接阅读从《以太坊黄皮书》开始。

让我们开始吧!

区块链定义

区块链是一个:具有共享状态的加密安全事务单例机。这概念很难理解对吧?让我们把它拆解一下:

  • “加密安全”:意味着数字货币的创造是由复杂的数学算法保护的,这些算法非常难以破解。你可以联想一下各类的防火墙。你在区块链上的交易都不可能欺骗整个系统(例如,创建虚假交易、删除交易等)。
  • “交易单例机”:意味着只有一个机器的单一实例,这个单一实例负责系统中创建的所有事务。 换句话说,每个人都相信一个单一的真理。
  • “共享状态”:意味着在这台机器上存储的所有状态,都是共享并且开发给所有人的。

以太坊就实现了上面所讲的几点区块链范式。

区块链范式解释

以太坊区块链本质上是一个基于交易的状态机。在计算机科学中,状态机是指能够读取一系列输入,并根据这些输入转移到新的状态的东西。

当以太坊上最初没有任何交易的状态叫「创世态」。你可以把它想象成一张什么都没有的白纸,当交易被执行时,「创世态」转换到某个最终状态。 在任何时间点,这个最终状态都代表了以太坊的当前状态。

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

要触发从一种状态到下一种状态的转换,这个交易必须得是合法。为了使交易被认为是合法,它必须经过一个我们所熟知的「挖矿」的验证过程。 挖矿是指一组节点(即计算机)消耗它们的计算资源来创建一个合法的区块。

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

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

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

你可能想知道:是什么能够保证每个人都是在以太坊这一条区块链上?一群矿工难道不会生成区块后,组成一条新的区块链吗?

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

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

在以太坊中,使用了“幽灵协议”(GHOST protocol)这个机制,来确定哪条路径是有效的, 而且能避免多条链的出现。

幽灵协议:Greedy Heaviest Observed Subtree

简单来说,幽灵协议是指我们必须选择的路径是一条拥有最多计算量的路径。一种确定方式是选择区块块号最大一个区块。这个区块块号代表了当前路径下所有区块的数量(不包括创世区块)。区块的块号越大,那么这条路径上矿工在挖矿中付出的计算量就越大。使用这种方式,就可以对当前状态的版本达成一致。

现在你已经对区块链是什么有了一个大致的概览,让我们来深入了解一下以太坊区块链的主要组成部分:

  • 账户(accounts)
  • 状态(state)
  • gas 和 gas fee
  • 交易(transactions)
  • 区块(blocks)
  • 交易执行(transaction execution)
  • 挖矿
  • 工作证明

账户

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

在以太坊中,有两种类型的账户:

  • 外部账户:私钥控制,没有与之关联的代码。
  • 合约账户:合约代码控制,有与之关联的代码。

外部账户 vs 合约账户

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

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

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

账户状态(Accout State)

账户状态由四个部分组成,无论是外部账户或者合约账户都有这四个部分:

  • nonce: 如果账户是外部账户,这个数字代表从账户地址发送的交易数量。如果账户是合约账户,nonce就是该账户创建的合约数量。
  • balance: 账户地址所拥有的以太币的数量,这里使用wei做单位的,1Ether等于1e+18wei。
  • storageRoot:梅克尔帕特里夏树(Merkle Patricia tree)的根节点的hash(我们将会在后面解释什么是梅克尔帕特里夏树)。这棵树编码了账户存储数据的哈希值,默认是空的。
  • codeHash:此帐户的 EVM(以太坊虚拟机?—?稍后会详细介绍)代码的哈希值。 对于合约账户,这是经过哈希处理并存储为codeHash的代码。对于外部账户,codeHash字段的哈希值是空字符串。

全局状态

我们知道以太坊的全局状态由帐户地址和帐户状态之间的映射组成。此映射存储在称为梅克尔帕特里夏树(Merkle Patricia tree)的数据结构中。

梅克尔树(Merkle tree,也叫Markle trie,下文统一叫Markle trie)是一种由一组节点组成的二叉树,它由以下部分组成:

  • 包含底层数据的,位于树底部的大量叶节点
  • 一组中间节点,中间节点的每个节点是其余两个子节点的哈希
  • 单个根节点,也由其两个子节点的哈希形成,表示树的顶部

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

这棵树需要为每条存储的数据存储一个键值。从树的根节点开始,这个键值决定子节点是哪个,从而得到对应的值,这个值存储在叶子节点中。在以太坊的例子中,状态树的键/值映射在地址和它们关联的账户之间,包括每个账户的balance、nonce、codeHash 和 storageRoot(其中storageRoot本身就是一棵树)。

资源:以太坊白皮书

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

  • State Trie
  • Transaction Trie
  • Receipts Trie

(译者补充:上图中StateRoot、TransactionsRoot和ReceiptsRoot分别取自上面三个MPT的计算结果:State Trie、Transaction Trie和Recipts Trie的根节点的哈希值)。

对于以太坊中中的“轻客户端”和“轻节点”而言,Merkle trie能够有效的存储所有信息。记住,区块链是由成千上万个节点所维护的,这些节点可以大致分成两类:全节点和轻节点。

全节点会下载创世区块到当前区块的完整链来同步真个区块链,并执行其中包含的所有交易。通常,矿工存储完整的存档节点,因为他们在挖矿过程需要。 当然也可以在不执行每笔交易的情况下下载完整节点。无论如何,任何全节点都包含整个区块链。

但是某些节点其实既不需要执行每一笔交易,也不需要查询历史记录,这样的节点是没有必要保存整个区块链数据的。这样的的节点就是上文提到的轻节点。轻节点不用下载和存储整个链并执行所有交易,它只下载从创世块到当前区块的区块头数据(Block Header),不执行任何交易或检索任何关联状态。但轻节点因为保存了区块头数据,区块头数据又存储了上文提到的三个Merkle trie结构的哈希值。所以轻节点依然能够生成和接受交易、事件和余额等的验证答案。

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

节点可以使用Merkle证明去验证一条数据。Merkle证明组成如下:

  • 待验证的数据块及其哈希
  • 树的根哈希
  • 分支(区块到根一条上升路径上所有的哈希)
  • 任何使用该证明的人,都可以验证该分支的哈希和树的关系是具有一致性的,因此给定的块实际上是在树中的那个位置。

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

    Gas和费用(fee)

    以太坊中一个非常重要的概念是费用的概念。由于以太坊网络上的交易而发生的每次计算都会产生费用?(?天底下没有免费的午餐!), 这笔费用以称为“gas”的面额支付。

    Gas 是用于衡量计算所需费用的单位,Gas Price是你愿意在每单位gas上花费的以太币,单位是“gwei”。“wei”是以太币的最小单位,1以太币等于1 x 1018wei。1gwei是1 x 109

    本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.fjxmta.com/chanye/jieneng/64770.html

    联系我们

    在线咨询:点击这里给我发消息

    微信号:wx123456