首页 / 专利库 / 资料储存系统 / 挖矿 / 基于存储证明的区块链方法及系统

基于存储证明的链方法及系统

阅读:644发布:2020-05-08

专利汇可以提供基于存储证明的链方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种基于存储证明的 区 块 链 方法及系统,包括:存储数据生成步骤:每个新加入网络的新矿工利用生成需要存储的数据;空间 声明 交易广播步骤:新加入网络的新矿工根据存储的数据生成梅克尔承诺,新矿工再生成并广播一笔空间声明交易,向全网宣布自己投入 硬盘 空间的大小以及对所存储的数据的梅克尔承诺。本发明提出了一种基于存储证明的区块链方案,有效地解决了基于PoW及PoS等已有区块链方案存在的问题,通过巧妙的设计合理的区块打分函数,使得矿工成功挖出一个合法区块的概率正比于其投入的硬盘空间大小,从而保证了矿工竞争的公平性。,下面是基于存储证明的链方法及系统专利的具体信息内容。

1.一种基于存储证明的链方法,其特征在于,包括:
存储数据生成步骤:每个新加入网络的新矿工利用生成需要存储的数据;
空间声明交易广播步骤:新加入网络的新矿工根据存储的数据生成梅克尔承诺,新矿工再生成并广播一笔空间声明交易,向全网宣布自己投入硬盘空间的大小以及对所存储的数据的梅克尔承诺;
主链确定步骤:空间声明交易被其他矿工收到后,新加入网络的新矿工从网络中收到一系列区块,验证一系列区块的合法性后保留合法的区块,计算保留的合法的区块中每个区块的分数,进而计算每条链的分数,链分数最高的链被确定为主链,并在主链上继续挖矿
交易接收与验证步骤:新矿工持续接收网络中的交易,并对交易进行合法性验证,将验证通过的交易选入交易池,等待被打包进区块;
区块广播步骤:新矿工从交易池中选择一些交易,以它们为叶节点得到梅克尔树根tx_root,新矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号作为挑战节点,旷工将pre_hash、空间证明space_proof、交易的梅克尔树根tx_root和所有交易打包成一个新区块并广播;
区块验证步骤:除新旷工以外的其他矿工收到该新区块之后,验证新区块的合法性,验证通过后,其他矿工更新本地的区块链,并在更新后的区块链的主链基础上继续挖矿。
2.根据权利要求1所述的基于存储证明的区块链方法,其特征在于,所述存储数据生成步骤:
利用pebbling graph图来生成需要存储的数据;
pebbling graph图中每个节点都有一个标记值L,pebbling graph图中所有节点的标记值即为矿工需要存储的数据,标记值的计算方法如下:
设pebbling graph图共有M个节点,序号分别为1至M,则每个节点的标记值为:
H(pk,该节点序号,该节点所有父节点的标记值)    (1)
其中,H为一个密码学哈希函数,pk为矿工的公钥,节点i的父节点意味着拥有一条指向节点i的有向边的节点,i为节点的序号,逗号表示字符串联
3.根据权利要求2所述的基于存储证明的区块链方法,其特征在于,所述空间声明交易广播步骤:
所述梅克尔承诺是以所有数据为叶节点所形成的梅克尔树的树根,梅克尔树是一种用哈希函数建立的二叉树结构,最底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,最终得到一个梅克尔树根;
根据哈希函数的抗碰撞性,只要梅克尔树根确定,那么所有的数据块都不可被篡改;
所述空间声明交易的交易格式为(M,pk,γ)。
4.根据权利要求3所述的基于存储证明的区块链方法,其特征在于,所述主链确定步骤:
所述验证一系列区块的合法性包括:
验证梅克尔树根tx_root字段是否正确计算;
验证空间证明space_proof字段是否合法,包括:挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1);验证挑战节点的梅克尔证明是否合法;
对交易进行合法性验证,包括:验证交易的签名是否合法;验证转账交易是否被双重花费;
所述挑战节点指:矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号;
所述空间证明包括:挑战节点及其所有父节点的标记值,挑战节点及其所有父节点的梅克尔证明;
所述计算保留的合法的区块中每个区块的分数包括:
先引入一个随机种子Δ=(space_proof,pk,pre_hash),其中space_proof即为该区块的空间证明,pk为该矿工公钥,pre_hash为前一个区块的哈希值,进而每个区块分数S的计算公式如下:
其中,T为哈希函数H的输出长度;M为该产生该区块的矿工声明的硬盘空间大小;
进而计算每条链的分数,即将每条链上的区块分数叠加获得链的分数,链分数最高的链被确定为主链。
5.根据权利要求1所述的基于存储证明的区块链方法,其特征在于,所述交易接收与验证步骤:
所述交易包括:转账交易和空间声明交易;
对交易进行合法性验证,验证内容如下:
交易的签名是否合法;
转账交易是否被双重花费。
6.一种基于存储证明的区块链系统,其特征在于,包括:
存储数据生成模块:每个新加入网络的新矿工利用生成需要存储的数据;
空间声明交易广播模块:新加入网络的新矿工根据存储的数据生成梅克尔承诺,新矿工再生成并广播一笔空间声明交易,向全网宣布自己投入硬盘空间的大小以及对所存储的数据的梅克尔承诺;
主链确定模块:空间声明交易被其他矿工收到后,新加入网络的新矿工从网络中收到一系列区块,验证一系列区块的合法性后保留合法的区块,计算保留的合法的区块中每个区块的分数,进而计算每条链的分数,链分数最高的链被确定为主链,并在主链上继续挖矿;
交易接收与验证模块:新矿工持续接收网络中的交易,并对交易进行合法性验证,将验证通过的交易选入交易池,等待被打包进区块;
区块广播模块:新矿工从交易池中选择一些交易,以它们为叶节点得到梅克尔树根tx_root,新矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号作为挑战节点,旷工将pre_hash、空间证明space_proof、交易的梅克尔树根tx_root和所有交易打包成一个新区块并广播;
区块验证模块:除新旷工以外的其他矿工收到该新区块之后,验证新区块的合法性,验证通过后,其他矿工更新本地的区块链,并在更新后的区块链的主链基础上继续挖矿。
7.根据权利要求6所述的基于存储证明的区块链系统,其特征在于,所述存储数据生成模块:
利用pebbling graph图来生成需要存储的数据;
pebbling graph图中每个节点都有一个标记值L,pebbling graph图中所有节点的标记值即为矿工需要存储的数据,标记值的计算方法如下:
设pebbling graph图共有M个节点,序号分别为1至M,则每个节点的标记值为:
H(pk,该节点序号,该节点所有父节点的标记值)(1)
其中,H为一个密码学哈希函数,pk为矿工的公钥,节点i的父节点意味着拥有一条指向节点i的有向边的节点,i为节点的序号,逗号表示字符串联。
8.根据权利要求7所述的基于存储证明的区块链系统,其特征在于,所述空间声明交易广播模块:
所述梅克尔承诺是以所有数据为叶节点所形成的梅克尔树的树根,梅克尔树是一种用哈希函数建立的二叉树结构,最底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,最终得到一个梅克尔树根;
根据哈希函数的抗碰撞性,只要梅克尔树根确定,那么所有的数据块都不可被篡改;
所述空间声明交易的交易格式为(M,pk,γ)。
9.根据权利要求8所述的基于存储证明的区块链系统,其特征在于,所述主链确定模块:
所述验证一系列区块的合法性包括:
验证梅克尔树根tx_root字段是否正确计算;
验证空间证明space_proof字段是否合法,包括:挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1);验证挑战节点的梅克尔证明是否合法;
对交易进行合法性验证,包括:验证交易的签名是否合法;验证转账交易是否被双重花费;
所述挑战节点指:矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号;
所述空间证明包括:挑战节点及其所有父节点的标记值,挑战节点及其所有父节点的梅克尔证明;
所述计算保留的合法的区块中每个区块的分数包括:
先引入一个随机种子Δ=(space_proof,pk,pre_hash),其中space_proof即为该区块的空间证明,pk为该矿工公钥,pre_hash为前一个区块的哈希值,进而每个区块分数S的计算公式如下:
其中,T为哈希函数H的输出长度;M为该产生该区块的矿工声明的硬盘空间大小;
进而计算每条链的分数,即将每条链上的区块分数叠加获得链的分数,链分数最高的链被确定为主链。
10.根据权利要求6所述的基于存储证明的区块链系统,其特征在于,所述交易接收与验证模块:
所述交易包括:转账交易和空间声明交易;
对交易进行合法性验证,验证内容如下:
交易的签名是否合法;
转账交易是否被双重花费。

说明书全文

基于存储证明的链方法及系统

技术领域

[0001] 本发明涉及区块链技术领域,具体地,涉及一种基于存储证明的区块链方法及系统。

背景技术

[0002] 区块链技术是一种去中心化的链式账本技术,它是以密码学技术为基础,通过分布式共识机制,达到完整、不可篡改地实现价值转移的前沿技术,是分布式数据存储、点对点传输、共识机制、密码技术、智能合约、经济博弈等技术在互联网时代的融合创新技术。从央行对区块链技术的关注,到工信部的白皮书,到正式写入国家信息化规划,政府正在愈发正视和肯定区块链的价值。区块链技术有望在金融、经济、科技、社会和生活等众多领域激发颠覆式创新,带来前所未有的技术革新和产业变革。
[0003] 抽象而言,区块链是一种由密码学哈希函数串联起来的链式数据结构,每一个区块都包含上一个区块的哈希值,根据密码学哈希函数的抗碰撞性,篡改区块链的任意数据都将导致后面区块的哈希值不能匹配,从而保证了区块链数据的不可篡改。区块链作为一种分布式账本,每个区块都包含多笔交易,每产生一个新区块都代表着对账本的一次更新。并且该账本不能修改和删除,只能增加。在区块链网络中,普通用户发起交易并将其广播至区块链网络中,矿工收集这些交易并将其打包成区块。
[0004] 目前大部分的区块链方案(如比特币)都是基于工作量证明(PoW,Proof  of Work),即矿工需要投入一定的算才有机会获得区块奖励。具体实现方法是:矿工不断改变区块里的一个nounce字段使得整个区块的哈希值小于某个目标值,只有这样的区块才被认为合法,矿工才能获得区块奖励。由于全网算力会一直变化,为了保证区块产生的时间间隔较为稳定,目标值也会进行动态调整。根据密码学哈希函数的抗碰撞和抗原像攻击的性质,矿工只能通过穷举nounce值来使哈希值小于目标值。由此可见,基于工作量证明的区块链方案需要消耗巨大算力,浪费大量能源。此外,基于工作量证明的区块链方案会带来算力集中化的问题,网络条件及硬件条件更好的矿池拥有明显的竞争优势,普通用户难以从挖矿中获得收益,这极大的打击了普通用户参与的积极性。此外,矿池的算力聚集还会带来一系列账本安全性问题,这极大地违背了区块链去中心化的初衷。
[0005] 基于工作量证明的区块链方案的一系列问题促使一些替代方案的相继提出。权益证明(PoS,Proof of Stake)就是其中一种替代方案,在基于权益证明的区块链方案里,矿工挖到下一个区块的概率正比于他当前拥有的代币(Stake)数量,而不是算力,因此矿工无需进行大量的计算,从而有效地解决了能源浪费的问题。然而现有的基于权益证明的区块链方案都比较复杂,比如Algorand需要一部分代币持有者运行某种复杂的拜占庭共识协议。此外,在基于权益证明的区块链同样存在类似于算力聚集的问题,由于矿工获得的区块奖励与其当前代币数量成正比,随着区块链的发展,大部分代币会集中到少数人手中,由此带来的安全性问题会极大地限制区块链的发展。
[0006] 本专利提出的基于存储证明(PoC,Proof of Capacity)的区块链方案很好的解决了PoW和PoS的问题。在本方案中,矿工需要投入硬盘空间来存储一些数据从而参与挖矿,矿工挖到下一个区块的概率正比于他投入的硬盘空间大小。基于存储证明的区块链方案在显著降低能源消耗的同时,还充分利用了个人电脑里的闲置硬盘空间,这极大的激励了普通用户参与挖矿的积极性,从而保证了区块链系统的去中心化,进一步也保障了区块链系统的安全。

发明内容

[0007] 针对现有技术中的缺陷,本发明的目的是提供一种基于存储证明的区块链方法及系统。
[0008] 根据本发明提供的一种基于存储证明的区块链方法,包括:
[0009] 存储数据生成步骤:每个新加入网络的新矿工利用生成需要存储的数据;
[0010] 空间声明交易广播步骤:新加入网络的新矿工根据存储的数据生成梅克尔承诺,新矿工再生成并广播一笔空间声明交易,向全网宣布自己投入硬盘空间的大小以及对所存储的数据的梅克尔承诺;
[0011] 主链确定步骤:空间声明交易被其他矿工收到后,新加入网络的新矿工从网络中收到一系列区块,验证一系列区块的合法性后保留合法的区块,计算保留的合法的区块中每个区块的分数,进而计算每条链的分数,链分数最高的链被确定为主链,并在主链上继续挖矿;
[0012] 交易接收与验证步骤:新矿工持续接收网络中的交易,并对交易进行合法性验证,将验证通过的交易选入交易池,等待被打包进区块;
[0013] 区块广播步骤:新矿工从交易池中选择一些交易,以它们为叶节点得到梅克尔树根tx_root,新矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号作为挑战节点,旷工将pre_hash、空间证明 space_proof、交易的梅克尔树根tx_root和所有交易打包成一个新区块并广播;
[0014] 区块验证步骤:除新旷工以外的其他矿工收到该新区块之后,验证新区块的合法性,验证通过后,其他矿工更新本地的区块链,并在更新后的区块链的主链基础上继续挖矿。
[0015] 优选地,所述存储数据生成步骤:
[0016] 利用pebbling graph图来生成需要存储的数据;
[0017] pebbling graph图中每个节点都有一个标记值L,pebbling graph图中所有节点的标记值即为矿工需要存储的数据,标记值的计算方法如下:
[0018] 设pebbling graph图共有M个节点,序号分别为1至M,则每个节点的标记值为:
[0019] H(pk,该节点序号,该节点所有父节点的标记值)(1)
[0020] 其中,H为一个密码学哈希函数,pk为矿工的公钥,节点i的父节点意味着拥有一条指向节点i的有向边的节点,i为节点的序号,逗号表示字符串联。
[0021] 优选地,所述空间声明交易广播步骤:
[0022] 所述梅克尔承诺是以所有数据为叶节点所形成的梅克尔树的树根,梅克尔树是一种用哈希函数建立的二叉树结构,最底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,最终得到一个梅克尔树根;
[0023] 根据哈希函数的抗碰撞性,只要梅克尔树根确定,那么所有的数据块都不可被篡改;
[0024] 所述空间声明交易的交易格式为(M,pk,γ)。
[0025] 优选地,所述主链确定步骤:
[0026] 所述验证一系列区块的合法性包括:
[0027] 验证梅克尔树根tx_root字段是否正确计算;
[0028] 验证空间证明space_proof字段是否合法,包括:挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1);验证挑战节点的梅克尔证明是否合法;
[0029] 对交易进行合法性验证,包括:验证交易的签名是否合法;验证转账交易是否被双重花费;
[0030] 所述挑战节点指:矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号;
[0031] 所述空间证明包括:挑战节点及其所有父节点的标记值,挑战节点及其所有父节点的梅克尔证明;
[0032] 所述计算保留的合法的区块中每个区块的分数包括:
[0033] 先引入一个随机种子Δ=(space_proof,pk,pre_hash),其中space_proof即为该区块的空间证明,pk为该矿工公钥,pre_hash为前一个区块的哈希值,进而每个区块分数S的计算公式如下:
[0034]
[0035] 其中,T为哈希函数H的输出长度;M为该产生该区块的矿工声明的硬盘空间大小;
[0036] 进而计算每条链的分数,即将每条链上的区块分数叠加获得链的分数,链分数最高的链被确定为主链。
[0037] 优选地,所述交易接收与验证步骤:
[0038] 所述交易包括:转账交易和空间声明交易;
[0039] 对交易进行合法性验证,验证内容如下:
[0040] 交易的签名是否合法;
[0041] 转账交易是否被双重花费。
[0042] 根据本发明提供的一种基于存储证明的区块链系统,包括:
[0043] 存储数据生成模块:每个新加入网络的新矿工利用生成需要存储的数据;
[0044] 空间声明交易广播模块:新加入网络的新矿工根据存储的数据生成梅克尔承诺,新矿工再生成并广播一笔空间声明交易,向全网宣布自己投入硬盘空间的大小以及对所存储的数据的梅克尔承诺;
[0045] 主链确定模块:空间声明交易被其他矿工收到后,新加入网络的新矿工从网络中收到一系列区块,验证一系列区块的合法性后保留合法的区块,计算保留的合法的区块中每个区块的分数,进而计算每条链的分数,链分数最高的链被确定为主链,并在主链上继续挖矿;
[0046] 交易接收与验证模块:新矿工持续接收网络中的交易,并对交易进行合法性验证,将验证通过的交易选入交易池,等待被打包进区块;
[0047] 区块广播模块:新矿工从交易池中选择一些交易,以它们为叶节点得到梅克尔树根tx_root,新矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号作为挑战节点,旷工将pre_hash、空间证明 space_proof、交易的梅克尔树根tx_root和所有交易打包成一个新区块并广播;
[0048] 区块验证模块:除新旷工以外的其他矿工收到该新区块之后,验证新区块的合法性,验证通过后,其他矿工更新本地的区块链,并在更新后的区块链的主链基础上继续挖矿。
[0049] 优选地,所述存储数据生成模块:
[0050] 利用pebbling graph图来生成需要存储的数据;
[0051] pebbling graph图中每个节点都有一个标记值L,pebbling graph图中所有节点的标记值即为矿工需要存储的数据,标记值的计算方法如下:
[0052] 设pebbling graph图共有M个节点,序号分别为1至M,则每个节点的标记值为:
[0053] H(pk,该节点序号,该节点所有父节点的标记值)(1)
[0054] 其中,H为一个密码学哈希函数,pk为矿工的公钥,节点i的父节点意味着拥有一条指向节点i的有向边的节点,i为节点的序号,逗号表示字符串联。
[0055] 优选地,所述空间声明交易广播模块:
[0056] 所述梅克尔承诺是以所有数据为叶节点所形成的梅克尔树的树根,梅克尔树是一种用哈希函数建立的二叉树结构,最底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,最终得到一个梅克尔树根;
[0057] 根据哈希函数的抗碰撞性,只要梅克尔树根确定,那么所有的数据块都不可被篡改;
[0058] 所述空间声明交易的交易格式为(M,pk,γ)。
[0059] 优选地,所述主链确定模块:
[0060] 所述验证一系列区块的合法性包括:
[0061] 验证梅克尔树根tx_root字段是否正确计算;
[0062] 验证空间证明space_proof字段是否合法,包括:挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1);验证挑战节点的梅克尔证明是否合法;
[0063] 对交易进行合法性验证,包括:验证交易的签名是否合法;验证转账交易是否被双重花费;
[0064] 所述挑战节点指:矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号;
[0065] 所述空间证明包括:挑战节点及其所有父节点的标记值,挑战节点及其所有父节点的梅克尔证明;
[0066] 所述计算保留的合法的区块中每个区块的分数包括:
[0067] 先引入一个随机种子Δ=(space_proof,pk,pre_hash),其中space_proof即为该区块的空间证明,pk为该矿工公钥,pre_hash为前一个区块的哈希值,进而每个区块分数S的计算公式如下:
[0068]
[0069] 其中,T为哈希函数H的输出长度;M为该产生该区块的矿工声明的硬盘空间大小;
[0070] 进而计算每条链的分数,即将每条链上的区块分数叠加获得链的分数,链分数最高的链被确定为主链。
[0071] 优选地,所述交易接收与验证模块:
[0072] 所述交易包括:转账交易和空间声明交易;
[0073] 对交易进行合法性验证,验证内容如下:
[0074] 交易的签名是否合法;
[0075] 转账交易是否被双重花费。
[0076] 与现有技术相比,本发明具有如下的有益效果:
[0077] 1、本发明提出了一种基于存储证明的区块链方案,有效地解决了基于PoW及PoS 等已有区块链方案存在的问题。
[0078] 2、本发明在减少电能消耗的同时,很好的激励了普通用户充分利用闲置硬盘资源加入挖矿。
[0079] 3、本发明通过巧妙的设计合理的区块打分函数,使得矿工成功挖出一个合法区块的概率正比于其投入的硬盘空间大小,从而保证了矿工竞争的公平性。
[0080] 4、本发明还设计了一种加权区块分数计算函数,来计算每一条链的分数从而快速决策出主链,进而使区块链能快速的达到稳定状态,极大的减小了链产生分叉的概率。附图说明
[0081] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0082] 图1为本发明提供的节点结构示意图。
[0083] 图2为本发明提供的叶子节点标记值示意图。
[0084] 图3为本发明提供的区块分数示意图。
[0085] 图4为本发明提供的区块权重示意图。
[0086] 图5为本发明提供的梅克尔树根示意图。

具体实施方式

[0087] 下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
[0088] 根据本发明提供的一种基于存储证明的区块链方法,包括:
[0089] 存储数据生成步骤:每个新加入网络的新矿工利用生成需要存储的数据;
[0090] 空间声明交易广播步骤:新加入网络的新矿工根据存储的数据生成梅克尔承诺,新矿工再生成并广播一笔空间声明交易,向全网宣布自己投入硬盘空间的大小以及对所存储的数据的梅克尔承诺;
[0091] 主链确定步骤:空间声明交易被其他矿工收到后,新加入网络的新矿工从网络中收到一系列区块,验证一系列区块的合法性后保留合法的区块,计算保留的合法的区块中每个区块的分数,进而计算每条链的分数,链分数最高的链被确定为主链,并在主链上继续挖矿;
[0092] 交易接收与验证步骤:新矿工持续接收网络中的交易,并对交易进行合法性验证,将验证通过的交易选入交易池,等待被打包进区块;
[0093] 区块广播步骤:新矿工从交易池中选择一些交易,以它们为叶节点得到梅克尔树根tx_root,新矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号作为挑战节点,旷工将pre_hash、空间证明 space_proof、交易的梅克尔树根tx_root和所有交易打包成一个新区块并广播;
[0094] 区块验证步骤:除新旷工以外的其他矿工收到该新区块之后,验证新区块的合法性,验证通过后,其他矿工更新本地的区块链,并在更新后的区块链的主链基础上继续挖矿。
[0095] 具体地,所述存储数据生成步骤:
[0096] 利用pebbling graph图来生成需要存储的数据;
[0097] pebbling graph图中每个节点都有一个标记值L,pebbling graph图中所有节点的标记值即为矿工需要存储的数据,标记值的计算方法如下:
[0098] 设pebbling graph图共有M个节点,序号分别为1至M,则每个节点的标记值为:
[0099] H(pk,该节点序号,该节点所有父节点的标记值)(1)
[0100] 其中,H为一个密码学哈希函数,pk为矿工的公钥,节点i的父节点意味着拥有一条指向节点i的有向边的节点,i为节点的序号,逗号表示字符串联。
[0101] 具体地,所述空间声明交易广播步骤:
[0102] 所述梅克尔承诺是以所有数据为叶节点所形成的梅克尔树的树根,梅克尔树是一种用哈希函数建立的二叉树结构,最底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,最终得到一个梅克尔树根;
[0103] 根据哈希函数的抗碰撞性,只要梅克尔树根确定,那么所有的数据块都不可被篡改;
[0104] 所述空间声明交易的交易格式为(M,pk,γ)。
[0105] 具体地,所述主链确定步骤:
[0106] 所述验证一系列区块的合法性包括:
[0107] 验证梅克尔树根tx_root字段是否正确计算;
[0108] 验证空间证明space_proof字段是否合法,包括:挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1);验证挑战节点的梅克尔证明是否合法;
[0109] 对交易进行合法性验证,包括:验证交易的签名是否合法;验证转账交易是否被双重花费;
[0110] 所述挑战节点指:矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号;
[0111] 所述空间证明包括:挑战节点及其所有父节点的标记值,挑战节点及其所有父节点的梅克尔证明;
[0112] 所述计算保留的合法的区块中每个区块的分数包括:
[0113] 先引入一个随机种子Δ=(space_proof,pk,pre_hash),其中space_proof即为该区块的空间证明,pk为该矿工公钥,pre_hash为前一个区块的哈希值,进而每个区块分数S的计算公式如下:
[0114]
[0115] 其中,T为哈希函数H的输出长度;M为该产生该区块的矿工声明的硬盘空间大小;
[0116] 进而计算每条链的分数,即将每条链上的区块分数叠加获得链的分数,链分数最高的链被确定为主链。
[0117] 具体地,所述交易接收与验证步骤:
[0118] 所述交易包括:转账交易和空间声明交易;
[0119] 对交易进行合法性验证,验证内容如下:
[0120] 交易的签名是否合法;
[0121] 转账交易是否被双重花费。
[0122] 本发明提供的基于存储证明的区块链系统,可以通过本发明给的基于存储证明的区块链方法的步骤流程实现。本领域技术人员可以将所述基于存储证明的区块链方法,理解为所述基于存储证明的区块链系统的一个优选例。
[0123] 根据本发明提供的一种基于存储证明的区块链系统,包括:
[0124] 存储数据生成模块:每个新加入网络的新矿工利用生成需要存储的数据;
[0125] 空间声明交易广播模块:新加入网络的新矿工根据存储的数据生成梅克尔承诺,新矿工再生成并广播一笔空间声明交易,向全网宣布自己投入硬盘空间的大小以及对所存储的数据的梅克尔承诺;
[0126] 主链确定模块:空间声明交易被其他矿工收到后,新加入网络的新矿工从网络中收到一系列区块,验证一系列区块的合法性后保留合法的区块,计算保留的合法的区块中每个区块的分数,进而计算每条链的分数,链分数最高的链被确定为主链,并在主链上继续挖矿;
[0127] 交易接收与验证模块:新矿工持续接收网络中的交易,并对交易进行合法性验证,将验证通过的交易选入交易池,等待被打包进区块;
[0128] 区块广播模块:新矿工从交易池中选择一些交易,以它们为叶节点得到梅克尔树根tx_root,新矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号作为挑战节点,旷工将pre_hash、空间证明 space_proof、交易的梅克尔树根tx_root和所有交易打包成一个新区块并广播;
[0129] 区块验证模块:除新旷工以外的其他矿工收到该新区块之后,验证新区块的合法性,验证通过后,其他矿工更新本地的区块链,并在更新后的区块链的主链基础上继续挖矿。
[0130] 具体地,所述存储数据生成模块:
[0131] 利用pebbling graph图来生成需要存储的数据;
[0132] pebbling graph图中每个节点都有一个标记值L,pebbling graph图中所有节点的标记值即为矿工需要存储的数据,标记值的计算方法如下:
[0133] 设pebbling graph图共有M个节点,序号分别为1至M,则每个节点的标记值为:
[0134] H(pk,该节点序号,该节点所有父节点的标记值)(1)
[0135] 其中,H为一个密码学哈希函数,pk为矿工的公钥,节点i的父节点意味着拥有一条指向节点i的有向边的节点,i为节点的序号,逗号表示字符串联。
[0136] 具体地,所述空间声明交易广播模块:
[0137] 所述梅克尔承诺是以所有数据为叶节点所形成的梅克尔树的树根,梅克尔树是一种用哈希函数建立的二叉树结构,最底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,最终得到一个梅克尔树根;
[0138] 根据哈希函数的抗碰撞性,只要梅克尔树根确定,那么所有的数据块都不可被篡改;
[0139] 所述空间声明交易的交易格式为(M,pk,γ)。
[0140] 具体地,所述主链确定模块:
[0141] 所述验证一系列区块的合法性包括:
[0142] 验证梅克尔树根tx_root字段是否正确计算;
[0143] 验证空间证明space_proof字段是否合法,包括:挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1);验证挑战节点的梅克尔证明是否合法;
[0144] 对交易进行合法性验证,包括:验证交易的签名是否合法;验证转账交易是否被双重花费;
[0145] 所述挑战节点指:矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph图中的节点序号;
[0146] 所述空间证明包括:挑战节点及其所有父节点的标记值,挑战节点及其所有父节点的梅克尔证明;
[0147] 所述计算保留的合法的区块中每个区块的分数包括:
[0148] 先引入一个随机种子Δ=(space_proof,pk,pre_hash),其中space_proof即为该区块的空间证明,pk为该矿工公钥,pre_hash为前一个区块的哈希值,进而每个区块分数S的计算公式如下:
[0149]
[0150] 其中,T为哈希函数H的输出长度;M为该产生该区块的矿工声明的硬盘空间大小;
[0151] 进而计算每条链的分数,即将每条链上的区块分数叠加获得链的分数,链分数最高的链被确定为主链。
[0152] 具体地,所述交易接收与验证模块:
[0153] 所述交易包括:转账交易和空间声明交易;
[0154] 对交易进行合法性验证,验证内容如下:
[0155] 交易的签名是否合法;
[0156] 转账交易是否被双重花费。
[0157] 下面通过优选例,对本发明进行更为具体地说明。
[0158] 优选例1:
[0159] 基于存储证明的区块链方案是一种新型的区块链方案。在该方案中,矿工需要投入硬盘空间以存储一定量的数据来参与挖矿,从而争夺下一个区块的记账权(即将交易打包进区块并广播),进而获得相应的区块奖励。矿工获得下一个区块记账权的概率应该与其投入的硬盘空间大小成正比,从而在抵御女巫攻击的同时,保证了公平性。
[0160] 首先,每个新加入网络的矿工需要利用数学上被称为pebbling graph的一类图 (pebbling graph是一系列的图,这些图都有一个共同的性质,这个性质保证了矿工只有一直存储这些数据才能快速通过其他人的验证)来生成需要存储的数据(即按公式 (1)依次计算图中所有节点标记值,所有节点的标记值即为矿工需要存储的数据),这类图的性质保证了矿工只有一直存储这些数据才能快速通过其他人的验证。pebbling graph是一系列的图,这些图都有一个共同的性质,这个性质保证了矿工只有一直存储这些数据才能快速通过其他人的验证。
[0161] pebbling graph中每个节点都有一个标记值L,图中所有节点的标记值即为矿工需要存储的数据。标记值的计算方法如下:
[0162] 假设图共有M个节点,序号分别为1至M。则每个节点的标记值为:
[0163] H(pk,该节点序号,该节点所有父节点的标记值)(1)
[0164] 其中H为一个密码学哈希函数,pk为矿工的公钥。节点i的父节点意味着拥有一条指向节点i的有向边的节点,i介于1至M之间。逗号表示字符串联。
[0165] 举个简单的例子(如图1所示):
[0166] 在图1中,节点1没有父节点,因此其标记值L1为:
[0167] H(pk,1)
[0168] 同理节点2的标记值L2为:
[0169] H(pk,2)
[0170] 节点3的父节点是节点1和节点2,因此其标记值L3为:
[0171] H(pk,3,L1,L2)
[0172] 以此类推,可以算出所有节点的标记值L1至L7,即为矿工存储的数据。
[0173] 接着,新加入网络的矿工需要广播一笔空间声明交易,用来向全网宣布自己投入硬盘空间的大小以及对所存数据的梅克尔承诺,如果该矿工之后获得了一个区块的记账权,那么所有人都能利用这个梅克尔承诺来高效验证该矿工是否真的投入了他所声明的硬盘空间大小。梅克尔承诺是以所有数据为叶节点所形成的梅克尔树的树根。梅克尔树是一种用哈希函数建立的二叉树结构(如图),最底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,以此类推,最终得到一个梅克尔树根。利用哈希函数的抗碰撞性,只要梅克尔树根确定,那么所有的数据块都不可被篡改。
[0174] 举个简单的例子:图2中的叶子节点L1至L7为标记值,最终得到梅克尔树根root 的值为:
[0175] H(H(H(L1,L2),H(L3,L4)),H(H(L5,L6),H(L7,0)))
[0176] 这笔空间声明交易被其他矿工打包上链后,新矿工便可以在自己收到的主链的基础上进行挖矿。矿工用主链上最新区块的哈希值pre_hash作为随机源,随机生成之前所用pebbling graph的节点序号(称为挑战节点),接着矿工需要提供这些挑战节点及它们所有父节点的梅克尔证明。矿工只有一直存储pebbling graph中所有节点的标记值才能提供所有的梅克尔证明,从而证明了矿工一直投入了空间声明交易中所声明的硬盘空间。在梅克尔树中,一个叶节点的梅克尔证明包括从它到树根的路径上所有节点的兄弟节点。比如在图2中,L3的梅克尔证明就包括(L4,a,f)。完整的空间证明包括:挑战节点和它们所有父节点的标记值,挑战节点和它们所有父节点的梅克尔证明。接着矿工从交易池中选择一些交易并计算这些交易的梅克尔树根。最后矿工将pre_hash,空间证明,交易的梅克尔树根和所有交易一起打包成一个新区块并广播。
[0177] 其他矿工在收到该区块后会对区块合法性进行验证。验证内容包括:
[0178] 1、区块内所有交易合法性,包含交易签名合法性和交易是否双花[0179] 2、所有交易所形成的梅克尔树根的正确性
[0180] 3、空间证明的合法性
[0181] 其中,空间证明验证过程如下:验证其中挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1);接着验证挑战节点和它们所有父节点的梅克尔证明是否合法。以图2中的L3为例,它的梅克尔证明为(L4,a,f),我们需要计算H(H (a,H(L3,L4)),f)是否与空间声明交易里的梅克尔承诺相等。
[0182] 由于矿工可能收到多个同高度的区块,从而矿工收到的区块形成的是一个树状结构,因此主链的选择尤为重要,它决定了矿工接下来在那一条单链的基础上继续挖矿。为了防止女巫攻击和保障挖矿的公平性,我们希望区块被选为主链的概率应该与发布该区块的矿工投入的硬盘空间大小成正比,因此我们引入一个带有随机性的区块分数的概念。首先我们先引入一个随机种子Δ=(space_proof,pk,pre_hash)。其中space_proof 即为该区块的空间证明,pk为该矿工公钥,pre_hash为前一个区块的哈希值。进而每个区块分数S的计算公式如下:
[0183]
[0184] 其中T为哈希函数H的输出长度;M为该产生该区块的矿工声明的硬盘空间大小。数学证明表明,当区块分数这样设置时,一个区块在与其同高度的区块中分数最大的概率正比于产生该区块的矿工声明的硬盘空间大小。因此在同高度的所有区块中,分数最大的区块被选为主链上的下一个区块。
[0185] 除了定义区块分数外,我们还需要定义链的分数,当出现两条链分叉时,链分数更高的链被认为是主链。如图3所示,链A和链B是两条分叉,区块内的数字为该区块的分数。
[0186] 一种显而易见的链分数定义是链上所有区块分数之和,在这种定义图3中主链为链B。这种定义的缺点是链分数的方差较小,容易产生两条链分数相等的链,不利于主链的确定。
[0187] 因此为了使链分数的方差增大,我们引入了链的加权打分函数,高度为k的区块权重wk为(见图4):
[0188]
[0189] 由此,链分数被定义为链上所有区块分数的加权和:
[0190]
[0191] 其中,l为链的长度,k为区块高度,Sk表示高度为k的区块分数。数学上可以证明在这种加权链分数的方差大于不加权链分数的方差,从而减小了两条链的分数相同的概率,进而使区块链能更快的达到稳定状态。
[0192] 优选例2:
[0193] 一个新矿工有大小为7*256bit(假设使用SHA256作为哈希函数H,一个标记值的大小即为256bit)的闲置硬盘空间,想投入这部分空间参与挖矿,矿工公钥为 pk,则具体步骤如下:
[0194] 步骤1:新矿工生成一个节点数为7且符合pebbl ing graph性质的图(如图1)。
[0195] 步骤2:新矿工按公式(1)算出该图所有节点的标记值L1~L7
[0196] L1=H(pk,1) L2=H(pk,2) L4=H(pk,4) L5=H(pk,5)
[0197] L3=H(pk,3,L1,L2) L6=H(pk,6,L4,L5)
[0198] L7=H(pk,7,L3,L6)
[0199] 矿工存储这7个标记值(总空间大小为7*256bit)
[0200] 步骤3:新矿工生成这7个标记值的梅克尔承诺γ,即图2中root的值:
[0201] H(H(H(L1,L2),H(L3,L4)),H(H(L5,L6),H(L7,0)))
[0202] 4、新矿工生成一笔空间声明交易,交易格式为(7,pk,γ),矿工对这笔交易进行签名后并广播。这笔交易被其他矿工收到后
[0203] 5、新矿工从网络中收到一系列区块,验证区块的合法性后保留合法的区块(具体见第10步),计算每个区块的分数(见公式2),进而计算每条链的分数,链分数最高的链被确定为主链。比如矿工收到的区块结构如图4所示(括号内为计算出的区块分数):
[0204] 链A的分数为(1.3*0.8+1.5*0.7+1.1*0.5)=2.64
[0205] 链B的分数为(1.3*0.7+1.5*0.5+1.1*0.9)=2.65
[0206] 因此,矿工将链B确定为主链。接着矿工在链B的基础上延展区块高度为5的区块。
[0207] 6、新矿工一直接收网络中的交易(包括转账交易和空间声明交易两类),并对交易进行合法性验证,验证内容如下:
[0208] 交易的签名是否合法
[0209] 转账交易是否被双重花费
[0210] 验证通过的交易才会被选入交易池,等待被打包进区块
[0211] 7、新矿工从交易池中选择一些交易,以它们为叶节点得到梅克尔树根tx_root,如图5以八个交易(tx1~tx8)为例。tx_root为:
[0212] H(H(H(tx1,tx2),H(tx3,tx4)),H(H(tx5,tx6),H(tx7,tx8)))[0213] 8.矿工用链B上最新区块(即分数为0.9的区块)的哈希值作为一个随机源R (也即下个区块的pre_hash字段),生成1个挑战节点序号(假设系统参数t为1):
[0214] 1+H(R)mod7
[0215] 假设该值为6,由于图a中节点6的父节点为节点4和节点5,因此空间证明 space_proof包括:
[0216] 节点6的标记值L6;
[0217] 节点4和节点5的标记值L4、L5;
[0218] 节点6的梅克尔证明(L5,d,e)
[0219] 节点4的梅克尔证明(L3,a,f)
[0220] 节点5的梅克尔证明(L6,d,e)
[0221] 9.矿工将pre_hash,空间证明space_proof,交易的梅克尔树根tx_root和所有交易tx1~tx8一起打包成一个新区块并广播。区块结构如下表所示:
[0222]pre_hash
height:5
timestamp
tx_root
space_proof
tx1~tx8
[0223] 10.其他矿工收到该区块之后,验证它的合法性。之后执行第5步具体内容包括:
[0224] a.tx_root字段是否正确计算,即与
[0225] H(H(H(tx1,tx 2),H(tx3,tx4)),H(H(tx5,tx6),H(tx7,tx8)))[0226] 是否相等。
[0227] b.space_proof字段是否合法,验证包括:
[0228] (1)挑战节点和它们所有父节点的标记值是否满足标记值的计算公式(1),即[0229] L6与H(pk,6,L4,L5)是否相等;
[0230] (2)挑战节点的梅克尔证明是否合法,即
[0231] H(H(d,H(L5,L6)),e)与梅克尔承诺γ是否相等;
[0232] (3)挑战节点所有父节点的梅克尔证明是否合法,即
[0233] H(H(a,H(L3,L4)),f)与梅克尔承诺γ是否相等;
[0234] H(H(d,H(L5,L6)),e)与梅克尔承诺γ是否相等;
[0235] c.tx1~tx8是否合法(验证内容与第6步相同)
[0236] 11.验证通过后,其他矿工更新本地的区块链,并在更新后的主链基础上继续挖矿,即从第5步开始执行。
[0237] 本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
[0238] 以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈