主页 > imtoken钱包怎么登录 > 比特币区块结构默克尔树及简单支付验证分析-小专栏
比特币区块结构默克尔树及简单支付验证分析-小专栏
在比特币网络中,并不是每个节点都有存储完整区块链数据的能力。由于存储空间的限制,很多节点使用 SPV(Simplified Payment Verification)钱包来访问比特币。通过简单的支付验证,无需存储完整的区块链即可验证交易。本文将分析区块结构 Merkle 树以及如何验证交易。
块结构
工作量证明中出现了区块信息截图:
区域块
细心的同学一定发现了很多其他里面没有提到的信息,比如:时间戳、版本号、交易次数、二叉哈希树根(Merkle root)等。
我们来看看块结构是什么样的:
块结构图
如上图(以下简称块结构图):每个数据块包含一个块头和一个块体。
区块头封装了当前版本号、前一个区块的哈希值、当前区块的PoW所需的随机数(Nonce)、时间戳、Merkle根信息。
区块体包括在当前区块中经过验证并在区块创建过程中产生的所有交易记录。这些记录经过默克尔树的哈希处理,生成一个唯一的默克尔根,并记录在区块头中。
区块哈希值实际上并不包含在区块数据结构中,实际上只是区块头在打包区块时用来计算哈希(每个节点从网络接收到时计算出来的),常说的区块哈希值其实就是区块头哈希值,可以用来唯一地一、标识一个区块。
区块头80字节,平均交易至少250字节区块链哈希值交易记录查询,平均区块包含2000笔交易。因此,包含完整交易的区块比区块头大 4000 倍。
SPV 节点只下载区块头,而不是每个区块中包含的交易信息。这样一个没有交易信息的区块链只有完整区块链大小的千分之一。 SPV节点如何验证交易?
哈希验证
先做个介绍,我们先来复习一下哈希函数,记账原理,我们知道原始信息的任何细微变化都会哈希出完全不同的哈希值。
简单的文件验证
我们通常使用哈希来验证下载文件的完整性,我经常看到这样的下载页面:
@ >
在比特币网络中,并不是每个节点都有存储完整区块链数据的能力,受限于存储空间的限制,很多节点使用SPV(Simplified Payment Verification 简单支付验证))钱包连接到比特币网络,并且通过简单的支付验证,无需存储完整的区块链即可验证交易。本文将分析区块结构 Merkle 树以及如何验证交易。
块结构
工作量证明中出现了区块信息截图:
区域块
细心的同学一定发现了很多其他里面没有提到的信息,比如:时间戳、版本号、交易次数、二叉哈希树根(Merkle root)等。
我们来看看块结构是什么样的:
块结构图
如上图(以下简称块结构图):每个数据块包含一个块头和一个块体。
区块头封装了当前版本号、前一个区块的哈希值、当前区块的PoW所需的随机数(Nonce)、时间戳、Merkle根信息。
区块体包括在当前区块中经过验证并在区块创建过程中产生的所有交易记录。这些记录经过默克尔树的哈希处理,生成一个唯一的默克尔根,并记录在区块头中。
区块哈希值实际上并不包含在区块数据结构中,实际上只是区块头在打包区块时用来计算哈希(每个节点从网络接收到时计算出来的),常说的区块哈希值其实就是区块头哈希值,可以用来唯一地一、标识一个区块。
区块头80字节,平均交易至少250字节,平均区块包含2000笔交易。因此,包含完整交易的区块比区块头大 4000 倍。
SPV 节点只下载区块头,而不是每个区块中包含的交易信息。这样一个没有交易信息的区块链只有完整区块链大小的千分之一。 SPV节点如何验证交易?
哈希验证
先做个介绍,我们先来复习一下哈希函数,记账原理,我们知道原始信息的任何细微变化都会哈希出完全不同的哈希值。
简单的文件验证
我们通常使用哈希来验证下载文件的完整性,我经常看到这样的下载页面:
@ >
在比特币网络中,并不是每个节点都有存储完整区块链数据的能力,受限于存储空间的限制,很多节点使用SPV(Simplified Payment Verification 简单支付验证))钱包连接到比特币网络,并且通过简单的支付验证,无需存储完整的区块链即可验证交易。本文将分析区块结构 Merkle 树以及如何验证交易。
块结构
工作量证明中出现了区块信息截图:
区域块
细心的同学一定发现了很多其他里面没有提到的信息,比如:时间戳、版本号、交易次数、二叉哈希树根(Merkle root)等。
我们来看看块结构是什么样的:
块结构图
如上图(以下简称块结构图):每个数据块包含一个块头和一个块体。
区块头封装了当前版本号、前一个区块的哈希值、当前区块的PoW所需的随机数(Nonce)、时间戳、Merkle根信息。
区块体包括在当前区块中经过验证并在区块创建过程中产生的所有交易记录。这些记录经过默克尔树的哈希处理,生成一个唯一的默克尔根,并记录在区块头中。
区块哈希值实际上并不包含在区块数据结构中,实际上只是区块头在打包区块时用来计算哈希(每个节点从网络接收到时计算出来的)区块链哈希值交易记录查询,常说的区块哈希值其实就是区块头哈希值,可以用来唯一地一、标识一个区块。
区块头80字节,平均交易至少250字节,平均区块包含2000笔交易。因此,包含完整交易的区块比区块头大 4000 倍。
SPV 节点只下载区块头,而不是每个区块中包含的交易信息。这样一个没有交易信息的区块链只有完整区块链大小的千分之一。 SPV节点如何验证交易?
哈希验证
先做个介绍,我们先来复习一下哈希函数,记账原理,我们知道原始信息的任何细微变化都会哈希出完全不同的哈希值。
简单的文件验证
我们通常使用哈希来验证下载文件的完整性,我经常看到这样的下载页面:
@ >