深度学习
和Gossip相关的配置参数如下所示:#启动连接节点,可以是多个bootstrap:127.0.0.1:7051#自动选择主节点还是指定主节点useLeaderElection:false#只在useLeaderElection设置为false的时候生效orgLeader:true#本地节点的ID:ip:portendpoint:#区块缓冲区大小maxBlockCountToStore:100#消息推送间隔(毫秒)maxPropagationBurstLatency:10ms#消息推送缓冲区大小maxPropagationBurstSize:10#消息推送次数propagateIterations:1#消息推送节点数propagatePeerNum:3#消
第5章 分布式账本存储分布式账本技术(DLT,DistributedledgerTechnology)还有一个名称叫共享账本(SharedLedger),通过在不同节点之间达成共识,记录相同的账本数据,这是区块链技术的基础。本章讨论在HyperledgerFabric1.0中分布式账本技术的实现。5.1 概述超级账本采用背书/共识(Endorsement/Consensus)模型,模拟执行和区块验证是在不同角色的节点中分开执行的。模拟执行是并发的,这可以提高扩展性和吞吐量:·在背书节点(EndorsingPeer)处模拟执行链码(Chaincode);·在所有的Peer节点上验证交易并提交。加入会员微信dedao555每个Peer节点会维护多个账本,如图5
5.2.1 交易模拟和读写集在背书节点(Endorser)模拟执行交易的过程中,会生成读写集(Read-WriteSet)。读集(ReadSet)包含了唯一键的列表,还有在模拟执行过程中交易读取的已提交键值。写集(WriteSet)也包含了一个唯一键的列表,还有在模拟执行过程中交易写的键值。交易过程中有删除键,它会记录删除标记。如果在一个交易中对同一个键进行了多次更新,则会以最后一个为准。交易只会读取已提交的数据,即使在交易中更新了某个键的值。就是说,不支持读取本次交易更新后的结果。读集会包含键的版本,写集只会包含键的最新值。版本号是使每个键不重复的唯一标识,实现的方法有很多,比如可以采用单调递增的数值来表示。在目前的实现中,采用的是区块链的高度来表示,一个交易中所有键
超级账本支持多账本(详细内容可以参考第7章的相关内容),每个账本的数据是分开存储的。账本编号(LedgerID)的数据存储在LevelDB数据库中,只是记录了有哪些账本,创建新的账本会检查是否有相同的账本编号存在,这保证了全局唯一性。账本编号库并不存储与区块相关的数据,这和后面的区块索引不一样。
账本数据(Ledger)是以二进制文件的形式存储的,每个账本数据存储在不同的目录下。后面的内容都是在已经区分了账本的情况下再对数据进行查询的。基于文件系统的区块存储实现了如下功能接口。1)账本存储管理。·提交区块到账本(AddBlock)·获取区块链信息(GetBlockchainInfo)·获取区块数据(RetrieveBlocks)·关闭区块存储(Shutdown)2)索引管理:跟踪区块和交易保存在哪个文件。·根据哈希值获取区块(RetrieveBlockByHash)·根据区块编号获取区块(RetrieveBlockByNumber)·根据交易编号获取交易(RetrieveTxByID)·根据区块编号和交易编号获取交易(RetrieveTxByBlockNumTranNum)·根据交易
状态数据(StateDatabase)记录的是交易执行的结果,最新的状态代表了通道(Channel)上所有键的最新值,所以又称为“世界状态”。链码调用根据当前状态数据执行交易。为了提高链码执行的效率,所有键的最新值都存储在状态数据库中。状态数据库只是区块链交易日志中的索引视图,因此可以随时根据区块链重新生成。状态数据库在Peer节点启动时自动恢复,重新构建完成后才接受新的交易。对于状态数据库本身插件化的设计,目前支持LevelDB和CouchDB。LevelDB和CouchDB都支持基本的链码操作,比如获取和设置键值,基于键进行查询等。·LevelDB(默认的KV数据库):支持键的查询、组合键的查询、键范围查询。·CouchDB(可选):支持键的查询、组合键的查询,还有复杂的查
第6章 集成共识机制的排序服务本章会介绍共识的一些基本概念和HyperledgerFabric1.0中的共识机制,及其可插拔的架构设计。6.1 概述在区块链系统中,共识(Consensus)是多个参与方对一个交易是否提交到账本以及提交的顺序达成一致的过程。由于是多个节点参与的分布式系统,所以网络传输可能存在延时。共识一致并不代表在所有时刻都有完全相同的结果,是经过一段收敛时间后,网络中的多数节点对同一个交易执行相同的记账操作。在共识的过程中可能存在一些节点无响应或者响应延迟的情况,也可能存在一些参与方恶意提交请求或者篡改请求内容的情况。根据错误类型的不同,共识算法可以满足两种范围的容错。加入会员微信dedao5551)崩溃故障容错(CrashFault-Tole
排序服务给客户端和Peer节点提供了一个共享通信通道(CommunicationChannel),用来实现交易的广播服务。客户端连接到通道(Channel)上,在通道上广播的消息会最终发送给通道内所有的Peer节点。通道支持消息的原子广播(AtomicBroadcast),通道给所有相连的Peer节点输出相同的消息,并且有相同的逻辑顺序。这种原子通信保证也叫全序广播(Total-orderBroadcast)。排序服务支持多通道(Multi-channel),类似Kafka消息系统的主题(Toptics)。客户端连接到一个指定的通道上,就可以发送或者获取消息了。通道是相互隔离的,客户端连接到一个通道是不知道其他通道的存在的,但是客户端可以连接到多个通道。为简单起
排序服务是可插拔的,代码里提供了几种实现:·基于单进程(Solo)的排序服务;·基于Kafka的排序服务。目前的版本没有基于*BFT的排序服务。6.3.1 排序服务接口排序服务的业务需求可以实现不同的逻辑,HyperledgerFabric1.0已经预留了一些接口,需要修改地方如下所示:·创建链的接口;·链消息处理的接口;·增加新的排序服务支持。1.创建链的接口创建链的接口定义如下://Consenter定义了后台的排序机制typeConsenterinterface{ //创建并返回一个对Chain的引用,用于提供资源 //每个进程会被指定的chain调用一次。通常情况,发生错误不可恢复,并会导致系统关闭,有关的&nbs