找回密码
 立即注册

扫一扫,登录网站

首页 百科 查看内容
  • 20554
  • 0
  • 分享到

深度| 以太坊的数据到底是如何存储在以太坊网络的?

2018-8-9 10:12

来源: 巴比特

此文我们会深入讨论以太坊数据存储层。我们会介绍区块链“状态”的概念。同时也会讨论Patricia前缀树结构背后的理论,使用谷歌的leveldb数据库演示以太坊前缀树的具体实现。

在存储层中,我们存储的是什么?

1*fLjE6g-m_YTTXTXqLnpA0w

首先我们需要理解为了让区块链系统运行,我们需要存储的东西。让我们简单地看下关于Alice给Bob转账10美金的例子。

我们可以看出,通过执行转账可以改变其中的状态。

我们必须要追踪余额以及不同人(状态)的其他细节,还有在区块链之间发生的细节(转账)。不同的平台会有不同地处理方法。我们可以看出,比特币和以太坊是如何处理的。

比特币

比特币的状态是通过UTXO来实现的。比特币价值转移是通过转账实现的。更特别地是,比特币用户可以通过创建转账花费1个或多个UTXO,并且将他们的UTXO作为转账输入。

UTXO模型让比特币和以太坊不同。我们可以看这些例子来理解其中的区别。

首先,比特币UTXO不能部分花费。如果比特币用户花费0.5个比特币(使用他们仅有的UTXO,价值1比特币),他们需要特意地发回0.5个比特币。如果他们不发送这部分,那么这个0.5比特币就会丢失,并且给到挖出转账的矿工。

1*8ckJdAnUMNNd190LNJLz7Q

其次,在最基本的层面,比特币没有包含用户账户余额。通过比特币,用户可以简单地持有私钥,在任何时间点都可以进行一个或者多个UTXO。数字钱包看起来像是让比特币区块链能够自动地存储和管理用户账户余额,其实不是这样。

1*0doOO9uDGB3yqfPnsUrAEA

比特币的UTXO系统工作的很好,这是由于数字钱包能够完成大多数转账任务。其中包括,但是不限于:
a) 处理UTXO
b) 存储秘钥
c) 设置转账费用
d) 提供返回地址
e)描述UTXO状态(展示可行性,待转账以及全部的余额)

UTXO模型中的转账可以类比为纸币转账。每个账户都会追踪钱包添加的账单(UTXO)。当我们想要花钱的时候,我们会使用一个或者多个账单(现在的UTXO),这已经足够来承担花销,或许还会得到一些找零。(新的UTXO)。每个账单只能花费一次,一旦消费,UTXO就会从资金池移走。

总结下来,我们知道:
• 比特币区块链不会持有账户余额
• 的秘钥
• 如果包含在转账中,完整的UTXO会被消费(有时候,部分会得到新的UTXO作为找零)

以太坊
和以上的信息相反,以太坊的状态能够管理账户余额,以及更多信息。以太坊的状态并不是个抽象的概念。它是以太坊底层协议的部分。根据黄皮书中的描述,以太坊是一个基于转账的状态机器;基于状态机器的转账技术能够被创建。

我们从头开始来讲述。和其他区块链一样,以太坊区块链也是从创世区块开始的。从那时候起,例如转账,合约和挖矿之类的事情,都会陆续改变以太坊区块链的状态。在以太坊中,举例来说就是账户余额(存储在状态树中),这会随着转账而改变,同时和账户相关连。

重要地是,例如账户余额之类的数据并不是直接存储在以太坊区块链的区块中。只有根节点哈希的转账,状态数据和回执数据是直接存储在区块链上的。可以根据下图看出。

1*f0vOn0lRgrY5NjFlbUMBFg

也许你也注意到了,从上面的图表中,存储树的根节点哈希(所有的智能合约数据存储在其中)其实都是指向状态树的,从而指向区块链。接下来,我们会讨论更多细节。

以太坊中有两种不同的数据类型:永久数据和暂时数据。永久数据的例子就是转账。一旦转账确认,就会在区块链中记录;然后就再也不可以更改。暂时数据的例子就是特定以太坊账户地址的余额。账户的余额就会存储在状态树中,并且当有特定账户转账的时候,就会改变。永久数据是有意义的,就好像挖矿转账,暂时数据,就例如账户余额,应该被分开存储。以太坊会使用数据树结构来管理数据。

以太坊的数据记录就好像在银行。类似使用ATM机器和存储卡。银行会追踪每个借记卡来确保在在完成转账之前,有足够的余额。


版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
1234下一页
相关新闻
发表评论

请先 注册/登录 后参与评论

    回顶部