本申请为2019年6月28日提交的申请号为201910577305.1,名为“一种跨链发送可认证消息的方法和装置”的发明专利申请的分案申请。
本说明书实施例涉及区块链技术领域,更具体地,涉及一种跨链发送可认证消息的方法和装置。
背景技术:
区块链技术也被称之为分布式账本技术,是一种去中心化的分布式数据库技术,其特点是去中心化、公开透明、不可篡改、可信任。区块链的每笔数据,都会广播到全网的区块链节点,每个全节点都有全量的、一致的数据。随着区块链技术的火热,出现了许多不同类型的链,应用在金融、健康医疗、供应链、资产管理和溯源等领域。然而大部分链上应用(加密货币或者智能合约)都无法跨越当前链的边界,不能与其他链协同合作实现价值的流通,从而限制了区块链的发挥空间。如何能让不同类型的链协同合作实现价值的流通成了探索的方向。目前已出现多种跨链技术,然而,每种跨链技术都有自己独特设计,应对的场景也各不相同,针对不同场景下的跨链,一条链可能需要接入多种跨链平台。
因此,需要一种更有效的跨链传递信息的方案。
技术实现要素:
本说明书实施例旨在提供一种更有效的跨链传递信息的方案,以解决现有技术中的不足。
为实现上述目的,本说明书一个方面提供一种跨链发送可认证消息的方法,所述跨链发送为从第一区块链的第一账户向其它区块链发送,所述第一区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第二区块链,所述方法由所述第一区块链执行,包括:
通过所述第一账户向第一区块链中存入经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;以及
将所述第一数据和第一位置信息提供给所述中继端,以用于将所述可认证消息提供给所述第二区块链中的所述第二账户,其中,所述第一位置信息指示第一数据在第一区块链中的位置。
在一个实施例中,通过所述第一账户向第一区块链中存入经共识的第一数据包括,通过由所述第一账户调用第一智能合约向第一区块链中存入所述第一数据,其中,所述第一账户在调用第一智能合约时向第一智能合约传入至少以下参数:第二区块链标识、第二账户及消息内容。
在一个实施例中,所述第一数据被标注有预定标志。
在一个实施例中,所述第一数据为收据,所述收据中包括在执行所述第一智能合约之后生成的日志,所述日志的数据字段为所述可认证消息。
在一个实施例中,所述日志被标注有预定主题,所述预定标志为所述预定主题。
在一个实施例中,所述预定标志为所述第一智能合约的账户标识。
在一个实施例中,所述第一层协议中还包括协议版本号字段和预留字段。
在一个实施例中,所述第二层协议中还包括类型字段,用于指示该可认证消息的使用场景类型。
在一个实施例中,所述类型为以下任一类型:消息类型、远程过程调用类型、发布/订阅类型。
在一个实施例中,所述第三层协议中还包括序号字段,用于在所述第一账户向所述第二账户多次发送可认证消息的情况中表示当前发送序号。
在一个实施例中,所述第一账户为第二智能合约的合约账户。
本说明书另一方面提供一种跨链中转可认证消息的方法,所述方法由中继端执行,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述方法由中继端执行,包括:
从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;以及
基于所述可认证消息中的第二区块链标识,将所述第一数据和所述第一位置信息发送给所述第二区块链。
在一个实施例中,所述第一数据被标注有预定标志,其中,从所述第一区块链获取所述第一数据和第一位置信息包括,基于所述预定标志从所述第一区块链获取所述第一数据和第一位置信息。
本说明书另一方面提供一种跨链接收可认证消息的方法,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述第二区块链中通过所述中继端同步有与至少一个其它区块链分别相关的至少一个第二数据,其中,所述至少一个其它区块链中包括第一区块链,所述方法由第二区块链执行,包括:
从所述中继端接收第一数据和第一位置信息,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述第一位置信息指示所述第一数据在所述第一区块链中的位置;
基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;以及
在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
在一个实施例中,所述第一数据为第一区块链的第一区块中的第一收据,所述第一位置信息包括第一区块的区块编号和第一收据在第一区块中的收据编号,所述与第一区块链相关的第二数据为第一区块链中的各个区块的区块头,其中,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证包括,基于所述第一收据、所述各个区块的区块头和第一区块中的与第一收据相关联的默克尔树路径,通过简单支付验证方法验证:所述第一收据来自于第一区块链中的第一区块,其中,所述默克尔树路径基于所述第一位置信息获取。
在一个实施例中,所述可认证消息位于所述第一收据中的第一日志中,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证还包括,基于所述第一日志的发送字段,验证所述第一账户为发送所述可认证消息的账户。
在一个实施例中,所述第二账户为第三智能合约的合约账户,向所述第二账户提供所述可认证消息包括,通过以所述可认证消息为传入参数调用第三智能合约,向第二账户提供所述可认证消息。
本说明书另一方面提供一种跨链中转可认证消息的方法,所述方法由中继端执行,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述中继端同步有与各个区块链分别相关的各个第二数据,所述方法包括:
从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;
基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;
在验证通过的情况中,对所述可认证消息进行数字签名;以及
基于所述可认证消息中的第二区块链标识,将所述可认证消息及其数字签名发送给所述第二区块链。
本说明书另一方面提供一种跨链接收可认证消息的方法,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第一区块链,所述第二区块链中预先存储有所述中继端的公钥,所述方法由第二区块链执行,包括:
从所述中继端接收可认证消息、及所述中继端对所述可认证消息的数字签名,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;
使用所述中继端的公钥对所述数字签名进行验证;以及
在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
本说明书另一方面提供一种跨链发送可认证消息的装置,所述跨链发送为从第一区块链的第一账户向其它区块链发送,所述第一区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第二区块链,所述装置部署在所述第一区块链,包括:
存入单元,配置为,通过所述第一账户向第一区块链中存入经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;以及
提供单元,配置为,将所述第一数据和第一位置信息提供给所述中继端,以用于将所述可认证消息提供给所述第二区块链中的所述第二账户,其中,所述第一位置信息指示第一数据在第一区块链中的位置。
在一个实施例中,所述存入单元还配置为,通过由所述第一账户调用第一智能合约向第一区块链中存入所述第一数据,其中,所述第一账户在调用第一智能合约时向第一智能合约传入至少以下参数:第二区块链标识、第二账户及消息内容。
本说明书另一方面提供一种跨链中转可认证消息的装置,所述装置部署在中继端,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述装置包括:
查找单元,配置为,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;以及
发送单元,配置为,基于所述可认证消息中的第二区块链标识,将所述第一数据和所述第一位置信息发送给所述第二区块链。
在一个实施例中,所述第一数据被标注有预定标志,其中,所述获取单元还配置为,基于所述预定标志从所述第一区块链获取所述第一数据和第一位置信息。
本说明书另一方面提供一种跨链接收可认证消息的装置,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述第二区块链中通过所述中继端同步有与至少一个其它区块链分别相关的至少一个第二数据,其中,所述至少一个其它区块链中包括第一区块链,所述装置部署在第二区块链,包括:
接收单元,配置为,从所述中继端接收第一数据和第一位置信息,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述第一位置信息指示所述第一数据在所述第一区块链中的位置;
获取单元,配置为,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
验证单元,配置为,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;以及
提供单元,配置为,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
在一个实施例中,所述第一数据为第一区块链的第一区块中的第一收据,所述第一位置信息包括第一区块的区块编号和第一收据在第一区块中的收据编号,所述与第一区块链相关的第二数据为第一区块链中的各个区块的区块头,其中,所述验证单元还配置为,基于所述第一收据、所述各个区块的区块头和第一区块中的与第一收据相关联的默克尔树路径,通过简单支付验证方法验证:所述第一收据来自于第一区块链中的第一区块,其中,所述默克尔树路径基于所述第一位置信息获取。
在一个实施例中,所述可认证消息位于所述第一收据中的第一日志中,所述验证单元还配置为,基于所述第一日志的发送字段,验证所述第一账户为发送所述可认证消息的账户。
在一个实施例中,所述第二账户为第三智能合约的合约账户,所述提供单元还配置为,通过以所述可认证消息为传入参数调用第三智能合约,向第二账户提供所述可认证消息。
本说明书另一方面提供一种跨链中转可认证消息的装置,所述装置部署在中继端,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述中继端同步有与各个区块链分别相关的各个第二数据,所述装置包括:
查找单元,配置为,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;
获取单元,配置为,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
验证单元,配置为,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;
签名单元,配置为,在验证通过的情况中,对所述可认证消息进行数字签名;以及
发送单元,配置为,基于所述可认证消息中的第二区块链标识,将所述可认证消息及其数字签名发送给所述第二区块链。
本说明书另一方面提供一种跨链接收可认证消息的装置,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第一区块链,所述第二区块链中预先存储有所述中继端的公钥,所述装置部署在第二区块链,包括:
接收单元,配置为,从所述中继端接收可认证消息、及所述中继端对所述可认证消息的数字签名,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;
验证单元,配置为,使用所述中继端的公钥对所述数字签名进行验证;以及
提供单元,配置为,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
根据本说明书实施例的跨链方案,设计一种可认证消息,使得区块链发出的消息可以被其他链认证:消息来自于哪条链,且由链上的哪个身份实体(账号/合约)发出。使得基于此可认证消息,允许进行跨链应用(合约)编程,使开发者更轻易地开发出各种跨链业务、应用。
附图说明
通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
图1示出根据本说明书实施例的跨链系统的示意图;
图2示出根据本说明书实施例的一种跨链发送可认证消息的方法流程图;
图3示出了在执行第一智能合约之后生成的日志的示意图;
图4示出根据本说明书实施例的预定协议栈的示意图;
图5示出了可认证消息的示意形式;
图6示出根据本说明书实施例的高适用性的协议栈的示意图;
图7示出根据本说明书实施例的一种跨链中转可认证消息的方法流程图;
图8示出根据本说明书实施例的一种跨链接收可认证消息的方法流程图;
图9示出根据本说明书实施例的一种跨链中转可认证消息的方法流程图;
图10示出根据本说明书实施例的一种跨链接收可认证消息的方法流程图;
图11示出根据本说明书实施例的一种跨链发送可认证消息的装置1100;
图12示出根据本说明书实施例的一种跨链中转可认证消息的装置1200;
图13示出根据本说明书实施例的一种跨链接收可认证消息的装置1300;
图14示出根据本说明书实施例的一种跨链中转可认证消息的装置1400;
图15示出根据本说明书实施例的一种跨链接收可认证消息的装置1500。
具体实施方式
下面将结合附图描述本说明书实施例。
图1示出根据本说明书实施例的跨链系统的示意图。如图1所示,所述跨链系统包括第一区块链11、中继端12和第二区块链13。第一区块链11中例如包括账户a,第二区块链13中例如包括账户b,所述账户a和账户b可以为用户账户,或者也可以为合约账户。当第一区块链中的账户a希望向第二区块链中的账户b发送信息时,其可通过可认证消息(am消息)的形式进行发送。该可认证消息被包括在账户a存入区块链的经共识的第一数据(数据1)中。第二区块链13中可包括例如多个简单支付验证(spv)节点,该节点本地预先获取有第一区块链11中的第二数据(数据2),数据2用于验证数据1。该spv节点可通过第一区块链11与第二区块链13之间的中继端12的中转获取第一数据(数据1)及其位置信息(位置1),并使用数据2对该数据1进行验证,并在验证通过之后将数据1中的am消息提供给账户b。从而账户b可基于该am消息进行业务处理。
可以理解,上述参考图1的描述只是示意性的,而不是用于限制本说明书实施例。例如,中继端在获取数据1之后,可根据预先获取的第一区块链中的数据2对数据1进行验证并数字签名,并发送给第二区块链,第二区块链可基于中继链的公钥验证数字签名,从而验证所述数据1。
下面具体描述上述过程。
图2示出根据本说明书实施例的一种跨链发送可认证消息的方法流程图,所述跨链发送为从第一区块链的第一账户向其它区块链发送,所述第一区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第二区块链,所述方法由所述第一区块链执行,包括:
步骤s202,通过所述第一账户向第一区块链中存入经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;以及
步骤s204,将所述第一数据和第一位置信息提供给所述中继端,以用于将所述可认证消息提供给所述第二区块链中的所述第二账户,其中,所述第一位置信息指示第一数据在第一区块链中的位置。
在本说明书实施例中,第一区块链和第二区块链可以为任意区块链,如比特币链、以太坊链等等,其通过具有统一格式的可认证消息传递信息,因此,本说明书实施例对于区块链的类型、具体的应用场景没有特别限定。所述中继端为连接在第一区块链和第二区块链之间的中间件,该中继端可以具有多种形式,例如,该中继端可以同为第一区块链和第二区块链中的节点,即,该中继端同时具有第一区块链和第二区块链中的账户;或者该中继端为与第一区块链和第二区块链都连接的中转装置,其不负责验证数据,仅用于中转数据;或者该中继端为可信节点,其在从第一区块链接收数据之后,对该数据进行验证,并在验证通过之后将数据发送给第二区块链;或者该中继端还可以为验证区块链,其在对从第一区块链接收的数据进行共识验证之后发送给第二区块链。
在步骤s202,通过所述第一账户向第一区块链中存入经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户。
其中,第一账户可以为用户账户,或者也可以为合约账户。所述第一数据可以为区块链中的交易、收据、状态树状态、智能合约存储器、关系型数据库等中的任一数据,这些数据都是经过各个节点的共识存入区块链中,因此其在各个节点是一致的,并且是可验证的。本领域技术人员已知,在区块链中可通过发送交易而在区块链中存入上述经共识的数据,在此不再详述该过程。
在一个实施例中,通过所述第一账户向第一区块链中存入经共识的第一数据包括,通过由所述第一账户调用第一智能合约向第一区块链中存入所述第一数据,其中,所述第一账户在调用第一智能合约时向第一智能合约传入至少以下参数:第二区块链标识、第二账户及消息内容。在一个实施例中,所述第一账户为第二智能合约的合约账户,其例如通过调用第一智能合约,而向第二区块链中的第三智能合约传递参数,以实现跨链调用第三智能合约的目的。第一智能合约为用于向第一区块链中存入第一数据以跨链传递可认证消息的特定智能合约,其例如可供用于发送信息的合约(即第二智能合约)调用,在调用时,需要至少传入接收链标识(即第二区块链标识)、接收账户标识(即第二账户)和消息内容。
第一智能合约在执行时,其例如包括存入函数“save()”,该存入函数的传入参数即为第一智能合约的传入参数,即第二区块链标识、第二账户及消息内容,另外,该存入函数从发出调用的第二智能合约获取其账户(即第一账户),将第一账户、预置的第一区块链的链标识以及在调用时传入的参数(即第二区块链标识、第二账户及消息内容)以预定格式(即预定协议栈)组合成可认证消息,并作为函数结果输出,从而使得该函数结果被存入相应的日志中。该日志被包括在与该次调用对应的交易的交易收据中,该交易收据通过第一区块链中的节点共识验证被存入第一区块链中的区块中。也就是说,在该实施例中,所述第一数据即为区块链中的收据,该收据中的特定日志中包括了所述可认证消息。在区块链的区块中,例如可通过第一智能合约的合约标识作为预定标志查找到该收据。在一个实施例中,所述日志中还设定特定主题(名称)作为预定标志,从而以用于后续对该收据和该日志的查找。可以理解,在第一数据为收据的情况中,需要对该第一数据标志预定标志,以用于后期的查找。然而,第一数据不限于为收据,例如,其可以为存入智能合约的存储器中的数据,可以为存入关系型数据库中的数据等等,在该情况中,将不需要标注有预定标志,而可以直接在特定数据库(或存储器)中获取该第一数据。
在通过第二智能合约对第一智能合约的调用从而执行第一智能合约之后,例如将生成如图3所示的日志,图3示出了在执行第一智能合约之后生成的日志的示意图。如图3所示,该日志(log)具有预定主题(topic),例如该主题可以预设为“am”,以用于指示该日志是用于对链外发送am消息的日志。在该日志中包括“to”字段,“from”字段和“data”字段。其中,“to”字段对应于被调用合约的账户,也即第一智能合约的账户,“from”字段对应于发起调用的合约的账户,也即第二智能合约的账户(即第一账户),“data”字段中即第二智能合约希望发出的可认证消息。
其中,所述可认证消息满足预定协议栈。图4示出根据本说明书实施例的预定协议栈的示意图。如图4所示,图中最下层为根据本说明书实施例的第一层协议,该第一层协议中包括发送区块链标识字段(s_c_id)、接收区块链标识字段(r_c_id)和第二层协议;图中中间层为第二层协议,该第二层协议中包括发送账户字段(s_a_id)、接收账户字段(r_a_id)和第三层协议;图中最上层为第三层协议,该第三层协议中包括消息内容字段。可以理解,发送账户应为发送区块链中的账户,接收账户应为接收区块链中的账户。
例如,如上文所述,所述可认证消息为从第一区块链中的第一账户发送给第二区块链中的第二账户的消息,假设第一区块链的链标识为id1,第一账户为id1,第二区块链的链标识为id2,第二账户为id2,则,图5示出了可认证消息的示意形式。如图5所示,根据图4所示的协议栈,第一层协议包括id1、id2和第二层协议,第二层协议包括id1、id2和第三层协议,第三层协议包括消息内容。
该协议栈基于可认证消息的传输过程设计,其中第一层协议对应于从第一区块链到第二区块链之间的传输,第二层协议对应于从第一账户到第二账户之间的传输,第三层协议对应于在传输到第二账户之后基于消息内容的具体业务处理过程。通过这样设计协议栈,可使得在传输可认证消息的过程中,通过从外至内分层读取该可认证消息,即,首先通过读取第一层协议中的id2,从而可将该可认证消息先传输到第二区块链,然后通过读取第二层协议中的id2,再将该可认证消息传输到第二账户,最后通过读取第三层协议中的消息内容并提供给第二账户,从而使得第二账户基于消息内容进行具体的业务处理。
在一个实施例中,第一层协议中还包括协议版本号字段和预留字段。以允许对该协议栈进行升级和扩展。其中,所述预留字段为空字段。
在一个实施例中,第三层协议中还包括类型字段,用于指示该可认证消息的使用场景类型。从而使得各个使用场景可叠加使用该协议栈。例如,针对不同的使用场景(即可认证消息中的不同的类型),所述消息内容字段中可对应于不同的内容、具有不同的格式等。所述类型为以下任一类型:消息类型、远程过程调用类型、发布/订阅类型,等等。
所述第三层协议中还包括序号字段,用于在所述第一账户向所述第二账户多次发送可认证消息的情况中表示当前发送序号。
所述协议版本号字段、预留字段、类型字段、序号字段等各自对应的字段值可类似地由第一账户在调用第一智能合约时作为输入参数传入第一智能合约,从而使得第一智能合约中的存入函数可基于这些输入参数输出包含这些字段值的可认证消息。
图6示出根据本说明书实施例的高适用性的协议栈的示意图。如图6所示,相比于图4所示的协议栈,该协议栈的第一层协议中还包括版本号字段和预留字段,该协议栈的第三层协议中还包括类型字段和序号字段。如上文所述,该协议栈可升级、可扩展,可用于多种场景类型,可进行多次通信,因此具有高适用性。
虽然上文中以第二智能合约调用第一智能合约为例描述了向第一区块链中存入经共识的收据的过程,本说明书实施例不限于此,例如,第一账户为用户账户,其可通过向其它任一账户发送交易,从而实现向区块链中存入第一数据的过程,该第一数据例如还可以为区块中的交易数据,例如,可在该交易的数据字段中预置预定标志,以标识该交易为用于跨链发送信息的交易,并且该交易的数据字段中包括上述可认证消息。从而,在第一账户发出该交易之后,该交易在共识验证之后被存入区块中。在后续过程中,可通过预定标志查找到该交易数据,并从该交易数据中获取可认证消息。
在步骤s204,将所述第一数据和第一位置信息提供给所述中继端,以用于将所述可认证消息提供给所述第二区块链中的所述第二账户,其中,所述第一位置信息指示第一数据在第一区块链中的位置。
如上文所述,在本说明书实施例中,可使用不同的中继端,根据中继端的不同的实现方式,可通过不同的方法将第一数据提供给中继端。例如,该中继端本身为第一区块链和第二区块链中的节点,从而中继端可从本地存储的数据(如区块、状态树)中获取所述第一数据,并同时获取第一位置数据,所述第一位置信息指示第一数据在区块链中的位置,例如,在第一数据为收据的情况中,所述第一位置信息包括收据所在区块编号、以及收据在该区块中的编号等。例如,该中继端为与第一区块链和第二区块链都连接的中转装置,从而,第一区块链的任一节点可根据中继端的请求从本地获取该第一数据及其位置信息,并将其发送给中继端。中继端在获取该第一数据及其位置信息之后,将根据其自身的形式的不同,执行不同的步骤,以用于将第一数据中的可认证消息提供给第二区块链中的第二账户,该过程将在下文详细描述。
图7示出根据本说明书实施例的一种跨链中转可认证消息的方法流程图,所述方法由中继端执行,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述方法包括:
步骤s702,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;以及
步骤s704,基于所述可认证消息中的第二区块链标识,将所述第一数据和所述第一位置信息发送给所述第二区块链。
在第一区块链中进行图2所示方法之后,在所述第一区块链中存入了上述经共识的第一数据,从而可执行该方法。
该方法由中继端执行,根据中继端的具体实现方式不同,中继端中执行的方法步骤也相应地不同,在该方法中,中继端为第一区块链与第二区块链之间的中转端,即,其不进行对数据的验证,仅用于数据的中转,并且不对数据的真实性、完整性负责。
在步骤s702,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置。
在一个实施例中,所述第一数据带有预定标志地被存入区块链中,该预定标志用于对该类用于跨链发送的数据的查找。例如,该预定标志为第一智能合约的账户,其它合约账户在希望跨链传送信息时调用该第一智能合约。在调用该第一智能合约之后,在相应的收据中将包括该第一智能合约的账户,从而通过基于该第一智能合约的账户可从区块中查找该收据作为第一数据,并可确定该收据所在的区块标识、该收据在该区块中的收据编号等一起作为第一位置信息。中继端例如可向任一节点订阅区块中具有第一智能合约的账户的收据,从而可从该节点接收所述第一数据和所述第一位置信息。如上文所述,在第一数据为特定数据的情况中,可在特定数据库或存储器中获取所述第一数据及其存储位置。
在步骤s704,基于所述可认证消息中的第二区块链标识,将所述第一数据和所述第一位置信息发送给所述第二区块链。
中继端在获取所述第一数据和第一位置信息之后,例如,该第一数据为上述调用第一智能合约的收据,中继端通过该第一智能合约账户或者日志的预定主题从该收据中找到特定日志,并从该特定日志的数据字段中获取可认证消息。基于所述预定协议栈,可确定该可认证消息中的“第二区块链标识”即为将要接收该可认证消息的链标识,从而可将该第一数据和第一位置信息发送给第二区块链。可以理解,该中继端可能连接了不止两个区块链,例如可能还连接了第三区块链、第四区块链等,因此,该中继端在获取该第一数据和第一位置信息之后,基于其中的第二区块链标识进行数据的发送,也即基于接收链标识对接收链的寻址过程。
图8示出根据本说明书实施例的一种跨链接收可认证消息的方法流程图,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述第二区块链中通过所述中继端同步有与至少一个其它区块链分别相关的至少一个第二数据,其中,所述至少一个其它区块链中包括第一区块链,所述方法由第二区块链执行,包括:
步骤s802,从所述中继端接收第一数据和第一位置信息,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述第一位置信息指示所述第一数据在所述第一区块链中的位置;
步骤s804,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
步骤s806,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;以及
步骤s808,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
图8所示方法与图7所示方法中的中继端相对应,在进行图7所示方法之后,可开始图8所示方法。在第二区块链中,例如在多个验证节点进行对可认证消息的验证,该验证节点中通过中继端同步有与其它各个区块链分别相关的各个第二数据,该第二数据用于进行对可认证消息的验证。根据具体的不同验证方式,所述验证节点各不相同,该第二数据也相应地不同,例如在通过简单支付验证(spv)方法进行验证的情况中,所述验证节点为spv节点,该第二数据为相应链中各个区块的区块头。
首先,在步骤s802,从所述中继端接收第一数据和第一位置信息,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述第一位置信息指示所述第一数据在所述第一区块链中的位置。
所述第一数据如上文所述,例如为通过中继端从第一区块链的区块中获取的具有预定标志的收据。中继端在从第一区块链中获取该收据及其位置之后即可中转给第二区块链,从而使得第二区块链中的各个节点获取该收据及其位置,从而使得第二区块链中的记账节点或验证节点等进行下述步骤s804-s808。
步骤s804,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据。
图4所示协议栈还可以用于分层认证过程,所述第一层协议包括发送链标识,因此可用于对发送链标识的认证过程。因此,首先可基于第一层协议中的发送链标识(即第一区块链标识),在本地存储的各个第二数据中获取与第一区块链对应的第二数据。由于该协议栈的分层设计,使得在进行该步骤的过程中,仅读取第一层协议的发送链标识字段即可,而不用读取第一层协议中包括的第二层协议的具体内容。
在步骤s806,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证。
在一个实施例中,所述第一数据为第一区块链的第一区块中的第一收据,所述第一位置信息包括第一区块的区块编号和第一收据在第一区块中的收据编号,所述与第一区块链相关的第二数据为第一区块链中的各个区块的区块头。其中,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证首先包括对可认证消息中第一层协议的发送链标识的验证。所述对发送链标识的验证包括,基于所述第一收据、各个区块的区块头和另外获取的第一区块中的与第一收据相关联的默克尔树路径,通过简单支付验证方法(spv验证方法)验证:所述第一收据来自于第一区块链中的第一区块,其中,所述默克尔树路径基于所述第一位置信息获取。该spv验证方法包括以下具体步骤:
计算该第一收据的收据哈希值;
根据上述默克尔树路径,计算该默克尔树的根哈希值;
将计算的根哈希值与第一区块的区块头中的收据树根哈希值进行比较,以确定该第一收据是否在第一区块中。
在一个实施例中,所述spv验证还可以包括,在确定第一收据在第一区块中之后,根据第一区块的所处位置,验证该区块的区块头是否包含在已知最长链中,以确定该第一区块是否经过共识。在一个实施例中,所述区块链标识与区块链中创世块的头哈希值相对应,所述spv验证还可以包括,通过第一区块的区块头中的头哈希值和父哈希值及各个区块的区块头,验证该区块链的创世块的头哈希值是否对应于第一区块链的链标识。
在一个实施例中,参考上文对图4的描述,所述第一收据通过由第二智能合约调用第一智能合约而自动生成的包括图4所示日志的收据,在该情况下,该第一收据可自身证明,可认证消息中的第一账户即为发送该消息的账户。
在一个实施例中,所述第一收据由用户账户(即第一账户)发送交易而存入区块链中,所述可认证消息由用户填入交易数据中,在生成第一收据之后,所述可认证消息位于所述第一收据中的第一日志中,在该情况中,所述验证还包括对可认证消息中第二层协议中的发送账户的验证,具体是,可基于所述第一日志的发送字段,验证所述第一账户为发送所述可认证消息的账户。
在步骤s808,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
在一个实施例中,如上文所述,第一区块链中的第二智能合约通过调用第一智能合约向第二区块链中的第三智能合约传递信息,以进行对第三智能合约的调用。在该情况中,第二账户即为第三智能合约的合约账户,该可认证消息中例如为第三智能合约传入参数。从而,向所述第二账户提供所述可认证消息包括,通过以所述可认证消息为传入参数调用第三智能合约,向第二账户提供所述可认证消息。第三智能合约在经调用之后,基于该可认证消息中的第三层协议执行具体的业务过程。可以理解,所述第二账户不限于为智能合约账户,例如,其也可以为用户账户,在该情况中,可通过区块链中常用方法(例如发送交易的方法)由验证节点向该用户账户提供所述可认证消息。
图9示出根据本说明书实施例的一种跨链中转可认证消息的方法流程图,所述方法由中继端执行,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述中继端同步有与各个区块链分别相关的各个第二数据,所述方法包括:
步骤s902,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;
步骤s904,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
步骤s906,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;
步骤s908,在验证通过的情况中,对所述可认证消息进行数字签名;以及
步骤s910,基于所述可认证消息中的第二区块链标识,将所述可认证消息及其数字签名发送给所述第二区块链。
在该方法中,中继端为可信节点,或者可以为验证区块链,其可在从第一区块链获取第一数据之后,在本地进行验证,并在验证通过之后进行数字签名,并发送给第二区块链,从而第二区块链可通过中继端的数字签名进行对第一数据的验证,从而简化了第二区块链的验证过程。该方法中的步骤s902和步骤s910可参考上文中对步骤s702和s704的描述,步骤s904和s906可参考上文中对步骤s804和s806的描述,在此不再赘述。
图10示出根据本说明书实施例的一种跨链接收可认证消息的方法流程图,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第一区块链,所述第二区块链中预先存储有所述中继端的公钥,所述方法由第二区块链执行,包括:
步骤s1002,从所述中继端接收可认证消息、及所述中继端对所述可认证消息的数字签名,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;
步骤s1004,使用所述中继端的公钥对所述数字签名进行验证;以及
步骤s1006,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
图10所示方法与图9所示方法中的中继端相对应,在进行图9所示方法之后,可开始图10所示方法。该方法可由第二区块链中任一节点或客户端执行,该节点(或客户端)本地只需要保存中继端的公钥,即可以进行对可认证消息的验证,因此,不需要如图8所示方案,从中继端接收第一数据,而仅需要接收可认证消息。其中,步骤s1006可参考上文对步骤s808的描述,在此不再赘述。
图11示出根据本说明书实施例的一种跨链发送可认证消息的装置1100,所述跨链发送为从第一区块链的第一账户向其它区块链发送,所述第一区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第二区块链,所述装置部署在所述第一区块链,包括:
存入单元111,配置为,通过所述第一账户向第一区块链中存入经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;以及
提供单元112,配置为,将所述第一数据和第一位置信息提供给所述中继端,以用于将所述可认证消息提供给所述第二区块链中的所述第二账户,其中,所述第一位置信息指示第一数据在第一区块链中的位置。
在一个实施例中,所述存入单元1101还配置为,通过由所述第一账户调用第一智能合约向第一区块链中存入所述第一数据,其中,所述第一账户在调用第一智能合约时向第一智能合约传入至少以下参数:第二区块链标识、第二账户及消息内容。
图12示出根据本说明书实施例的一种跨链中转可认证消息的装置1200,所述装置部署在中继端,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述装置包括:
获取单元121,配置为,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;以及
发送单元122,配置为,基于所述可认证消息中的第二区块链标识,将所述第一数据和所述第一位置信息发送给所述第二区块链。
在一个实施例中,所述第一数据被标注有预定标志,其中,所述获取单元还配置为,基于所述预定标志从所述第一区块链获取所述第一数据和第一位置信息。
图13示出根据本说明书实施例的一种跨链接收可认证消息的装置1300,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述第二区块链中通过所述中继端同步有与至少一个其它区块链分别相关的至少一个第二数据,其中,所述至少一个其它区块链中包括第一区块链,所述装置部署在第二区块链,包括:
接收单元131,配置为,从所述中继端接收第一数据和第一位置信息,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述第一位置信息指示所述第一数据在所述第一区块链中的位置;
获取单元132,配置为,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
验证单元133,配置为,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;以及
提供单元134,配置为,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
在一个实施例中,所述第一数据为第一区块链的第一区块中的第一收据,所述第一位置信息包括第一区块的区块编号和第一收据在第一区块中的收据编号,所述与第一区块链相关的第二数据为第一区块链中的各个区块的区块头,其中,所述验证单元133还配置为,基于所述第一收据、所述各个区块的区块头和第一区块中的与第一收据相关联的默克尔树路径,通过简单支付验证方法验证:所述第一收据来自于第一区块链中的第一区块,其中,所述默克尔树路径基于所述第一位置信息获取。
在一个实施例中,所述可认证消息位于所述第一收据中的第一日志中,所述验证单元133还配置为,基于所述第一日志的发送字段,验证所述第一账户为发送所述可认证消息的账户。
在一个实施例中,所述第二账户为第三智能合约的合约账户,所述提供单元134还配置为,通过以所述可认证消息为传入参数调用第三智能合约,向第二账户提供所述可认证消息。
图14示出根据本说明书实施例的一种跨链中转可认证消息的装置1400,所述装置部署在中继端,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述中继端同步有与各个区块链分别相关的各个第二数据,所述装置包括:
第一获取单元141,配置为,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;
第二获取单元142,配置为,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
验证单元143,配置为,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;
签名单元144,配置为,在验证通过的情况中,对所述可认证消息进行数字签名;以及
发送单元145,配置为,基于所述可认证消息中的第二区块链标识,将所述可认证消息及其数字签名发送给所述第二区块链。
图15示出根据本说明书实施例的一种跨链接收可认证消息的装置1500,所述跨链接收为由第二区块链的第二账户从其它区块链接收,所述第二区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第一区块链,所述第二区块链中预先存储有所述中继端的公钥,所述装置部署在第二区块链,包括:
接收单元151,配置为,从所述中继端接收可认证消息、及所述中继端对所述可认证消息的数字签名,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;
验证单元152,配置为,使用所述中继端的公钥对所述数字签名进行验证;以及
提供单元153,配置为,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
根据本说明书实施例的跨链方案抽象区块链互操作模型,设计一种可认证消息,使得区块链发出的消息可以被其他链认证:消息来自于哪条链,且由链上的哪个身份实体(账号/合约)发出。使得基于此可认证消息,允许进行跨链应用(合约)编程,使开发者更轻易地开发出各种跨链业务、应用,并且该可认证消息保留较高的扩展性,支持叠加协议栈,使各种跨链互操作技术、应用场景都能标准化,另外,该可认证消息可以被异构平台实现,使得区块链仅实现一种跨链适配升级,可以接入多种跨链平台、连接多条链。
需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执轨道,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执轨道的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1.一种跨链发送可认证消息的方法,所述方法由第一区块链执行,所述第一区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第二区块链,所述方法包括:
通过所述第一区块链的第一账户向第一区块链中存入经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;以及
将所述第一数据和第一位置信息提供给所述中继端,其中,所述第一位置信息指示第一数据在第一区块链中的位置。
2.根据权利要求1所述的方法,其中,通过所述第一区块链的第一账户向第一区块链中存入经共识的第一数据包括,通过由所述第一账户调用第一智能合约向第一区块链中存入所述第一数据,其中,所述第一账户在调用第一智能合约时向第一智能合约传入至少以下参数:第二区块链标识、第二账户及消息内容。
3.根据权利要求2所述的方法,其中,所述第一数据被标注有预定标志。
4.根据权利要求3所述的方法,其中,所述第一数据为收据,所述收据中包括在执行所述第一智能合约之后生成的日志,所述日志的数据字段为所述可认证消息。
5.根据权利要求4所述的方法,其中,所述日志被标注有预定主题,所述预定标志为所述预定主题。
6.根据权利要求4所述的方法,所述预定标志为所述第一智能合约的账户标识。
7.根据权利要求1所述的方法,其中,所述第一层协议中还包括协议版本号字段和预留字段。
8.根据权利要求1所述的方法,其中,所述第三层协议中还包括类型字段,用于指示该可认证消息的使用场景类型。
9.根据权利要求8所述的方法,其中,所述类型为以下任一类型:消息类型、远程过程调用类型、发布/订阅类型。
10.根据权利要求1所述的方法,其中,所述第三层协议中还包括序号字段,用于在所述第一账户向所述第二账户多次发送可认证消息的情况中表示当前发送序号。
11.根据权利要求1所述的方法,其中,所述第一账户为第二智能合约的合约账户。
12.一种跨链中转可认证消息的方法,所述方法由中继端执行,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述方法包括:
从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;以及
基于所述可认证消息中的第二区块链标识,将所述第一数据和所述第一位置信息发送给所述第二区块链。
13.根据权利要求12所述的方法,其中,所述第一数据被标注有预定标志,其中,从所述第一区块链获取所述第一数据和第一位置信息包括,基于所述预定标志从所述第一区块链获取所述第一数据和第一位置信息。
14.一种跨链接收可认证消息的方法,所述方法由第二区块链执行,所述第二区块链与中继端连接,所述第二区块链中通过所述中继端同步有与至少一个其它区块链分别相关的至少一个第二数据,其中,所述至少一个其它区块链中包括第一区块链,所述方法包括:
从所述中继端接收第一数据和第一位置信息,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述第一位置信息指示所述第一数据在所述第一区块链中的位置;
基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;以及
在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
15.根据权利要求14所述的方法,其中,所述第一数据为第一区块链的第一区块中的第一收据,所述第一位置信息包括第一区块的区块编号和第一收据在第一区块中的收据编号,所述与第一区块链相关的第二数据为第一区块链中的各个区块的区块头,其中,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证包括,基于所述第一收据、所述各个区块的区块头和第一区块中的与第一收据相关联的默克尔树路径,通过简单支付验证方法验证:所述第一收据来自于第一区块链中的第一区块,其中,所述默克尔树路径基于所述第一位置信息获取。
16.根据权利要求15所述的方法,所述可认证消息位于所述第一收据中的第一日志中,其中,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证还包括,基于所述第一日志的发送字段,验证所述第一账户为发送所述可认证消息的账户。
17.根据权利要求14所述的方法,其中,所述第二账户为第三智能合约的合约账户,向所述第二账户提供所述可认证消息包括,通过以所述可认证消息为传入参数调用第三智能合约,向第二账户提供所述可认证消息。
18.一种跨链中转可认证消息的方法,所述方法由中继端执行,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述中继端同步有与各个区块链分别相关的各个第二数据,所述方法包括:
从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;
基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;
在验证通过的情况中,对所述可认证消息进行数字签名;以及
基于所述可认证消息中的第二区块链标识,将所述可认证消息及其数字签名发送给所述第二区块链。
19.一种跨链接收可认证消息的方法,所述方法由第二区块链执行,所述第二区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第一区块链,所述第二区块链中预先存储有所述中继端的公钥,所述方法包括:
从所述中继端接收可认证消息、及所述中继端对所述可认证消息的数字签名,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;
使用所述中继端的公钥对所述数字签名进行验证;以及
在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
20.一种跨链发送可认证消息的装置,所述装置部署于第一区块链,所述第一区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第二区块链,所述装置包括:
存入单元,配置为,通过所述第一区块链的第一账户向第一区块链中存入经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;以及
提供单元,配置为,将所述第一数据和第一位置信息提供给所述中继端,其中,所述第一位置信息指示第一数据在第一区块链中的位置。
21.根据权利要求20所述的装置,其中,所述存入单元还配置为,通过由所述第一账户调用第一智能合约向第一区块链中存入所述第一数据,其中,所述第一账户在调用第一智能合约时向第一智能合约传入至少以下参数:第二区块链标识、第二账户及消息内容。
22.根据权利要求21所述的装置,其中,所述第一数据被标注有预定标志。
23.根据权利要求22所述的装置,其中,所述第一数据为收据,所述收据中包括在执行所述第一智能合约之后生成的日志,所述日志的数据字段为所述可认证消息。
24.根据权利要求23所述的装置,其中,所述日志被标注有预定主题,所述预定标志为所述预定主题。
25.根据权利要求23所述的装置,所述预定标志为所述第一智能合约的账户标识。
26.根据权利要求20所述的装置,其中,所述第一层协议中还包括协议版本号字段和预留字段。
27.根据权利要求20所述的装置,其中,所述第二层协议中还包括类型字段,用于指示该可认证消息的使用场景类型。
28.根据权利要求27所述的装置,其中,所述类型为以下任一类型:消息类型、远程过程调用类型、发布/订阅类型。
29.根据权利要求20所述的装置,其中,所述第三层协议中还包括序号字段,用于在所述第一账户向所述第二账户多次发送可认证消息的情况中表示当前发送序号。
30.根据权利要求20所述的装置,其中,所述第一账户为第二智能合约的合约账户。
31.一种跨链中转可认证消息的装置,所述装置部署在中继端,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述装置包括:
获取单元,配置为,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;以及
发送单元,配置为,基于所述可认证消息中的第二区块链标识,将所述第一数据和所述第一位置信息发送给所述第二区块链。
32.根据权利要求31所述的装置,其中,所述第一数据被标注有预定标志,其中,所述获取单元还配置为,基于所述预定标志从所述第一区块链获取所述第一数据和第一位置信息。
33.一种跨链接收可认证消息的装置,所述装置部署于第二区块链,所述第二区块链与中继端连接,所述第二区块链中通过所述中继端同步有与至少一个其它区块链分别相关的至少一个第二数据,其中,所述至少一个其它区块链中包括第一区块链,所述装置包括:
接收单元,配置为,从所述中继端接收第一数据和第一位置信息,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述第一位置信息指示所述第一数据在所述第一区块链中的位置;
获取单元,配置为,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
验证单元,配置为,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;以及
提供单元,配置为,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
34.根据权利要求33所述的装置,其中,所述第一数据为第一区块链的第一区块中的第一收据,所述第一位置信息包括第一区块的区块编号和第一收据在第一区块中的收据编号,所述与第一区块链相关的第二数据为第一区块链中的各个区块的区块头,其中,所述验证单元还配置为,基于所述第一收据、所述各个区块的区块头和第一区块中的与第一收据相关联的默克尔树路径,通过简单支付验证方法验证:所述第一收据来自于第一区块链中的第一区块,其中,所述默克尔树路径基于所述第一位置信息获取。
35.根据权利要求34所述的装置,所述可认证消息位于所述第一收据中的第一日志中,其中,所述验证单元还配置为,基于所述第一日志的发送字段,验证所述第一账户为发送所述可认证消息的账户。
36.根据权利要求33所述的装置,其中,所述第二账户为第三智能合约的合约账户,所述提供单元还配置为,通过以所述可认证消息为传入参数调用第三智能合约,向第二账户提供所述可认证消息。
37.一种跨链中转可认证消息的装置,所述装置部署在中继端,所述中继端与至少两个区块链连接,所述至少两个区块链中包括第一区块链和第二区块链,其中,所述第一区块链中预存有经共识的第一数据,其中,所述第一数据中包括可认证消息,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户,所述中继端同步有与各个区块链分别相关的各个第二数据,所述装置包括:
第一获取单元,配置为,从所述第一区块链获取所述第一数据和第一位置信息,所述第一位置信息指示第一数据在第一区块链中的位置;
第二获取单元,配置为,基于所述可认证消息中的第一区块链标识,获取与所述第一区块链相关的第二数据;
验证单元,配置为,基于所述第一数据、与所述第一区块链相关的第二数据以及所述第一位置信息,对所述可认证消息进行验证;
签名单元,配置为,在验证通过的情况中,对所述可认证消息进行数字签名;以及
发送单元,配置为,基于所述可认证消息中的第二区块链标识,将所述可认证消息及其数字签名发送给所述第二区块链。
38.一种跨链接收可认证消息的装置,所述装置部署于第二区块链,所述第二区块链与中继端连接,所述中继端还与至少一个其它区块链连接,所述至少一个其它区块链中包括第一区块链,所述第二区块链中预先存储有所述中继端的公钥,所述装置包括:
接收单元,配置为,从所述中继端接收可认证消息、及所述中继端对所述可认证消息的数字签名,所述可认证消息满足预定协议栈,所述预定协议栈包括由外向内的第一至第三层协议,其中,第一层协议包括发送区块链标识字段、接收区块链标识字段和第二层协议,第二层协议包括发送账户字段、接收账户字段和第三层协议,第三层协议包括消息内容字段,其中,发送区块链标识、发送账户、接收区块链标识、接收账户字段分别对应于以下字段值:第一区块链标识、第一账户、第二区块链标识、第二账户;
验证单元,配置为,使用所述中继端的公钥对所述数字签名进行验证;以及
提供单元,配置为,在验证通过之后,基于所述可认证消息中的第二账户,向所述第二账户提供所述可认证消息。
39.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-19中任一项的所述的方法。
40.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-19中任一项所述的方法。
技术总结