基于区块链的支持高并发场景的账户智能合约方法和系统转让专利

申请号 : CN202011160714.0

文献号 : CN112017050B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 顾惠波岳晓兰王帅

申请人 : 浙江甲骨文超级码科技股份有限公司

摘要 :

本申请涉及一种基于区块链的支持高并发场景的账户智能合约方法和系统,其中,该基于区块链的支持高并发场景的账户智能合约方法包括:获取资产转出方的转出主账户,为转出主账户创建多个转出子账户;获取转出子账户的地址和交易参数,获取资产转入方的转入账户的地址;根据转出子账户的地址、交易参数和转入账户的地址,将资产从转出子账户转入至转入账户。通过本申请,解决了Fabric区块链的资产交易功能受到MVCC机制的限制,无法满足对于并发量较大的区块链联盟成员的业务需求的问题,实现了一种支持高并发场景的转账智能合约,可以满足高并发场景下的转账需求。

权利要求 :

1.一种基于区块链的支持高并发场景的账户智能合约方法,其特征在于,包括:获取用户的身份信息;

对所述身份信息进行计算得到所述身份信息的哈希值;

根据所述哈希值得到转出主账户的地址,对所述转出主账户进行初始化;

获取资产转出方的转出主账户,为所述转出主账户创建多个转出子账户,其中,所述转出主账户和所述转出子账户通过智能合约得到,所述智能合约用于Fabric区块链,为所述转出主账户创建多个转出子账户包括资产转出方通过将账户中的资产分配至多个地址,从而得到多个转出子账户,所有的转出子账户同时存在,同时失效;

获取所述转出子账户的地址和交易参数,获取资产转入方的转入账户的地址,其中,所述资产转入方的转入账户的地址通过调用所述智能合约传入;

根据所述转出子账户的地址、所述交易参数和所述转入账户的地址,将资产从所述转出子账户转入至所述转入账户。

2.根据权利要求1所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,所述转入账户包括转入主账户,所述方法还包括:为所述转入主账户创建转入子账户。

3.根据权利要求2所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,所述将资产从所述转出子账户转入至所述转入账户包括:将所述资产转入至所述转入主账户,或者,将所述资产转入至所述转入账户的转入子账户。

4.根据权利要求3所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,所述将所述资产转入至所述转入账户的转入子账户包括:对所述交易参数和所述转出主账户进行验证;

在所述交易参数和所述转出主账户均验证通过,且所述转出子账户有效的情况下,获取所述转出子账户的地址,其中,所述转出子账户有效为所述转出子账户中存在资产;

在所述转入子账户有效的情况下,获取所述转入子账户的地址;

在所述转出子账户的资产大于或者等于预设交易阈值的情况下,根据所述转出子账户的地址、所述转入子账户的地址和所述交易参数,进行资产交易。

5.根据权利要求4所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,通过路由算法选择所述转出子账户和所述转入子账户。

6.根据权利要求1所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,还包括:

对子账户存入参数和所述转出主账户进行验证;

在所述子账户存入参数和所述转出主账户均验证通过的情况下,获取所述转出主账户的资产状态;

在所述资产状态为未存入,且所述转出主账户的资产大于或者等于预设资产阈值的情况下,将所述转出主账户的资产信息、所述转出子账户的资产信息和所述转出主账户的资产状态进行修正。

7.根据权利要求1所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,还包括:

对主账户存入参数进行验证;

在所述主账户存入参数验证通过的情况下,获取资产存入账户地址;

在所述资产存入账户地址为管理员账户地址的情况下,将资产存入所述转出主账户。

8.根据权利要求1所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,还包括:

将所述转出子账户中的资产转移至所述转出主账户,并将所有的所述转出子账户删除,修改所述转出主账户的资产状态;

将所述转出主账户中的资产进行提出。

9.根据权利要求1所述的基于区块链的支持高并发场景的账户智能合约方法,其特征在于,还包括:

获取用户的账户查询指令,根据所述用户的身份信息生成账户查询地址;

根据所述账户查询地址查询所述用户的主账户信息和子账户信息。

10.一种基于区块链的支持高并发场景的账户智能合约系统,其特征在于,包括账户获取模块、地址确定模块和资产交易模块:所述账户获取模块,用于获取用户的身份信息;对所述身份信息进行计算得到所述身份信息的哈希值;根据所述哈希值得到转出主账户的地址,对所述转出主账户进行初始化;

获取资产转出方的转出主账户,为所述转出主账户创建多个转出子账户,其中,所述转出主账户和所述转出子账户通过智能合约得到,所述智能合约用于Fabric区块链;

所述地址确定模块,用于获取所述转出子账户的地址和交易参数,获取资产转入方的转入账户的地址,其中,所述资产转入方的转入账户的地址通过调用所述智能合约传入,为所述转出主账户创建多个转出子账户包括资产转出方通过将账户中的资产分配至多个地址,从而得到多个转出子账户,所有的转出子账户同时存在,同时失效;

所述资产交易模块,用于根据所述转出子账户的地址、所述交易参数和所述转入账户的地址,将资产从所述转出子账户转入至所述转入账户。

说明书 :

基于区块链的支持高并发场景的账户智能合约方法和系统

技术领域

[0001] 本申请涉及区块链技术领域,特别是涉及基于区块链的支持高并发场景的账户智能合约方法和系统。

背景技术

[0002] 在用户使用智能合约的情况下,Fabric区块链可以实现不同账户下的资产交易功能,例如不同账户之间可以进行转账。但是在相关技术中,通过智能合约实现的未花费的交
易输出(Unspent Transaction Output,简称UTXO)模型和账户模型,会受到Fabric区块链
的多版本并发控制(Multi‑Version Concurrent Control,简称为MVCC)的机制限制,无法
应用于高并发场景,例如,在同一个区块内不存在两笔或两笔以上的资产交易对于同一个
账户的修改同时生效。进一步地,目前的Fabric区块链的资产交易功能受到MVCC机制的限
制,无法满足对于并发量较大的区块链联盟成员的业务需求。
[0003] 目前针对相关技术中,Fabric区块链的资产交易功能受到MVCC机制的限制,无法满足对于并发量较大的区块链联盟成员的业务需求的问题,尚未提出有效的解决方案。

发明内容

[0004] 本申请实施例提供了一种基于区块链的支持高并发场景的账户智能合约方法和系统,以至少解决相关技术中Fabric区块链的资产交易功能受到MVCC机制的限制,无法满
足对于并发量较大的区块链联盟成员的业务需求的问题。
[0005] 第一方面,本申请实施例提供了一种基于区块链的支持高并发场景的账户智能合约方法,包括:
[0006] 获取资产转出方的转出主账户,为所述转出主账户创建多个转出子账户;
[0007] 获取所述转出子账户的地址和交易参数,获取资产转入方的转入账户的地址;
[0008] 根据所述转出子账户的地址、所述交易参数和所述转入账户的地址,将资产从所述转出子账户转入至所述转入账户。
[0009] 在其中一些实施例中,所述转入账户包括转入主账户,所述方法还包括:
[0010] 为所述转入主账户创建转入子账户。
[0011] 在其中一些实施例中,所述将资产从所述转出子账户转入至所述转入账户包括:
[0012] 将所述资产转入至所述转入主账户,或者,将所述资产转入至所述转入账户的转入子账户。
[0013] 在其中一些实施例中,所述将所述资产转入至所述转入账户的转入子账户包括:
[0014] 对所述交易参数和所述转出主账户进行验证;
[0015] 在所述交易参数和所述转出主账户均验证通过,且所述转出子账户有效的情况下,获取所述转出子账户的地址,其中,所述转出子账户有效为所述转出子账户中存在资
产;
[0016] 在所述转入子账户有效的情况下,获取所述转入子账户的地址;
[0017] 在所述转出子账户的资产大于或者等于预设交易阈值的情况下,根据所述转出子账户的地址、所述转入子账户的地址和所述交易参数,进行资产交易。
[0018] 在其中一些实施例中,通过路由算法选择所述转出子账户和所述转入子账户。
[0019] 在其中一些实施例中,还包括:
[0020] 对子账户存入参数和所述转出主账户进行验证;
[0021] 在所述子账户存入参数和所述转出主账户均验证通过的情况下,获取所述转出主账户的资产状态;
[0022] 在所述资产状态为未存入,且所述转出主账户的资产大于或者等于预设资产阈值的情况下,将所述转出主账户的资产信息、所述转出子账户的资产信息和所述转出主账户
的资产状态进行修正。
[0023] 在其中一些实施例中,还包括:
[0024] 对主账户存入参数进行验证;
[0025] 在所述主账户存入参数验证通过的情况下,获取资产存入账户地址;
[0026] 在所述资产存入账户地址为管理员账户地址的情况下,将资产存入所述转出主账户。
[0027] 在其中一些实施例中,所述转出主账户的生成方法包括:
[0028] 获取用户的身份信息;
[0029] 对所述身份信息进行计算得到所述身份信息的哈希值;
[0030] 根据所述哈希值得到所述转出主账户的地址,对所述转出主账户进行初始化。
[0031] 在其中一些实施例中,还包括:
[0032] 将所述转出子账户中的资产转移至所述转出主账户,并将所有的所述转出子账户删除,修改所述转出主账户的资产状态;
[0033] 将所述转出主账户中的资产进行提出。
[0034] 在其中一些实施例中,还包括:
[0035] 获取用户的账户查询指令,根据所述用户的身份信息生成账户查询地址;
[0036] 根据所述账户查询地址查询所述用户的主账户信息和子账户信息。
[0037] 第二方面,本申请实施例提供了一种基于区块链的支持高并发场景的账户智能合约系统,包括账户获取模块、地址确定模块和资产交易模块:
[0038] 所述账户获取模块,用于获取资产转出方的转出主账户,为所述转出主账户创建多个转出子账户;
[0039] 所述地址确定模块,用于获取所述转出子账户的地址和交易参数,获取资产转入方的转入账户的地址;
[0040] 所述资产交易模块,用于根据所述转出子账户的地址、所述交易参数和所述转入账户的地址,将资产从所述转出子账户转入至所述转入账户。
[0041] 第三方面,本申请实施例提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实
现如上述第一方面所述的基于区块链的支持高并发场景的账户智能合约方法。
[0042] 第四方面,本申请实施例提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的基于区块链的支持高并发场景的账户智能合约
方法。
[0043] 相比于相关技术,本申请实施例提供的基于区块链的支持高并发场景的账户智能合约方法,通过获取资产转出方的转出主账户,为转出主账户创建多个转出子账户;获取转
出子账户的地址和交易参数,获取资产转入方的转入账户的地址;根据转出子账户的地址、
交易参数和转入账户的地址,将资产从转出子账户转入至转入账户,解决了Fabric区块链
的资产交易功能受到MVCC机制的限制,无法满足对于并发量较大的区块链联盟成员的业务
需求的问题,实现了一种支持高并发场景的转账智能合约,可以满足高并发场景下的转账
需求。
[0044] 本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。

附图说明

[0045] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0046] 图1是根据本申请实施例的基于区块链的支持高并发场景的账户智能合约方法的流程图;
[0047] 图2是根据本申请实施例的再一种基于区块链的支持高并发场景的账户智能合约方法的流程图;
[0048] 图3是根据本申请实施例的转出子账户资产存入的方法的流程图;
[0049] 图4是根据本申请实施例的转出主账户资产存入的方法的流程图;
[0050] 图5是根据本申请实施例的转出主账户的生成方法的流程图;
[0051] 图6是根据本申请优选实施例的基于区块链的支持高并发场景的账户智能合约方法的流程图;
[0052] 图7是本申请实施例的基于区块链的支持高并发场景的账户智能合约方法的硬件结构框图;
[0053] 图8是根据本申请实施例的基于区块链的支持高并发场景的账户智能合约系统的结构框图。

具体实施方式

[0054] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用
于限定本申请。基于本申请提供的实施例,本领域普通技术人员在没有作出创造性劳动的
前提下所获得的所有其他实施例,都属于本申请保护的范围。此外,还可以理解的是,虽然
这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本申请公开的内容相关
的本领域的普通技术人员而言,在本申请揭露的技术内容的基础上进行的一些设计,制造
或者生产等变更只是常规的技术手段,不应当理解为本申请公开的内容不充分。
[0055] 在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相
同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显
式地和隐式地理解的是,本申请所描述的实施例在不冲突的情况下,可以与其它实施例相
结合。
[0056] 除非另作定义,本申请所涉及的技术术语或者科学术语应当为本申请所属技术领域内具有一般技能的人士所理解的通常意义。本申请所涉及的“一”、“一个”、“一种”、“该”
等类似词语并不表示数量限制,可表示单数或复数。本申请所涉及的术语“包括”、“包含”、
“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单
元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有
列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单
元。本申请所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连
接,而是可以包括电气的连接,不管是直接的还是间接的。本申请所涉及的“多个”是指大于
或者等于两个。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或
B”可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。本申请所涉及的术语“第
一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
[0057] 本申请提供的基于区块链的支持高并发场景的账户智能合约方法,可以应用于基于Fabric的联盟链中,对于联盟链中的每一个用户,通过智能合约创建属于该用户的主账
户,根据该主账户的地址和用户需要的子账户数量,生成子账户的地址,从而创建子账户,
在通过智能合约进行交易时,交易双方分别为资产转出方和资产转入方,资产转出方和资
产转入方的身份随实际交易过程变化,例如,在一个交易中,资产从A方转移至B方,此时A方
为资产转出方,B方为资产转入方,在另外一个交易中,资产从C方转移至A方,此时,C方为资
产转出方,A方为资产转入方。因此本申请中对转出主账户和转出子账户进行的各种操作和
处理分别适用于转入主账户和转入子账户。
[0058] 用户在使用智能合约进行交易之前,智能合约需要先进行初始化,具体地,智能合约初始化需要指定三个参数,分别是最大转出子账户数量、手续费单价和管理员账户地址。
由于本申请中的基于区块链的支持高并发场景的账户智能合约方法在智能合约中实现,因
此考虑到智能合约的安全性,需要对转出子账户数量进行限制,例如,转出子账户数量的默
认最大值不可超过10000,具体数值可根据联盟链中成员的实际需求做进一步的限制,而且
由于转出主账户将资产存入至转出子账户是较重的操作,为避免某些恶意用户频繁地进行
此操作,本实施例引入手续费机制,手续费为手续费单价与子账户数量的乘积,手续费单价
可以由联盟链内的成员进行设置,手续费会被转入至管理员账户,且对转出主账户进行充
值或者提现的操作只能通过管理员账户进行。
[0059] 本实施例提供了一种基于区块链的支持高并发场景的账户智能合约方法,该方法可以用在基于Fabric技术的区块链中。图1是根据本申请实施例的基于区块链的支持高并
发场景的账户智能合约方法的流程图,如图1所示,该方法包括如下步骤:
[0060] 步骤S110,获取资产转出方的转出主账户,为转出主账户创建多个转出子账户。
[0061] 通常情况下,基于Fabric的区块链中的资产转出方需要提前通过智能合约创建主账户,在对高并发交易有需求的情况下,资产转出方可以通过将账户中的资产分配至多个
地址,从而得到多个转出子账户。
[0062] 步骤S120,获取转出子账户的地址和交易参数,获取资产转入方的转入账户的地址。
[0063] 本实施例中转出子账户的地址可以根据转出主账户的地址、转出子账户的数量和交易哈希值(Hash)计算得到,其中,交易哈希值用于计算随机数,将该随机数与已有的转出
子账户地址进行匹配来确定交易过程使用的转出子账户,以保证转出子账户选取的随机
性。交易参数可以包括多个与资产交易有关的参数,例如,资产交易的金额,选择通过转出
主账户还是转出子账户进行交易。
[0064] 资产转入方的转入账户的地址在交易时通过调用智能合约传入,智能合约也可以在进行交易前对资产转入方的转入账户进行验证。
[0065] 步骤S130,根据转出子账户的地址、交易参数和转入账户的地址,将资产从转出子账户转入至转入账户。
[0066] 通过上述步骤S110至步骤S130,由于具有多个转出子账户,因此资产转出方可以同时与多个资产转入方进行交易,不再受MVCC机制的限制,解决了Fabric区块链的资产交
易功能受到MVCC机制的限制,无法满足对于并发量较大的区块链联盟成员的业务需求的问
题,通过为转出主账户创建多个转出子账户,实现了一种支持高并发场景的转账智能合约,
可以满足高并发场景下的转账需求。
[0067] 在其中一些实施例中,转入账户包括转入主账户和转入子账户,其中,为转入主账户创建转入子账户的方法与为转出主账户创建转出子账户的方法相同,具体为,资产转入
方将转入主账户中的资产分配至不同的多个地址,即可得到多个转入子账户,以满足资产
转入方在交易过程中对高并发的需求,本实施例中的方法可以用在基于Fabric技术的区块
链中。
[0068] 进一步地,资产转出方可以将资产转入至资产转入方的转入主账户,也可以将资产转入至转入账户的转入子账户,还可以选择是否通过转出子账户进行交易,通常情况下,
交易频率较低的大额转账适用于使用主账户之间进行交易,交易频率较高的小额转账适用
于子账户之间进行交易。资产转出方可以根据需求灵活选择资产交易的方式,因此本实施
例中的方法可以提高场景适应性。
[0069] 在其中一些实施例中,图2是根据本申请实施例的再一种基于区块链的支持高并发场景的账户智能合约方法的流程图,该方法可以用在基于Fabric技术的区块链中,如图2
所示,该方法包括如下步骤:
[0070] 步骤S210,对交易参数和转出主账户进行验证。
[0071] 本实施例在进行资产交易的过程中,交易参数包括四个参数,第一个参数表示是否使用子账户转出,第二个参数表示转出金额,第三个参数表示转入账户地址,第四个参数
表示是否转入对方子账户。在参数验证的过程中,需要验证转出金额是否大于0和资产状态
的具体情况,并且在使用转出子账户的情况下,还需要校验转出子账户的数量是否大于0,
其中,资产状态包括转出主账户已经为转出子账户进行充值的状态和转出子账户中的余额
已经被提出的状态。
[0072] 对转出主账户进行验证具体为对转出主账户的地址进行验证。验证的过程为,获取转出主账户的用户的身份信息,例如证书信息,然后根据身份信息进行哈希计算得到哈
希值,再根据哈希值得到该用户的地址,在该地址存在于区块链的状态数据库中的情况下,
认为该用户的地址存在且有效,验证通过。
[0073] 步骤S220,在交易参数和转出主账户均验证通过,且转出子账户有效的情况下,获取转出子账户的地址。
[0074] 其中,转出子账户在Fabric区块链状态数据库中以Key‑Value的键值对形式进行存储,Key可以是转出子账户的地址,具体为转出主账户的地址加上一个后缀,该后缀为从0
开始,步长为1递增的固定长度后缀,该固定长度为转出子账户数量减1后以十进制表示的
数值位数,然后Value为子账户的余额序列化后的值。
[0075] 转出子账户有效为转出子账户中存在资产。具体地,转出子账户中存在资产为转出主账户将资产存入转出子账户,即转出主账户已经为转出子账户进行充值。
[0076] 步骤S230,在转入子账户有效的情况下,获取转入子账户的地址。
[0077] 资产转入方可以采用与资产转出方相同的方法生成转入子账户的地址,在交易过程中,智能合约可以对该转入子账户的地址进行验证。在进行资产交易的过程中,还可以对
转入子账户中的资产进行验证,在转入主账户已经对转入子账户进行充值的情况下,转入
子账户为有效账户,才能进行资产交易。
[0078] 步骤S240,在转出子账户的资产大于或者等于预设交易阈值的情况下,根据转出子账户的地址、转入子账户的地址和交易参数,进行资产交易。
[0079] 在用户使用转出子账户进行交易的过程中,需要对转出子账户是否满足交易条件进行判断,具体为判断转出子账户中的资产是否大于或者等于预设交易阈值,该预设交易
阈值为资产交易过程中需要交易的资产数值,在转出子账户的资产满足交易条件的情况
下,同时修改转出子账户和转入至转入子账户的资产。
[0080] 通过上述步骤S210至步骤S240,本实施例提供一种转出子账户和转入子账户之间实现基于区块链的支持高并发场景的账户智能合约方法,由于资产转出方和资产转入方具
有多个子账户,因此可以满足交易双方对高并发的需求,有效提高交易效率。
[0081] 在其中一些实施例中,通过路由算法选择转出子账户和转入子账户。其中,路由算法为一种选路算法,可以为资产交易过程随机选择转出子账户和转入子账户。具体为,路由
算法获取到资产交易过程中的交易哈希值(Hash),使用循环冗余校验(Cyclic Redundancy 
Check,简称为CRC)算法,例如CRC32算法,对交易哈希值(Hash)进行计算得到一个整数值,
该整数值对转入子账户的数量取余数,将余数作为固定长度的后缀,拼接到转入主账户的
地址,从而得到转入子账户的地址,该固定长度可以为转出子账户数量减1后以十进制表示
的数值位数。本实施例中通过路由算法计算交易路径,可以提高对转入子账户进行选择的
随机性,更好地满足用户对高并发的需求,进一步地,本实施例中的方法可以用在基于
Fabric技术的区块链中。
[0082] 在其中一些实施例中,图3是根据本申请实施例的转出子账户资产存入的方法的流程图,该方法可以用在基于Fabric技术的区块链中,如图3所示,该方法包括如下步骤:
[0083] 步骤S310,对子账户存入参数和转出主账户进行验证。
[0084] 如果用户需要启用并发转账功能,则需要先将资产从转出主账户存入至转出子账户,即对转出子账户进行充值。
[0085] 在通过转出主账户对转出子账户进行充值的过程中,智能合约需要获取子账户存入参数,子账户存入参数包括转出子账户的数量和充值金额,其中,转出子账户的数量需要
满足大于1,且小于或者等于智能合约初始化时指定的最大转出子账户数量,对转出子账户
的充值金额需要大于0。
[0086] 在子账户存入参数满足上述条件的情况下,需要对转出主账户进行验证,具体为对转出主账户的地址进行验证。验证的过程为,获取转出主账户的用户的身份信息,例如证
书信息,然后根据身份信息进行哈希计算得到哈希值,再根据哈希值得到该用户的地址,在
该地址存在于区块链的状态数据库中的情况下,认为该用户的地址存在且有效,验证通过。
[0087] 步骤S320,在转出主账户和子账户存入参数均验证通过的情况下,获取转出主账户的资产状态。
[0088] 转出主账户的资产状态具体为转出主账户的子账户充值状态,包括转出主账户已经为转出子账户进行充值的状态和转出子账户中的余额已经被提出的状态。资产状态以
True和False表示,True表示转出主账户已经将资产存入转出子账户,即已经执行过转出子
账户充值操作,此时不能再次执行转出子账户充值操作,False表示转出主账户未为转出子
账户进行充值,或者转出子账户中的资产已经被提出,此时不能再次将转出子账户中的资
产提出,即不能再次执行转出子账户提现操作。
[0089] 本实施例中,转出主账户对转出子账户进行充值和提现只能交替进行,在转出主账户将资产从转出子账户中提出时,只能将转出子账户中的余额全部提出,此时,转出子账
户中的余额为0,属于无效账户。在需要通过转出子账户进行交易时,必须先通过转出主账
户对转出子账户进行充值。
[0090] 进一步地,转出主账户同时对所有的转出子账户进行操作,即所有的转出子账户同时存在,同时失效。
[0091] 步骤S330,在资产状态为未存入,且转出主账户的资产大于或者等于预设资产阈值的情况下,将转出主账户的资产信息、转出子账户的资产信息和转出主账户的资产状态
进行修正。
[0092] 资产状态为未存入表示转出主账户还没有将资产存入转出子账户,此时可以对转出子账户进行充值。可选地,在充值之前,还要判断转出主账户中的资产是否充足,只有在
资产大于或者等于预设资产阈值的条件下,转出主账户才可以对转出子账户进行充值,本
实施例中,预设资产阈值为手续费与转出子账户充值总额的和,其中手续费为手续费单价
与转出子账户数量乘积,手续费单价与转出子账户数量均可以由用户进行设置,转出子账
户充值总额为每个转出子账户的充值金额与转出子账户数量的乘积。本实施例中,手续费
单价可以为0,转出主账户为转出子账户的充值金额必须大于0。
[0093] 转出主账户的资产大于或者等于预设资产阈值的情况下,同时修正Fabric区块链状态数据库中转出主账户的账户信息与转出子账户的账户信息,修正转出主账户的账户信
息具体为修正转出主账户的账户余额,同时将转出主账户的资产状态设置为True,表示转
出主账户已经为转出子账户进行充值且充值成功。进一步地,转出子账户在Fabric区块链
状态数据库中以Key‑Value的键值对形式进行存储,Key为转出主账户的地址加上一个后
缀,该后缀为从0开始,步长为1递增的固定长度后缀,该固定长度为转出子账户数量减1后
以十进制表示的数值位数,Value为子账户的余额序列化后的值。
[0094] 进一步地,本实施例中,在子账户存入参数或者转出主账户的验证没有通过,或者转出主账户的资产小于预设资产阈值的情况下,转出主账户对转出子账户的充值失败。
[0095] 通过上述步骤S310至步骤S330,实现了转出主账户将资产存入转出子账户的过程,满足资产转出方在进行资产交易过程中的高并发需求,提高了交易效率。
[0096] 在其中一些实施例中,图4是根据本申请实施例的转出主账户资产存入的方法的流程图,该方法可以用在基于Fabric技术的区块链中,如图4所示,该方法包括如下步骤:
[0097] 步骤S410,对主账户存入参数进行验证。
[0098] 在交易过程中,用户转出主账户的余额可能为0,因此需要将资产存入该转出主账户才能进行交易,即需要对转出主账户进行充值操作。进行资产交易的智能合约在执行充
值操作的过程中,需要获取主账户存入参数,该转出主账户存入参数可以为转出主账户的
地址和资产存入的数值,即充值金额,本实施例中资产存入的数值需大于0。
[0099] 步骤S420,在主账户存入参数验证通过的情况下,获取资产存入账户地址。
[0100] 在进行转出主账户充值的过程中,智能合约需要对将资产充值至转出主账户的用户的身份进行验证,具体为,获取该用户的身份信息,例如证书信息,然后根据身份信息进
行哈希计算得到哈希值,再根据哈希值得到该用户的地址,记为资产存入账户地址。
[0101] 步骤S430,在资产存入账户地址为管理员账户地址的情况下,将资产存入转出主账户。
[0102] 本实施例中,只有智能合约在初始化时指定的管理员账户具有对转出主账户进行充值的权限。因此在将资产存入转出主账户的过程中,需要判断资产存入账户地址是否为
管理员账户的地址,在资产存入账户地址为管理员账户的地址的情况下,还要判断转出主
账户地址是否存在,在转出主账户地址存在的情况下,可以为转出主账户的余额增加相应
的充值金额,成功将资产存入至转出主账户。其中,转出主账户存在具体为智能合约获取到
的转出主账户存在于区块链的状态数据库中。
[0103] 在主账户存入参数的验证不通过,或者资产存入账户地址不是管理员账户的地址,或者转出主账户地址不存在的情况下,将资产存入转出主账户的过程均失败。
[0104] 通过上述步骤S410至步骤S430,本实施例在将资产存入转出主账户的过程中,需要进行多次验证,以提高智能合约中资产交易的安全性。
[0105] 在其中一些实施例中,图5是根据本申请实施例的转出主账户的生成方法的流程图,该方法可以用在基于Fabric技术的区块链中,如图5所示,该方法包括如下步骤:
[0106] 步骤S510,获取用户的身份信息。
[0107] 本实施例用户在交易过程中创建转出主账户时,不需要传入参数,而是需要用户的身份信息,该身份信息为用户的唯一标识,具体地,身份信息可以为创建交易的用户的证
书信息。
[0108] 步骤S520,对身份信息进行计算得到身份信息的哈希值。
[0109] 其中,通过哈希函数计算得到哈希值,哈希函数又称散列算法,是一种从任何一种数据中创建数字“指纹”的方法。哈希函数把消息或数据压缩成摘要,使得数据量变小,将数
据的格式固定下来,哈希值通常用一个短的随机字母和数字组成的字符串来代表。通过哈
希值的计算,可以将用户的身份信息与用户的转出主账户地址之间进行对应,便于在众多
地址中查找与用户的身份信息对应的主账户地址。本实施例中,可以对身份信息进行
SHA256计算得到哈希值,SHA256是安全散列算法2(Secure Hash Algorithm 2,简称为SHA‑
2)下细分出的一种加密算法,属于SHA的算法之一。对于任意长度的身份信息,SHA256都会
产生一个256字节长的哈希值。
[0110] 步骤S530,根据哈希值得到转出主账户的地址,对转出主账户进行初始化。
[0111] 在得到身份信息的哈希之后,再对哈希值进行RACE原始完整性校验消息摘要(RACE Integrity Primitives Evaluation Message Digest,简称为RIPEMD)计算得到转
出主账户的地址,RIPEMD算法共有4个标准,分别为128、160、256和320,每个标准对应输出
的长度分别为16字节、20字节、32字节和40字节。
[0112] 在得到转出主账户的地址之后,需要声明一个Account类型的与转出主账户对应的账户变量,并对该账户变量进行初始化。进一步地,Account类型的账户变量包含三个字
段:1、uint64类型的Balance字段,表示转出主账户的余额,该余额不包含转出子账户的余
额;2、uint32类型的Count字段,表示转出子账户数量;3、bool类型的RechargeStatus字段,
表示转出主账户的资产状态,包括True和False。在本实施例中,将资产存入转出子账户和
将资产从转出子账户中提出只能交替进行。初始化过程中,Balance字段和Count字段均设
置为0,RechargeStatus字段设置为False。然后以转出主账户地址作为Key,以序列化之后
的账户变量作为Value存储到Fabric区块链的状态数据库中。
[0113] 通过上述步骤S510至步骤S530,本实施例根据用户的身份信息创建转出主账户,并对主账户进行初始化,提高了在智能合约中进行资产交易的安全性。
[0114] 在其中一些实施例中,作为资产转出方的用户可以将转出子账户中的资产转移至转出主账户,同时将所有的转出子账户删除,修改转出主账户在区块链中的资产状态,例如
将转出主账户的资产状态设置为False。进一步地,管理员账户可以将转出主账户中的资产
进行提出。可选地,智能合约中将资产从转出主账户提出的方法,仅管理员账户有权限操
作,也只有管理员有权限为所有用户的转出主账户提供主账户提现服务,并且智能合约仅
支持转出主账户提现,用户如要将转出子账户的资产提出,需先由用户自己执行转出子账
户提现操作,将转出子账户中的资产提现到转出主账户,之后由管理员执行转出主账户的
提现操作。本实施例提供的资产提出的方法,可以用在基于Fabric技术的区块链中,便于用
户将资产在转出主账户和转出子账户之间进行转移,提高资产交易的场景适应性。
[0115] 在其中一些实施例中,资产转出方还可以查询转出主账户和转出子账户的信息,具体为,智能合约获取用户的账户查询指令,根据用户的身份信息生成账户查询地址,根据
账户查询地址查询用户的主账户信息和子账户信息。具体地,在用户发起一笔账户查询交
易的情况下,交易调用智能合约,智能合约根据发起交易的用户的身份信息生成账户查询
地址,然后根据该账户查询地址查询状态数据库,在状态数据库中存在与该账户查询地址
匹配的账户记录的情况下,则返回账户记录,否则返回空值。本实施例提供的主账户信息和
子账户信息的查询方法,可以用在基于Fabric技术的区块链中,便于查询到Fabric区块链
状态数据库中最新的主账户信息和子账户信息,为资产交易提供便利。
[0116] 下面通过优选实施例对本申请实施例进行描述和说明。
[0117] 图6是根据本申请优选实施例的基于区块链的支持高并发场景的账户智能合约方法的流程图,该方法可以用在基于Fabric技术的区块链中,如图6所示,该方法包括如下步
骤:
[0118] 步骤S610,获取交易参数,并对该交易参数进行验证,在交易参数验证通过的情况下,根据资产转出方的身份信息对转出主账户进行验证,在交易参数验证未通过的情况下,
交易失败;
[0119] 步骤S620,对转出主账户进行验证具体为对转出主账户的地址进行验证,在转出主账户的地址存在于区块链的状态数据库中的情况下,转出主账户验证通过,否则交易失
败;
[0120] 步骤S630,在资产转出方使用转出子账户进行交易的情况下,需要判断转出子账户是否有效,在转出子账户有效的情况下,通过路由算法选择一个转出子账户进行交易,在
转出子账户无效的情况下,交易失败;
[0121] 步骤S640,在对转出子账户进行选择之后,对转出子账户中的余额进行判断,转出子账户中的余额需要大于交易所需的资产数值,否则交易失败;
[0122] 步骤S650,在转出子账户中的余额充足的情况下,对资产转入方的转入主账户进行验证,验证方法同样为通过资产转入方的身份信息对转入主账户的地址进行验证,在转
入主账户的地址存在于区块链的状态数据库中的情况下,验证通过,否则交易失败;
[0123] 步骤S660,在转入主账户验证成功的情况下,如果交易双方选择转入子账户进行交易,通过路由算法对转入子账户进行选择,修改智能合约中转出子账户和转入子账户的
资产信息,或者,如果交易双方选择转入主账户进行交易,直接对转出子账户和转入主账户
的资产信息进行修改。
[0124] 通过上述步骤S610至步骤S660,本实施例提供了一种支持并发交易的智能合约,该智能合约可以为每一个主账户生成若干个子账户,由主账户为子账户充值,交易时通过
路由算法路由到特定的子账户,通过子账户实现与转入账户之间的转账。进一步地,智能合
约可以提供创建主账户、对主账户充值、对子账户充值、交易、子账户提现、主账户提现、账
户信息查询的功能,其中,主账户包括转出主账户和转入主账户,子账户包括转出子账户和
转入主账户。
[0125] 具体地,用户在使用智能合约进行交易时,Fabric区块链的Peer节点安装该智能合约,管理员账户对智能合约进行初始化,为资产转出方或者资产转入方创建账户,管理员
账户可为主账户进行充值,启用并发转账的用户可使用主账户为子账户充值。同时管理员
账户可为各主账户执行提现操作,每个用户可查询自己的主账户信息和子账户信息,且可
对将子账户中的资产提现到主账户。
[0126] 本申请提供的方法实施例可以在终端、计算机或者类似的运算装置中执行。以运行在终端上为例,图7是本申请实施例的基于区块链的支持高并发场景的账户智能合约方
法的硬件结构框图。如图7所示,终端70可以包括一个或多个(图7中仅示出一个)处理器702
(处理器702可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于
存储数据的存储器704,可选地,上述终端还可以包括用于通信功能的传输设备706以及输
入输出设备708。本领域普通技术人员可以理解,图7所示的结构仅为示意,其并不对上述终
端的结构造成限定。例如,终端70还可包括比图7中所示更多或者更少的组件,或者具有与
图7所示不同的配置。
[0127] 存储器704可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的基于区块链的支持高并发场景的账户智能合约方法对应的计算机程序,处理
器702通过运行存储在存储器704内的计算机程序,从而执行各种功能应用以及数据处理,
即实现上述的方法。存储器704可包括高速随机存储器,还可包括非易失性存储器,如一个
或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器704可
进一步包括相对于处理器702远程设置的存储器,这些远程存储器可以通过网络连接至终
端70。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0128] 传输设备706用于经由一个网络接收或者发送数据。上述的网络具体实例可包括终端70的通信供应商提供的无线网络。在一个实例中,传输设备706包括一个网络适配器
(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可
与互联网进行通讯。在一个实例中,传输设备706可以为射频(Radio Frequency,简称为RF)
模块,其用于通过无线方式与互联网进行通讯。
[0129] 需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些
情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0130] 本实施例还提供了一种基于区块链的支持高并发场景的账户智能合约系统,该系统可以用在基于Fabric技术的区块链中,该系统用于实现上述实施例及优选实施方式,已
经进行过说明的不再赘述。如以下所使用的,术语“模块”、“单元”、“子单元”等可以实现预
定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是
硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0131] 图8是根据本申请实施例的基于区块链的支持高并发场景的账户智能合约系统的结构框图,该系统可以用在基于Fabric技术的区块链中,如图8所示,该系统包括账户获取
模块81、地址确定模块82和资产交易模块83:
[0132] 账户获取模块81,用于获取资产转出方的转出主账户,为转出主账户创建多个转出子账户;
[0133] 地址确定模块82,用于获取转出子账户的地址和交易参数,获取资产转入方的转入账户的地址;
[0134] 资产交易模块83,用于根据转出子账户的地址、交易参数和转入账户的地址,将资产从转出子账户转入至转入账户。
[0135] 通过上述基于区块链的支持高并发场景的账户智能合约系统,由于账户获取模块81可以获取到多个转出子账户,因此资产转出方可以同时与多个资产转入方进行交易,不
再受MVCC机制的限制,解决了Fabric区块链的资产交易功能受到MVCC机制的限制,无法满
足对于并发量较大的区块链联盟成员的业务需求的问题,通过为转出主账户创建多个转出
子账户,实现了一种支持高并发场景的转账智能合约,可以满足高并发场景下的转账需求。
[0136] 需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位
于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器
中。
[0137] 本实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
[0138] 可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
[0139] 可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
[0140] S1,获取资产转出方的转出主账户,为转出主账户创建多个转出子账户。
[0141] S2,获取转出子账户的地址和交易参数,获取资产转入方的转入账户的地址。
[0142] S3,根据转出子账户的地址、交易参数和转入账户的地址,将资产从转出子账户转入至转入账户。
[0143] 需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
[0144] 另外,结合上述实施例中的基于区块链的支持高并发场景的账户智能合约方法,本申请实施例可提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程
序被处理器执行时实现上述实施例中的任意一种基于区块链的支持高并发场景的账户智
能合约方法。
[0145] 以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存
在矛盾,都应当认为是本说明书记载的范围。
[0146] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来
说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护
范围。因此,本申请专利的保护范围应以所附权利要求为准。