一、 轻节点和全节点
每一个区块包括区块头和区块体,区块体内包含着这个区块中囊括的交易,而区块头只需要维护所有交易经过merkle tree计算而得的root hash值就可以了。
轻节点就像我们的手机,只需要维护区块链中区块头的信息。
而全节点需要维护所有区块中的信息,大多数全节点是矿机。
二、 如何进行交易验证
当轻节点想要确定这个交易是否在区块中时,它首先收到交易对手发给它的数据区块以及路径节点。
轻节点首先需要验证,数据区块中是否存在发生的交易;
其次,轻节点将顺着数据区块,经过路径节点步步计算得到区块头的hash值。注意这里的hash值很难伪造,这保证了这个方法的可行性。
轻节点收到计算得到的区块头中的root hash值与自己维护的区块头信息进行匹配,则完成了验证。
三、 如何验证交易不存在
通过上面的方法,虽然可以验证交易存在是否合法,但是如果我们想主动验证某个交易是否存在,该怎么办呢?
一个方法就是穷举数据块,可以想象这个过程将消耗很大的计算量。
proof of non-membership提出,在数据区块构成merkle tree的时候,数据区块将根据每一个区块的hash值进行排列,这样当我们想验证某个交易是否存在时,我们对这个交易的数据求hash,然后按照大小进行寻找。当得到这个hash值相邻的两个区块时,我们对其进行merkle proof向上求解,当得到root hash时,证明这个交易确实不存在。