发明内容
针对现有技术中的问题,本申请提供一种预言机数据处理方法及中心化预言机模块,能够有效提高预言机数据处理过程的效率及可靠性,进而能够有效提高自区块链外部获取第三方数据的效率、可靠性及真实性。
为解决上述技术问题,本申请提供以下技术方案:
第一方面,本申请提供一种预言机数据处理方法,包括:
在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据;
将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据;
基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链。
进一步地,在所述基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理之前,还包括:
检测当前各个所述目标预言机节点是否均已发送所述目标外部数据;
若当前各个所述目标预言机节点均已发送所述目标外部数据,或者,若当前未发送所述目标外部数据的目标预言机节点均已处于超时状态,则自本地获取所述目标数据源对应的聚合策略。
进一步地,所述聚合策略包括:数据采纳规则和聚合算法;
相对应的,所述基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,包括:
判断各个所述目标预言机节点各自发送的所述目标外部数据是否符合所述数据采纳规则,若是,则基于所述数据采纳规则自各个所述目标外部数据中选取多个待聚合数据;
基于所述聚合算法对各个所述待聚合数据进行聚合处理。
进一步地,所述判断各个所述目标预言机节点各自发送的所述目标外部数据是否符合所述数据采纳规则,若是,则基于所述数据采纳规则自各个所述目标外部数据中选取多个待聚合数据,包括:
判断各个所述目标预言机节点各自发送的所述目标外部数据中,数据相同的所述目标外部数据的总数是否大于或等于所述数据采纳规则指定的相同数据总数阈值,若是,则将数据相同的各个所述目标外部数据均选定为待聚合数据。
进一步地,所述在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据,包括:
若监听到区块链当前产生预言机事件,则将该预言机事件存储至预言机系统内部;
自所述预言机事件中解析得到所述区块链外部的目标数据源的唯一标识;
根据所述目标数据源的唯一标识判断所述目标数据源是否已在本地注册,若是,则生成所述预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据。
进一步地,所述生成所述预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据,包括:
自所述预言机事件中提取用于向所述目标数据源请求目标外部数据的目标变量;
基于预设的标准协议格式,将所述目标变量转化为对应的标准协议,其中,所述标准协议用于存储所述目标变量中的各个字段名称、字段类型和字段说明之间的对应关系;
将所述标准协议进行压缩处理,以得到所述预言机事件对应的预言机数据。
进一步地,还包括:
接收数据源注册请求,其中,该数据源注册请求包括所述区块链外部的数据源的唯一标识;
根据所述数据源的唯一标识将该数据源注册至所述预言机系统本地,并获取该数据源对应的聚合策略,将该数据源的聚合策略存储至所述预言机系统本地。
进一步地,所述将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据,包括:
查找已在所述预言机系统注册且当前处于可用状态的各个预言机节点,并将已在所述预言机系统注册且当前处于可用状态的各个预言机节点均确定为当前的目标预言机节点;
将所述预言机数据分别发送至各个所述目标预言机节点,以使各个所述目标预言机节点分别根据所述预言机数据分别自所述目标数据源获取所述目标外部数据;
其中,所述根据所述预言机数据分别自所述目标数据源获取所述目标外部数据,包括:
对所述预言机数据进行解析以得到所述目标数据源的唯一标识及所述目标外部数据的唯一标识,根据该目标数据源的唯一标识访问所述目标数据源,并自所述目标外部数据的唯一标识自所述目标数据源中提取包含有所述目标外部数据的结果集;
对所述结果集进行加密及签名处理,以得到对应的签名信息;
将所述结果集和所述签名信息发送至所述预言机系统内部。
进一步地,在所述将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点之前,还包括:
接收预言机节点注册请求,其中,该预言机节点注册请求中包含有服务设备的唯一标识;
根据所述服务设备的唯一标识,将该服务设备注册在所述预言机系统本地,以将该服务设备确定为所述预言机节点,并将已注册的预言机节点设置在本地网络可连通的任一位置处。
第二方面,本申请提供一种中心化预言机模块,包括:
数据获取模块,用于在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据;
数据分发模块,用于将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据;
数据聚合模块,用于基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链。
第三方面,本申请提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的预言机数据处理方法。
第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的预言机数据处理方法。
由上述技术方案可知,本申请提供的一种预言机数据处理方法及中心化预言机模块,方法包括:在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据;将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据;基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链,通过在预言机系统内部提取预言机事件中的预言机数据,并对各个所述预言机节点各自发送的所述目标外部数据进行聚合处理,能够有效实现中心化地自区块链中提取预言机数据及进行外部数据聚合处理,能够有效提高自区块链中提取预言机数据及进行外部数据聚合处理等预言机数据处理过程的效率,进而能够有效提高自区块链外部获取第三方数据的效率,提高区块链的运行稳定性及数据处理的及时性;通过将所述预言机数据发送至所述预言机系统外部的各个预言机节点以实现第三方数据的获取,能够有效实现去中心化地自区块链外部多次获取第三方数据后聚合,能够有效提高预言机数据处理过程的可靠性,进而能够有效提高自区块链外部获取第三方数据的可靠性及真实性;同时,通过采用预存储在所述预言机系统内部的所述目标数据源对应的聚合策略对外部数据进行聚合处理,能够进一步提高预言机数据处理过程的可靠性,以进一步提高自区块链外部获取第三方数据的可靠性及真实性。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请公开的预言机数据处理方法和装置可用于区块链技术领域,也可用于除区块链技术领域之外的任意领域,本申请公开的预言机数据处理方法和装置的应用领域不做限定。
区块链技术可以定义为一场社会革命,它的出现近乎重新定义了现有市场条件下的人、组织之间的协作关系。现有的区块链体系中,最核心的创新点之一便在于智能合约。智能合约可以在没有信任第三方的前提下进行价值的可信转移,因此无论是对于类似于以太坊、比特币这类去中心化程度极高的公链网络还是对于类似Fabric等体系下的联盟链下的联盟自治体系的网络而言,链上所传递的信息均可以保证其真实性以及不可篡改性。
智能合约实际是只是一段用户可自定义的程序,这段程序里可以按照用户的业务细节来进行定义,当区块链上的节点安装智能合约后便可以实现智能合约的相关逻辑。由于通过智能合约的操作都是在链上完成,而链上的数据对于当前链的所有用户来说都是可见的且受信任的(联盟链是对于当前加入联盟链中的有相应权限的所有节点可见,而公链则是对于所有人可见),因此智能合约所执行的逻辑及数据也是受信任的。
预言机解决了区块链外部世界的阻抗性不匹配的问题,预言机扩展了区块链可获取信息的范围,可以查找和验证真实世界的数据,并以加密的方式将信息提交给智能合约,预言机就像是区块链世界中的一个第三方数据代理商。
目前现有的预言机技术方案包括:
1)中心化预言机系统方案。中心化预言机系统是指预言机系统属于一个中心化系统,即获取信息的数据通道全都需要通过这个中心化预言机系统来获取外部数据源的数据。
2)去中心化的预言机系统方案。去中心化的预言机系统分布在不同网络节点之中,在进行数据获取与聚合时需要从不同节点中进行,这也意味着需要全网的预言机节点达成统一的聚合结果。
然而,中心化预言机系统的通病就是可靠性差,且反馈的节点都是通过单一信息获得,一旦系统本身作恶或收到其他恶意攻击都可能导致预言机系统所传导给区块链的数据出现不可靠的情况,这种不可靠的系统设计对于区块链本身的技术本质是背道而驰的。
而现有的去中心化的预言机的设计方案是将预言机分布在网络中的各个不同节点来进行调用,虽然这种方式可以提高整个预言机体系的可靠性,但由于最终需要将各个预言机所获得的第三方数据源的结果集进行聚合,随着预言机节点的数量越多,该聚合效率则可能相应的越低。
基于此,针对现有的通过预言机技术获取区块链外部的第三方数据的预言机数据处理方式,均存在无法同时满足预言机数据处理可靠性及效率要求的问题,本申请实施例提供一种预言机数据处理方法,在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据;将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据;基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链,通过在预言机系统内部提取预言机事件中的预言机数据,并对各个所述预言机节点各自发送的所述目标外部数据进行聚合处理,能够有效实现中心化地自区块链中提取预言机数据及进行外部数据聚合处理,能够有效提高自区块链中提取预言机数据及进行外部数据聚合处理等预言机数据处理过程的效率,进而能够有效提高自区块链外部获取第三方数据的效率,提高区块链的运行稳定性及数据处理的及时性;通过将所述预言机数据发送至所述预言机系统外部的各个预言机节点以实现第三方数据的获取,能够有效实现去中心化地自区块链外部多次获取第三方数据后聚合,能够有效提高预言机数据处理过程的可靠性,进而能够有效提高自区块链外部获取第三方数据的可靠性及真实性;同时,通过采用预存储在所述预言机系统内部的所述目标数据源对应的聚合策略对外部数据进行聚合处理,能够进一步提高预言机数据处理过程的可靠性,以进一步提高自区块链外部获取第三方数据的可靠性及真实性。
在本申请的一个或多个实施例中,预言机是一种可以使得智能合约具备获取外部数据的能力的系统,预言机系统已提前部署运行,且预言机系统的链chain模块已与链上某节点进行关联,即chain模块可以通过链节点来对节点上所部署的智能合约发起调用请求。
在本申请的一个或多个实施例中,预言机节点是指:预言机系统需要获取外部数据源的能力,而这样的能力需要用一种相对独立的系统来实现。这类系统的主要能力是实现分布式的运行,即可以这类系统所部署的节点分布在各个不同的公司或企业或其他公网可访问的服务器中。已部署的预言机节点可通过预言机系统发送的指令来调用外部数据源并获得相应的返回数据。
基于上述内容,本申请还提供一种用于实现本申请一个或多个实施例中提供的预言机数据处理方法的中心化预言机模块,该中心化预言机模块的具体实现可以为一服务器,在一种具体举例中,参见图1,所述中心化预言机模块可以设置在一中心化的预言机系统内部;该中心化预言机模块与所述预言机系统之外的各个预言机节点之间分别依次通信连接;各个预言机节点举例包含有预言机节点A、预言机节点B至预言机节点N等,且N为大于2的正整数。各个所述预言机节点分别与第三方数据源(本申请实施例中提及的数据源或目标数据源)之间通信连接;第三方数据源举例包含有数据源A和数据源B,且数据源A和数据源B分别包含有多个接口举例为接口API1、接口API2和接口API3;且所述中心化预言机模块可以连接并对应至少一个区块链,每个区块链均包含有多个企业对应的区块链节点,举例为节点1、节点2至节点N,N为大于2的正整数。
另外,用户可以通过其持有的客户端设备向区块链发送具有外部数据获取需求的区块链数据处理请求,以使中心化预言机模块自所述区块链数据处理请求中获取所述外部数据获取需求对应的目标数据源。
可以理解的是,所述客户端设备可以包括智能手机、平板电子设备、网络机顶盒、便携式计算机、个人数字助理(PDA)、车载设备、智能穿戴设备等任何能够装载应用的移动设备。其中,所述智能穿戴设备可以包括智能眼镜、智能手表、智能手环等。
上述的移动终端可以具有通信模块(即通信单元),可以与远程的目标区块链进行通信连接,实现与所述目标区块链的数据传输。
具体通过下述各个实施例及应用实例分别进行详细说明。
为了解决现有的通过预言机技术获取区块链外部的第三方数据的预言机数据处理方式,均存在无法同时满足预言机数据处理可靠性及效率要求的问题,本申请提供一种预言机数据处理方法的实施例,参见图2,基于中心化预言机模块执行的所述预言机数据处理方法具体包含有如下内容:
步骤100:在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据。
可以理解的是,预言机系统的中心化预言机模块部署在某个中心服务器,而多个去中心化的模块则部署在可连通的不同网络地址的服务器。
在步骤100中,预言机系统的中心化预言机模块通过监听链上的预言机事件的交易来获得用户所需要委托调用的外部数据源的请求,这种请求在本发明中可定义为预言机事件。这里的用户可以是区块链上层的应用系统的实际操作用户,也可以是与区块链接口对接的应用系统的程序,还可以是智能合约本身。
步骤200:将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据。
在步骤200中,去中心化的预言机节点可接收符合标准协议数据结构定义的yaml、json格式的文档,然后按照标准文档进行解析并执行文档所描述的数据源对应的API的url、method、参数类型等进行组装然后像第三方数据源发起调用。
步骤300:基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链。
在步骤300中,聚合策略在数据源注册于中心化预言机模块时所确定的,比如注册该数据源的某API时采用的是“共识聚合策略”。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过在预言机系统内部提取预言机事件中的预言机数据,并对各个所述预言机节点各自发送的所述目标外部数据进行聚合处理,能够有效实现中心化地自区块链中提取预言机数据及进行外部数据聚合处理,能够有效提高自区块链中提取预言机数据及进行外部数据聚合处理等预言机数据处理过程的效率,进而能够有效提高自区块链外部获取第三方数据的效率,提高区块链的运行稳定性及数据处理的及时性;通过将所述预言机数据发送至所述预言机系统外部的各个预言机节点以实现第三方数据的获取,能够有效实现去中心化地自区块链外部多次获取第三方数据后聚合,能够有效提高预言机数据处理过程的可靠性,进而能够有效提高自区块链外部获取第三方数据的可靠性及真实性;同时,通过采用预存储在所述预言机系统内部的所述目标数据源对应的聚合策略对外部数据进行聚合处理,能够进一步提高预言机数据处理过程的可靠性,以进一步提高自区块链外部获取第三方数据的可靠性及真实性。
为了进一步提高对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理的可靠性及有效性,在本申请提供的预言机数据处理方法的一个实施例,参见图3,所述预言机数据处理方法的步骤200和步骤300之间还具体包含有如下内容:
步骤001:检测当前各个所述目标预言机节点是否均已发送所述目标外部数据。
步骤002:若当前各个所述目标预言机节点均已发送所述目标外部数据,或者,若当前未发送所述目标外部数据的目标预言机节点均已处于超时状态,则自本地获取所述目标数据源对应的聚合策略。
举例来说,中心化的预言机系统模块分别在不同时间段内接收到来自去中心化的预言机节点的返回数据,当收到所有预言机节点的返回数据时(这里还包含了有超时情况的预言机节点,如预言机节点A、B、C、D,其中ABD都正常返回,此时中心化预言机系统的接收数据集的模块一直等待,直到C出现超时后才进入下一步),开始对所有的结果集进行聚合处理。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过若当前各个所述目标预言机节点均已发送所述目标外部数据,或者,若当前未发送所述目标外部数据的目标预言机节点均已处于超时状态,则自本地获取所述目标数据源对应的聚合策略,能够有效提高对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理的可靠性及有效性,并能够在保证聚合处理的可靠性及有效性的基础上,有效提高聚合处理的效率,进而能够进一步提高预言机数据处理的可靠性及效率。
为了进一步提高目标外部数据进行聚合处理的可靠性及准确性,在本申请提供的预言机数据处理方法的一个实施例,所述聚合策略包括:数据采纳规则和聚合算法;参见图4,所述预言机数据处理方法的步骤300具体包含有如下内容:
步骤310:判断各个所述目标预言机节点各自发送的所述目标外部数据是否符合所述数据采纳规则,若是,则执行步骤320;若否,则继续等待预设时间后再次执行步骤310的判断过程。
步骤320:基于所述数据采纳规则自各个所述目标外部数据中选取多个待聚合数据;
步骤330:基于所述聚合算法对各个所述待聚合数据进行聚合处理。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过采用数据采纳规则和聚合算法对目标外部数据进行聚合处理,能够进一步提高目标外部数据进行聚合处理的可靠性及准确性,能够进一步提高预言机数据处理的可靠性及有效性,进而能够有效提高后续发送至区块链的聚合结果的数据真实性及可靠性。
为了提高判断目标外部数据是否符合所述数据采纳规则的可靠性,在本申请提供的预言机数据处理方法的一个实施例,参见图5,所述预言机数据处理方法的步骤310具体包含有如下内容:
步骤311:判断各个所述目标预言机节点各自发送的所述目标外部数据中,数据相同的所述目标外部数据的总数是否大于或等于所述数据采纳规则指定的相同数据总数阈值;若是,则执行步骤320;
参见图5,所述步骤320具体包含有如下内容:
步骤321:将数据相同的各个所述目标外部数据均选定为待聚合数据。
举例来说,聚合策略在数据源注册于本发明所描述的中心化预言机模块时所确定的,比如注册该数据源的某API时采用的是共识聚合策略,那么就是说指超过1/2的相同返回数据集的数据结果才被认为是正确的,其他与这个结果不一致的值均不会被采纳。因此这里的众多去中心化预言机节点所聚合而成的结果集可以被认为是一个可信的数据集,只要作恶的节点不超过整体预言机节点数量的1/2便可以使得链上获得的外部数据源的数据为可信的正确的值。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过采用相同数据总数阈值相同数据总数阈值判断各个所述目标预言机节点各自发送的所述目标外部数据是否符合所述数据采纳规则,能够有效提高判断目标外部数据是否符合所述数据采纳规则的可靠性,能够进一步提高预言机数据处理的可靠性,进而能够进一步提高后续发送至区块链的聚合结果的数据真实性及可靠性。
为了提高生成所述预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据的安全性及有效性,在本申请提供的预言机数据处理方法的一个实施例,参见图6,所述预言机数据处理方法的步骤100具体包含有如下内容:
步骤110:若监听到区块链当前产生预言机事件,则将该预言机事件存储至预言机系统内部。
步骤120:自所述预言机事件中解析得到所述区块链外部的目标数据源的唯一标识。
步骤130:根据所述目标数据源的唯一标识判断所述目标数据源是否已在本地注册,若是,则生成所述预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据。
举例来说,预言机系统的中心化预言机模块在监听到的链上交易中的预言机事件后将其存储在中心化系统的数据库中,之后中心化系统的相关处理模块将预言机事件进行处理并从该预言机事件中解析出用户所需要调用的第三方数据源。这里解析出的需要调用的第三方数据源需要为当前中心化系统所能支持的数据源。若是中心化系统不支持的数据源,则返回相应的错误信息。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过检测数据源是否已在本地注册,能够有效提高生成所述预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据的安全性及有效性,并进一步提高预言机数据处理过程的可靠性、安全性及有效性。
为了提高各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据的数据规范化程度,在本申请提供的预言机数据处理方法的一个实施例,参见图7,所述预言机数据处理方法的步骤130具体包含有如下内容:
步骤131:自所述预言机事件中提取用于向所述目标数据源请求目标外部数据的目标变量。
步骤132:基于预设的标准协议格式,将所述目标变量转化为对应的标准协议,其中,所述标准协议用于存储所述目标变量中的各个字段名称、字段类型和字段说明之间的对应关系。
步骤133:将所述标准协议进行压缩处理,以得到所述预言机事件对应的预言机数据。
举例来说,预言机系统的中心化预言机模块按照预设的标准协议格式模板将用户传入的变量按照去中心化的预言机节点所能解析的文档格式进行填充,将{{变量名}}的内容用预言机事件中所定义的相关字段来进行填充,填充完成后的内容是一个完整版的可被去中心化预言机节点调用的标准协议。且去中心化预言机模块可以接受来自标准协议所定义的文档。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过基于预设的标准协议格式,将所述目标变量转化为对应的标准协议,能够有效提高各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据的数据规范化程度,进而能够进一步提高预言机数据处理过程的效率及可靠性。
为了提高判断所述目标数据源是否已在本地注册的有效性及可靠性,在本申请提供的预言机数据处理方法的一个实施例,参见图8,所述预言机数据处理方法中的步骤100之前或者各个步骤执行之时或之后均可以具体包含有如下内容:
步骤011:接收数据源注册请求,其中,该数据源注册请求包括所述区块链外部的数据源的唯一标识。
步骤012:根据所述数据源的唯一标识将该数据源注册至所述预言机系统本地,并获取该数据源对应的聚合策略,将该数据源的聚合策略存储至所述预言机系统本地。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过预先注册数据源并存储其对应的聚合策略,能够有效提高判断所述目标数据源是否已在本地注册的有效性及可靠性,并能够为后续对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理提供准确且有效的数据基础,以进一步提高预言机数据处理过程的可靠性、有效性及真实性。
为了提高将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点的可靠性及有效性,在本申请提供的预言机数据处理方法的一个实施例,参见图9,所述预言机数据处理方法的步骤200具体包含有如下内容:
步骤210:查找已在所述预言机系统注册且当前处于可用状态的各个预言机节点,并将已在所述预言机系统注册且当前处于可用状态的各个预言机节点均确定为当前的目标预言机节点;
步骤220:将所述预言机数据分别发送至各个所述目标预言机节点,以使各个所述目标预言机节点分别根据所述预言机数据分别自所述目标数据源获取所述目标外部数据。
其中,所述根据所述预言机数据分别自所述目标数据源获取所述目标外部数据,包括:
1)对所述预言机数据进行解析以得到所述目标数据源的唯一标识及所述目标外部数据的唯一标识,根据该目标数据源的唯一标识访问所述目标数据源,并自所述目标外部数据的唯一标识自所述目标数据源中提取包含有所述目标外部数据的结果集;
2)对所述结果集进行加密及签名处理,以得到对应的签名信息;
3)将所述结果集和所述签名信息发送至所述预言机系统内部。
举例来说,由中心化预言机模块发送给所有去中心化的预言机节点的调用请求中,所有的去中心化预言机节点通过标准协议的规则向第三方数据源发起调用后获得相应的外部数据源的返回结果集,这些结果集将被去中心化的预言机节点进行加密和签名处理以确保数据结果集的可追溯性,之后签名信息及原始数据一同返回给中心化的预言机系统。由于预言机节点可以分布在各个组织机构、网络节点等位置,而其主要能力是去获取外部数据源的数据并将结果集返回给中心化预言机系统。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过查找已在所述预言机系统注册且当前处于可用状态的各个预言机节点,能够有效提高将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点的可靠性及有效性,以进一步提高预言机数据处理过程的可靠性、有效性及真实性。
为了进一步提高将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点的效率及可靠性,在本申请提供的预言机数据处理方法的一个实施例,参见图10,所述预言机数据处理方法的步骤200之前或者任意步骤执行之时、之前或之后均可以具体包含有如下内容:
步骤021:接收预言机节点注册请求,其中,该预言机节点注册请求中包含有服务设备的唯一标识。
步骤022:根据所述服务设备的唯一标识,将该服务设备注册在所述预言机系统本地,以将该服务设备确定为所述预言机节点,并将已注册的预言机节点设置在本地网络可连通的任一位置处。
举例来说,去中心化的预言机节点需要在中心化的预言机系统中进行注册,这些注册的预言机节点可以分布在被中心化预言机模块网络可连通的任何位置,且理论上预言机节点可以无限增长。
从上述描述可知,本申请实施例提供的预言机数据处理方法,通过预先将该服务设备注册在所述预言机系统本地,以将该服务设备确定为所述预言机节点,并将已注册的预言机节点设置在本地网络可连通的任一位置处,能够进一步提高将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点的效率及可靠性,以进一步提高预言机数据处理过程的可靠性及效率。
从软件层面来说,为了解决现有的通过预言机技术获取区块链外部的第三方数据的预言机数据处理方式,均存在无法同时满足预言机数据处理可靠性及效率要求的问题,本申请提供一种用于执行所述预言机数据处理方法中全部或部分内容的中心化预言机模块的实施例,参见图11,所述中心化预言机模块具体包含有如下内容:
数据获取模块10,用于在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据;
数据分发模块20,用于将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据;
数据聚合模块30,用于基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链。
本申请提供的中心化预言机模块的实施例具体可以用于执行上述实施例中的预言机数据处理方法的实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
从上述描述可知,本申请实施例提供的中心化预言机模块,通过在预言机系统内部提取预言机事件中的预言机数据,并对各个所述预言机节点各自发送的所述目标外部数据进行聚合处理,能够有效实现中心化地自区块链中提取预言机数据及进行外部数据聚合处理,能够有效提高自区块链中提取预言机数据及进行外部数据聚合处理等预言机数据处理过程的效率,进而能够有效提高自区块链外部获取第三方数据的效率,提高区块链的运行稳定性及数据处理的及时性;通过将所述预言机数据发送至所述预言机系统外部的各个预言机节点以实现第三方数据的获取,能够有效实现去中心化地自区块链外部多次获取第三方数据后聚合,能够有效提高预言机数据处理过程的可靠性,进而能够有效提高自区块链外部获取第三方数据的可靠性及真实性;同时,通过采用预存储在所述预言机系统内部的所述目标数据源对应的聚合策略对外部数据进行聚合处理,能够进一步提高预言机数据处理过程的可靠性,以进一步提高自区块链外部获取第三方数据的可靠性及真实性。
为了进一步说明本方案,本申请应用实例涉及与联盟链或公链进行对接的预言机系统需要对外部数据进行调用的预言机节点系统的设计方案,设计一套结合中心化的优点与去中心化可靠性的预言机系统的技术方案,具体体现为一种预言机数据处理方法;用于解决智能合约可通过预言机系统获取外部数据源的数据,本申请应用实例所解决的问题是将预言机系统拆分成两个部分,其中一部分是中心化的模块,这个中心化预言机模块主要用于处理获取链上对于外部数据的需求,而后通过去中心化的节点获取外部数据源的数据并在中心化的预言机系统模块进行聚合并最终将数据返回链上。
具体来说,本申请应用实例提供的预言机数据处理方法具体包含有如下内容:
步骤1:预言机系统的中心化预言机模块部署在某个中心服务器,而多个去中心化的模块则部署在可连通的不同网络地址的服务器。
步骤2:预言机系统的中心化预言机模块通过监听链上的预言机事件的交易来获得用户所需要委托调用的外部数据源的请求,这种请求在本申请应用实例中可定义为预言机事件。这里的用户可以是区块链上层的应用系统的实际操作用户,也可以是与区块链接口对接的应用系统的程序,还可以是智能合约本身。
步骤3:预言机系统的中心化预言机模块在监听到的链上交易中的预言机事件后将其存储在中心化系统的数据库中,之后中心化系统的相关处理模块将预言机事件进行处理并从该预言机事件中解析出用户所需要调用的第三方数据源。这里解析出的需要调用的第三方数据源需要为当前中心化系统所能支持的数据源。若是中心化系统不支持的数据源,则返回相应的错误信息。
步骤4:本申请应用实例中的预言机系统的中心化预言机模块按照以下模板将用户传入的变量按照去中心化的预言机节点所能解析的文档格式进行填充,将{{变量名}}的内容用预言机事件中所定义的相关字段来进行填充,填充完成后的内容是一个完整版的可被去中心化预言机节点调用的标准协议。具体协议内容可在后续步骤查看。
步骤5:本申请应用实例中的去中心化预言机模块可以接受来自标准协议所定义的文档,本申请应用实例中将去中心化的预言机模块定义为预言机节点。可由预言机节点执行调用的标准文档的格式定义如表1至表4所示。
表1-标准协议字段
表2-公共数据结构定义中的Request Object数据结构
表3-公共数据结构定义中的Response Object数据结构
表4-公共数据结构定义中的Body Object数据结构
以上数据结构可用来定义用户端所需要调用的第三方数据源以及所传入的变量进行填充,该填充过程在中心化的模块中进行,假如填充模板为Yaml格式,内容如表5所示:
表5-填充模板中填充变量的举例
上述表5中的{{location}}、{{language}}、{{unit}}内容都是指可被预言机事件中客户端传入的变量值进行替代。例如在预言机事件中用户传入的变量为:location=中国、language=chinese、unit=1,那么{{location}}、{{language}}、{{unit}}的内容分别被替换为中国、chinese、1的值。
其中,步骤5中的标准协议字段所定义的内容可以再根据实际情况进行更多的变化和改变,不一定必须按照本方案中所描述的标准协议的数据结构去进行定义。标准协议的主要目的是为了让去中心化的预言机节点能够解析出需要调用第三方数据源的接口的调用信息,因此只要去中心化的预言机节点可以解析此内容的情况下,理论上可以根据实际情况进行任意的数据结构定义。
步骤6:在步骤6之前,去中心化的预言机节点需要在中心化的预言机系统中进行注册,这些注册的预言机节点可以分布在被中心化预言机模块网络可连通的任何位置,且理论上预言机节点可以无限增长。
在步骤5中,中心化的预言机系统模块将处理完成后的标准协议进行打包并在系统内寻找已注册的可用的所有去中心化架构的预言机节点,并将填充后的标准协议发送给这些所有的预言机节点。
去中心化的预言机节点可接收符合标准协议数据结构定义的yaml、json格式的文档,然后按照标准文档进行解析并执行文档所描述的数据源对应的API的url、method、参数类型等进行组装然后像第三方数据源发起调用。
比如:第三方数据源为调用某天气网,该天气网下有一个API的名称为“获取当前的实时天气信息数据”(本申请应用实例所描述的方案所支持的数据源下的API需要提前在本申请应用实例的中心化预言机模块中进行定义注册),则预言机节点将解析后的标准协议按照该数据源下名为“获取当前试试天气信息数据”的API的调用规则对其发起http调用(这里的调用协议是标准协议中所定义的,而标准协议定义的内容需要符合外部数据源API的调用规则)。
步骤7:在步骤5中,由中心化预言机模块发送给所有去中心化的预言机节点的调用请求中,所有的去中心化预言机节点通过标准协议的规则向第三方数据源发起调用后获得相应的外部数据源的返回结果集,这些结果集将被去中心化的预言机节点进行加密和签名处理以确保数据结果集的可追溯性,之后签名信息及原始数据一同返回给中心化的预言机系统。由于预言机节点可以分布在各个组织机构、网络节点等位置,而其主要能力是去获取外部数据源的数据并将结果集返回给中心化预言机系统。
步骤8:中心化的预言机系统模块分别在不同时间段内接收到来自去中心化的预言机节点的返回数据,当收到所有预言机节点的返回数据时(这里还包含了有超时情况的预言机节点,如预言机节点A、B、C、D,其中ABD都正常返回,此时中心化预言机系统的接收数据集的模块一直等待,直到C出现超时后才进入下一步),开始对所有的结果集进行聚合处理。这里的聚合策略在数据源注册于本申请应用实例所描述的中心化预言机模块时所确定的,比如注册该数据源的某API时采用的是“共识聚合策略”,那么就是说指超过1/2的相同返回数据集的数据结果才被认为是正确的,其他与这个结果不一致的值均不会被采纳。因此这里的众多去中心化预言机节点所聚合而成的结果集可以被认为是一个可信的数据集,只要作恶的节点不超过整体预言机节点数量的1/2便可以使得链上获得的外部数据源的数据为可信的正确的值。
步骤9:在步骤8的基础上由中心化的预言机系统模块完成了去中心化语言及节点所返回的数据集的聚合过程后,中心化的预言机系统模块则会将数据发送到链上,至此便完成了链下从外部数据源获取的可信数据上链的过程。
本申请应用实例所提供的预言机数据处理方法,可以使得用户通过智能合约获取链外的数据信息。在没有预言机这类系统的情况下,区块链本身无法取得外界的实时信息数据,这也使得区块链世界与现实世界出现了割裂。本申请应用实例所描述的预言机系统的设计方案提出了这样一个可实现的结合中心化与去中心化架构相关优点的预言机系统。本方案中所描述的方案设计中的中心化预言机模块在一定程度上既保证了外部数据源本身的可信程度(数据源需要在中心化预言机系统中进行注册)的同时又提高了数据聚合处理的效率,且还可以根据数据源本身的特性注册不同类型的聚合方案。
而本预言机数据处理方法中所描述的去中心化的预言机节点则主要负责接收标准协议所定义的内容并向第三方数据源的API接口发起调用。由于预言机节点可以在网络中的任意位置,预言机节点可以部署在区块链上的参与机构或个人服务器的任意网段和位置。因为预言机节点本身也是与中心化的预言机系统完全割裂的,因此预言机节点只负责遵循协议描述的内容进行调用,极大的保证了中心化预言机系统对其没有额外的干扰性以及预言机节点的自主性,符合去中心化的基本要求。
最后由去中心化的预言机节点获取外部数据源的数据并进行签名回传给中心化的预言机系统模块,并在中心化的系统模块中进行聚合处理。整个过程中避免了大量预言机节点必须参与聚合而导致系统效率低下的同时也可以从众多预言机节点返回的数据中排除掉相应的恶意节点。
从硬件层面来说,为了解决现有的通过预言机技术获取区块链外部的第三方数据的预言机数据处理方式,均存在无法同时满足预言机数据处理可靠性及效率要求的问题,本申请提供一种用于实现所述预言机数据处理方法中的全部或部分内容的电子设备的实施例,所述电子设备具体包含有如下内容:
图12为本申请实施例的电子设备9600的系统构成的示意框图。如图12所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图12是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
在一实施例中,预言机数据处理功能可以被集成到中央处理器中。其中,中央处理器可以被配置为进行如下控制:
步骤100:在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据。
步骤200:将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据。
步骤300:基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链。
从上述描述可知,本申请实施例提供的电子设备,通过在预言机系统内部提取预言机事件中的预言机数据,并对各个所述预言机节点各自发送的所述目标外部数据进行聚合处理,能够有效实现中心化地自区块链中提取预言机数据及进行外部数据聚合处理,能够有效提高自区块链中提取预言机数据及进行外部数据聚合处理等预言机数据处理过程的效率,进而能够有效提高自区块链外部获取第三方数据的效率,提高区块链的运行稳定性及数据处理的及时性;通过将所述预言机数据发送至所述预言机系统外部的各个预言机节点以实现第三方数据的获取,能够有效实现去中心化地自区块链外部多次获取第三方数据后聚合,能够有效提高预言机数据处理过程的可靠性,进而能够有效提高自区块链外部获取第三方数据的可靠性及真实性;同时,通过采用预存储在所述预言机系统内部的所述目标数据源对应的聚合策略对外部数据进行聚合处理,能够进一步提高预言机数据处理过程的可靠性,以进一步提高自区块链外部获取第三方数据的可靠性及真实性。
在另一个实施方式中,中心化预言机模块可以与中央处理器9100分开配置,例如可以将中心化预言机模块配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现预言机数据处理功能。
如图12所示,该电子设备9600还可以包括:通信模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图12中所示的所有部件;此外,电子设备9600还可以包括图12中没有示出的部件,可以参考现有技术。
如图12所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各个部件的操作。
其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。
输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器9140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。
存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通信模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。
本申请的实施例还提供能够实现上述实施例中的预言机数据处理方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的执行主体为服务器或客户端的预言机数据处理方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
步骤100:在预言机系统内部,获取区块链的预言机事件对应的用于向所述区块链外部的目标数据源请求目标外部数据的预言机数据。
步骤200:将所述预言机数据发送至所述预言机系统外部的各个目标预言机节点,以使各个所述目标预言机节点根据所述预言机数据分别自所述目标数据源获取所述目标外部数据。
步骤300:基于预存储在本地的所述目标数据源对应的聚合策略,对各个所述目标预言机节点各自发送的所述目标外部数据进行聚合处理,并将对应的聚合结果发送至所述区块链。
从上述描述可知,本申请实施例提供的计算机可读存储介质,通过在预言机系统内部提取预言机事件中的预言机数据,并对各个所述预言机节点各自发送的所述目标外部数据进行聚合处理,能够有效实现中心化地自区块链中提取预言机数据及进行外部数据聚合处理,能够有效提高自区块链中提取预言机数据及进行外部数据聚合处理等预言机数据处理过程的效率,进而能够有效提高自区块链外部获取第三方数据的效率,提高区块链的运行稳定性及数据处理的及时性;通过将所述预言机数据发送至所述预言机系统外部的各个预言机节点以实现第三方数据的获取,能够有效实现去中心化地自区块链外部多次获取第三方数据后聚合,能够有效提高预言机数据处理过程的可靠性,进而能够有效提高自区块链外部获取第三方数据的可靠性及真实性;同时,通过采用预存储在所述预言机系统内部的所述目标数据源对应的聚合策略对外部数据进行聚合处理,能够进一步提高预言机数据处理过程的可靠性,以进一步提高自区块链外部获取第三方数据的可靠性及真实性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。