区块链存储

区块链到底是如何存储的?

区块数据 磁盘

blocks/blk*.dat (在目录~/.bitcoin.blocks’)文件中,包括:原始块的数据,这些数据条目被被几个打包到一个区块里面。节点首先吧接收到的区块写入到blk00000.dat,等待写满(128MB)左右,开始写下一个,以此类推。(文件是二进制文件)
文件结构:
在这里插入图片描述

  1. magic bytes:每个区块会分发一个,为了在连续的数据流过程中区别一个区块和另一个区块的标记。长度是四个字节,根据不同的网络标记有所不同。4个字节
    在这里插入图片描述

  2. size:这个指的是接下来整个文件的大小。(本身的大小是4字节)
    大小的限制在源代码中MAX_BLOCKFILE_SIZE控制的,通常是128MB。

  3. block header:固定的80字节,结构如下。merkle hash就是一种hash。

block header
在这里插入图片描述
4、tx count:表示区块中交易的数量。
5、transaction data:交易结构:
在这里插入图片描述
从数据中解析流程大致如下:

读取4个字节版本号
解析varint,得到输入数量n
执行1~n次循环,解析交易输入
解析varint,得到输出数量m
执行1~m次循环,解析交易输出

在这里插入图片描述

blocks/index/*(元数据)Level DB

是一个leveldb数据库,存储着目前已知块的元数据,元数据记录的是块对应磁盘上的位置。

chainstate/* Level DB

也是leveldb数据库,目的是为了验证新来的blocks和tx是否合法。存储的数据是utxo的:也就是每一次交易都有输入输出,输入记录的是资金的来源,输出记录的是资金的。产生的输出就是“未花费的交易输出”,utxo,unspent transaction output。基于基于账户的,
比特币中并没有账户的概念,
以紧凑的形式存储所有当前未花费的交易以及它们的元数据。这里的数据对于验证新传入的块和交易是必要的。在理论上,这些数据可以从块数据中重建,但是需要很长的时间。没有这些数据也可以进行数据验证,但是需要对现有数据块进行扫描,慢。
数据结构 :merkle tree。(只要记录root hash,就能检测出整个树上的变化)
区块组织成了merkle tree的形式
最下面一层是:data blocks, (transaction)每个区块分为两个部分,block header(root hash);block body。
全节点,全不都有
轻节点,只有block header。需要用merkle proof来证明。在手机上查看,是不是被写到区块链上了。
向全节点发送请求,只要标红的哈希发过来,然后验证这些hash是不是跟本身存储的根哈希是一致的。给了我交易的内容,且给我这个分支上面的hash,就能够证明。
验证这个的时间和空间的复杂度,log(n)。
证明,proof of non-memberships,传输全部的数内容(n)线性的。
对页节点,进行hash排序,如果知道在这两个中间,那就说明这两个节点中间那就不存在,log(n)
排好序的sorted merkle tree,这个是不存在证明,查找的时候更快。(这个是在目前的比特币里面没有使用的,但是在域名解析系统里面是不是要使用?)
hash必须是无环的。

央行发行数字货币

私钥签名,验证是不是真的。非对称加密算法,私钥容易泄露。数字货币就是文件,但是可以复制。
双重支付的问题,双花,double spending attack。
央行记录编号,需要央行进行确认金钱的归属问题。
1、谁有权利发行货币
2、如何防范double spending。
数据结构:区块链。
A获得了铸币权,发行10个比特币。—>上链。
分发:A\B,并签名,和b的地址,公钥hash,相当于银行账号。
输入:说明币的来源,以及B的hash。A的公钥的hash,来源的hash以及公钥的hash,输出里面包含了A的hash。
A给B钱,用B的公钥加密,B收到钱后,利用B自己的私钥解密。
两种哈希指针:
1、串起来的这个全部内容的hash
2、币的来源(放置双花攻击)
比特币,公开他们的支付二维码。
A—>B
block header

  1. version
  2. 指向前一个区块的指针
  3. merkle tree的root哈希值
  4. 挖矿的难度目标阈值target
  5. nonce随机数。(挖矿需要)
    H(block header) <=target

只有block header的hash是串联起来的。

全节点和轻节点。full node 和light node(不能独立验证交易的合法性)

全节点需要验证每一个交易信息。
我们主要针对的是全节点,因为,轻节点没有参与区块链的构造和维护,只是利用了一些区块链的信息去做一些查询什么的。

你想用比特币来做交易,只是利用轻节点就可以了。(如何对应到域名解析系统中来做)

如何让他们产生分布式的共识。distributed consensus
distributed hash table,全局的hashtable。共识的内容,包含了那些key value pair。
分布式系统
在一个异步的系统里 asynchronous 网络延迟没上线,存在一个faulty
CAP theorem
consistency一致性
availability可用性
partition tolerance部分

hyperledger(联盟链)fabric https://blog.csdn.net/ice_fire_x/article/details/104362219
membership

blocks/rev*.dat 磁盘

包含撤销的数据,作为反向的补丁。
每个区块链文件都会对应一个撤销文件

区块链存储总量连接

https://www.blockchain.com/explorer/blocks/btc?page=1
https://blockchair.com/zh/bitcoin/blocks#

https://blockchair.com/zh/bitcoin

猜你喜欢

转载自blog.csdn.net/weixin_41523437/article/details/114867007