用于基于区块链的去中心化应用开发的系统和方法
技术领域
本文通常涉及用于基于区块链的去中心化应用开发的方法和设备。
背景技术
诸如基于区块链的虚拟机和智能合约之类的区块链技术的发展,使基于区块链技术的去中心化应用的创建成为可能。去中心化应用可以包括前端应用和后端基于区块链的逻辑。前端应用可以提供用户接口、接收用户输入、并向用户提供输出。后端基于区块链的逻辑可以执行与去中心化应用的功能相关的计算、处理和数据存储任务。
尽管与传统的服务器或基于云的系统相比,区块链系统可能会享有诸如安全性、可信度和透明性之类的优势,但区块链系统仍存在计算效率和网络容量不足等缺点。由区块链系统的特性引起的这些和其他缺点给去中心化应用的开发和使用造成了各种障碍。例如,一些区块链系统的低计算效率或高处理成本可能会驱使去中心化应用的一些开发人员在与开发人员相关联的私有服务器上实现至少部分后端逻辑。这种方法可能会通过损害其安全性和可信度来破坏基于区块链的解决方案的初衷。作为另一示例,区块链系统的容量的限制可能会延迟前端应用对相关数据的查询的响应时间。区块链的数据结构也可能限制使用复杂数据查询的灵活性。作为另一示例,开发人员可能需要针对每个去中心化应用基于区块链系统创建用户身份管理系统,这可能是繁重且昂贵的。作为另一示例,区块链系统可能不提供与用于存储可能与去中心化应用相关的数据的外部系统的接口。作为另一示例,用于开发、测试、编译和发布基于区块链的逻辑和前端应用的开发环境可能对开发人员不可用。现有的开发环境可能不允许集成基于区块链的逻辑的开发和前端应用的开发。这两个组件之间的接口可能很复杂,并且难以编程和测试。
发明内容
本文的各种实施例包括但不限于用于基于区块链的去中心化应用开发的系统、方法、和非暂态计算机可读介质。
根据一些实施例,一种计算机实现的用于基于区块链的去中心化应用的方法包括:基于多个第一输入生成区块链合约和与所述区块链合约相关联的接口规范;在区块链上部署所述区块链合约;基于多个第二输入和与所述区块链合约相关联的所述接口规范来生成客户端应用,其中,所述客户端应用可被执行以调用部署在所述区块链上的所述区块链合约;将所述客户端应用存储于在线存储系统中。
在一些实施例中,所述方法还包括:提供用于区块链合约开发和应用开发的集成开发环境(IDE);在所述集成开发环境中接收所述多个第一输入;以及在所述集成开发环境中接收所述多个第二输入。
在一些实施例中,生成区块链合约包括:基于所述多个第一输入来获得与所述区块链合约相关联的源代码,并编译所述获得的源代码以生成与所述区块链合约相关联的字节码。
在一些实施例中,生成所述区块链合约还包括:在编译所述获得的源代码以生成字节码之前,分析所述获得的源代码以识别一个或多个语法问题,或者分析所述获得的源代码以识别与所述区块链合约相关联的一个或多个安全问题。
在一些实施例中,与所述区块链合约相关联的接口规范包括与所述区块链合约相关联的应用二进制接口(ABI)的规范,其中,所述应用二进制接口的规范包括对与所述区块链合约相关联的一个或多个接口函数中的每个接口函数的说明。
在一些实施例中,生成区块链合约包括:基于多个第三输入生成与所述区块链合约相关联的一个或多个单元测试用例,以及执行所述一个或多个单元测试用例以测试所述区块链合约。
在一些实施例中,生成客户端应用包括:基于所述接口规范生成与所述区块链合约相关联的对象,其中,所述对象包括与所述接口规范相关联的一种或多种方法;获得所述多个第二输入,其中,一个或多个所述第二输入包括调用与所述接口规范相关联的所述一种或多种方法的源代码;以及将与所述区块链合约相关联的所述对象和所述源代码包括在所述客户端应用中。
在一些实施例中,生成客户端应用包括将与所述区块链相关联的软件开发工具包(SDK)集成在客户端应用中。
在一些实施例中,一个或多个所述第二输入包括对与所述区块链相关联的一个或多个基于区块链的程序的一个或多个引用。所述客户端应用可被执行以调用所述一个或多个基于区块链的程序。
在一些实施例中,生成客户端应用包括将与所述一个或多个基于区块链的程序相关联的一个或多个软件开发工具包集成在所述客户端应用中。
在一些实施例中,生成客户端应用包括提供用于测试所述区块链合约或所述客户端应用的一个或多个仿真器,并使用所述一个或多个仿真器来执行所述客户端应用或所述区块链合约,以识别与所述客户端应用或所述区块链合约相关联的一个或多个问题。
在一些实施例中,所述在线存储系统包括根据星际文件系统(IPFS)协议的分布式文件系统或基于云的存储系统。
根据其他实施例,一种用于基于区块链的去中心化应用开发的系统包括一个或多个处理器,以及耦接到所述一个或多个处理器且其上存储有指令的一个或多个计算机可读存储器,所述指令能由所述一个或多个处理器执行以执行前述实施例中任一项所述的方法。
根据又一其他实施例,一种非暂态计算机可读存储介质配置有可由一个或多个处理器执行以促使所述一个或多个处理器执行前述实施例中任一项所述的方法的指令。
根据再一其他实施例,一种用于基于区块链的去中心化应用开发的装置包括用于执行前述实施例中任一项所述的方法的多个模块。
根据一些实施例,一种用于基于区块链的去中心化应用开发的系统包括一个或多个处理器,以及耦接到所述一个或多个处理器且其上存储有指令的一个或多个计算机可读存储器,所述指令可由所述一个或多个处理器执行以执行包括以下的操作:基于多个第一输入生成区块链合约和与所述区块链合约相关联的接口规范;在区块链上部署所述区块链合约;基于多个第二输入和与所述区块链合约相关联的所述接口规范来生成客户端应用,其中,所述客户端应用可被执行以调用部署在所述区块链上的所述区块链合约;将所述客户端应用存储于在线存储系统中。
根据其他实施例,一种非暂态计算机可读介质配置有可由一个或多个处理器执行以促使所述一个或多个处理器执行包括以下操作的指令:基于多个第一输入生成区块链合约和与所述区块链合约相关联的接口规范;在区块链上部署所述区块链合约;基于多个第二输入和与所述区块链合约相关联的所述接口规范来生成客户端应用,其中,所述客户端应用可被执行以调用部署在所述区块链上的所述区块链合约;将所述客户端应用存储于在线存储系统中。
根据又一些其他实施例,一种用于基于区块链的去中心化应用开发的装置包括:第一生成模块,用于基于多个第一输入生成区块链合约和与所述区块链合约相关联的接口规范;部署模块,用于在区块链上部署所述区块链合约;第二生成模块,用于基于多个第二输入和与所述区块链合约相关联的所述接口规范来生成客户端应用,其中,所述客户端应用可被执行以调用部署在所述区块链上的所述区块链合约;存储模块,用于将所述客户端应用存储于在线存储系统中。
本文公开的实施例具有一个或多个技术效果。在一些实施例中,在线平台向去中心化应用提供各种基于区块链的服务。这允许将去中心化应用的各种功能外包,并使轻量且易于实现的去中心化应用的开发成为可能。在其他实施例中,该平台提供了可信赖的区块链数据中间存储以及对该数据的复杂查询功能。这允许通过去中心化应用有效地获取区块链数据,而不会使关联于区块链提供的数据接口过载。在其他实施例中,平台承载可由去中心化应用调用或以其他方式使用的基于区块链的程序的市场。这扩大了去中心化应用潜在功能的范围,并减少了开发去中心化应用所需的工作量。在其他实施例中,该平台提供了的集成开发环境,用于开发、测试和启动去中心化应用的后端的基于区块链的逻辑和前端应用。这样可以快速开发和启动去中心化应用,并有效创建和验证去中心化应用不同组件之间的依赖关系。在其他实施例中,该平台结合了基于区块链的数据存储和其他安全去中心化数据存储解决方案。这满足了去中心化应用的不同部分提出的不同数据存储要求,并通过此类应用实现了灵活的数据管理。
参考附图考虑以下描述和所附权利要求,本文公开的系统、方法和非暂态计算机可读介质的这些和其他特征,以及操作方法和相关结构元件的功能以及部件的组合和制造经济性将变得更加明显,上述都形成本说明书的一部分,其中在各个附图中相同的附图标记表示对应的部分。然而,应该清楚地理解,附图仅用于说明和描述的目的,而不是限制性的。
附图说明
图1示出了根据一些实施例的与区块链相关联的网络环境。
图2示出了根据一些实施例的用于实现区块链交易的框架。
图3示出了根据一些实施例的用于支持基于区块链的去中心化应用的网络环境。
图4示出了根据一些实施例的用于支持基于区块链的去中心化应用的装置的框图。
图5示出了根据一些实施例的用于基于区块链的去中心化应用开发的处理。
图6示出了根据一些实施例的用于基于区块链的去中心化应用开发的方法。
图7示出了根据一些实施例的用于基于区块链的去中心化应用开发的计算机系统的框图。
图8示出了可以实现本文描述的任何实施例的计算机系统的框图。
具体实施方式
本文描述的实施例提供了与用于开发、部署、发布和操作去中心化应用的平台相关联的方法、系统和装置。该平台可以支持使用去中心化结构执行数据存储、处理和计算任务的应用,并允许该应用结合其他基于区块链的工具或程序的功能。该平台还可以提供用于有效访问区块链数据以及外部数据的资源和工具。该平台还提供了一个集成开发环境,用于开发前端应用和与去中心化应用相关联的后端的基于区块链的逻辑。开发环境提供了各种工具来隔离地或聚合地创建和测试基于区块链的逻辑和前端应用。该平台扩展了基于区块链的去中心化应用的功能,降低了此类应用的客户端部分所需的复杂度,并提高了其开发和操作的效率。
图1示出了根据一些实施例的与区块链相关联的网络环境。如图所示,在环境100中,客户端计算设备111可以耦接到服务器端118,并且服务器端118和节点B可以通过各种通信网络耦接到区块链系统112。类似地,服务器端118可以可选地耦接到更多类似于区块链系统112的区块链系统,例如区块链系统113、区块链系统114等。每个区块链系统可以维护一个或多个区块链。
在一些实施例中,客户端计算设备111可以包括一个或多个服务器(例如,节点C)以及一个或多个其他计算设备(例如,节点A1、节点A2、节点A3)。节点A1、节点A2和节点A3可以耦接到节点C。在一些实施例中,节点C可以由具有各种本地账户(从节点A1、节点A2、节点A3评估的本地账户)的实体(例如,网站、移动电话应用、组织、公司、企业)来实现。例如,移动电话应用可能具有数百万个从相应的用户账户访问应用的服务器的端用户(end-user)。应用的服务器可以相应地存储数百万个用户账户。客户端111的组件及其布置可以具有许多其他配置。
在一些实施例中,区块链系统112可以包括维护一个或多个区块链(例如,公有区块链、私有区块链、联盟区块链等)的多个区块链节点(例如,区块链节点1、区块链节点2、区块链节点3、区块链节点4、区块链节点i等)。其他区块链系统(例如,区块链系统113等)可以包括维护另一区块链的类似布置的区块链节点。每个区块链节点都可以在一个或多个区块链系统中找到。区块链节点可以包括全节点。全节点可以下载每个区块和区块链交易,并对照区块链的共识规则对它们进行检查。区块链节点可以与另一区块链节点形成网络彼此通信。所示的区块链节点的顺序和数量仅仅是为了说明的示例。区块链节点可以在服务器、计算机等中实现。例如,每个区块链节点可以在服务器或服务器集群中实现。服务器集群可以使用负载平衡。每个区块链节点可以对应于经由诸如TCP/IP的各种类型的通信方法耦接在一起的一个或多个物理硬件设备或者虚拟设备。根据分类,区块链节点还可以被称为全节点、Geth节点、共识节点等。
在一些实施例中,节点B可以包括轻节点。轻节点可能无法下载完整的区块链,而是可以只下载区块头以验证区块链交易的真实性。轻节点可以由全节点(例如,区块链系统112中的区块链节点)服务并且有效地依赖于全节点来访问区块链的更多功能。通过安装适当的软件,可以在诸如膝上型电脑、移动电话等的电子设备中实现轻节点。在一个实施例中,节点B可将区块链交易发送至区块链系统112以添加至区块链。
在一些实施例中,可能有更多的类似于客户端计算设备111的客户端计算设备耦接到服务器端118。服务器端118可以提供区块链即服务(BaaS),并且被称为BaaS云。在一个实施例中,BaaS是一种云服务模型,其中客户端或开发人员将Web或移动应用的幕后方面外包。BaaS可以为区块链上发生的例如用户验证、数据库管理和远程更新的活动提供预先编写的软件。BaaS云可以在服务器、服务器集群或其他设备中实现。在一个实施例中,BaaS云提供基于区块链技术的企业级平台服务。该服务可以帮助客户端构建安全稳定的区块链环境,并轻松管理区块链的部署、操作、维护和开发。该服务具有高安全性、高稳定性、易用性以及开放性和共享性的特点。基于云的丰富的安全策略和多租户隔离,BaaS云可以使用芯片加密技术提供高级的安全保护。基于高度可靠的数据存储,这项服务提供了可以快速扩展而不会中断的端到端且高可用性的服务。BaaS云可以提供增强的管理功能,以帮助客户端构建企业级的区块链网络环境。BaaS云可以为标准区块链应用和数据提供本地支持,支持例如Hyperledger Fabric和Enterprise Ethereum-Quorum的主流开源区块链技术,以构建开放且包容的技术生态系统。
在环境100中,系统、节点和设备中的每个可以安装有适当的软件(例如,应用编程接口)和/或硬件(例如,有线、无线连接)以访问环境100的其他设备。通常,系统、节点和设备可以能够通过一个或多个有线或无线网络(例如,因特网)彼此通信,通过所述网络可以对数据进行通信。系统、节点和设备中的每个可以包括一个或多个处理器以及耦接到一个或多个处理器的一个或多个存储器。存储器可以是非暂时性的且计算机可读的,并且配置有可由一个或多个处理器执行以促使所述一个或多个处理器执行本文描述的操作的指令。所述指令可以存储在存储器中或通过通信网络下载而不必存储在存储器中。尽管在该图中系统、节点和设备被示为单独的组件,但是应当理解,这些节点和设备可以实现为单个设备或耦接在一起的多个设备。例如,节点B可以可选地集成到区块链节点2中。
诸如节点A1、节点A2、节点A3、节点B和节点C之类的设备可以安装有适当的区块链软件以发起、转发或访问区块链交易。术语“区块链交易”可指在区块链系统中执行并经验证后记录在区块链中的任务单元。在一些实施例中,服务器端118可以基于从节点A1、A2或A3获得的信息来构建区块链合约。服务器端118可以在区块链交易中添加区块链合约。在服务器端118将区块链交易提交给区块链系统之后,区块链节点可以验证区块链交易以添加到区块链。如果区块链交易被添加到区块链,则区块链合约将被部署在区块链上并在特定状态下启动。通过一个或多个附加区块链交易,可以调用部署的区块链合约以更新特定状态。
可以根据共识规则来验证区块链交易。例如,下面提供了工作量证明(POW)共识处理。尽管如此,诸如权益证明(POS)、代表权益证明(DPOS)和实用拜占庭容错(PBFT)的其他类型的共识处理可以类似地应用于所公开的系统和方法。
在有关区块链交易验证的一些实施例中,在接收到未确认的区块链交易的区块链交易请求后,接收方区块链节点可以对区块链交易执行一些初步验证。例如,区块链节点1可以在从节点C接收到区块链交易之后执行初步验证。一旦被验证,区块链交易可以被存储在接收方区块链节点(例如,区块链节点1)的池数据库中,该节点也可以将该区块链交易转发到一个或多个其他区块链节点(例如,区块链节点3、区块链节点4)。类似地,每个区块链节点可以包括存储数据库的存储器或耦接到存储数据库的存储器。该数据库可以存储多个未确认的区块链交易。在接收到区块链交易之后,一个或多个区块链其他区块链节点可以重复由接收方区块链节点进行的初步验证和广播处理。
为了验证,每个区块链节点可以根据其偏好从数据库中选择一些区块链交易,并将其形成为向区块链提出的新区块。区块链节点可以通过投入算力来解决复杂的数学问题,从而对提出的新区块进行“挖矿”。如果区块链交易涉及区块链合约,则区块链节点可以在对应的虚拟机(VM)中本地执行区块链合约。为了处理区块链合约,区块链网络的每个区块链节点运行一个对应的虚拟机,并执行区块链合约中相同的指令。虚拟机是基于计算机架构并提供物理计算机的功能的计算机系统的软件仿真。区块链环境中的虚拟机可以被理解为被设计用作区块链合约的运行环境的系统。
根据共识规则成功挖出所提出的区块链交易的新区块的特定区块链节点可以将新区块打包至其区块链的本地副本中,并将结果多播到其他区块链节点。特定区块链节点可以是首先成功完成验证、已获得验证特权、已经基于另一共识规则被选择等的区块链节点。然后,其他区块链节点可以遵循与特定区块链节点执行的执行顺序相同的执行顺序在本地执行新区块中的区块链交易,彼此验证执行结果(例如,通过执行哈希计算),并将它们的区块链的本地副本与特定区块链节点的副本同步。通过更新区块链的本地副本,其他区块链节点可以类似地将区块链交易中这样的信息写入对应的本地存储器。因此,区块链合约可以部署在区块链上。如果在某一时刻验证失败,则拒绝区块链交易。
部署的区块链合约可以具有地址,根据该地址可以访问部署的合约。区块链节点可以通过向区块链合约输入某些参数来调用已部署的区块链合约。在一个实施例中,可以调用部署的区块链合约以将某些信息添加到区块链合约中或更新区块链合约中的某些信息,从而更新区块链合约中的一个或多个状态。在一个实施例中,可以通过查询添加到区块链的相应的区块链交易来从区块链检索区块链合约的一个或多个状态。最新更新的状态可以反映在最近的相关区块链交易中。尽管如此,其他类型的区块链系统和相关的共识规则可应用于所公开的设备和方法。
图2示出了根据一些实施例的用于实现区块链交易的框架。在一些实施例中,客户端计算设备111可以将信息发送到服务器端118。该信息可以用于创建区块链账户,基于区块链合约执行动作等。区块链可以由区块链系统112维护。服务器端118可以基于从客户端计算设备111获得的信息来构建区块链合约。服务器端118可以在区块链交易A中添加区块链合约。服务器端118可以代表与客户端计算设备111相关联的用户对区块链交易进行签名。例如,区块链交易A可以包括诸如随机数(例如,交易序列号)、从(例如,用户的区块链地址)、至(例如,在部署区块链合约的情况下为空)、交易费、签名(例如,服务器端118的签名、服务端118管理的用户的签名)、值(例如,交易金额)、数据(例如,区块链合约)等信息。然后,服务器端118可以将区块链交易A提交到区块链系统112的一个或多个区块链节点以添加到区块链。
在将区块链交易添加到区块链之后,区块链合约被部署在区块链上并在特定状态下启动。通过一个或多个附加的区块链交易,部署的区块链合约可以被调用以更新该特定状态。在一些实施例中,节点B可以构建经签名的区块链交易B并将其发送到区块链系统112以供执行。在一个实施例中,可以执行区块链交易B以调用部署的区块链合约从而更新状态。在一些实施例中,可以在用户端应用221处以源代码对区块链交易B进行编程。例如,用户或机器可以对区块链交易B进行编程。节点B可以使用使源代码转换为字节码的相应的编译器编译源代码。区块链交易B可以包括诸如随机数、从、至、交易费、值、签名、数据等的信息。节点B可以通过远程过程调用(RPC)接口223将区块链交易B发送到区块链系统112的一个或多个区块链节点以供执行。RPC是第一程序(例如,用户端应用)可以用来从位于网络上的另一计算机(例如,区块链节点)中的第二程序请求服务而无需理解网络细节的协议。当第一程序促使进程在不同地址空间中执行时,则其好像正常(本地)进程调用一样,而无需程序员明确地编码远程交互的细节。
在一些实施例中,在接收到区块链交易(例如区块链交易A或B)时,接收方区块链节点可以验证区块链交易是否有效。例如,可以验证签名和其他格式。如果验证成功,则接收方区块链节点可以将该接收到的区块链交易广播到包括各种其他区块链节点的区块链网络。一些区块链节点可以参与区块链交易的挖矿处理。区块链交易可被特定节点选中进行共识验证,从而打包到一个新的区块中。如果该区块链交易涉及部署区块链合约,则该特定节点可以创建区块链合约的与合约账户地址相关联的合约账户。如果区块链交易涉及调用部署的区块链合约,则该特定节点可以触发该节点的本地虚拟机(VM)执行接收到的区块链交易,从而从该节点的区块链的本地副本调用部署的区块链合约,并更新部署的区块链合约中的状态。如果该特定节点成功挖出新区块,则该特定节点可以将新区块广播到其他区块链节点。
在接收到新区块时,其他区块链节点可以执行验证。如果对新区块有效达成了共识,则将新区块分别打包到由区块链节点维护的区块链的本地副本中。区块链节点可以类似地触发它们的本地虚拟机(例如,本地虚拟机1、本地虚拟机i、本地虚拟机2)以执行新区块中的区块链交易,从而调用区块链的本地副本(例如,本地区块链副本1、本地区块链副本i、本地区块链副本2)并进行相应的更新。每个区块链节点的硬件机器可以访问一个或多个虚拟机,所述虚拟机可以是相应的区块链节点的一部分或耦接到相应的区块链节点。每次都可以触发相应的本地虚拟机来执行区块链交易。同样,将执行新区块中的所有其他区块链交易。轻节点也可以与更新的区块链同步。
图3示出了根据一些实施例的用于支持基于区块链的去中心化应用的网络环境。在一些实施例中,网络环境可以包括:平台310,其提供实现去中心化应用的各种服务;一个或多个客户端系统320,每个客户端系统与一个或多个用户或者其他合适的实体相关联;一个或多个计算系统330,与去中心化应用的开发环境相关联。在一些实施例中,客户端系统320可以操作一个或多个客户端应用,一个或多个客户端应用可以由一个或多个区块链合约的后端处理来支持。在一些实施例中,提供开发环境的一个或多个计算系统330可以被实现为平台310的一部分、一个或多个客户端计算设备、或者一个或多个客户端计算设备和与平台310相关联的一个或多个计算设备的组合。
在一些实施例中,平台310可以包括区块链系统311,所述区块链系统311包括被配置为管理区块链的一个或多个区块链节点。在一些实施例中,区块链系统311可以被实现为图1和2所示的服务器端118的一部分或全部、图1和图2中所示的任意区块链系统111、112、113、114的部分或全部、或者它们的任意组合。在一些实施例中,区块链系统311可以包括与多个区块链相关联的区块链节点,并且被配置为管理多个区块链中的每个区块链。在一些实施例中,区块链系统311可以从运行在客户端系统320上的客户端应用接收一个或多个区块链交易,并且通过一个或多个区块链节点将一个或多个区块链交易添加到合适的区块链。在其他实施例中,区块链系统311可以基于来自运行在客户端系统320上的客户端应用的请求来生成一个或多个区块链交易,并且通过一个或多个区块链节点将一个或多个区块链交易添加到合适的区块链上。
在一些实施例中,平台310可以包括与文件系统相关联的一个或多个计算设备312。所述文件系统可以被配置为存储与一个或多个客户端应用相关联的多个资源,并基于来自一个或多个客户端应用的请求向该一个或多个客户端应用提供所述多个资源中的一个或多个资源。在一些实施例中,一个或多个客户端应用可以与区块链相关联,或者由区块链上的处理和计算支持。例如,一个或多个客户端应用可各自与区块链上的一个或多个区块链合约相关联。在一些实施例中,文件系统可以包括分布式的、点对点的、或基于云的文件系统。作为示例,文件系统可以根据星际文件系统(InterPlanetary File System,IPFS)协议来实现。作为另一示例,文件系统可以被实现为内容分发网络(CDN)。文件系统可以包括多个节点,每个节点被配置为与一个或多个其他节点通信并存储数据。平台310可以包括与文件系统相关联的一个或多个节点。可以经由一个或多个节点来检索存储在文件系统中的数据。在其他实施例中,文件系统可以包括基于云的数据存储系统。
在一些实施例中,平台310可以包括数据库313。数据库313可以存储来自与区块链系统311相关联的一个或多个区块链的数据。在一些实施例中,数据库313可以被配置为定期将其中存储的数据与区块链上的数据同步。在其他实施例中,数据库313可扫描区块链上的数据或从区块链获得数据以识别一个或多个问题(issue),诸如与规定或规则相关的合规性问题。在一些实施例中,数据库313可以耦接到数据库服务器314。数据库313可以被配置为从数据库服务器314接收一个或多个数据查询,获得响应于所述一个或多个数据查询的数据,并且将响应于所述一个或多个数据查询的数据提供给数据库服务器314。在一些实施例中,数据库313可以被配置为处理复杂查询,诸如条件查询、聚合查询(aggregatequery)或连接查询(joined query)。在一些实施例中,通过将区块链上的数据同步到数据库313并直接从数据库313提供这样的数据,平台310可以减少用于访问区块链的查询的数量及其处理工作量,并支持诸如复杂查询和数据审计的高级操作。
在一些实施例中,平台310可以包括数据库服务器314。数据库服务器314可以被配置为查询数据库313以获得与关联于区块链系统311的一个或多个区块链相关联的数据。在一些实施例中,数据库服务器314可以从运行在客户端系统320上的客户端应用接收一个或多个数据请求,并基于所述一个或多个数据请求来查询数据库313。在一些实施例中,客户端应用可以与区块链系统311管理的区块链上的区块链合约相关联,并且可以请求与区块链合约相关联的数据。响应于该请求,数据库服务器314可以查询数据库313以获得与区块链合约相关联的数据,并将所获得的数据发送至客户端应用。在一些实施例中,与数据库313相关联的一个或多个数据库架构(schema)可以被公开或以其他方式供一个或多个客户端应用使用。客户端应用可以基于数据库架构制定其向数据库服务器314发出的数据请求。
在一些实施例中,数据库服务器314可以被配置为执行区块链交易审计。数据库服务器314可以从运行在客户端系统320上的客户端应用获得与区块链相关联的区块链交易。数据库服务器可以检查区块链交易以确认区块链交易满足一个或多个预设要求,并将所述区块链交易发送到区块链系统311以添加到合适的区块链。同样如上所述,区块链交易审计可能是或不是必需的。如果非必需,则客户端应用可以绕过数据库服务器314,并且直接将区块链交易发送到区块链系统311以添加到区块链。
在一些实施例中,平台310可包括应用服务器315。应用服务器315可承载一个或多个基于区块链的程序。每个基于区块链的程序可包括例如区块链的操作支持的逻辑、在一个或多个服务器(例如,与平台310相关联的一个或多个服务器)上实现的逻辑,以及使基于区块链的程序可访问其他应用的接口。在一些实施例中,应用服务器315可被配置为基于来自客户端应用的一个或多个请求来执行基于区块链的程序。基于区块链的程序可以与关联于区块链系统311的区块链上的区块链合约相关联。在一些实施例中,发送请求的客户端应用还可以与区块链上的区块链合约相关联。分别与基于区块链的程序和客户端应用相关联的后端区块链合约可彼此交互。例如,可以执行与基于区块链的程序相关联的区块链合约,以生成与客户端应用相关联的区块链合约的一个或多个输入。在一些实施例中,应用服务器315承载的一个或多个基于区块链的程序可以由平台310的提供者提供。应用服务器315承载的一个或多个其他基于区块链的程序可以由一个或多个第三方区块链服务提供者提供。基于区块链的程序的示例可以包括提供去中心化身份服务的程序和提供跨链服务(oracle service)的程序。
作为示例,基于区块链的程序可以提供跨链服务或与将区块链外部的数据并入区块链相关联的服务。在一些实施例中,基于区块链的程序可以从可信源340获得外部数据、认证该外部数据、并将该外部数据注入到区块链中。例如,可执行基于区块链的程序,以从一个或多个外部计算系统340获得外部数据,生成包括所获得的外部数据的区块链交易,并将包括所获得的外部数据的区块链交易发送到一个或多个区块链节点,以添加到区块链。在一些实施例中,基于区块链的程序可以在将外部数据注入到区块链中之前为其提供保护。例如,基于区块链的程序可以使用可信执行环境(TEE),TEE可以提供隔离的执行环境,该隔离的执行环境提供诸如隔离的执行、使用TEE执行整个应用、以及其资产的机密性的安全特点。在一些实施例中,客户端应用可以通过调用该基于区块链的程序将可信数据合并到其区块链逻辑中。
作为另一示例,基于区块链的程序可以提供身份服务。基于区块链的程序可用于创建去中心化标识(DID)、创建和管理DID文档、认证DID、基于DID提供身份信息或执行其他合适的功能。DID可以链接到与用户或其他实体相关联的账户并用于唯一地标识该账户。在一些实施例中,基于区块链的程序可以被配置为从客户端应用接收一个或多个输入。一个或多个输入可以包括与一个或多个用户或实体相关联的一个或多个数字签名。数字签名可能已经基于集成在客户端应用中或由客户端应用调用的签名工具生成,可以操作该签名工具以安全保存用户凭证、加密密钥对或其他机密信息,并为用户生成数字签名或其他身份证明。例如,可以执行基于区块链的程序以从客户端应用获得去中心化标识(DID),生成用于从区块链获得与DID相对应的DID文档的区块链交易,并向一个或多个区块链节点发送用于获得DID文档的区块链交易以添加到区块链。在一些实施例中,可以在没有账户管理或密码验证功能的情况下依赖于这种基于区块链的程序来实现这种功能,从而实现客户端应用。
在一些实施例中,平台310可以包括网关316。网关可以被配置为向运行在客户端系统320上的客户端应用提供与区块链系统311、文件系统312关联的一个或多个计算设备、数据库313、数据库服务器314、应用服务器315、平台310的其他合适的组件、或其任意组合相关联的一个或多个接口。网关316可以被配置为执行诸如路由、地址映射、消息转发、其他合适的功能或其任意组合的各种功能。例如,网关316可以被配置为将与客户端应用相关联的一个或多个资源映射和路由解析到与文件系统312相关联的一个或多个地址,并循环(revolve)与运行在应用服务器315上的基于区块链的程序相关联的一个或多个地址,搜索与存储有区块链数据的数据库313相关联的路由信息,执行另一适当的操作或其任意组合。
在一些实施例中,客户端系统320可以包括一个或多个客户端应用以及支持该客户端应用的一个或多个工具。客户端系统320上的一个或多个工具可以对应于平台310的一个或多个组件,并且使客户端应用能够与平台310提供的一个或多个服务进行交互或使用所述一个或多个服务。作为示例,客户端系统320可以包括签名工具321,签名工具321可以被配置为安全保存与一个或多个用户相关联的一个或多个加密密钥,并基于该加密密钥生成内容或消息,例如与用户相关联的数字签名。可选地,签名工具321可以被提供为基于云的服务并且可以被客户端应用调用。作为另一示例,客户端系统320可以存储与数据库313相关联的一组数据库架构322。客户端系统320可以基于数据库架构322生成一个或多个数据请求或对存储在数据库313中的数据的查询。作为又一示例,客户端系统320可以包括一个或多个程序客户端323,每个程序客户端323与应用服务器315承载的基于区块链的程序之一相关联。程序客户端323可以向对应的基于区块链的应用的一个或多个功能提供一个或多个接口。客户端应用可以与程序客户端323进行交互,以使用对应的基于区块链的程序的一个或多个功能。
在一些实施例中,与去中心化应用的开发环境相关联的一个或多个计算系统330可以包括用于承载和操作应用开发环境的一个或多个软件包或模块。开发环境可以包括用于编写和编辑区块链合约源代码的一个或多个接口331、用于编写和编辑与区块链合约相关联的客户端应用源代码的一个或多个接口332、用于将配置信息(例如,与基于区块链的程序相关联的信息、客户端应用与区块链合约之间的依赖信息)插入与客户端应用或区块链合约对应的代码的一个或多个工具333、用于将源代码编译和打包在可部署和机器可执行代码中的一个或多个工具334、用于部署与区块链合约相关联的可执行代码的一个或多个工具335、用于部署与客户端应用相关联的可执行代码的一个或多个工具336、一个或多个其他合适的组件、或其任意组合。在一些实施例中,一个或多个计算设备可以被配置为操作用于开发客户端应用和对应的区块链合约的集成开发环境(IDE)。
图4示出根据一些实施例的用于支持基于区块链的去中心化应用的装置的框图。装置400可以是图3中示出的网络环境的一个或多个组件的实施方式的示例。装置400可包括被配置为管理区块链的区块链模块410。装置400可包括与文件系统相关联的文件存储模块420,被配置为存储与客户端应用相关联的多个资源并且向客户端应用提供多个资源中的一个或多个资源,其中,客户端应用与区块链上的第一区块链合约相关联;在一些实施例中,文件系统包括根据星际文件系统(IPFS)协议的分布式文件系统。
装置400可以包括数据库服务器模块430,被配置为查询存储有所述区块链的数据的数据库模块460以获得与第一区块链合约相关联的数据并将所获得的数据发送至客户端应用。在一些实施例中,数据库服务器模块430还被配置为从客户端应用获得与区块链相关联的区块链交易,检查该区块链交易以确认该区块链交易满足一个或多个预设要求,并将该区块链交易发送到区块链模块410以添加到区块链。
装置400可以包括应用服务器模块440,被配置为基于来自客户端应用的一个或多个请求来执行基于区块链的程序,其中,基于区块链的程序与区块链上的第二区块链合约相关联,可执行所述第二区块链合约以生成第一区块链合约的一个或多个输入。在一些实施例中,可执行基于区块链的程序以从一个或多个外部计算系统获得外部数据,生成包括所获得的外部数据的区块链交易,并将包括所获得的外部数据的区块链交易发送至区块链模块410以添加到区块链。在一些实施例中,可执行基于区块链的程序以从客户端应用获得去中心化标识(DID),生成用于从区块链获得与DID相对应的DID文档的区块链交易,并将用于获得所述DID文档的区块链交易发送到区块链模块410以添加到区块链。
装置400可以包括应用开发模块450,被配置为操作用于开发客户端应用和第一区块链合约的集成开发环境(IDE)。
装置400可以包括数据库模块460,其中,数据库模块460被配置为从数据库服务器模块430接收一个或多个数据查询,获得响应于所述一个或多个数据查询的数据,以及将响应于所述一个或多个数据查询的数据提供给数据库服务器模块430。在一些实施例中,数据库模块460还被配置为定期将数据库模块460与区块链上的数据同步,或扫描区块链上的数据以识别一个或多个合规性问题。
装置400可以包括网关模块470,其被配置为向客户端应用提供与区块链模块410、文件存储模块420、数据库服务器模块430或应用服务器模块440相关联的一个或多个接口。在一些实施例中,网关模块470被配置为将与客户端应用相关联的多个资源中的每个资源映射到与文件系统相关联的一个或多个地址,以循环与基于区块链的程序相关联的一个或多个地址,或者搜索与数据库模块460相关联的路由信息。
图5示出了根据一些实施例的用于基于区块链的去中心化应用开发的处理。取决于实施方式,图5中所示的处理可以包括以各种顺序或并行的方式执行附加的、较少的或可替代的步骤。去中心化应用可以包括客户端应用以及与该客户端应用相关联的一个或多个区块链合约。客户端应用可以提供在其中接收用户输入并显示输出的接口。客户端应用可以将后端计算和处理中继(relay)到存储有一个或多个区块链合约的区块链。特别地,与一个或多个区块链合约相关联的逻辑可以由与该区块链相关联的一个或多个虚拟机执行。
在一些实施例中,可以提供IDE,并且IDE可以实现在同一环境中开发与去中心化应用相关联的区块链合约和客户端应用。如图5所示,IDE可以包括用于区块链合约的开发环境510和/或用于客户端应用的开发环境520。这样的IDE可以在图3所示的一个或多个计算系统330上实现。开发环境510和520可以经由网关530与一个或多个存储系统540以及一个或多个区块链关联的一个或多个系统550接口。与一个或多个区块链相关联的一个或多个系统550可以承载和操作多种服务,诸如账户服务、合约服务、公证服务、其他合适的服务或其任意组合。这里,网关530可以类似于图3所示的网关316来实现。一个或多个存储系统540可以类似于与如图3所示的一个或多个计算设备312相关联的文件系统来实现。与一个或多个区块链相关联的一个或多个系统550可以被实现为如图3所示的区块链系统311、应用服务器315或者区块链系统311和应用服务器315的组合。
在一些实施例中,用于基于区块链的去中心化应用开发的处理可以在步骤501开始。IDE(例如510)可以基于多个输入来生成区块链合约和与区块链合约相关联的接口规范。在一个实施例中,多个第一输入可以由去中心化应用的开发者在IDE提供的用户接口中输入。输入可以包括与区块链合约相关联的源代码。源代码可以用开发人员选择的一种或多种编程语言(例如,Solidity,C++)编写。在一些实施例中,IDE可以提供各种工具来协助开发人员创建新的区块链合约。这些工具可以包括:例如用于区块链合约模板的市场、经验证或验证有效的区块链合约的数据库、以不同语言或针对不同区块链平台创建的区块链合约的翻译或转换、其他合适的工具或其任意组合。
在一些实施例中,在步骤502,IDE(例如,510)可以基于输入来获得与区块链合约相关联的源代码,并编译所获得的源代码以生成与区块链合约相关联的字节码。在编译源代码之前,IDE可能会对源代码执行检查。例如,IDE可以分析获得的源代码以识别一个或多个语法问题,或者分析所获得的源代码以识别与区块链合约相关联的一个或多个安全问题。
在一些实施例中,IDE(例如510)可以进一步生成与区块链合约相关联的接口规范。接口规范可以包括与区块链合约相关联的应用二进制接口(ABI)的规范。ABI的规范可以包括对与区块链合约相关联的一个或多个接口函数中的每个的说明。
在步骤503,IDE(例如510)可以将区块链合约部署在区块链上。在一些实施例中,IDE可以生成包括区块链合约的逻辑的一个或多个区块链交易,其中,可执行一个或多个区块链交易以将区块链合约添加到区块链。IDE可以通过网关530将区块链交易发送到与区块链相关联的计算机系统550。计算机系统550可包括与区块链相关联的一个或多个区块链节点。一个或多个区块链节点可以将区块链交易添加到区块链,使得区块链合约被登记在区块链上。在一些实施例中,IDE可以将与区块链合约相关联的字节码发送到与区块链相关联的计算机系统550。该字节码可以由与计算机系统550相关联的合约服务来处理,该合约服务可以将与区块链合约关联的字节码添加到区块链。
在一些实施例中,IDE(例如510)还可以提供用于测试区块链合约的工具。例如,在将区块链合约部署在区块链上之前,IDE可以生成与区块链合约相关联的一个或多个单元测试用例,并执行一个或多个单元测试用例以测试区块链合约。单元测试用例可以自动生成,也可以基于多个输入生成。IDE可以使用一种或多种其他合适的方法来测试区块链合约。
在步骤504,开发环境510可以将与区块链合约相关联的接口规范提供给客户端应用的开发环境520。在一些实施例中,开发环境520可以加载与区块链合约相关联的接口规范。在一些实施例中,IDE可以基于接口规范来生成与区块链合约相关联的对象。可以以基于对象的编程语言生成对象,在该基于对象的编程语言中,将对客户端应用进行编程(例如,JavaScript)。该对象可以包括与区块链合约的接口规范相关联的一种或多种方法。可以调用一种或多种方法来与区块链合约进行交互。IDE可以将与对象关联的代码合并到与客户端应用关联的源代码中。步骤504可以或可以不与步骤503同时发生。
在步骤505,IDE(例如520)可基于多个输入和与区块链合约相关联的接口规范来生成客户端应用。可执行客户端应用以调用部署在区块链上的区块链合约。在一些实施例中,客户端应用的源代码可以包括与区块链合约相关联的对象。用于创建客户端应用的一个或多个输入可调用与接口规范相关联的一种或多种方法,以建立客户端应用和区块链合约之间的依赖关系,并启用客户端应用和与区块链合约相关联的接口以相互调用。IDE可在客户端应用中包含与区块链合约和基于输入的源代码相关联的对象。
在一些实施例中,为了与部署在区块链上的区块链合约接口,客户端应用可能需要与区块链相关联的软件开发工具包。IDE(例如,520)可以在客户端应用中集成与区块链相关联的SDK。在一些实施例中,客户端应用可以调用运行在计算机系统550或应用服务器315中的一个或多个基于区块链的程序。用于创建客户端应用的一个或多个输入可以包括对与该区块链相关联的一个或多个基于区块链的程序的一个或多个引用。可执行客户端应用,以调用一个或多个基于区块链的程序。IDE可以在客户端应用中集成与一个或多个基于区块链的程序相关联的一个或多个SDK。
在一些实施例中,IDE(例如510、520)可以提供用于测试包括客户端应用和区块链合约的去中心化应用的一个或多个工具。在一些实施例中,IDE可以为客户端应用提供一个或多个仿真器,为区块链合约提供一个或多个仿真器。仿真器可用于模拟去中心化应用的执行并测试去中心化应用的功能,例如客户端应用与区块链合约之间的相互调用。在一些实施例中,IDE可以提供用于测试区块链合约或客户端应用的一个或多个仿真器,并使用一个或多个仿真器来执行客户端应用或区块链合约以识别与客户端应用或区块链合约相关联的一个或多个问题。经过适当的测试后,IDE可以准备客户端应用进行部署。
在一些实施例中,在步骤507,IDE(例如520)可以将客户端应用存储于在线存储系统540中。IDE可以编译和打包客户端应用。然后,IDE可以将客户端应用发送到一个或多个系统进行存储和发布。例如,可在根据星际文件系统(IPFS)协议的分布式文件系统或基于云的存储系统上存储和发布客户端应用。用户可以从在线存储系统540下载客户端应用。在一些实施例中,客户端应用可在去中心化应用市场中列出以供用户访问。
在一些实施例中,如果在与客户端应用集成期间或在测试期间更新了区块链合约,则在步骤508,IDE可以通过网关530将区块链合约部署到区块链。在一些实施例中,步骤508可以与步骤507同时发生。
图6示出了根据一些实施例的用于基于区块链的去中心化应用开发的方法。方法600可以由用于基于区块链的去中心化应用开发的设备、装置、或系统执行。方法600可以由图1-3和图5示出的环境或系统中的一个或多个组件执行,诸如图3中用于去中心化应用开发的计算机系统330的一个或多个组件,或者图5中的IDE 510和520中的一个或多个组件。取决于实施例,方法600可以包括以各种顺序或并行执行的附加的、更少的或替代的步骤。
框610包括:基于多个第一输入生成区块链合约和与所述区块链合约相关联的接口规范。在一些实施例中,生成区块链合约包括:基于多个第一输入来获得与区块链合约相关联的源代码,并编译所获得的源代码以生成与区块链合约相关联的字节码。在一些实施例中,与区块链合约相关联的接口规范包括与区块链合约相关联的应用二进制接口(ABI)的规范,其中,ABI的规范包括与区块链合约相关联的一个或多个接口函数中的每个的说明。
在一些实施例中,生成区块链合约还包括:在编译所获得的源代码以生成字节码之前,分析所获得的源代码以识别一个或多个语法问题,或者分析所获得的源代码以识别与区块链合约相关联的一个或多个安全问题。在一些实施例中,生成区块链合约包括:基于多个第三输入生成与区块链合约相关联的一个或多个单元测试用例,以及执行所述一个或多个单元测试用例以测试区块链合约。
框620包括:在区块链上部署区块链合约。
框630包括:基于多个第二输入和与区块链合约相关联的接口规范来生成客户端应用,其中,可执行该客户端应用以调用部署在区块链上的区块链合约。在一些实施例中,生成客户端应用包括在客户端应用中集成与区块链相关联的软件开发工具包(SDK)。在一些实施例中,一个或多个第二输入包括对与该区块链相关联的一个或多个基于区块链的程序的一个或多个引用。可执行客户端应用以调用一个或多个基于区块链的程序。在一些实施例中,生成客户端应用包括将与一个或多个基于区块链的程序相关联的一个或多个SDK集成在客户端应用中。
在一些实施例中,生成客户端应用包括基于接口规范生成与区块链合约相关联的对象,其中,该对象包括与接口规范相关联的一种或多种方法;获得多个第二输入,其中,一个或多个第二输入包括调用与接口规范相关联的一种或多种方法的源代码;以及将与区块链合约相关联的对象和源代码包含在客户端应用中。在一些实施例中,生成客户端应用包括:提供用于测试区块链合约或客户端应用的一个或多个仿真器,以及使用一个或多个仿真器来执行客户端应用或区块链合约,以识别与客户端应用或区块链合约相关的一个或多个问题。
框640包括:将客户端应用存储于在线存储系统中。在一些实施例中,在线存储系统包括根据星际文件系统(IPFS)协议的分布式文件系统或基于云的存储系统。
在一些实施例中,所述方法还包括提供用于区块链合约开发和应用开发的集成开发环境(IDE);在IDE中接收多个第一输入;以及在IDE中接收多个第二输入。
图7示出了根据一些实施例的用于基于区块链的去中心化应用开发的计算机系统的框图。系统700可以是图3中用于去中心化应用开发的计算机系统330中的一个或多个组件、图5中的IDE 510和520中的一个或多个组件、或者图1-3和图5中所示的一个或多个其他组件的实施方式的示例。方法600可以由计算机系统700实现。计算机系统700可以包括一个或多个处理器以及一个或多个非暂态计算机可读存储介质(例如,一个或多个存储器),所述非暂态计算机可读存储介质耦接到所述一个或多个处理器并配置有可由所述一个或多个处理器执行,以促使系统或设备(例如,处理器)执行例如方法600的上述方法的指令。计算机系统700可以包括与指令(例如,软件指令)对应的各种单元/模块。在一些实施例中,计算机系统700可以被称为用于基于区块链的去中心化应用开发的装置。所述装置可以包括:第一生成模块710,用于基于多个第一输入生成区块链合约和与区块链合约相关联的接口规范;部署模块720,用于在区块链上部署区块链合约;第二生成模块730,用于基于多个第二输入和与区块链合约相关联的接口规范,生成客户端应用,其中,可执行客户端应用以调用部署在区块链上的区块链合约;以及存储模块740,用于将客户端应用存储于在线存储系统中。
本文描述的技术可由一个或多个专用计算设备实现。专用计算设备可以是台式计算机系统、服务器计算机系统、便携式计算机系统、手持设备、网络设备或包含硬连线和/或程序逻辑以实现这些技术的任何其他设备或设备的组合。专用计算设备可以被实现为个人计算机、膝上型计算机、蜂窝电话、照相电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板电脑、可穿戴设备或其组合。计算设备通常可由操作系统软件控制和协调。传统的操作系统控制和调度用于执行的计算机进程,执行存储器管理,提供文件系统、网络、I/O服务,以及提供用户接口功能,例如图形用户界面(“GUI”)等。本文描述的各种系统、装置、存储介质、模块和单元可以在专用计算设备或者一个或多个专用计算设备的一个或多个计算芯片中实现。在一些实施例中,本文描述的指令可以在专用计算设备上的虚拟机中实现。当被执行时,指令可以促使专用计算设备执行本文描述的各种方法。虚拟机可以包括软件、硬件或其组合。
图8示出了可以实现本文描述的任何实施例的计算机系统的框图。系统800可以在图1至图7所示的环境或系统的任何组件中实现。可以在系统800上实现和操作图1至图7中所示的软件应用或服务。图1至图7所示的一个或多个示例性方法可以由计算机系统800的一个或多个实施方式执行。
计算机系统800可以包括用于通信信息的总线802或其他通信机制、与总线802耦合以处理信息的一个或多个硬件处理器804。硬件处理器804可以是例如一个或多个通用微处理器。
计算机系统800还可以包括耦合到总线802、用于存储可由处理器804执行的信息和指令的主存储器806,例如随机存取存储器(RAM)、高速缓存和/或其他动态存储设备。主存储器806还可以用于在执行可由处理器804执行的指令期间存储临时变量或其他中间信息。当这些指令存储在处理器804可访问的存储介质中时,这些指令将计算机系统800呈现为被定制以执行指令中指定的操作的专用机器。计算机系统800还可以包括耦合到总线802、用于存储处理器804的静态信息和指令的只读存储器(ROM)808或其他静态存储设备。诸如磁盘、光盘或USB拇指驱动器(闪存驱动器)等的存储设备810可以被提供并被耦合到总线802以存储信息和指令。
计算机系统800可使用与计算机系统相结合使得计算机系统800成为专用机器或将计算机系统800编程为专用机器的定制硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑实现本文所述的技术。根据一个实施例,这里描述的操作、方法和处理由计算机系统800响应于处理器804执行主存储器806中包含的一个或多个指令的一个或多个序列而执行。这些指令可从例如存储设备810的另一存储介质读入主存储器806。主存储器806中包含的指令序列的执行可促使处理器804执行这里描述的处理步骤。在替代实施例中,可使用硬连线电路代替软件指令或与软件指令组合。
主存储器806、ROM 808和/或存储设备810可以包括非暂时性存储介质。这里使用的术语“非暂时性介质”和类似术语是指存储促使机器以特定方式操作的数据和/或指令的介质,所述介质不包括暂时性信号。这种非暂时性介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,例如存储设备810。易失性介质包括动态存储器,例如主存储器806。常规形式的非暂时性介质包括,例如,软磁盘、软盘、硬盘、固态驱动器、磁带或任何其他磁数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其他存储器芯片或盒式磁带以及它们的网络版本。
计算机系统800还可以包括耦合到总线802的网络接口818。网络接口818可以提供耦合到一个或多个网络链路的双向数据通信,所述一个或多个网络链路连接到一个或多个本地网络。例如,网络接口818可以是综合业务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器或调制解调器,以提供与相应类型的电话线的数据通信连接。作为另一示例,网络接口818可以是局域网(LAN)卡,以提供与兼容LAN(或WAN组件以与WAN通信)的数据通信连接。还可以实现无线链路。在任何这样的实施方式中,网络接口818可以发送和接收携带表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。
计算机系统800可以通过网络、网络链路和网络接口818发送消息和接收数据,包括程序代码。在因特网示例中,服务器可以通过因特网、ISP、本地网络和网络接口818发送用于应用程序的请求代码。
所接收的代码当被接收时可以由处理器804执行,和/或存储在存储设备810或其他非易失性存储器中以用于稍后执行。
前面部分中描述的每个处理、方法和算法可体现在由包括计算机硬件的一个或多个计算机系统或者计算机处理器执行的代码模块中并且被其完全或部分自动化地实现。处理和算法可以部分或全部地在专用电路中实现。
上述各种特征和处理可以彼此独立地使用,或者可以以各种方式组合。所有可能的组合和子组合都旨在落入本文的范围内。另外,在一些实施方式中可以省略某些方法或处理框。本文描述的方法和处理也不限于任何特定顺序,与其相关的框或状态可以以适当的其他顺序执行。例如,所描述的框或状态可以以不同于具体公开的顺序执行,或者多个框或状态可以在单个框或状态中组合。框或状态的示例可以串行、并行或以某种其他方式执行。可以将框或状态添加到所公开的实施例中或从所公开的实施例中移除。这里描述的系统和组件的示例可以与所描述的不同地被配置。例如,与所公开的实施例相比,可以添加、移除或重新布置元件。
本文描述的方法的各种操作可以至少部分地由被临时配置(例如,通过软件)或被永久配置为执行相关操作的一个或多个处理器执行。无论是临时配置还是永久配置,这样的处理器可以构成处理器实现的引擎,所述处理器实现的引擎用于执行本文描述的一个或多个操作或功能。
类似地,这里描述的方法可以至少部分地由处理器实现,其中特定处理器是硬件的示例。例如,所述方法的至少一些操作可以由一个或多个处理器或处理器实现的引擎执行。此外,一个或多个处理器还可操作以支持“云计算”环境中的相关操作的性能,或作为“软件即服务”(SaaS)操作。例如,至少一些操作可以由一组计算机(作为包括处理器的机器的示例)执行,这些操作可以经由网络(例如,因特网)经由一个或多个适当的接口(例如,应用编程接口(API))被访问。
某些操作的性能可以在处理器之间分配,不仅驻留在单个机器中,而且跨多个机器被部署。在一些实施例中,处理器或处理器实现的引擎可以位于单个地理位置(例如,在家庭环境、办公室环境或服务器群内)。在其他实施例中,处理器或处理器实现的引擎可以分布在多个地理位置。
在本文中,多个实例可以实现作为单个实例所描述的组件、操作或结构。尽管一个或多个方法的各个操作被示出并描述为独立的操作,但是可以同时执行一个或多个独立的操作,并且不需要以所示的顺序执行所述操作。在配置中作为独立组件呈现的结构和功能可以实现为组合结构或组件。类似地,作为单个组件呈现的结构和功能可以实现为独立的组件。这些和其他变化、修改、添加和改进都落入本文中的主题的范围内。
尽管已经参考具体实施例描述了主题的概述,但是在不脱离本文的实施例的较宽范围的情况下,可以对这些实施例进行各种修改和改变。具体实施方式不应被视为具有限制意义,并且各种实施例的范围仅由所附权利要求以及这些权利要求所赋予的等同物的全部范围限定。此外,这里使用的相关术语(诸如“第一”、“第二”、“第三”等)不表示任何顺序、高度或重要性,而是用于将一个元件与另一元件区分开。此外,术语“一”、“一个”和“多个”在本文中并不表示对数量的限制,而是表示存在至少一个所述的物品。