主页 > 鸿蒙系统安装imtoken > 以太坊同步数据库有多大? 纯干货|深入剖析以太坊(二):以太坊账户

以太坊同步数据库有多大? 纯干货|深入剖析以太坊(二):以太坊账户

鸿蒙系统安装imtoken 2023-10-17 05:10:37

纯干货|深入剖析以太坊(一):以太坊模型

以太坊的全局“共享状态”由许多可以通过消息传递框架进行交互的小对象(账户)组成。 每个帐户都有一个关联的状态和一个 20 字节的地址。 以太坊地址是标识任何帐户的 160 位标识符。

有两种类型的帐户:

1. 外部拥有的账户,由私钥控制,没有与之关联的代码。

2. 合约账户由合约代码控制,并有与之关联的代码。

1 外部拥有账户和合约账户

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

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

因此,以太坊区块链上发生的任何动作总是由外部控制的账户触发的交易处理。

2 账户状态

无论帐户类型如何,帐户状态都由四个部分组成:

nonce:如果账户是外部拥有的账户,nonce表示从账户地址发送的交易的序号。如果账户是合约账户,nonce表示该账户创建的合约的序号

balance:该地址拥有的 We 数量。 1以太=10^18Wei

: Merkle树根节点的hash值(后面会讲解Merkle树)。Merkle树会对账户存储内容的Hash值进行编码,默认为空

:账户的EVM(Ethereum Virtual Machine以太坊轻节点,后述)代码的哈希值。 对于合约账户,它是被散列并保存为的代码。对于外部拥有的账户,该字段是空字符串的散列

3 全局状态

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

Merkle Tree(或也称为“Merkle trie”)是由一组节点组成的二叉树,包括:

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

一组中间节点以太坊轻节点,其中每个节点都是其两个子节点的散列;

一个根节点,也由它的两个孩子的哈希值组成,代表树的顶部;

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

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

相同的树结构用于存储交易和收据。 更具体地说,每个区块都有一个头部,其中存储了三种不同 Merkle trie 结构的根节点的哈希值,包括:

状态树

交易树

收据树

在 Merkle 尝试中有效存储所有信息的能力就是我们在以太坊中所说的“轻客户端”或“轻节点”。 请记住,区块链由一堆节点维护。 一般来说,有两种类型的节点:全节点和轻节点。

全节点通过下载整条链来同步以太坊同步数据库,从创世块到当前块,并执行其中包含的所有交易。 通常,矿工存储完整节点是因为他们在挖矿过程中需要它们。 也可以在不执行每个事务的情况下下载完整节点。 无论如何,一个完整的节点包含整个链。

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

发生这种情况是因为 Merkle 树中的哈希向上传播——如果恶意用户试图将虚假交易交换到 Merkle 树的底部,这种变化将导致上面节点的哈希发生变化,从而改变上面的节点hash 等等,直到最终改变树的根。

任何想要验证数据的节点都可以使用“Merkle 证明”来实现。 Merkle 证明包括:

1.要验证的区块和哈希

2.根哈希

3. 一个“分支”(从块到根的路径上的所有哈希)

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

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

骨区块链

拥抱区块链的未来

打造最具价值的区块链学习交流社区

挖矿网Ethos中文网拥有简单易用的挖矿系统,为挖矿行业提供教程软件和矿机评测及交易信息,对比计算各种数字货币在挖矿网的挖矿收益,以及介绍矿网挖矿工具,矿场最新动态等。

矿业网络,版权所有丨如未注明,均为原创丨本站采用BY-NC-SA协议授权

转载请注明原文链接:以太坊同步数据库有多大? 纯干货|深入剖析以太坊(二):以太坊账户