1.本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链服务的调用方法和装置。
背景技术:2.区块链技术,也被称为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式智能数据库的新兴技术。由于区块链技术具有去中心化、公开透明、各计算设备可以参与数据库记录、不同的计算设备之间可以快速的进行数据同步、支持分布式程序的一致性执行等特性,使得区块链技术已在众多的领域中广泛地进行应用。
技术实现要素:3.本说明书一个或多个实施例提供技术方案如下:本说明书提供一种区块链服务的调用方法,所述方法应用于与部署在区块链上的区块链服务对应的服务端;其中,所述区块链上还部署了用于对所述区块链服务的调用进行管理的智能合约;所述区块链维护了用户针对所述区块链服务的剩余调用次数;所述方法包括:接收与用户对应的客户端发送的针对所述区块链服务的调用数据;响应于所述调用数据,调用所述智能合约中的验证逻辑,验证所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值;如果所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值,基于所述调用数据调用所述区块链服务。
4.本说明书还提供一种区块链服务的调用方法,所述方法应用于与用户对应的用户客户端;其中,区块链上部署了区块链服务,以及用于对所述区块链服务的调用进行管理的智能合约;所述区块链维护了用户针对所述区块链服务的剩余调用次数;所述方法包括:获取针对所述区块链服务的调用数据;将所述调用数据发送给与所述区块链服务对应的服务端,以使所述服务端响应于所述调用数据,调用所述智能合约中的验证逻辑,验证所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值,如果所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值,基于所述调用数据调用所述区块链服务。
5.本说明书还提供一种区块链服务的调用装置,所述装置应用于与部署在区块链上的区块链服务对应的服务端;其中,所述区块链上还部署了用于对所述区块链服务的调用进行管理的智能合约;所述区块链维护了用户针对所述区块链服务的剩余调用次数;所述装置包括:
接收模块,用于接收与用户对应的客户端发送的针对所述区块链服务的调用数据;验证模块,用于响应于所述调用数据,调用所述智能合约中的验证逻辑,验证所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值;调用模块,用于在所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值时,基于所述调用数据调用所述区块链服务。
6.本说明书还提供一种区块链服务的调用装置,所述装置应用于与用户对应的用户客户端;其中,区块链上部署了区块链服务,以及用于对所述区块链服务的调用进行管理的智能合约;所述区块链维护了用户针对所述区块链服务的剩余调用次数;所述装置包括:获取模块,用于获取针对所述区块链服务的调用数据;调用模块,用于将所述调用数据发送给与所述区块链服务对应的服务端,以使所述服务端响应于所述调用数据,调用所述智能合约中的验证逻辑,验证所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值,如果所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值,基于所述调用数据调用所述区块链服务。
7.本说明书还提供一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
8.本说明书还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
9.在上述技术方案中,与区块链服务对应的服务端可以响应于接收到的与用户对应的客户端发送的针对该区块链服务的调用数据,调用智能合约中的验证逻辑,验证该用户是否具有针对该区块链服务的调用权限,并确定该用户针对该区块链服务的剩余调用次数是否达到预设阈值,如果该用户具有针对该区块链服务的调用权限,且该剩余调用次数未达到该阈值,则可以基于该调用数据调用该区块链服务。
10.采用上述方式,由于可以在用户每一次调用区块链服务时,先对该用户针对该区块链服务的调用权限和剩余调用次数进行验证,在验证通过的情况下,再允许该用户本次调用该区块链服务,使得区块链服务的服务提供方可以按照用户实际调用该区块链服务的情况,按次向用户收费,提升了用户体验。此外,对用户针对区块链服务的调用权限和剩余调用次数的验证不涉及用户身份,因此,无论用户是否匿名调用区块链服务,服务提供方均可向用户收费,保障了服务提供方的利益。
附图说明
11.图1是本说明书一示例性实施例示出的一种与区块链相关的网络环境的示意图。
12.图2是本说明书一示例性实施例示出的一种区块链服务的调用方法的流程图。
13.图3是本说明书一示例性实施例示出的一种区块链服务的调用授权方法的流程
图。
14.图4是本说明书一示例性实施例示出的一种授权过程中的数据交互的示意图。
15.图5是本说明书一示例性实施例示出的一种区块链服务的调用验证方法的流程图。
16.图6是本说明书一示例性实施例示出的一种验证过程中的数据交互的示意图。
17.图7是本说明书一示例性实施例示出的另一种区块链服务的调用方法的示意图。
18.图8是本说明书一示例性实施例示出的一种区块链服务的调用装置所在电子设备的硬件结构图。
19.图9是本说明书一示例性实施例示出的一种区块链服务的调用装置的框图。
20.图10是本说明书一示例性实施例示出的另一种区块链服务的调用装置的框图。
具体实施方式
21.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
22.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法包括的步骤可以比本说明书中所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
23.区块链一般被划分为三种类型:公有链(public blockchain)、私有链(private blockchain)和联盟链(consortium blockchain)。此外,还可以有上述多种类型的结合,比如私有链与联盟链的结合、联盟链与公有链的结合等。
24.在上述三种类型的区块链中,去中心化程度最高的是公有链。加入公有链的参与方(也可以称为区块链中的节点)可以读取链上的数据记录、参与交易、竞争新区块的记账权等。而且,各节点可自由加入或退出网络,并进行相关操作。
25.私有链则相反,网络的写入权限由某个组织或机构控制,数据读取权限受组织规定。也即,私有链可以视为一个弱中心化系统,其对节点具有严格限制且节点数量较少。这种类型的区块链更适合于特定机构内部使用。
26.联盟链则介于公有链以及私有链之间,可以实现“部分去中心化”。联盟链中的各节点通常有与之对应的实体机构或组织;节点通过授权加入网络并组成利益相关联盟,共同维护区块链的运行。
27.在区块链网络中,节点是逻辑上的通信实体;不同类型的多个区块链节点可以运行在同一个物理服务器上,也可以运行在不同的物理服务器上。
28.请参考图1,图1是本说明书一示例性实施例示出的一种与区块链相关的网络环境的示意图。
29.在如图1所示的网络环境中,可以包括用户侧计算设备101、服务器端102,以及至
少一个区块链系统;例如,区块链系统103、区块链系统104和区块链系统105。
30.在示出的一种实施方式中,用户侧计算设备101,可以包括各种不同类型的用户侧计算设备;例如,用户侧计算设备可以包括诸如pc计算设备、移动计算设备、物联网设备,以及其它形式的具有一定的计算能力的智能设备,等等。
31.需要说明的是,用户侧计算设备101并不表示其中的所有用户侧计算设备在同一个通信网络中,而仅仅是对这些用户侧计算设备的统称。
32.在示出的一种实施方式中,用户侧计算设备101中的部分计算设备,可以通过各种通信网络耦接到服务器端102;例如,设备1和设备2耦接到了服务器端102。
33.用户侧计算设备101中的部分计算设备,也可以不与服务器端102进行耦接,而是作为区块链节点直接耦接到区块链系统;例如,设备3可以作为区块链节点直接耦接到区块链系统103。
34.在示出的一种实施方式中,用户侧计算设备101,还可以包括一个或多个用户侧服务器;例如,设备4和设备5。用户侧计算设备101中的部分计算设备,可以耦接到该用户侧服务器;例如,设备1耦接到了设备4,设备2耦接到了设备5。而该用户侧服务器可以进一步作为区块链节点直接耦接到区块链系统,也可以进一步通过各种通信网络耦接到服务器端102;例如,设备4可以进一步作为区块链节点直接耦接到区块链系统,设备5进一步耦接到了服务器端102。
35.在示出的一种实施方式中,上述用户侧服务器可以由搭建了用户账户体系的服务实体来实现;上述服务实体可以包括面向用户提供各种线上和/或线下服务的服务载体的运营实体。相应地,上述运营实体可以包括上述服务载体对应的运营方;例如,上述运营实体可以包括对上述服务载体进行运营和管理的个人、组织、公司和企业,等等。
36.在示出的一种实施方式中,服务器端102也可以通过各种通信网络耦接到一个或多个区块链系统;例如,服务器端102分别耦接到了区块链系统103、区块链系统104和区块链系统105,等等。
37.在示出的一种实施方式中,上述通信网络可以包括有线和/或无线通信网络;例如,可以是基于运营商提供的有线接入网络或无线接入网络(比如移动蜂窝网络)实现的局域网(local area network,lan)、广域网(wide area network,wan)、因特网或其组合。
38.在示出的一种实施方式中,每个区块链系统都可以维护一个或多个区块链(例如:公有区块链、私有区块链、联盟区块链等),并包括用于承载上述一个或多个区块链的多个区块链节点;例如,如图1中示出的区块链节点1、区块链节点2、区块链节点3、区块链节点4、区块链节点i等可以共同承载一个或多个区块链。各个区块链系统包含的区块链之间,以及各个区块链系统之间,还可以进行跨链的数据访问。
39.在示出的一种实施方式中,区块链节点可以是物理设备,也可以是在服务器或服务器集群中实现的虚拟设备;例如,区块链节点可以是服务器集群中的一台物理主机,也可以是基于虚拟化技术对服务器或服务器集群搭载的硬件资源进行虚拟化后,创建的虚拟机。每个区块链节点之间,可以通过各种类型的通信方法(例如:tcp/ip等)耦接在一起形成网络,来承载一个或多个区块链。
40.在示出的一种实施方式中,服务器端102可以包括用于提供区块链服务(baas,blockchain as a service)的baas平台(也称为baas云)。
41.baas平台可以通过为区块链上发生的活动(诸如订阅和通知、用户验证、数据库管理和远程更新),提供预先编写的软件的方式,面向与baas平台耦接的用户侧计算设备,提供区块链服务。
42.例如,与baas平台可以提供诸如mq(message queue,消息队列)服务之类的软件;与baas平台耦接的用户侧计算设备,可以订阅baas平台耦接到的区块链系统中某一区块链上部署的智能合约,在触发执行后在区块链上产生的合约事件;而baas平台可以监听该智能合约在触发执行后在区块链上产生的事件,再基于mq服务相关的软件,将该合约事件以通知消息的形式添加到消息队列中,使得订阅该消息队列的用户侧计算设备,能够得到与上述合约事件相关的通知。
43.对于区块链外产生的数据而言,可以将其构建成区块链所支持的标准的交易(transaction)格式,然后发布至区块链,由区块链网络中的所有节点对该交易进行共识。在达成共识后,可以由区块链网络中作为记账节点的节点,将这笔交易在区块链中进行持久化存证。
44.在实际应用中,无论是公有链、私有链还是联盟链,都可以提供智能合约(smart contract)的功能。区块链上的智能合约是在区块链上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。
45.智能合约可以以规定的方式被区块链网络中的各节点独立执行,所有执行记录和相关数据都可以被保存在区块链上。以基于账户模型的某一区块链为例,部署在该区块链上的智能合约是一种类型的区块链账户,在执行了某一智能合约后,可以将执行记录和相关数据保存在该智能合约的账户存储空间(通常是storage字段)中。
46.智能合约的事件机制,是智能合约与链外实体进行交互的一种方式。对于区块链上部署的智能合约来说,通常无法直接与链外实体进行交互;例如,智能合约在调用完成后,通常无法将智能合约的调用结果,点对点地发送给智能合约的调用发起方。
47.智能合约在调用的过程中产生的调用结果(包括中间结果和最终的调用结果),通常都会以事件(event)的形式,记录到调用该智能合约的那笔交易的交易日志(transaction logs),在区块链节点的存储空间中进行存储。而需要与智能合约进行交互的链外实体,则可以通过监听区块链节点的存储空间中存储的上述交易日志的方式,来获取智能合约的调用结果。
48.除此之外,服务实体还可以在区块链上部署支持各种功能的、可供用户调用的服务,以通过这些服务为用户提供基于区块链的各种功能。这类服务实体可以被称为服务提供方;这类服务可以被称为区块链服务。区块链服务的形式可以是智能合约,也可以是链原生代码;或者,区块链服务可以是由区块链链上的智能合约或链原生代码,与区块链外的、部署在中心化计算设备上的代码组成的整体;本说明书对此不作限制。
49.以某一区块链服务为例,服务提供方可以通过服务端将该区块链服务部署在区块链上。用户可以通过客户端调用该区块链服务,使得与该区块链服务对应的代码被执行,从而实现基于该区块链的、与该区块链服务对应的功能。
50.通常,各服务提供方希望可以向调用其提供的区块链服务的用户收取一定金额的费用。收取到的费用可以用来抵消对该区块链服务进行维护、升级等所需的成本,以保证该服务提供方可以为用户长期提供该区块链服务。
51.在相关技术中,对于部署在公有链上的区块链服务而言,公有链提供虚拟货币的功能,因此,用户可以在每次通过客户端调用了该区块链服务的情况下,进一步通过该客户端从其区块链账户中向该区块链服务的服务提供方的区块链账户转账一定数量的虚拟货币,作为本次调用该区块链服务的费用。然而,虚拟货币在现如今的很多情况下得不到承认,不能与真实货币等价,也就无法抵消服务提供方针对区块链服务所付出的成本。
52.对于部署在联盟链上的区块链服务而言,不同于公有链中各节点可以自由加入或退出网络,联盟链中节点需要通过授权后才能加入网络,因此,在公有链中,用户可以以匿名用户的身份,将客户端作为节点加入该公有链,以及调用该公有链上部署的区块链服务,而在联盟链中,用户在将客户端作为节点加入该联盟链时无法匿名,但可以基于混淆后的身份,匿名调用区块链服务。然而,在用户匿名调用区块链服务的情况下,由于无法知晓用户的实际身份,使得服务提供方无法按照用户实际调用区块链服务的情况进行收费。
53.为了解决上述问题,使得服务提供方可以按照用户实际调用区块链服务的情况,向用户合理收费,从而提升用户体验,本说明书提供一种用于区块链服务的调用的技术方案。
54.在上述技术方案中,与区块链服务对应的服务端可以响应于接收到的与用户对应的客户端发送的针对该区块链服务的调用数据,调用智能合约中的验证逻辑,验证该用户是否具有针对该区块链服务的调用权限,并确定该用户针对该区块链服务的剩余调用次数是否达到预设阈值,如果该用户具有针对该区块链服务的调用权限,且该剩余调用次数未达到该阈值,则可以基于该调用数据调用该区块链服务。
55.采用上述方式,由于可以在用户每一次调用区块链服务时,先对该用户针对该区块链服务的调用权限和剩余调用次数进行验证,在验证通过的情况下,再允许该用户本次调用该区块链服务,使得区块链服务的服务提供方可以按照用户实际调用该区块链服务的情况,按次向用户收费,提升了用户体验。此外,对用户针对区块链服务的调用权限和剩余调用次数的验证不涉及用户身份,因此,无论用户是否匿名调用区块链服务,服务提供方均可向用户收费,保障了服务提供方的利益。
56.请参考图2,图2是本说明书一示例性实施例示出的一种区块链服务的调用方法的示意图。
57.在本实施例中,上述区块链服务的调用方法可以应用于与部署在区块链上的任一区块链服务对应的服务端。
58.在示出的一种实施方式中,上述区块链可以是联盟链。在实际应用中,该区块链具体可以是用于司法存证的联盟链,以保证存证在该联盟链中的数据真实、可信;例如,与该联盟链中的节点对应的实体机构或组织可以包括公证处或市场监管部门。
59.对于上述区块链服务而言,一方面,用户可以向该区块链服务的服务提供方购买针对上述区块链服务的调用次数,由该服务提供方将该调用次数授权给该用户,使得该用户可以在该调用次数内调用该区块链服务。另一方面,在用户调用上述区块链服务时,可以先对该用户进行验证,以判断后续是否允许该用户调用该区块链服务。
60.对于上述服务端而言,该服务端可以包括上述区块链外的中心化平台,以及加入该区块链的节点;其中,该中心化平台和区块链节点可以通过交互,使得该区块链节点调用部署在该区块链上的智能合约,实现授权过程和/或验证过程。或者,该服务端可以作为区
块链节点直接加入上述区块链,并通过调用部署在该区块链上的智能合约,实现授权过程和/或验证过程。再者,该服务端可以通过各种通信网络耦接到上述区块链中的节点,并通过和区块链节点进行交互,使得该区块链节点调用部署在该区块链上的智能合约,实现授权过程和/或验证过程。
61.需要说明的是,上述授权过程和上述验证过程可以在同一服务端中被执行,也可以在不同的服务端中被执行;例如,可以由与上述服务提供方对应的服务端(即由该服务提供方控制的服务端)执行上述授权过程,并由任一服务端通过和区块链节点进行交互执行上述验证过程。
62.结合如图1所示的网络环境,上述服务端可以运行在设备4、设备5或服务器端102上;或者,上述服务端可以运行在由服务器端102和设备5构成的整体上;本说明书对此不作限制。
63.除上述区块链服务外,还可以在上述区块链上部署用于对该区块链服务的调用进行管理的智能合约。相应地,该区块链还可以维护用户针对该区块链服务的剩余调用次数。
64.如图2所示,上述区块链服务的调用方法可以包括以下步骤:步骤201:接收与用户对应的客户端发送的针对所述区块链服务的调用数据。
65.在本实施例中,用户在需要调用上述区块链服务的情况下,可以通过与其对应的客户端,向上述服务端提交针对该区块链服务的调用数据。
66.在实际应用中,上述调用数据可以包括调用上述区块链服务所需的参数,例如:该区块链服务的调用地址、该区块链服务的代码中包含的变量的值等。
67.步骤202:响应于所述调用数据,调用所述智能合约中的验证逻辑,验证所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值。
68.在本实施例中,上述服务端在接收到上述调用数据的情况下,可以对该调用数据进行响应,调用上述智能合约。
69.需要说明的是,在上述服务端包括区块链节点,或者上述服务端作为区块链节点的情况下,可以由上述客户端将上述调用数据构建成区块链所支持的标准的交易格式,使得该区块链节点可以响应于交易格式的调用数据,调用上述智能合约。或者,在上述服务端耦接到上述区块链中的节点的情况下,可以由该服务端将接收到的上述调用数据构建成区块链所支持的标准的交易格式,使得该区块链节点可以响应于交易格式的调用数据,调用上述智能合约。
70.具体地,可以调用上述智能合约中的验证逻辑,验证上述用户是否具有针对上述区块链服务的调用权限,并确定该用户针对该区块链服务的剩余调用次数是否达到预设阈值;其中,该阈值可以由技术人员根据实际需求预先设置,也可以默认的缺省值(通常为0)。
71.步骤203:如果所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值,基于所述调用数据调用所述区块链服务。
72.在本实施例中,在验证出上述用户具有针对上述区块链服务的调用权限,且确定了该用户针对该区块链服务的剩余调用次数未达到上述阈值的情况下,可以允许该用户调用该区块链服务。
73.在这种情况下,可以基于上述调用数据调用上述区块链服务。
74.在示出的一种实施方式中,在确定了上述用户针对上述区块链服务的剩余调用次数达到上述阈值的情况下,可以拒绝该用户调用该区块链服务。
75.在这种情况下,可以向上述客户端返回用于指示剩余调用次数不足的数据,使得该客户端可以基于该数据,提示上述用户其针对上述区块链服务的剩余调用次数不足。
76.在示出的一种实施方式中,为了避免用户调用区块链服务的次数超限,保证服务提供方的权益,上述服务端可以在完成本次基于上述调用数据调用上述区块链服务的情况下,对上述区块链维护的上述用户针对上述区块链服务的剩余调用次数进行更新;例如,可以将该区块链维护的该剩余调用次数减去预设阈值(通常为1)。
77.根据本说明书一个或多个实施例提供的技术方案,与区块链服务对应的服务端可以响应于接收到的与用户对应的客户端发送的针对该区块链服务的调用数据,调用智能合约中的验证逻辑,验证该用户是否具有针对该区块链服务的调用权限,并确定该用户针对该区块链服务的剩余调用次数是否达到预设阈值,如果该用户具有针对该区块链服务的调用权限,且该剩余调用次数未达到该阈值,则可以基于该调用数据调用该区块链服务。
78.采用上述方式,由于可以在用户每一次调用区块链服务时,先对该用户针对该区块链服务的调用权限和剩余调用次数进行验证,在验证通过的情况下,再允许该用户本次调用该区块链服务,使得区块链服务的服务提供方可以按照用户实际调用该区块链服务的情况,按次向用户收费,提升了用户体验。此外,对用户针对区块链服务的调用权限和剩余调用次数的验证不涉及用户身份,因此,无论用户是否匿名调用区块链服务,服务提供方均可向用户收费,保障了服务提供方的利益。
79.下面从上述授权过程和上述验证过程的方面,对如图2所示的实施例进行详细说明。
80.(1)授权过程与如图2所示的实施例相应地,请参考图3,图3是本说明书一示例性实施例示出的一种区块链服务的调用授权方法的流程图。
81.在本实施例中,上述区块链服务的调用授权方法也可以应用于上述服务端。
82.如图3所示,上述区块链服务的调用授权方法可以包括以下步骤:步骤301:接收所述客户端发送的针对所述区块链服务的授权数据;其中,所述授权数据包括所述客户端为第一次调用生成的第三密钥的验证数据。
83.在本实施例中,用户在需要被授权调用上述区块链服务的权限的情况下,可以通过上述客户端,向上述服务端提交针对该区块链服务的授权数据;其中,该授权数据可以包括上述客户端生成的密钥(下称为第三密钥)的验证数据。
84.需要说明的是,上述第三密钥可以作为与后续上述用户针对上述区块链服务的第一次调用对应的密钥。
85.步骤302:响应于所述授权数据,在所述用户持有针对所述区块链服务的授权调用次数时,基于与所述授权调用次数对应的私钥,对所述第三密钥的验证数据进行签名,得到签名数据,以使所述客户端获取到所述签名数据。
86.在本实施例中,上述服务提供方可以设置多种针对上述区块链服务的授权调用次数(例如:10次、100次、200次等),使得上述用户可以根据实际需求,向该服务提供方购买授权调用次数;其中,该授权调用次数可以指示该服务提供方允许该用户调用该区块链服务
的次数。
87.与之相应地,上述服务端可以为各授权调用次数生成一对公钥和私钥,用于对数据进行加密、解密,或者签名、验证。与不同的授权调用次数对应的公私钥对不同。公钥可以被存证在上述区块链中,私钥可以由上述服务提供方自行维护。
88.在这种情况下,上述服务端在接收到上述授权数据的情况下,可以对该授权数据进行响应,在上述用户持有针对上述区块链服务的授权调用次数时,基于与该授权调用次数对应的私钥,对上述第三密钥的验证数据进行签名,得到签名数据。上述客户端可以获取到该签名数据,用于后续调用上述区块链服务。
89.在实际应用中,上述服务提供方可以自行维护针对上述区块链服务的授权调用次数的购买记录。为了避免重复授权,该购买记录中可以仅记录尚未被用户使用的授权调用次数,例如:用户已购买但尚未获取到对应的签名数据的授权使用次数。上述服务端可以在该购买记录中记录了上述用户购买了上述授权调用次数的情况下,确定该用户持有该授权调用记录。该购买记录可以被存储在该服务端本地或上述区块链中,也可以被存储在与可信的第三方对应的服务端中。
90.在示出的一种实施方式中,如果由上述服务端中的上述区块链外的中心化平台,通过调用部署在该区块链外的代码来实现授权过程,则上述授权数据可以是授权请求。该中心化平台可以响应于该授权请求,在上述用户持有针对所述区块链服务的授权调用次数时,基于与所述授权调用次数对应的私钥,对所述第三密钥的验证数据进行签名,得到签名数据。
91.在这种情况下,上述中心化平台可以将上述签名数据直接发送给上述客户端,使得该客户端可以获取到该签名数据。
92.或者,如果上述服务端通过各种通信网络耦接到上述区块链中的节点,则上述授权数据可以是授权请求。该服务端可以响应于该授权请求,在上述用户持有针对所述区块链服务的授权调用次数时,基于与所述授权调用次数对应的私钥,对所述第三密钥的验证数据进行签名,得到签名数据。
93.在这种情况下,上述服务端可以将上述签名数据直接发送给上述客户端,使得该客户端可以获取到该签名数据。
94.在示出的一种实施方式中,上述客户端可以对上述第三密钥的验证数据进行盲化处理(blinding),并基于盲化后的该第三密钥的验证数据生成上述授权数据。也即,此时上述授权数据中是盲化后的该第三密钥的验证数据。
95.在这种情况下,上述服务端可以基于上述私钥,对盲化后的上述第三密钥的验证数据进行盲签名,得到盲化后的签名数据。而上述客户端可以获取到该盲化后的签名数据,并对该盲化后的签名数据进行去盲处理(unblinding),得到该签名数据。通过去盲处理得到的该签名数据,与基于该私钥对上述第三密钥的验证数据进行签名得到的签名数据相同。
96.采用盲签名(blind signature)的方式,可以使上述服务端在不获取上述第三密钥的验证数据的情况下,对该第三密钥的验证数据进行签名。这样,可以提高第三密钥本身和第三密钥的验证数据的数据安全性。
97.在示出的一种实施方式中,上述服务端可以是分布式服务端,包括多个子端;例
如,该服务端可以运行在由多台物理主机构成的集群上,其中每台物理主机可以作为一个子端。
98.由于上述私钥由上述服务提供方自行维护,为了提高私钥的数据安全性,避免私钥泄露,可以将该私钥分割成多个私钥分片,并将这些私钥分片分别存储在上述多个子端本地。也即,不同的子端本地可以存储不同的私钥分片。
99.在这种情况下,对于任一子端而言,该子端可以基于其维护的私钥分片,对上述第三密钥的验证数据进行签名。
100.上述服务端可以收集各子端基于其维护的私钥分片对上述第三密钥的验证数据进行签名,得到的签名分片数据,并确定收集到的签名分片数据的个数是否达到预设的阈值;其中,该阈值可以由技术人员根据实际需求预先设置,也可以默认的缺省值。
101.上述服务端在确定收集到的签名分片数据的个数达到上述阈值的情况下,可以基于收集到的签名分片数据恢复出签名数据;此时,该签名数据即为基于上述私钥,对上述第三密钥的验证数据进行签名,得到的签名数据。
102.举例来说,可以预先设置阈值n。在这种情况下,如果将上述私钥分割成了m(m≥n)个私钥分片,则至少需要收集到基于这m个私钥分片中的n个,分别对上述第三密钥的验证数据进行签名,得到的n个签名分片数据,才能基于收集到的这n个签名分片数据恢复出上述签名数据;如果仅收集到了少于n个的签名分片数据,则无法恢复出该签名数据。
103.下面对上述授权过程进行举例说明。请参考图4,图4是本说明书一示例性实施例示出的一种授权过程中的数据交互的示意图。
104.如图4所示,上述客户端可以先生成密钥key1,再计算得到密钥key1的哈希值key1hash。后续,该客户端可以对哈希值key1hash进行盲化处理,得到盲化后的哈希值key1hash0,并将盲化后的哈希值key1hash0发送给上述服务端。该服务端可以基于与上述用户针对上述区块链服务的授权调用次数对应的私钥,对盲化后的哈希值key1hash0进行盲签名,得到盲化后的签名数据signedkey1hash0,并使该客户端获取到盲化后的签名数据signedkey1hash0。该客户端可以对盲化后的签名数据signedkey1hash0进行去盲处理,得到签名数据signedkey1hash。
105.(2)验证过程与如图2所示的实施例相应地,请参考图5,图5是本说明书一示例性实施例示出的一种区块链服务的调用验证方法的流程图。
106.在本实施例中,上述区块链服务的调用验证方法也可以应用于上述服务端。该区块链服务的调用验证方法可以被视为如图2所示的实施例中的步骤202的具体实现。
107.结合如图2所示的实施例,上述调用数据可以包括上述客户端为本次调用生成的密钥(下称为第一密钥)的验证数据,以及为上一次调用生成的密钥(下称为第二密钥)。相应地,上述区块链中可以存证了该第二密钥的验证数据。
108.需要说明的是,对于上述第二密钥而言,在本次调用为第二次调用时,上一次调用即为第一次调用;此时,该第二密钥也就可以是上述第三密钥。
109.在示出的一种实施方式中,上述客户端为每一次调用生成的密钥都可以是由该客户端随机生成的,以避免长期使用同一密钥或存在某种特定规律的密钥,提高密钥的数据安全性。
110.在示出的一种实施方式中,任一密钥的验证数据可以是该密钥的哈希值。
111.具体地,可以基于预设的哈希算法,对密钥进行哈希计算,得到该密钥的哈希值,作为该密钥的验证数据;其中,该哈希算法可以由技术人员根据实际需求预先设置。
112.通常,不同的数据的哈希值不同。如果基于同一种哈希算法,对两个不同的密钥分别进行哈希计算,得到的两个哈希值也是不同的。因此,可以通过哈希值来验证两个密钥是否相同。
113.为了降低密钥的哈希值被破解的概率,避免密钥泄露,可以采用哈希加盐的方式,计算密钥的加盐哈希值。
114.具体地,可以先在该密钥中混入预设的盐值(salt),再对加盐后的密钥进行哈希计算,得到加盐哈希值,作为该密钥的验证数据;其中,该盐值可以由技术人员根据实际需求预先设置,也可以默认的缺省值。
115.如图5所示,上述区块链服务的调用授权方法可以包括以下步骤:步骤501:基于所述第二密钥进行计算,得到所述第二密钥的验证数据。
116.在本实施例中,上述智能合约在验证上述用户是否具有针对上述区块链服务的调用权限时,具体可以先基于上述调用数据中的上述第二密钥进行计算,得到该第二密钥的验证数据。
117.步骤502:确定计算得到的所述第二密钥的验证数据,与所述区块链中存证的所述第二密钥的验证数据是否匹配。
118.在本实施例中,后续可以将计算得到的上述第二密钥的验证数据,与上述区块链中存证的该第二密钥的验证数据进行匹配。
119.步骤503:如果两者匹配,确定所述用户具有针对所述区块链服务的调用权限。
120.在本实施例中,如果计算得到的上述第二密钥的验证数据,与上述区块链中存证的该第二密钥的验证数据匹配,则可以确定上述用户具有针对上述区块链服务的调用权限。
121.步骤504:将所述第一密钥的验证数据在所述区块链中进行存证。
122.在本实施例中,还可以将上述调用数据中的上述第一密钥的验证数据在上述区块链中进行存证,用于下一次调用时的验证。
123.在示出的一种实施方式中,结合如图3所示的实施例,对于第一次调用而言,没有与其对应的上一次调用,因此,在上述用户第一次调用上述区块链服务时,上述调用数据可以包括上述第三密钥的验证数据,以及上述签名数据。
124.除此之外,上述区块链中还可以存证了上述服务端为各授权调用次数生成公钥。
125.在这种情况下,上述智能合约在验证上述用户是否具有针对上述区块链服务的调用权限时,具体可以先获取与该用户针对该区块链服务的授权调用次数对应的公钥。后续,可以基于该公钥对上述签名数据进行验证。如果验证通过,则可以确定该用户具有针对该区块链服务的调用权限。此时,还可以基于该授权调用数据确定该用户针对该区块链服务的剩余调用次数;例如,可以先将该授权调用数据确定为该剩余调用次数,再在完成第一次基于上述调用数据调用该区块链服务的情况下,对该剩余调用次数进行更新;并且,还可以将该第三密钥的验证数据在该区块链中进行存证。
126.在实际应用中,上述调用数据还可以包括上述公钥,从而使上述智能合约可以从
该调用数据中直接获取该公钥。或者,上述智能合约可以基于区块链中存证的各公钥,尝试对上述签名数据进行验证,以获取能够对该签名数据进行验证的公钥,此时与该公钥对应的授权调用次数即为上述用户针对上述区块链服务的授权调用次数。
127.下面对上述验证过程进行举例说明。请结合图4,参考图6,图6是本说明书一示例性实施例示出的一种验证过程中的数据交互的示意图。
128.如图6所示,在上述用户第一次调用上述区块链服务时,上述客户端可以将哈希值key1hash和签名数据signedkey1hash发送给上述服务端。该服务端可以通过调用智能合约,基于与上述用户针对上述区块链服务的授权调用次数对应的公钥,对签名数据signedkey1hash进行验证,如果验证通过,则可以将哈希值key1hash在上述区块链中进行存证,并在完成第一次调用后,将基于该授权调用次数(假设为n次)确定且经过更新的剩余调用次数(可以是n-1次)在该区块链中进行存证。
129.在上述用户第二次调用上述区块链服务时,上述客户端可以先生成密钥key2,再计算得到密钥key2的哈希值key2hash。后续,该客户端可以将密钥key1和哈希值key2hash发送给上述服务端。该服务端可以通过调用智能合约,计算key1的哈希值,并确定计算得到的哈希值是否与哈希值key1hash匹配,且确定n-1是否达到预设阈值(可以是0),如果两者匹配,且n-1>0,则可以将哈希值key2hash在上述区块链中进行存证,并在完成第二次调用后,将上述区块链中存证的剩余调用次数更新为n-2次。
130.在上述用户第三次调用上述区块链服务时,上述客户端可以先生成密钥key3,再计算得到密钥key3的哈希值key3hash。后续,该客户端可以将密钥key2和哈希值key3hash发送给上述服务端。该服务端可以通过调用智能合约,计算key2的哈希值,并确定计算得到的哈希值是否与哈希值key2hash匹配,且确定n-2是否达到0,如果两者匹配,且n-2>0,则可以将哈希值key3hash在上述区块链中进行存证,并在完成第二次调用后,将上述区块链中存证的剩余调用次数更新为n-3次。以此类推。
131.请参考图7,图7是本说明书一示例性实施例示出的另一种区块链服务的调用方法的示意图。
132.在本实施例中,上述区块链服务的调用方法可以应用于与用户对应的客户端。
133.区块链上部署了区块链服务,以及用于对所述区块链服务的调用进行管理的智能合约;所述区块链维护了用户针对所述区块链服务的剩余调用次数。
134.如图7所示,上述区块链服务的调用方法可以包括以下步骤:步骤701:获取针对所述区块链服务的调用数据。
135.步骤702:将所述调用数据发送给与所述区块链服务对应的服务端,以使所述服务端响应于所述调用数据,调用所述智能合约中的验证逻辑,验证所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值,如果所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值,基于所述调用数据调用所述区块链服务。
136.可选地,所述方法还包括:获取针对所述区块链服务的授权数据;其中,所述授权数据包括所述客户端为第一次调用生成的第三密钥的验证数据;将所述授权数据发送给所述服务端,以使所述服务端响应于所述授权数据,在所
述用户持有针对所述区块链服务的授权调用次数时,基于与所述授权调用次数对应的私钥,对所述第三密钥的验证数据进行签名,得到签名数据;获取所述签名数据。
137.可选地,所述获取针对所述区块链服务的授权数据,包括:对所述第三密钥的验证数据进行盲化处理,并基于盲化后的所述第三密钥的验证数据生成所述授权数据;所述将所述授权数据发送给所述服务端,以使所述服务端响应于所述授权数据,在所述用户持有针对所述区块链服务的授权调用次数时,基于与所述授权调用次数对应的私钥,对所述第三密钥的验证数据进行签名,得到签名数据,包括:将所述授权数据发送给所述服务端,以使所述服务端响应于所述授权数据,在所述用户持有针对所述区块链服务的授权调用次数时,基于所述私钥,对盲化后的所述第三密钥的验证数据进行盲签名,得到盲化后的签名数据;所述获取所述签名数据,包括:获取所述盲化后的签名数据,并对所述盲化后的签名数据进行去盲处理,得到所述签名数据。
138.可选地,所述密钥由所述客户端随机生成。
139.可选地,所述密钥的验证数据包括所述密钥的哈希值。
140.可选地,所述区块链为联盟链。
141.如图7所示的实施例的具体实现可以参考如图2-图6所示的实施例,本说明书对此不再赘述。
142.与前述区块链服务的调用方法的实施例相对应,本说明书还提供了区块链服务的调用装置的实施例。
143.本说明书区块链服务的调用装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图8所示,为本说明书区块链服务的调用装置所在电子设备的一种硬件结构图,除了图8所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该区块链服务的调用的实际功能,还可以包括其他硬件,对此不再赘述。
144.请参考图9,图9是本说明书一示例性实施例示出的一种区块链服务的调用装置的框图。
145.上述区块链服务的调用装置可以应用于图8所示的电子设备;该电子设备可以作为与部署在区块链上的区块链服务对应的服务端。
146.所述区块链上还部署了用于对所述区块链服务的调用进行管理的智能合约;所述区块链维护了用户针对所述区块链服务的剩余调用次数。
147.所述装置包括:接收模块901,用于接收与用户对应的客户端发送的针对所述区块链服务的调用数据;验证模块902,用于响应于所述调用数据,调用所述智能合约中的验证逻辑,验证
所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值;调用模块903,用于在所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值时,基于所述调用数据调用所述区块链服务。
148.请参考图10,图10是本说明书一示例性实施例示出的另一种区块链服务的调用装置的框图。
149.上述区块链服务的调用装置可以应用于图8所示的电子设备;该电子设备可以作为与用户对应的用户客户端。
150.区块链上部署了区块链服务,以及用于对所述区块链服务的调用进行管理的智能合约;所述区块链维护了用户针对所述区块链服务的剩余调用次数。
151.所述装置包括:获取模块1001,用于获取针对所述区块链服务的调用数据;调用模块1002,用于将所述调用数据发送给与所述区块链服务对应的服务端,以使所述服务端响应于所述调用数据,调用所述智能合约中的验证逻辑,验证所述用户是否具有针对所述区块链服务的调用权限,并确定所述用户针对所述区块链服务的剩余调用次数是否达到预设阈值,如果所述用户具有针对所述区块链服务的调用权限,且所述剩余调用次数未达到所述阈值,基于所述调用数据调用所述区块链服务。
152.对于装置实施例而言,因为其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。
153.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书的技术方案的目的。
154.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
155.在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
156.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
157.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的
存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
158.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
159.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
160.在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
161.应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
162.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。