区块链交易处理方法和系统技术方案

技术编号:34833495 阅读:20 留言:0更新日期:2022-09-08 07:27
本发明专利技术公开了一种区块链交易处理方法和系统,该方法包括:客户端生成一笔交易,并对交易进行私钥签名、序列化以及广播,当交易发送方或者交易接收方的账户第一次在链上激活时,以所述交易所在的区块高度和所述交易在区块中的位置索引来标识一个所述账户,在所述交易进行序列化时,采用压缩的变长编码进一步表示所述账户;节点对交易进行防重放攻击检查;在防重放攻击检查通过之后,节点对交易进行校验,校验包括验签;在通过校验之后,节点将交易打包进新区块,并将新区块进行广播;节点达成共识之后,将包含交易的新区块添加到最长链上,并持久化到状态数据库。该方法能够快速地提高处理交易的速度。提高处理交易的速度。提高处理交易的速度。

【技术实现步骤摘要】
r * privKey),n为G的阶;客户端将交易明文和签名{r,s}发送给节点;其中,节点对交易进行验签,包括:节点读取交易的明文数据,从区块链系统合约中找到客户端的公钥pubKey,使用同样的哈希算法对明文数据进行计算哈希值,得到哈希值h1;节点计算签名的模逆元s1:s1 = s^

1 (mod n);节点计算签名生成过程中的随机数对应的点R':R' = (h1 * s1) * G + (r * s1) * pubKey;节点计算R'的X轴值r' :r' = R'.x;节点对比r'是否等于签名中r,如果相等,则验证通过。
[0008]其中,节点的数量为十个以上,节点之间的网络采用局域网或者专线,节点之间采用委任权益证明机制达成节点共识。
[0009]其中,将包含交易的新区块添加到最长链上,并持久化到状态数据库,包括:设置允许分叉的阈值区块数量;当分叉链与节点的最长链的分叉点所在高度不超过阈值区块数量,分叉链被确认为正常分叉链,反之,则分叉链被丢弃。
[0010]其中,将包含交易的新区块添加到最长链上,并持久化到状态数据库,还包括:在出现临时分叉时回滚区块;在添加新区块或回滚区块时,通过依次执行或者回滚区块中包含的所有交易来更新状态数据库。
[0011]其中,节点采用多级缓存机制更新状态数据库,多级缓存机制包括:全局缓存、局部缓存以及LevelDB;缓存中存储的数据为状态数据,状态数据的类型包括:区块数据、账户数据、交易收据数据以及交易回滚数据等,更新状态数据库,包括:从局部缓存查找状态数据,如果未查找到,进入下一步;从全局缓存中查找状态数据,如果查找到,从全局缓存中将状态数据复制到局部缓存,否则,进入下一步;从LevelDB 查找状态数据,如果查找到,从LevelDB中将状态数据复制到局部缓存,否则,表示出现异常;查找到状态数据之后,通过执行交易对状态数据进行必要修改,然后同步相应状态数据到全局缓存内,最后将该状态数据持久化到LevelDB;如果交易执行失败,则放弃当前局部缓存,不会改变全局缓存的状态数据。
[0012]第二方面,本专利技术提供一种区块链交易处理系统,该系统包括多个客户端和多个节点;客户端用于生成一笔交易,并对交易进行私钥签名、序列化以及广播,其中,交易的数据结构包括如下多个属性:交易版本号、交易创建时的区块高度、交易发送方账户、交易接收方账户、转账金额、交易费用、交易备注、交易签名、以及交易哈希,当该交易发送方或者交易接收方的账户第一次在链上激活时,以交易所在的区块高度和交易在区块中的位置索引来标识一个账户,在交易进行序列化时,采用压缩的变长编码来表示一个账户;节点包括:防重放攻击检查模块,用于对交易进行防重放攻击检查;校验模块,用于在防重放攻击检查通过之后,对交易进行校验,校验包括验签;打包和广播模块,用于在通过校验之后,将交易打包进新区块,并将新区块进行广播;执行模块,用于节点达成共识之后,将包含交易的新区块添加到最长链上,并持久化到状态数据库。
[0013]其中,防重放攻击检查模块包括:交易属性设置单元,用于在交易的数据结构中还设置一个属性:攻击交易失效的区块高度,将交易创建时的区块高度记作x,将攻击交易失效的区块高度记作n,将交易被节点打包进区块时的区块高度记作X;第一交易有效判断单元,用于如果X在区间[x

n,x+n]范围之外,则判定交易无效,否则,进入下一步;第二交易有效判断单元,用于在内存中查找交易,如果能查找到交易,则判定交易无效,反之,则判定交易有效;其中,内存中维护着最新的n个区块包括的所有交易的键值对映射,并随着节点的
最长链的变化实时更新键值对映射,其中,以标识唯一的区块的区块哈希作为映射的键,以区块包含的所有交易哈希组成的无序集合作为映射的键值。
[0014]其中,执行模块包括:阈值区块数量设置单元,用于设置允许分叉的阈值区块数量;分叉链判断单元,用于当分叉链与节点的最长链的分叉点所在高度不超过阈值区块数量,分叉链被确认为正常分叉链,反之,则分叉链被丢弃;区块回滚单元,用于在出现临时分叉时回滚区块;状态数据库更新单元,用于在添加新区块或回滚区块时,通过依次执行或者回滚区块中包含的所有交易来更新状态数据库。
[0015]本专利技术的有益效果是:(1)采用高效的委任权益证明机制共识,选择合理的节点数量,优化节点之间网络,设置允许分叉的阈值,使得整个区块链网络快速达成共识。
[0016](2)高效防重放攻击机制,简化交易验证流程。
[0017](3)优化交易签名、验签算法,使得在保证安全性的同时,提高签名和验签的效率。
[0018](4)优化交易结构,压缩链上数据,不仅能够减少区块链网络数据的传输,也极大地减少了节点状态数据库存储的数据。
[0019](5)多级缓存机制,实现状态数据的高效读取与写入。
[0020]经试验验证,本专利技术的区块链交易处理方法能实现TPS达到4000+,相较于普通的基础链,大幅提高了交易的效率。
附图说明
[0021]图1是本专利技术区块链网络的一实施例的网络拓扑示意图;图2是本专利技术区块链交易处理方法的一实施例的流程示意图;图3是图2的步骤S12的一实施例的流程示意图;图4是图2的步骤S15的一实施例的流程示意图;图5是图4的步骤S154的一实施例的流程示意图;图6是本专利技术区块链交易处理系统的一实施例的结构示意图;图7是图6中节点12的防重放攻击检查模块121的一实施例的结构示意图;图8是图6中节点12的执行模块124的一实施例的结构示意图。
具体实施方式
[0022]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0023]为了更好地介绍本专利技术,下面对本专利技术的节点和客户端进行说明。请参阅图1,本专利技术的区块链网络由多个节点和多个客户端构成,该多个节点为分布式节点,每台节点为一台高性能计算机,节点之间可以相互通信。其中,该节点的数量为十个以上,该节点之间的网络采用局域网或者专线,这样,可以提升节点之间P2P网络同步数据,降低节点网络分区导致区块链分叉的概率。客户端可以选择与任一节点进行通信,客户端通过 rpc 接口访问节点,访问内容包括:获取信息或者广播交易。客户端可以是手机、计算机等电子终端设备。
[0024]实施例一
请参阅图2,图2是本专利技术区块链交易方法的一实施例的流程示意图。如图2所示,该方法包括如下步骤:S11:客户端生成一笔交易,并对该交易进行私钥签名、序列化以及广播;该交易的数据结构包括如下多个属性:交易版本号、交易创建时的区块高度、交易发送方账户、交易接收方账户、转账金额、交易费用、交易备注、交易签名、以及交易哈希。
[0025]在上述属性中,通常采用20字节来表示一个交易发送方的账户,或者交易接收方的账户。在本实施例中,采用一个独特的数据结构<height、Index>来表示一个账户,其中,height为4字节整数,表示区块高度;index为本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种区块链交易处理方法,其特征在于,包括:客户端生成一笔交易,并对所述交易进行私钥签名、序列化以及广播,其中,所述交易的数据结构包括如下多个属性:交易版本号、交易创建时的区块高度、交易发送方账户、交易接收方账户、转账金额、交易费用、交易备注、交易签名、以及交易哈希,当所述交易发送方或者交易接收方的账户第一次在链上激活时,以所述交易所在的区块高度和所述交易在区块中的位置索引来标识一个所述账户,在所述交易进行序列化时,采用压缩的变长编码进一步表示所述账户;节点对所述交易进行防重放攻击检查;在防重放攻击检查通过之后,所述节点对所述交易进行校验,所述校验包括验签;在通过校验之后,所述节点将所述交易打包进新区块,并将所述新区块进行广播;节点达成共识之后,将包含所述交易的新区块添加到最长链上,并持久化到状态数据库。2.根据权利要求1所述的方法,其特征在于,所述节点对所述交易进行防重放攻击检查,包括:在所述交易的数据结构中还设置一个属性:攻击交易失效的区块高度,将所述交易创建时的区块高度记作x,将攻击交易失效的区块高度记作n,将所述交易被所述节点打包进区块时的区块高度记作X;如果X在区间[x

n,x+n]范围之外,则判定所述交易无效,否则,进入下一步;在内存中查找所述交易,如果能查找到所述交易,则判定所述交易无效,反之,则判定所述交易有效;其中,所述内存中维护着最新的n个区块包括的所有交易的键值对映射,并随着节点的最长链的变化实时更新所述键值对映射,其中,以标识唯一的区块的区块哈希作为映射的键,以所述区块包含的所有交易哈希组成的无序集合作为映射的键值。3.根据权利要求1所述的方法,其特征在于,所述区块链采用椭圆曲线数字签名算法对所述交易进行签名和验签;其中,所述客户端对所述交易进行签名,包括:所述客户端随机生成一个私钥privKey,并计算公钥pubKey=privKey*G,G为基点;所述客户端使用哈希算法对所述交易的明文计算哈希值,得到哈希值为h;所述客户端生成一个随机数k,计算点R=k*G,取点R的x轴值:r=R.x;所述客户端计算签名:s = k^

1(mod n) * (h + r * privKey) ,n为G的阶;所述客户端将所述交易明文和签名{r,s}发送给节点;其中,所述节点对所述交易进行验签,包括:所述节点读取所述交易的明文数据,从区块链系统合约中找到所述客户端的公钥pubKey,使用同样的哈希算法对所述明文数据进行计算哈希值,得到哈希值h1;所述节点计算签名的模逆元s1:s1 = s^

1 (mod n);所述节点计算签名生成过程中的随机数对应的点R':R' = (h1 * s1) * G + (r * s1) * pubKey;所述节点计算R'的X轴值r' :r' = R'.x;所述节点对比r'是否等于签名中r,如果相等,则验证通过。4.根据权利要求1所述的方法,其特征在于,所述节点的数量为十个以上,所述节点之
间的网络采用局域网或者专线,所述节点之间采用委任权益证明机制达成节点共识。5.根据权利要求1至4任意一项所述的方法,其特征在于,所述将包含所述交易的新区块添加到最长链上,并持久化到状态数据库,包括:设置允许分叉的阈值区块数量;当分叉链与节点的最长链的分叉点所在高度不超过所述阈值区块数量,所述分叉链被确认为正常分叉链,反之,则所述分叉链被丢弃。6.根据权...

【专利技术属性】
技术研发人员:冯国东徐超
申请(专利权)人:四块科技深圳有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1