
比特币的原始数据可以在$ HOME / .bitcoin / blocks下找到. 此目录下有两种主要文件类型,一种类似于此文件: blk00952.dat,另一种类似于此文件: rev000952.dat. blk开头的第一个文件是存储比特币源数据的文件,后一个文件用于倒带. 每个blk数据文件大小的上限为128MB,但不是非常准确地小于128M,它可能会超过130MB. 当文件已满时,比特币程序将创建一个类似的文件来存储新接收到的区块信息.
首先让我们使用以下命令查看这些文件中存储的内容. 找到比特币的块数据文件,通常在块文件下,我们以blk00000.dat文件为例,在命令行中输入以下命令:
od -x --endian = big -N 297 -An blk00000.dat
数据显示的屏幕截图如下:


上面的文件是比特币的Genesis BLock. 它是二进制数据(以十六进制表示),每两个字符代表一个字节. 下面我们进一步了解数据结构.
这是描述比特币数据结构的直观图表.


在上图中,蓝色代表复合数据类型,橙色代表简单数据类型,绿色代表注释. 一个区块由一个区块头,交易数量和几个交易组成. 每个事务由几种简单的数据类型和几种事务输入/输出组成. 以此类推,这里有一些解释:
谨慎的学生可能已经注意到,这些数据不包括几个非常重要的字段,即“哈希哈希”,“区块高度”,“交易哈希”和“地址”. 是的,当中本聪设计比特币时,这是一个极端的“把戏”,而且链上绝对不存在可以通过计算得出的数据. 从链设计的角度来看,这是绝对正确的. 它可以节省大量磁盘空间,但这为我们带来了额外的工作. 下面我们讨论每个字段的计算.
Block和Transaction Hash值是通过相同的算法得出的,唯一的区别是计算所涉及的数据是不同的. 对于Block Hash,我们的输入数据仅为80字节的Block Header,对于Transaction,它是整个Transaction数据. Block Header包含Merkle Root,因此在计算Block Hash时不必输入整个Block.
通过执行以下形式的两次sha-256操作,从输入数据中得出哈希值:

哈希= sha256(sha256(数据))
我们可以通过将Block Header和整个Transaction分别放入上述公式中来获得相应的Hash值.
我们知道dat是什么数据格式文件,比特币的原始数据存储在blkxxxxx.data中,每个数据文件中存储许多块. 如果我们从第0个字节开始依次读取并解析出其中的所有块,则会发现这些块未完全排序. 换句话说,您可以先阅读第178个块,然后再阅读第177个块. 至于为什么会这样,这是因为当比特币系统运行时,系统下载块时不会根据块号从小到大下载块,而是根据滑动窗口下载,即从一个节点下载1024一次,块还会从其他节点下载块. 不同的块在不同的时间到达,但是在本地存储时,它们将按顺序直接存储,并且每个块的文件中的文件编号和偏移量都被存储. 具体来说,在leveldb中,它存储在blocks文件下的索引下,该文件存储所有块的存储信息.
因此,如果要获取正确的块高度,则必须整理出乱序的块. 了解区块链的学生应该知道,区块链的数据结构是一个反向的单链表. 我们可以通过Block Hash和Previous Block Hash重新连接这些块. Genesis Block的Previous Block Hash固定为全0. 这样,我们还可以获得块高度.

要支持基于地址查询交易的初始功能,我们必须找到每个交易的发件人和收款人地址. 这两个数据分别包含在“事务输入”和“输出”的脚本字段中. 查找地址的方法大致分为两个步骤:
对于“事务输出”,找出公钥或公钥哈希,然后根据某种算法计算地址.
对于“交易输入”dat是什么数据格式文件,将其对应的“先前交易输出”中的地址作为其地址.
我想在第二点做一些补充说明. 尽管您可以在“事务输入”中获取公钥,但我建议您不要直接从“事务输入”中计算地址. 这是因为在隔离见证之后,计算地址的方法已更改. 直接从Input解析地址可能会获得与先前的Transaction Output不同的地址. 简而言之,您可能以张三的名义收到了一笔钱,却以李四的名义花了这笔钱. 张三里斯原本是同一个人,但是由于这个错误,计算帐户余额时余额为负. ##结论作为Blockchain之父,中本聪(Satoshi Nakamoto)在设计比特币时充满了异想天开. 他对这些细节的控制真的很棒. 在这个项目中,如果有时间,您可能希望编写一些代码来尝试解析原始数据,这对于彻底了解比特币非常有帮助.
PS: 这种分析方法也适用于Dash中的区块分析.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-263501-1.html
我昨天才在超市挑选黑芝麻