CN117097481A - 区块共识方法、同步方法、装置、电子设备及存储介质 - Google Patents

区块共识方法、同步方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117097481A
CN117097481A CN202210524604.0A CN202210524604A CN117097481A CN 117097481 A CN117097481 A CN 117097481A CN 202210524604 A CN202210524604 A CN 202210524604A CN 117097481 A CN117097481 A CN 117097481A
Authority
CN
China
Prior art keywords
block
transaction
voting
node
verification
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
CN202210524604.0A
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 CN202210524604.0A priority Critical patent/CN117097481A/zh
Publication of CN117097481A publication Critical patent/CN117097481A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3263Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种区块共识方法、同步方法、装置、电子设备及存储介质,涉及区块链领域。该方法应用于区块链系统中的任一节点,该方法包括:在预设时长内获得多个投票结果,每个投票结果是由区块链系统中的一个从节点针对待共识的第一区块生成的验证结果;当投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,第一投票结果还包括第一区块中验证失败的交易的交易标识;若根据多个投票结果确定第一区块共识失败,则根据多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理。本申请实施例实现了在换主时就不会对普遍验证失败的交易重新打包,推进共识的进度,提高共识效率。

Description

区块共识方法、同步方法、装置、电子设备及存储介质
技术领域
本申请涉及区块链技术领域,具体而言,本申请涉及一种区块共识方法、同步方法、装置、电子设备、计算机可读存储介质及计算机程序产品。
背景技术
智能合约是区块链系统中的重要部分,是一种旨在以信息化方式传播、验证或执行合同的计算机协议,智能合约允许在没有第三方的情况下进行可信交易,这些交易可查询且不可逆转。
区块链是一种确定性状态机,要求区块链系统的所有节点对于交易的执行结果必须是一致的,从而能达成共识,否则共识失败。对于大部分对外提供的智能合约,为了支持该确定性,它们从诞生之处就特意屏蔽掉了随机数、时间戳等等会产生随机操作的随机函数。
但随着目前区块链的发展,越来越多的广泛使用的语言被应用到区块链中,这类广泛使用的语言通常是支持随机数等随机函数的,因此也就对区块链系统带来了隐患。
发明内容
本申请实施例提供了一种区块共识方法、同步方法、装置、电子设备、计算机可读存储介质及计算机程序产品,可以解决现有技术的上述问题。所述技术方案如下:
根据本申请实施例的一个方面,提供了一种区块共识方法,应用于区块链系统中的任一节点,所述任一节点为主节点或从节点,该方法包括:
在预设时长内获得多个投票结果,每个投票结果是由所述区块链系统中的一个从节点针对待共识的第一区块生成的验证结果;所述第一区块中包括至少一个交易的交易标识,所述投票结果用于表示所述第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;
若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理;
其中,所述交易池包括所述第一区块中的交易标识对应的交易。
作为一种可选的实施例,根据所述多个投票结果中的各第一投票结果包括的验证失败的交易,对预设的本地交易池进行清理,包括:
确定每个验证失败的交易在所有第一投票结果中出现的次数;
将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除。
作为一种可选的实施例,当所述任一节点为从节点时,所述方法还包括:
获得由所述主节点发送的所述第一区块;
对所述第一区块进行验证投票,得到投票结果,将投票结果发送至所述区块链系统中的多个其他节点。
作为一种可选的实施例,若根据多个投票结果确定所述第一区块共识失败,之后还包括:
进行更换主节点的操作。
作为一种可选的实施例,当所述任一节点为从节点时,所述进行更换主节点的操作,之后还包括:
若所述任一节点确定作为新的主节点,则将清理后的交易池中的交易打包为待共识的第二区块;
将所述第二区块广播至所述区块链系统中的其他节点进行区块共识。
作为一种可选的实施例,根据多个投票结果确定所述第一区块共识失败,包括:
若所述多个投票结果中所述第一投票结果的数量大于所述区块链中作恶节点的数量,则确定所述第一区块共识失败;或者
若得所述多个投票结果中,所述第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识失败;
其中,所述第二投票结果用于表示所述第一区块中不存在验证失败的交易。
作为一种可选的实施例,在预设时长内获得投票结果,之后还包括:
若所述多个投票结果中,第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识成功,将所述第一区块中的交易标识对应的交易写入账本。
作为一种可选的实施例,第一区块还包括所述主节点对各个所述交易标识对应的交易的执行结果;
所述对所述第一区块进行验证投票,得到投票结果,包括:
执行所述第一区块中的每个所述交易标识对应的交易,若确定存在执行结果与主节点的执行结果不一致的交易,则获得验证失败的交易,得到第一投票结果;
若确定不存在执行结果与主节点的执行结果不一致的交易,则得到第二投票结果。
根据本申请实施例的另一个方面,提供了一种区块同步方法,应用于执行第一方面提供的区块共识方法的节点,该区块同步方法包括:
从所述区块链系统中的至少一个其他节点获得待同步的第三区块;
以不执行所述第三区块中的交易的验证方式,验证所述第三区块;
若验证通过,则将所述第三区块中的交易同步至本地账本。
作为一种可选的实施例,验证方式包括验证所述第三区块的法定节点数证书或者区块哈希。
根据本申请实施例的再一个方面,提供了一种区块共识装置,应用于区块链系统中的任一节点,所述任一节点为主节点或从节点,所述装置包括:
投票结果获取模块,用于在预设时长内获得多个投票结果,每个投票结果是由所述区块链系统中的一个从节点针对待共识的第一区块生成的验证结果;所述第一区块中包括至少一个交易的交易标识,所述投票结果用于表示所述第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;
交易清理模块,用于若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理;
其中,所述交易池包括所述第一区块中的交易标识对应的交易。
作为一种可选的实施例,交易清理模块包括:
次数统计单元,用于确定每个验证失败的交易在所有第一投票结果中出现的次数;
交易清除单元,用于将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除。
作为一种可选的实施例,当所述任一节点为从节点时,区块共识装置包括:
区块接收模块,用于获得由所述主节点发送的所述第一区块;
验证投票模块,用于对所述第一区块进行验证投票,得到投票结果,将投票结果发送至所述区块链系统中的多个其他节点。
作为一种可选的实施例,区块共识装置还包括:
换主模块,用于若根据多个投票结果确定所述第一区块共识失败,进行更换主节点的操作。
作为一种可选的实施例,区块共识装置还包括:
区块打包模块,用于若所述任一节点确定作为新的主节点,则将清理后的交易池中的交易打包为待共识的第二区块;
区块广播模块,用于将所述第二区块广播至所述区块链系统中的其他节点进行区块共识。
作为一种可选的实施例,区块共识装置包括:
区块共识模块,用于若所述多个投票结果中所述第一投票结果的数量大于所述区块链中作恶节点的数量,则确定所述第一区块共识失败;或者
若得所述多个投票结果中,所述第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识失败;
其中,所述第二投票结果用于表示所述第一区块中不存在验证失败的交易。
作为一种可选的实施例,区块共识模块还用于:
若所述多个投票结果中,第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识成功,将所述第一区块中的交易标识对应的交易写入账本。
作为一种可选的实施例,第一区块还包括所述主节点对各个所述交易标识对应的交易的执行结果;
验证投票模块,具体用于:
执行所述第一区块中的每个所述交易标识对应的交易,若确定存在执行结果与主节点的执行结果不一致的交易,则获得验证失败的交易,得到第一投票结果;
若确定不存在执行结果与主节点的执行结果不一致的交易,则得到第二投票结果。
根据本申请实施例的再一个方面,提供了一种区块同步装置,应用于执行如上述方法的节点,所述装置包括:
待同步区块获取模块,用于从所述区块链系统中的至少一个其他节点获得待同步的第三区块;
验证模块,用于以不执行所述第三区块中的交易的验证方式,验证所述第三区块;
同步模块,用于若验证通过,则将所述第三区块中的交易同步至本地账本。
作为一种可选的实施例,验证方式包括验证所述第三区块的法定节点数证书或者区块哈希。
根据本申请实施例的再一个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现上述各方面提供的方法的步骤
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各方面提供的方法的步骤。
根据本申请实施例的一个方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述各方面提供的方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
通过在预设时长内获得多个投票结果,每个投票结果是由区块链系统中的一个从节点,针对待共识的第一区块生成的验证结果,第一区块中包括至少一个交易的交易标识,投票结果用于表示第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理,后续在换主时就不会对普遍验证失败的交易重新打包,从而推进共识的进度,提高共识效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的分布式系统应用于区块链系统的一个可选的结构示意图;
图2为本申请实施例提供的一种区块结构的示意图;
图3为相关技术在面对时间戳随机函数的场景时存在的问题的示意图;
图4为相关技术在面对时间戳随机函数的场景时存在的另一个问题的示意图;
图5为本申请实施例提供的一种区块共识方法的流程示意图;
图6为本申请实施例提供的一种第一投票结果的组成的示意图;
图7为本申请实施例提供的一种本申请实施例的公益捐赠客户端的捐赠界面的示意图;
图8为本申请一个实施例的区块共识方法的流程示意图;
图9为本申请一个实施例的换主后的区块共识方法的流程示意图;
图10为本申请实施例的区块共识方法的流程示意图;
图11为本申请实施例的主节点和从节点在区块共识过程的交互示意图;
图12为本申请实施例提供的一种应用本申请实施例的区块共识方法的具体场景示意图;
图13为本申请实施例的区块同步方法的流程示意图;
图14为本申请另一个实施例的区块同步方法的流程示意图;
图15为本申请实施例提供的区块共识装置的结构示意图;
图16为本申请实施例提供的区块同步装置的结构示意图;
图17为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
1)拜占庭错误:恶意节点,它为了阻挠真实信息的传递以及有效一致的达成,会向各个节点发送前后不一致的信息,能够处理拜占庭错误的这种容错性,就叫做拜占庭容错(Byzantine Fault Tolerance,BFT)。
2)实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT),PBFT的核心就是少数服从多数,例如,当节点数大于等于4个的时候,1个无效节点的存在并不会影响消息的传递。推广来说,当存在n个无效节点时,只要总节点数超过3n个,消息传递的正确性就能得到保证,这也是拜占庭算法的容错率。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
本申请的方案可以应用于区块链系统中,并且具体可以应用于区块链系统中的客户端进行交易的场景。通过本申请的方案,客户端会向区块链系统中可以连接的节点发送交易,然后由这些节点将交易同步至所有节点,接收到交易的各个节点将交易存储在交易池中,之后由主节点将交易打包为待验证的区块,主节点将该区块广播至区块链系统中的各个从节点,各个从节点对该区块进行区块共识,并将投票结果广播给区块链系统中的其他节点(包括主节点),当一个从节点确定验证识别时,对应的投票结果还包括验证失败的交易的交易标识,从而每个节点可以根据接收到的投票结果判断该区块是否共识成功,若共识识别,则可以根据根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理,从而避免后续换主时重新将验证失败的交易打包的风险。
本发明实施例涉及的区块链系统可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统。
参见图1,图1是本发明实施例提供的分布式系统100应用于区块链系统的一个可选的结构示意图,由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端形成,节点之间形成组成的点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图1示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行虚拟资产的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询虚拟资产地址中剩余的虚拟资产;
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的虚拟资产转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
参见图2,图2是本发明实施例提供的区块结构(Block Structure)一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
相关技术存在如下缺陷:
缺陷一、当节点间达成一致时,可能会存在还有f(f为作恶节点的数量)个节点未达成一致的情况,这些节点因为本身无法与其他节点在当时达成一致,会通过同步模块进行同步,但同步过程因为需要执行交易,仍然会产生不一致的情况,从而永远无法追上整条链。
缺陷二、如果节点是新加入区块链系统或是宕机重启,需要从其他节点同步数据,由于需要执行交易,也会因为随机函数产生不一致的执行结果,从而永远无法追上整条链(这个问题与1是一致的)。
请参见图3,其示例性地示出了相关技术在面对时间戳随机函数的场景时存在的问题的示意图,如图所示,区块链系统中各个节点处理的交易为“获取当前的本地时间”,由于不同节点的本地时钟可能存在不一致的情况,因此该交易可以理解为基于时间戳随机函数的交易,图中的区块链系统共有4个节点,预先设置该系统中的作恶节点数量为1,由于其中节点1~3的本地时间是一致的,仅节点4的本地时间与其他3个几点的本地时间不一致,在这种情况下,相关技术的节点4由于始终无法与其他节点达成一致,无法达成共识。
缺陷三、当节点间达不成一致时,因为整个过程不知道哪笔交易是随机函数导致的,因此该交易被无法剔除,会导致即使换了主节点,仍然会存在打包该交易的风险,进而继续出现不一致性的情况,影响区块链系统的整体使用。
请参见图4,其示例性地示出了相关技术在面对时间戳随机函数的场景时存在的另一个问题的示意图,如图所示,该区块链系统中包括4个节点,预先设置作恶节点的数量为1,区块链系统中各个节点处理的交易为“获取当前的本地时间”,由于所有节点获得的时间共有两种,且每一种时间对应的节点均为2,因此无法达成一致,并且即使更换主节点,也仍然不会达成一致。
本申请提供的区块共识方法、区块同步方法、装置、电子设备、计算机可读存储介质以及计算机程序产品,旨在解决现有技术的如上技术问题。
可以理解的是,本申请的方案可以在上述的区块链系统中可以用于客户端提出交易以及各个区块链节点进行交易的过程。下面结合具体实施方式对本申请提供的技术方案做出详细说明。
本申请实施例中提供了一种区块共识方法,如图5所示,该方法包括:
S101、在预设时长内获得多个投票结果。
需要说明的是,每个投票结果是由所述区块链系统中的一个从节点针对待共识的第一区块生成的验证结果。本申请实施例的区块共识方式适用于任意一个节点,也即既可以是是主节点,也可以是从节点,因此当该方法应用于主节点时,主节点获得的投票结果均为各个从节点生成的投票结果,当该方法应用于从节点时,获得的投票结果中可以包括自己针对第一区块生成的投票结果。
本申请可以开启预设时长的计时器,仅在计时器计时期间接收其他节点发送的投票结果。本申请实施例对于开启计时器的时机不作具体限定,例如,可以在获得首个投票结果时开启计时器。
本申请实施例的所述第一区块中包括至少一个交易的交易标识,作为一种可选实施例,第一区块中也可以包括交易,以供接收到该第一区块的从节点执行交易,以生成投票结果。作为一种可选实施例,当第一区块中没有包括交易时,从节点可以根据该第一区块中的交易标识,在自身的交易池中进行检索,并执行该检索到的交易,以生成投票结果。
本申请实施例的投票结果用于表示所述第一区块中是否存在验证失败的交易,也就是说,投票结果用来表示两种验证结果,要么第一区块中存在验证失败的交易(不限于1个还是多个),要么第一区块中不存在验证失败的交易。当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识。本申请实施例通过在第一投票结果中增加验证失败的交易的交易标识,使得接收到投票结果的节点能够知道其他节点对区块中的交易有哪些异常的判断。
请参见图6,其示例性地示出了本申请实施例的第一投票结果的组成的示意图,如图所示,第一投票结果中包括用于表示存在验证失败的交易的投票标识以及验证失败的交易的交易标识,图中Nil Block Hash是用了用于表示存在验证失败的交易的投票标识,为空值,说明没有对区块哈希达成共识,Tx1、Tx5是两个验证失败的交易的交易标识。
作为一种可选实施例,表示存在验证失败的交易的投票标识可以用空值进行表示,第一区块中还包括主节点对第一区块进行哈希运算生成的区块哈希,从节点通过对第一区块进行哈希运算,若自身生成的区块哈希与第一区块中携带的区块哈希不一致,则以空值作为投票标识,这样其他节点收到该投票结果后,即可知道发送该投票结果的从节点确定该第一区块存在异常。
S102、若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理。
基于拜占庭共识,可以根据多个投票结果判断第一区块是否共识成功,若确定第一区块共识失败,本申请进一步基于多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理,具体的,可以将验证失败的次数大于一定数量的交易从交易池清理。由于共识失败会进行换主(节点)操作,因此后续如果被认定为新的主节点,在从交易池打包交易时,就不会对普遍验证失败的交易重新打包,从而推进共识的进度,提高共识效率。
在一些实施例中,当客户端需要将交易上(区块)链时,可以将交易先发送给一个或多个连接的节点,再由这些节点将交易广播给区块链系统上的所有节点,使得每个节点将待验证的交易保存在节点本地的交易池中。后续,主节点将交易打包成区块,发给各个从节点校验,打包的区块中可以包括交易,也可以仅包括交易的交易标识,当仅包括交易的交易标识时,节点可以从本地的交易池中确定相应的交易。
本申请实施例的区块共识方法,应用于区块链系统中的主节点或者从节点,该方法通过获得多个投票结果,每个投票结果是由区块链系统中的一个从节点,针对待共识的第一区块生成的验证结果,第一区块中包括至少一个交易的交易标识,投票结果用于表示第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理,后续在换主时就不会对普遍验证失败的交易重新打包,从而推进共识的进度,提高共识效率。
在上述各实施例的基础上,作为一种可选实施例,根据所述多个投票结果中的各第一投票结果包括的验证失败的交易,对预设的本地交易池进行清理,包括:
确定每个验证失败的交易在所有第一投票结果中出现的次数;
将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除。
当节点根据接收到的投票结果确定共识失败,说明各个投票结果中属于第一投票结果的数量大于了区块链中作恶节点的数量,由于第一投票结果中包括至少一个验证失败的交易的交易标识,因此本申请可以对每个交验证失败的交易,统计其在各个第一投票结果中出现的次数,如果次数大于所述区块链中作恶节点的数量,说明至少有一个诚实节点对该交易验证失败,因此可以认为该交易确实是异常交易,需要从所述交易池中清除。
在上述各实施例的基础上,作为一种可选实施例,当本申请实施例应用于从节点时,方法还包括:
S201、获得由所述主节点发送的所述第一区块;
S202、对所述第一区块进行验证投票,得到投票结果,将投票结果发送至所述区块链系统中的多个其他节点。
本申请的从节点除了接收其他节点发送的投票结果,自身也要生成投票结果并广播给区块链系统中的其他节点(其中包括主节点),具体地,主节点通过向各个从节点发送第一区块,接收到第一区块的从节点对第一区块进行验证投票,得到投票结果,并广播给其他节点。
在一些实施例中,交易需要由交易者通过客户端进行上传,本申请对于客户端的应用场景不作具体限定,例如可以是用于实现公益捐赠的户端,捐赠者(也即交易者)通过在公益捐赠客户端上输入具体的捐赠财物,在捐赠完成时,公益捐赠客户端根据捐赠财物的相关信息,例如捐赠者、捐赠项目、捐赠时间等信息生成一个交易,上传至区块链中的部分节点,再由部分节点将交易广播至全部节点,其中主节点在接收到交易后,将该交易打包为第一区块广播给各个从节点。
请参见图7,其示例性地示出了本申请实施例的公益捐赠客户端的捐赠界面的示意图,当公益捐赠客户端运行时,显示该界面,捐赠者可以在点击该界面上的控件,选择不同的捐赠项目,在选定捐赠项目后,在输入框中输入金额,执行支付操作,即可实现公益捐赠。当支付完成时,公益捐赠客户端将生成一条交易发给区块链系统的部分节点。
请参见图8,其示例性地示出了本申请一个实施例的区块共识方法的流程示意图,如图所示,该实施例的区块链系统包括4个节点,假设4个节点中有1个是作恶节点,其中主节点为节点0,从节点为节点1~3,主节点向各个从节点发送待共识的区块,该区块中包括4个交易,分别为tx1~tx4,其中tx1~3为异常交易。节点1~3均验证到了失败的交易,因此节点1~3均会向其他节点广播第一投票结果,具体而言,节点1验证失败的交易为tx1和tx2,节点2验证失败的交易为tx1、tx2和tx3,节点3验证失败的交易为tx2和tx3。
应当理解的是,节点只要获得的投票结果多于一倍作恶节点的数量,即可获得区块共识结果,因此该实施例中的每个节点,只要获得两个投票结果,即可获得区块共识结果。对于主节点而言,其需要获得至少两个从节点的投票结果获得区块共识结果,而对于从节点而言,由于其自身生成了一个投票结果,因此只需要再获得一个其他从节点的投票结果,即可获得区块共识结果。
本实施例的节点0作为主节点,接收到了节点1和节点2的投票结果,由于两个投票结果中tx1和tx2出现的次数为2(大于了作恶节点的数量),而tx3出现的次数为1(未大于作恶节点的数量),因此将tx1和tx2从本地的交易池中清除。同理,节点1根据接收到节点2和节点3的投票结果,确定将tx1、tx2和tx3均从本地的交易池中清除,节点2根据接收到节点1的投票结果以及自身生成的投票结果,确定将tx1和tx2从本地的交易池中清除,节点3根据接收到节点2的投票结果以及自身生成的投票结果,确定将tx2和tx3从本地的交易池中清除。
由上述实施例可知,上述实施例的这种删除方式可能无法一次性将不认可的交易全部删除,毕竟有两个核心点存在:第一,不是所有节点执行都与主节点不一致,例如时间戳随机函数,从节点有较大可能与主节点是一致的;第二,对于一个节点而言,它是有容错的,它只需要收到大于2f笔投票即可进入到下个阶段,而这些投票不指定是从哪些节点广播来的。以图7所示实施例为例,有tx1、tx2和tx3三笔交易都存在异常,但只有节点1发现了全部的异常交易,节点0和节点2没有发现异常的交易3,节点3没有发现异常的交易1。因此,在上述各实施例的基础上,作为一种可选实施例,若根据多个投票结果确定所述第一区块共识失败,之后还包括:
进行更换主节点的操作。
应当理解的是,当一个节点对一个区块共识失败时,意味着所有节点都会对该区块共识失败,因此所有节点都会进行更换主节点的操作。显然,所有节点都会遵循同样的换主流程,选择出同一个新的主节点。
本申请实施例对于更换主节点的操作的具体方式不作限定,例如可以以预先对所有的节点进行编号,每次确定进行更换主节点时,将当前主节点编号的下一个变换的节点作为新的主节点。
具体的,当节点新加入区块链系统时,节点获得自己的编号信息、当前主节点的编号信息以及更好主节点的规则,获得主节点发送的区块并进行验证投票,得到投票结果,将投票结果发送至所述区块链系统中的多个其他节点,并且该节点也会接收其他节点的投票结果,并根据各个投票结果对第一区块进行区块共识,若共识失败,则执行更换主节点的操作,由于预先确定了当前主节点的编号信息,因此确定新的主节点为编号为原主节点编号后一个的节点,基于该新的主节点进行区块共识。
在上述各实施例的基础上,作为一种可选实施例,当所述任一节点为从节点时,所述进行更换主节点的操作,之后还包括:
若所述任一节点确定作为新的主节点,则将清理后的交易池中的交易打包为待共识的第二区块;
将所述第二区块广播至所述区块链系统中的其他节点进行区块共识。
需要说明的,本申请实施例的从节点如果在进行更换主节点的操作后被确定为新的主节点,则会将清理后的交易池中的交易,打包为待共识的第二区块,通过将第二区块广播至其他节点,使得其他节点对第二区块中的交易进行验证,直至共识达成。
请参见图9,其示例性地示出本申请一个实施例的换主后的区块共识方法的流程示意图,该实施例是以图8所示实施例为基础的后续流程,经过更换主节点的操作,确定节点2为新的主节点,由于节点2之前已经从流量池中删除了交易tx1和tx2,因此只需要将交易池中的交易tx3和tx4打包为区块,并广播给其他节点,节点0、节点1以及节点3,分别对交易进行验证,节点0确定交易3为验证失败的交易,节点1确定交易3为验证失败的交易,节点0和节点1均广播第一投票结果,节点3没有发现验证失败的交易,因此广播第二投票结果。
对于节点0而言,节点0接收到节点1和节点3的投票结果,由于节点0自身确定交易tx3验证失败,同时节点1的第一投票结果中也记载交易tx3验证失败,tx3验证失败的次数为2次,大于作恶节点的数量1,因此可以确定将tx3从交易池中清除。
对于节点1而言,节点1接收到节点2和节点3的投票结果,由于节点1自身确定交易tx3验证失败,同时节点2的第一投票结果中也记载交易tx3验证失败,tx3验证失败的次数为2次,大于作恶节点的数量1,因此可以确定将tx3从交易池中清除,但由于上一轮投票已经将tx3清除,因此本次不需要再清除了。
对于节点2而言,节点2接收到节点0和节点1的投票结果,由于节点1和节点0均确定交易tx3验证失败,tx3验证失败的次数为2次,大于作恶节点的数量1,因此可以确定将tx3从交易池中清除。
对于节点3而言,节点3接收到节点0和节点1的投票结果,由于节点1和节点0均确定交易tx3验证失败,tx3验证失败的次数为2次,大于作恶节点的数量1,因此可以确定将tx3从交易池中清除,但由于上一次已经将交易tx3清除,因此不需要清除。
从而,经过第二轮投票,所有节点都实现了将交易池中异常交易清除,再经过一次换主,由于新的主节点只会将交易池中的交易tx4打包,而所有节点都没有验证交易tx4异常,因此第三轮投票将达成共识。
在上述各实施例的基础上,作为一种可选实施例,根据多个投票结果确定所述第一区块共识失败,包括:
若所述多个投票结果中所述第一投票结果的数量大于所述区块链中作恶节点的数量,则确定所述第一区块共识失败。
本申请实施例借鉴了拜占庭容错的思想,如果一个节点接收到的投票结果中,属于第一投票结果的数量大于区块链中作恶节点的数量,说明存在至少一个诚实节点确定该区块存在异常,因此确定区块共识失败。
作为一种可选实施例,若得所述多个投票结果中,所述第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识失败。
也就是说,如果本申请实施例的节点在预设时长内接收到投票结果数量较少,使得第一投票结果的数量不大于所述区块链中作恶节点的数量,同时第二投票结果(用于表示所述第一区块中不存在验证失败的交易)的数量不大于所述区块链中作恶节点数量的两倍,那么同样会确定区块共识失败。
在上述各实施例的基础上,作为一种可选实施例,在预设时长内获得投票结果,之后还包括:
若多个投票结果中,第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识成功,将所述第一区块中的交易标识对应的交易写入账本。
需要说明的是,若多个投票结果中第二投票结果大于作恶节点,说明至少所有的正常节点都没有从第一区块中验证出验证失败的节点。因此可以确定第一区块共识成功,进一步需要将第一区块中的交易标识对应的交易写入账本。
请参见图10,其示例性地示出了本申请实施例的区块共识方法的流程示意图,如图所示,本申请实施例的区块共识方法包括4个阶段,分别为提议阶段、预投票阶段、预提交阶段和提交阶段。
在提议阶段(Proposal),主节点(Leader)产生区块,并将区块广播至区块链系统中的各个从节点,图中示出了3个从节点(Peer),分别为从节点1~3。
在预投票阶段(Prevote),各个从节点对区块进行验证投票,得到投票结果,投票结果包括两种,一种为第一投票结果,表示第一区块中存在验证失败的交易,第一投票结果包括表示验证失败的标识,图中表示为NilBlockHash,还包括所述第一区块中验证失败的交易的交易标识,这样对于节点而言,它可以知道其他节点对区块中的交易有哪些异常的判断;另一种为第二第一投票结果,表示第一区块中不存在验证失败的交易,第二投票结果包括表示验证成功的标识,图中表示为BlockHash。
在预提交阶段(PreCommit),每个节点会根据接收到的投票结果来判断第一区块共识成功或者失败,并将共识的结果共享给其他节点;
在提交阶段(Commit),如果所有节点达成共识,则将区块中的交易写入账本;若没有达成共识,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理。
在上述各实施例的基础上,作为一种可选实施例,第一区块还包括所述主节点对各个所述交易标识对应的交易的执行结果。
对所述第一区块进行验证投票,得到投票结果,包括:
执行所述第一区块中的每个所述交易标识对应的交易,若确定存在执行结果与主节点的执行结果不一致的交易,则获得验证失败的交易,得到第一投票结果;
若确定不存在执行结果与主节点的执行结果不一致的交易,则得到第二投票结果。
本申请的从节点在接收到第一区块后,会对第一区块涉及的交易进行执行,获得执行结果,之后用自身获得的执行结果与主节点获得的执行结果进行比较,如果不一致,则确定该交易验证失败,反之如果一致,则确定交易验证成功。
请参见图11,其示例性地示出了本申请实施例的主节点和从节点在区块共识过程的交互示意图,如图所示,该交互过程包括:
主节点从本地的交易池中打包交易,生成区块,将区块广播给区块链系统中的各个从节点;
对于任意一个接收到该待共识的区块的从节点而言,将区块中的所有交易逐个进行执行,获得每个交易的执行结果;
从节点根据自身获得执行结果,与主节点获取的执行结果进行比对,判断两者是否一致,若所有交易的执行结果均一致,则生成第二投票结果,第二投票结果用于表示区块中所有交易验证通过,具体可以用区块的哈希值进行表示,若存在至少一个交易的执行结果不一致,则生成第一投票结果,第一投票结果可以包括验证失败的交易的交易标识以及一个为空的哈希值。
当主节点汇集预设时长内接收到的各个从节点的投票结果,根据投票结果判断区块是否共识失败,具体的,若第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识成功,将所述第一区块中的交易标识对应的交易写入账本。
在判断共识失败时,则有两种方式:
方式1、第一投票结果的数量大于所述区块链中作恶节点的数量,则确定所述第一区块共识失败;
方式2、第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定区块共识失败。
当区块共识失败时,则确定每个验证失败的交易在所有第一投票结果中出现的次数,将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除,对于那些次数不大于作恶节点的数量的验证失败的交易则不作处理,在交易池清理后执行更换主节点的操作。
对于每个从节点而言,也需要汇集预设时长内接收到的各个从节点的投票结果,根据投票结果判断区块是否共识失败,具体的,若第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识成功,将所述第一区块中的交易标识对应的交易写入账本。
在判断共识失败时,则有两种方式:
方式1、第一投票结果的数量大于所述区块链中作恶节点的数量,则确定所述第一区块共识失败;
方式2、第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定区块共识失败。
当区块共识失败时,则确定每个验证失败的交易在所有第一投票结果中出现的次数,将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除,对于那些次数不大于作恶节点的数量的验证失败的交易则不作处理,在交易池清理后执行更换主节点的操作。
图12为本申请实施例提供的一种应用本申请实施例的区块共识方法的具体场景示意图,如图所示,该场景为公益捐赠监管场景,该场景下包括用户终端、公益平台服务器、区块链系统、公益监管平台服务器。
用户终端可以通过网络与公益平台服务器通信连接,本申请实施例的用户终端可以是任一想要进行捐赠或者查询捐赠信息的公益人士的终端。
本申请实施例对用户终端上运行的公益应用的类型不作具体限定,例如可以是需要用户下载安装的公益应用,也可以是云公益应用,还可以是小程序中的公益应用,用户终端在公益应用运行时,通过网络向公益平台服务器发起公益项目获取请求,公益平台服务器向用户终端返回可接受捐赠的公益项目,以由用户终端对公益项目进行展示,公益人士通过选定公益项目,发起捐赠,公益平台服务器在确定捐赠到账后,根据捐赠的相关信息(例如捐赠人、捐赠时间、捐赠金额等待)生成交易,之后将交易发送至区块链系统中的部分节点,部分节点将交易广播至区块链系统的其他节点,每个节点将接收到的交易先存储在本地的交易池中。
区块链上的各个节点需要对捐赠信息达成共识,这就需要各个节点记录达成共识的时间,主节点把自己的本地时间和捐赠信息打包得到区块,发给各个从节点,各个从节点需要验证主节点的打包时间是否无误,本申请实施例并不涉及从节点是怎么通过随机函数验证主节点的打包时间,但需要强调的是这个验证动作,本地时间本身是存在一定随机性的,因此这就可以导致不同节点的验证结果不一致。
从节点对于区块中的每个交易进行执行,若确定存在执行结果与主节点的执行结果不一致的交易,则获得验证失败的交易,得到第一投票结果,并且第一投票结果还包括所述第一区块中验证失败的交易的交易标识;若确定不存在执行结果与主节点的执行结果不一致的交易,则得到第二投票结果。
从节点将自身得到的投票结果广播给区块链系统中的其他节点,并接收其他节点发送的投票结果,每个节点都会在预设时间内接收多个投票结果,并基于得到的投票结果判断区块共识成功或者失败。具体地,
1)若所述多个投票结果中所述第一投票结果的数量大于所述区块链中作恶节点的数量,则确定区块共识失败;
2)若得所述多个投票结果中,所述第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定所区块共识失败;
3)若所述多个投票结果中,第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定区块共识成功;
若确定区块共识失败,则确定每个验证失败的交易在所有第一投票结果中出现的次数,将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除,各个节点执行更换主节点的操作。
若所述任一节点确定作为新的主节点,则将清理后的交易池中的交易打包为待共识的第二区块,将所述第二区块广播至所述区块链系统中的其他节点进行区块共识,进行多轮投票直至达到共识。
当达成共识时,区块链系统的各个节点将达成共识的区块涉及的交易写入账本。并且,该达成共识的区块会保持在区块链上,区块链系统将去达成共识的区块的区块标识信息反馈给捐赠公益平台,并且将区块标识信息以及该达成共识的区块中的交易(捐赠信息)反馈给公益监管平台服务器进行保存。
捐赠公益平台进一步将区块标识发送至用户终端,用户终端获得区块标识信息可查询上链的捐赠信息,具体地,用户终端通过网络与公益监管平台服务器通信连接,用户终端向公益监管平台服务器发送验证请求,验证请求中包括区块标识,公益监管平台根据区块标识,查询对应的捐赠信息并反馈给终端,以供公益人士查阅。
请参见图13,其示例性地示出了本申请实施例的区块同步方法的流程示意图,本申请实施例的区块同步方法可以应用于上述各实施例的节点,包括主节点和从节点,如图所示,该方法包括:
S301、从所述区块链系统中的至少一个其他节点获得待同步的第三区块;
S302、以不执行所述第三区块中的交易的验证方式,验证所述第三区块;
S303、若验证通过,则将所述第三区块中的交易同步至本地账本。
需要说明的是,当节点首次加入区块链系统或者重新加入区块链系统时,需要将区块链系统上已经共识过的区块同步至本地账本,以保证区块一致。但是对于存在随机函数的智能合约而言,如果重新执行交易,会出现因为执行结果不一致而导致无法同步的情况,因此本申请采用了基于不执行交易的方式对区块进行验证,防止区块在被其他节点达成一致的情况下,该需要同步的节点无法得到一致性的结果,而导致无法追赶上的问题。
在上述各实施例的基础上,作为一种可选实施例,本申请实施例所采用的不执行交易的验证方式包括验证所述第三区块的法定节点数证书(quorum certificate,QC)或者区块哈希。
当一个区块获得了区块链系统中大多数节点的认同时,该区块中可以携带QC证书,这样待进行同步的节点就可以根据区块中是否携带QC证书,判断是否验证通过,若携带QC证书,则验证QC证书,QC证书验证无误,确定验证通过,若没有携带QC证书,则直接确定验证不通过。
区块哈希,即计算整个区块的哈希值,因此并不涉及对交易进行执行,因此也不会收到随机函数的影响。
请参见图14,其示例性地示出了本申请另一个实施例的区块同步方法的流程示意图,如图所示,该流程包括:
首先节点从其他节点获取待同步的区块,本申请实施例对于提供待同步区块的其他节点的数量不作限定,可以是一个也可以是多个,节点对待同步的区块以验证QC或者验证区块哈希的方式,对区块进行验证,若验证通过,则将区块中的交易同步至本地账本,结束流程。
本申请实施例提供了一种区块共识装置,应用于区块链系统中的任一节点,所述任一节点为主节点或从节点,如图15所示,该区块共识装置可以包括:投票结果获取模块101以及交易清理模块102,其中,
投票结果获取模块101,用于在预设时长内获得多个投票结果,每个投票结果是由所述区块链系统中的一个从节点针对待共识的第一区块生成的验证结果;所述第一区块中包括至少一个交易的交易标识,所述投票结果用于表示所述第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;
交易清理模块102,用于若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理;
其中,所述交易池包括所述第一区块中的交易标识对应的交
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
作为一种可选的实施例,交易清理模块包括:
次数统计单元,用于确定每个验证失败的交易在所有第一投票结果中出现的次数;
交易清除单元,用于将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除。
作为一种可选的实施例,当所述任一节点为从节点时,区块共识装置包括:
区块接收模块,用于获得由所述主节点发送的所述第一区块;
验证投票模块,用于对所述第一区块进行验证投票,得到投票结果,将投票结果发送至所述区块链系统中的多个其他节点。
作为一种可选的实施例,区块共识装置还包括:
换主模块,用于若根据多个投票结果确定所述第一区块共识失败,进行更换主节点的操作。
作为一种可选的实施例,区块共识装置还包括:
区块打包模块,用于若所述任一节点确定作为新的主节点,则将清理后的交易池中的交易打包为待共识的第二区块;
区块广播模块,用于将所述第二区块广播至所述区块链系统中的其他节点进行区块共识。
作为一种可选的实施例,区块共识装置包括:
区块共识模块,用于若所述多个投票结果中所述第一投票结果的数量大于所述区块链中作恶节点的数量,则确定所述第一区块共识失败;或者
若得所述多个投票结果中,所述第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识失败;
其中,所述第二投票结果用于表示所述第一区块中不存在验证失败的交易。
作为一种可选的实施例,区块共识模块还用于:
若所述多个投票结果中,第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识成功,将所述第一区块中的交易标识对应的交易写入账本。
作为一种可选的实施例,第一区块还包括所述主节点对各个所述交易标识对应的交易的执行结果;
验证投票模块,具体用于:
执行所述第一区块中的每个所述交易标识对应的交易,若确定存在执行结果与主节点的执行结果不一致的交易,则获得验证失败的交易,得到第一投票结果;
若确定不存在执行结果与主节点的执行结果不一致的交易,则得到第二投票结果。
本申请实施例提供了一种区块同步装置,如图16所示,该区块同步装置应用于上述各实施例的节点,该装置可以包括:待同步区块获取模块201、验证模块202以及同步模块203,其中,
待同步区块获取模块201,用于从所述区块链系统中的至少一个其他节点获得待同步的第三区块;
验证模块202,用于以不执行所述第三区块中的交易的验证方式,验证所述第三区块;
同步模块203,用于若验证通过,则将所述第三区块中的交易同步至本地账本。
本申请实施例的区块同步装置可执行本申请实施例所提供的区块同步方法,其实现原理相类似,本申请各实施例的区块同步装置中的各模块所执行的动作是与本申请各实施例的区块同步方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
在上述各实施例的基础上,作为一种可选实施例,验证方式包括验证所述第三区块的法定节点数证书或者区块哈希。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现上述实施例的区块共识方法和区块同步方法的步骤,与相关技术相比可实现:通过获得多个投票结果,每个投票结果是由区块链系统中的一个从节点,针对待共识的第一区块生成的验证结果,第一区块中包括至少一个交易的交易标识,投票结果用于表示第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理,后续在换主时就不会对普遍验证失败的交易重新打包,从而推进共识的进度,提高共识效率。
在一个可选实施例中提供了一种电子设备,如图17所示,图17所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图17中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。通过获得多个投票结果,每个投票结果是由区块链系统中的一个从节点,针对待共识的第一区块生成的验证结果,第一区块中包括至少一个交易的交易标识,投票结果用于表示第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理,后续在换主时就不会对普遍验证失败的交易重新打包,从而推进共识的进度,提高共识效率。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。通过获得多个投票结果,每个投票结果是由区块链系统中的一个从节点,针对待共识的第一区块生成的验证结果,第一区块中包括至少一个交易的交易标识,投票结果用于表示第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理,后续在换主时就不会对普遍验证失败的交易重新打包,从而推进共识的进度,提高共识效率。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。

Claims (15)

1.一种区块共识方法,其特征在于,应用于区块链系统中的任一节点,所述任一节点为主节点或从节点,所述方法包括:
在预设时长内获得多个投票结果,每个投票结果是由所述区块链系统中的一个从节点针对待共识的第一区块生成的验证结果;所述第一区块中包括至少一个交易的交易标识,所述投票结果用于表示所述第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;
若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理;
其中,所述交易池包括所述第一区块中的交易标识对应的交易。
2.根据权利要求1所述的方法,其特征在于,所述根据所述多个投票结果中的各第一投票结果包括的验证失败的交易,对预设的本地交易池进行清理,包括:
确定每个验证失败的交易在所有第一投票结果中出现的次数;
将次数大于所述区块链中作恶节点的数量的验证失败的交易,从所述交易池中清除。
3.根据权利要求1所述的方法,其特征在于,当所述任一节点为从节点时,所述方法还包括:
获得由所述主节点发送的所述第一区块;
对所述第一区块进行验证投票,得到投票结果,将投票结果发送至所述区块链系统中的多个其他节点。
4.根据权利要求1或2所述的方法,其特征在于,所述若根据多个投票结果确定所述第一区块共识失败,之后还包括:
进行更换主节点的操作。
5.根据权利要求4所述的方法,其特征在于,当所述任一节点为从节点时,所述进行更换主节点的操作,之后还包括:
若所述任一节点确定作为新的主节点,则将清理后的交易池中的交易打包为待共识的第二区块;
将所述第二区块广播至所述区块链系统中的其他节点进行区块共识。
6.根据权利要求1所述的方法,其特征在于,所述根据多个投票结果确定所述第一区块共识失败,包括:
若所述多个投票结果中所述第一投票结果的数量大于所述区块链中作恶节点的数量,则确定所述第一区块共识失败;或者
若得所述多个投票结果中,所述第一投票结果的数量不大于所述区块链中作恶节点的数量,且第二投票结果的数量不大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识失败;
其中,所述第二投票结果用于表示所述第一区块中不存在验证失败的交易。
7.根据权利要求1所述的方法,其特征在于,所述在预设时长内获得投票结果,之后还包括:
若所述多个投票结果中,第二投票结果的数量大于所述区块链中作恶节点数量的两倍,则确定所述第一区块共识成功,将所述第一区块中的交易标识对应的交易写入账本。
8.根据权利要求3所述的方法,其特征在于,所述第一区块还包括所述主节点对各个所述交易标识对应的交易的执行结果;
所述对所述第一区块进行验证投票,得到投票结果,包括:
执行所述第一区块中的每个所述交易标识对应的交易,若确定存在执行结果与主节点的执行结果不一致的交易,则获得验证失败的交易,得到第一投票结果;
若确定不存在执行结果与主节点的执行结果不一致的交易,则得到第二投票结果。
9.一种区块同步方法,其特征在于,应用于执行如权利要求1-8任意一项所述方法的节点,所述方法包括:
从所述区块链系统中的至少一个其他节点获得待同步的第三区块;
以不执行所述第三区块中的交易的验证方式,验证所述第三区块;
若验证通过,则将所述第三区块中的交易同步至本地账本。
10.根据权利要求9所述的方法,其特征在于,所述验证方式包括验证所述第三区块的法定节点数证书或者区块哈希。
11.一种区块共识装置,其特征在于,应用于区块链系统中的任一节点,所述任一节点为主节点或从节点,所述装置包括:
投票结果获取模块,用于在预设时长内获得多个投票结果,每个投票结果是由所述区块链系统中的一个从节点针对待共识的第一区块生成的验证结果;所述第一区块中包括至少一个交易的交易标识,所述投票结果用于表示所述第一区块中是否存在验证失败的交易,当所述投票结果为表示第一区块中存在验证失败的交易的第一投票结果时,所述第一投票结果还包括所述第一区块中验证失败的交易的交易标识;
交易清理模块,用于若根据多个投票结果确定所述第一区块共识失败,则根据所述多个投票结果中各第一投票结果包括的验证失败的交易的交易标识,对预设的本地交易池进行清理;
其中,所述交易池包括所述第一区块中的交易标识对应的交易。
12.一种区块同步装置,其特征在于,应用于执行如权利要求1-8任意一项所述方法的节点,所述装置包括:
待同步区块获取模块,用于从所述区块链系统中的至少一个其他节点获得待同步的第三区块;
验证模块,用于以不执行所述第三区块中的交易的验证方式,验证所述第三区块;
同步模块,用于若验证通过,则将所述第三区块中的交易同步至本地账本。
13.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-10任一项所述方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-10任一项所述方法的步骤。
15.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-10任一项所述方法的步骤。
CN202210524604.0A 2022-05-13 2022-05-13 区块共识方法、同步方法、装置、电子设备及存储介质 Pending CN117097481A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210524604.0A CN117097481A (zh) 2022-05-13 2022-05-13 区块共识方法、同步方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210524604.0A CN117097481A (zh) 2022-05-13 2022-05-13 区块共识方法、同步方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117097481A true CN117097481A (zh) 2023-11-21

Family

ID=88768632

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210524604.0A Pending CN117097481A (zh) 2022-05-13 2022-05-13 区块共识方法、同步方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117097481A (zh)

Similar Documents

Publication Publication Date Title
CN107395353B (zh) 一种区块链共识方法及装置
CN112492006B (zh) 一种基于区块链的节点管理方法和装置
CN110009338B (zh) 基于区块链的记账方法及装置、电子设备
CN108769264B (zh) 一种区块链分域方法
US20230315891A1 (en) Transaction data processing method and apparatus, computer device and storage medium
CN112422341B (zh) 区块链网络的故障检测方法及相关设备
CN111192146B (zh) 区块链数据的订正方法及装置
CN110458709B (zh) 资源转移信息的传输方法和装置、存储介质、电子装置
CN111465951A (zh) 使用区块链的智能物流管理
CN112612856B (zh) 基于区块链的数据处理方法和装置
CN106650496B (zh) 一种数据处理方法及装置
CN112671908B (zh) 网络管理方法、装置、电子设备及可读存储介质
CN111899019A (zh) 一种黑名单多方交叉验证和共享的方法及系统
US20230275771A1 (en) Pre-execution of block chain transaction in parallel during block consensus
CN113570479B (zh) 一种房产交易数据的区块链传输方法、系统及存储介质
Innerbichler et al. Federated byzantine agreement to ensure trustworthiness of digital manufacturing platforms
CN111915301A (zh) 基于区块链的数据处理方法、装置、电子设备及可读介质
CN112381599A (zh) 一种基于区块链技术的共享充电宝租赁系统及方法
CN108200157A (zh) 主节点触发回退的日志同步方法及装置
CN111865983A (zh) 一种基于区块链的数据安全追溯方法
CN109729074B (zh) 一种音频数据的加密和对等存储方法及系统
CN117097481A (zh) 区块共识方法、同步方法、装置、电子设备及存储介质
CN112258184B (zh) 冻结区块链网络的方法、装置、电子设备及可读存储介质
CN117010889A (zh) 数据处理方法、装置及设备、介质、产品
CN111311263B (zh) 区块链节点本地安全记账方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination