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

随着技术的发展更新,区块链上的交易也将日益增多,这也间接造成了区块链开发的数据容量越来越大。因为区块链的冗余备份,要求所有节点都需保存全量的数据文件,在这个节点间,假设有用户用自己创建一个区块链节点来进行DApp的开发,可又不想参与共识,那对于这个用户而言,同步大量的数据是非常消耗时间的,而且相当耗费硬盘资源。

将以太坊作为例子

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

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

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

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

但是往上层看去,Merkle树并不是直接去运算根哈希,而是把相邻的两个节点的哈希合并成一个字符串,然后运算这个字符串的哈希,这样每两个哈希就能够得到了一个”子哈希“,而这个自哈希就是他们的父节点的哈希值。

以此类推

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

因此通过Merkle树,其实我们可以做到几个事情:

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

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

下面说回以太坊

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

因此在以太坊中,所谓全节点,其实就是同步所有区块链数据的节点,包括各种区块Body,交易列表等等相关信息。但也是因为节点全量数据都保存的情况,我们不需要相依赖中介去进行数据的验证。

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

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

总结一下,不论是轻节点还是全节点,都有存在的价值以及意义,我们可以根据自己的需求去选择部署相应的节点,即使必然全节点的优势会比轻节点大,但是由此造成的就是全节点的资源损耗也必然会大很多。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值