本发明涉及区块链技术领域,尤其涉及一种余额管理方法和系统、设备及存储介质。
背景技术
隐私钱包余额管理实现的功能主要是实现通过账户和utxo混合模型的区块链隐私交易过程中,采用一次性地址作为余额地址,在保护交易的发起方和交易的接收方隐私安全的前提下,对钱包内金额进行有效管理。
现有系统的方案有两种,分别是账户余额管理和utxo余额管理。账户余额管理是指用户账户余额通过区块链进行记录,通过统计在区块链上的账户余额变化,最后汇总出总的用户余额信息,直接采用账户余额方式功能比较单一,不太容易扩展;直接采用utxo进行余额管理时,由于utxo上的填写的是接收方的地址,存在一定的隐私泄露风险。
技术实现要素:
1.发明要解决的技术问题
为了克服上述技术问题,本发明提供了一种余额管理方法和系统、设备及存储介质。它可以提高账户余额管理方式的扩展性、灵活性问题,还可以增加用户隐私安全,减少了隐私泄露的风险。
2.技术方案
为解决上述问题,本发明提供的技术方案为:
一种余额管理方法,包括以下内容:
s101、钱包构建交易使用到的输入utxo被钱包列入冻结utxo容器中;
s102、如果交易被执行成功后,钱包在交易中的输入utxo从冻结utxo容器移动到已花费utxo容器中;钱包在交易中接收到的输出utxo被收录到可用utxo容器中;
s103、如果交易被执行失败或交易过期,钱包在交易中的输入utxo从冻结utxo容器移动到可用utxo容器中。
优选地,如果交易发生回退,钱包执行以下内容,不分先后顺序:
a、检查交易的输出utxo是否给本钱包的,如果是,则会从本钱包的可用utxo容器中移除该utxo;
b、检查当前已花费utxo容器,如果交易的输入utxo在钱包已花费utxo容器中存在,则从已花费utxo容器移动到冻结utxo容器中;
c、检查冻结utxo容器,如果交易的输入utxo在钱包冻结utxo容器中,则从冻结utxo容器移动到可用utxo容器中。
优选地,所述交易是指隐私交易,在隐私交易中,通过将接收方的隐私地址用公钥对生成一个一次性公钥p,保证了接收方不会被别人追踪,因为只有接收方才能生成一次性私钥x来花费这笔utxo。
优选地,步骤s102中,如果交易被执行成功后,钱包会根据一次性地址算法遍历交易中接收到的输出utxo,如果校验通过,则该输出utxo被收录到可用utxo容器中以待后续使用。
优选地,所述一次性地址算法为:
通过公式p=hs(ra)g+b计算出接收方的一次性公钥;
通过公式p’=hs(ar)g+b接收方计算出一次性公钥效验值;
如果p=p’,则认为交易的接收方是发送方期望的目标,校验通过;其中,
r为椭圆曲线公钥,r为第一随机数,g为椭圆曲线上的一个基点,a为接收方的第一公钥对(a,b)中的第一个公钥,b为接收方的第一公钥对(a,b)中的第二个公钥,a为所述第一个公钥a对应的第一私钥;b为所述第一个公钥b对应的第一私钥;hs()为一种哈希函数。
一种余额管理系统,根据以上任一项所述的一种余额管理方法,包交易创建模块和utxo移动模块,所述的交易创建模块,用于创建交易,所述的utxo移动模块用于输入utxo在冻结utxo容器和已花费utxo容器中转移,输出utxo在可用utxo容器中转移。
优选地,所述的交易创建模块还包括一次性公钥生成模块,用于生成椭圆曲线公钥r和一次性公钥p,其中,
r=rg;
p=hs(ra)g+b;
其中,r为椭圆曲线公钥,r为第一随机数r,g为椭圆曲线上的一个基点,a为第一公钥对(a,b)中的第一个公钥,b为第一公钥对(a,b)中的第二个公钥,hs()为一种哈希函数。
优选地,还包括交易验证模块,用于计算出一次性公钥效验值p′:
p'=hs(ar)g+b;
其中,a为所述第一个公钥a对应的第一私钥;判断验证一次性公钥效验值p′与隐私交易中的一次性公钥p是否相同:是,则验证通过;便于utxo移动模块调节utxo的转移。
一种设备,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器互相连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行以上任一项所述方法。
一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,使所述处理器执行以上任一项所述方法。
3.有益效果
采用本发明提供的技术方案,与现有技术相比,具有如下有益效果:
本发明通过账户余额管理和utxo余额管理混合,在utxo的接收方地址改为一次性地址,这样实现以后即解决了账户余额管理方式的扩展性、灵活性问题又增加了用户隐私安全,减少了隐私泄露的风险。
附图说明
图1为实施例1的流程示意图;
图2为实施例2的流程示意图;
图3为实施例6的结构示意图;
图4为实施例7的结构示意图;
图5为实施例8的结构示意图;
图6为实施例9的结构示意图;
图7为实施例12提供的一种隐私交易方法的流程图;
图8为图7所示方法的一种优选实施方式中的s12和s13的示意图;
图9为图7所示方法的一种优选实施方式中的s14的示意图;
图10为实施例12提供的一种隐私交易系统的结构示意图;
图11为钱包在交易中的输入utxo转移方向示意图;
图12为节点上的客户端中的钱包和地址分布示意图。
具体实施方式
为进一步了解本发明的内容,结合附图及实施例对本发明作详细描述,以下实施例可能存在的合理的组合或替换方式,均是本发明的技术方案。如图12所示,现有技术中某一节点上可能包含多个钱包,一个钱包中可能会包含多个地址,需要说明的是实施例中所述的一种余额管理方法和一种余额管理系统,均是针对钱包中某一具体地址上的余额变化情况的管理。
实施例1
如图1所示,一种余额管理方法,包括以下步骤:
s101、钱包构建交易使用到的输入utxo被钱包列入冻结utxo容器中;
s102、如果交易被执行成功后,钱包在交易中的输入utxo从冻结utxo容器移动到已花费utxo容器中;钱包在交易中接收到的输出utxo被收录到可用utxo容器中;
s103、如果交易被执行失败或交易长时间未被执行导致交易过期,钱包在交易中的输入utxo从冻结utxo容器移动到可用utxo容器中,如图11所示。
图1中的交易没有执行成功的情况是指,交易被执行失败或交易长时间未被执行导致交易过期。
需要说明的是:1、隐私交易中,钱包仅对跟本钱包相关的utxo信息进行管理,非本钱包相关的不做任何处理;2、钱包记录了发给本钱包的交易和从本钱包花费的交易,以及相关的utxo变化记录。
实施例2
如图2所示,本实施例的一种余额管理方法,在实施例1的基础上进一步改进,步骤如下:
s101、钱包构建交易使用到的输入utxo被钱包列入冻结utxo容器中;
s102、如果交易被执行成功后,钱包在交易中的输入utxo从冻结utxo容器移动到已花费utxo容器中;钱包在交易中接收到的输出utxo被收录到可用utxo容器中;
s103、如果交易被执行失败或交易长时间未被执行导致交易过期,钱包在交易中的输入utxo从冻结utxo容器移动到可用utxo容器中;
s104、如果交易发生回退,钱包执行以下内容,不分先后顺序:
a、检查交易的输出utxo是否给本钱包的,如果是,则会从本钱包的可用utxo容器中移除该utxo。
b、检查当前已花费utxo容器,如果交易的输入utxo在钱包已花费utxo容器中存在,则从已花费utxo容器移动到冻结utxo容器中,如图11所示。
c、检查冻结utxo容器,如果交易的输入utxo在钱包冻结utxo容器中,则从冻结utxo容器移动到可用utxo容器中,如图11所示。
步骤s104中,考虑到区块链在运行过程中可能因为链分叉,导致区块需要回退,区块回退过程中会导致交易发生回退。对于发生交易会退时,会判断交易的输出utxo是否给本钱包的,或者判断交易的输入utxo是否在钱包已花费utxo容器、冻结utxo容器中存在,从而执行进一步的utxo的回退操作,如图2所示。
当区块链检测到链存在分叉时,会进行链调整选择分叉链上最合适的链作为主链。在处理过程中会先对当前的链进行回退,回退到分叉点以后,再从分叉点开始向新的主链方向同步区块,同步完成后再按照正常的流程进行区块执行、打包操作。
检查交易的输出,当前交易的输出utxo信息是否在本钱包的可用utxo、冻结utxo队列中存在;如果存在,则将该utxo信息从可用或冻结utxo队列中移除。
系统会有协程专门检测钱包内冻结utxo信息列表,如果检测到冻结utxo超期了,则会将其移动到可用utxo列表中。因为冻结utxo超期意味着对应的交易也超期了,在本节点内不会再被打包执行了。
用户隐私合约上的金额信息,随着区块发生回退,也就会自动回退到上一次正确的金额,不需要钱包做额外的处理;隐私余额信息是直接写在区块链上的,因此当区块发生回退时,用户隐私余额信息也会直接发生回退;当区块从分叉节点开始同步时,会同步更新隐私余额信息,最终会使用户的隐私余额信息更新到最新值。因此不需要额外处理。
钱包中地址d的余额变化(可用utxo容器中的utxo数量变化)来源于以下情况:
1、交易被执行成功以后,其他钱包中的地址,或本钱包的其他地址向本钱包地址d发起了隐私转账操作,钱包检查到这些交易信息,将交易的输出utxo放入钱包地址d的可用utxo容器中。
2、交易被执行失败或交易过期,钱包在交易中的输入utxo从冻结utxo容器移动到可用utxo容器中。
3、区块链中的区块发生回退时,交易回退,钱包会执行以下内容,不分顺序:
a、检查交易的输出utxo是否给本钱包的,如果是,则会从本钱包的可用utxo容器中移除该utxo;
b、检查当前已花费utxo容器,如果交易的输入utxo在钱包已花费utxo容器中存在,则从已花费utxo容器移动到冻结utxo容器中,这种情况用utxo容器中的utxo数量不发生变化;
c、检查冻结utxo容器,如果交易的输入utxo在钱包冻结utxo容器中,则从冻结utxo容器移动到可用utxo容器中。
实施例3
本实施例的一种余额管理方法,在实施例1、2的基础上进一步改进,实施例1、2中的交易是指隐私交易,在隐私交易中通过将接收方的隐私地址用公钥对生成一个一次性公钥p,保证了接收方不会被别人追踪,因为只有接收方才能生成一次性私钥x来花费这笔utxo,确保了用户的隐私安全。
实施例4
本实施例的一种余额管理方法,在实施例1、2、3的基础上进一步改进,步骤s102中,如果交易被执行成功后,钱包会根据一次性公钥算法遍历交易中接收到的输出utxo,如果校验通过,则该输出utxo被收录到可用utxo容器中以待后续使用。
实施例5
本实施例的一种余额管理方法,在实施例1、2、3、4的基础上进一步改进,所述一次性公钥算法为:
椭圆曲线公钥r:r=rg;
通过公式p=hs(ra)g+b计算出接收方的一次性公钥p;
通过公式p’=hs(ar)g+b接收方计算出一次性公钥效验值p’;
如果p=p’,则认为交易的接收方是发送方期望的目标,校验通过;其中,
r为椭圆曲线公钥,r为第一随机数,g为椭圆曲线上的一个基点,a为接收方的第一公钥对(a,b)中的第一个公钥,b为接收方的第一公钥对(a,b)中的第二个公钥,a为所述第一个公钥a对应的第一私钥;b为所述第一个公钥b对应的第一私钥;hs()为一种哈希函数。通过这种算法来混淆接收方的公钥,使得接收方不能够被追踪到,保护用户隐私安全。
实施例6
如图3所示,一种余额管理系统,根据实施例1-5任一项所述的一种余额管理方法,包交易创建模块和utxo移动模块,所述的交易创建模块,用于创建交易,所述的utxo移动模块用于输入utxo在冻结utxo容器和已花费utxo容器中转移,输出utxo在可用utxo容器中转移。
实施例7
如图4所示,本实施例的一种余额管理系统,在实施例6的基础上进一步改进,所述的交易创建模块还包括一次性公钥生成模块,用于生成椭圆曲线公钥r和一次性公钥p,其中,
r=rg;
p=hs(ra)g+b;
其中,r为椭圆曲线公钥,r为第一随机数r,g为椭圆曲线上的一个基点,a为第一公钥对(a,b)中的第一个公钥,b为第一公钥对(a,b)中的第二个公钥,hs()为一种哈希函数。
实施例8
如图5所示,本实施例的一种余额管理系统,在实施例6、7的基础上进一步改进,还包括交易验证模块,用于计算出一次性公钥效验值p′:
p'=hs(ar)g+b;
其中,a为所述第一个公钥a对应的第一私钥;判断验证一次性公钥效验值p′与隐私交易中的一次性公钥p是否相同:是,则验证通过;便于utxo移动模块调节utxo的转移。
实施例9
如图6所示,一种设备,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器互相连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-5任一项所述方法。
实施例10
一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,使所述处理器执行如权利要求1-5任一项所述方法。
实施例11
utxo:未花费交易输出;可用utxo:经过检查确认该utxo属于当前钱包,该钱包拥有花费该utxo的权利的utxo组合;冻结utxo容器:在钱包系统构建完交易后,通过一个数据结构将该交易中使用到的utxo进行记录,以表示这些utxo已经被冻结,无法在该钱包的接下来交易操作中被使用。冻结utxo容器根据具体的场景,可以分为冻结utxo队列和回退冻结utxo队列。已花费utxo容器:在钱包系统中如果检测到一笔交易被确认,则会将该交易中作为交易输入部分的utxo通过一个数据结构保存起来,表示这部分utxo已经被花费,不能再被接下来的交易所使用。
本实施例中对用户可用utxo管理的方法如下:
钱包系统在检测到交易被确认,并且该交易执行成功以后,会根据实施例5或8中所述的一次性公钥算法遍历交易中的输出utxo信息,如果效验通过,则认为该utxo就是属于本钱包的,钱包系统可以将其收录到系统中可用utxo列表(列表是容器的实现方式之一)中以待后续使用。
本实施例中对交易冻结utxo管理的方法如下:
钱包系统在构建完交易以后,该交易使用到的输入utxo都将被钱包列入冻结utxo列表中。
如果该交易被签名发送到区块链后,被区块链执行成功后,会将这些utxo信息从冻结utxo容器移动到已花费utxo容器中。
如果交易被区块链执行失败后,会将这些utxo信息从冻结utxo容器移动到可用utxo容器中。
如果交易长时间未被执行导致交易过期,则也会将这些utxo信息从冻结utxo容器移动到可用utxo容器中;
本实施例中对交易回退utxo管理的方法如下:
区块链在运行过程中可能因为链分叉,导致区块需要回退,区块回退过程中会导致交易发生回退。在交易发生回退时,钱包会检查该交易的输出utxo是否给本钱包的,如果是则会从本钱包的可用utxo容器中移除该utxo信息。同时钱包还会检查当前已花费utxo信息,如果该交易的输入utxo信息在钱包已花费utxo中存在,则将该utxo信息移动到冻结utxo容器中;检查冻结utxo容器,如果交易的输入utxo在钱包冻结utxo容器中,则从冻结utxo容器移动到可用utxo容器中。
实施例12
结合附图7、8、9、10对实施例3中的隐私交易方法作进一步的详细说明。图7为一种隐私交易方法的流程图。
如图7所示,在本实施例中,本发明提供一种隐私交易方法,包括:
s11、向隐私合约进行转账;
s12、获取接收方的第一公钥对(a,b),生成第一随机数r,根据第一随机数r生成椭圆曲线公钥r,根据第一随机数r、第一公钥对(a,b)生成一次性公钥p;
s13、将一次性公钥p作为隐私交易的输出目的公钥、将椭圆曲线公钥r作为隐私交易的输入信息,根据隐私合约的余额打包隐私交易;
s14、将隐私交易发送至区块链网络进行共识并执行,以供接收方的用户端遍历所有的隐私交易通过对应于第一公钥对(a,b)的第一私钥对验证各隐私交易,并在验证通过后根据第一私钥对和椭圆曲线公钥r生成一次性私钥x;其中,一次性私钥x用于花费转账金额。
具体地,假如发送者甲想向接收者乙发送一笔额度为n的转账,在步骤s11中,发送者首先从自己的公开账户中向隐私合约中转入金额为n的转账,此时在隐私合约中存在额度为n的资产,在步骤s12中,发送者获取接收方的第一公钥对(a,b),发送方在本地生成第一随机数r,并根据第一公钥对(a,b)和第一随机数r按照一定的算法生成一次性公钥p。
步骤s13和14中,发送者将一次性公钥p作为隐私交易的输出目的公钥、将椭圆曲线公钥r作为隐私交易的输出信息,发送者根据隐私合约中的余额n打包成隐私交易,发送该交易后一次性目标地址中生成与n等额的utxo,且隐私合约中的转账金额n消失。发送至区块链网络进行共识并执行,接收方遍历收到的输出交易,用一定的算法对一次性公钥p进行验证,验证通过后,用预定的算法生成一次性私钥x来花费收到的utxo。
在更多实施方式中,步骤s12中所说的获取接收方的第一公钥对(a,b)的方式可以是发送方将接收方的隐私地址进行拆分后生成第一公钥对(a,b),也可以是接收方主动给发送方第一公钥对(a,b),还可以是其他生成第一公钥对(a,b)的方式,并不受其中某一种方式的限制。
图8为图7所示方法的一种优选实施方式中的s12和s13的示意图。具体地,椭圆曲线公钥r的生成方式为:
r=rg;
一次性公钥p的生成方式为:
p=hs(ra)g+b;
其中,r为椭圆曲线公钥,r为第一随机数,g为椭圆曲线上的一个基点,a为第一公钥对(a,b)中的第一个公钥,b为第一公钥对(a,b)中的第二个公钥,hs()为一种哈希函数。
图9为图7所示方法的一种优选实施方式中的s14的示意图。
具体地,用户接收到隐私交易后,遍历所有的输出交易,并通过第一私钥对(a,b)和椭圆曲线公钥r,计算p'=hs(ar)g+b,若p'与一次性公钥p相同(因为ar=arg=ra,p'=hs(ar)g+b=hs(aa)g+b=p),则验证通过,说明该笔utxo属于该地址,并通过计算出一次性私钥x=hs(ar)+b来花费该笔utxo。
图10为本实施例提供的一种隐私交易系统的结构示意图。如图10所示,一种交易隐私系统04,包括:
转账单元041,配置用于向隐私合约进行转账;一次性公钥p生成单元042,配置用于获取接收方的第一公钥对(a,b),生成第一随机数r,根据第一随机数r生成椭圆曲线公钥r,根据第一随机数r、第一公钥对(a,b)生成一次性公钥p;
交易打包单元043,配置用于将一次性公钥p作为隐私交易的输出目的公钥、将椭圆曲线公钥r作为隐私交易的输出信息,根据隐私合约的余额打包隐私交易;
交易发送单元044,配置用于将隐私交易发送至区块链网络进行共识,以供接收方的用户端遍历所有的隐私交易后通过对应于第一公钥对(a,b)的第一私钥对验证各隐私交易,并在验证通过后根据第一私钥对(a,b)和椭圆曲线公钥r生成一次性私钥x;其中,一次性私钥x用于花费转账金额。
进一步优选地,一次性公钥p生成单元042包括:椭圆曲线公钥r生成子单元0421,配置用于计算r=rg;一次性公钥p的生成方式为:
p=hs(ra)g+b;
其中,r为椭圆曲线公钥,r为第一随机数r,g为椭圆曲线上的一个基点,a为第一公钥对(a,b)中的第一个公钥,b为第一公钥对(a,b)中的第二个公钥,hs()为一种哈希函数。
进一步优选地,交易发送单元044包括:验证子单元0441,配置用于计算出验证公钥p′:
p'=hs(ar)g+b;
其中,a为所述第一个公钥a对应的第一私钥;
判断验证公钥p′与隐私交易中的一次性公钥p是否相同。
以上示意性的对本发明及其实施方式进行了描述,该描述没有限制性,附图中所示的也只是本发明的实施方式之一,实际的结构并不局限于此。所以,如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。