深度学习
节点是区块链的通信主体,是一个逻辑概念。多个不同类型的节点可以运行在同一物理服务器上。有多种类型的节点:客户端、Peer节点、排序服务节点和CA节点。图3-3所示为网络节点架构图。接下来详细地解释图3-3所示的不同节点的类型。1.客户端节点客户端或者应用程序代表由最终用户操作的实体,它必须连接到某一个Peer节点或者排序服务节点上与区块链网络进行通信。客户端向背书节点(Endorser)提交交易提案(TransactionProposal),当收集到足够背书后,向排序服务广播交易,进行排序,生成区块。2.Peer节点所有的Peer节点都是记账节点(Committer),负责验证从排序服务节点区块里的交易,维护状态数据和账本的副本。部分节点会执行交易并对结果进行签名背书,充当背书
图3-4所示为HyperledgerFabric1.0典型的交易流程图。图3-4 交易流程总图从上一节的网络节点架构中,我们已经了解到基于HyperledgerFabric1.0的区块链应用中涉及几个节点角色:应用程序、背书节点、排序服务节点和主节点。在图3-4中,假定各节点已经提前颁发好证书,且已正常启动,并加入已经创建好的通道。后面的步骤介绍在已经实例化了的链码通道上从发起一个调用交易到最终记账的全过程。3.3.1 创建交易提案并发送给背书节点使用应用程序构造交易提案,SignedProposal的结构如下所示:加入会员微信dedao555SignedProposal:{ ProposalBytes(Proposal):{&nb
3.4.1 信封消息结构信封消息是认证内容中最基本的单元。它由一个消息负载(Payload)和一个签名(Signature)组成。//信封包含一个带有签名的负载,以便认证该消息messageEnvelope{ //编组的负载 bytespayload=1; //负载头中指定创建者签名 bytessignature=2;} //负载是消息内容(允许签名)messagePayload{ //负载头部,提供身份验证并防止重放 Headerheader=1;
第4章 基于Gossip的P2P数据分发4.1 概述背书节点模拟执行签名的结果会经过排序服务(OrderingService)广播给所有的节点,它提供的是一种原子广播服务(AtomicBroadcast),即在逻辑上所有节点接收到消息的顺序是相同的,相同序号都是相同的内容,排序服务的详细原理和实现请参考第6章。排序服务广播的信息包括更新的状态信息和账本信息等,这些信息需要广播给所有节点。如果排序服务和所有节点都保持直接连接,在节点较多、数据量较大的情况下,容易形成单点故障或成为性能瓶颈。加入会员微信dedao555由超级账本节点组成的区块链网络本身就是一种去中心化的网络,利用P2P实现数据广播是显而易见的做法,最常见的实现方法是洪泛(Flooding)。洪
超级账本的Peer节点组成了一个P2P的网络,客户端SDK(Go、Java、Python、Node.js等不同语言)会提交请求给Peer节点,Peer节点处理后会提交交易提案(TransactionProposal)给背书节点(Endorser),然后进行背书签名(Endorsement),最后经过排序服务达成共识后广播给Peer节点,如图4-1所示。Gossip模块负责连接排序服务和Peer节点上,实现从单个源节点到所有节点高效的数据分发,在后台实现不同节点间的状态同步,并且可以处理拜占庭问题、动态的节点增加和网络分区。账本信息、状态信息、成员信息等都会通过Gossip协议进行分发。概括起来,Gossip协议主要完成的功能和目标有以下几个。1)在不需要所有节点都连接到
在Gossip网络中,每个节点都有超级账本网络认可的MSP(MembershipServiceProvider)颁发的证书(身份,Identity),从证书计算哈希值导出(目前的实现是直接用Endpoint转换而来的)的一个标识符称为节点的PKI-ID。身份管理模块管理节点标识符和证书之间的映射,在内部维护了以PKI-ID为键、证书为值的映射表pkiID2Cert,可以通过PKI-ID获取节点的证书,也可以更新节点的证书。同时还内置了MCS(MessageCryptoService)模块,它可以对消息进行签名和验证。更新节点证书的时候也会通过MCS模块验证证书是否有效,检查从证书导出的标识符是否和PKI-ID匹配。¤在生产环境中,假设所有节点都是双向TLS部署的,TLS连
超级账本网络维护着所有节点的信息,包括存活节点和故障节点,包括最近一次检测到它们存活或者掉线的时间,所有节点信息都是以PKI-ID为标识符的。要想加入到超级账本网络,节点必须至少要知道网络中一个存活节点的地址信息。节点启动的时候会读取配置文件core.yaml,读取bootpeer.gossip.bootstrap字段的值,这个字段可以设置为一个列表,它包含了它可以连接的一些节点,这个列表名为启动集合(BootstrapSet)。节点会给启动集合中的所有节点发送MembershipRequest消息,其包含的内容是:1)AliveMessage消息;2)本地节点已知的存活节点列表。其中,AliveMessage消息包含的内容有以下几项。1)PKI-ID;2)Endpoint(hos
主节点选举(Leaderelection)的用处是,判断在相同组织(Organization)中哪个节点可以作为代表连接排序服务。主节点选举过程是在Gossip层实现的,而且假设在某个时间段内,同时存在多个主节点,以避免拜占庭行为发生。加入会员微信dedao555主节点选择过程是基于组织范围(Scope)内广播的LeadershipMessage消息的,主节点选举的消息有两种类型。1)一种是参与主节点选举的消息proposal,它在竞争主节点的过程中广播给所有节点的消息。2)一种声明成为主节点的消息declaration,它通过比较,可申请为主节点的消息。两种消息的结构是一样的,包含的内容如下所示:1)节点的PKI-ID。2)是否声明为主节点。3)PeerTime,它又
反熵(Anti-entropy)是指每个节点周期性地和邻居节点交换保存的数据,然后对比本地数据和邻居节点所保存的数据,检查是否有缺失或者过期的数据,然后更新本地节点的数据为最新的数据。超级账本的反熵实现比较简单,每个节点定期(10s)检查本地账本的区块序列号和其他节点账本的序列号。若发现本地的序列号比网络中其他节点账本的序列号小就在网络中广播一个GossipMessage_StateRequest消息,请求缺失序列号的区块。收到请求的节点如果有对应序列号的区块,会在网络中广播一个GossipMessage_StateResponse消息,使其包含本地账本中请求序列号的区块。这种方式是通过直接消息(directMessage)渠道进行的,节点接收到消息后会缓存起来,放到一个Payl