调用智能合约的方法及装置
文献发布时间:2023-06-19 09:23:00
技术领域
本公开涉及信息技术领域,尤其涉及一种调用智能合约的方法及装置。
背景技术
区块链技术(也被称之为,分布式账本技术)是一种去中心化的分布式数据库技术。由于采用去中心化的网络结构、共识机制和链式区块结构,使得区块链技术具有去中心化、公开透明、不可篡改、可信任等多种特点,适用于诸多对数据可靠性具有高需求的应用场景中。区块链上的智能合约是在区块链系统上可以被交易触发执行的合约,智能合约是区块链上的可执行代码,可以通过调用智能合约实现复杂的功能。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种调用智能合约的方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种调用智能合约的调用方法,应用于区块链节点;所述方法包括:
确定调用请求方针对目标智能合约中定义的目标接口的调用需求;
在所述目标智能合约中定义了对所述目标接口具有调用权限的合约角色,且所述合约角色被授权至所述调用请求方的情况下,调用所述目标接口以实现相应的预设功能。
根据本说明书一个或多个实施例的第二方面,提出了一种调用智能合约的调用方法,应用于区块链节点;所述方法包括:
接收区块链交易,所述交易中包含目标智能合约的合约地址和针对所述目标智能合约中定义的目标接口的角色配置信息;
根据所述合约地址调用所述目标智能合约,以通过执行所述目标智能合约的合约代码为所述目标接口配置相应的合约角色,所述合约角色拥有对所述目标接口的调用权限。
根据本说明书一个或多个实施例的第三方面,提出了一种调用智能合约的调用方法,应用于区块链节点;所述方法包括:
接收角色管理方发起的区块链交易,所述交易中包含用于角色授权的智能合约的合约地址、针对合约角色的角色授权信息和授权对象的信息,所述合约角色由目标智能合约针对所述目标智能合约中的目标接口而定义;
根据所述合约地址调用所述用于角色授权的智能合约,以通过执行所述用于角色授权的智能合约的合约代码为所述授权对象授权相应的合约角色。
根据本说明书一个或多个实施例的第四方面,提出了一种调用智能合约的调用方法,应用于区块链节点;所述方法包括:
接收第一处理方发起的用于调用目标智能合约的区块链交易,以使所述目标智能合约通过第一资源转移接口从所述第一处理方对应的区块链账户向第二处理方对应的区块链账户转移第一类型的第一资源、通过第二资源转移接口从所述第二处理方对应的区块链账户向第三处理方对应的区块链账户转移第二类型的第二资源;
在确定所述第一资源转移接口被配置了具有调用权限的第一合约角色,且所述第一合约角色被授权至所述第一处理方的情况下,调用对应于所述第一资源转移接口的合约代码以完成对第一资源的转移;
在确定所述第二资源转移接口被配置了具有调用权限的第二合约角色,且所述第二合约角色被授权至所述目标智能合约的情况下,调用对应于所述第二资源转移接口的合约代码以完成对第二资源的转移。
根据本说明书一个或多个实施例的第五方面,提出了一种调用智能合约的装置,应用于区块链节点;所述装置包括:
确定单元,用于确定调用请求方针对目标智能合约中定义的目标接口的调用需求;
第一接口调用单元,用于在所述目标智能合约中定义了对所述目标接口具有调用权限的合约角色,且所述合约角色被授权至所述调用请求方的情况下,调用所述目标接口以实现相应的预设功能。
根据本说明书一个或多个实施例的第六方面,提出了一种调用智能合约的装置,应用于区块链节点;所述装置包括:
第一接收单元,用于接收区块链交易,所述交易中包含目标智能合约的合约地址和针对所述目标智能合约中定义的目标接口的角色配置信息;
第一智能合约调用单元,用于根据所述合约地址调用所述目标智能合约,以通过执行所述目标智能合约的合约代码为所述目标接口配置相应的合约角色,所述合约角色拥有对所述目标接口的调用权限。
根据本说明书一个或多个实施例的第七方面,提出了一种调用智能合约的装置,应用于区块链节点;所述装置包括:
第二接收单元,用于接收角色管理方发起的区块链交易,所述交易中包含用于角色授权的智能合约的合约地址、针对合约角色的角色授权信息和授权对象的信息,所述合约角色由目标智能合约针对所述目标智能合约中的目标接口而定义;
第二智能合约调用单元,用于根据所述合约地址调用所述用于角色授权的智能合约,以通过执行所述用于角色授权的智能合约的合约代码为所述授权对象授权相应的合约角色。
根据本说明书一个或多个实施例的第八方面,提出了一种调用智能合约的装置,应用于区块链节点;所述装置包括:
第三接收单元,用于接收第一处理方发起的用于调用目标智能合约的区块链交易,以通过所述目标智能合约中定义的第一资源转移接口从所述第一处理方对应的区块链账户向第二处理方对应的区块链账户转移第一类型的第一资源、通过所述目标智能合约中定义的第二资源转移接口从所述第二处理方对应的区块链账户向第三处理方对应的区块链账户转移第二类型的第二资源;
第二接口调用单元,用于在确定所述第一资源转移接口被配置了具有调用权限的第一合约角色,且所述第一合约角色被授权至所述第一处理方的情况下,调用对应于所述第一资源转移接口的合约代码以完成对第一资源的转移;
第三接口调用单元,用于在确定所述第二资源转移接口被配置了具有调用权限的第二合约角色,且所述第二合约角色被授权至所述目标智能合约的情况下,调用对应于所述第二资源转移接口的合约代码以完成对第二资源的转移。
根据本说明书一个或多个实施例的第九方面,提供一种电子设备。所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面、第二方面、第三方面或者第四方面所述的方法。
根据本说明书一个或多个实施例的第九方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面、第二方面、第三方面或者第四方面所述方法的步骤。
附图说明
图1是本说明书示出的一种调用智能合约的方法的流程图。
图2是本说明书示出的另一种调用智能合约的方法的流程图。
图3是本说明书示出的另一种调用智能合约的方法的流程图。
图4是本说明书示出的另一种调用智能合约的方法的流程图。
图5是本说明书一示例性实施例一种调用智能合约的方法的流程图。
图6A是本说明书一示例性实施例提供的一种区块链账户的示意图。
图6B是本说明书一示例性实施例提供的另一种区块链账户的示意图。
图7是本说明书一示例性实施例提供的另一种区块链账户的示意图。
图8是本说明书一示例性实施例提供的另一种调用智能合约的方法的流程图。
图9是本说明书一示例性实施例提供的一种资源转移场景的示意图。
图10是本说明书一示例性实施例提供的一种电子设备的结构示意图。
图11是本说明书一示例性实施例提供的一种调用智能合约的装置示意图。
图12是本说明书一示例性实施例提供的另一种调用智能合约的装置示意图。
图13是本说明书一示例性实施例提供的另一种调用智能合约的装置示意图。
图14是本说明书一示例性实施例提供的另一种调用智能合约的装置示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等,且各参与者(即节点)可自由加入以及退出网络。私有链则相反,该网络的数据写入权限由某个组织或者机构控制,数据读取权限受组织规定;简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少,因而私有链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织,参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
在区块链网络中,通过向区块链节点提交相应的区块链交易,可以由区块链交易触发执行对应的智能合约,可以通过调用智能合约实现复杂的功能。而智能合约是区块链上预先部署的可执行代码,智能合约允许在没有第三方的情况下进行可信交易,且该交易可追踪且不可逆转。智能合约中可以定义一个或多个接口,每一接口用于实现相应的功能。在通过区块链交易调用智能合约时,可以声明调用该智能合约中定义的哪个或哪些接口,以实现相应的功能。
本说明书可在区块链交易调用智能合约中定义的接口时实现权限管理。下面结合实施例进行详细说明。
图1是本说明书示出的一种调用智能合约的方法的流程图。如图1所示,该方法应用于区块链节点;该方法可以包括以下步骤:
步骤102,确定调用请求方针对目标智能合约中定义的目标接口的调用需求。
在一实施例中,在调用请求方为客户端的情况下,若接收到客户端发起的第一区块链交易,且该第一区块链交易可以用于调用目标智能合约中定义的目标接口,那么区块链节点可以确定客户端对目标接口的调用需求。
在一实施例中,在调用请求方为第二区块链交易调用的特定智能合约的情况下,若该第二区块链交易中指示了特定智能合约调用目标智能合约中定义的目标接口,那么区块链节点可以确定特定智能合约对目标接口的调用需求。其中,特定智能合约可以是目标智能合约,也可是区别于该目标智能合约的另一智能合约。
步骤104,在所述目标智能合约中定义了对所述目标接口具有调用权限的合约角色,且所述合约角色被授权至所述调用请求方的情况下,调用所述目标接口以实现相应的预设功能。
在一实施例中,目标智能合约中可以为目标接口定义具有调用权限的合约角色,在相应的合约角色被授权至调用请求方的情况下,区块链节点可以调用该目标接口以实现相应的预设功能,在相应的合约角色未被授权至调用请求方的情况下,区块链节点将不会调用该目标接口。
在一实施例中,合约角色可以被目标智能合约直接授权至调用请求方,此时,合约角色可以被记录于目标智能合约对应的区块链账户中,而该目标智能合约将合约角色授权至调用请求方的授权信息可以被记录于调用请求方对应的区块链账户中。
在一实施例中,合约角色可以被目标智能合约授权至角色管理方,以由角色管理方授权给调用请求方,此时,合约角色可以被记录于目标智能合约对应的区块链账户中。而该目标智能合约将合约角色授权至角色管理方的授权信息与该角色管理方将合约角色授权给调用请求方的授权信息均记录于角色管理方对应的区块链账户中;或者,目标智能合约将合约角色授权至角色管理方的授权信息可以记录于角色管理方对应的区块链账户中,而角色管理方将合约角色授权给调用请求方的授权信息可以记录于调用请求方对应的区块链账户中,当然,角色管理方将合约角色授权给调用请求方的授权信息可以同时记录于角色管理方对应的区块链账户中以及调用请求方对应的区块链账户中,本说明书中并不对此进行限制。
在一实施例中,角色管理方与调用请求方并不存在本质区别,当目标智能合约将合约角色授权至第一对象时,该第一对象可以被认为是调用请求方,而当该第一对象进一步将合约角色授权至第二对象时,该第一对象可以被认为是角色管理方、第二对象可以被认为是调用请求方。换言之,任何对象都可能成为角色管理方或调用请求方。
在一实施例中,一部分对象仅能够被授予合约角色、不具有向其他对象授予合约角色的权限,该部分对象仅能够成为上述的调用请求方;而另一部分对象不仅能够被授予合约角色,还具有向其他对象授予合约角色的权限,该部分对象既能够成为上述的调用请求方,又能够成为上述的角色管理方。
在一实施例中,区块链节点可以通过调用目标接口,执行目标智能合约中对应于目标接口的目标合约代码,或者,区块链节点可以通过调用目标接口,执行区别于目标智能合约的另一智能合约中对应于目标接口的目标合约代码。
由以上技术方案可见,本说明书中可以为目标智能合约中的目标接口配置相应的合约角色,合约角色可以拥有对目标接口的调用权限,并且区块链节点可以根据接收到的区块链交易为相应的对象授权合约角色,以使得该对象能够调用目标接口以实现相应的预设功能,可以实现对目标接口的调用权限的管理,并且通过为不同的对象授权不同的权限,从而便于在不同的对象请求访问目标接口时实现访问控制与管理,提升了对目标接口的调用效率并且保证了目标接口对应的预设功能的安全性。
图2是本说明书示出的另一种调用智能合约的方法的流程图。如图2所示,该方法应用于区块链节点;该方法可以包括以下步骤:
步骤202,接收区块链交易,所述交易中包含目标智能合约的合约地址和针对所述目标智能合约中定义的目标接口的角色配置信息。
在一实施例中,区块链节点可以接收区块链交易,该交易中可以包含目标智能合约的合约地址和针对该目标智能合约中定义的目标接口的角色配置信息。该角色配置信息中可以包含目标智能合约中的目标接口名称和对应的合约角色名称等。
步骤204,根据所述合约地址调用所述目标智能合约,以通过执行所述目标智能合约的合约代码为所述目标接口配置相应的合约角色,所述合约角色拥有对所述目标接口的调用权限。
在一实施例中,区块链节点可以根据合约地址调用相应的目标智能合约,以通过执行该目标智能合约的代码为目标接口配置相应的合约角色,那么该合约角色可以拥有对该目标接口的调用权限。
在一实施例中,区块链节点可以接收区块链交易,该交易中可以包含目标智能合约的合约地址、针对目标智能合约中定义的合约角色的角色授权信息和授权对象,那么区块链节点可以根据该合约地址调用相应的目标智能合约,以通过执行该目标智能合约的合约代码为授权对象授权相应的合约角色。其中,该区块链交易可以由对目标智能合约具有管理权限的管理员账户发起或者是其他具有相应权限的账户发起,角色授权信息中可以包含目标智能合约中定义的合约角色的角色名称或者角色标识等信息,授权对象可以包含客户端或者任一智能合约,本说明书中并不对此进行限制。
在一实施例中,区块链节点可以接收授权请求方发起的区块链交易,该交易中可以包含目标智能合约的合约地址、针对该目标智能合约中定义的合约角色的授权请求信息、交互资源量和目标交互对象的信息。那么区块链节点可以根据合约地址调用相应的目标智能合约,并通过执行该目标智能合约的合约代码,可以将对应于交互资源量的账户资源从授权请求方对应的区块链账户转移至目标交互对象的区块链账户,从而可以为授权请求方授权相应的合约角色。其中,目标交互对象可以为目标智能合约,也可以是其他预先设定的任意对象,本说明书中并不对此进行限制。
由以上技术方案可见,本说明书中可以为目标智能合约中的目标接口配置相应的合约角色,合约角色可以拥有对目标接口的调用权限,并且区块链节点可以根据接收到的区块链交易为相应的对象授权合约角色,以使得该对象能够调用目标接口以实现相应的预设功能,可以实现对目标接口的调用权限的管理,并且通过为不同的对象授权不同的权限,从而便于在不同的对象请求访问目标接口时实现访问控制与管理,提升了对目标接口的调用效率,并且保证了目标接口对应的预设功能的安全性。
图3是本说明书示出的另一种调用智能合约的方法的流程图。如图3所示,该方法应用于区块链节点;该方法可以包括以下步骤:
步骤302,接收角色管理方发起的区块链交易,所述交易中包含用于角色授权的智能合约的合约地址、针对目标智能合约中定义的合约角色的角色授权信息和接收方授权对象的信息,所述合约角色由目标智能合约针对所述目标智能合约中的目标接口而定义。
在一实施例中,若用于角色授权的智能合约与目标智能合约为同一智能合约,那么区块链节点可以接收到角色管理方发起的区块链交易,该交易中可以包含目标智能合约的合约地址、针对目标智能合约中定义的合约角色的角色授权信息和接收方授权对象的信息,该合约角色是由目标智能合约针对目标智能合约中的目标接口而定义。
在一实施例中,若用于角色授权的智能合约为区别于目标智能合约的其他智能合约,那么区块链节点接收到的区块链交易中可以包含用于角色授权的智能合约的合约地址、针对目标智能合约中定义的合约角色的角色授权信息、接收方授权对象的信息和目标智能合约的合约地址,也就是说,目标智能合约的合约地址可以作为该用于角色授权的智能合约的入参,那么用于角色授权的智能合约可以将该目标智能合约中定义的合约角色授权给相应的接收方授权对象。
在一实施例中,若用于角色授权的智能合约为区别于目标智能合约的其他智能合约并且该用于角色授权的智能合约中已经定义了目标智能合约的合约地址,那么区块链节点接收到的区块链交易中可以仅包含用于角色授权的智能合约的合约地址、针对目标智能合约中定义的合约角色的角色授权信息和接收方授权对象的信息,其中,用于角色授权的智能合约可以根据已经定义的目标智能合约的合约地址确定该目标智能合约中的合约角色,并将确定出的合约角色授权给相应的接收方授权对象。
在一实施例中,角色授权信息中可以包含目标智能合约中定义的合约角色的角色名称或者角色标识等信息。接收方授权对象可以包含客户端或者任一智能合约。角色管理方可以被授权了目标智能合约中定义的合约角色或者角色管理方可以未被授权目标智能合约中定义的合约角色,角色管理方可以是能够调用用于角色授权的智能合约的区块链账户,本说明书中并不对此进行限制。
步骤304,根据所述合约地址调用所述用于角色授权的智能合约,以通过执行所述用于角色授权的智能合约的合约代码为所述接收方授权对象授权相应的合约角色。
在一实施例中,区块链节点可以根据合约地址调用该用于角色授权的智能合约,以通过执行该用于角色授权的智能合约的合约代码为授权对象授权相应的合约角色。在授权对象被授权了相应的合约角色的情况下,该授权对象对应的区块链账户可以认为是角色管理方对应的区块链账户的“子账户”,而角色管理方对应的区块链账户可以被认为是“主账户”,从而可以实现“主账户”对“子账户”权限的管理。“主账户”与“子账户”是相对概念,即在任意的角色授权行为中,当第一区块链账户向第二区块链账户授权某一合约角色时,第一区块链账户被认为是“主账户”、第二区块链账户被认为是“子账户”,但在其他的角色授权行为中,第一区块链账户也可能接受其他区块链账户授权的角色账户而成为“子账户”,第二区块链账户也可能向其他区块链账户授权角色账户而成为“主账户”。
由以上技术方案可见,本说明书中可以为目标智能合约中的目标接口配置相应的合约角色,合约角色可以拥有对目标接口的调用权限,并且区块链节点可以根据接收到角色管理方发起的区块链交易为相应的对象授权合约角色,以使得该对象能够调用目标接口以实现相应的预设功能,角色管理方对应的区块链账户可以作为“主账户”为相应对象的区块链账户即“子账户”授权合约角色,可以实现主账户对子账户的权限管理,可以满足企业或者组织等机构对账户的管理需求,可以实现对目标接口的调用权限的管理,可以通过为不同的对象授权不同的权限,从而便于在不同的对象请求访问目标接口时实现访问控制与管理,提升了对目标接口的调用效率,并且保证了目标接口对应的预设功能的安全性。
图4是本说明书示出的另一种调用智能合约的方法的流程图。如图4所示,该方法应用于区块链节点;该方法可以包括以下步骤:
步骤402,接收第一处理方发起的用于调用目标智能合约的区块链交易,以使所述目标智能合约通过第一资源转移接口从所述第一处理方对应的区块链账户向第二处理方对应的区块链账户转移第一类型的第一资源、通过第二资源转移接口从所述第二处理方对应的区块链账户向第三处理方对应的区块链账户转移第二类型的第二资源。
在一实施例中,区块链节点可以接收到第一处理方发起的用于调用目标智能合约的区块链交易,从而可以通过调用该目标智能合约,执行该目标智能合约中对应于第一资源转移接口的目标合约代码,通过调用该第一资源转移接口从第一处理方对应的区块链账户向第二处理方对应的区块链账户转移第一类型的第一资源,可以通过调用该目标智能合约,执行该目标智能合约中对应于第二资源转移接口的目标合约代码,通过调用该第二资源转移接口从第二处理方对应的区块链账户向第三处理方对应的区块链账户转移第二类型的第二资源。
在一实施例中,区块链节点可以接收到第一处理方发起的用于调用目标智能合约的区块链交易,从而可以通过调用该目标智能合约,执行区别于该目标智能合约的另一智能合约中对应于第一资源转移接口的目标合约代码,通过调用该第一资源转移接口从第一处理方对应的区块链账户向第二处理方对应的区块链账户转移第一类型的第一资源,还可以通过调用该目标智能合约,执行区别于该目标智能合约的另一智能合约中对应于第二资源转移接口,通过调用该第二资源转移接口从第二处理方对应的区块链账户向第三处理方对应的区块链账户转移第二类型的第二资源。其中,第一资源转移接口和第二资源转移接口可以位于区别于目标智能合约的同一智能合约中,第一资源转移接口和第二资源转移接口也可以位于区别于目标智能合约的不同智能合约中,本说明书中并不对此进行限制。
步骤404,在确定所述目标智能合约中定义了对第一资源转移接口具有调用权限的第一合约角色,且所述第一合约角色被授权至所述第一处理方的情况下,调用对应于所述第一资源转移接口的合约代码以完成对第一资源的转移。
步骤406,在确定所述目标智能合约中定义了对第二资源转移接口具有调用权限的第二合约角色,且所述第二合约角色被授权至所述目标智能合约的情况下,调用对应于所述第二资源转移接口的合约代码以完成对第二资源的转移。
在一实施例中,区块链节点在确定目标智能合约中定义了对第一资源转移接口具有调用权限的第一合约角色,并且该第一合约角色已经被授权至第一处理方的情况下,区块链节点可以调用对应于第一资源转移接口的合约代码从而完成第一资源的转移。区块链节点在确定目标智能合约中定义了对第二资源转移接口具有调用权限的第二合约角色,并且该第二合约角色已经被授权至目标智能合约的情况下,区块链节点可以调用对应于第二资源转移接口的合约代码从而完成对第二资源的转移。其中,第一资源转移接口和第二资源转移接口可以属于该目标智能合约。
在一实施例中,区块链节点可以在确定区别于目标智能合约的另一智能合约中定义了对第一资源转移接口具有调用权限的第一合约角色,并且该第一合约角色已经被授权至第一处理方的情况下,区块链节点可以调用该区别于目标智能合约的另一智能合约中对应于第一资源转移接口的合约代码从而完成对第一资源的转移。区块链节点可以在确定区别于目标智能合约的另一智能合约中定义了对第二资源转移接口具有调用权限的第二合约角色,并且该第二合约角色已经被授权至目标智能合约的情况下,区块链节点可以调用区别于目标智能合约中的另一智能合约中对应于第二资源转移接口的合约代码从而完成对第二资源的转移,第一资源转移接口和第二资源转移接口可以属于区别于目标智能合约的同一智能合约中,第一资源转移接口和第二资源转移接口也可以属于区别于目标智能合约的不同智能合约中,本说明书中并不对此进行限制。
由以上技术方案可见,本说明书中可以接收到第一处理方发起的用于调用目标智能合约的区块链交易,可以通过调用第一资源转移接口从第一处理方对应的区块链账户向第二处理方对应的区块链账户转移第一类型的第一资源,可以通过调用第二资源转移接口可以从第二处理方对应的区块链账户向第三处理方对应的区块链账户转移第二类型的第二资源,从而可以由第一处理方发起区块链交易,即可完成对第一类型的第一资源和第二类型的第二资源的转移,可以将相应的合约角色授权给目标智能合约,并由目标智能合约在执行过程中使用该合约角色调用新的接口,可以提升资源转移的效率,可以保证资源转移过程的安全性。
为了便于理解,下面结合附图5对本说明书的技术方案进行进一步说明。图5是本说明书一示例性实施例一种调用智能合约的方法的流程图。如图5所示,可以包括以下步骤:
步骤502,为目标智能合约A中定义的目标接口配置合约角色。
在本实施例中,区块链节点可以接收区块链交易,该区块链交易中包含目标智能合约A的合约地址和为目标智能合约A中定义的SetRole接口配置合约角色Admin,为目标智能合约A中定义的BuyVIP接口配置合约角色User,为目标智能合约A中定义的VipFunc接口配置合约角色Vip。该目标智能合约A中定义有合约角色:User、Vip和Admin。例如,该区块链交易中的代码可以为:
ContractA{
Roles{
User,
Vip,
Admin
}
interface SetRole()with[Admin]
interface BuyVIP()with[User]
interface VipFunc(args...)with[Vip]
}
区块链节点可以根据区块链交易中的合约地址调用目标智能合约A,以通过执行该目标智能合约A的合约代码为上述目标接口SetRole接口、BuyVIP接口和VipFunc接口配置对应的合约角色,合约角色拥有对相应的合约接口的调用权限。即目标智能合约A中的目标接口SetRole接口允许合约角色Admin访问,目标智能合约A中的目标接口BuyVIP接口允许合约角色User访问,以及目标智能合约A中的目标接口VipFunc接口允许合约角色Vip访问。其中,合约角色可以被记录于目标智能合约A对应的区块链账户中,如图6A所示。
步骤504,为用户账户B授权合约角色。
步骤506,为授权请求方C授权合约角色。
在本实施例中,区块链节点可以接收目标智能合约A的管理员账户发起的区块链交易,该交易中可以包含目标智能合约A的合约地址、针对目标智能合约A中定义的合约角色User和合约角色Vip的授权和授权对象为用户账户B。
区块链节点可以根据合约地址调用目标智能合约A,通过执行该目标智能合约A相应的授权接口为用户账户B授权目标智能合约A的合约角色。从而使得用户账户B拥有智能合约A的合约角色User和合约角色Vip,可以记为Acc ount[B].Contract[A].Roles=[User,Vip]。
在本实施例中,区块链节点还可以接收到授权请求方C发起的区块链交易,该交易中包含目标智能合约A的合约地址、针对目标智能合约A中定义的合约角色Vip的授权请求消息、交互资源量为X和目标交互对象设定为目标智能合约A。
区块链节点可以根据合约地址调用目标智能合约A,可以通过执行目标智能合约A的合约代码将账户资源X从授权请求方C对应的区块链账户转移至目标智能合约A对应的区块链账户,并在完成账户资源X的转移后为授权请求方C授权合约角色Vip,可以记为Account[C].Contract[A].Roles=[Vip]。其中,合约角色可以被记录于授权请求方C对应的区块链账户中,如图6B所示。其中授权请求方C对应的区块链账户有一个Root子账户,该Root子账户可以使用授权请求方C被授权的所有合约角色。
步骤508,用户账户B为用户账户Zhangsan和用户账户Lisi授权合约角色。
在本实施例中,区块链节点可以接收到用户账户B发起的区块链交易,该交易中包含用于角色授权的智能合约D的合约地址、将合约角色Vip授权给用户账户Zhangsan、将合约角色Admin授权给用户账户Lisi和目标智能合约A的合约地址。用于角色授权的智能合约D为区别于目标智能合约的另一智能合约,那么用于角色授权的智能合约D可以将目标智能合约A中定义的合约角色分别授权给用户账户Zhangsan和用户账户Lisi。
区块链节点可以根据合约地址调用该用于角色授权的智能合约D,可以通过执行该智能合约D的合约代码分别为用户账户Zhangsan授权合约角色Vip和为用户账户Lisi授权合约角色Admin,可以记为Account[B].Subaccount[Zhangsan].Roles=[ContractA.Vip]和Account[B].Subaccount[Lisi].Roles=[ContractA.Admin]。用户账户B将合约角色授权至用户账户Zhangsan和用户账户Lisi可以记录于用户账户B对应的区块链账户中,如图7所示。
步骤510,用户账户Zhangsan访问目标智能合约A的目标接口。
步骤512,用户账户Lisi访问目标智能合约A的目标接口。
在本实施例中,区块链节点可以接收到用户账户Zhangsan发起的一区块链交易,该区块链交易用于调用目标智能合约A中定义的SetRole接口、BuyVIP接口或者VipFunc接口。同样的,用户账户Lisi也可以发起相应的区块链交易。
区块链节点可以根据用户账户Zhangsan和用户账户Lisi在发起的区块链交易中申明其使用的合约角色由用户账户B授权或者区块链节点还可以根据区块链中记录的区块链交易分别确定用户账户Zhangsan和用户账户Lisi对应的角色管理方即用户账户B,本说明书中并不对此进行限定。
步骤514,确定用户账户B、用户账户Zhangsan和用户账户Lisi被授权的合约角色。
步骤516,确定目标智能合约的目标接口被配置的合约角色。
在本实施例中,区块链节点可以从接收到的用户账户Zhangsan发起的区块链交易中读取到用户账户Zhangsan使用的合约角色,同样的,区块链节点可以从接收到的用户账户Lisi发起的区块链交易中读取到用户账户Lisi使用的合约角色,确定出用户账户Zhangsan使用的合约角色为“Vip”,用户账户Lisi使用的合约角色为“Admin”。
区块链节点可以从用户账户B对应的区块链账户中获取用户账户B被授权的目标智能合约A的合约角色,用户账户B被授权的合约角色为“User,Vip”。区块链节点可以通过目标智能合约A对应的区块链账户获取目标智能合约A中目标接口被配置的合约角色,可以获取目标智能合约A的SetRole接口被配置的合约角色为“Admin”,BuyVIP接口被配置的合约角色为“User”,VipFunc接口被配置的合约角色为“Vip”。
步骤518,确定能否调用相应的目标接口。
在本实施例中,区块链节点可以校验用户账户使用的合约角色、角色管理方拥有的合约角色和目标智能合约对应的目标接口被配置的合约角色三者之间的交集是否为空,在三者的合约角色的交集为空的情况下,区块链节点不允许用户账户调用相应的目标智能合约的目标接口;在三者的合约角色的交集不为空的情况下,区块链节点可以允许用户账户调用相应的目标智能合约的目标接口。
在本实施例中,用户账户Zhangsan和用户账户Lisi分别访问目标智能合约A的SetRole接口、BuyVIP接口和VipFunc接口的过程中,区块链节点的校验过程如下:
1.用户账户Zhangsan访问SetRole接口:
2.用户账户Zhangsan访问BuyVIP接口:
3.用户账户Zhangsan访问VipFunc接口:[Vip]∩[User,Vip]∩[Vip]=[Vip],访问通过;
4.用户账户Lisi访问SetRole接口:
5.用户账户Lisi访问BuyVIP接口:
6.用户账户Lisi访问VipFunc接口:
在本实施例中,用户账户Zhangsan可以调用目标智能合约A中的VipFunc接口。而由于角色管理方即用户账户B未被授权目标智能合约A中的定义的合约角色Admin,因而即便用户账户B调用了用于角色授权的智能合约D为用户账户Lisi授权了合约角色Admin,用户账户Lisi也没有调用目标智能合约A中相应的目标接口的权限。
当然,在本实施例中,若用户账户发起的区块链交易中未记录用户账户使用的合约角色,区块链节点可以从用户账户对应的区块链账户中获取该用户账户被授权的所有的合约角色,区块链节点可以校验用户账户被授权的所有合约角色、角色管理方拥有的合约角色和目标智能合约对应的目标接口被配置的合约角色三者之间的交集是否为空,本说明书中并不对此进行限制。用于角色授权的智能合约D可以为区别于所述目标智能合约A的其他智能合约,或者用于角色授权的智能合约D与目标智能合约A可以为同一智能合约,本说明书中并不对此进行限制。
此外,由目标智能合约的管理员账户发起的区块链交易为用户账户授权合约角色的情况下,区块链节点可以校验用户账户被授权的合约角色、管理员账户拥有的合约角色和目标智能合约对应的目标接口被配置的合约角色三者之间的交集是否为空。在授权请求方发起区块链交易为授权请求方授权合约角色的情况下,区块链节点可以校验授权请求方被授权的合约角色和目标智能合约对应的目标接口被配置的合约角色两者之间的交集是否为空等,本说明书中并不对此进行限制。
为了便于理解,下面结合附图8,以资源转移为例对本说明书的技术方案进行进一步说明。如图9所示,用户a通过中间商b向用户c转移对应的资源,而该过程分为两部分:用户a需要向中间商b转移对应的第一类型的第一资源X,中间商b需要向用户c转移对应第二类型的第二资源Y。这一过程需要调用目标智能合约Z相应的目标接口Remit接口,Remit接口被配置的合约角色为User,而通过调用目标接口Remit接口,可以执行智能合约Z1中对应于第一资源转移接口Transfer01接口的合约代码和执行智能合约Z2中对应于第二资源转移接口Transfer02接口的合约代码,其中,Transfer01接口被配置的合约角色为Holder01,Transfer02接口被配置的合约角色为Holder02。智能合约Z1的第一资源转移接口可以完成第一类型的资源的转移,智能合约Z2可以完成第二类型的资源的转移。用户a被授权的合约角色有:User、Holder01,中间商b被授权的合约角色有Holder02,中间商b可以将合约角色Holder02授权至目标智能合约Z。如图8是本说明书一示例性实施例提供的一种调用智能合约的方法的流程图,可以包括以下步骤:
步骤802,用户a发起调用目标智能合约Z的区块链交易。
在本实施例中,区块链节点可以接收到用户a发起的用于调用目标智能合约Z的区块链交易,该区块链交易中可以包含目标智能合约Z的合约地址、用户a需要向中间商b转移对应的第一类型的第一资源X和中间商b需要向用户c转移对应第二类型的第二资源Y等。
区块链节点可以从用户a对应的区块链账户中获取用户a被授权的合约角色:User、Holder01。那么区块链节点在确定用户a被授权了对目标智能合约Z的Remit接口具有调用权限的合约角色User的情况下,区块链节点可以调用该Remit接口以实现资源转移的功能。
其中,区块链节点通过调用Remit接口,可以执行智能合约Z1中对应于第一资源转移接口Transfer01接口的合约代码和执行智能合约Z2中对应于第二资源转移接口Transfer02接口的合约代码。
步骤804,转移第一资源X和转移第二资源Y。
在本实施例中,区块链节点可以从用户a对应的区块链账户中获取用户a被授权的合约角色有Holder01。区块链节点在确定区块链交易的发起者用户a被授权了对智能合约Z1的Transfer01接口具有调用权限的合约角色的情况下,区块链节点可以调用对应于第一资源转移接口Transfer01的合约代码以完成将第一类型的第一资源X从用户a对应的区块链账户中转移至中间商b对应的区块链账户中。
在本实施例中,区块链节点可以确定中间商b将合约角色Holder02授权给了目标智能合约Z。区块链节点在确定目标智能合约Z被授权了对智能合约Z2的Transfer02接口具有调用权限的合约角色的情况下,区块链节点可以调用对应于第二资源转移接口Transfer02的合约代码以完成将第二类型的第二资源Y从中间商b对应的区块链账户中转移至用户c对应的区块链账户中。其中,转移第一资源X和转移第二资源Y的过程可以同时进行。
在本实施例中,中间商b可以通过将合约角色Holder02授权至目标智能合约Z,使得目标智能合约Z可以在执行过程中以中间商b的身份发起一个新的接口调用,从而可以完成资源转移即用户a通过中间商b向用户c转移对应的资源,这一过程中不再需要中间商b再重新发起区块链交易来完成中间商b向用户c转移对应的资源,可以提升资源转移的效率,可以保证资源转移过程的安全性。
由以上技术方案可见,本说明书中通过为目标智能合约中的目标接口配置合约角色,区块链节点可以根据接收到的区块链交易为相应的对象授权合约角色,使得该对象被授权了相应的合约角色的情况下,可以调用目标接口以实现预设功能,智能合约与账户之间建立相应的访问控制机制,便于开发人员的开发和维护,通过合约角色将智能合约的目标接口与区块链账户关联起来,可以实现对账户权限的管理,可以实现对目标接口的调用权限的管理,并且通过为不同的对象授权不同的权限,从而便于在不同的对象请求访问目标接口时实现访问控制与管理,提升了对目标接口的调用效率,并保证了目标接口对应的预设功能的安全性。
图10示出了根据本说明书的一示例性实施例的电子设备的结构示意图。请参考图10,在硬件层面,该电子设备包括处理器1002、内部总线1004、网络接口1006、内存1008以及非易失性存储器1010,当然还可能包括其他业务所需要的硬件。处理器1002从非易失性存储器1010中读取对应的计算机程序到内存1008中然后运行,在逻辑层面上形成智能合约调用装置。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图11,在软件实施方式中,该业务处理装置可以包括确定单元1102、第一接口调用单元1104。其中:
确定单元1102,用于确定调用请求方针对目标智能合约中定义的目标接口的调用需求;
第一接口调用单元1104,用于在所述目标智能合约中定义了对所述目标接口具有调用权限的合约角色,且所述合约角色被授权至所述调用请求方的情况下,调用所述目标接口以实现相应的预设功能。
可选的,所述确定单元1102具体用于:
在所述调用请求方为客户端的情况下,若接收到所述调用请求方发起的第一区块链交易,且第一区块链交易用于调用所述目标智能合约中定义的所述目标接口,则确定所述客户端针对所述目标接口的调用需求;
在所述调用请求方为第二区块链交易调用的特定智能合约的情况下,若所述第二区块链交易指示所述特定智能合约调用所述目标智能合约中定义的所述目标接口,则确定所述特定智能合约针对所述目标接口的调用需求。
可选的,所述特定智能合约区别于所述目标智能合约;或者,所述特定智能合约为所述目标智能合约。
可选的,所述第一接口调用单元1104具体用于:
所述合约角色被所述目标智能合约授权至所述调用请求方;或者,所述合约角色被所述目标智能合约授权至角色管理方,并被所述角色管理方授权至所述调用请求方。
可选的,所述第一接口调用单元1104具体用于:
所述合约角色被所述目标智能合约授权至所述调用请求方,包括:所述合约角色被记录于所述目标智能合约对应的区块链账户中,且所述目标智能合约将所述合约角色授权至所述调用请求方的授权信息被记录于所述请求方对应的区块链账户中;
所述合约角色被所述目标智能合约授权至角色管理方,并被所述角色管理方授权至所述调用请求方,包括:所述合约角色被记录于所述目标智能合约对应的区块链账户中,且所述目标智能合约将所述合约角色授权至所述角色管理方的授权信息与所述角色管理方将所述合约角色授权至所述调用请求方的授权信息均被记录于所述角色管理方的对应的区块链账户中。
可选的,第一接口调用单元1104:
通过调用所述目标接口,执行所述目标智能合约中对应于所述目标接口的目标合约代码;或者,通过调用所述目标接口,执行区别于所述目标智能合约的另一智能合约中对应于所述目标接口的目标合约代码。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
请参考图12,在软件实施方式中,该业务处理装置可以包括第一接收单元1202、第一智能合约调用单元1204。其中:
第一接收单元1202,用于接收区块链交易,所述交易中包含目标智能合约的合约地址和针对所述目标智能合约中定义的目标接口的角色配置信息;
第一智能合约调用单元1204,用于根据所述合约地址调用所述目标智能合约,以通过执行所述目标智能合约的合约代码为所述目标接口配置相应的合约角色,所述合约角色拥有对所述目标接口的调用权限。
可选的,还包括:
第四接收单元1206,用于接收区块链交易,所述交易中包含目标智能合约的合约地址、针对目标智能合约中定义的合约角色的角色授权信息和授权对象;
第二智能合约调用单元1208,用于根据所述合约地址调用所述目标智能合约,以通过执行所述目标智能合约的合约代码为所述授权对象授权相应的合约角色。
可选的,还包括:
第五接收单元1210,用于接收授权请求方发起的区块链交易,所述交易中包含目标智能合约的合约地址、针对目标智能合约中定义的合约角色的授权请求信息、交互资源量和目标交互对象的信息;
第三智能合约调用单元1212,用于根据所述合约地址调用所述目标智能合约,以通过执行所述目标智能合约的合约代码将对应于所述交互资源量的账户资源从所述授权请求方对应的区块链账户转移至所述目标交互对象对应的区块链账户并为所述授权请求方授权相应的合约角色。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
请参考图13,在软件实施方式中,该业务处理装置可以包括第二接收单元1302、第二智能合约调用单元1304。其中:
第二接收单元1302,用于接收角色管理方发起的区块链交易,所述交易中包含用于角色授权的智能合约的合约地址、针对合约角色的角色授权信息和授权对象的信息,所述合约角色由目标智能合约针对所述目标智能合约中的目标接口而定义;
第二智能合约调用单元1304,用于根据所述合约地址调用所述用于角色授权的智能合约,以通过执行所述用于角色授权的智能合约的合约代码为所述授权对象授权相应的合约角色。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
请参考图14,在软件实施方式中,该业务处理装置可以包括第三接收单元1402、第二接口调用单元1404和第三接口调用单元1406。其中:
第三接收单元1402,用于接收第一处理方发起的用于调用目标智能合约的区块链交易,以通过所述目标智能合约中定义的第一资源转移接口从所述第一处理方对应的区块链账户向第二处理方对应的区块链账户转移第一类型的第一资源、通过所述目标智能合约中定义的第二资源转移接口从所述第二处理方对应的区块链账户向第三处理方对应的区块链账户转移第二类型的第二资源;
第二接口调用单元1404,用于在确定所述第一资源转移接口被配置了具有调用权限的第一合约角色,且所述第一合约角色被授权至所述第一处理方的情况下,调用对应于所述第一资源转移接口的合约代码以完成对第一资源的转移;
第三接口调用单元1406,用于在确定所述第二资源转移接口被配置了具有调用权限的第二合约角色,且所述第二合约角色被授权至所述目标智能合约的情况下,调用对应于所述第二资源转移接口的合约代码以完成对第二资源的转移。
可选的,所述第二接口调用单元1404具体用于:
在所述目标智能合约中定义了所述第一资源转移接口的情况下,确定所述目标智能合约中定义的对所述第一资源转移接口具有调用权限的第一合约角色;或者,在区别于所述目标智能合约的另一智能合约中定义了所述第一资源转移接口的情况下,确定所述智能合约中定义的对所述第一资源转移接口具有调用权限的第一合约角色。
可选的,所述第三接口调用单元1406具体用于:
在所述目标智能合约中定义了所述第二资源转移接口的情况下,确定所述目标智能合约中定义的对所述第二资源转移接口具有调用权限的第二合约角色;或者,在区别于所述目标智能合约的另一智能合约中定义了所述第一资源转移接口的情况下,确定所述智能合约中定义的对所述第二资源转移接口具有调用权限的第二合约角色。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
- 一种可插拔智能合约虚拟机系统、及智能合约的调用方法
- 智能合约执行与跨合约调用方法、装置及存储介质