区块链全节点与区块链轻节点的区别

随着技术的发展更新,区块链上的交易也将日益增多,这也间接形成了区块链开发的数据容量愈来愈大。由于区块链的冗余备份,要求全部节点都需保存全量的数据文件,在这个节点间,假设有用户用本身建立一个区块链节点来进行DApp的开发,可又不想参与共识,那对于这个用户而言,同步大量的数据是很是消耗时间的,并且至关耗费硬盘资源。web

将以太坊做为例子网络

在说全节点与轻节点相关介绍以前,ChainGood首先向来跟你们讲讲以太坊的区块相关的东西,以太坊区块的存储主要分为两个部分,分别是Header和Body,Body其实比较简单,就是一些的交易列表,还有Uncle Block的相关信息,可是其实更为复杂的实际上是Block Header,以下图所示Block Header里面会存比较多的数据,好比说父区块的区块hash,时间戳,挖矿的难度值等等相关的参数,数据结构

但ChainGood认为,其中最重要的当属以太坊中的“三棵树”,与此对应在区块头中的就是,StateRoot,TransactionRoot和ReceiptRoot三个哈希值。在以太坊中什么用来存储区块数据的核心数据结构?并发

利用了一种叫作Merkle-Patricia Trie(MPT)数字钱包是Ethereum用来存储区块数据的核心数据结构。分布式

最简单理解是一个倒置的树形结构,每一个节点可能有若干个子节点,在最底层,也就是叶子节点,把数据分红若干个小的数据块,计算出相应的Hash与之对应。svg

可是往上层看去,Merkle树并非直接去运算根哈希,而是把相邻的两个节点的哈希合并成一个字符串,而后运算这个字符串的哈希,这样每两个哈希就可以获得了一个”子哈希“,而这个自哈希就是他们的父节点的哈希值。区块链

以此类推优化

依然是同样的方式计算哈希值,能够获得数目更高级节点的新一级哈希,最终必然造成一棵倒挂的树,到了树根的这个位置,这一代就剩下一个根哈希了,咱们把它叫作 Merkle Root。而在以太坊中,还对Merkle树作了相应的优化,在Merkle树的基础上进行前缀树的构建,所以也就经过前缀树可以快速查询相关的数据信息,可是这个小编今天不细讲,有兴趣的同窗能够私下去研究一下。xml

所以经过Merkle树,其实咱们能够作到几个事情:ip

1. 快速重哈希:其实就是说,可以在树节点变化的状况下,根据上次的计算机结果经过计算部分值就能够计算出一个新的Merkle Root。

2. 轻节点扩展:采用Merkle树,咱们能够再公链的环境下,扩展一个轻节点。轻节点的特色其实就是,只须要存储Block Header,而不存储全量的交易列表等信息。经过Merkle证实来判断一笔交易是否在如今的区块链交易列表中。这样,其实造就了以太坊的轻节点可以运行在小容量的我的PC等终端设备上。

下面说回以太坊

在StateRoot,TxHashRoot和ReceiptHashRoot,分别取自三个MPT的计算结果:stateTrie, txTrie, 和receiptTrie的根节点哈希值。这样的话,好比说咱们在进行Block的同步过程当中,经过比对收到的TxHash,能够确认transactions列表是否同步完整,经过StateRoot来判断节点间状态是否是一致的。

所以在以太坊中,所谓全节点,其实就是同步全部区块链数据的节点,包括各类区块Body,交易列表等等相关信息。但也是由于节点全量数据都保存的状况,咱们不须要相依赖中介去进行数据的验证。

而所谓的以太坊轻节点(轻客户端)

每当有区块出如今网络便下载区块头,而不是全量的状况状态,并发送客户端须要的特定状态的默克尔证实(Merkle proofs)的请求。同时在以太坊轻节点中使用分布式哈希表来追踪前缀节点,而不是直接采用LevelDB进行直接的存储。

总结一下,不管是轻节点仍是全节点,都有存在的价值以及意义,咱们能够根据本身的需求去选择部署相应的节点,即便必然全节点的优点会比轻节点大,可是由此形成的就是全节点的资源损耗也必然会大不少。