-
-
[原创]从零开始学加密货币(比特币)番外(1)
-
发表于:
2019-11-28 06:02
2268
-
在说接下来的一些问题之前,我想再对之前说的这个哈希指针做个补充,这里先提出一个概念merkle tree,它指的是一种哈希树(通常是二叉树),树也是我们熟知的一种数据结构。前面提到的哈希指针,大概是这样的(如下图所示,自己画的)。
这个图我第一眼看到的时候感觉很眼熟,很像dht中的概念,这里扯开说一个例子,比方说,我要下载一个电影(p2p),这时候我加入dht网络,可以想象成加入了一个圈,我向我左边的一个人询问,你有没有电影,左边的人如果不知道他会再问他左边的人,就这样要问一圈,而且我假设这个我左边的人维护了一张表,这张表里对应了电影资源和相对的哈希值,那是不是意味着他需要遍历这张表,对于最坏情况来说,每个人都需要遍历一遍,这是非常耗时以及效率底下的,不知道当年中本聪是不是也用p2p下电影,于是他很聪明的提出了spv(Simplified Payment Verification)简化支付验证,我还是类比于dht的概念,谈谈我的想法,我觉得发明者当初一定是预见到,未来将会有移动支付的出现,例如手机之类的东西,于是对于这些客户端来说,没必要去把整个块全部遍历一遍(在这里也就是全部下载),这样对移动端的负荷会很大。那么文初提到的这个,merkle tree,长这样,如下图。
图是维基百科下的。
采用这种方法有几个好处,比如说还是p2p,本来我一串哈希值,下到一半了,出错了,貌似是没有办法断点重续(这个前提是文件没有被分割成一个一个小块,他是一个完整连续的概念),但是现在我们有了merkle tree,可以把一个区块里的数据分割成一小段一小段,对于下载来说,如果出错了,我只需要重新下载一小段,对于比特币支付验证来说,例如上图。我们想象只有L1里有跟我们这次交易相关的信息,那么我就不必下载所有数据,我只需要知道hash(l2)和hash(1),然后我计算根节点哈希,是否跟这个块的根节点哈希相同。如果相同,那么就证明这个交易(哈希值)已经在链上。
小结:看到这里的时候,我特别有感触,就是去中心化的很多东西是很类似的,其实同样的概念会被用在不同的东西上面,出现的效果完全不同。然后我提出了一个疑问,那既然dht网络也是去中心化的,而且说实话,很多东西还很类似,为什么不在dht的基础上再去做比特币的交易处理呢?
我自己的回答:首先每个东西的发明,都是专门为了做一件事情,就好比,为什么有拖拉机,有吊车,大家都是车,但是功能却不太一样。通过现象看本质,感谢版主的关注,下期预告:
数字签名(schnorr signature和一些相关的知识),众所周知,在现代社会中,签名代表了不可抵赖性,在数字货币交易中,我们希望每一方都不能抵赖,无论是付钱的人还是收钱的人,或者是类似银行的机构发行货币。但同时,我们用数字货币交易也想保证匿名性。这就产生矛盾了。具体的下一篇分析。有不对及各种问题,请指正补充谢谢大家。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)