用于智能合约的软件接口的制作方法

文档序号:20275199发布日期:2020-04-03 19:33阅读:186来源:国知局
用于智能合约的软件接口的制作方法

本文涉及提供用于调用智能合约的软件接口。



背景技术:

分布式账本系统(dls),也可以被称为共识网络和/或区块链网络,使得参与的实体能够安全地并且不可篡改地存储数据。在不引用任何特定用例的情况下,dls通常被称为区块链网络。区块链网络的类型的示例可以包括公有区块链网络、私有区块链网络和联盟区块链网络。联盟区块链网络针对选择的实体组群提供,该实体组群控制共识过程,并且联盟区块链网络包括访问控制层。

智能合约是具有用于区块链网络上的各方的预定义规则集的软件指令集。智能合约由区块链网络的节点执行,并且设置智能合约的所有各方同意彼此交互的条件。另外,如果并当满足智能合约的每个条件时,可以执行智能合约。虽然智能合约减轻了对可信第三方的需要,但是执行来自软件应用程序的智能合约或智能合约的一个或多个函数也是冗长、谨慎且易出错的处理。允许软件应用程序的开发者以更透明且较不繁重的方式执行智能合约函数是所期望的。



技术实现要素:

本文的实施方式包括计算机实现的提供用于调用智能合约的软件接口的方法。更具体地说,本文的实施方式涉及生成用于智能合约调用的简化框架。分析区块链结构,并生成一个或多个软件库,所述软件库包括与存储在区块链中的智能合约相对应的函数。这些函数可从软件应用程序中调用以启动智能合约函数(functionality)的执行,从而大大简化了从标准软件应用程序访问智能合约函数的处理。

本文还提供了耦接到一个或多个处理器并且其上存储有指令的一个或多个非暂态计算机可读存储介质,当所述指令由一个或多个处理器执行时,所述指令促使所述一个或多个处理器根据本文提供的方法的实施方式执行操作。

本文还提供了一种用于实现本文提供的方法的系统。所述系统包括一个或多个处理器,以及耦接到所述一个或多个处理器并且其上存储有指令的计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令促使所述一个或多个处理器根据本文提供的方法的实施方式执行操作。

应当理解,根据本文的方法可以包括本文描述的方面和特征的任何组合。也就是说,根据本文的方法不限于本文具体描述的方面和特征的组合,还包括所提供的方面和特征的任何组合。

在附图和以下描述中阐述了本文的一个或多个实施方式的细节。从说明书和附图以及权利要求书来看,本文的其他特征和优点将显而易见。

附图说明

图1描绘了可用于执行本文实施方式的环境的示例。

图2描绘了根据本文实施方式的概念性架构的示例。

图3描绘了可被用于生成用于执行智能合约调用的框架的环境的示例。

图4描绘了可以根据本文实施方式执行的处理的示例。

图5描绘了根据本文实施方式的装置的模块的示例。

在各个附图中,相同的附图标记表示相同的元件。

具体实施方式

本文的实施方式包括计算机实现的用于智能合约的方法。更具体地说,本文的实施方式涉及生成用于智能合约调用的简化框架。在一些实施方式中,动作包括:从区块链网络检索智能合约定义,所述智能合约定义包括来自多个智能合约的多个合约函数,所述多个智能合约存储在由区块链网络维护的区块链中;生成表示所述智能合约定义的智能合约接口,所述智能合约接口包括与所述多个合约函数相对应的多个接口函数,所述智能合约接口被配置为允许软件应用程序通过调用相应的接口函数来调用每个所述合约函数;从软件应用程序接收对特定接口函数的调用,所述调用包括与对应于所述特定接口函数的特定合约函数的参数相对应的调用参数;响应于接收到对特定接口函数的调用,生成包括调用参数的对特定合约函数的智能合约调用;向所述区块链网络发送所述智能合约调用;以及接收由所述区块链网络执行所述智能合约调用得到的结果,并向所述软件应用程序提供所述结果。

为本文的实施方式提供进一步的背景,并且如上所述,分布式账本系统(dls),也可以被称为共识网络(例如,由点对点节点组成)和区块链网络,使得参与的实体能够安全地、不可篡改地进行交易、存储数据、以及与智能合约通信。在不参考任何特定用例的情况下,本文所用术语“区块链”通常指dls。如上所述,区块链网络可被提供为公有区块链网络、私有区块链网络或者联盟区块链网络。

在公有区块链网络中,共识处理由共识网络的节点控制。例如,数百、数千、甚至数百万个实体可以协作公有区块链网络,每个实体操作公有区块链网络中的至少一个节点。因此,公有区块链网络可以被认为是关于参与实体的公有网络。在一些示例中,大多数实体(节点)必须对每个区块签名以使该区有效,并被添加到区块链网络的区块链(分布式账本)中。公有区块链网络的示例包括为点对点支付网络的加密货币网络。加密货币网络利用被称为区块链的分布式账本。然而,如上所述,术语“区块链”通常是指分布式账本,而不特别指代加密货币网络。

通常,公有区块链网络支持公开交易。公开交易为公有区块链网络内的所有节点共享,并且被存储在全局区块链中。全局区块链是跨所有节点复制的区块链。也就是说,所有节点相对于全局区块链处于完全共识状态。为了达成共识(例如,同意向区块链添加区块),在公有区块链网络内实施共识协议。共识协议的示例包括但不限于,在加密货币网络中实施的工作量证明(pow)。

通常,为特定实体提供私有区块链网络,该特定实体集中控制读写权限。实体控制哪些节点能够参与到区块链网络中。因此,私有区块链网络通常被称为许可网络,其限制允许谁参与网络,以及他们的参与级别(例如,仅在某些交易中)。可以使用各种类型的访问控制机制(例如,现有参与者投票添加新实体,管理机构可以控制准入)。

通常,联盟区块链网络在参与的实体之间是私有的。在联盟区块链网络中,共识处理由一组被授权的节点控制,一个或多个节点由相应实体(例如,金融机构、保险公司)操作。例如,由十(10)个实体(例如,金融机构、保险公司)组成的联盟可以操作联盟区块链网络,每个实体操作联盟区块链网络中的至少一个节点。因此,关于参与的实体,联盟区块链网络可以被认为是私有网络。在一些示例中,每个区块必须经每个实体(节点)签名才能有效并被添加到区块链中。在一些示例中,每个区块必须经至少实体(节点)的子集(例如,至少7个实体)签名才能有效并被添加到区块链中。

本文参考公有区块链网络进一步详细描述本文的实施方式,所述公有区块链网络在参与的实体之间是公有的。然而,可以预期,本文的实施方式可以在任何适当类型的区块链网络中实现。

在一些实施方式中,区块链网络可包括一个或多个智能合约。通常,智能合约是存储在区块链中并由区块链网络中的节点执行的一个或多个计算机指令集(作为智能合约定义)。智能合约的代码通常被转换成可由区块链网络中的节点执行的形式(例如,字节码),并且所述字节码本身或被配置成检索所述智能合约字节码的字节码被存储在区块链中。然后,在智能合约代码中定义的函数可以被区块链网络中的参与者调用,使得节点执行所调用的函数中的指令。对智能合约的“调用”是由区块链网络中的参与者(例如,用户、客户端、区块链节点或其他实体)对执行智能合约的请求。

当区块链网络中的参与者调用存储在区块链中的智能合约时,区块链网络以共识方式执行智能合约的每个指令。例如,响应于对智能合约的调用,区块链网络中的每个节点执行智能合约的第一指令。区块链网络中的完成执行智能合约的第一指令的第一节点将执行结果(例如,智能合约的更新执行状态)写入区块链。区块链网络中的其他节点可以验证第一节点执行第一指令的结果。如果区块链网络中的其他节点验证了第一节点执行第一指令的结果(例如,其他节点根据执行第一指令产生相同的结果),则每个节点继续执行智能合约的第二指令。重复该处理,直到智能合约的每个指令都已被执行和验证。

如下所述,本文描述了用于生成允许在软件程序的执行期间调用智能合约的软件库的技术。特别地,软件库可以被结合到开发者的应用程序中,供开发者调用一个或多个相应的智能合约调用,如同开发者正在调用本地函数调用一样。例如,智能合约调用可以看起来类似于“functionname(int1,int2,char“input,”char“input2”)”。软件库可以包括执行智能合约的函数调用和执行智能合约的一个或多个函数的函数调用。这样,开发者不是必须生成要在网络间发送的网络消息,以在区块链网络上执行智能合约函数或智能合约本身;而是开发者可仅生成对在区块链网络上执行智能合约的软件库中的函数的本地调用。软件库可以将本地调用转换为网络调用,并将该网络调用发送到区块链网络以执行智能合约的函数。软件库中所包含的函数可以与区块链网络上的智能合约的函数定义相匹配。

这对于开发者可以是有益的。库(例如,智能合约接口)是基于区块链中的定义生成的,并且可以响应于区块链中的变化(例如,正在创建新智能合约)频繁地或自动地更新。因此,这些库可以轻松地与区块链的状态保持同步。此外,通过将包括对智能合约的函数调用和对对应于智能合约的函数的函数调用的软件库合并到应用程序中,开发者可以调用用于智能合约和对应函数的软件库的函数。开发者可以在他/她的应用程序中进行智能合约调用和智能合约函数调用,就像开发者正在进行本地调用一样。

此外,当在软件库中组织对智能合约和智能合约函数的调用时,开发者可以将这些软件库快速合并到开发者期望的任何应用程序中。这在各种应用程序中在区块链网络上执行智能合约方面给予用户灵活性。

图1描绘了可以用于执行本文实施方式的环境100的示例。在一些示例中,环境100使得实体能够参与到联盟区块链网络102中。环境100包括计算系统106、108和网络110。在一些示例中,网络110包括局域网(lan)、广域网(wan)、因特网或其组合,并且连接网站、用户设备(例如,计算设备)和后台系统。在一些示例中,网络110可以通过有线和/或无线通信链路访问。在一些示例中,网络110使得与区块链网络102通信以及在区块链网络102内部进行通信成为可能。通常,网络110表示一个或多个通信网络。在一些情况下,计算系统106、108可以是云计算系统(未示出)的节点,或者每个计算系统106、108可以是单独的云计算系统,包括通过网络互连的多个计算机并且作为分布式处理系统起作用。

在所描述的示例中,计算系统106、108可以各自包括能够作为节点参与至联盟区块链网络102中的任何适当计算系统。计算设备的示例包括但不限于服务器、台式计算机、膝上型计算机、平板计算设备和智能电话。在一些示例中,计算系统106、108承载一个或多个由计算机实施的服务,用于与联盟区块链网络102交互。例如,计算系统106可以承载第一实体(例如,用户a)的由计算机实施的、例如交易管理系统的服务,第一实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。计算系统108可以承载第二实体(例如,用户b)的由计算机实施的、例如交易管理系统的服务,第二实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。在图1的示例中,联盟区块链网络102被表示为节点的点对点网络(peer-to-peernetwork),并且计算系统106、108分别提供参与联盟区块链网络102的第一实体和第二实体的节点。

图2描绘了根据本文实施方式的概念性架构200的示例。概念性架构200包括实体层202、承载服务层204和区块链网络层206。在所描述的示例中,实体层202包括三个实体,实体1(e1)、实体2(e2)和实体3(e3),每个实体具有各自的交易管理系统208。

在所描述的例子中,承载服务层204包括用于每个交易管理系统210的接口210。在一些示例中,相应的交易管理系统208使用协议(例如,超文本传输协议安全(https))通过网络(例如,图1的网络110)与相应的接口210通信。在一些示例中,每个接口210提供相应交易管理系统208与区块链网络层206之间的通信连接。更具体地说,接口210与区块链网络层206的区块链网络212通信。在一些示例中,接口210与区块链网络层206之间的通信是使用远程过程调用(rpc)进行的。在一些示例中,接口210“承载”用于各自的交易管理系统208的区块链网络节点。例如,接口210提供用于访问区块链网络212的应用编程接口(api)。

如本文所述,提供作为点对点网络的区块链网络212,包括将信息不可篡改地记录在区块链216中的多个节点214。尽管示意性地描述了单个区块链216,但在区块链网络212上提供并维护了区块链216的多个副本。例如,每个节点214存储区块链的副本。在一些实施方式中,区块链216存储与交易相关联的信息,该交易是在参与联盟区块链网络的两个或多个实体之间执行的。

图3描绘了可被用于生成用于执行智能合约调用的框架的环境300的示例。环境300可包括一个或多个软件应用程序302、智能合约接口304、接口生成器308、区块链网络212、区块链网络212中的多个节点214、以及单个区块链216。环境300可以在客户端设备上实现,或者跨本地连接或通过因特网连接的一个或多个计算机实现。

在一些实施方式中,接口生成器308与区块链网络212通信。在对客户端设备加电时,接口生成器308从区块链网络212检索数据。例如,接口生成器308检索表示一个或多个智能合约的数据、用于调用来自区块链网络212的智能合约的一个或多个定义、用于调用来自区块链网络212的智能合约函数的一个或多个定义、以及描述区块链网络212的特性。例如,表示一个或多个智能合约的数据可以包括智能合约的数量和智能合约的类型。所述特性可以包括多个节点214的数量、每个节点的地址、以及由多个节点214使用的账本。

接口生成器308从区块链网络212检索该信息,且作为响应,生成智能合约接口304以向开发者提供在他/她的各自应用程序中调用智能合约调用。智能合约接口304可以包括例如一个或多个软件库、用户接口、或至软件函数调用位置的链接。接口生成器308为智能合约接口304加载函数定义,以供开发者用来在他/她自己的例如软件应用程序302的软件中实例化智能合约调用。

智能合约接口304可以包括一个或多个软件库,从而例如可以允许开发者调用在区块链网络212上找到的智能合约的一个或多个函数。这样,开发者可通过调用智能合约接口304的一个或多个函数306,与在区块链网络212上找到的一个或多个智能合约交互。

开发者可以将对智能合约的一个或多个调用或对智能合约函数的调用合并到他/她的软件应用程序302中。特别地,软件应用程序302可以是开发者期望的任何应用程序,例如,多媒体软件、演示软件、仿真软件、以及用于工程和产品开发的软件,仅举几例。另外,软件可与诸如供应链、电子政府(egoverment)、游戏、银行和保险、能源部门、物联网(iot)、数字身份和法律技术等应用程序相关,仅举几例。软件应用程序302可以以c++、c、javascript、python、perl或其他软件语言来编写,仅举几例。

在一些实施方式中,开发者可以将对智能合约接口304的函数306的调用并入软件应用程序302中。例如,开发者可以将智能合约接口304的库、智能合约接口304的多个库、或智能合约接口304本身导入到软件应用程序302中。通过将这些库并入软件应用程序302中,开发者可根据他/她的需要调用由这些库(例如,智能合约接口304)提供的一个或多个函数。开发者可查阅由所导入的智能合约接口304提供的一个或多个函数306的函数定义,以确定如何在他/她的软件应用程序302中进行函数调用。另外,智能合约接口304可以指示开发者可以如何进行位于区块链网络212上的智能合约调用。

智能合约接口304可以包括对应于函数306的类定义的集合。这些类定义示出了开发者如何能够调用他/她的软件应用程序302中的代码以调用函数306。例如,对于试图调用智能合约调用的开发者,开发者不必分析区块链网络212上的智能合约来确定生成智能合约调用所需的参数和参数的类型。而是,开发者可查看智能合约接口304中的智能合约定义,例如通过其头文件,来确定如何调用位于区块链网络212上的智能合约调用。一旦开发者分析了智能合约接口304中的智能合约定义,开发者就可以将该智能合约定义作为一个函数调用并入他/她的软件应用程序中,以执行所需函数。例如,智能合约接口304允许开发者通过使用他/她的软件应用程序302执行所需函数,包括生成新智能合约、创建智能合约的一个或多个新函数/方法、调用区块链网络212上先前部署的智能合约、以及调用区块链网络212上先前部署的智能合约的一个或多个函数/方法,仅举几例。

在一些实施方式中,开发者可通过与智能合约接口304交互(interface)在他/她的软件应用程序302中创建智能合约。具体地,接口304允许开发者编写执行对智能合约接口304的本地调用的软件,以执行一个或多个函数306。例如,一个或多个函数306可包括调用存在于区块链网络212上的先前部署的智能合约、在区块链网络212上找到的智能合约的一个或多个函数、或调用区块链网络212上的新智能合约。在一些实施方式中,区块链网络212可包括多个智能合约,每个智能合约具有其自己的函数306的集。智能合约接口304允许用户调用在区块链网络212上找到的每个智能合约以及每个智能合约的每个函数。

如智能合约接口304所定义的,在区块链网络212上找到的每个智能合约可以包括开发者可以调用的可变数量的函数和/或方法。为了使开发者访问先前部署的智能合约及其相应函数,开发者必须提供用于智能合约调用的输入。例如,智能合约接口304可以使用应用程序二进制接口(abi)来调用区块链网络212上的智能合约,以使用区块链网络212上的智能合约的函数进行通信,并接收来自智能合约的数据。通过利用abi软件,开发者可以指定在其软件应用程序中调用智能合约中的哪个函数,以及保证该函数将以开发者期望的格式返回数据。

为了执行智能合约调用,用户在他/她的软件应用程序302中指定智能合约的参数。智能合约参数可具有不同的数据类型。例如,智能合约参数可以包括加密签名、布尔值、整数值、哈希值、字节数组、密钥、字符串值、数据地址、网络地址、端口号、用户标识符、函数标识符和其他类型的参数。

在一些实施方式中,智能合约接口304帮助开发者调用一个或多个函数306。智能合约接口304可以预填充来自软件应用程序302的智能合约调用的一个或多个输入。例如,智能合约调用可要求开发者输入五个输入:所述输入包括如该智能合约调用的函数定义所描述的字符串类型、int类型、char类型、int*类型和char*类型。智能合约接口304可以指示开发者只需要输入字符串类型和char*类型的输入。字符串类型可以对应于智能合约的名称,char*类型对应于被用于存储要被传递到区块链网络212上的智能合约的数据的缓冲器。智能合约接口304可以自动填充剩余的三个输入。

在一些实施方式中,智能合约接口304可以向开发者显示智能合约函数的定义及一个或多个智能合约的定义的代表性形式。例如,所述代表性形式可包括解释文件、头文件、供开发者查阅的库文件、以及指示开发者如何调用智能合约及其相应函数的手册。

在一些实施方式中,智能合约接口304可以对开发者在软件应用程序302中输入的参数执行参数转换。智能合约接口304将开发者输入的由头文件中的函数定义所定义的参数转换成例如调用区块链网络212上的智能合约所需的输入。例如,智能合约接口304可以将用户在接口304上输入的每个串值或字符值转换成输入智能合约调用所需的字节u_int8和u_int32值。智能合约接口304可以执行参数转换,以减少开发者需要在他/她的软件应用程序302中输入的输入数量。例如,智能合约接口304可以只要求开发者输入五个输入以调用区块链网络212上的智能合约。当智能合约接口304接收到针对该智能合约的具有五个输入的调用时,智能合约接口304可以生成新命令以调用区块链网络212上的智能合约。例如,智能合约接口304向区块链网络中的每个节点发送具有十个输入的函数调用。另外的五个输入可以是由智能合约接口304输入的标准化的输入,其包括一个或多个地址、端口号、用户名以及与智能合约调用有关的其他信息。

另外,智能合约接口304可以响应于接收到来自软件应用程序302的对智能合约的调用,执行表查找以生成在区块链网络212上的智能合约调用。例如,开发者可在软件应用程序302中提供智能合约调用,且在执行时,智能合约接口304可从数据库中检索对区块链网络212的智能合约调用所需的一个或多个参数。这允许开发者在他/她的软件应用程序302中输入最少量的用于智能合约调用的参数,并且不必采取任何附加步骤或添加额外输入。开发者不必处理使输入字节对齐(byte-aligning)的困难,并且确保在正确的位置为智能合约调用提供正确的输入。

此外,智能合约接口304可以对软件应用程序302的执行进行编译检查和错误检查。例如,智能合约接口304可以执行软件应用程序302的代码,并分析每个指令。例如,对于与智能合约函数调用相对应的指令,智能合约接口304可以确定用户输入的输入类型是否正确,每个输入的拼写是否正确、以及输入的输入数目是否正确。如果智能合约接口304确定用户在输入上输入了错误,则智能合约接口304可以向开发者指定通知以纠正错误。因此,智能合约接口304可以在向区块链网络212广播智能合约调用之前对智能合约调用执行第一层错误检查。

另外,智能合约接口304允许开发者在调用区块链网络212之前输入他/她的签名(例如,他/她的私钥)。开发者可以在执行软件应用程序302时通过客户端设备输入他/她的签名和公钥。另外,开发者可以在软件应用程序302中输入他/她的签名和公钥作为对智能合约调用的输入。或者,开发者的签名和公钥可被附加到智能合约调用的末端,以验证该智能合约调用来自具有访问授权以与区块链网络212交互以及随后与智能合约交互的开发者。另外,区块链网络212将比照区块链网络212的账本验证开发者的签名和公钥,以验证开发者的真实性。

响应于智能合约接口304认证并编译开发者的软件应用程序302,智能合约接口304生成智能合约消息以向区块链网络212广播。特别地,智能合约接口304可以将来自智能合约调用的参数以区块链网络212可接受的形式打包在软件应用程序302中。例如,信息可以以应用程序二进制接口(abi)格式编码,以便传递到区块链网络上的智能合约。特别地,智能合约接口304可以生成javascript对象表示(javascriptobjectnotation(json))格式的函数和自变量的列表。智能合约接口304可以对作为智能合约调用而输入到软件应用程序302中的数据以及从数据库中检索到的数据进行哈希处理,以创建智能合约函数调用。abi格式允许智能合约接口304编码用于区块链网络212上的智能合约调用的有意义的格式,以便在字节级别上理解该调用。另外,区块链网络212可以从以前部署的abi格式的智能合约中接收数据。

智能合约接口304向区块链网络212提供智能合约调用。特别地,智能合约接口304将智能合约调用广播至区块链网络212上的多个节点214中的每个节点。区块链网络212上的多个节点214中的每个节点执行哈希计算,以验证来自智能合约接口304的智能合约调用的真实性。特别地,每个节点验证当前请求智能合约调用的开发者与在智能合约调用中找到的开发者的签名(例如,私钥)和开发者的公钥对应。

另外,多个节点214中的每个节点验证开发者已被授权与先前部署的特定智能合约通信或者能够生成新智能合约。特别地,每个节点将开发者的签名与在每个节点处找到的账本比较。如果每个节点证实开发者的签名,并且证实开发者能够与先前部署的智能合约通信,或者能够生成新智能合约,则每个节点彼此通信成功。特别地,每个节点将对接收到的智能合约调用的接受(acceptance)发送给每个其他节点。或者,如果至少一个节点确定智能合约调用中找到的数据存在错误,则这一个节点可以通知所有其他节点该智能合约调用存在错误。然后,区块链网络212可以通知智能合约接口304智能合约调用中存在错误。智能合约接口304可以向开发者的客户端设备发送通知,从而通知开发者该错误。

如果多个节点向每个其他节点传送对所接收到的智能合约调用的接受,则每个节点执行智能合约接口304所请求的函数。所述函数可以包括:执行用于先前部署的智能合约的函数/方法、生成新智能合约、或调用先前部署的智能合约。例如,响应于多个节点中的每个节点接受所接收到的智能合约调用,区块链网络212中的每个节点以共识方式执行智能合约调用。区块链网络中的每个节点执行智能合约调用的第一指令。如前所述,区块链网络中完成执行第一指令的第一节点将第一指令的执行结果写入区块链网络212的存储器中。区块链网络中的其他节点可以验证第一节点执行第一指令的结果。如果每个节点验证了结果,则每个节点继续执行智能合约调用的第二指令。重复该处理,直到每个节点执行并验证智能合约调用的每个指令。跨多个节点214的这种共识验证确保了智能合约调用的结果被区块链网络212中的每个节点验证。

响应于多个节点214对智能合约调用的结果执行共识验证,区块链网络212可以将智能合约调用的结果发送回智能合约接口304。例如,智能合约调用的结果可以表示新智能合约被创建并且被存储在区块链网络212上。在另一示例中,智能合约调用的结果可以表示区块链网络212上先前部署的智能合约函数已被执行,诸如将钱从第一节点转账到第二节点。在另一示例中,智能合约调用的结果可以表示诸如车辆或房屋之类的产品的所有权的变化,已经将权利从一个用户转移给不同用户。智能合约接口304可以在客户端设备的显示器上向开发者显示结果。开发者可以查看所执行的软件应用程序302的结果,并继续执行另一软件应用程序302或使系统断电。

图4描绘了可以根据本文实施方式执行的处理400的示例。在一些实施方式中,可以使用由一个或多个计算设备执行的一个或多个计算机可执行程序来执行处理400。

在402,从区块链网络检索智能合约定义,所述智能合约定义包括多个合约函数,所述多个合约函数来自存储在由区块链网络维护的区块链中的多个智能合约。在示例中,智能合约定义是区块链中的条目,包括当智能合约例如被客户端、用户或区块链网络中的区块链节点调用时要由区块链网络执行的软件指令。智能合约定义还可以包括定义智能合约可以被调用的各种方式的函数定义(例如,将两个账号地址作为参数的智能合约函数称为“pay()”)。所述函数包括当所述函数被调用时由区块链网络执行的一个或多个软件指令。在一些情况下,智能合约定义中的一个或多个软件指令可以表示为与特定编程语言相关联的字节码。在一些情况下,检索智能合约定义包括检索与存储在区块链中的智能合约相关联的字节码。

在404,基于智能合约定义生成智能合约接口。智能合约接口可以包括与多个合约函数相对应的多个接口函数。智能合约接口可以被配置成允许软件应用程序通过调用相应的接口函数来调用每个合约函数。在一些情况下,生成包括调用参数的对特定合约函数的智能合约调用包括:从对接口函数的调用中检索调用参数;以及将该调用参数转换为智能合约参数,以便与区块链网络上的相应智能合约进行通信。在一些实施方式中,检索智能合约定义和生成智能合约接口是响应于存储在区块链中的智能合约定义的变化而自动执行的。

在406,从软件应用程序接收对特定接口函数的调用,所述调用包括与对应于特定接口函数的特定合约函数的参数相对应的调用参数。

在408,响应于接收到对特定接口函数的调用,生成包括调用参数的对特定合约函数的智能合约调用。在一些情况下,每个调用参数具有与特定合约函数的对应参数的合约参数类型匹配的参数类型。该参数类型可以包括整数、字符串或字节数组中的至少一个。

在410,向区块链网络发送智能合约调用。在一些情况下,智能合约调用可以通过网络向区块链网络中的节点广播。

在一些情况下,由区块链网络执行智能合约调用得到的结果被接收并被提供给软件应用程序。

图5描绘了根据本文实施方式的装置500的模块的示例。装置500可以是被配置成在诸如联盟区块链网络之类的区块链网络上实现智能合约调用的软件处理的实施方式。装置500可以对应于上述实施方式,并且装置500包括以下:检索器或检索模块502,用于从区块链网络检索智能合约定义,所述智能合约定义包括多个合约函数,所述多个合约函数来自存储在由区块链网络维护的区块链中的多个智能合约;第一生成器或第一生成模块504,用于生成表示智能合约定义的智能合约接口,所述智能合约接口包括与多个合约函数相对应的多个接口函数,所述智能合约接口被配置成允许软件应用程序通过调用相应的接口函数来调用每个合约函数;接收器或接收模块506,用于从软件应用程序接收对特定接口函数的调用,所述调用包括与对应于特定接口函数的特定合约函数的参数相对应的调用参数;第二生成器或生成模块508,用于响应于接收到对特定接口函数的调用,生成包括调用参数的对特定合约函数的智能合约调用;发送器或发送模块510,用于向区块链网络发送智能合约调用。

在前述实施方式中所示出的系统、装置、模块或单元可以通过使用计算机芯片或实体来实现,或者可以通过使用具有特定功能的产品来实现。典型的实施设备是计算机,计算机可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或这些设备的任意组合。

对于装置中每个单元的功能和角色的实施处理,可以参考先前方法中相应步骤的实施处理。为了简明,这里省略了细节。

由于装置实施方式基本上对应于方法实施方式,因此对于相关部分,可以参考方法实施方式中的相关描述。先前描述的装置实施方式仅仅是示例。被描述为单独部件的单元可以是或不是物理上分离的,并且被显示为单元的部件可以是或不是物理单元,可以位于一个位置,或者可以分布在多个网络单元上。基于实际需求可以选择一些或所有模块,以实现本文的方案的目的。本领域普通技术人员无需付出创造性劳动就可以理解和实现本文的实施方式。

再次参考图5,它可以被解释为示出了被配置成在区块链网络上实现智能合约调用的软件处理的内部功能模块和结构。执行主体实质上可以是电子设备,该电子设备包括以下:一个或多个处理器;以及存储所述一个或多个处理器的可执行指令的存储器。

本文中描述的技术产生一个或多个技术效果。在一些实施例中,通过自动生成用于区块链中的智能合约的软件接口库,所述技术产生可供执行的智能合约和智能合约函数的最新定义。在其他实施例中,使用所生成的库的软件应用程序将对智能合约和函数作出较少的错误调用(例如,对不存在的函数、无效参数等的调用)。因为这种错误调用导致区块链网络和执行产生错误调用的软件应用程序的设备中的额外开销(例如,通过处理错误、处理失败调用的重试等),所以通过软件接口库减少或消除这些错误调用可以使调用设备和区块链网络的效率增加以及性能提高。

所描述的主题的实施例可单独地或组合地包括一个或多个特征。

例如,在一些实施例中,动作包括:从区块链网络检索智能合约定义,所述智能合约定义包括多个合约函数,所述多个合约函数来自存储在由区块链网络维护的区块链中的多个智能合约;生成表示智能合约定义的智能合约接口,所述智能合约接口包括与多个合约函数相对应的多个接口函数,所述智能合约接口被配置为允许软件应用程序通过调用相应的接口函数来调用每个合约函数;从软件应用程序接收对特定接口函数的调用,所述调用包括与对应于特定接口函数的特定合约函数的参数相对应的调用参数;响应于接收到对特定接口函数的调用,生成包括调用参数的对特定合约函数的智能合约调用;向区块链网络发送智能合约调用;以及接收来自由区块链网络执行所述智能合约调用得到的结果,并向所述软件应用程序提供所述结果。

其他实施方式包括被配置成执行所述方法的动作的对应的系统、装置、编码在计算机存储设备上的计算机程序。

前述和其他描述的实施例可以各自可选地包括一个或多个以下特征:

在一些实施例中,检索智能合约定义包括检索与存储在区块链中的智能合约相关联的字节码。

在一些实施例中,生成包括调用参数的对特定合约函数的智能合约调用包括:从对接口函数的调用中检索调用参数;以及将调用参数转换为智能合约参数,以与区块链网络上的相应智能合约进行通信。

在一些实施例中,每个调用参数具有与特定合约函数的对应参数的合约参数类型匹配的参数类型。

在一些实施例中,参数类型包括整数、字符串或字节数组中的至少一个。

在一些实施例中,向区块链网络发送智能合约调用包括向区块链网络中的多个节点广播智能合约调用。

在一些实施例中,检索智能合约定义以及生成智能合约接口是响应于存储在区块链中的智能合约定义的变化而自动执行的。

本文中描述的主题、动作和操作的实施方式可以在数字电子电路中、有形体现的计算机软件或固件中、计算机硬件中实现,包括本文中公开的结构及其结构等同物,或者它们中的一个或多个的组合。本文中描述的主题的实施方式可以实现为一个或多个计算机程序,例如,一个或多个计算机程序指令模块,编码在计算机程序载体上,用于由数据处理装置执行或控制数据处理装置的操作。载体可以是有形的非暂态计算机可读介质,诸如磁盘、磁光盘或光盘、固态驱动器、随机存取存储器(ram)、只读存储器(rom)或其他类型的介质。可选地或附加地,载体可以是人工生成的传播信号,例如,机器生成的电信号、光信号或电磁信号,其被生成来编码信息用于传输到合适的接收器装置以供数据处理装置执行。计算机存储介质可以是或部分是机器可读存储设备、机器可读存储基板、随机或串行访问存储器设备或它们中的一个或多个的组合。计算机存储介质不是传播信号。

计算机程序也可以被称为或描述为程序、软件应用程序、app、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译或演绎性语言、说明或程序性语言;并且它可以配置为任何形式,包括作为独立程序,或作为模块、组件、引擎、子例程或适于在计算环境中执行的其他单元,所述环境可以包括位于一个或多个位置通过数据通信网络互连的一个或多个计算机。

计算机程序可以但非必须对应于文件系统中的文件。计算机程序可以存储在:保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本;专用于所讨论的程序的单个文件;或者多个协调文件,例如,存储一个或多个模块、子程序或代码部分的文件。

用于执行计算机程序的处理器包括:例如通用微处理器和专用微处理器,以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将接收用于执行的计算机程序的指令以及来自耦接到该处理器的非暂态计算机可读介质的数据。

术语“数据处理装置”包括用于处理数据的所有种类的装置、设备和机器,例如包括可编程处理器、计算机或多个处理器或计算机。数据处理装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)、asic(专用集成电路)或gpu(图形处理单元)。除了硬件,所述装置还可以包括创建计算机程序的执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。

本文中描述的过程和逻辑流程可以由一台或多台计算机或处理器执行一个或多个计算机程序来执行,以进行通过对输入数据进行运算并生成输出的操作。过程和逻辑流程也可以由例如fpga、asic或gpu等的专用逻辑电路,或者由专用逻辑电路和一个或多个编程计算机的组合来执行。

适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可包括用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以补充有专用逻辑电路或集成在专用逻辑电路中。

通常,计算机还将包括或可操作地耦接至一个或多个存储设备,以从一个或多个存储设备接收数据或向一个或多个存储设备传送数据。存储设备可以是例如磁盘、磁光盘或光盘、固态驱动器或任何其他类型的非暂态计算机可读介质。然而,计算机不需要具有这样的设备。因此,计算机可以耦接到一个或多个本地和/或远程的存储设备,例如一个或多个存储器。例如,计算机可以包括作为计算机的组成部分的一个或多个本地存储器,或者计算机可以耦接到云网络中的一个或多个远程存储器。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器或例如通用串行总线(usb)闪存驱动器的便携式存储设备,这里仅举几例。

部件可以通过直接或经由一个或多个中间部件彼此可互换地(例如,彼此电连接或光学连接)“耦接”。如果部件中的一个部件被集成到另一个中,则部件也可以被彼此“耦接”。例如,集成到处理器中的存储部件(例如,l2高速缓存部件)“耦接到”处理器。

为了提供与用户的交互,本文中描述的主题的实施方式可以在计算机上实现或配置为与该计算机通信,该计算机具有:显示设备(例如,lcd(液晶显示器)监视器),用于向用户显示信息;以及输入设备,用户可以通过该输入设备向该计算机提供输入的输入,例如键盘以及例如鼠标、轨迹球或触摸板等的指针设备。其他类型的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户任何形式的输入,包括声音、语音输入或触觉输入。另外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过向用户设备的web浏览器传送网页以响应从web浏览器接收的请求,或者通过与用户设备(例如,智能电话或电子平板计算机)上运行的应用程序(app)交互。此外,计算机可以通过向个人设备(例如,运行消息应用程序的智能电话)发送文本消息或其他形式的消息并反过来从用户接收响应消息来与用户交互。

本文结合系统、装置和计算机程序组件使用术语“配置为”。对于被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了在运行中使得该系统执行所述操作或动作的软件、固件、硬件或它们的组合。对于被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括当由数据处理装置执行时促使所述装置执行操作或动作的指令。对于被配置为执行特定操作或动作的专用逻辑电路,意味着所述电路具有执行操作或动作的电子逻辑。

虽然本文包含许多具体实施细节,但是这些细节不应被解释为由权利要求本身限定的对要求保护的范围的限制,而是作为对特定实施例的具体特征的描述。在本文中的多个单独实施方式的上下文中描述的多个特定特征也可以在单个实施方式中组合实现。相反,在单个实施方式的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施方式中实现。此外,尽管上面的特征可以描述为以某些组合起作用并且甚至最初也如此要求保护,但是在一些情况下,可以从要求保护的组合中删除来自该组合的一个或多个特征,并且要求保护可以针对子组合或子组合的变体。

类似地,虽然以特定顺序在附图中描绘了操作并且在权利要求中叙述了操作,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或依次执行这些操作,或者要求执行所有示出的操作。在一些情况下,多任务和并行处理可能是有利的。此外,上述实施方式中的各种系统模块和组件的分离不应被理解为在所有实施方式中都需要这种分离,应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中在或者打包成多个软件产品。

已经描述了主题的特定实施方式。其他实施方式在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现所期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或次序以实现所期望的结果。在一些情况下,多任务和并行处理可能是有利的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1