[比特币]比特币中的数据结构

哈希指针(Hash Pointers)

对于一个结构体而言,指向它的指针存储的是它在内存中的首地址;而指向它的哈希指针,不仅保存这它的首地址,还保存着该结构体内容的哈希值。通过哈希指针,不仅可以找到该结构体,还能查验该结构内容是否被篡改过。

区块链

比特币中存储数据用的是区块链。所谓区块链,可以理解为链表。不过与链表不同的是,区块链使用哈希指针代替了普通指针。下图为区块链简单结构:

block

哈希指针包含在该区块的区块头中,它是对前一个区块的整体进行哈希运算得到的。

Merkle tree

MerkleTree

如上图所示,与Binary tree不同,Merkle tree中各节点保存的都是子节点的Hash值。

在Merkle Tree中,每个叶子存储的都是一笔交易的Hash,父节点存储的是对子节点取Hash后的值。所以如果有交易内容内容被修改,那么最终都会辐射到Merkle Tree的根节点。

比特币中的应用

在比特币网络中,所有的交易信息都是存储在区块中,通过Hash指针组织成区块链;每个区块都可以分为两部分:block header和block body。block body中存储该区块包含的所有交易,block header中包含有前一个区块的Hash(只是对前一个区块的Block header进行Hash,并非对整个区块进行Hash),本区块中所有交易组成的Merkle tree的根Hash以及其它信息(包括区块版本、挖矿难度、时间戳、Nonce)。

在比特币网络中,存在两种类型的节点:

  • 全节点,存储有整个比特币网络中的所有block。
  • 轻节点,只存储block header。比特币钱包就是轻节点的一种。轻节点并不参与比特币网络的构建,只能算是比特币网络的一个应用。

在使用比特币钱包交易时,需要向收款方证明该交易已经被写入区块。此时,可以使用 Merkle Proof来证明该交易已被写入区块。

提供Merkle Proof时,钱包会向附近的全节点发出请求,全节点会将Merkle tree中与该交易相关路径上的节点返回给请求方,之后钱包再将收到的信息发送给收款方进行验证。如下图所示,全节点只需将红框选中的Hash返回给钱包即可,其它节点的Hash因为不参与计算,所以无需返回。

MerkleProof


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。


posted @   落雷  阅读(1116)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示