时间:2022-03-12|浏览:11546
用戶喜愛的交易所
已有账号登陆后会弹出下载
在谈论默克尔树之前,让我们来看看比特币块的结构。你可以看到里面有一个二叉哈希根。哈希值是由当前块中包含的所有交易产生的哈希值,采用默克尔树结构。
查看区块的链接地址:
2.默克尔树概念
Merkle Tree,又名Hash Tree,是Ralph Merkle1979年申请的专利。它是一种用于快速总结和检查大规模数据完整性的树状数据结构。
它具有以下特点:
注:如果叶节点的初始数是奇数,可以复制最后一个叶节点来补充偶数。
可以发现,只要存储的叶节点数据发生变化,就会逐层传递到相应的父节点,默克尔树根节点的哈希值就会发生变化。
案例分析了比特币交易的风险及其原因_比特币交易数据_sitehzd.com 比特币交易在线硬币交易
3.应用默克尔树
Merkle树木的应用场景如下:
对比特币的简单支付验证 (SPV) 1.什么是 SPV
简单支付认证,即简单支付,简称SPV。SPV 的目标是验证交易支付的存在,并从比特币网络中获得多少确认(多少块)。比特币中的 SPV 功能用于 Merkle 树的属性。
2.为什么需要SPV机制
众所周知,比特币网络中产生的所有交易都被包装成块。通常,一个块包含数十万笔交易是很常见的。2014年4月,比特币网络中的一个整个节点需要存储和处理所有块的数据,占用 15GB 空间,并且以每月超过 1GB 的增长速度。我该怎么办?完全下载比特币的所有块数据都需要完整的 200GB 空间!!.
如果用户使用手机使用比特币,他们没有足够的空间存储如此大量的数据,并且会逐年增加。因此,中本聪在比特币白皮书中提出SPV概念:无需操作整个节点即可验证付款,用户只需保存所有块。虽然用户无法自行验证交易,但如果他们能从区块链的某个地方找到匹配的交易,他们可以知道该交易已经被网络确认或被网络确认了多少次。
这里需要注意的是,SPV 强调验证支付比特币的交易数据,而不是交易。这两个概念是不同的。验证付款相对简单。它只需要判断用于支付的交易是否已经验证,网络已经确认了多少次(即叠加了多少块)。交易验证要复杂得多。需要验证账户余额是否足够,是否有双重支付,交易脚本是否通过,一般由全节点矿工完成。
如下图所示,我们知道比特币中的块结构分为两部分,一部分是块头,包括块的必要属性,只有80字节。另一个是块体,包括当前块下的所有交易。一般来说,一个块包含数百笔交易,每笔交易一般占用400多个字节。
比特币交易数据_案例分析了比特币交易的风险及其原因_sitehzd.com 比特币交易在线硬币交易
3. 比特币网络节点类型
以下是比特币网络中常见的节点类型:
(1)全节点
包括钱包(支付验证)、矿工、完整的区块链数据库、网络路由节点等功能。
(2)SPV 节点
只是一个简单的支付验证功能
此外,还有其他类型的节点,如独立矿工,这里就不一一介绍了。详见《精通比特币》一书中比特币网络第六章。
sitehzd.com 比特币交易在线硬币交易_案例分析了比特币交易的风险及其原因_比特币交易数据
4.SPV 验证流程
在 SPV 在节点上,不保存所有区块链数据,也不下载所有区块交易,只保存区块头数据。因此,该节点不能验证所有交易,只能用于验证支付(区块链中确认多少次)。到目前为止,比特币的高度为:521283(时间:2018-05-05 15:41),按区块头80字节计算,总尺寸只有10MB(80*521283/1024/ 1024),对整个存储容量的要求大大降低。
那么,用户A购买商品时用比特币支付,声称已将1 转账给商家BTC,到商家验证付款有效(SPV验证过程是什么?
5.默克尔路径
上一节我们提到了 Merkle 路径可以证明一个交易是否存在于一个区块中。让我们用一个例子来解释 Merkle 路径。
如下图所示,如果我们需要证明一个区块上是否有交易C(如上图中的区块结构,我们可以得到Merkle树根的哈希值),所以我们只需要 N3 和 N4 哈希值形成的 Merkle 路径可以证明过程如下:
Step4:然后将上一步获得的根哈希值与区块头中的根哈希值进行比较。如果相同,则证明区块中有交易C,否则说明不存在
也就是说,我们只需要 2 哈希节点来验证一个具有 4 笔交易的区块比特币交易数据。
在这里,我们可能看不到默克尔树结构的优看不到默克尔树结构的优势。接下来,让我们逐渐增加块中的交易量,看看 Merkle Tree 的优势。
交易量 区块大小相似Merkle 路径大小
16 笔交易
4KB
log2(16)=4
4*32 = 128 字节
512 笔交易
128KB
log2(512)=9
9*32 = 288 字节
2048 笔交易
512KB
log2(2048)=11
11*32 = 352 字节
65536 笔交易
16MB
log2(65536)=16
16*32 = 512 字节
注:散列大小为 32 字节
从上表可以看出,当交易数量呈几何增长时,Merkle 路径的成本增长非常缓慢。因此,通过 Merkle 路径,SPV 节点可以快速定位交易,成本很小。