分类账是全部状态转换的有序,防篡改记录,状态转换是参与方提交的链码调用(“交易”)的结果,每一个交易都会生成一组资产键值对,这些键值对做为建立,更新或删除提交到分类账。数据库
分类账由区块链(“链”)组成,用于以块的形式存储不可变的顺序记录,以及状态数据库以维持当前状态。每一个通道有一个分类账,每一个对等点为其所属的每一个通道维护一个分类账的副本。区块链
链是一个交易日志,结构为哈希连接区块,其中每一个区块包含N个有序交易,区块头部包括区块的交易的哈希,以及前一个区块的头部的哈希。经过这种方式,分类帐上的全部交易都按顺序排列并以加密方式连接在一块儿,换句话说,在不破坏哈希连接的状况下,不可能篡改分类账数据。最新区块的哈希表示以前的每一个交易,从而能够确保全部对等点处于一致且可信的状态。加密
链存储在对等点文件系统(本地或附加存储)上,有效地支持区块链工做负载的仅附加性质。日志
分类账的当前状态数据表示链交易日志中包含的全部键的最新值,因为当前状态表示通道商已知的全部最新键的值,所以有时将其称为世界状态。索引
链码针对当前状态数据调用执行交易,为了使这些链码交互很是有效,全部键的最新值都存储在状态数据库中。状态数据库只是链的交易日志的索引视图,所以能够随时从链中从新生成。在接受交易以前,状态数据库将在对等点启动时自动恢复(或在须要时生成)。进程
状态数据库选项包括LevelDB和CouchDB,LevelDB是嵌入在对等点进程中的默认状态数据库,并将链码数据存储为键值对。CouchDB是一个可选的替代外部状态数据库,当你的链码数据建模为JSON时,它提供额外的查询支持,容许对JSON内容进行丰富的查询。有关CouchDB的更多信息,请参阅CouchDB做为状态数据库。数据