管控智能合约之间调用的方法及装置与流程

文档序号:17235459发布日期:2019-03-30 08:19阅读:132来源:国知局
管控智能合约之间调用的方法及装置与流程
本申请涉及信息
技术领域
,尤其涉及一种管控智能合约之间调用的方法及装置。
背景技术
:区块链是一种源自比特币的去中心化分布式记账技术,其通过将加密区块数据按照时间顺序叠加而生成持久的不可修改的记录,并且将记录存储在区块链网络的各个节点中,使得参与到区块链中的各个节点共同维护各自的数据库。由此,区块链具有去中心化、反篡改、数据一致性存储、过程透明可追踪等技术优势,其被认为在金融、征信、物联网、经济贸易结算、资产管理等众多领域都拥有广泛的应用前景。智能合约是可以在区块链上准确运行的计算机程序。用户通过使用智能合约进行交易、共享数据、建立信任,并由区块链技术的特性而保障数据的存储、读取以及执行整个过程透明可跟踪、不可篡改。通常,用户可以通过调用区块链节点的应用程序接口(applicationprogramminginterface,api),创建新的智能合约。每个智能合约的安装和运行需要额外的资源。智能合约通过编码、部署、测试、调控等步骤最终在区块链中发挥作用,不同的智能合约在功能上相对独立,可通过智能合约之间的调用实现跨越智能合约的应用,智能合约之间的调用只需将所需要的智能合约以文件的方式引入,调用智能合约中相关接口即可完成跨越智能合约的应用。但在此过程中如果存在智能合约漏洞、故障等技术因素干扰,导致智能合约的部署、测试、调控等步骤出现与既定实现合约内容不符的结果,会造成极大的影响。因此,如何实现对智能合约之间调用的管理,从而保证智能合约之间的调用的可靠与安全,是一个亟需解决的问题。技术实现要素:本申请提供一种管控智能合约之间调用的方法及装置,可实现对智能合约之间调用的管理,保证智能合约之间的调用的可靠与安全。第一方面,本申请提供一种管控智能合约之间调用的方法,包括:检测到第一智能合约向第二智能合约发起调用请求时,解析所述调用请求,所述调用请求包括调用方、被调用方、第一凭证和时间戳;根据所述调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据所述调用方的运算因子与所述时间戳获得第二凭证;判断所述第二凭证与所述第一凭证是否匹配;如果所述第二凭证与所述第一凭证匹配,执行所述第一智能合约调用所述第二智能合约。可选的,所述根据所述调用方的运算因子与所述时间戳获得第二凭证,包括:根据所述调用请求中的调用方确定预设的计算公式;根据所述调用方的运算因子与所述时间戳,通过所述预设的计算公式获得所述第二凭证。可选的,在所述检测到第一智能合约向第二智能合约发起调用请求之前,所述方法还包括:在所述第一智能合约部署在所述区块链上时,为所述第一智能合约设置所述预设的运算公式,并生成所述第一智能合约的运算因子;将与所述第一智能合约存在调用关系的调用方、被调用方以及相应的调用方的运算因子存储在所述注册表中。可选的,所述第一凭证是所述第一智能合约根据所述第一智能合约的运算因子和所述时间戳,通过所述预设的运算公式生成的。可选的,所述注册表中包括调用方与被调用方的监控状态,所述根据所述调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子之前,所述方法还包括:确定所述调用请求中的调用方与被调用方在所述注册表中的监控状态为监控态。可选的,所述执行所述第一智能合约调用所述第二智能合约之后,所述方法还包括:将所述第一智能合约与所述第二智能合约的调用关系存储在所述区块链外的缓存数据库中。可选的,所述方法还包括:当智能合约的调用关系更新时,根据更新后的调用关系修改所述注册表,并清除所述缓存数据库中对应的数据。第二方面,本申请提供一种管控智能合约之间调用的装置,包括:解析模块,用于检测到第一智能合约向第二智能合约发起调用请求时,解析所述调用请求,所述调用请求包括调用方、被调用方、第一凭证和时间戳;处理模块,用于根据所述调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据所述调用方的运算因子与所述时间戳获得第二凭证;验证模块,用于判断所述第二凭证与所述第一凭证是否匹配;调用模块,用于在所述第二凭证与所述第一凭证匹配时,执行所述第一智能合约调用所述第二智能合约。可选的,所述处理模块具体用于:根据所述调用请求中的调用方确定预设的计算公式;根据所述调用方的运算因子与所述时间戳,通过所述预设的计算公式获得所述第二凭证。可选的,所述处理模块还用于:在所述解析模块检测到第一智能合约向第二智能合约发起调用请求之前,在所述第一智能合约部署在所述区块链上时,为所述第一智能合约设置所述预设的运算公式,并生成所述第一智能合约的运算因子;将与所述第一智能合约存在调用关系的调用方、被调用方以及相应的调用方的运算因子存储在所述注册表中。可选的,所述第一凭证是所述第一智能合约根据所述第一智能合约的运算因子和所述时间戳,通过所述预设的运算公式生成的。可选的,所述注册表中包括调用方与被调用方的监控状态,所述处理模块还用于:在根据所述调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子之前,确定所述调用请求中的调用方与被调用方在所述注册表中的监控状态为监控态。可选的,所述装置还包括:存储模块,用于在所述调用模块执行所述第一智能合约调用所述第二智能合约之后,将所述第一智能合约与所述第二智能合约的调用关系存储在所述区块链外的缓存数据库中。可选的,所述存储模块还用于:当智能合约的调用关系更新时,根据更新后的调用关系修改所述注册表,并清除所述缓存数据库中对应的数据。第三方面,本申请提供一种管控智能合约之间调用的装置,包括:存储器,用于存储程序指令;处理器,用于调用并执行所述存储器中的程序指令,以实现第一方面的管控智能合约之间调用的方法。第四方面,本申请提供一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面的管控智能合约之间调用的方法。第五方面,本申请提供一种程序产品,该程序产品包括计算机程序,该计算机程序存储在可读存储介质中。管控智能合约之间调用的装置的至少一个处理器可以从可读存储介质读取该计算机程序,至少一个处理器执行该计算机程序使得管控智能合约之间调用的装置实施第一方面的管控智能合约之间调用的方法。本申请提供的管控智能合约之间调用的方法及装置,通过检测到第一智能合约向第二智能合约发起调用请求时,解析调用请求,根据调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据调用方的运算因子与时间戳获得第二凭证,判断第二凭证与第一凭证匹配时,执行第一智能合约调用第二智能合约。在智能合约调用之前,通过验证调用请求的合理性才执行调用,可保证智能合约之间的调用的执行安全,由于注册表位于区块链上,可避免篡改的情况发生,因此可避免区块链攻击者借由智能合约的调用对区块链进行恶意操作。附图说明为了清楚地说明本申请或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本申请提供的一种管控智能合约之间调用的方法实施例的流程图;图2为本申请提供的一种管控智能合约之间调用的方法实施例的流程图;图3为本申请提供的一种管控智能合约之间调用的装置实施例的结构示意图;图4为本申请提供的一种管控智能合约之间调用的装置实施例的结构示意图;图5为本申请提供的一种管控智能合约之间调用的装置实施例的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。区块链技术的出现解决了多方交易中的互信问题,其中的分布式账本是很重要的一个组成部分。如何能够快速、安全的从账本中获取数据是区块链技术一致致力于解决的问题。而现有技术中针对智能合约之间调用的管控存在空白,令区块链攻击者可以借由智能合约之间的调用对区块链进行恶意操作。为解决这一问题,本申请提供一种管控智能合约之间调用的方法及装置,可以有效保证智能合约上的方法和操作的数据不会因人为因素出现错误,保证区块链上数据的准确性,并进一步加强上链数据的可信程度,避免区块链攻击者借由智能合约之间的调用对区块链进行恶意操作。下面结合附图详细说明本申请的技术方案。本申请提供一种管控智能合约之间调用的方法及装置,可以应用于不同类型的区块链网络中。根据区块链参与方的不同,区块链通常被分为公有链、联盟链和私有链三种类型。公有链对外开放,用户无需任何授权就可以访问区块链网络和区块数据,发起各种交易。联盟链限制了只有联盟中的成员才能参与,区块链上的操作权限根据联盟定制的相关规则来确定。私有链一般在私有组织内部使用,区块链上的操作权限根据私有组织的自行规定执行。本申请提供的管控智能合约之间调用的装置可通过软件和/或硬件实现,该装置可以作为区块链功能的一部分,还可以作为区块链网络的一个组件,可以将该装置部署在需要部署智能合约的区块链节点上。图1为本申请提供的一种管控智能合约之间调用的方法实施例的流程图,本实施例的执行主体可以为管控智能合约之间调用的装置,如图1所示,本实施例的方法可以包括:s101、检测到第一智能合约向第二智能合约发起调用请求时,解析调用请求,调用请求包括:调用方、被调用方、第一凭证和时间戳。具体地,当区块链上发生数据操作时,开始监控区块链上智能合约之间的调用情况。其中,该调用请求中调用方为第一智能合约,被调用方为第二智能合约,时间戳是调用请求对应的调用时间。当调用方向被调用方发起调用请求时,调用方根据调用方自身的运算因子和时间戳通过预设的运算公式生成第一凭证,该第一凭证和时间戳被携带在调用请求中。预设的运算公式为管控智能合约之间调用的装置在第一智能合约部署在所述区块链上时为第一智能合约设置的,其可以是但不限于现有的算法,例如hash算法(哈希算法)、md5算法(message-digestalgorithm,消息摘要算法)。s102、根据调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据调用方的运算因子与时间戳获得第二凭证。具体地,区块链的注册表中存储调用方、被调用方和调用方的运算因子,例如下表一所示:表一调用方被调用方运算因子ab运算因子1cd运算因子2ef运算因子3解析调用请求获得调用请求包括的调用方、被调用方、第一凭证和时间戳之后,在一个实施例中,可先验证调用请求中的调用方和被调用方在注册表中,例如,以表一所示为例,若调用请求中的调用方为a,被调用方为b,则可确定调用请求中的调用方和被调用方在注册表中。解析调用请求后,根据调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据调用方的运算因子与时间戳获得第二凭证。其中,获得第二凭证具体可以为:根据调用请求中的调用方确定预设的计算公式,根据调用方的运算因子与时间戳,通过预设的计算公式获得第二凭证。由于预设的运算公式为管控智能合约之间调用的装置在调用方在区块链上注册时为第一智能合约设置的,因此调用方和管控智能合约之间调用的装置均已知计算凭证所要使用的运算公式,管控智能合约之间调用的装置可根据调用方来确定相应的计算公式。s103、判断第二凭证与第一凭证是否匹配。具体地,判断第二凭证与第一凭证是否匹配,可以是判断第二凭证与第一凭证是否相同,若相同则匹配,若不相同则不匹配,当确定第一凭证与第二凭证匹配时,则判断调用请求合理,若第一凭证与计算出的凭证不匹配,则可判断调用请求不合理。例如,调用请求中的调用方为a,被调用方为b,则对应的运算因子为运算因子1,根据运算因子1和调用请求中的时间戳,通过预设的计算公式计算出第二凭证,若第一凭证与计算出的第二凭证匹配时,则确定调用请求合理。本实施例中,可选的,在s101中检测到第一智能合约向第二智能合约发起调用请求之前,本实施例的方法还可以包括:在第一智能合约部署在区块链上时,为第一智能合约设置预设的运算公式,并生成第一智能合约的运算因子;将与第一智能合约存在调用关系的调用方、被调用方以及相应的调用方的运算因子存储在注册表中。其中的运算因子是随机生成的一个数,譬如可以是哈希值。为不同的智能合约可设置相同的运算公式,也可设置不同的运算公式,例如共有3个运算公式,一部分智能合约设置运算公式1,一部分智能合约设置2,最后一部分智能合约设置运算公式3。上述过程为新的智能合约部署在区块链上时,智能合约之间调用关系注册的过程,进一步地,注册表中还包括调用方与被调用方的监控状态,将与第一智能合约存在调用关系的调用方、被调用方以及相应的调用方的运算因子存储在注册表中时,可设置调用方与被调用方的监控状态为监控态,表示在当前时间段内该调用关系是有效的,在一段时间后,还可将某一个调用关系的监控状态设置为非监控态,表示在当前时间段内该调用关系是无效的。相应的,s102中根据调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子之前,还可以包括:确定调用请求中的调用方与被调用方在注册表中的监控状态为监控态。可进一步提高判断调用请求是否合理的准确性。s104、如果第二凭证与第一凭证匹配,执行第一智能合约调用第二智能合约。具体地,如果第二凭证与第一凭证匹配,判断该调用请求合理,允许第一智能合约调用第二智能合约。如果第二凭证与第一凭证不匹配,判断该调用请求不合理,则第一智能合约无法调用第二智能合约。进一步地,在s104之后,本实施例的方法还可以包括:s105、将第一智能合约与第二智能合约的调用关系存储在区块链外的缓存数据库中。通过将第一智能合约与第二智能合约的调用关系存储在区块链外的缓存数据库中,以便于下次出现同样的调用请求时可快速识别,提高处理的速度。进一步地,在s105之后,本实施例的方法还可以包括:s106、当智能合约的调用关系更新时,根据更新后的调用关系修改注册表,并清除缓存数据库中对应的数据。从而保证新的智能合约的正确执行。本实施例提供的管控智能合约之间调用的方法,通过检测到第一智能合约向第二智能合约发起调用请求时,解析调用请求,根据调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据调用方的运算因子与时间戳获得第二凭证,判断第二凭证与第一凭证匹配时,执行第一智能合约调用第二智能合约。在智能合约调用之前,通过验证调用请求的合理性才执行调用,可保证智能合约之间的调用的执行安全,由于注册表位于区块链上,可避免篡改的情况发生,因此可避免区块链攻击者借由智能合约的调用对区块链进行恶意操作。下面采用一个具体的实施例,对图1所示方法实施例的技术方案进行详细说明。下述为本申请提供的管控智能合约之间调用的方法可应用的一个场景示例,如:为了完成业务目标t,编写智能合约a与智能合约b。为成功实现t功能,需满足在执行智能合约a的过程中会自动调用执行智能合约b,将本申请提供的管控智能合约之间调用的装置部署于区块链网络中,作为区块链网络的一个组件,将智能合约a与智能合约b成功部署到区块链网络中某一区块链节点上,执行智能合约a,即a向b发起调用请求,本申请提供的管控智能合约之间调用的装置执行下述图2所示的方法,最终可查看合约执行结果,从而可查看智能合约a调用智能合约b的执行结果。图2为本申请提供的一种管控智能合约之间调用的方法实施例的流程图,本实施例的执行主体可以为管控智能合约之间调用的装置,如图2所示,本实施例的方法可以包括:s201、在第一智能合约部署在区块链上时,确定第一智能合约和区块链上原有的智能合约均能独立正常运行。本步骤中,第一智能合约为新部署的智能合约,也可以是在管控智能合约之间调用的装置部署在原有区块链上时,确定第一智能合约和区块链上原有的智能合约均能独立正常运行。这样可以对智能合约的运行状态进行监控。s202、为第一智能合约设置预设的运算公式,并生成第一智能合约的运算因子,将与第一智能合约存在调用关系的调用方、被调用方以及相应的调用方的运算因子存储在注册表中。进一步地,将调用方、被调用方和对应的运算因子存储在注册表中,且在注册表中标记调用方与被调用方的当前监控状态为监控态。s203、检测到第一智能合约向第二智能合约发起调用请求时,解析调用请求,调用请求包括:调用方、被调用方、第一凭证和时间戳。当调用方向被调用方发起调用请求时,调用方根据调用方自身的运算因子和时间戳通过预设的运算公式生成第一凭证,该第一凭证和时间戳被携带在调用请求中。s204、根据区块链的注册表判断调用请求是否合理。若合理,则执行s205,若不合理,执行s207。具体地,如何判断调用请求是否合理,首先,验证调用请求中的调用方和被调用方在注册表中,若不在,即可判定调用请求不合理。接着,验证调用方的调用权限,具体为:根据调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据调用方的运算因子与时间戳获得第二凭证,若第一凭证与计算出的第二凭证匹配时,可判断调用方为真实的调用方,则可判断调用请求合理,若第一凭证与计算出的第二凭证不匹配,则可判断调用请求不合理。可选的,根据注册表判断调用请求是否合理之前,还可以确定调用请求中的调用方与被调用方在注册表中的监控状态为监控态。可进一步提高判断调用请求是否合理的准确性。s205、执行第一智能合约调用第二智能合约。s206、将第一智能合约与第二智能合约的调用关系存储在区块链外的缓存数据库中。通过将第一智能合约与第二智能合约的调用关系存储在区块链外的缓存数据库中,以便于下次出现同样的调用请求时可快速识别,提高处理的速度。s207、提示调用错误。可选的,本实施例中当智能合约的调用关系更新时,还可根据更新后的调用关系修改智能合约调用关系表,并清除缓存数据库中对应的数据。从而保证新的智能合约的正确执行。图3为本申请提供的一种管控智能合约之间调用的装置实施例的结构示意图,如图3所示,本实施例的装置可以包括:解析模块11、处理模块12、验证模块13和调用模块14,其中,解析模块11用于检测到第一智能合约向第二智能合约发起调用请求时,解析所述调用请求,所述调用请求包括调用方、被调用方、第一凭证和时间戳。处理模块12用于根据所述调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据所述调用方的运算因子与所述时间戳获得第二凭证。验证模块13用于判断所述第二凭证与所述第一凭证是否匹配。调用模块14用于在所述第二凭证与所述第一凭证匹配时,执行所述第一智能合约调用所述第二智能合约。进一步地,处理模块12具体用于:根据所述调用请求中的调用方确定预设的计算公式;根据所述调用方的运算因子与所述时间戳,通过所述预设的计算公式获得所述第二凭证。可选的,处理模块12还用于:在所述解析模块11检测到第一智能合约向第二智能合约发起调用请求之前,在所述第一智能合约部署在所述区块链上时,为所述第一智能合约设置所述预设的运算公式,并生成所述第一智能合约的运算因子;将与所述第一智能合约存在调用关系的调用方、被调用方以及相应的调用方的运算因子存储在所述注册表中。可选的,所述第一凭证是所述第一智能合约根据所述第一智能合约的运算因子和所述时间戳,通过所述预设的运算公式生成的。可选的,所述注册表中包括调用方与被调用方的监控状态,所述处理模块12还用于:在根据所述调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子之前,确定所述调用请求中的调用方与被调用方在所述注册表中的监控状态为监控态。本实施例的装置,可以用于执行图1或图2所示方法实施例的技术方案,其实现原理类似,此处不再赘述。本实施例提供的管控智能合约之间调用的装置,通过解析模块检测到第一智能合约向第二智能合约发起调用请求时,解析调用请求,处理模块根据调用请求中的调用方和被调用方,在区块链的注册表中查找相应的调用方的运算因子,并根据调用方的运算因子与时间戳获得第二凭证,验证模块判断第二凭证与第一凭证是否匹配,调用模块在所述第二凭证与所述第一凭证匹配时,执行第一智能合约调用第二智能合约。从而,在智能合约调用之前,通过验证调用请求的合理性才执行调用,可保证智能合约之间的调用的执行安全,由于注册表位于区块链上,可避免篡改的情况发生,因此可避免区块链攻击者借由智能合约的调用对区块链进行恶意操作。图4为本申请提供的一种管控智能合约之间调用的装置实施例的结构示意图,如图4所示,本实施例的装置在图3所示装置的基础上,进一步地,还可以包括:存储模块15,存储模块15在调用模块14执行第一智能合约调用第二智能合约之后,将第一智能合约与第二智能合约的调用关系存储在区块链外的缓存数据库中。进一步地,存储模块15还用于:当智能合约的调用关系更新时,根据更新后的调用关系修改注册表,并清除缓存数据库中对应的数据。本实施例的装置,可以用于执行图1或图2所示方法实施例的技术方案,其实现原理类似,此处不再赘述。图5为本申请提供的一种管控智能合约之间调用的装置实施例的结构示意图,如图5所示,本实施例的装置可以包括:存储器201和处理器202,存储器201,用于存储程序指令,该存储器可以是flash(闪存)。处理器202,用于调用并执行存储器中的程序指令,以实现图1或图2所示的管控智能合约之间调用的方法中的各个步骤。具体可以参见前面方法实施例中的相关描述。还可以包括输入/输出接口203。输入/输出接口203可以包括独立的输出接口和输入接口,也可以为集成输入和输出的集成接口。其中,输出接口用于输出数据,输入接口用于获取输入的数据,上述输出的数据为上述方法实施例中输出的统称,输入的数据为上述方法实施例中输入的统称。本申请还提供一种可读存储介质,可读存储介质中存储有计算机程序,当管控智能合约之间调用的装置的至少一个处理器执行该计算机程序时,管控智能合约之间调用的装置执行第一方面的管控智能合约之间调用的方法。本申请还提供一种程序产品,该程序产品包括计算机程序,该计算机程序存储在可读存储介质中。管控智能合约之间调用的装置的至少一个处理器可以从可读存储介质读取该计算机程序,至少一个处理器执行该计算机程序使得管控智能合约之间调用的装置实施第一方面的管控智能合约之间调用的方法。本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1