上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
0.4 数据层
区块链作为一个分布式系统用于解决特定场景的一些问题,从本质来看,区块链是一个“状态机”。从技术角度来看,状态是指一个事物在某一特定的时间点所保存的信息。状态机是指记录某一时刻事物所处状态的机器或设备。给定某些输入,状态机的状态可能会发生改变,同时状态机会对这些发生改变的状态提供相应的输出,对于区块链这种状态机来说,这些输出可以看作是不可改变的。
比特币系统、以太坊和超级账本在区块链数据结构、数据模型和数据存储方面各有特色。在数据模型的设计上,比特币系统采用了基于交易的模型,每笔交易由表明花费来源的输入和表明花费去向的输出组成,所有交易通过输入与输出链接在一起,因此每一笔交易都可追溯。以太坊与超级账本需要支持功能更为丰富的通用应用,因此采用了基于账户的模型,可基于账户快速查询当前余额或应用状态。
在数据存储的设计上,因为区块链数据类似于传统数据库的预写式日志,因此通常按日志文件格式存储。由于系统需要大量基于哈希值的键值检索(如基于交易哈希值检索交易数据、基于区块哈希值检索区块数据),索引数据和状态数据通常存储在键值数据库中,如比特币系统、以太坊和超级账本都用LevelDB存储索引数据。