主页 > imtoken钱包靓号地址软件 > 比特币默克尔树和 SPV 机制

比特币默克尔树和 SPV 机制

imtoken钱包靓号地址软件 2023-01-18 21:56:42

本文主要介绍Merkle树在比特币中的数据结构、原理特点及应用。同时,我们还将介绍比特币轻钱包的实现基础——简单支付验证(SPV),并详细介绍其原理机制和与默克尔树的关系。

什么是默克尔树1.比特币中的默克尔树

在说默克尔树之前,我们先来看看比特币上一个区块的结构,可以看到里面有一个二叉哈希树根。该哈希值是当前区块中包含的所有交易产生的哈希值,采用默克尔树结构。

img

查看区块的链接地址:

img

2. Merkle 树概念

Merkle Tree,又称哈希树,是 Ralph Merkle 于 1979 年申请的专利。它是一种树状数据结构,用于快速归纳和检查大规模数据的完整性。

它具有以下特点:

注意:如果开始的叶子节点个数是奇数,可以复制最后一个叶子节点补一个偶数。

可以发现,只要存储的叶子节点数据有任何变化,都会一层一层的向上传递给对应的父节点,最后将Merkle树的根节点的hash值改变。

比特币交易几个小时都没确认_比特币交易确认书_比特币区块确认过程

img

3.默克尔树的应用

默克尔树的应用场景如下:

比特币的简单支付验证 (SPV)1.什么是 SPV

简单付款验证,简称 SPV。 SPV 的目标是验证某笔交易支付的存在以及从比特币网络中获得了多少确认(多少块)。比特币中的 SPV 功能应用于 Merkle 树的属性。

2.为什么需要SPV机制

我们知道,比特币网络中产生的所有交易都被打包成块。通常,一个块包含数十万笔交易是很常见的。 2014 年 4 月,比特币网络中的一个全节点需要存储和处理所有区块的数据,占用 15GB 空间,并且以每月超过 1GB 的速度增长。怎么办?完全下载比特币的所有区块数据需要完整的 200GB+ 空间! ! .

如果用户使用手机来使用比特币,没有足够的空间来存储如此海量的数据,而且还会逐年增长。所以中本聪在比特币白皮书中提出了SPV的概念:无需运行全节点即可验证支付,用户只需保存所有区块头即可。虽然用户无法自行验证交易,但如果能够从区块链某处找到匹配的交易,就可以知道该交易已经被网络确认,也可以确认该交易被网络确认了多少次。

这里需要注意的是,SPV 强调的是验证支付,而不是交易。这两个概念是不同的。验证付款相对简单。它只需要判断用于支付的交易是否已经过验证,以及被网络确认了多少次(即叠加了多少个区块)。交易验证要复杂得多。需要验证账户余额是否足够支出,是否有双重支付,交易脚本是否通过等,一般由全节点矿工完成。

如下图所示,我们知道比特币中的区块结构分为两部分,一是区块头,包含区块的必要属性,大小只有80字节。另一个是区块体,包含当前区块下的所有交易。一般一个区块包含成百上千笔交易,每笔交易一般占用400多字节。

img

比特币交易几个小时都没确认_比特币交易确认书_比特币区块确认过程

3.比特币网络节点类型

这里我们需要介绍几种比特币网络中常见的节点类型:

(1)全节点

包含钱包(支付验证)、矿工、完整的区块链数据库、网络路由节点等功能。

img

(2)SPV节点

只有简单的支付验证功能

img

此外,还有独立矿工等其他类型的节点,这里就不一一介绍了。详情请参考《精通比特币》一书中比特币网络第6章。

p>

4.SPV验证流程

比特币交易确认书_比特币交易几个小时都没确认_比特币区块确认过程

在SPV节点上,不保存所有区块链数据,不下载区块的所有交易,只保存区块头数据。所以这种节点不能验证所有的交易,只能用来验证支付(确认支付在区块链中,确认多少次)。截至目前,比特币高度为:521283(时间:2018-05-05 15:41),按照区块头80字节,总大小只有10MB(80*521283/1024/ 1024),大大降低了对整个存储容量的要求。

那么,用户A在购买商品时使用比特币支付并声称自己已向商家转账1 BTC,到商家验证付款有效(SPV验证)的流程是什么?

img

5.默克尔路径

在上一节中比特币交易确认书,我们提到了可以使用 Merkle 路径来证明区块中是否存在交易。下面我们用一个例子来说明Merkle路径。

如下图,如果我们需要证明一个区块上是否存在交易C(如上图中的区块结构,我们可以得到Merkle树根的hash值) ,那么我们只需要N3和N4的哈希值组成的Merkle路径就可以证明了。流程如下:

Step4:然后将上一步得到的根哈希值与区块头中MerkleTree的根哈希值进行比较,如果相同,则证明该区块中存在交易C,否则表示它不存在

img

也就是说,对于一个包含 4 笔交易的区块,我们只需要 2 个哈希节点来进行支付验证。

在这里,由于区块中的交易数量少,我们可能无法清楚地看到 Merkle Tree 的结构。Merkle Tree 的优势。让我们逐渐增加区块中的交易数量,看看 Merkle Tree 的优势。

交易块数近似大小哈希数默克尔路径大小

比特币区块确认过程_比特币交易几个小时都没确认_比特币交易确认书

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 字节

备注:一个hash大小为32字节

从上表可以看出,当交易数量变成几何速度增长时,Merkle 路径的成本增长非常缓慢。因此,通过 Merkle 路径,SPV 节点只需很小的成本就可以快速定位到一笔交易。

本文转载自:“Merkle Tree”与SPV机制” | shuwoom.com

img

如果喜欢,请到作者网站打赏。

本文参与Chainlink社区计划的写作激励,好文好收益比特币交易确认书,欢迎大家一起阅读。