HyperLedger Fabric开发实战(快速掌握区块链技术)
作者简介
内容简介
根据前面章节的介绍,知道了Fabric组网过程的第一步是需要生成证书等文件,而这些默认配置信息的生成依赖于configtx.yaml及crypto-config.yaml配置文件。 同样,在采用Kafka作为启动类型的Fabric网络中,configtx.yaml及crypto-config.yaml配置文件依然有着重要地位,且其中的配置样本与先前的内容都会有些不同。 本章是以Kafka集群部署为案例开始讲述,在此之前,请先阅读前面的章节。 在阅读本章的时候会涉及一些概念性问题,这些概念性问题从第3章开始就屡次提及,但第3、4、5章中的目的主要是跑通一个最小单元的Fabric网络,需要读者首先对HyperLedger Fabric的网络进行一次基本的理解,要知晓HyperLedger Fabric网络在实际生产过程中可能应用到哪些场景中。 而本章将开启基于Kafka集群的部署,其中重要的概念是对前三章的总结,也是对本章及后续章节关于智能合约及CouchDB的铺垫。 6.1 Fabric账本 1.账本(Ledger) 即所有的状态变更(state transitions)是有序且不可篡改的。状态变更是由参与方提交的chaincode(智能合约)调用事务(transactions)的结果。每个事务都将产生一组资产键-值对,这些键-值对用于创建、更新或删除而提交给账本。 账本由BlockChain(区块链)(“chain”)组成,区块则用来存储有序且不可篡改的记录,以及保存当前状态的状态数据库(state database)。在每一个Channel中都会存在一个账本。每一个Peer都会维护它作为其中成员的每一个Channel中的本地复制的账本。 2.链(chain) 链是一个事务日志,是一个由Hash链接各个区块的结构,其中每个区块都包含了N个事务的序列。 区块header包含了该区块的事务的Hash,以及上一个区块头的Hash。这样,所有在账本上的交易都是按顺序排列的,并以密码方式链接在一起。换句话说,在不破坏Hash链接的情况下篡改账本数据是不可能的。最近的区块Hash代表了以前的每个事务,从而确保所有的Peers都处于一致和可信的状态。 链存储在Peer文件系统(本地或附加存储)上,有效地支持BlockChain工作负载的应用程序的特性。 3.状态数据库 该账本的当前状态数据表示链事务日志中包含的所有键的最新值。 由于当前状态表示Channel所知道的全部最新键值,因此有时也称为“World State(世界状态)”。 在Chaincode调用对当前状态数据执行操作的事务时,为了使这些Chaincode交互非常有效,所有键的最新值都存储在一个状态数据库中。状态数据库只是一个索引视图到链的事务日志,因此可以在任何时候从链中重新生成它。在事务被接受之前,状态数据库将自动恢复(或在需要时生成)。 状态数据库包括LevelDB和CouchDB。LevelDB是嵌入在Peer进程中的默认状态数据库,并将Chaincode数据存储为键-值对。CouchDB是一个可选的外部状态数据库,当所写的Chaincode数据被建模为JSON时,它提供了额外的查询支持,允许对JSON内容进行丰富的查询。 4.事务流(transaction flow) 在高层业务逻辑处理上,事务流是由应用程序客户端发送的事务协议,该协议最终发送到指定的背书节点。 背书节点会验证客户端的签名,并执行一个Chaincode函数来模拟事务。最终返回给客户端的是Chaincode结果,即一组在Chaincode读集中读取的键-值版本,以及在Chaincode写集中写入的键-值集合,返回该Peer执行Chaincode后模拟出来的读写集结果,同时还会附带一个背书签名。 客户端将背书组合成一个事务payload,并将其广播至一个ordering service(排序服务节点),ordering service为当前Channel上的所有Peers提供排序服务并生成区块。 实际上,客户端在将事务广播到排序服务之前,先将本次请求提交到Peer,由Peer验证事务。 首先,Peer将检查背书策略,以确保指定的Peer的正确分配已经签署了结果,并且将根据事务payload对签名进行身份验证。 其次,Peer将对事务读取集进行版本控制,以确保数据完整性,并防止诸如重复开销之类的问题。Hyperledger Fabric具有并发控制,即事务允许并行执行(通过背书)来增加吞吐量,并且在提交(所有Peer)的情况下,每个事务都经过验证,以确保没有其他事务修改它已经读取的数据。换句话说,它确保了在执行(批准)时间之后读取的数据没有发生变化,因此执行结果仍然有效,并且可以提交到账本状态数据库。如果读取的数据被另一个事务更改,则该区块中的相同事务被标记为无效,并且不应用于账本状态数据库。客户端应用程序被警告,并且可以在适当的情况下处理错误或重试。 √ 从技术层面详解区块链平台使用方案 √ 系统讲解HyperLedger Fabric开源架构的核心概念、架构、实现原理和应用开发 √ 作者结合实践经验,深度解析常见开发陷阱,并给出具体解决方案,让初学者少走弯路 √ 手把手引导开发成功落地,以案例为引,从单机单节点到Solo多机组网再到Kafka集群部署,层层深入,教你顺利搭建一个完整的区块链项目 √ 通过典型案例进行实战演练,每一步均基于真实情况和场景中的操作,真实还原生产场景