Hyperledger Fabric 中文文档

Hyperledger Fabric 中文文档


账本

账本有序了且防篡改的保存着所有状态转换序记录。状态转换是由参与方提交的 chaincode 调用(“事务”)的结果。每笔交易都会生成一组资产键值对,并将其作为创建,更新或删除提交给账本。

分类账由区块链(’链’)组成,以便将不可变的有序记录存储在块中,以及用于维护当前状态的状态数据库。每个频道有一个账本。每个对等节点为其所属的每个频道维护一份账本副本。

链(Chain)

链是一个事务日志,其结构为哈希链接块,其中每个块包含N个事务序列。块头包括块的交易事务的哈希,以及前面块的头部的哈希值。通过这种方式,账上的所有交易都被排序并以加密方式连接在一起。换句话说,在不破坏哈希链接的情况下篡改账本数据是不可能的。最新块的哈希与之前的每个事务都有关系,从而可以确保所有对等点处于一致且可信的状态。

该链存储在对等节点文件系统(本地或附加存储)上,高效支持着区块链追加区块的特性。

状态数据库(State Database)

帐本的当前状态数据表示交易链式日志中包含的所有 key 的最新值。由于当前状态代表了该频道已知的所有最新键值,因此有时也将其称为世界状态(World State)。

Chaincode 根据当前数据状态执行事务。为了使这些 chaincode 与数据状态高效交互,所有最新的键值对都存储在状态数据库中。状态数据库仅仅是链中事务日志中的索引视图,因此它可以随时从链中重新生成。在接受交易之前,状态数据库将在对等节点启动时自动恢复(或根据需要生成)。

状态数据库可选项包括 LevelDB 和 CouchDB。LevelDB 是嵌入对等节点进程中的默认状态数据库,并将 chaincode 数据存储为键值对。CouchDB 是一个可选的外部状态数据库,当您的 chaincode 数据建模为JSON时,可以提供附加查询支持,允许对JSON内容进行丰富的查询。有关CouchDB的更多信息,请参阅《CouchDB作为状态数据库》

交易流程(Transaction Flow)

在高层次上,事务流由应用程序客户端发送给特定的对等节点的交易提案组成。对交易认可的对等方验证客户端签名,并执行 chaincode 函数来模拟交易。 输出是 chaincode 调用结果,chaincode 中读取的一组键值(读取集合),或者用 chaincode(写集)写入的一组键/值。提案响应会连同确认签名一起发送回客户端。

客户端将所有节点的确认组装成交易数据并将其广播给排序节点。排序节点将排序好的的交易作为区块交付给频道上的所有对等节点。

在写入账本之前,对等节点将验证交易。首先,他们将检查确认条款,以确保指定对等节点是正确的且已签署结果,并且他们将针对交易数据来验证签名是否可靠。

其次,对等节点将对交易读取集执行版本检查,以确保数据完整性并防止双重支出等威胁。Hyperledger Fabric 具有并发控制功能,事务并行执行(由确认者执行)以提高吞吐量,并且一旦提交(由所有对等节点),每个事务都会被验证,以确保没有其他事务修改了它将要读取的数据。换句话说,它确保了在 chaincode 执行期间读取的数据自执行(认可)时以来没有被改变,因此执行结果仍然有效并可以提交给账本状态数据库。如果读取的数据已被另一个事务更改,则该块中的事务被标记为无效,并且不会应用于账本状态数据库中。客户端应用程序会收到报警通知事件,并可以处理错误或根据情况重试。

请参阅事务流读写集语义CouchDB作为状态数据库主题,以深入了解事务结构,并发控制和状态数据库。


© Copyright 2018, Leslie.

Built with Sphinx using a theme provided by Read the Docs.