CN118054919A - 区块链的节点通信方法、装置、计算机设备、存储介质 - Google Patents

区块链的节点通信方法、装置、计算机设备、存储介质 Download PDF

Info

Publication number
CN118054919A
CN118054919A CN202211457971.XA CN202211457971A CN118054919A CN 118054919 A CN118054919 A CN 118054919A CN 202211457971 A CN202211457971 A CN 202211457971A CN 118054919 A CN118054919 A CN 118054919A
Authority
CN
China
Prior art keywords
node
block
blockchain
certificate
candidate
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211457971.XA
Other languages
English (en)
Inventor
邵珠光
李力
张建俊
邵兵
苏蹦蹦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211457971.XA priority Critical patent/CN118054919A/zh
Publication of CN118054919A publication Critical patent/CN118054919A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Abstract

本申请涉及一种区块链的节点通信方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:当区块链中产生目标区块时,获取区块链中候选节点的节点证书;将候选节点的节点证书上链至目标区块中;在与候选节点中的至少一个节点进行通信时,接收至少一个节点发送的通信消息;通信消息中携带业务数据和至少一个节点的签名信息,签名信息包括至少一个节点的节点标识和业务数据的哈希值;基于节点标识从目标区块中查找至少一个节点的节点证书;基于至少一个节点的节点证书对业务数据进行验签处理。采用本方法能够有效提高区块链整体处理性能,同时又可以降低存储消耗。

Description

区块链的节点通信方法、装置、计算机设备、存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种区块链的节点通信方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
区块链是一种新型去中心化分布式账本技术,能安全地存储交易或其他数据,特点是存储在区块链上的信息不可伪造和篡改,区块链共识算法驱动区块链上的每个节点都参与到交易的验证过程中,保证区块链上交易都是经过确认可信的。
然而,目前的区块链的节点通信方式中,为保证数据和信息的安全性,在共识过程中,节点会对广播的消息进行签名;同时在节点间同步数据时,也需要基于节点携带的公钥信息、支持密码算法等各类参数来确认,这样就导致节点间通信时整体的消息量非常大,尤其在同步区块的场景下,其区块中附加的节点签名数据会格外大,从而会对整个区块链网络的消息处理和区块同步造成巨大影响,导致整体的处理性能较差。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效提高区块链整体处理性能,同时又可以降低存储消耗的区块链的节点通信方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种区块链的节点通信方法。所述方法包括:当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书;将所述候选节点的节点证书上链至所述目标区块中;在与所述候选节点中的至少一个节点进行通信时,接收所述至少一个节点发送的通信消息;所述通信消息中携带业务数据和所述至少一个节点的签名信息,所述签名信息包括所述至少一个节点的节点标识和所述业务数据的哈希值;基于所述节点标识从所述目标区块中查找所述至少一个节点的节点证书;基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
第二方面,本申请还提供了一种区块链的节点通信装置。所述装置包括:获取模块,用于当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书;上链模块,用于将所述候选节点的节点证书上链至所述目标区块中;接收模块,用于在与所述候选节点中的至少一个节点进行通信时,接收所述至少一个节点发送的通信消息;所述通信消息中携带业务数据和所述至少一个节点的签名信息,所述签名信息包括所述至少一个节点的节点标识和所述业务数据的哈希值;查找模块,用于基于所述节点标识从所述目标区块中查找所述至少一个节点的节点证书;处理模块,用于基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书;将所述候选节点的节点证书上链至所述目标区块中;在与所述候选节点中的至少一个节点进行通信时,接收所述至少一个节点发送的通信消息;所述通信消息中携带业务数据和所述至少一个节点的签名信息,所述签名信息包括所述至少一个节点的节点标识和所述业务数据的哈希值;基于所述节点标识从所述目标区块中查找所述至少一个节点的节点证书;基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书;将所述候选节点的节点证书上链至所述目标区块中;在与所述候选节点中的至少一个节点进行通信时,接收所述至少一个节点发送的通信消息;所述通信消息中携带业务数据和所述至少一个节点的签名信息,所述签名信息包括所述至少一个节点的节点标识和所述业务数据的哈希值;基于所述节点标识从所述目标区块中查找所述至少一个节点的节点证书;基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书;将所述候选节点的节点证书上链至所述目标区块中;在与所述候选节点中的至少一个节点进行通信时,接收所述至少一个节点发送的通信消息;所述通信消息中携带业务数据和所述至少一个节点的签名信息,所述签名信息包括所述至少一个节点的节点标识和所述业务数据的哈希值;基于所述节点标识从所述目标区块中查找所述至少一个节点的节点证书;基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
上述区块链的节点通信方法、装置、计算机设备、存储介质和计算机程序产品,当区块链中产生目标区块时,获取区块链中候选节点的节点证书;将候选节点的节点证书上链至目标区块中;在与候选节点中的至少一个节点进行通信时,接收至少一个节点发送的通信消息;通信消息中携带业务数据和至少一个节点的签名信息,签名信息包括至少一个节点的节点标识和业务数据的哈希值;基于节点标识从目标区块中查找至少一个节点的节点证书;基于至少一个节点的节点证书对业务数据进行验签处理。由于在区块链中产生目标区块时,将区块链中候选节点的节点证书全部上链至目标区块中,故在与候选节点中的至少一个节点进行通信时,可以基于通信消息中携带的节点标识从目标区块中查找到对应的节点证书,并使用查找到的节点证书对业务数据进行验签处理,使得通信消息中不再需要携带节点的证书,从而降低了整体的通信量,有效提高了区块链整体的处理性能,同时也可以有效降低存储消耗。
附图说明
图1为一个实施例中分布式系统100应用于区块链系统的一个可选的结构示意图;
图2为一个实施例中区块结构一个可选的示意图;
图3为一个实施例中区块链的节点通信方法的流程示意图;
图4为一个实施例中将共识节点信息加入到创世区块配置中的示意图;
图5为一个实施例中基于BFT类共识的区块链底层模型下的第一个新区块的处理流程示意图;
图6为一个实施例中节点进行区块同步时的处理流程示意图;
图7为一个实施例中待同步区块的数据结构的示意图;
图8为一个实施例中对数据进行签名的数据结构的示意图;
图9为一个实施例中传统方式中共识后的区块的结构示意图;
图10为一个实施例中节点进行消息验证过程时的处理流程示意图;
图11为一个实施例中区块链的节点通信装置的结构框图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本发明实施例涉及的系统可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统。
以分布式系统为区块链系统为例,参见图1,图1是本发明实施例提供的分布式系统100应用于区块链系统的一个可选的结构示意图,由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端形成,节点之间形成组成的点对点(P2P,Peer ToPeer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图1示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币;
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
参见图2,图2是本发明实施例提供的区块结构(Block Structure)一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
在一个实施例中,如图3所示,提供了一种区块链的节点通信方法,以该方法应用于图1中的区块链系统中的节点集群为例进行说明,包括以下步骤:
步骤302,当区块链中产生目标区块时,获取区块链中候选节点的节点证书。
其中,区块链,就是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这个链条被保存在所有的服务器中,只要整个系统中有一台服务器可以工作,整条区块链就是安全的。这些服务器在区块链系统中被称为节点,它们为整个区块链系统提供存储空间和算力支持。如果要修改区块链中的信息,必须征得半数以上节点的同意并修改所有节点中的信息,而这些节点通常掌握在不同的主体手中,因此篡改区块链中的信息是一件极其困难的事。相比于传统的网络,区块链具有两大核心特点:一是数据难以篡改、二是去中心化。基于这两个特点,区块链所记录的信息更加真实可靠,可以帮助解决人们互不信任的问题。区块链的类型包括公有链、联合链、私有链等,本申请中的区块链系统可以为联盟链系统。
区块链即区块链系统是一种分布式系统,在这个系统中节点数量会对整体的性能产生巨大的影响,随着节点数量的增加,网络通信往往会成为整个区块链性能的一个瓶颈点之一。
目标区块是指区块链中的某一个区块,例如,区块链1中包含创世区块和区块1,则目标区块可以为该区块链1中的区块1。
候选节点是指区块链中的所有节点,例如,区块链1中包含3个节点分别为节点1、节点2和节点3,若当前执行节点为节点1,则候选节点可以包括节点1、节点2和节点3。
节点证书是指每个节点所对应的证书,节点证书可以用于验证身份是否有效,或者用于验证数据是否有效。比如,本申请中的区块链可以为联盟链,相比于公链,联盟链并不是完全去中心化的,它只允许被授权的机构参与到网络当中,这些机构例如现实中的某几个公司,他们组织利益相关的机构共同参与区块链的运行。因此相比公链,联盟链多了“授权”的操作,而这个操作多以“颁发数字证书”的形式完成。完成这个操作的,就是证书颁发机构——认证中心CA,拥有合格证书的节点才能加入到联盟链当中,本申请中节点证书即为证书颁发机构颁发的合格证书。
节点证书中包括不同类型的信息,例如,节点证书中有公钥信息、支持密码算法等各类参数。
具体地,一个新创建的区块链启动后,当该区块链中产生目标区块时,节点集群中的主节点可以获取该区块链中候选节点的节点证书,即节点集群中的主节点可以获取该区块链中除了自身之外的其他节点的节点证书。本申请中的区块链的共识环境可以为基于BFT类共识的区块链底层模型,在基于BFT类共识的区块链底层模型下,通常有主节点和从节点,主节点负责生成针对新的区块的提案,由从节点进行验证,以确认该提案中的区块是否可以达到共识。其中,BFT(Byzantine Fault Tolerance),即拜占庭容错,是一种共识机制。
举个例子,在基于BFT类共识的区块链底层模型下,一个新创建的区块链启动后,当该新创建的区块链中产生目标区块时,节点集群中的各个节点可以判断自身是否为主节点,比如,节点集群中的各个节点可以根据自身维护的区块中的参数,来判断是否满足出块条件;当某个节点确定自身满足出块条件时,该节点即为主节点。
进一步的,当节点集群中的某个节点确定自身为主节点之后,该节点即主节点可以进一步判断是否进行节点证书上链,例如,主节点可以判断该区块链中产生的待共识的目标区块是否为该区块链中的第一个区块,若目标区块是该区块链中的第一个区块,则主节点确定执行节点证书上链的步骤,由于主节点要将区块链中所有节点的节点证书上链,因此,主节点需要获取该区块链中其他节点的节点证书,以得到所有节点的节点证书集合,该节点证书集合中包含主节点自身对应的节点证书和该区块链中其他节点所对应的节点证书。
其中,第一个区块是指第一个新区块,即该区块是新产生的第一个区块,该区块的前序区块为创世区块,该区块是还未被共识的新区块,后续主节点可以针对该新区快形成一个提案,并广播该提案至其他从节点,以使其他从节点对该提案中的新区块进行共识,以确认该新区块是否可以达到共识。
创世区块(或称创世块)是指最早构建的区块,拥有一个唯一的ID标识号。除创世块外,每个后续建立的区块均包含两个ID号,一个是该区块自身的ID号,另一个是前序区块的ID号。通过ID号间的前后指向关系,所有区块按序相连就构成了区块链。
由于一个新创建的区块链启动后,在一段时间内可能是没有交易的,此时最适合将节点证书上链,可以有效防止后续与普通交易竞争资源。另外,本申请提供的方案的目的是希望尽可能减少网络和存储消耗,因此,在新产生的第一个区块中将节点证书上链更合适,本申请实施例中,当新创建的区块链启动后,可以自动化实现节点证书上链,即使此时共识失败,因为区块链中没有交易和业务数据,所产生的影响也最小。
步骤304,将候选节点的节点证书上链至目标区块中。
其中,上链是指将节点证书预先上链,形成链上数据,即将节点证书存储在区块链中。例如,在区块链中产生第一个区块时,将节点证书上链至区块链的第一个区块中。
具体地,当区块链中产生目标区块时,节点集群中的主节点获取区块链中候选节点的节点证书之后,节点集群中的主节点可以将候选节点的节点证书上链至目标区块中,以使后续节点间进行消息传输时无需携带证书信息,从而可以有效降低整个网络消息的通信量,提高整体的性能,也可以降低存储消耗。
具体的节点证书上链的过程如下:当节点集群中的主节点确定进行节点证书上链时,主节点可以创建一个交易任务,该交易任务是用于添加节点证书集合的交易任务,该交易任务中包含了主节点获取到的所有候选节点的节点证书;进一步的,主节点可以对该交易任务进行签名,并将该交易任务添加至区块链的目标区块中,以形成针对该目标区块的提案,并广播该提案至区块链中其他节点进行共识;当该提案中的目标区块达成共识后,节点集群中的各个节点可以将候选节点的节点证书即节点证书集合存储在本地账本中。
举个例子,假设区块链1中包含3个节点分别为节点1、节点2和节点3,一个新创建的区块链1启动后,当该区块链1中产生了第一个区块时,节点集群中的主节点即节点1开始自动执行节点证书上链的步骤,节点1获取区块链1中所有候选节点的节点证书之后,节点1可以将候选节点的节点证书集合即节点1、节点2和节点3对应的节点证书上链至区块链1中的第一个区块中。比如,节点1在进行节点证书上链时,节点1可以创建一个用于添加节点证书集合的交易任务,该交易任务中包含了节点1获取到的所有候选节点的节点证书,即包含了节点1、节点2和节点3对应的节点证书;进一步的,节点1可以对该交易任务进行签名,并将该交易任务添加至区块链1的第一个区块中,以形成针对该第一个区块的提案,并广播该提案至区块链1中其他节点即节点2和节点3进行共识;当该提案中的第一个区块达成共识后,节点集群中的各个节点即节点1、节点2、节点3均可以将候选节点的节点证书集合存储在本地账本中。
步骤306,在与候选节点中的至少一个节点进行通信时,接收至少一个节点发送的通信消息;通信消息中携带业务数据和至少一个节点的签名信息,签名信息包括至少一个节点的节点标识和业务数据的哈希值。
其中,通信消息是指区块链中节点间的通信消息,通信消息可以包括不同类型的通信消息,例如,通信消息可以包括共识消息、投票消息、提案消息等。
业务数据是指通信消息所携带的不同类型的数据,例如,当通信消息为提案消息时,携带的业务数据可以是提案相关的数据;当通信消息为投票消息时,携带的业务数据可以是投票相关的数据;当通信消息为交易消息时,携带的业务数据可以是各种交易所产生的交易记录数据。
签名信息是指每个节点所对应的签名信息,本申请中节点的签名信息可以包括节点标识和业务数据的哈希值。
节点标识用于标识唯一的节点,节点标识可以是一串字符串,例如,本申请中的节点标识可以是对节点证书进行哈希运算所得的哈希值。
业务数据的哈希值是指对业务数据进行哈希运算所得的哈希值,即为业务数据的哈希值,例如,本申请中的业务数据的哈希值可以是加密后的业务数据的哈希值。
步骤308,基于节点标识从目标区块中查找至少一个节点的节点证书。
其中,节点标识与节点证书具有关联关系,例如,节点标识与节点证书之间的关系可以是一一对应的关系,以节点标识作为键、节点证书作为值,形成键值对进行存储。
步骤310,基于至少一个节点的节点证书对业务数据进行验签处理。
其中,验签处理是指利用节点证书对业务数据的合法性进行验证。
具体地,节点集群中的主节点将候选节点的节点证书上链至目标区块中,形成针对该目标区块的提案,并广播该提案至区块链中其他从节点进行共识;当该目标区块达成共识后,节点集群中的各个节点将候选节点的节点证书即节点证书集合存储在本地账本之后,在主节点与节点集群中的至少一个节点进行通信时,当主节点接收到至少一个节点发送的通信消息时,由于该通信消息中携带业务数据和至少一个节点的签名信息,签名信息包括至少一个节点的节点标识和业务数据的哈希值,因此,主节点可以基于通信消息携带的节点标识从目标区块中查找至少一个节点的节点证书,并基于查找到的至少一个节点的节点证书对该通信消息中的业务数据进行验签处理,以得到对应的验签结果;当验签处理的验签结果表示通过时,主节点可以执行其他的处理步骤;当验签处理的验签结果表示未通过时,则主节点丢弃该通信消息,即忽略该通信消息。
举个例子,假设区块链1中包含3个节点分别为节点1、节点2和节点3,一个新创建的区块链1启动后,当该区块链1中产生了第一个区块时,节点集群中的主节点即节点1开始自动执行节点证书上链的步骤,当该第一个区块达成共识后,节点集群中的各个节点即节点1、节点2、节点3均可以将候选节点的节点证书集合存储在本地账本中;进一步的,在节点1与候选节点中的至少一个节点进行通信时,比如,节点1接收到节点3发送的通信消息,该通信消息中携带业务数据和节点3的签名信息,签名信息包括节点3的节点标识A3和业务数据的哈希值。由于在该区块链1中产生了第一个区块时,节点1已经自动执行了节点证书上链的步骤,当该第一个区块达成共识后,节点集群中的各个节点即节点1、节点2、节点3已经将候选节点的节点证书集合存储在本地账本中,因此,节点1可以基于节点标识A3从本地账本的目标区块即第一个区块中查找到与节点3的节点标识A3对应的节点证书C3,并基于节点3的节点证书C3对该通信消息中的业务数据进行验签处理,以得到对应的验签结果。
本实施例中,当区块链中产生目标区块时,获取区块链中候选节点的节点证书;将候选节点的节点证书上链至目标区块中;在与候选节点中的至少一个节点进行通信时,接收至少一个节点发送的通信消息;通信消息中携带业务数据和至少一个节点的签名信息,签名信息包括至少一个节点的节点标识和业务数据的哈希值;基于节点标识从目标区块中查找至少一个节点的节点证书;基于至少一个节点的节点证书对业务数据进行验签处理。由于在区块链中产生目标区块时,将区块链中候选节点的节点证书全部上链至目标区块中,故在与候选节点中的至少一个节点进行通信时,可以基于通信消息中携带的节点标识从目标区块中查找到对应的节点证书,并使用查找到的节点证书对业务数据进行验签处理,使得通信消息中不再需要携带节点的证书,从而降低了整体的通信量,有效提高了区块链整体的处理性能,同时也可以有效降低存储消耗。
在一个实施例中,所述方法还包括:
确定区块链中维护的区块高度值;
所述当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书,包括:
当区块高度值满足出块条件、且区块链中产生待共识的目标区块时,获取区块链中候选节点的节点证书。
其中,区块高度值是指用于表示区块高度的数值,区块高度(Block height)是指一个区块的高度,是指在区块链中它和创世区块之间的块数,区块高度是区块的标示符。
出块条件是指用于触发出块的条件,例如,出块条件可以设置为高度值大于预设阈值,预设阈值可以为1。出块是指节点可以将交易任务进行区块的封装。
待共识的目标区块是指未被区块链网络共识的区块,例如,在基于BFT类共识的区块链底层模型下,通常都有主节点和从节点,当区块链中新产生了一个区块时,主节点负责针对新的区块生成提案,由其他的从节点对该区块进行验证,以确认该区块是否可以达到共识。本申请中待共识的目标区块可以是新产生的还未达到共识的区块。比如,在区块链1的创世区块之后新生产了一个区块,该新产生的区块可以作为待共识的目标区块。
具体的,一个新创建的区块链启动后,该区块链中的各个节点可以确定自身维护的区块高度值,并基于所确定的区块高度值,来判断自身是否满足出块条件;当节点集群中的某个节点基于自身维护的区块高度值,确定满足出块条件时,该节点出块,成为主节点。当该节点确定满足出块条件之后,该节点可以进一步的判断是否进行节点证书上链,即该节点可以判断当前区块链中是否产生了待共识的目标区块,若是,则该节点可以自动执行节点证书上链的步骤,即当该节点的区块高度值满足出块条件、且确定当前区块链中产生待共识的目标区块时,该节点即为主节点可以获取区块链中所有候选节点的节点证书,以使得后续该节点可以将获取到的所有候选节点的节点证书上链至当前区块链中。
举个例子,假设区块链1中包含3个节点分别为节点1、节点2和节点3,一个新创建的区块链1启动后,该区块链1中的各个节点可以基于自身维护的区块高度值,来判断是否满足出块条件;假设当前时刻节点1和节点3的区块高度值为0,节点2的区块高度值为1,则节点集群中的节点2可以基于自身维护的区块高度值1,确定满足出块条件,该节点2出块,成为主节点。当该节点2确定满足出块条件之后,该节点2可以进一步的判断是否进行节点证书上链,即该节点2可以判断当前区块链1中是否产生了待共识的目标区块,若是,则该节点2可以自动执行节点证书上链的步骤,即当该节点2的区块高度值满足出块条件、且确定当前区块链1中产生待共识的目标区块时,该节点2即为主节点可以获取区块链中所有候选节点即节点1、节点2和节点3的节点证书。由此使得,实现了节点证书上链的自动化,可以将节点证书事先上链,从而使得后续节点间进行消息传输和区块同步时可显著降低消息量,提高整体的处理性能,降低存储消耗。
在其中一个实施例中,当区块高度值满足出块条件、且区块链中产生待共识的目标区块时,获取区块链中候选节点的节点证书的步骤,包括:
当区块高度值满足出块条件、且区块链中产生待共识的目标区块时,对目标区块进行区块检测,得到检测结果;
当检测结果表示目标区块为区块链中的第一个区块时,获取区块链中候选节点的节点证书。
其中,区块检测是指检测目标区块属于区块链中的第几个区块,例如,当前区块链中包含创世区块和目标区块,则可以检测出该目标区块为第一个区块。
具体的,一个新创建的区块链启动后,该区块链中的各个节点可以确定在该区块链中自身维护的区块高度值,并基于所确定的区块高度值,来判断自身是否满足出块条件;当节点集群中的某个节点基于自身维护的区块高度值,确定满足出块条件时,该节点出块,成为主节点。当该节点确定满足出块条件之后,该节点可以进一步的判断是否进行节点证书上链,即该节点可以判断当前区块链中是否产生了待共识的目标区块,若是,则该节点可以对该目标区块进行区块检测,得到检测结果;当检测结果表示该目标区块为区块链中的第一个区块时,触发该节点自动执行节点证书上链的步骤,该节点可以获取区块链中所有候选节点的节点证书,以使得后续该节点可以将获取到的所有候选节点的节点证书上链至当前区块链中。
举个例子,假设区块链1中包含3个节点分别为节点1、节点2和节点3,一个新创建的区块链1启动后,该区块链1中的各个节点可以基于自身维护的区块高度值,来判断是否满足出块条件;假设当前时刻节点1和节点3的区块高度值为0,节点2的区块高度值为1,则节点集群中的节点2可以基于自身维护的区块高度值1,确定满足出块条件,该节点2出块,成为主节点。当该节点2确定满足出块条件之后,该节点2可以进一步的判断是否进行节点证书上链,即该节点2可以判断当前区块链1中是否产生了待共识的目标区块,若是,则该节点2可以对该目标区块进行区块检测,得到检测结果;当检测结果表示该目标区块为区块链中的第一个区块时,触发该节点2自动执行节点证书上链的步骤,该节点2可以获取区块链中所有候选节点即节点1、节点2和节点3的节点证书,以使得后续该节点2可以将获取到的所有候选节点的节点证书上链至当前区块链1中。由此使得,一个新创建的链启动后,在一段时间内可能是没有交易的,此时最适合节点证书上链,因此,在区块链中产生了第一个区块时,可以自动触发节点证书上链的流程,有效防止后续与普通交易竞争资源,同时,在区块链中产生了第一个区块时进行节点证书上链也能够减少网络和存储消耗,由于区块链中没有业务数据,即使此时共识失败影响也最小。
在一个实施例中,获取区块链中候选节点的节点证书的步骤,包括:
发送请求消息至区块链中的候选节点;
当接收到候选节点针对请求消息返回的响应消息时,从响应消息中获取候选节点的节点证书。
其中,请求消息可以是用于请求获取节点证书的消息,也可以是任意的请求消息,由于在联盟链系统中,大部分都是采用基于证书的模型,节点证书中有公钥信息、支持密码算法等各类参数,在节点间进行数据验证时,往往在广播数据的时候需要将该证书也附在数据上,这样就导致整体的消息量非常大,尤其在节点数量比较多的情况下,即在节点间进行通信时,通信消息中携带了节点证书,因此,本申请实施例中可以从各个候选节点针对请求消息返回的响应消息中获取到对应的节点证书。
具体地,当区块链中产生目标区块时,节点集群中的主节点在获取区块链中候选节点的节点证书时,主节点可以发送请求消息至区块链中的其他节点;当主节点接收到其他节点针对该请求消息返回的响应消息时,主节点可以从响应消息的签名信息中获取其他节点的节点证书。
举个例子,当区块链1中产生目标区块1时,节点集群中的主节点1在获取区块链1中候选节点的节点证书时,主节点1可以发送节点证书请求消息至区块链1中的其他从节点;当主节点1接收到其他从节点针对该节点证书请求消息返回的响应消息时,主节点1可以从返回的各个响应消息的签名信息中获取其他从节点的节点证书,以得到区块链1中所有节点的节点证书。由此,通过实时的消息交互,可以更加准确有效的获取到候选节点对应的节点证书,以使得后续在利用节点证书进行验签时,能够得到更为准确的验签结果,从而提高了区块链整体的处理性能。
在一个实施例中,所述方法还包括:
响应于触发的配置操作,在区块链的创世区块对应的配置文件中配置共识节点信息;共识节点信息包括候选节点的节点证书;
所述当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书,包括:
当区块链中产生目标区块时,在配置文件内获取区块链中候选节点的节点证书。
其中,配置操作是指用户触发的用于设置配置信息的操作,例如,配置操作可以包括点击操作、滑动操作、长按操作以及摇一摇等触发操作。
创世区块(或称创世块)是指最早构建的区块,拥有一个唯一的ID标识号。除创世块外,每个后续建立的区块均包含两个ID号,一个是该区块自身的ID号,另一个是前序区块的ID号。通过ID号间的前后指向关系,所有区块按序相连就构成了区块链。
共识节点是由不同组织方协商确定的,哪几个节点是共识节点一般都是由不同组织方协商确定的,例如,本申请中的共识节点可以为区块链中的所有节点,也可以为区块链中的部分节点,共识节点信息是指共识节点的信息,例如,共识节点信息可以包括节点证书、节点地址和节点标识。
具体地,在区块链中产生目标区块之前,可以先在创世区块中上链节点证书集合,由于在区块链系统的创世区块中往往会存储一些链的配置信息,并且这些信息达成一致后,才能产生新区块,因此,可以将共识节点信息预先加入到创世区块配置中,即可以在创世区块对应的配置文件中直接配置共识节点信息。
举个例子,如图4所示,为将共识节点信息加入到创世区块配置中的示意图。节点集群响应于用户触发的配置操作,在区块链的创世区块对应的配置文件中配置共识节点信息,共识节点信息包括候选节点的节点证书,即可以预先在区块链的创世区块对应的配置文件中配置如图4所示的节点证书集合,图4中所示的节点标识即节点ID可以是对节点的证书进行哈希运算所得的哈希值,使得节点ID更具有唯一性。此外,当该区块链中产生目标区块时,若节点集群中的主节点需要获取该区块链中候选节点的节点证书时,主节点也可以直接从配置文件内获取区块链中候选节点的节点证书。由此使得,可以预先将节点证书上链至创世区块配置中,以使得后续节点间进行消息传输和区块同步时可显著降低消息量,提高整体的处理性能,降低存储消耗。
在一个实施例中,将候选节点的节点证书上链至目标区块中的步骤,包括:
创建用于上链节点证书的交易任务;
对交易任务进行签名;
将签名后的交易任务添加至目标区块的区块体中;
所述方法还包括:向区块链中候选节点发送针对目标区块的共识请求。
其中,交易任务是指区块链中所创建的交易,例如,本申请中的交易任务可以包括用于上链节点证书的交易任务和普通业务的交易任务。
一个区块包括两大部分:区块头和区块体。区块头里面存储着区块的头信息,包含上一个区块的哈希值(PreHash),本区块体的哈希值(Hash),以及时间戳(TimeStamp)等等。区块体存储着这个区块的详细数据(Data),这个数据包含若干行记录,可以是交易信息,也可以是其他某种信息。区块与Hash是一一对应的,Hash可以当做是区块的唯一标识。
具体地,在节点集群中的主节点将候选节点的节点证书上链至目标区块时,主节点可以创建用于上链节点证书的交易任务,并对创建的该交易任务进行签名,主节点将签名后的该交易任务添加至目标区块的区块体中,该交易任务中包含了需要上链的所有候选节点的节点证书;进一步的,主节点可以向区块链中的其他从节点发送针对该目标区块的共识请求,以使得其他从节点对该目标区块进行验证,以确认该目标区块是否可以达到共识。
举个例子,如图5所示,为基于BFT类共识的区块链底层模型下的第一个新区块的处理流程示意图。一个新创建的区块链启动后,节点集群中的各个节点可以判断自身是否为主节点,假设在节点集群中判断当前节点1为主节点,则进一步判断是否进行节点证书上链,若是,则主节点可以创建用于上链节点证书的交易任务即创建添加节点证书集合的交易,并对创建的该交易进行签名,主节点将签名后的该交易添加至目标区块的区块体中,以形成针对该目标区块的提案,并广播该提案至区块链中所有节点进行共识,以使得其他节点对该目标区块进行验证,以确认该目标区块是否可以达到共识。由此使得,主节点在第一个区块时不会处理其他业务交易,仅仅将节点信息上链作为第一个区块中的所有交易来处理,这样目的性比较明确,可以有效防止后续与普通交易竞争资源,同时也能够减少网络和存储消耗。
在其中一个实施例中,候选节点包括从节点;所述方法还包括:
当从节点接收到共识请求时,对目标区块中的交易任务进行验证,得到验证结果;
当验证结果满足预设条件时,确定目标区块达成共识;
当验证结果不满足预设条件时,确定目标区块未达成共识。
其中,预设条件是指目标区块达成共识的条件,例如,预设条件可以设置为投票数量达到阈值等。
具体地,节点集群中的主节点向区块链中的其他从节点发送针对该目标区块的共识请求之后,当节点集群中的从节点接收到该共识请求时,从节点可以对目标区块中的交易任务进行验证,得到验证结果;当验证结果满足预设条件时,从节点确定目标区块达成共识,从节点可以将候选节点的节点证书即节点证书集合存储在本地账本中,即完成将节点证书上链的步骤;当验证结果不满足预设条件时,从节点确定目标区块未达成共识,则无法将候选节点的节点证书即节点证书集合存储在本地账本中。
举个例子,如图5所示,为基于BFT类共识的区块链底层模型下的第一个新区块的处理流程示意图。一个新创建的区块链启动后,主节点将签名后的节点证书上链交易添加至目标区块的区块体中,并形成针对该目标区块的提案,广播该提案至区块链中所有节点进行共识,当区块链中的从节点接收到该提案时,获取该提案中的目标区块信息,并验证目标区块中的所有交易,得到对应的验证结果;当验证结果全部都为正常时,从节点确定目标区块达成共识,从节点可以将候选节点的节点证书即节点证书集合存储在本地账本中,即完成将候选节点的节点证书上链的步骤;当验证结果不是全部正常时,从节点确定目标区块未达成共识,则无法将候选节点的节点证书即节点证书集合存储在本地账本中。由此使得,只有当该区块达到共识时,才能完成将节点证书上链的流程,可以有效防止主节点作恶的情况,同时仅仅将节点信息上链作为第一个区块中的所有交易来处理,这样目的性比较明确,也可以有效防止后续与普通交易竞争资源,并且减少网络和存储消耗。
在一个实施例中,对目标区块中的交易任务进行验证,得到验证结果的步骤,包括:
在对交易任务进行验证时,获取交易任务中的证书集合;证书集合包含各共识节点的节点证书,共识节点属于候选节点中的至少一个节点;
基于各共识节点的节点证书,确定各共识节点的节点标识;
将节点标识作为键、节点证书作为值,写入到共识节点的关系集合中;
基于共识节点的关系集合,确定交易任务的验证结果。
具体地,节点集群中的主节点向区块链中的其他从节点发送针对该目标区块的共识请求之后,当节点集群中的从节点接收到该共识请求时,从节点可以对目标区块中的所有交易任务进行验证。在从节点对目标区块中用于上链节点证书的交易任务进行验证时,从节点执行用于上链节点证书的交易任务的过程如下:从节点可以获取用于上链节点证书交易任务中的证书集合,该证书集合包含各共识节点的节点证书,共识节点属于候选节点中的至少一个节点;从节点可以对各共识节点的节点证书进行哈希运算得到对应哈希值,并将所得的哈希值作为各个共识节点的节点标识,进一步的,从节点可以将节点标识作为键、节点证书作为值,写入到共识节点的关系集合中;从节点基于共识节点的关系集合,确定交易任务的验证结果。
举个例子,如图5所示,为基于BFT类共识的区块链底层模型下的第一个新区块的处理流程示意图。一个新创建的区块链启动后,主节点将签名后的节点证书上链交易添加至目标区块的区块体中,并形成针对该目标区块的提案,广播该提案至区块链中所有节点进行共识,当区块链中的从节点接收到该提案时,获取提案中的目标区块信息,并验证目标区块中的所有交易,得到对应的验证结果。在从节点对目标区块中的节点证书集合交易进行验证时,节点证书集合交易的执行过程如下:从节点获取节点证书集合交易中的证书集合Ns,该证书集合Ns包含各共识节点的节点证书,共识节点属于候选节点中的至少一个节点;从节点初始化共识节点的关系集合Cs[ID:Cert],该关系集合Cs[ID:Cert]用于表示节点标识与节点证书之间的关系,初始化i=0,并依次获取各个节点的节点证书,N=Ns[i],并对各个节点的节点证书进行哈希运算得到对应哈希值,并将所得的哈希值作为各个节点的节点标识即节点ID,进一步的,从节点可以将节点ID作为Key、节点证书作为Value,写入到共识节点的关系集合Cs[ID:Cert]中,直到遍历完证书集合Ns,得到执行结果为:共识节点的关系集合Cs[ID:Cert];进一步的,从节点可以将所得的共识节点的关系集合Cs[ID:Cert]与本地账本中存储的节点标识进行比较,若比较结果一致,则说明主节点没有作恶;同时,从节点也可以将所得的共识节点的关系集合Cs[ID:Cert]与提案的目标区块中携带的数据进行比较,若比较结果一致,则说明验证结果全部正常,当两个比较结果均为一致时,从节点对该提案中的目标区块投赞成票;否则,从节点对该提案投反对票;当所有从节点的投票数量满足预设条件时,确定该提案中的目标区块达成共识。
可以理解,本申请中的目标区块中的所有交易任务仅包含了用于上链节点证书的交易任务,在一些情况下,目标区块中的交易任务包括但不限于是用于上链节点证书的交易任务,还可以包括其他的一些交易任务。
本实施例中,当该区块达到共识时,才能完成将节点证书上链的流程,可以有效防止主节点作恶的情况,同时仅仅将节点信息上链作为第一个区块中的所有交易来处理,这样目的性比较明确,也可以有效防止后续与普通交易竞争资源,并且减少网络和存储消耗。
在其中一个实施例中,基于共识节点的关系集合,确定交易任务的验证结果的步骤,包括:
将共识节点的关系集合与本地账本中存储的节点标识进行比较,得到第一比较结果;
将共识节点的关系集合与目标区块中携带的数据进行比较,得到第二比较结果;
当第一比较结果、第二比较结果均为一致时,确定所述交易任务的验证结果为通过。
具体地,节点集群中的每个从节点都遍历完证书集合Ns,得到执行结果为共识节点的关系集合Cs[ID:Cert]之后;进一步的,各个从节点可以将所得的共识节点的关系集合Cs[ID:Cert]与本地账本中存储的节点标识进行比较,得到第一比较结果,若比较结果一致,则说明主节点没有作恶,若比较结果不一致,则说明主节点作恶;同时,从节点也可以将所得的共识节点的关系集合Cs[ID:Cert]与提案的目标区块中携带的数据进行比较,得到第二比较结果;若比较结果一致,则说明验证结果全部正常;若比较结果不一致,则说明验证结果不是全部正常,当第一比较结果、第二比较结果均为一致时,确定该交易任务的验证结果为通过,从节点对该提案投赞成票;否则,从节点对该提案投反对票,若在第一比较结果和第二比较结果中,其中一个比较结果不一致,则从节点对该提案投反对票。由此,只有当该区块达到共识时,才能完成将节点证书上链的流程,可以有效防止主节点作恶的情况,同时仅仅将节点信息上链作为第一个区块中的所有交易来处理,这样目的性比较明确,也可以有效防止后续与普通交易竞争资源,并且减少网络和存储消耗。
在一个实施例中,所述方法还包括:
当与候选节点中的至少一个节点进行区块同步时,对待同步区块进行反序列化,得到区块对象;
执行区块对象中的交易任务,并基于待同步区块进行哈希运算得到哈希值;
当哈希运算所得的哈希值与待同步区块中携带的哈希值一致时,从待同步区块携带的节点签名集合中获取候选节点的节点标识;
从本地账本中查找各节点标识对应的节点证书;
基于每个节点证书分别进行验签处理,得到与各节点证书对应的验签结果;
当验签通过的验签结果数量满足预设阈值时,将待同步区块加入到本地账本。
其中,反序列化是指将网络中的二进制信息,转换为程序内部处理的对象,例如,传输的是一个json格式的内容,在网络传输时实际是二进制字节流,反序列化就是将这个二进制字节流转换为程序内部对象,即转换为一个适合程序内部处理的数据结构。
具体地,当节点集群中的主节点与候选节点中的至少一个节点进行区块同步时,主节点可以对待同步区块进行反序列化,得到区块对象,执行区块对象中的所有交易任务,并基于待同步区块进行哈希运算得到哈希值,即主节点对待同步区块进行哈希运算得到对应的哈希值;进一步的,主节点判断计算得到的哈希值与待同步区块中所携带的哈希值是否一致,若不一致,则丢弃;若计算得到的哈希值与待同步区块中所携带的哈希值一致,则主节点可以从待同步区块携带的节点签名集合中获取各个候选节点的节点标识,并从本地账本中查找各节点标识对应的节点证书;进一步的,主节点可以基于每个节点证书分别进行验签处理,得到与各节点证书对应的验签结果;当验签通过的验签结果数量满足预设阈值时,表示该待同步区块被认可,主节点可以将待同步区块加入到本地账本。
举个例子,如图6所示,为节点进行区块同步时的处理流程示意图。当节点从其他节点处进行区块同步时,当前节点对同步来的区块进行反序列化,得到区块对象,并执行区块对象中的所有交易;进一步的,节点对待同步区块进行哈希运算得到对应的哈希值;进一步的,主节点判断计算得到的哈希值与待同步区块中所携带的哈希值是否一致,若不一致,则丢弃;若计算得到的哈希值与待同步区块中所携带的哈希值一致,则主节点可以获取待同步区块附加数据中所携带的节点签名集合QC,主节点可以初始化该节点签名集合QC,使得认证通过的节点数量N=0;进一步的,主节点可以初始化i=0,并依次获取节点签名集合QC中的各个节点的节点标识,即主节点可以获取节点签名NS=QC[i],并判断该节点签名NS中是否存在节点ID,若存在节点ID,则主节点查询本地账本并获取与该节点ID对应的节点证书;进一步的,主节点可以使用获取到的该节点证书进行验签,得到与该节点对应的验签结果,主节点按照上述步骤,依次利用节点签名集合QC中的各个节点的节点证书进行验签处理,直到遍历完待同步区块附加数据中所携带的节点签名集合QC中的所有节点,并得到所有节点对应的验签结果;进一步的,当节点验签通过的验签结果数量满足预设阈值时,例如,预设阈值可以设置为正确节点的数量,即当节点验签通过的验签结果数量满足正确节点的数量时,表示该待同步区块被认可,主节点可以将待同步区块加入到本地账本。
或者,当节点验签通过的验签结果数量满足预设条件时,表示该待同步区块被认可,主节点可以将待同步区块加入到本地账本,预设条件可以设置为2f+1,f指的是本环境中最大容忍的作恶节点的数量,在拜占庭共识中都是3f+1模型,例如,整个环境中有4个节点,那么允许f=1个节点是作恶节点,不能更多,2f+1即正确节点的数量。
传统方式中,在同步区块的场合下,其区块中附加的节点证书集合会格外大,从而对整体的消息处理和区块同步造成了巨大影响,显著拉低了整体的处理性能,而本实施例中,由于待同步区块的附件数据中的节点签名格式变化,已经没有了证书信息,节点可以根据节点ID从账本中直接获取该节点的证书,再进行判断,使得节点在进行区块同步时可显著降低消息量,提高整体的处理性能,降低存储消耗。
在其中一个实施例中,从待同步区块携带的节点签名集合中获取候选节点的节点标识的步骤,包括:
从待同步区块携带的节点签名集合中,依次获取候选节点的节点签名;
从节点签名中获取节点标识;
所述方法还包括:当节点签名中不存在节点标识时,从节点签名中获取候选节点的节点证书,并基于各节点证书进行验签处理。
具体地,当节点集群中的主节点与候选节点中的至少一个节点进行区块同步时,主节点需要判断计算得到的哈希值与待同步区块中所携带的哈希值是否一致;若计算得到的哈希值与待同步区块中所携带的哈希值一致,则主节点可以从待同步区块携带的节点签名集合中,依次获取候选节点的节点签名,并从各个候选节点的节点签名中获取对应的节点标识,以使得主节点可以从本地账本中查找与各个节点标识对应的节点证书进行验签处理;若节点签名中不存在节点标识,则主节点可以从节点签名中直接获取候选节点的节点证书,并基于获取到的节点证书进行验签处理。
举个例子,如图6所示,为节点进行区块同步时的处理流程示意图。当节点从其他节点处进行区块同步时,若主节点确定计算得到的哈希值与待同步区块中所携带的哈希值一致,则主节点可以获取待同步区块附加数据中所携带的节点签名集合QC,主节点可以初始化该节点签名集合QC,使得认证通过的节点数量N=0;进一步的,主节点可以初始化i=0,并依次获取节点签名集合QC中的各个节点的节点标识,即主节点可以获取节点签名NS=QC[i],并判断该节点签名NS中是否存在节点ID,若该节点签名NS中存在节点ID,则主节点查询本地账本并获取与该节点ID对应的节点证书;若该节点签名NS中不存在节点ID,则主节点可以从该节点签名NS中直接获取该节点的节点证书,并基于获取到的节点证书进行验签处理。
在本实施例中,考虑到了兼容原有数据结构的情况,即考虑了节点签名中不存在节点标识的情况,可以同时支持节点证书上链和节点证书未上链两种情况。
在一个实施例中,所述方法还包括:
待同步区块包括区块头、区块体和附加信息;
附加信息包括候选节点的节点标识和节点签名信息。
具体地,如图7所示,为待同步区块的数据结构的示意图。当同步区块时,待同步区块的数据结构如图7中所示,待同步区块包括区块头、区块体和附加信息,附加信息中又包括各个节点的节点标识和节点签名信息。例如,在图7中所示的数据结构示意图中,附加信息中的节点标识即节点ID可以是从原始节点标识中选取的部分节点标识,节点标识与节点签名信息之间可以是一一对应的关联关系,例如,图7中所示的“节点(1)ID”对应于“节点(1)签名信息”、“节点(2)ID”对应于“节点(2)签名信息”。由此使得,待同步区块的附件数据中的节点签名格式发生变化,已经没有了证书信息,节点可以根据节点ID从账本中直接获取该节点的证书,再进行判断,使得节点在进行区块同步时可显著降低消息量,提高整体的处理性能,降低存储消耗。
在一个实施例中,哈希值是加密的局部哈希值,局部哈希值是从对业务数据进行哈希运算所得的原始哈希值中截取的部分哈希值;
节点标识是局部节点标识,局部节点标识是从至少一个节点的原始节点标识中选取的部分节点标识。
具体地,在节点证书上链后,就可以使用节点ID来替代节点证书,从而降低消息通信大小,如图8所示,为对数据进行签名的数据结构的示意图。即节点在对任意的数据进行签名时,它的数据结构调整为如图8中所示,签名信息中的节点证书被节点ID替代。可以优化的是,基于Hash函数的特点,很难在一定时间内,构造出执行结构的Hash值原文,也就是说,本申请实施例中可以使用节点的部分内容来替代整体内容,从而再次降低消息的传输量,即节点ID可以是局部节点ID,例如,原始节点ID为30位的字符串,可以从原始节点ID中选取前10位字符串作为局部节点ID。同样的,利用私钥对数据的哈希值进行加密也是一样的,很难构造一个新的Data满足旧Data的Hash值,因此,本申请实施例中也可以使用私钥对Data哈希值的部分内容进行加密即可,例如,假设对Data进行哈希运算得到的Data哈希值为ac9990,则可以截取Data哈希值的部分为ac9,并对使用私钥对Data哈希值的部分内容“ac9”进行加密即可,由此,基于哈希函数的特点,也对传输的数据进行了一些优化和裁剪,在已有优化的基础上进一步降低了通信量。
在一个实施例中,所述方法还包括:
当区块链中维护的区块高度值满足出块条件、且区块链中未产生待共识的目标区块时,从交易任务池中抓取交易任务;
基于交易任务生成待共识区块,并向区块链中候选节点发送针对待共识区块的共识请求。
具体地,一个新创建的区块链启动后,该区块链中的各个节点可以确定自身维护的区块高度值,并基于所确定的区块高度值,来判断自身是否满足出块条件;当节点集群中的某个节点基于自身维护的区块高度值,确定满足出块条件时,该节点出块,成为主节点。当该节点确定满足出块条件之后,该节点可以进一步的判断是否进行节点证书上链,即该节点可以判断当前区块链中是否产生了待共识的目标区块,若当前区块链中未产生待共识的目标区块,即不触发自动进行节点证书上链的步骤,则该节点可以从交易任务池中抓取交易任务,基于交易任务生成待共识区块,并向区块链中候选节点发送针对该待共识区块的共识请求,以使得各个候选节点对该共识请求进行验证,以确认该待共识区块是否可以达到共识。
举个例子,假设区块链1中包含3个节点分别为节点1、节点2和节点3,一个新创建的区块链1启动后,该区块链1中的各个节点可以基于自身维护的区块高度值,来判断是否满足出块条件;假设当前时刻节点1和节点3的区块高度值为0,节点2的区块高度值为1,则节点集群中的节点2可以基于自身维护的区块高度值1,确定满足出块条件,该节点2出块,成为主节点。当该节点2确定满足出块条件之后,该节点2可以进一步的判断是否进行节点证书上链,即该节点2可以判断当前区块链1中是否产生了待共识的目标区块,若当前区块链1中未产生待共识的目标区块,比如当前区块链1中仅包含创世区块,则不会触发自动进行节点证书上链的步骤,该节点2可以从交易任务池中抓取交易任务,基于交易任务生成待共识区块1,并向区块链1中候选节点即节点1和节点3发送针对该待共识区块1的共识请求,以使得节点1和节点3对该共识请求进行验证,以确认该待共识区块1是否可以达到共识。由此,只有当满足触发节点证书自动上链的条件时,才会使得主节点自动执行节点证书上链的流程,可以有效防止节点证书上链交易与普通交易竞争资源,以保证区块链整体的处理性能。
在一个实施例中,本申请还提供一种应用场景,该应用场景应用上述的区块链的节点通信方法。具体地,该区块链的节点通信在该应用场景的应用如下:
当用户想要提高区块链系统整体的处理性能时,可以采用上述的区块链的节点通信方法,即当区块链中产生目标区块时,可以自动触发节点证书上链的流程,即区块链中的主节点可以自动获取区块链中所有节点的节点证书,并将所有节点的节点证书上链至目标区块中;在主节点与区块链中的某个节点进行通信时,当主节点接收到某个从节点发送的通信消息时,主节点可以基于通信消息中携带的节点标识从目标区块中查找该从节点的节点证书;即通信消息中携带业务数据和从节点的签名信息,签名信息包括从节点的节点标识和业务数据的哈希值;主节点可以基于从节点的节点证书对业务数据的合法性进行验签处理,从而可以有效降低整个区块链网络消息的通信量,提高整体的性能,也可以降低存储消耗。
本申请实施例提供的方法,可以应用于各种区块链的节点间通信或者区块同步的场景中。以下以在区块链节点间进行消息传输和区块同步的场景为例,对本申请实施例提供的区块链的节点通信方法进行说明。
区块链系统是一种分布式系统,在这个系统中节点数量会对整体的性能产生巨大的影响,随着节点数量的增加,网络通信往往会成为整个区块链性能的一个瓶颈点之一。
为保证数据和信息的安全性,在共识过程中,节点会对广播的消息进行签名;当节点同步数据时,也是基于节点携带的这些数据的签名来确认的,由此使得节点的签名大小往往就会对整个广播的消息产生巨大的影响。
例如,在联盟链系统中,大部分都是采用基于证书的模型(与之对应的是公钥模型),证书中包含有公钥信息、支持密码算法等各类参数,整个证书的内容往往很大,例如RSA算法,它的证书可能会达到1KB。而在节点间进行数据验证时,往往在广播数据的时候需要将该证书也附在数据上,这样就导致整体的消息量非常大,尤其在节点数量比较多的情况下,即本申请中的区块链系统可以是指通过签名信息来确认身份的那类区块链系统。
在区块链系统中消息传输通常有两类,第一类是一个消息,该消息可能是一个提案,也可能是一个投票信息,它的特点是由一个节点签名广播,它的数据结构中包括数据(Data)和签名信息,签名信息中包括节点证书和使用私钥加密的Data哈希值,即使用私钥对Data哈希值进行加密后的数据。
第二类,即还有一种情况是节点对区块进行同步时,经过共识后的区块中往往会含有认可该区块的节点签名,该签名是一个集合,整体结构如图9所示。如图9所示,为传统方式中共识后的区块的结构示意图。如图9中所示的共识后的区块包括区块头、区块体和附加数据,附加数据中又包括节点认证信息,节点认证信息中包括认可该区块的各个节点的节点签名信息,例如,如图9中所示的节点认证信息中包括节点1签名信息和节点2签名信息等。
由上述图9中所示的节点认证信息可知,传统方式中的缺点非常明显,因为证书有可能太大,从而导致消息体比较大,在同步区块的场合下,其区块中附加的节点证书集合会格外大,从而对整体的消息处理和区块同步造成了巨大影响,显著拉低了整体的处理性能。
因此,为了解决上述问题,本申请提供了一种将节点证书预上链的方法,即本申请提出了一种区块链处理的性能优化方法,通过该方案节点证书可以预先上链,形成链上数据,而后续节点间再进行消息传输时可不再需要携带证书信息,从而可以有效降低整个区块链网络消息的通信量,提高整体的性能,也可以有效降低存储消耗。
本申请方案要解决的关键问题包括:
本申请提出了一种解决方案,该方案将节点证书事先上链,从而使得节点间进行消息传输和区块同步时可显著降低消息量,提高整体的处理性能,降低存储消耗。
在产品侧,本申请实施例中提供的方法可以作为一个典型的功能点的优化方案,对外进行适当的宣传,并可根据本专利的方案进行代码级别的实现,对对应的区块链底层代码进行优化。
在技术侧,1.1节点证书上链:
本申请实施例提出的方案需要依赖于节点上链,只有节点的信息上链后才可以使用裁剪后的签名方案,本申请实施例中提出了两种节点上链的模型。
如图4所示,为将共识节点信息加入到创世区块配置中的示意图。首先是创世区块中上链,在区块链系统中创世区块中往往会存储一些链的配置信息,并且这些信息达成一致后,才能进行新区块的产生,可以将共识节点信息加入到创世区块配置中,例如,将如图4所示的共识节点信息即共识节点的节点证书集合加入到创世区块配置中,该配置中节点ID建议使用节点的证书Hash(哈希)运算获得,这样更具有唯一性,即如图4中所示的节点(0)ID是通过对节点(0)证书进行哈希运算后所得到的,节点(0)ID可以是一串字符串。本申请实施例中的共识节点的信息一般需要存储在链上的就是地址和证书,图4所示的示意图也可以作为节点证书集合的示意图。
还有一种节点上链的方案,则是在新产生的第一个区块中将节点的证书上链,在基于BFT类共识的区块链底层模型下,通常都有主节点,主节点负责提案新的区块,由从节点进行验证,以确认该区块是否可以达到共识。基于这个模型下,第一个新区块的处理流程如图5所示。其中,BFT类共识是指拜占庭共识,因为拜占庭共识中才会主节点和从节点,其他共识环境本实施例中暂不考虑。可以理解,节点证书上链的时机包括但不限于是本申请实施例中的在新产生的第一个区块中将节点的证书上链,也可以指定其他上链策略,例如,第x个块上链,或者由人工来将信息上链。
本申请中的主节点在第一个区块时不会处理其他业务交易,仅仅将节点信息上链作为第一个区块中的所有交易来处理,这样目的性比较明确。当然也可以采用除了节点信息上链之外,加入交易池中已有的其他交易的方式,即在一些情况下,第一个区块中的交易除了节点信息上链交易之外,也可以包括其他的业务交易。
1.2数据签名结构
节点证书上链后,就可以使用节点ID来替代节点证书,从而降低消息通信大小,在对普通的数据进行签名时,它的数据结构调整为如图8中所示,即签名信息中的节点证书被节点ID或者部分节点ID替代。可以优化的是,基于Hash函数的特点,很难在一定时间内,构造出执行结构的Hash值原文,也就是说,可以使用节点的部分内容来替代整体,从而再次降低消息的传输量。同样的,私钥对数据的加密也是一样的,很难构造一个新的Data满足旧Data的Hash值,那么就可以使用私钥对Data哈希值的部分进行加密即可。
当同步区块时,它的数据结构如图7中所示,在图7中所示的数据结构示意图中,区块的附加信息不包含节点证书,而是包含节点标识即节点ID,图7所示的该结构中的签名信息也可以采用部分替代整体的处理方案。
1.3消息验证过程调整
如图10所示,为节点进行消息验证过程时的处理流程示意图。由于节点收到消息后无法从消息中获取其对应的证书信息,也就是无法直接验证,因此必须借助于本地账本中已经写入的节点证书才可以,它的处理流程如图10中所示,即当节点接收到共识消息时,对共识消息进行反序列化,以获取共识消息对象;进一步的,获取共识消息对象中携带的签名信息中的节点ID,并判断节点ID是否存在,即若节点从共识消息对象中携带的签名信息中获取到节点ID,则从本地账本中获取与该节点ID对应的节点证书,并进一步的判断该节点证书是否存在,若节点证书不存在,说明该消息超前或者该节点信息未上链,则结束流程。若节点证书存在,则使用该节点证书进行验签处理,并判断验签是否通过;若验签结果表示验签通过,则该节点可以进行其他处理流程;若验签结果表示验签未通过,则该节点可以将该消息丢弃。
此外,如图10中所示,若节点从共识消息对象中携带的签名信息中未获取到节点ID,则节点可以从签名信息中获取节点证书,并使用获取到的该节点证书进行验签处理;若验签结果表示验签通过,则该节点可以进行其他处理流程;若验签结果表示验签未通过,则该节点可以将该消息丢弃。
即图10所示的该处理流程的核心是从账本中获取对应的证书。当然在上述如图10所示的处理流程中,考虑到了兼容原有数据结构的情况,可以同时支持节点证书上链和未上链两种情况。
1.4区块同步
当节点从其他节点处进行区块同步时,处理流程也需要适时做一些调整,其核心就在于区块的附件数据中的节点签名格式变化,已经没有了证书信息,需要节点根据节点ID从账本中获取该节点的证书,再进行判断,判断其是否满足2f+1的情况,其处理流程如图6所示,即当节点从其他节点处进行区块同步时,当前节点对同步来的区块进行反序列化,得到区块对象,并执行区块对象中的所有交易;进一步的,当前节点对待同步区块进行哈希运算得到对应的哈希值;进一步的,当前节点判断计算得到的哈希值与待同步区块中所携带的哈希值是否一致,若不一致,则丢弃;若计算得到的哈希值与待同步区块中所携带的哈希值一致,则当前节点可以获取待同步区块附加数据中所携带的节点签名集合QC,当前节点可以初始化该节点签名集合QC,使得认证通过的节点数量N=0;进一步的,当前节点可以初始化i=0,并依次获取节点签名集合QC中的各个节点的节点标识,即当前节点可以获取节点签名NS=QC[i],并判断该节点签名NS中是否存在节点ID,若存在节点ID,则当前节点查询本地账本并获取与该节点ID对应的节点证书;进一步的,节点可以使用获取到的该节点证书进行验签,得到对应的验签结果,当前节点按照上述步骤,依次利用节点签名集合QC中的各个节点的节点证书进行验签处理,直到遍历完待同步区块附加数据中所携带的节点签名集合QC中的所有节点,并得到所有节点对应的验签结果;进一步的,当节点验签通过的验签结果数量满足2f+1时,表示该待同步区块被认可,当前节点可以将待同步区块加入到本地账本中,并结束流程;若节点验签通过的验签结果数量不满足2f+1,则丢弃该待同步区块。其中,f指的是本环境中最大容忍的作恶节点的数量,在拜占庭共识中都是3f+1模型,例如,整个环境中有4个节点,那么允许f=1个节点是作恶节点,不能更多,2f+1即正确节点的数量。
此外,如图6中所示,当前节点可以获取节点签名NS=QC[i],并判断该节点签名NS中是否存在节点ID,若不存在节点ID,则当前节点可以从该节点签名NS中获取证书,并使用获取到的该节点证书进行验签,得到对应的验签结果。
需要说明的是如图6所示的上述处理流程中没有对Hash进行一些裁剪说明,在实际实现时,可以采用裁剪的方式,这样可以降低QC中的数据量。
本申请技术方案所产生的有益效果包括:
1、本申请基于传统节点通信过程中签名信息携带证书,导致数据量很大的问题,进行了优化,提出了先将节点证书上链的模型。这样在签名中就不再需要含有节点的证书,从而降低了整体的通信量,一方面可以提高性能,另一方面也可以有效降低存储;
2、另外,本申请在实际实现过程中,基于哈希函数的特点,也对传输的数据进行了一些优化和裁剪,在已有优化的基础上进一步降低了通信量。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的区块链的节点通信方法的区块链的节点通信装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个区块链的节点通信装置实施例中的具体限定可以参见上文中对于区块链的节点通信方法的限定,在此不再赘述。
在一个实施例中,如图11所示,提供了一种区块链的节点通信装置,包括:获取模块1102、上链模块1104、接收模块1106、查找模块1108和处理模块1110,其中:
获取模块1102,用于当区块链中产生目标区块时,获取区块链中候选节点的节点证书。
上链模块1104,用于将候选节点的节点证书上链至目标区块中。
接收模块1106,用于在与候选节点中的至少一个节点进行通信时,接收至少一个节点发送的通信消息;通信消息中携带业务数据和至少一个节点的签名信息,签名信息包括至少一个节点的节点标识和业务数据的哈希值。
查找模块1108,用于基于节点标识从目标区块中查找至少一个节点的节点证书。
处理模块1110,用于基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
在一个实施例中,所述装置还包括:确定模块,用于确定所述区块链中维护的区块高度值;获取模块还用于当所述区块高度值满足出块条件、且所述区块链中产生待共识的目标区块时,获取所述区块链中候选节点的节点证书。
在一个实施例中,所述装置还包括:检测模块,用于当所述区块高度值满足出块条件、且所述区块链中产生待共识的目标区块时,对所述目标区块进行区块检测,得到检测结果;获取模块还用于当所述检测结果表示所述目标区块为所述区块链中的第一个区块时,获取所述区块链中候选节点的节点证书。
在一个实施例中,所述装置还包括:发送模块,用于发送请求消息至所述区块链中的候选节点;获取模块还用于当接收到所述候选节点针对所述请求消息返回的响应消息时,从所述响应消息中获取所述候选节点的节点证书。
在一个实施例中,所述装置还包括:配置模块,用于响应于触发的配置操作,在所述区块链的创世区块对应的配置文件中配置共识节点信息;所述共识节点信息包括所述候选节点的节点证书;获取模块还用于当所述区块链中产生目标区块时,在所述配置文件内获取所述区块链中候选节点的节点证书。
在一个实施例中,所述装置还包括:创建模块,用于创建用于上链所述节点证书的交易任务;签名模块,用于对所述交易任务进行签名;添加模块,用于将签名后的所述交易任务添加至所述目标区块的区块体中;发送模块还用于向所述区块链中候选节点发送针对所述目标区块的共识请求。
在一个实施例中,所述装置还包括:验证模块,用于当所述从节点接收到所述共识请求时,对所述目标区块中的交易任务进行验证,得到验证结果;确定模块还用于当所述验证结果满足预设条件时,确定所述目标区块达成共识;当所述验证结果不满足所述预设条件时,确定所述目标区块未达成共识。
在一个实施例中,所述装置还包括:写入模块。获取模块还用于在对所述交易任务进行验证时,获取所述交易任务中的证书集合;所述证书集合包含各共识节点的节点证书,所述共识节点属于所述候选节点中的至少一个节点;确定模块还用于基于各所述共识节点的节点证书,确定各所述共识节点的节点标识;写入模块,用于将所述节点标识作为键、所述节点证书作为值,写入到所述共识节点的关系集合中;确定模块还用于基于所述共识节点的关系集合,确定所述交易任务的验证结果。
在一个实施例中,所述装置还包括:加入模块。处理模块还用于当与所述候选节点中的至少一个节点进行区块同步时,对待同步区块进行反序列化,得到区块对象;执行所述区块对象中的交易任务,并基于所述待同步区块进行哈希运算得到哈希值;获取模块还用于当哈希运算所得的哈希值与所述待同步区块中携带的哈希值一致时,从所述待同步区块携带的节点签名集合中获取所述候选节点的节点标识;查找模块还用于从本地账本中查找各所述节点标识对应的节点证书;处理模块还用于基于每个所述节点证书分别进行验签处理,得到与各所述节点证书对应的验签结果;加入模块,用于当验签通过的验签结果数量满足预设阈值时,将所述待同步区块加入到本地账本。
在一个实施例中,获取模块还用于从所述待同步区块携带的节点签名集合中,依次获取所述候选节点的节点签名;从所述节点签名中获取节点标识;当所述节点签名中不存在所述节点标识时,从所述节点签名中获取所述候选节点的节点证书;处理模块还用于基于各所述节点证书进行验签处理。
在一个实施例中,所述装置还包括:抓取模块,用于当所述区块链中维护的区块高度值满足出块条件、且所述区块链中未产生待共识的目标区块时,从交易任务池中抓取交易任务;生成模块,用于基于所述交易任务生成待共识区块;发送模块还用于向所述区块链中候选节点发送针对所述待共识区块的共识请求。
上述区块链的节点通信装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图12所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储区块链的节点通信数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种区块链的节点通信方法。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (17)

1.一种区块链的节点通信方法,其特征在于,所述方法包括:
当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书;
将所述候选节点的节点证书上链至所述目标区块中;
在与所述候选节点中的至少一个节点进行通信时,接收所述至少一个节点发送的通信消息;所述通信消息中携带业务数据和所述至少一个节点的签名信息,所述签名信息包括所述至少一个节点的节点标识和所述业务数据的哈希值;
基于所述节点标识从所述目标区块中查找所述至少一个节点的节点证书;
基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定所述区块链中维护的区块高度值;
所述当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书,包括:
当所述区块高度值满足出块条件、且所述区块链中产生待共识的目标区块时,获取所述区块链中候选节点的节点证书。
3.根据权利要求2所述的方法,其特征在于,所述当所述区块高度值满足出块条件、且所述区块链中产生待共识的目标区块时,获取所述区块链中候选节点的节点证书,包括:
当所述区块高度值满足出块条件、且所述区块链中产生待共识的目标区块时,对所述目标区块进行区块检测,得到检测结果;
当所述检测结果表示所述目标区块为所述区块链中的第一个区块时,获取所述区块链中候选节点的节点证书。
4.根据权利要求3所述的方法,其特征在于,所述获取所述区块链中候选节点的节点证书,包括:
发送请求消息至所述区块链中的候选节点;
当接收到所述候选节点针对所述请求消息返回的响应消息时,从所述响应消息中获取所述候选节点的节点证书。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于触发的配置操作,在所述区块链的创世区块对应的配置文件中配置共识节点信息;所述共识节点信息包括所述候选节点的节点证书;
所述当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书,包括:
当所述区块链中产生目标区块时,在所述配置文件内获取所述区块链中候选节点的节点证书。
6.根据权利要求1所述的方法,其特征在于,所述将所述候选节点的节点证书上链至所述目标区块中,包括:
创建用于上链所述节点证书的交易任务;
对所述交易任务进行签名;
将签名后的所述交易任务添加至所述目标区块的区块体中;
所述方法还包括:向所述区块链中候选节点发送针对所述目标区块的共识请求。
7.根据权利要求6所述的方法,其特征在于,所述候选节点包括从节点;所述方法还包括:
当所述从节点接收到所述共识请求时,对所述目标区块中的交易任务进行验证,得到验证结果;
当所述验证结果满足预设条件时,确定所述目标区块达成共识;
当所述验证结果不满足所述预设条件时,确定所述目标区块未达成共识。
8.根据权利要求7所述的方法,其特征在于,所述对所述目标区块中的交易任务进行验证,得到验证结果,包括:
在对所述交易任务进行验证时,获取所述交易任务中的证书集合;所述证书集合包含各共识节点的节点证书,所述共识节点属于所述候选节点中的至少一个节点;
基于各所述共识节点的节点证书,确定各所述共识节点的节点标识;
将所述节点标识作为键、所述节点证书作为值,写入到所述共识节点的关系集合中;
基于所述共识节点的关系集合,确定所述交易任务的验证结果。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当与所述候选节点中的至少一个节点进行区块同步时,对待同步区块进行反序列化,得到区块对象;
执行所述区块对象中的交易任务,并基于所述待同步区块进行哈希运算得到哈希值;
当哈希运算所得的哈希值与所述待同步区块中携带的哈希值一致时,从所述待同步区块携带的节点签名集合中获取所述候选节点的节点标识;
从本地账本中查找各所述节点标识对应的节点证书;
基于每个所述节点证书分别进行验签处理,得到与各所述节点证书对应的验签结果;
当验签通过的验签结果数量满足预设阈值时,将所述待同步区块加入到本地账本。
10.根据权利要求9所述的方法,其特征在于,所述从所述待同步区块携带的节点签名集合中获取所述候选节点的节点标识,包括:
从所述待同步区块携带的节点签名集合中,依次获取所述候选节点的节点签名;
从所述节点签名中获取节点标识;
所述方法还包括:当所述节点签名中不存在所述节点标识时,从所述节点签名中获取所述候选节点的节点证书,并基于各所述节点证书进行验签处理。
11.根据权利要求9或10所述的方法,其特征在于,所述方法还包括:
所述待同步区块包括区块头、区块体和附加信息;
所述附加信息包括所述候选节点的节点标识和节点签名信息。
12.根据权利要求1所述的方法,其特征在于,所述哈希值是加密的局部哈希值,所述局部哈希值是从对所述业务数据进行哈希运算所得的原始哈希值中截取的部分哈希值;
所述节点标识是局部节点标识,所述局部节点标识是从所述至少一个节点的原始节点标识中选取的部分节点标识。
13.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述区块链中维护的区块高度值满足出块条件、且所述区块链中未产生待共识的目标区块时,从交易任务池中抓取交易任务;
基于所述交易任务生成待共识区块,并向所述区块链中候选节点发送针对所述待共识区块的共识请求。
14.一种区块链的节点通信装置,其特征在于,所述装置包括:
获取模块,用于当所述区块链中产生目标区块时,获取所述区块链中候选节点的节点证书;
上链模块,用于将所述候选节点的节点证书上链至所述目标区块中;
接收模块,用于在与所述候选节点中的至少一个节点进行通信时,接收所述至少一个节点发送的通信消息;所述通信消息中携带业务数据和所述至少一个节点的签名信息,所述签名信息包括所述至少一个节点的节点标识和所述业务数据的哈希值;
查找模块,用于基于所述节点标识从所述目标区块中查找所述至少一个节点的节点证书;
处理模块,用于基于所述至少一个节点的节点证书对所述业务数据进行验签处理。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至13中任一项所述的方法的步骤。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至13中任一项所述的方法的步骤。
17.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至13中任一项所述的方法的步骤。
CN202211457971.XA 2022-11-16 2022-11-16 区块链的节点通信方法、装置、计算机设备、存储介质 Pending CN118054919A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211457971.XA CN118054919A (zh) 2022-11-16 2022-11-16 区块链的节点通信方法、装置、计算机设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211457971.XA CN118054919A (zh) 2022-11-16 2022-11-16 区块链的节点通信方法、装置、计算机设备、存储介质

Publications (1)

Publication Number Publication Date
CN118054919A true CN118054919A (zh) 2024-05-17

Family

ID=91052391

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211457971.XA Pending CN118054919A (zh) 2022-11-16 2022-11-16 区块链的节点通信方法、装置、计算机设备、存储介质

Country Status (1)

Country Link
CN (1) CN118054919A (zh)

Similar Documents

Publication Publication Date Title
CN110569675B (zh) 一种基于区块链技术的多Agent交易信息保护方法
CN109327528B (zh) 一种基于区块链的节点管理方法和装置
CN110061838B (zh) 一种dns资源记录的去中心化存储系统及其实现方法
CN109462587B (zh) 区块链分层共识方法、区块链网络系统及区块链节点
CN112685505B (zh) 一种交易数据处理方法、装置、计算机设备及存储介质
EP3698518B1 (en) Primary and secondary blockchain device
CN111556120B (zh) 基于区块链的数据处理方法、装置、存储介质及设备
CN111092896B (zh) 基于优化paxos的食品溯源分布式数据同步方法
CN109766673A (zh) 一种联盟式音视频版权区块链系统及音视频版权上链方法
CN110351133A (zh) 用于区块链系统中的主节点切换处理的方法及装置
CN113421097B (zh) 一种数据处理方法、装置、计算机设备及存储介质
CN111934996B (zh) 消息传输方法及装置
CN109491996A (zh) 用于区块链网络的区块生成方法、区块数据访问方法、计算设备、存储介质
CN113824563B (zh) 一种基于区块链证书的跨域身份认证方法
CN113328997B (zh) 联盟链跨链系统及方法
CN113255014B (zh) 一种基于区块链的数据处理方法以及相关设备
CN111737352B (zh) 一种基于区块链的供应链信息协同管理方法
US20230289782A1 (en) Smart contract-based data processing
CN111488372A (zh) 一种数据处理方法、设备及存储介质
CN113765675B (zh) 一种交易数据处理方法、装置、设备以及介质
CN110597922A (zh) 数据处理方法、装置、终端及存储介质
CN112116349B (zh) 面向高吞吐率的图式账本的随机化共识方法和装置
CN114329528A (zh) 一种基于区块链的档案数据管理方法及系统
CN114240433A (zh) 基于区块链的数据处理方法及系统
WO2023168993A1 (zh) 基于区块链的数据处理方法、装置、设备、介质及产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication