1.一种面向联盟链的分片存储方法,其特征在于,该方法具体包括以下步骤:S1:采用可验证随机函数(Verifiable Random Function,VRF)算法随机选取一个节点为全节点,具体包括以下步骤:S11:密钥生成:选择一条椭圆曲线EC(a,b),阶数为n,取椭圆曲线上的一点作为基点G;
选择一个随机数作为私钥Sk,并生成公钥Pk=GSk;
S12:计算随机数Y和证明P:x为前一个区块的随机数,选择随机数r∈[1,n‑1];使用散列函数h1计算H=h1(x),将x映射到椭圆曲线上的点H;计算rH、rG;使用函数h2将输入编码成一个整数s,s=h2(rH,rG);计算t=(r‑s×Sk)modn;计算V=HSk;使用函数h3将椭圆曲线上的点编码成整数,随机数为Y=h3(V),证明P为(V;t;s);
S13:将输出值Y与阈值相比较,如果满足小于阈值的条件则该节点被选择为全节点;
S14:该节点将输入的数据X、输出Y、VRF公钥Pk、证明P广播给其他节点,节点收到消息验证随机数是否正确;
S2:将联盟链的数据根据节点的数量划分成相同大小的数据块,具体包括以下步骤:S21:确定RS纠删码的参数RS(k,m),即对k个数据块进行编码生成m个校验块,一共生成k+m个编码块,设校验块的数量m=f,f为联盟链中拜占庭节点的数量,联盟链节点数量为n1,那么数据块的数量k=n1‑f‑1;
S22:设联盟数据中区块的个数为s1,如果s1 mod k==0,则每s1/k个区块进行一次划分;如果s1 mod k!=0,则前s1 mod k个数据块每个存储 个区块,其他每个数据块存储 个区块;
S23:获得长度最长的数据块长度maxlength,长度不足的数据块在后面补零,使得每一个数据块的长度等于maxlength;
S3:使用纠删码对数据块进行编码得到编码块;
S4:将联盟链数据存储到全节点上,根据每个节点的公钥在公钥列表中的位置存储一个编码块;
S5:新节点加入联盟链系统时,根据联盟链中故障节点数量与校验块数量m的关系以及全节点是否故障,来判断是否要进行重新编码。
2.根据权利要求1所述的面向联盟链的分片存储方法,其特征在于,步骤S5中,新节点加入联盟链系统时,根据联盟链中节点故障情况判断是否要进行重新编码,具体包括以下步骤:S51:新节点加入联盟链系统中,对比故障节点的数量与校验块的数量m;
S52:如果所有存储编码块的轻量级节点故障数小于m,判断全节点是否正常,如果全节点正常,则对新节点的加入不做任何处理;如果全节点出现故障,从存储编码块的轻量级节点处解码恢复出原数据,重复步骤S1至S4;
S53:如果所有存储编码块的轻量级节点故障数等于m,判断全节点是否正常,如果全节点正常,则进行步骤S2至S4;如果全节点出现故障,从存储编码块的轻量级节点处恢复出原数据,重复步骤S1至S4;
S54:如果所有存储编码块的轻量级节点故障数大于m,向全节点请求数据,重复步骤S2至S4。