基于区块链的交易处理方法及装置、电子设备
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种基于区块链的交易处理方法及装置、电子设备。
背景技术
区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,利用区块链技术来搭建去中心化系统,并在区块链的分布式数据库中收录各种执行程序进行自动执行,已在众多的领域中广泛的进行应用。
发明内容
本说明书提出一种基于区块链的交易处理方法,应用于客户端,所述区块链中维护了与用户账户对应的Nonce列表;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;所述方法包括:
从所述Nonce列表中为用户通过所述用户账户发起的目标交易获取可用Nonce记录;
将获取到的所述可用Nonce记录添加至所述目标交易;
将所述目标交易发布至所述区块链,以由所述区块链中的节点设备将所述目标交易中的可用Nonce记录与所述Nonce列表中的Nonce记录进行匹配,并在所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配时,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
可选的,所述从所述Nonce列表中为用户通过所述用户账户发起的目标交易获取可用Nonce记录之前,还包括:
响应于针对所述客户端的初始化指令,获取所述区块链中维护的所述Nonce列表,并将获取到的所述Nonce列表在所述客户端本地进行维护。
可选的,所述从所述Nonce列表中为用户通过所述用户账户发起的目标交易获取可用Nonce记录,包括:
从所述客户端本地维护的所述Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录。
可选的,所述客户端本地维护的所述Nonce列表中的Nonce记录默认被标记为可用;
所述方法还包括:
在从所述客户端本地维护的所述Nonce列表中为所述目标交易获取到了可用Nonce记录之后,在所述Nonce列表中将所述可用Nonce记录标记为不可用。
可选的,还包括:
确定是否接收到所述节点设备返回的所述目标交易被受理的提示消息;
如果是,基于预设幅度对所述可用Nonce记录中的Nonce值进行单调递增,并在所述Nonce值单调递增之后,在所述Nonce列表中将所述可用Nonce记录重新标记为可用。
可选的,所述客户端为多线程客户端;所述Nonce列表中的Nonce记录的数量,指示所述用户账户的交易并发能力。
可选的,所述辅助参数包括:所述Nonce列表的版本标识。
可选的,所述辅助参数还包括:所述Nonce记录的索引标识。
本说明书还提出一种基于区块链的交易处理方法,应用于区块链中的节点设备,所述区块链维护了Nonce列表集合;所述Nonce列表集合包括与若干用户账户对应的Nonce列表;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;所述方法包括:
接收客户端发送的用户通过用户账户发起的目标交易;其中,所述目标交易被添加了从所述区块链中维护的与所述用户账户对应的Nonce列表中获取到的可用Nonce记录;
将所述可用Nonce记录与所述区块链中维护的与所述用户账户对应的Nonce列表中的Nonce记录进行匹配;
如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
可选的,还包括:
如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,基于预设幅度对所述目标Nonce记录的Nonce值进行单调递增;以及,
向所述客户端返回所述目标交易被受理的通知消息。
可选的,所述辅助参数包括:所述Nonce列表的版本标识。
可选的,所述辅助参数还包括:所述Nonce记录的索引标识。
本说明书还提出一种基于区块链的交易处理装置,应用于客户端,所述区块链中维护了与用户账户对应的Nonce列表;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;所述方法包括:
获取模块,从所述Nonce列表中为用户通过所述用户账户发起的目标交易获取可用Nonce记录;
添加模块,将获取到的所述可用Nonce记录添加至所述目标交易;
发布模块,将所述目标交易发布至所述区块链,以由所述区块链中的节点设备将所述目标交易中的可用Nonce记录与所述Nonce列表中的Nonce记录进行匹配,并在所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配时,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
可选的,所述获取模块进一步:
在从所述Nonce列表中为用户通过所述用户账户发起的目标交易获取可用Nonce记录之前,响应于针对所述客户端的初始化指令,获取所述区块链中维护的所述Nonce列表,并将获取到的所述Nonce列表在所述客户端本地进行维护。
可选的,所述获取模块:
从所述客户端本地维护的所述Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录。
可选的,所述客户端本地维护的所述Nonce列表中的Nonce记录默认被标记为可用;
所述获取模块进一步:
在从所述客户端本地维护的所述Nonce列表中为所述目标交易获取到了可用Nonce记录之后,在所述Nonce列表中将所述可用Nonce记录标记为不可用。
可选的,所述获取模块进一步:
确定是否接收到所述节点设备返回的所述目标交易被受理的提示消息;如果是,基于预设幅度对所述可用Nonce记录中的Nonce值进行单调递增,并在所述Nonce值单调递增之后,在所述Nonce列表中将所述可用Nonce记录重新标记为可用。
可选的,所述客户端为多线程客户端;所述Nonce列表中的Nonce记录的数量,指示所述用户账户的交易并发能力。
可选的,所述辅助参数包括:所述Nonce列表的版本标识。
可选的,所述辅助参数还包括:所述Nonce记录的索引标识。
本说明书还提出一种基于区块链的交易处理装置,应用于区块链中的节点设备,所述区块链维护了Nonce列表集合;所述Nonce列表集合包括与若干用户账户对应的Nonce列表;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;所述方法包括:
接收模块,接收客户端发送的用户通过用户账户发起的目标交易;其中,所述目标交易被添加了从所述区块链中维护的与所述用户账户对应的Nonce列表中获取到的可用Nonce记录;
匹配模块,将所述可用Nonce记录与所述区块链中维护的与所述用户账户对应的Nonce列表中的Nonce记录进行匹配;
受理模块,如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
可选的,所述受理模块进一步:
如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,基于预设幅度对所述目标Nonce记录的Nonce值进行单调递增;以及,
向所述客户端返回所述目标交易被受理的通知消息。
可选的,所述辅助参数包括:所述Nonce列表的版本标识。
可选的,所述辅助参数还包括:所述Nonce记录的索引标识。
本说明书还提出一种电子设备,包括:
处理器;
用于存储机器可执行指令的存储器;
其中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
从区块链中维护的与用户账户对应的Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;
将获取到的所述可用Nonce记录添加至所述目标交易;
将所述目标交易发布至所述区块链,以由所述区块链中的节点设备将所述目标交易中的可用Nonce记录与所述Nonce列表中的Nonce记录进行匹配,并在所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配时,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
本说明书还提出一种电子设备,包括:
处理器;
用于存储机器可执行指令的存储器;
其中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
接收客户端发送的用户通过用户账户发起的目标交易;其中,所述目标交易被添加了从所述区块链中维护的与所述用户账户对应的Nonce列表中获取到的可用Nonce记录;所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;
将所述可用Nonce记录与所述区块链中维护的与所述用户账户对应的Nonce列表中的Nonce记录进行匹配;
如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
通过以上实施例,不仅可以有效的防护通过在区块链中发布重复的交易发起的重放攻击;而且,可以在有效防护重放攻击的基础上,提升单账户的交易并发能力。
附图说明
图1是一示例性实施例提供的一种对交易进行重放攻击检测的示意图。
图2是一示例性实施例提供的一种基于区块链的交易处理方法的流程图。
图3是一示例性实施例提供的一种在区块链中维护的Nonce列表集合的结构示意图。
图4是一示例性实施例提供的另一种对交易进行重放攻击检测的示意图。
图5是一示例性实施例提供的一种客户端维护的Nonce列表的结构示意图。
图6是一示例性实施例提供的一种电子设备的结构示意图。
图7是一示例性实施例提供的一种基于区块链的交易处理装置的框图。
图8是一示例性实施例提供的另一种基于区块链的交易处理装置的框图。
具体实施方式
区块链领域的重放攻击,是指通过在区块链中发布重复的交易,进而导致一笔相同的交易被执行多次,对用户造成损失的攻击行为;
例如,比特币网络中经典的“双花”(double spending)问题,就是一种较为典型的重放攻击行为。一笔转账交易在经过用户私钥的签名许可后,如果被非法节点截获,那么该非法节点可以在该笔交易执行完毕后,基于截获的该笔交易,发起重放攻击,在区块链中重复发布并执行该笔交易,造成一笔转账交易被执行多次,进而对用户造成资金损失。
在示出的一种实施方式中,通常可以在交易中携带一个致密递增的Nonce值(致密递增的整数)的方式,来应对针对该笔交易的重放攻击风险;
请参见图1,图1为本说明书示出的一种对交易进行重放攻击检测的示意图。
如图1所示,用户在客户端上通过个人的用户账户发起的每笔交易,都可以指定一个Nonce值,并使用用户持有的私钥对该笔交易的交易体和指定的Nonce值进行签名。其中,签名是对[交易体,Nonce值]的整体签名,这样可以保障该笔交易中的Nonce无法被篡改。
当签名完成后,客户端可以将该笔交易在区块链中进行发布。而区块链中的节点设备,在收到该笔交易后,除了需要验证该笔交易的签名是否合法以外,还需要检测该笔交易中的Nonce值,是否与之前已经成功受理的最近一笔交易中的Nonce值保持严格的致密递增;如果该笔交易与已经成功受理的最近一笔交易中的Nonce值保持致密递增,则可以受理该笔交易;反之,可以认定该比较交易为非法的交易。
例如,假设用户在客户端上通过个人的用户账户Account1发起了一笔Nonce值为1的交易,该笔交易在被区块链成功受理后,用户在客户端上通过Account1再次发起交易的时候,必须将该交易中的Nonce值指定为2,才会被区块链中的节点设备认定为一笔合法的交易进行受理。
相应的,区块链系统会维护用户个人的用户账户的Nonce状态,每成功受理Account1发起的一笔交易,区块链系统会将该用户账户的Nonce值自增1;区块链中的节点设备在收到客户端发布的一笔交易后,会将该笔交易中的Nonce值,与维护的Nonce状态中的Nonce值进行比较,来判断该笔交易中的Nonce值,是否与已经成功受理的最近一笔交易中的Nonce值严格递增1;如果是,则可以受理该笔交易。
通过以上方式,虽然在某种程度上可以避免交易的重放攻击风险,但对于用户账户而言,需要在前一笔交易被受理后,才可以继续发起下一笔交易,因此单账户的交易并发能力不足,无法在高并发的场景下进行应用。
基于此,在本说明书中,提出一种能够在高并发的场景下进行应用的重放攻击防护方案。
在实现时,可以在区块链中维护一个Nonce列表集合,在该Nonce列表集合中,可以包括与若干用户账户对应的Nonce列表;而在上述Nonce列表中,可以包括若干条Nonce记录;每一条Nonce记录由辅助参数和Nonce值构成,
当用户在客户端上通过个人的用户账户发起一笔目标交易后,客户端可以从上述Nonce列表为该目标交易获取一条可用Nonce记录,并将获取到的该可用Nonce记录添加至该目标交易,然后再将该目标交易发布至区块链。
而区块链中的节点设备在收到该笔目标交易之后,可以将该笔交易中携带的可用Nonce记录,与区块链中维护的与该用户账户对应的上述Nonce列表中的Nonce记录进行匹配,来对该目标交易进行重放攻击检测;
如果该笔交易中携带的可用Nonce记录,与区块链中维护的与该用户账户对应的上述Nonce列表中的任一目标Nonce记录匹配,则可以确认该笔交易通过重放攻击检测,此时节点设备可以受理该笔目标交易进行执行,并在该笔目标交易被成功受理后,将该目标Nonce记录中的Nonce值按照预设幅度进行单调递增;比如,仍然可以将该目标Nonce记录中的Nonce值自增1。
通过以上技术方案,一方面,由于用户在客户端上通过用户账户发起的每一笔交易被成功受理之后,该笔交易所使用的Nonce记录中的Nonce值都会单调递增,因此即便将该笔交易在区块链中进行重复发布,也仍然无法通过区块链系统针对交易的合法性检测,从而可以有效的防护通过在区块链中发布重复的交易发起的重放攻击;
另一方面,由于区块链中维护的与用户账户对应的Nonce列表中,可以包括多条可用Nonce记录;因此,用户可以在客户端上通过用户账户发起多笔包含可用Nonce记录,并且能够通过区块链系统的重放攻击检测的合法交易,从而可以显著的提升用户账户的交易并发能力。
下面通过具体实施例并结合具体的应用场景对本说明书进行描述。
请参考图2,图2是本说明书一实施例提供的一种基于区块链的交易处理方法;所述方法执行以下步骤:
步骤202,客户端从区块链中维护的与用户账户对应的Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;
步骤204,客户端将获取到的所述可用Nonce记录添加至所述目标交易;
步骤206,客户端将所述目标交易发布至所述区块链;
步骤208,区块链中的节点设备接收客户端发送的所述目标交易,并将所述可用Nonce记录与所述Nonce列表中的Nonce记录进行匹配;如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,受理所述目标交易;其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
在本说明书所描述的区块链,具体可以包括私有链、共有链以及联盟链等,在本说明书中不进行特别限定。
例如,在一个场景中,上述区块链具体可以是由第三方支付平台的服务器、境内银行服务器、境外银行服务器、以及若干用户节点设备作为成员设备组成的一个联盟链。该联盟链的运营方可以依托于该联盟链,来在线部署诸如基于联盟链的跨境转账、资产转移等在线业务。
其中,需要说明的是,在本说明书中所描述的交易(Transaction),是指用户通过区块链的客户端创建,并需要最终发布至区块链的分布式数据库中的一笔数据。
区块链中的交易,通常存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,防伪校验业务、租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
在本说明书中,可以在区块链中维护一个Nonce列表集合,在该Nonce列表集合中,可以包括与若干用户账户对应的Nonce列表。在上述Nonce列表中,均可以包括多条Nonce记录。而每一条Nonce记录可以包括辅助参数和Nonce值。
也即,在本说明书中,上述Nonce记录具体可以是一条由包含Nonce值在内的多个字段构成的复合结构。
在实现时,上述区块链的运营方,可以预先为每一个用户账户分配可用的Nonce值,并在分配的可用的Nonce值的基础上,为每一个Nonce值设置对应的辅助字段,再基于每一个可用的Nonce值和对应的辅助字段,来构造出多条Nonce记录;
然后,可以基于生成的多条Nonce记录为该用户账户构造Nonce列表;最后,可以基于为各个用户账户构造的Nonce列表,创建上述Nonce列表集合,并将上述Nonce列表集合发布至上述区块链,由上述区块链中的节点设备进行共识处理,并在共识通过后,将上述Nonce列表集合存储在上述区块链的分布式数据进行存储和维护。
其中,需要说明的是,上述辅助参数的具体参数内容,在本说明书中不进行特别限定;在实际应用中,上述辅助参数,具体可以包括上述区块链的运营方基于实际的需求,在用户账户可用的Nonce值的基础上扩展出的任意形式的参数;或者参数组合。
也即,在实际应用中,上述辅助参数中所能包含的参数数量以及类别,可以不固定;可以在Nonce值的基础上扩展出任意一种参数来作为辅助参数;也可以在Nonce值的基础上扩展出多种参数进行组合来作为辅助参数。
在示出的一种实施方式中,上述Nonce列表中的Nonce记录中的辅助参数,具体可以包括上述Nonce列表的版本标识(比如版本编号);其中,上述版本标识,具体用于表示上述Nonce列表当前的版本;对于上述Nonce列表集合中的与各个用户账户对应的Nonce列表而言,上述版本标识可以相同,也可以不相同。
在实际应用中,上述Nonce列表的版本标识,可以由区块链的运营方在上述Nonce列表满足了特定的版本更换条件时,进行修改更新;或者,也可以由用户通过客户端向区块链发布交易的形式,进行手动更新。
在实际应用中,如果上述Nonce列表的版本标识发生更新,此时已经在区块链中发布,但还尚未被受理的交易(携带上述Nonce列表更新前的版本标识),则可能会由于所携带的上述Nonce列表的版本标识(更新前的旧版本标识),与上述Nonce列表更新后的版本标识不匹配,而无法被区块链系统进行交易受理。
通过这种方式,使得区块链的运营方或者用户,可以通过对上述Nonce列表的版本标识进行更新的方式,将一些已经发布但还尚未被受理的交易设置为无效状态,从而可以及时终止一些长时间无法被受理的交易。
在示出的另一种实施方式中,上述Nonce列表中的Nonce记录中的辅助参数,除了可以包括上述Nonce列表的版本标识以外,还可以进一步包括上述Nonce记录的索引标识(比如索引编号)。其中,上述索引标识,具体用于表示Nonce记录在Nonce列表中的顺序以及位置。
例如,请参见图3,以上述Nonce列表中的Nonce记录中的辅助参数,同时包含上述Nonce列表的版本标识和上述Nonce记录的索引标识为例,此时上述Nonce记录具体可以是一个Vers ion(版本标识)、Index(索引标识)、Value(Nonce值)等字段组成的复合结构。在这种情况下,在区块链中维护的Nonce列表集合,可以表示成如图3所示出的形式。
其中,上述Nonce记录以及上述Nonce记录中的Nonce值和上述辅助参数的具体的字节长度,在本说明书中不进行特别限定;在实际应用中,可以基于上述区块链的运营方的实际需求,进行灵活的设定(比如,运营方可以通过所占用的字节长度,来控制Nonce值以及辅助参数的具体取值范围);
例如,在一种实现方式中,上述Nonce记录具体可以是一个16字节组成的复合结构;其中,4字节表示Vers ion(版本标识)、4字节表示Index(索引标识)、8字节表示Value(Nonce值)。
通过在Nonce值的基础上扩展出多种参数进行组合来作为辅助参数,使得上述Nonce表中的Nonce记录能够涵盖丰富的取值字段,从而可以降低上述Nonce表中的多条Nonce记录由于取值相同发生冲突的概率;
例如,两条由Vers ion(版本标识)和Value(Nonce值)构成的总长度为12字节的Nonce记录完全相同发生冲突的概率,会远高于,两条由Vers ion(版本标识)、Index(索引标识)和Value(Nonce值)构成的总长度为16字节的Nonce记录完全相同发生冲突的概率。
在本说明书中,上述客户端具体可以是一个多线程客户端;也即,客户端可以同时启用多个线程,每一个线程都可以独立运行,从而用户可以通过调用客户端的多个线程,通过个人的用户账户来同时发起多笔交易。
请参见图4,当用户在客户端上调用客户端启用的线程,通过个人的用户账户发起一笔目标交易后,该线程可以从区块链上维护的与该用户账户对应的上述Nonce列表中,为该目标交易获取一条可用Nonce记录。
由于上述Nonce列表中包括多条Nonce记录,使得客户端启动的多线程均能够从上述Nonce列表中为发起的交易获取到可用Nonce记录,进而用户可以使用个人的用户账户通过上述客户端同时发起多笔交易;因此,在本说明书中,上述Nonce列表中的Nonce记录的数量,实际上可以用于指示用户个人的用户账户的交易并发能力。比如,上述Nonce列表包括4条Nonce记录,那么用户可以通过用户账户同时发起4笔交易。
基于这一点,在实际应用中,区块链的运营方,可以基于客户端自身的性能,来灵活的为上述Nonce列表指定所包含的Nonce记录的数量;或者,客户端可以向区块链系统主动上报自身的性能,由区块链的运营方来灵活的指定上述Nonce列表所包含的Nonce记录的数量;
例如,假设客户端的性能决定,该客户端可以同时启动4个线程来发起交易,那么在为登录该客户端的用户账户创建上述Nonce列表时,可以为该Nonce列表添加4条可用Nonce记录。
在示出的一种实施方式中,客户端可以在初始化阶段,预先将区块链上维护的上述Nonce列表“下载”到本地进行维护;
例如,在实现时,客户端在启动运行,或者与区块链中的节点设备之间的连接断开需要重新进行连接时,通过都需要进行初始化操作。在这种情况下,当客户端收到用户触发的针对该客户端的初始化指令(比如启动指令、重连指令等)时,则可以响应该初始化指令,与区块链中的节点设备建立连接,并基于该连接访问区块链的分布式数据库,获取区块链中维护的上述Nonce列表,然后可以将获取到的上述Nonce列表本地进行存储和维护。
在这种情况下,当客户端上启用的线程,需要为该目标交易获取可用Nonce记录时,可以直接从本地维护的上述Nonce列表中获取可用Nonce记录。
通过这种方式,可以避免与区块链上的节点设备进行数据交互,从区块链中维护的上述Nonce列表中读取数据,为该目标交易获取可用Nonce记录,可以提升客户端的处理性能。
在示出的一种实施方式中,对于客户端在本地维护的上述Nonce列表,可以由客户端为该Nonce列表中的Nonce记录,均默认添加一个表示“可用”的标记。
例如,请参见图5,仍以上述Nonce记录为图4中示出的16字节组成的复合结构为例,可以为Nonce列表中的Nonce记录,扩展出一个1字节的Avai lable字段;其中,当Available字段取值为T时,表示该条Nonce记录“可用”;当Avai lable字段取值为F时,表示该条Nonce记录“不可用”。
一方面,当客户端上启用的线程,在从客户端本地维护的上述Nonce列表中为用户发起的目标交易获取可用Nonce记录时,可以从上述Nonce列表中所有被标记为“可用”的Nonce记录来随机选择一个Nonce记录作为可用Nonce记录。
另一方面,当客户端上启用的线程,从客户端本地维护的上述Nonce列表中为用户发起的目标交易获取到可用Nonce记录之后,可以对该可用Nonce记录携带的标记进行修改更新,为该可用Nonce记录重新添加一个表示“不可用”的标记,以将该可用Nonce记录标记为不可用。
在本说明书中,当客户端上启用的线程,为上述目标交易获取到可用Nonce记录之后,可以将获取到的可用Nonce记录添加至上述目标交易;
例如,请继续参见图4,客户端在为上述目标交易获取到可用Nonce记录之后,可以对上述目标交易的交易体,和上述可用Nonce记录进行打包,然后提示用户基于持有的私钥对打包后的[交易体,Nonce记录]进行整体签名,这样可以保障该笔交易中的Nonce记录无法被篡改。
进一步的,当客户端上启用的线程,将获取到的可用Nonce记录添加至上述目标交易之后,客户端可以将上述目标交易发布至区块链;
例如,将上述目标交易发布至该客户端接入的节点设备,或者将该目标交易在区块链中进行广播发布;其中,客户端将上述目标交易发布至区块链的具体方式,通常取决于区块链所采用的共识机制,在本说明书中不进行特别限定。
而当区块链中的节点设备在收到客户端发布的上述目标交易之后,首先可以在区块链采用的共识算法,发起针对该目标交易的共识处理;
其中,区块链采用的共识算法,以及基于共识算法对上述目标交易的共识处理过程,在本说明书中不再进行详述,本领域技术人员在将本说明书记载的技术方案付诸实现时,可以参考相关技术中的记载。
当上述目标交易共识通过后,此时上述区块链中的节点设备,可以进一步发起针对该目标交易的合法性检测。
其中,在本说明书中,针对上述目标交易的合法性检测至少可以包括,针对该目标交易携带的签名的合法性检测;以及,针对上述目标交易的重放攻击检测。
在实现时,上述区块链中的节点设备首先可以基于与上述用户持有的私钥对应的公钥,对该目标交易的签名进行验证;如果该目标交易的签名失败,可以认定该目标交易为不合法的交易,上述节点设备可以直接通过客户端向用户返回交易执行失败的提示消息。
如果目标交易的签名验证通过,此时上述节点设备,可以基于该目标交易中携带的可用Nonce记录,和区块链中维护的与该用户个人的用户账户对应的Nonce列表,针对该目标交易进行重放攻击检测。
一方面,请继续参见图4,上述节点设备可以将上述目标交易中携带的Nonce记录,从区块链上维护的与该用户账户对应的Nonce列表中的Nonce记录逐一进行匹配;如果上述目标交易中携带的Nonce记录,与上述Nonce列表中的任一目标Nonce记录匹配,可以认定该目标交易通过了重放攻击检测;在这种情况下,该节点设备可以受理该目标交易。
另一方面,当上述目标交易被受理后,该节点设备可以基于预设幅度对上述目标Nonce记录中的Nonce值进行单调递增;其中,上述预设幅度可以基于实际需求进行自定义;
例如,上述预设幅度仍然可以是1,上述节点设备可以在上述目标交易被受理后,将在上述Nonce列表中匹配到的上述目标Nonce记录中的Nonce值自增1。
通过这种方式,如果上述目标交易在被受理之后,又再次在区块链中进行了重复发布,由于上述Nonce列表中与该目标交易携带的可用Nonce记录匹配的目标Nonce记录中的Nonce值,已经发生了更新,该重复发布的该目标交易在重放攻击检测阶段,将无法在上述Nonce列表中匹配到对应的Nonce记录;因此,该重复发布的目标交易将不会被再次受理,从而可以有效的避免通过在区块链中重复发布该目标交易进行重放攻击。
在示出的一种实施方式中,当上述目标交易被受理后,可以向上述客户端返回上述目标交易被受理的提示消息;而客户端在将上述目标交易发布至区块链后,可以确定是否接收到节点设备返回的该目标交易被受理的提示消息。
如果确认收到上述目标交易被受理的提示消息:
一方面,可以基于预设幅度,对从客户端本地维护的上述Nonce列表中为上述目标交易获取到的上述可用Nonce记录中的Nonce值进行单调递增;比如,将在上述可用Nonce记录中的Nonce值也自增1,以与区块链中维护的上述Nonce列表保持内容同步。
另一方面,由于此前该可用Nonce记录已经被标记为了“不可用”;因此,在基于预设幅度,对该可用Nonce记录中的Nonce值进行单调递增后,可以将该可用Nonce记录的Available字段的取值,置位为“T”。
通过以上技术方案,一方面,由于用户在客户端上通过用户账户发起的每一笔交易被成功受理之后,该笔交易所使用的Nonce记录中的Nonce值都会单调递增,因此即便将该笔交易在区块链中进行重复发布,也仍然无法通过区块链系统针对交易的合法性检测,从而可以有效的避免通过在区块链中发布重复的交易进行重放攻击;
另一方面,由于区块链中维护的与用户账户对应的Nonce列表中,可以包括多条可用Nonce记录;因此,用户可以在客户端上通过用户账户发起多笔包含可用Nonce记录,并且能够通过区块链系统的重放攻击检测的合法交易,从而可以显著的提升用户账户的交易并发能力。
与上述方法实施例相对应,本说明书还提供了一种基于区块链的交易处理装置的实施例。本说明书的基于区块链的交易处理装置的实施例可以应用在电子设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本说明书的基于区块链的交易处理装置所在电子设备的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
图7是本说明书一示例性实施例示出的一种基于区块链的交易处理装置的框图。
请参考图7,所述基于区块链的交易处理装置70可以应用在前述图6所示的电子设备中,包括有:获取模块701、添加模块702和发布模块703。
获取模块701,从区块链中维护的与用户账户对应的Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;
添加模块702,将获取到的所述可用Nonce记录添加至所述目标交易;
发布模块703,将所述目标交易发布至所述区块链,以由所述区块链中的节点设备将所述目标交易中的可用Nonce记录与所述Nonce列表中的Nonce记录进行匹配,并在所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配时,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
在本实施例中,所述获取模块701进一步:
在从所述Nonce列表中为用户通过所述用户账户发起的目标交易获取可用Nonce记录之前,响应于针对所述客户端的初始化指令,获取所述区块链中维护的所述Nonce列表,并将获取到的所述Nonce列表在所述客户端本地进行维护。
在本实施例中,所述获取模块701:
从所述客户端本地维护的所述Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录。
在本实施例中,所述客户端本地维护的所述Nonce列表中的Nonce记录默认被标记为可用;
所述获取模块701进一步:
在从所述客户端本地维护的所述Nonce列表中为所述目标交易获取到了可用Nonce记录之后,在所述Nonce列表中将所述可用Nonce记录标记为不可用。
在本实施例中,所述获取模块701进一步:
确定是否接收到所述节点设备返回的所述目标交易被受理的提示消息;如果是,基于预设幅度对所述可用Nonce记录中的Nonce值进行单调递增,并在所述Nonce值单调递增之后,在所述Nonce列表中将所述可用Nonce记录重新标记为可用。
在本实施例中,所述客户端为多线程客户端;所述Nonce列表中的Nonce记录的数量,指示所述用户账户的交易并发能力。
在本实施例中,所述辅助参数包括:所述Nonce列表的版本标识。
在本实施例中,所述辅助参数还包括:所述Nonce记录的索引标识。
图8是本说明书一示例性实施例示出的另一种基于区块链的交易处理装置的框图。
请参考图8,所述基于区块链的交易处理装置80也可以应用在前述图6所示的电子设备中,包括有:接收模块801、匹配模块802和受理模块803。
接收模块801,接收客户端发送的用户通过用户账户发起的目标交易;其中,所述目标交易被添加了从所述区块链中维护的与所述用户账户对应的Nonce列表中获取到的可用Nonce记录;所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;
匹配模块802,将所述可用Nonce记录与所述区块链中维护的与所述用户账户对应的Nonce列表中的Nonce记录进行匹配;
受理模块803,如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
在本实施例中,所述受理模块803进一步:
如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,基于预设幅度对所述目标Nonce记录的Nonce值进行单调递增;以及,
向所述客户端返回所述目标交易被受理的通知消息。
在本实施例中,所述辅助参数包括:所述Nonce列表的版本标识。
在本实施例中,所述辅助参数还包括:所述Nonce记录的索引标识。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
与上述方法实施例相对应,本说明书还提供了一种电子设备的实施例。该电子设备包括:处理器以及用于存储机器可执行指令的存储器;其中,处理器和存储器通常通过内部总线相互连接。在其他可能的实现方式中,所述设备还可能包括外部接口,以能够与其他设备或者部件进行通信。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
从区块链中维护的与用户账户对应的Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录;其中,所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;
将获取到的所述可用Nonce记录添加至所述目标交易;
将所述目标交易发布至所述区块链,以由所述区块链中的节点设备将所述目标交易中的可用Nonce记录与所述Nonce列表中的Nonce记录进行匹配,并在所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配时,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
从所述Nonce列表中为用户通过所述用户账户发起的目标交易获取可用Nonce记录之前,响应于针对所述客户端的初始化指令,获取所述区块链中维护的所述Nonce列表,并将获取到的所述Nonce列表在所述客户端本地进行维护。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
从所述客户端本地维护的所述Nonce列表中,为用户通过所述用户账户发起的目标交易获取可用Nonce记录。
在本实施例中,所述客户端本地维护的所述Nonce列表中的Nonce记录默认被标记为可用;
通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
在从所述客户端本地维护的所述Nonce列表中为所述目标交易获取到了可用Nonce记录之后,在所述Nonce列表中将所述可用Nonce记录标记为不可用。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
确定是否接收到所述节点设备返回的所述目标交易被受理的提示消息;
如果是,基于预设幅度对所述可用Nonce记录中的Nonce值进行单调递增,并在所述Nonce值单调递增之后,在所述Nonce列表中将所述可用Nonce记录重新标记为可用。
与上述方法实施例相对应,本说明书还提供了另一种电子设备的实施例。该电子设备包括:处理器以及用于存储机器可执行指令的存储器;其中,处理器和存储器通常通过内部总线相互连接。在其他可能的实现方式中,所述设备还可能包括外部接口,以能够与其他设备或者部件进行通信。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
接收客户端发送的用户通过用户账户发起的目标交易;其中,所述目标交易被添加了从所述区块链中维护的与所述用户账户对应的Nonce列表中获取到的可用Nonce记录;所述Nonce列表包括多条Nonce记录;所述Nonce记录包括辅助参数和Nonce值;
将所述可用Nonce记录与所述区块链中维护的与所述用户账户对应的Nonce列表中的Nonce记录进行匹配;
如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,受理所述目标交易;
其中,所述目标Nonce记录中的Nonce值,在所述目标交易被受理时,基于预设幅度进行单调递增。
在本实施例中,通过读取并执行所述存储器存储的与基于区块链的交易处理的控制逻辑对应的机器可执行指令,所述处理器被促使:
如果所述可用Nonce记录与所述Nonce列表中的任一目标Nonce记录匹配,基于预设幅度对所述目标Nonce记录的Nonce值进行单调递增;以及,
向所述客户端返回所述目标交易被受理的通知消息。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。