具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明一实施例提供的区块链事件通知方法流程图。如图1所示,所述方法包括:
步骤101、区块链系统任一节点接收外部系统发送的交易信息;其中,所述区块链系统包括预设数量的节点。
所述外部系统用于指代区块链系统以外的主体,比如应用服务器等。外部系统可以以系统的形式存在,也可以是独立的设备。所述区块链系统包括预设数量的多个区块链节点(简称节点)。
所述外部系统可以订阅区块链系统的事件通知,具体可以通过发送交易信息的方式实现。交易信息与事件通知可以是一对一的关系,即发送一次交易信息,则获取一次事件通知;交易信息与事件通知也可以是一对多的关系,即发送一次交易信息,可以获取多次事件通知,比如交易信息的内容为请求按照一定的时间间隔发送需求的某个数据。
由于区块链系统可能存储有多个对应于不同业务的区块链,因此,所述交易信息可以包含区块链ID,以明确要获取的事件通知对应于哪个区块链ID的业务。
要进行事件通知,区块链系统首先接收外部系统发送的交易信息。所述外部系统可以向区块链系统中的任一节点发送所述交易信息。
步骤102、各个所述节点根据所述交易信息得到共识后的交易执行结果。
所述区块链系统的任一节点接收到所述外部系统发送的交易信息后,区块链系统的各个节点通过预设的共识算法(如拜占庭共识算法)对所述交易信息进行共识处理。在共识后(达成共识、共识通过),所述区块链系统的各个节点通过调用智能合约对所述交易信息进行处理,对处理结果共识通过后得到交易执行结果。
得到交易执行结果的过程可以为:先由当前出块节点(出块人、提案人)根据交易信息把交易利用智能合约中执行一遍,生成一个交易执行结果。然后提案人把交易信息和交易结果打包成区块,发给其他节点。其他节点收到后,也根据交易信息把交易利用智能合约中执行一遍,生成交易执行结果。各节点对比交易结果是否相同,相同后再投票。如果有超过预设比例(如2/3)的节点投同意票,则共识完成,生成最终的交易执行结果,即大多数节点认可的交易执行结果。
步骤103、所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统;其中,所述事件通知节点为当前出块节点。
得到交易执行结果后,所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统;其中,所述事件通知节点为当前出块节点。也即,由一个节点实施事件通知工作。具体地,由当前出块节点发送所述交易执行结果至所述外部系统。在区块链系统中,对应于某个时刻,只有一个出块节点,比如,当前记账的节点为当前出块节点。所谓出块节点即指最先生成新区块或更新区块的节点。具体地,出块节点的选举规则可以利用已有的方法,此处不做具体限定。
本发明实施例通过在接收到外部系统发送的交易信息、经过共识得到交易执行结果后,由区块链系统的当前出块节点发送交易执行结果至外部系统,通知机制依赖于区块链系统中的各个节点,即使部分节点异常,也不会影响通知服务,因此事件通知服务具有高可用能力,且无需考虑多活部署、去单点的问题;同时,只需当前出块节点向外部系统发送交易执行结果,无需区块链系统的所有节点均发送,节省了外部节点与区块链系统的网络带宽,降低了网络负载。
进一步地,基于上述实施例,所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统,包括:所述区块链系统的事件通知节点根据所述外部系统预先注册的第一地址信息和/或所述交易信息中包含的第二地址信息发送所述交易执行结果至所述外部系统。
所述区块链系统的事件通知节点需要根据外部系统指定的地址信息发送所述交易执行结果至所述外部系统。外部系统订阅区块链系统的事件通知服务需要指定事件通知的地址(例如:url信息),本发明实施例支持两种指定方式:
(1)提供接口:区块链系统的每个节点提供设置事件通知的接口地址,外部系统发送设置事件通知地址命令,各节点通过共识算法达成一致,各节点各自保存该信息。
(2)交易字段扩展:交易可以带有通知地址,区块链节点交易执行完成后,根据交易中的通知地址进行通知。
地址注销:针对“提供接口”的注册方式,支持地址注销功能。
由于有上述两种地址注册方式,如果外部系统提供了接口地址(第一地址信息),发送的交易信息中未包含通知地址(第二地址信息),则根据注册的接口地址发送交易执行结果;如果外部系统未提供接口地址,发送的交易信息中包含通知地址,则根据通知地址发送交易执行结果;如果外部系统提供了接口地址,且发送的交易信息中包含通知地址,则根据接口地址和通知地址发送交易执行结果,即将交易执行结果分别发送至接口地址和通知地址。
在上述实施例的基础上,本发明实施例通过根据外部系统预先注册的第一地址信息和/或交易信息中包含的第二地址信息发送交易执行结果至外部系统,提高了事件通知地址设置的灵活性。
进一步地,基于上述实施例,在所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统之后,所述方法还包括:所述事件通知节点接收所述外部系统发送的交易反馈信息;其中所述交易反馈信息包括所述交易执行结果以及私钥签名信息。
外部系统接收到所述区块链系统的事件通知节点发送的所述交易执行结果之后,生成相应的交易反馈信息,所述交易反馈信息包括所述交易执行结果以及私钥签名信息,并将所述交易反馈信息发送给事件通知节点,以告知区块链系统外部系统收到了相应的交易执行结果。
因此,在所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统之后,所述事件通知节点接收所述外部系统发送的交易反馈信息;其中所述交易反馈信息包括所述交易执行结果以及私钥签名信息。在上述实施例的基础上,本发明实施例通过在发送交易执行结果至外部系统之后,接收外部系统发送的交易反馈信息,使得区块链系统获知外部系统对于交易执行结果的接收情况,提高了事件通知服务的可靠性;并且,通过对交易反馈信息进行签名,防止了恶意外部系统发送错误信息,同时也提高了数据传输过程的安全性。
进一步地,基于上述实施例,所述区块链系统的各个节点存储有所述外部系统的公钥;所述方法还包括:各个所述节点对所述交易信息及所述交易执行结果共识后,将所述交易信息及所述交易执行结果存储到本地存储的区块链的区块上;所述事件通知节点接收所述交易反馈信息后,利用所述公钥对所述私钥签名信息进行验签,验签通过后,所述区块链系统的各个所述节点对所述交易反馈信息进行共识后,所述事件通知节点将所述交易反馈信息存储到本地存储的所述区块链的区块上,并建立所述交易反馈信息与所述交易信息及所述交易执行结果的关联;其他所述节点进行对本地存储的所述区块链的区块进行同步更新。
各个节点接收到交易信息后,对交易信息进行共识后,各个所述节点将所述交易信息记录到本地存储的区块链的区块中;并且,在经过共识得到交易执行结果之后,各个所述节点将所述交易执行结果记录到本地存储的区块链的区块中,以使得各节点的区块链中的信息同步。交易信息及所述交易执行结果记录到区块中可以同时进行也可以分别进行,可以记录到一个区块上,也可以分别记录到不同区块上。
所述区块链系统的各个节点存储有所述外部系统的公钥,所述公钥用于对所述私钥签名信息进行验签,验签即使用私钥加密、公钥解密,用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改。验签通过则表明外部系统的身份无误。
所述事件通知节点接收所述交易反馈信息后,利用所述公钥对所述私钥签名信息进行验签,验签通过后则发起共识,区块链系统上的各节点均将自己记录的交易执行结果和交易反馈信息中的交易执行结果进行比对,并进行验签,若比对、验签按预设比例通过则达成共识。
共识通过后,所述事件通知节点将所述交易反馈信息存储到区块上,并建立所述交易反馈信息与所述交易信息及所述交易执行结果的关联。各节点同步存储相应信息。所述事件通知节点将所述交易反馈信息存储到区块上,并建立所述交易信息及所述交易执行结果的关联的方法可以通过设定交易ID实现,比如,在存储交易信息及所述交易执行结果时,均设置交易ID的信息;在存储交易反馈信息时也设置相应的交易ID的信息,由此可以根据交易ID实现交易反馈信息、交易信息及交易执行结果的关联。另外,还可以通过在存储交易反馈信息的时候,存储交易信息和/或交易执行结果所在的块号及块内偏移信息,由此实现关联。
在上述实施例的基础上,本发明实施例通过将交易反馈信息存储到区块上,并建立交易反馈信息与交易信息及交易执行结果的关联,便利了交易数据的查询。
进一步地,基于上述实施例,在所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统之后,所述区块链系统的各节点开启超时检测,若某个节点根据预设的超时检测规则判定超时后,仍未接收到所述交易反馈信息,则所述区块链系统根据预设的选举规则选举节点再次发送所述交易执行结果至所述外部系统。
在所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统之后,所述区块链系统的各节点开启超时检测,超时检测的目的在于判断是否在规定的时间内接收到外部系统的交易反馈信息。事件通知节点可以是最先接收到交易反馈信息,其他节点可以是在共识阶段接收到交易反馈信息。具体地,判定是否在规定的时间内接收到外部系统的交易反馈信息,即是否超时的判定可以采用预设的超时检测规则实现。
若根据预设的超时检测规则判定超时后,仍未接收到所述交易反馈信息,则根据预设的选举规则选举节点再次向外部系统发送所述交易执行结果,以避免外部系统因为宕机、断电等故障未及时接收到交易执行结果,从而提高了事件通知服务的可靠性。
在上述实施例的基础上,本发明实施例通过在若根据预设的超时检测规则判定超时后,仍未接收到交易反馈信息,则根据预设的选举规则选举节点再次发送交易执行结果,提高了事件通知服务的可靠性。
进一步地,基于上述实施例,所述预设的超时检测规则为:若当前出块的最高块号与所述交易执行结果存储的块号之差大于预设块数则判定超时;或,若发送所述交易执行结果的时间距当前的时间间隔大于预设时间间隔则判定超时。
由于区块链系统可以服务于多个外部系统,对于一个外部系统也可能多次发送交易信息,请求事件服务。因此,对于每次交易,区块链系统均会将相关的交易信息存储到区块中,并根据新区块的生成规则在需要生成新区块的时候生成新区块。其中,一个区块可以包含多个交易的交易信息。
外部系统是在接收到区块链系统发送的交易执行结果后,向区块链系统反馈交易反馈信息。如果区块链系统长时间接收不到交易反馈信息,可以认为外部系统未正确接收到交易执行结果。在发送交易执行结果至接收交易反馈信息期间,区块可能也在逐渐生成和增加。因此,预设的超时检测规则可以为:若当前出块的最高块号与所述交易执行结果存储的块号之差大于预设块数则判定超时。其中,区块的块号是逐步递增的。
另外,预设的超时检测规则还可以直接通过时间间隔来判断是否超时,即若发送所述交易执行结果的时间距当前的时间间隔大于预设时间间隔则判定超时。
在上述实施例的基础上,本发明实施例通过根据块数的增加量或时间间隔设定超时检测规则,提高了超时检测的灵活性。
进一步地,基于上述实施例,所述根据预设的选举规则选举节点再次发送所述交易执行结果,包括:选举当前最高块的出块节点再次发送所述交易执行结果。
区块链系统可以根据自身设定的规则选举出块节点及轮换。在根据预设的超时检测规则判定超时后,仍未接收到所述交易反馈信息,则根据预设的选举规则选举节点再次发送所述交易执行结果至所述外部系统。其中选举节点的预设的选举规则可以是选举当前最高块的出块节点作为再次发送所述交易执行结果的节点。当前最高块即指块号最大的区块。最高块的出块节点也即当前出块节点。
在上述实施例的基础上,本发明实施例通过选举当前最高块的出块节点再次发送交易执行结果,保持了发送交易执行结果选举规则的一致性。
图2是本发明另一实施例提供的区块链事件通知方法流程图。如图2所示,所述方法包括:
1)外部系统订阅某chainID(区块链ID)的事件信息,并设置通知地址url1以及签名公钥。
2)外部系统发送交易tx1至区块链系统,并带有通知地址url2以及签名公钥。
3)区块链系统进行共识,共识完成后落块。此时出块人(提案人)为vp1。
4)vp1根据通知地址管理模块提供的地址信息(url1、url2)进行消息推送。
5)各节点记录tx1的完成时间,并开启超时检测。
6)外部系统接收到vp1的通知信息后,对通知信息进行签名sign1,返回至vp1。
7)vp1验证签名正确性,将sign1构造成反馈交易,进行区块链共识。
8)其他节点将自己记录的交易结果进行变换、验签,确定该交易有效性。
9)反馈交易正确则进行共识,同时将反馈结果、交易ID、交易所在块号、块内偏移等信息进行绑定、保存。
其中,超时检测的流程具体举例如下:
1)每个节点记录交易完成时间。(例如:tx1在第5区块记录,第5块的出块时间为tx1)
2)每个节点记录当前完成的最高块号。(例如当前完成第10块出块,出块时间为tx2)
3)检测该交易是否在设定时间内没有接受到反馈交易。如果(tx2–tx1)>设定阈值,则认为该交易接收反馈交易超时,由最高块对应的出块人重新发送该交易的事件通知至外部节点。
本发明实施例提供的区块链事件通知方法具有如下优点:
1)事件通知服务具有高可用能力。通知机制依赖于区块链各个节点,即使部分节点异常,也不会影响通知服务。无需考虑防单点故障、服务多活等高可用策略。
2)降低外部节点与区块链系统的网络负载、节省带宽。无需区块链所有节点都向外部系统发送结果信息,只需要当前块的提案人发起结果通知,节省网络带宽、降低网络负载。
3)事件通知过程可溯源、追踪、防抵赖、防篡改。外部系统对执行结果进行签名,保证其接收到该消息,同时反馈信息将记录在区块链上,防抵赖、防篡改。
4)防止通知消息丢失。无论外部系统宕机、异常断电、网络通信异常,区块链节点都将重新发送未被“通知链”记录的事件通知消息,直到反馈交易共识落块。
本发明实施例提供一种区块链系统,包括预设数量的节点,其特征在于,所述预设数量的节点包括事件通知节点和其他节点,所述事件通知节点为当前出块节点,其中:所述预设数量的节点中任一所述节点接收外部系统发送的交易信息后,各个所述节点根据所述交易信息得到共识后的交易执行结果;然后,所述事件通知节点发送所述交易执行结果至所述外部系统。
本发明实施例通过在接收到外部系统发送的交易信息、经过共识得到交易执行结果后,由区块链系统的当前出块节点发送交易执行结果至外部系统,通知机制依赖于区块链系统中的各个节点,即使部分节点异常,也不会影响通知服务,因此事件通知服务具有高可用能力,且无需考虑多活部署、去单点的问题;同时,只需当前出块节点向外部系统发送交易执行结果,无需区块链系统的所有节点均发送,节省了外部节点与区块链系统的网络带宽,降低了网络负载。
图3是本发明一实施例提供的区块链系统的模块构成示意图。如图3所示,所述区块链系统包括通知地址管理模块和“通知链”管理模块,各模块功能如下:
1)通知地址管理模块
地址注册:外部系统需要指定事件通知的地址(例如:url信息),本发明实施例支持两种指定方式:
提供接口:区块链系统的每个节点提供设置事件通知的接口,外部系统发送设置事件通知地址命令,各节点通过共识算法达成一致,各节点各自保存该信息。同时保存对反馈签名进行验签的公钥信息。
交易字段扩展:交易可以带有通知地址,区块链节点交易执行完成后,根据交易中的通知地址进行通知。同时保存对反馈签名进行验签的公钥信息。
地址注销:针对“提供接口”的注册方式,支持地址注销功能。
2)“通知链”管理模块
反馈记录:外部系统接收到事件通知后,返回带有签名的反馈。该反馈将记录在区块链的“通知链”上,“通知链”可以是存储交易相关信息的区块的集合。该链将反馈结果、交易ID、交易所在块号、块内偏移等信息进行关联后存储。
反馈查询:支持以交易ID或交易位置信息(块号、偏移)等维度查询反馈结果。
超时检测:每个交易执行完成后记录“完成时间”,每个区块执行完成记录“出块时间”,如果“出块时间”-“完成时间”>设定阈值,则由当前块的出块人重新发送交易通知信息。
通知发送:将交易执行结果发送给外部系统。
本发明实施例提供的系统是用于上述方法的,具体功能可参照上述方法流程,此处不再赘述。
图4是本发明一实施例提供的电子设备的实体结构示意图。如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行如下方法:区块链系统任一节点接收外部系统发送的交易信息;其中,所述区块链系统包括预设数量的节点;各个所述节点根据所述交易信息得到共识后的交易执行结果;所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统;其中,所述事件通知节点为当前出块节点。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:区块链系统任一节点接收外部系统发送的交易信息;其中,所述区块链系统包括预设数量的节点;各个所述节点根据所述交易信息得到共识后的交易执行结果;所述区块链系统的事件通知节点发送所述交易执行结果至所述外部系统;其中,所述事件通知节点为当前出块节点。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。