具体实施方式
本文的实施例提供用于管理对区块链系统中的账户的访问的方法和设备。所述方法和设备可以从区块链系统的第一账户接收用以访问区块链系统的第二账户的请求。所述方法和所述设备然后可以基于所述请求确定第一账户的账户级别,确定第二账户的账户级别,以及基于第二账户的账户级别确定第一账户的账户级别是否满足账户条件。所述方法和设备可以基于确定第一账户的账户级别满足账户条件,允许用以访问第二账户的请求。在一些实施例中,第二账户与智能合约对应。
本文公开的实施例具有一个或多个技术效果。在一些实施例中,可以基于用以访问第二账户的请求来确定第一账户的账户级别和第二账户的账户级别。这允许第一账户和第二账户的级别被识别。在一些实施例中,方法和设备可以提供账户栅栏以基于第二账户的账户级别确定第一账户是否满足账户条件。这允许基于级别的访问管理来访问第二账户,例如智能合约。在一些实施例中,方法和设备还可以提供接口栅栏,以确定第一账户级别是否进一步满足接口条件,以便允许访问智能合约的接口。这允许定制的访问管理,以访问智能合约的一个或多个接口。
区块链是以交易可以不被篡改并随后可被验证的方式存储例如交易的数据结构。区块链包括一个或多个区块。每个区块通过包含在区块链中紧邻其之前的前一区块的加密哈希值(cryptographic hash)链接到该前一区块。每个区块还可以包括时间戳、自身的加密哈希值以及一个或多个交易。一般已经被区块链系统的节点验证的交易可以经哈希处理并编入例如默克尔(Merkle)树的数据结构中。在Merkle树中,在该树的叶节点处的数据经哈希处理,并且在该树的每个分支中的所有哈希值可以在该分支的根处级联(concatenated)。沿着树持续该处理一直到整个树的根,在整个树的根处存储了代表树中所有数据的哈希值。通过确定哈希值是否与树的结构一致而可快速验证该哈希值是否为存储在该树中的交易的哈希值。
区块链系统包括管理、更新和维护一个或多个区块链的计算节点的网络。所述网络可以是公有区块链网络、私有区块链网络或联盟区块链网络。例如,多个实体,诸如成百上千甚至上百万的实体,能够在公有区块链网络中操作,每个实体操作该公有区块链网络中的至少一个节点。因此,公有区块链网络可被认为是关于参与的实体的公有网络。有时,多数实体(节点)必须对每个区块进行签名,以使该区块有效并被添加到区块链网络的区块链中。公有区块链网络的示例包括利用分布式账本(即区块链)的特定点对点支付网络。
通常,公有区块链网络可以支持公开交易。公开交易为公有区块链网络中的所有节点共享,且存储于全局区块链中。全局区块链是跨所有节点复制的区块链,并且所有节点相对于全局区块链处于完全状态共识。为达成共识(例如,同意将区块添加至区块链),在该公有区块链网络中实施共识协议。共识协议的示例包括工作量证明(POW)(例如,在某些货币网络中实施)、权益证明(POS)和权限证明(POA)。
通常,可以为特定实体提供私有区块链网络,该特定实体集中控制读写权限。该实体控制哪些节点能参与到该区块链网络中。因此,私有区块链网络通常被称为权限网络,其限制允许谁参与网络,以及它们的参与级别(例如,仅在某些交易中)。可以使用各种类型的访问控制机制(例如,现有参与者对添加新实体进行投票,管理机构可以控制准入)。
通常,联盟区块链网络在参与的实体中可以是私有的。在联盟区块链网络中,共识过程由被授权的节点集控制,一个或多个节点由对应的实体(例如,金融机构、保险公司)操作。例如,由十(10)个实体(例如,金融机构、保险公司)组成的联盟可以操作联盟区块链网络,每个实体可以操作联盟区块链网络中的至少一个节点。因此,联盟区块链网络可以被认为是与参与实体相关的私有网络。在一些示例中,每个实体(节点)必须对每个区块签名,以使区块有效并被添加到区块链中。在一些示例中,至少实体(节点)的子集(例如,至少7个实体)必须对每个区块签名,以使区块有效并被添加到区块链中。
图1示出了根据实施例的区块链系统100的示意图。参考图1,区块链系统100可以包括多个节点,例如节点102-节点110,被配置为在区块链120上操作。节点102-节点110可以形成网络112,例如点对点(peer-to peer,P2P)网络。节点102-节点110中的每一个可以是计算设备,例如计算机或计算机系统,被配置为存储区块链120的副本,或者可以是在计算设备上运行的软件,诸如处理或应用程序。节点102-节点110中的每一个可以具有唯一标识。
区块链120可以包括数据区块形式的增加的记录列表,例如图1中的区块B1-区块B5。区块B1-区块B5中的每一个可以包括时间戳、前一块的加密哈希值、以及当前区块的数据,该数据可以是诸如货币交易之类的交易。例如,如图1所示,区块B5可以包括时间戳、区块B4的加密哈希值和区块B5的交易数据。此外,例如,可以对前一个区块执行哈希操作以生成前一个区块的加密哈希值。哈希操作可以通过诸如SHA-256的哈希算法将各种长度的输入转换为固定长度的加密输出。
节点102-节点110可以被配置为对区块链120执行操作。例如,当节点(例如,节点102)想要将新数据存储到区块链120上时,该节点可以生成要被添加到区块链120的新区块并将新区块广播到其他节点,例如网络112中的节点104-节点110。基于新区块的合法性,例如,其签名和交易的有效性,其他节点可以确定接受新区块,使得节点102和其他节点可以将新区块添加到它们各自的区块链120的副本中。随着该过程重复,可以将越来越多的数据区块添加到区块链120。
图2示出了根据实施例的用于实现区块链系统中例如节点102(图1)的节点的计算设备200的示意图。参考图2,计算设备200可以包括通信接口202、处理器204和存储器206。
通信接口202可以有助于计算设备200与用于实现网络中诸如节点104-节点110(图1)的其他节点的设备之间的通信。在一些实施例中,通信接口202被配置为支持一个或多个通信标准,例如互联网标准或协议、综合业务数字网(ISDN)标准等。在一些实施例中,通信接口202可以包括局域网(LAN)卡、电缆调制解调器、卫星调制解调器、数据总线、电缆、无线通信通道、基于无线电的通信通道、蜂窝通信通道、基于互联网协议(IP)的通信设备或其他用于有线和/或无线通信的通信设备中的一个或多个。在一些实施例中,通信接口202可以基于公有云基础设施、私有云基础设施、公有/私有混合云基础设施。
处理器204可以包括一个或多个专用处理单元、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他各种类型的处理器或处理单元。处理器204与存储器206耦接,并且被配置为执行存储在存储器206中的指令。
存储器206可以被配置为存储处理器可执行的指令和数据,例如区块链120(图1)的副本。存储器206可以包括任何类型的易失性或非易失性存储器设备或其组合,例如静态随机存取存储器(SRAM)、电可擦除可编程只读存储器(EEPROM)、可擦除可编程只读存储器(EPROM)、可编程只读存储器(PROM)、只读存储器(ROM)、磁存储器、闪存或磁盘或光盘。当存储器206中的指令由处理器204执行时,计算设备200可以对区块链120执行操作。
再次参考图1,区块链系统100可以根据一个或多个智能合约操作。每个智能合约可以是被合并到区块链120中的计算机代码形式的计算机协议,用于促进、验证或施行合同的协商或执行。例如,区块链系统100的用户可以使用诸如C++、Java、Solidity、Python等编程语言将商定的条款编程成智能合约,并且当满足条款时,可以由区块链系统100自动执行智能合约,例如执行交易。又例如,智能合约可以包括多个子例程或函数,每个子例程或函数可以是执行特定任务的一系列程序指令。智能合约可以是在完全或部分没有人工交互的情况下执行的操作代码。
由于节点102-节点110中的每个可以存储区块链120的副本,所以节点102-节点110中的每个还可以访问包括在区块链120中的智能合约的副本。在一个实施例中,虚拟机可以在节点102-节点110中的每个上运行,并操作智能合约的副本。例如,虚拟机可以是基于计算机架构的计算机系统的仿真,并提供物理计算机的功能。虚拟机的实现可以涉及专用硬件、软件或者硬件和软件的组合。在一个实施例中,智能合约可以被分配有区块链120上的地址,例如,在智能合约被编译成操作代码之后。智能合约的地址被配置或用于在区块链120中定位智能合约。
在一个实施例中,可以在区块链系统100中创建多个账户。例如,区块链系统100的节点(例如,节点102)可以运行虚拟机来承载多个账户。又例如,多个账户可以包括一个或多个合约账户以及一个或多个常规账户。
合约账户可以对应于智能合约,并且包括具有至少一个函数的智能合约的操作代码。在一些实施例中,合约账户可以用作系统级账户,其包括涉及例如区块链系统100的核心功能的系统级智能合约。
常规账户可以是用户创建的账户。例如,常规账户可以基于用户的私钥来创建,并且可以存储关于用户的用户信息,例如交易或余额信息。常规账户通常不与智能合约对应。然而,常规账户可以通过调用函数或与智能合约的函数相关的接口来访问例如系统级智能合约的智能合约。
图3示出了根据实施例的例如区块链系统100(图1)的区块链系统的虚拟机300的示意图。例如,虚拟机300可以在区块链系统的节点上运行,并且操作与智能合约310相对应的账户。智能合约310可以由用户创建并且可以由与用户相关联的合约账户访问。在创建对应于智能合约310的账户时,可以基于用户的授权来定义账户的账户级别,本文也称为智能合约310的访问级别。
在一个实施例中,访问级别可以分别是例如公共级别(public level)、受保护级别(protected level)和特权级别(privileged level)的第一预定级别、第二预定级别和第三预定级别之一。例如,公共级别可以指示智能合约310是公共可访问的并且对应于对智能合同310的访问的低级别限制。又例如,受保护级别可以指示智能合同310仅可以由满足特定条件的账户访问,并且对应于对智能合约310的访问的中等级别限制。作为另一示例,特权级别可以指示智能合约310仅可由指定账户访问并且对应于对智能合约310的访问的高级别限制。
在一个实施例中,用户的授权可以允许用户将智能合约310的访问级别定义为上述级别中的一个或多个。例如,创建区块链系统的用户可以具有最高授权并且可以定义具有任何访问级别的智能合约,例如特权级别。在一些实施例中,区块链系统可以验证用户的授权,并基于用户请求的访问级别和用户的授权来确定智能合约310的访问级别。例如,如果用户请求的例如特权级别的访问级别高于或超出用户的例如公共级别或受保护级别的授权,则区块链系统可以拒绝用户的请求并将智能合同310定义为受保护级别。应当理解,如果用户没有请求智能合约的访问级别,则可以为智能合约分配默认访问级别,例如公共级别。在一个实施例中,智能合约310可以在与区块链系统中的关联合约账户一起创建时被分配有唯一身份。
在一些实施例中,智能合约310可以包括至少一个接口。例如,如图3所示,智能合约310包括接口“发布(Issue)”,接口“转移(Transfer)”和接口“查询(Query)”。每个接口可以与智能合约310的函数相关,并且可以通过访问该接口来调用该函数。例如,接口“发布”可以用于调用用于发布代币的函数,接口“转移”可以用于调用用于将代币从一个账户转移到另一账户的函数,并且可以使用接口“查询”调用用于查询账户余额的函数。
在一个实施例中,可以为接口分配接口级别。接口级别可以由创建合约账户的用户确定,或者由区块链系统确定。例如,区块链系统可以确定例如接口“发布”的接口是否是系统级接口,并且响应于确定接口是系统级接口而将例如特权级别的接口级别分配给接口。应当理解,如果在创建期间没有定义接口的接口级别,则可以为接口分配默认接口级别。例如,默认情况下,接口级别可以是“公共”级别。
在该实施例中,类似于智能合约310的访问级别,接口级别可以分别是例如公共级别、受保护级别和特权级别的第一预定级别、第二预定级别和第三预定级别之一。例如,公共级别可以指示接口是公共可访问的并且对应于对接口的访问的低级别限制。又例如,受保护级别可以指示接口仅可由满足特定条件的账户访问,并且对应于对接口的访问的中等级别限制。作为另一示例,特权级别可以指示接口仅可由指定账户访问,并且对应于对接口的访问的高级别限制。
如上所述,可以在区块链系统中创建多个账户。在一个实施例中,可以基于区块链系统的用户的私钥来创建常规账户320。常规账户320的账户级别可以在创建时由区块链系统确定。例如,可以基于用户的私钥将常规账户320的账户级别确定为受保护级别。常规账户320本身可以不包括智能合约,但是可以例如通过智能合约310的接口访问智能合约310。应当理解,常规账户320在区块链系统中还具有唯一身份。
除了常规账户320之外,还可以基于区块链系统中的另一智能合约来创建合约账户330。合约账户330的账户级别可以在创建时由区块链系统确定。例如,可以基于另一智能合约将合约账户330的账户级别确定为特权级别。
在该实施例中,类似于智能合约310的访问级别和接口级别,账户级别可以分别是例如公共级别、受保护级别和特权级别的第一预定级别、第二预定级别和第三预定级别之一。例如,公共级别可以指示账户具有低级别的可访问度并且仅可以访问公共级别的智能合约和接口。又例如,受保护级别可以指示账户满足某些条件并且仅可以访问受保护级别或更低级别的智能合约和接口。作为另一示例,特权级别可以指示账户是可以访问特权级别或更低级别的合约和接口的指定账户。因为在实施例中特权级别是最高级别,所以特权级别的账户通常可以访问任何智能合约或接口。
在一个实施例中,虚拟机300还操作许可栅栏(permission fence)340。许可栅栏340是管理对区块链系统中的例如智能合约310的智能合约的访问的软件组件。例如,许可栅栏340可以包括用于管理对智能合约310的访问的账户栅栏(account fence)340A和用于管理对智能合约310的接口的访问的接口栅栏(interface fence)340B。应当理解,许可栅栏340也可以基于硬件来实现,并且可以包括比账户栅栏340A和接口栅栏340B更多或更少的栅栏。
当区块链系统的虚拟机300从账户接收到用以访问智能合约310的请求时,许可栅栏340可以基于该请求确定账户的账户级别。许可栅栏340还可以确定智能合约310的访问级别,并基于账户级别和访问级别确定是否允许该请求。将参考图4A至图4E进一步描述细节。
图4A示出了根据实施例的用于管理对账户的访问的方法的示意图,该账户例如是对应于智能合约410的合约账户。如图4A所示,虚拟机300(图3)承载例如区块链系统100(图1)的区块链系统中的智能合约410。在该实施例中,虚拟机300操作进一步包括账户栅栏340A的许可栅栏340,并且合约账户的账户级别(本文也称为智能合约410的访问级别)是公共级别。区块链系统还包括账户422、424和426,并且账户422、424和426的账户级别分别被假定为公共级别、受保护级别和特权级别。应当理解,账户422、424和426可以包括常规账户或合约账户。
在一个实施例中,当账户422、424和426发出用以访问合约账户(即,智能合约410)的请求时,许可栅栏340的账户栅栏340A可以基于相应的请求确定账户的账户级别。如上所述,每个账户可以具有唯一身份,并且账户栅栏340A可以基于唯一身份确定账户的账户级别。在一些实施例中,账户栅栏350A可以通过使用查询表来确定账户级别。查询表可以包括账户级别和账户身份之间的关系。通过在查询表中搜索账户身份,账户栅栏340A可以确定相应的账户级别。在一些实施例中,来自账户的请求可以指示账户级别。例如,请求的头部可以包括账户级别的信息。
账户栅栏340A还可以确定智能合约410的访问级别。在一些实施例中,账户栅栏340A可以通过虚拟机300获取访问级别。
基于账户422、424或426中每个的账户级别以及智能合约410的访问级别,账户栅栏340A可以基于智能合约410的访问级别确定账户级别是否满足账户条件。账户条件可以包括账户级别高于或等于访问级别。例如,在图4A中,对于每个账户,账户栅栏340A可以确定账户级别是否高于或等于访问级别。由于智能合约410在该实施例中具有公共级别,因此所有账户级别都高于或等于该访问级别。因此,账户422、424和426的账户级别都满足账户条件。
响应于确定账户422、424和426的账户级别满足账户条件,账户栅栏340A允许用以访问智能合约410的请求。
图4B示出了根据实施例的用于管理对账户的访问的方法的示意图,该账户例如是对应于智能合约412的合约账户。在该实施例中,类似于图4A中示出的实施例,账户422、424和426发出用以访问合约账户(即,智能合约412)的请求,并且虚拟机300操作进一步包括账户栅栏340A的许可栅栏340。另外,合约账户的账户级别(本文也称为智能合约412的访问级别)是受保护级别。因为账户422的账户级别(即,公共级别)低于智能合约412的受保护级别,并且账户424和426的账户级别高于或等于智能合约412的受保护级别,因此账户栅栏340A拒绝账户422的访问请求(由虚线示出),并且允许账户424和426的访问请求(由实线示出)。
图4C示出了根据实施例的用于管理对账户的访问的方法的示意图,该账户例如是对应于智能合约414的合约账户。在该实施例中,类似于图4A所示的实施例,账户422、424和426发出用以访问合约账户(即,智能合约414)的请求,并且虚拟机300操作进一步包括账户栅栏340的许可栅栏340。另外,合约账户的账户级别(本文也称为智能合约414的访问级别)是特权级别。因为账户422和424的账户级别(即,公共级别和受保护级别)低于智能合约414的特权级别,并且账户426的账户级别等于智能合约414的特权级别,因此账户栅栏340A拒绝账户422和424的访问请求(由虚线示出),并且允许账户426的访问请求(由实线示出)。
图4D示出了根据实施例的用于管理对账户的访问的方法的示意图,该账户例如是对应于智能合约416的合约账户。如图4D所示,账户422、424和426分别发出用以访问智能合约416的接口“转移”、接口“查询”以及接口“发布”的请求。在该实施例中,接口“转移”的接口级别是受保护级别,接口“查询”的接口级别是公共级别,接口“发布”的接口级别是特权级别。应当理解,可以基于实际需要为这些接口分配不同的接口级别。
虚拟机300操作进一步包括账户栅栏340A和接口栅栏340B的许可栅栏340,以管理对智能合约416的访问。因为在该实施例中智能合约416的访问级别是公共级别,所以账户422、424和426的账户级别均高于或等于智能合约416的访问级别,即账户422、424和426满足账户条件。因此,账户栅栏340A允许账户422、424和426的用以访问智能合约416的请求。接口栅栏340B还可以确定是否允许用以访问特定接口的每个请求。
接口栅栏340B可以确定每个接口的接口级别。例如,接口栅栏340B可以确定接口“转移”、“查询”、“发布”的接口级别分别为受保护级别、公共级别和特权级别。接口栅栏340B还可以确定每个账户的账户级别是否满足接口条件。接口条件可以包括账户级别高于或等于接口级别。例如,账户424的账户级别是受保护级别,其高于接口“查询”的接口级别,即公共级别。因此,账户424的账户级别满足接口条件。
响应于确定账户424的账户级别满足接口条件,接口栅栏340B可以允许用以访问智能合约416的接口“查询”的请求。类似地,可以允许账户426的用以访问智能合约416的接口“发布”的请求,但是可以拒绝账户422的用以访问智能合约416的接口“转移”的请求,这是因为账户422的账户级别,即公共级别,低于接口“转移”的接口级别,即受保护级别。
在该实施例中,用以访问接口的请求可以由账户栅栏和接口栅栏管理。当账户栅栏和接口栅栏都允许该请求时,账户可以访问该接口。
尽管图4A至图4D中示出的方法使用合约账户作为要访问的账户的示例,应当理解,这些方法可以类似地应用于常规账户。
图5是根据实施例的用于管理对区块链系统中的账户的访问的方法500的流程图。方法500可由计算机系统执行。计算机系统可包括存储指令集的存储器和执行该指令集从而促使计算机系统执行方法500的至少一个处理器。例如,计算机系统可以是操作虚拟机300(图3及图4A至图4D)的节点102(图1)。参考图5,方法500可以包括以下步骤。
在步骤502,计算机系统可以从区块链系统的第一账户接收用以访问区块链系统的第二账户的请求。
在步骤504,计算机系统可以基于该请求确定第一账户的账户级别。例如,计算机系统可以基于该请求确定第一账户的身份,然后基于所确定的身份确定第一账户的账户级别。账户级别可以是公共级别、受保护级别或特权级别之一。
在步骤506,计算机系统可以确定第二账户的账户级别。第二账户的账户级别也可以是公共级别、受保护级别或特权级别之一,并且默认情况下可以是公共级别。当第二账户是对应于智能合约的合约账户时,智能合约还可以包括与智能合约的函数相关的接口,并且计算机系统可以进一步确定接口的接口级别。接口级别也可以是公共级别、受保护级别或特权级别之一,默认情况下可以是公共级别。
在步骤508,计算机系统可以基于第二账户的账户级别确定第一账户的账户级别是否满足账户条件。账户条件包括第一账户的账户级别高于或等于第二账户的账户级别。
在一些实施例中,用以访问第二账户的请求还可以包括用以访问智能合约的接口的请求。计算机系统还可以基于接口级别确定第一账户的账户级别是否满足接口条件;并且响应于确定账户级别满足接口条件(图5中未示出),允许用以访问智能合约的接口的请求。接口条件可以包括第一账户的账户级别高于或等于接口级别。
在步骤510,计算机系统可以基于确定第一账户的账户级别满足账户条件,允许用以访问第二账户的请求。
在步骤512,如果账户级别未能满足账户条件,则计算机系统可以拒绝用以访问第二账户的请求。类似地,响应于确定第一账户的账户级别不满足接口条件,即使满足账户条件,计算机系统也可以拒绝用以访问智能合约的接口的请求。例如,智能合约可以包括具有第一接口条件的第一接口和具有第二接口条件的第二接口,该请求还包括用以访问第一接口的第一请求和用以访问第二接口的第二请求,以及计算机系统可以响应于确定账户的账户级别满足账户条件和第一接口条件,允许用以访问第一接口的第一请求,并且响应于确定账户的账户级别不满足账户条件或第二接口条件,拒绝用以访问第二接口的第二请求。
图6是根据实施例的用于管理对区块链系统中的账户的访问的装置600的框图。例如,装置600可以执行方法500(图5)。参考图6,装置600可以包括接口模块602、级别确定模块604和允许模块606。
接口模块602可以从区块链系统的第一账户接收用以访问区块链系统的第二账户的请求。
级别确定模块604可以基于该请求确定第一账户的账户级别、确定第二账户的账户级别,并且确定第一账户的账户级别是否满足与第二账户相关联的账户条件。
允许模块606可以响应于确定第一账户的账户级别满足账户条件而允许用以访问第二账户的请求,或者响应于确定第一账户的账户级别不满足账户条件而拒绝用以访问第二账户的请求。
每个上述模块可以实现为软件或硬件,或软件和硬件的组合。例如,可以使用处理器执行存储在存储器中的指令的来实现上述每个模块。又例如,每个上述模块可以用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑设备(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他用于执行所描述的方法电子组件中的一个或多个实现。又例如,上述模块中的每个可以通过使用计算机芯片或实体来实现,或者可以通过使用具有特定功能的产品来实现。在一个实施例中,装置600可以是计算机,所述计算机可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板电脑、可穿戴设备或这些设备的任意组合。
对于装置600中各个模块的功能和角色的实施过程,可以参考前一方法中相应步骤。为简单起见,这里省略了细节。
在一些实施例中,计算机程序产品可以包括非暂时性计算机可读存储介质,其上具有计算机可读程序指令,用于促使处理器执行上述方法。
计算机可读存储介质可以是有形设备,其可以存储供指令执行设备使用的指令。计算机可读存储介质可以是但不限于,例如,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备,或者前述的任何合适的组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、静态随机存取存储器(SRAM)、便携式光盘只读存储器(CD-ROM)、数字通用光盘(DVD)、记忆棒、软盘、例如,在其上记录有指令的凹槽中的穿孔卡或凸起结构的机械编码设备,以及前述的任何合适的组合。
用于执行上述方法的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据或以一种或多种编程语言的任意组合编写的源代码或目标代码,所述语言包括面向对象的编程语言和传统的过程编程语言。计算机可读程序指令可以完全在计算设备上作为独立软件包执行,或者部分在第一计算设备上执行,部分在远离第一计算设备的第二计算设备上执行。在后一种情况下,第二远程计算设备可以通过包括局域网(LAN)或广域网(WAN)的任何类型的网络连接到第一计算设备。
计算机可读程序指令可以被提供给通用或专用计算机的处理器,或其他可编程数据处理装置,以产生一个机器,使得指令通过计算机的处理器或其他可编程数据处理设备执行,以创建用于实现上述方法的装置。
附图中的流程图和图示出了根据本文的各种实施例的设备、方法和计算机程序产品的可能实施方式的架构、功能和操作。在这方面,流程图或图中的框可以表示包括用于实现特定功能的一个或多个可执行指令的软件程序、段或代码的一部分。还应注意,在一些可选实施方式中,框中提到的功能可以不按图中所示的顺序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还应注意,图和/或流程图的每个框以及图和流程图中的框的组合可以由执行特定功能或动作的基于硬件的专用系统或专用硬件和计算机指令的组合来实现。
应当理解,为了清楚起见,在单独的实施例的上下文中描述的本文的某些特征也可以在单个实施例中组合提供。相反,为了简洁起见,在单个实施例的上下文中描述的说明书的各种特征也可以单独提供或者以任何合适的子组合提供,或者在本文的任何其他描述的实施例中合适地提供。除非另有说明,否则在各种实施例的上下文中描述的某些特征不是那些实施例的必要特征。
尽管已经结合具体实施例描述了本文,但是许多替代、修改和变化对于本领域技术人员来说是明显的。因此,以下权利要求包含落入权利要求的范围内的所有这些替代、修改和变化。