比特币代码分析11 比特币存储机制

比特币存储机制
  比特币存储系统由两部分组成: kv 数据库(levelDB)索引和普通数据文件。普通文件用于存储区块链数据,kv 数据库用于存储区块链元数据。用于存储区块链数据的普通文件以 blk00000.dat , blk00001.dat 文件名格式组成。其中 index 目录存储用于存储区块元数据。
普通区块数据文件
  为了快速检索区块数据,每个文件的大小是128 M Bytes。区块里的数据(区块头和区块里的所有交易)都会序列成字节码的形式写入 dat 文件中。在序列化的过程中,如果检测到当前写入文件尺寸加上区块尺寸大于 128 M Bytes,则会重新生成一个 dat 文件。
kv数据索引
  区块的索引元数据格式如 <blockHash,xxxxx+npos> 格式, 其中 xxxxx 为 dat 文件序号,npos 为区块写入 dat 文件的起始位置。?
  交易的元数据格式如 <txHash, xxxxx+npos+nTxOffset> 格式, 其中 xxxxx、npos 和上面的描述一致,nTxOffset 为写入 dat 文件的起始位置(基于npos 位置)。
  上述所有元数据都将写入 kv 数据库中,其中 blockhash/txHash 将作为后续查询具体数据在 dat 文件中的索引使用。
LevelDB
  Google 的 LevelDB 数据库存储区块链元数据。Leveldb是一个google实现的非常高效的kv数据库,并且是开源的。
  它的一个主要特点就是写的性能非常好,适用于比特币客户端这种应用场景。
  levelDB虽然是个数据库,但是并不像其它的主流数据库(mysql ,oracle等)可以提供客户端连接服务。它只是一个基于c++的lib库而已,所以我们使用起来也很简单,直接在工程里链接lib库文件。

原文地址:http://blog.51cto.com/13878196/2332015

时间: 2024-08-09 08:56:09

比特币代码分析11 比特币存储机制的相关文章

比特币代码分析4 节点发现机制

当程序第一启动时,它并不知道任何活跃节点的ip地址.为了发现一些全节点的ip地址,他们会查询硬编码在比特币内核或BitCoinJ中的,一个或多个DNS域名,在返回的结果中应该包含一个或多个DNS A记录,里面有一些可接受新连接的全节点的ip地址.DNS 种子由比特币社区成员维护.其中一部分提供动态DNS种子服务器,它通过扫描比特币网络,自动获取活动节点的ip地址:其他的提供一些静态DNS种子,这需要手动更新,不过他们很有可能提供不活跃节点的ip地址.不管是动态的,还是静态的DNS种子,如果节点在

EOS代码分析3 EOS存储机制的IPFS分布式文件系统

EOS使用IPFS分布式文件系统作为底层存储.IPFS是一种内容可寻址.点对点.通过http协议传输的分布式文件系统.IPFS采用content-addressable寻址技术,即通过文件内容进行检索而不是通过文件的网络地址.简单来说,就是对文件内容进行hash运算,将hash值作为文件名保存在本地数据库中,所以,只要文件内容不变,则文件名也保持不变.运行IPFS的节点,既是客户端又是服务器.客户端通过发送文件名到服务器,请求下载文件,服务器会根据文件名到数据库中查找对应的文件,查找成功后将文件

java-通过 HashMap、HashSet 的源码分析其 Hash 存储机制

通过 HashMap.HashSet 的源码分析其 Hash 存储机制 集合和引用 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并非真正的把 Java 对象放入数组中.仅仅是把对象的引用放入数组中,每一个数组元素都是一个引用变量. 实际上,HashSet 和 HashMap 之间有非常多相似之处,对于 HashSet 而言.系统採用 Hash 算法决定集合元素的存储位置,这样能够保证能高速存.取集合元素:对于 HashMap 而言.系统 key-value 当成一个总体进行处理

java-通过 HashMap、HashSet 的源代码分析其 Hash 存储机制

通过 HashMap.HashSet 的源代码分析其 Hash 存储机制 集合和引用 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java 对象放入数组中,只是把对象的引用放入数组中,每个数组元素都是一个引用变量. 实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元素的存储位置,这样可以保证能快速存.取集合元素:对于 HashMap 而言,系统 key-value 当成一个整体进行处理,

HTML5分析实战Web存储机制(Web Storage)

Web Storage它是Key-Value在持久性数据存储的形式.Web Storage为了克服cookie把所引起的一些限制.当数据需要严格格控制client准时,没有必要不断地发回数据server. Web Storage有两个目的:提供一种存储会话数据的路径;提供存储大量能够跨会话存在的数据的机制. 最初的Web Storage规范包括了两个对象的定义:sessionStorage对象和globalStorage对象.这两个对象在支持的浏览器中都是以window对象属性的形式存在.支持s

蓝牙协议分析(11)_BLE安全机制之SM

1. 前言 注1:此SM是Security Manager的缩写,非彼SM,大家不要理解歪了! 书接上文,我们在"蓝牙协议分析(10)_BLE安全机制之LE Encryption"中介绍了BLE安全机制中的终极武器----数据加密.不过使用这把武器有个前提,那就是双方要共同拥有一个加密key(LTK,Long Term Key).这个key至关重要,怎么生成.怎么由通信的双方共享,关系到加密的成败.因此蓝牙协议定义了一系列的复杂机制,用于处理和加密key有关的操作,这就是SM(Secu

比特币代码分析7 交易校验

每一个收到交易,比特币节点都验证该交易,有效的交易将被传递到各个附近节点,这将确保只有有效的交易才会在网络中传播, 而无效的交易将会在第一个节点处就被废弃.校验选项列表:每一个节点在校验每一笔交易时,都需要对照一个长长的标准列表1.交易语法与数据是否正确2.输入与输出列表都不能空(>=1)3.交易大小 < max_block_base_size(1M)4.0 < 输出值与总量 < 2100万5.输出点中hash!=0,N!=-1(哈希值不能为零.序列号N不能为-1)6.nlockt

比特币代码分析1 整体架构

Bitcoin 比特币官方客户端有两个版本:一个是图形界面的版本,通常被称为 Bitcoin(首字母大写),以及一个简洁命令行的版本(称为 bitcoind).命令行可以有两种运作方式:节点,RPC命令.节点是持续运行,RPC命令是一次性运行. 原文地址:http://blog.51cto.com/13878196/2323180

比特币代码分析3 命令调用框架

原文地址:http://blog.51cto.com/13878196/2325373