发明内容
本发明实施例所要解决的一个技术问题是:提供一种工作量证明的计算方法和装置、电子设备、程序和介质。
根据本发明实施例的一个方面,提供的一种工作量证明的计算方法,包括:
按照预设周期更新工作量证明参数,并公布所述更新后的工作量证明参数,以便矿机基于更新后的工作量证明参数,进行工作量证明的计算;
接收到矿机上报的工作量证明结果后,根据所述工作量证明结果是否基于已公布的工作量证明参数完成,确认上报所述工作量证明结果的矿机是否完成工作量证明。
可选地,在本发明上述各方法实施例中,所述预设周期对应的时长不小于如下时间之和:矿池向矿机发放计算任务所需时间,矿机完成一次工作量证明的计算所需时间,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间。
可选地,在本发明上述各方法实施例中,所述预设周期对应的时长不大于如下时间之和:矿池向矿机发放计算任务所需时间,矿机完成N次工作量证明的计算所需时间,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间;其中,N的取值为大于1且小于预设整数的整数。
可选地,在本发明上述各方法实施例中,所述工作量证明参数包括以下任意一项或多项:第一随机数,哈希运算方法,哈希运算方法针对的计算内容。
可选地,在本发明上述各方法实施例中,基于更新后的工作量证明参数,进行工作量证明的计算,包括:
采用哈希运算方法,分别基于选取的第一随机数进行至少一次哈希计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;
采用哈希运算方法,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;
判断所述哈希计算的计算结果是否满足预设条件;
若所述计算结果满足预设条件,完成工作量证明;
否则,若所述计算结果不满足预设条件,更换所述第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,开始执行所述采用哈希运算方法,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算的操作。
可选地,在本发明上述各方法实施例中,所述形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。
可选地,在本发明上述各方法实施例中,所述基于选取的第一随机数进行至少一次哈希计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据,包括:
基于选取的第一随机数进行哈希计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;
判断所述缓存数据占用的空间容量是否达到预设空间容量阈值;
若所述缓存数据占用的空间容量未达到预设空间容量阈值,继续执行所述基于选取的第一随机数进行哈希计算,并将计算得到的计算结果追加到所述存储器的缓存数据中,然后执行所述判断所述缓存数据占用的空间容量是否达到预设空间容量阈值的操作;
若所述缓存数据占用的空间容量达到预设空间容量阈值,执行所述采用哈希运算方法,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算的操作。
可选地,在本发明上述各方法实施例中,基于选取的第一随机数进行哈希计算,并将计算得到的计算结果分别存储在存储器中,包括:
分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行哈希计算,得到填充数字串;以及采用第二预设算法,对按照预设方式选取的输入参数与所述填充数字串进行哈希计算,获得计算结果并存储在存储器中。
可选地,在本发明上述各方法实施例中,所述哈希运算方法包括:第一哈希函数和第二哈希函数;
所述采用第二预设算法,对输入参数与所述填充数字串进行哈希计算,包括:
对由输入参数与所述填充数字串构成的字符串,采用第一哈希算法进行计算,得到第一整数;对所述第一整数按N取模,获得第一哈希函数的输出结果,并将所述输入参数与所述第一哈希函数的输出结果作为一个对应关系存储在第一哈希函数查找表中;以及对由输入参数与所述填充数字串构成的字符串,采用第二哈希算法进行计算,获得第二哈希函数的输出结果,并将所述输入参数与所述第二哈希函数的输出结果作为一个对应关系存储在第二哈希函数查找表中;所述缓存数据包括:所述第一哈希函数查找表和所述第二哈希函数查找表;
其中,N为大于0的任意整数。
可选地,在本发明上述各方法实施例中,所述第一哈希函数包括:Gf(a)=G(a,a')=G(a,f-1(N-f(a))),所述第一哈希函数查找表包括各输入参数a与第一哈希函数的输出结果Gf(a)之间的对应关系;
所述第二哈希函数包括:f(a);所述第二哈希函数查找表包括各输入参数a与第二哈希函数的输出结果f(a)之间的对应关系;
其中,a为输入参数。
可选地,在本发明上述各方法实施例中,所述利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算,包括:选取一个第二随机数b作为输入参数;针对所述预设数据块和本次选取的第二随机数b,基于所述第一哈希函数查找表和所述第二哈希函数查找表,获取满足预设关系的第二随机数b对应的计算结果b';其中,所述预设关系包括:f(b)+f(b')=N;
判断所述哈希计算的计算结果是否满足预设条件,包括:
判断G(b,b')是否满足预设判定函数B规定的判断条件,以及第二随机数b的哈希计算结果是否满足预设难度要求;
若G(b,b')满足预设判定函数B规定的判断条件、且第二随机数b的哈希计算结果满足预设难度要求,则所述第二随机数b的哈希计算的计算结果满足预设条件。
可选地,在本发明上述各方法实施例中,所述G(b,b')满足预设判定函数B规定的判断条件,包括:所述第二随机数b属于预先设定的伪随机序列中的前M个值,其中,M为预设大于0的整数;
所述第二随机数b的哈希计算结果满足预设难度要求,包括:采用第三哈希函数对所述第二随机数b连续进行两次哈希运算得到的哈希计算结果dhash(b)满足预设难度要求。
可选地,在本发明上述各方法实施例中,所述哈希计算结果dhash(b)满足预设难度要求,包括:
所述哈希计算结果dhash(b)中开头的0的数目满足预设要求。
可选地,在本发明上述各方法实施例中,所述工作量证明参数还包括以下任意一项或多项:所述填充数字串,所述伪随机序列,所述哈希计算结果dhash(b)中开头的0的数目应当满足的所述预设要求。
可选地,在本发明上述各方法实施例中,若所述计算结果满足预设条件,还包括:
矿机向矿池上报工作量证明结果,所述工作量证明结果包括:所述第一随机数、所述第二随机数和采用的工作量证明参数。
可选地,在本发明上述各方法实施例中,所述工作量证明结果中包括采用的哈希运算方法;
所述方法还包括:
响应于同一时刻接收到两个或以上矿机上报的工作量证明结果、且确认上报所述两个或以上矿机完成工作量证明,确认所述两个或以上矿机上报的工作量证明结果中包括较晚公布的哈希运算方法的矿机完成工作量证明。
根据本发明实施例的另一个方面,提供的一种工作量证明的计算系统,包括:矿池和至少一个矿机;其中:
矿池,用于按照预设周期更新工作量证明参数,并公布所述更新后的工作量证明参数,以便矿机基于更新后的工作量证明参数,进行工作量证明的计算;以及在接收到矿机上报的工作量证明结果后,根据所述工作量证明结果是否基于已公布的工作量证明参数完成,确认上报所述工作量证明结果的矿机是否完成工作量证明;
矿机,用于进行工作量证明的计算;以及在完成工作量证明后,向所述矿池上报工作量证明结果。
可选地,在本发明上述各系统实施例中,所述预设周期对应的时长不小于如下时间之和:矿池向矿机发放计算任务所需时间,矿机完成一次工作量证明的计算所需时间,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间。
可选地,在本发明上述各系统实施例中,所述预设周期对应的时长不大于如下时间之和:矿池向矿机发放计算任务所需时间,矿机完成N次工作量证明的计算所需时间,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间;其中,N的取值为大于1且小于预设整数的整数。
可选地,在本发明上述各系统实施例中,所述工作量证明参数包括以下任意一项或多项:第一随机数,哈希运算系统,哈希运算系统针对的计算内容。
可选地,在本发明上述各系统实施例中,所述矿池包括:
更新模块,用于按照预设周期更新工作量证明参数,并公布所述更新后的工作量证明参数;
第一确认模块,用于在接收到矿机上报的工作量证明结果后,根据所述工作量证明结果是否基于已公布的工作量证明参数完成,确认上报所述工作量证明结果的矿机是否完成工作量证明。
可选地,在本发明上述各系统实施例中,所述矿机包括:
第一计算模块,用于采用哈希运算方法,分别基于选取的第一随机数进行至少一次哈希计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;
存储器,用于存储所述缓存数据;
第二计算模块,用于采用哈希运算方法,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;以及现在所述哈希计算的计算结果不满足预设条件时,更换所述第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,开始执行所述采用哈希运算方法,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;
判断模块,用于判断所述哈希计算的计算结果是否满足预设条件;若所述计算结果满足预设条件,完成工作量证明。
可选地,在本发明上述各系统实施例中,所述形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。
可选地,在本发明上述各系统实施例中,所述第一计算模块具体用于:
基于选取的第一随机数进行哈希计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;
判断所述缓存数据占用的空间容量是否达到预设空间容量阈值;
若所述缓存数据占用的空间容量未达到预设空间容量阈值,继续执行所述基于选取的第一随机数进行哈希计算,并将计算得到的计算结果追加到所述存储器的缓存数据中,然后执行所述判断所述缓存数据占用的空间容量是否达到预设空间容量阈值的操作;
所述第二计算模块,具体用于若所述缓存数据占用的空间容量达到预设空间容量阈值,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。
可选地,在本发明上述各系统实施例中,所述第一计算模块具体用于:
分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行哈希计算,得到填充数字符串;以及采用第二预设算法,对随机选取的输入参数与所述填充数字符串进行哈希计算,获得计算结果并存储在存储器中,以形成占用预定空间容量的缓存数据。
可选地,在本发明上述各系统实施例中,所述哈希运算方法包括:第一哈希函数和第二哈希函数;
所述第一计算模块采用第二预设算法,对输入参数与所述填充数字符串进行计算时,具体用于:
对由输入参数与所述填充数字符串构成的字符串,采用第一哈希算法进行计算,得到第一整数;对所述第一整数按N取模,获得第一哈希函数的输出结果,并将所述输入参数与所述第一哈希函数的输出结果作为一个对应关系存储在第一哈希函数查找表中;以及对由输入参数与所述填充数字符串构成的字符串,采用第二哈希算法进行计算,获得第二哈希函数的输出结果,并将所述输入参数与所述第二哈希函数的输出结果作为一个对应关系存储在第二哈希函数查找表中;所述缓存数据包括:所述第一哈希函数查找表和所述第二哈希函数查找表;其中,N为大于0的任意整数。
可选地,在本发明上述各系统实施例中,所述第一哈希函数包括:Gf(a)=G(a,a')=G(a,f-1(N-f(a))),所述第一哈希函数查找表包括各输入参数a与第一哈希函数的输出结果Gf(a)之间的对应关系;
所述第二哈希函数包括:f(a);所述第二哈希函数查找表包括各输入参数a与第二哈希函数的输出结果f(a)之间的对应关系;
其中,a为输入参数。
可选地,在本发明上述各系统实施例中,所述第二计算模块具体用于:选取一个第二随机数b作为输入参数;针对所述预设数据块和本次选取的第二随机数b,基于所述第一哈希函数查找表和所述第二哈希函数查找表,获取满足预设关系的第二随机数b对应的计算结果b';其中,所述预设关系包括:f(b)+f(b')=N;
所述判断模块具体用于:判断G(b,b')是否满足预设判定函数B规定的判断条件,以及第二随机数b的哈希计算结果是否满足预设难度要求;
若G(b,b')满足预设判定函数B规定的判断条件、且第二随机数b的哈希计算结果满足预设难度要求,则所述第二随机数b的哈希计算的计算结果满足预设条件。
可选地,在本发明上述各系统实施例中,所述G(b,b')满足预设判定函数B规定的判断条件,包括:所述第二随机数b属于预先设定的伪随机序列中的前M个值,其中,M为预设大于0的整数;
所述第二随机数b的哈希计算结果满足预设难度要求,包括:采用第三哈希函数对所述第二随机数b连续进行两次哈希运算得到的哈希计算结果dhash(b)满足预设难度要求。
可选地,在本发明上述各系统实施例中,所述哈希计算结果dhash(b)满足预设难度要求,包括:
所述哈希计算结果dhash(b)中开头的0的数目满足预设要求。
可选地,在本发明上述各系统实施例中,所述矿机还包括:
发送模块,用于若所述计算结果满足预设条件,向矿池上报工作量证明结果,所述工作量证明结果包括:所述第一随机数、所述第二随机数和采用的工作量证明参数。
可选地,在本发明上述各系统实施例中,所述工作量证明参数还包括以下任意一项或多项:所述填充数字串,所述伪随机序列,所述哈希计算结果dhash(b)中开头的0的数目应当满足的所述预设要求。
可选地,在本发明上述各系统实施例中,所述工作量证明结果中包括采用的哈希运算方法;
所述矿池还包括:
第二确认模块,用于响应于同一时刻接收到两个或以上矿机上报的工作量证明结果、且确认上报所述两个或以上矿机完成工作量证明,确认所述两个或以上矿机上报的工作量证明结果中包括较晚公布的哈希运算方法的矿机完成工作量证明。
根据本发明实施例的又一个方面,提供的一种电子设备,包括:
存储器和处理器,其中,所述存储器用于存储计算机可读指令,所述处理器对所述计算机可读指令的执行使得所述处理器执行本发明上述任一实施例所述的工作量证明的计算方法的操作。
根据本发明实施例的再一个方面,提供的一种计算机存储介质,用于存储计算机可读指令,所述计算机可读指令在设备中运行时,所述设备中的处理器执行本发明上述任一实施例所述的工作量证明的计算方法的操作。
根据本发明实施例的再一个方面,提供的一种计算机程序,包括计算机可读指令,当所述计算机可读指令在设备中运行时,所述设备中的处理器执行本发明上述任一实施例所述的工作量证明的计算方法的操作。
基于本发明上述实施例提供的工作量证明的计算方法和系统、电子设备、程序和介质,按照预设周期更新工作量证明参数,并公布更新后的工作量证明参数,以便矿机基于更新后的工作量证明参数,进行工作量证明的计算;接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。本发明实施例可以把一轮工作量证明拆分成若干个小的周期,每个周期更新工作量证明参数,这样,只要历经的周期数目足够多,就会有参与者(矿机)可以找到满足条件的工作量证明结果,例如合适第一随机数nonce1和第二随机数nonce2,避免了卡死的情形,即:始终无参与者可完成工作量证明的情况。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本发明实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
图1为本发明工作量证明的计算方法一个实施例的流程图。该实施例的工作量证明的计算方法可以由矿池执行。如图1所示,该实施例工作量证明的计算方法包括:
102,按照预设周期更新工作量证明参数,并公布更新后的工作量证明参数,以便矿机基于更新后的工作量证明参数,进行工作量证明的计算。
104,接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。
基于本发明上述实施例提供的工作量证明的计算方法,按照预设周期更新工作量证明参数,并公布更新后的工作量证明参数,以便矿机基于更新后的工作量证明参数,进行工作量证明的计算;接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。本发明实施例可以把一轮工作量证明拆分成若干个小的周期,每个周期更新工作量证明参数,这样,只要历经的周期数目足够多,就会有参与者(矿机)可以找到满足条件的工作量证明结果,例如合适第一随机数nonce1和第二随机数nonce2,避免了卡死的情形,即:始终无参与者可完成工作量证明的情况。
在本发明各实施例的一个实施方式中,预设周期对应的时长T不小于如下时间之和:矿池向矿机发放计算任务所需时间T1,矿机完成一次工作量证明的计算所需时间T2,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间T3。
其中,完成一次工作量证明的计算,可以包括如下操作:1,矿机采用哈希运算方法,分别基于选取的第一随机数进行至少一次哈希计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;2,矿机采用哈希运算方法,利用上述缓存数据和本次选取的第二随机数对预设数据块进行一次哈希计算。例如,完成以下实施例中步骤204-206的操作即完成一次工作量证明的计算。
完成工作量证明的矿机将工作量证明结果返回矿池所需的时间T3,可以根据所有矿机与矿池之间进行数据传输所需的时间确定,取所有矿机与矿池之间进行数据传输所需的时间的平均值、最大值,或者按照经验取值。
在本发明各实施例的一个实施方式中,在预设周期对应的时长T不小于T1+T2+T3的情况下,应该尽可能的小,例如,预设周期T对应的时长不大于如下时间之和:矿池向矿机发放计算任务所需时间T1,矿机完成N次工作量证明的计算所需时间T4,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间T3;其中,N的取值为大于1且小于预设整数的整数。即:T=T1+T4+T3时,N的取值应大于1、且小于预设整数A,其中A的取值例如可以是20。
在本发明各实施例的一个实施方式中,工作量证明参数包括以下任意一项或多项:第一随机数(nonce1),哈希运算方法,哈希运算方法针对的计算内容。其中,哈希运算方法针对的计算内容即:哈希运算方法针对的输入参数,例如针对哈希运算方法hash(a)原本针对的是输入参数a,可以更新为hash(c*a),即以c*a作为下一个周期内哈希运算方法针对的计算内容,其中c为常数,且可以在每一个预设周期内变化;再如,针对哈希运算方法hash(a)原本针对的是输入参数a,可以更新为hash(c*a+c0),即以c*a+c0作为下一个周期内哈希运算方法针对的计算内容,其中c、c0为常数,且可以在每一个预设周期内变化。
图2为本发明工作量证明的计算方法另一个实施例的流程图。如图2所示,该实施例工作量证明的计算方法包括:
202,矿池按照预设周期更新工作量证明参数,并通过网络,例如以单播或者广播的方式,向矿机公布更新后的工作量证明参数,并向矿机下发计算任务。
204,矿机接收计算任务,采用哈希运算方法,分别基于选取的第一随机数(nonce1)进行至少一次哈希计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据。
本发明各实施例中,第一随机数可以由矿机按照预设规则选取或者随机选取。
206,矿机采用哈希运算方法,利用上述缓存数据和本次选取的第二随机数(nonce2)对预设数据块进行哈希计算。
本发明各实施例中,第二随机数可以由矿机按照预设规则选取或者随机选取。
本发明各实施例中,由矿池向矿机发放计算任务,该计算任务是一个数据块,可以先对作为该计算任务的数据块经过某个哈希算法计算,得到一个伪随机数序列B。本发明各实施例中,预设数据块可以为该伪随机序列B中的元素,该伪随机序列B中包括多个元素。
区块链由一个个区块(block)组成,每个区块即区块链中每次写入的数据。在本发明各实施例的一个实施方式中,上述伪随机序列可以作为区块中的全部数据或者其中一部分数据。
208,矿机判断哈希计算的计算结果是否满足预设条件。
若哈希计算的计算结果满足预设条件,完成工作量证明,执行操作210。否则,若哈希计算的计算结果不满足预设条件,重新选取第二随机数,即:更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,执行操作206。
210,矿机向矿池上报工作量证明结果,该工作量证明结果中包括采用的工作量证明参数。
212,矿池接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。
基于本发明上述实施例,提供了一种基于大容量存储的工作量证明方案,分别基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;判断哈希计算的计算结果是否满足预设条件;若计算结果满足预设条件,完成工作量证明;否则,若计算结果不满足预设条件,更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,重新利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。本发明实施例提供的基于大容量存储的工作量证明方案,由于缓存数据在多轮工作量证明中保持不变,可以摊平生成它所消耗的大量计算资源,在保持公平性和鲁棒性的优点的同时,极大地减小了电力的消耗,而且可以复用现存的、具有一定量存储空间的计算设备,从而降低了系统的整体拥有成本。
在本发明各实施例的一个实施方式中,操作204中形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。其中,一轮工作量证明的时间窗口即一个区块生成(例如对应于上述操作204-212)和被接受的时间。
在本发明各实施例的一个实施方式中,操作204可以包括:
基于选取的第一随机数进行哈希计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;
判断缓存数据占用的空间容量是否达到预设空间容量阈值;
若缓存数据占用的空间容量未达到预设空间容量阈值,继续执行基于选取的第一随机数进行哈希计算,并将计算得到的计算结果追加到存储器的缓存数据中,然后执行判断缓存数据占用的空间容量是否达到预设空间容量阈值的操作;
若缓存数据占用的空间容量达到预设空间容量阈值,执行206的操作。
在本发明各实施例的一个实施方式中,操作204中,基于选取的第一随机数进行一次哈希计算,并将各次计算得到的计算结果分别存储在存储器中,可以包括:
分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行哈希计算,得到填充数字串(Padding);以及采用第二预设算法,对按照预设方式选取的输入参数a与填充数字串进行计算,例如,可以将输入参数a与填充数字串进行拼接,并对拼接得到的字符串进行哈希计算,获得计算结果并存储在存储器中。其中,按照预设方式选取可以是,随机选取或者根据某种预设选取规则选取。
在其中一个可选示例中,哈希运算方法包括:第一哈希函数和第二哈希函数。相应地,采用第二预设算法,对输入参数与填充数字串进行哈希计算,可以包括:
对由输入参数a与填充数字串构成的字符串,例如,可以将输入参数a与填充数字串进行拼接构成字符串,采用第一哈希算法进行计算,得到第一整数;对第一整数按N取模,获得第一哈希函数的输出结果,并将输入参数与第一哈希函数的输出结果作为一个对应关系存储在第一哈希函数查找表中;以及对由输入参数与填充数字串构成的字符串,采用第二哈希算法进行计算,获得第二哈希函数的输出结果,并将输入参数与第二哈希函数的输出结果作为一个对应关系存储在第二哈希函数查找表中;上述缓存数据包括:第一哈希函数查找表和第二哈希函数查找表。其中,N为大于0的任意整数。第一哈希函数的实现包括:采用第一哈希算法对字符串进行计算和对整数按N取模;第二哈希函数即第二哈希算法,其实现包括:采用第二哈希算法对字符串进行计算。
示例性地,在另一个可选示例中,本发明各实施例中,第一哈希函数可以是:Gf(a)=G(a,a′)=G(a,f-1(N-f(a))),其中,f(a)+f(a')=N,即:f(a')=N-f(a),f-1(N-f(a))为N-f(a)=f(a')的逆函数,即:由f(a')求取a';第一哈希函数查找表包括各输入参数a与第一哈希函数的输出结果Gf(a)之间的对应关系。第二哈希函数包括:f(a);第二哈希函数查找表包括各输入参数a与第二哈希函数的输出结果f(a)之间的对应关系。其中,a为输入参数。
相应地,在本发明上述各实施例中,利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算,可以包括:选取一个第二随机数a;针对本次选取的第二随机数a,基于第一哈希函数查找表和第二哈希函数查找表,获取第二随机数a对应的计算结果a'。本发明各实施例中,由矿池向矿机发放计算任务,该计算任务是一个数据块,可以先对作为该计算任务的数据块经过某个哈希算法计算,得到一个伪随机数序列B。本发明各实施例中,预设数据块可以为该伪随机序列B中的元素,该伪随机序列B中包括多个元素。区块链由一个个区块(block)组成,每个区块即区块链中每次写入的数据。在本发明各实施例的一个实施方式中,上述伪随机序列可以作为区块中的全部数据或者其中一部分数据。
判断哈希计算的计算结果是否满足预设条件,可以包括:判断G(a,a')是否满足预设判定函数B规定的判断条件,即:B(G(a,a'))=True是否成立,以及第二随机数a的哈希计算结果是否满足预设难度要求;若G(a,a')满足预设判定函数B规定的判断条件、且第二随机数a的哈希计算结果满足预设难度要求,则该第二随机数a的哈希计算的计算结果满足预设条件。
其中,G(a,a')满足预设判定函数B规定的判断条件,可以包括:第二随机数a属于预先设定的伪随机序列中的前M个值,其中,M为预设大于0的整数。第二随机数a的哈希计算结果满足预设难度要求,可以包括:采用第三哈希函数对第二随机数a连续进行两次哈希运算得到的哈希计算结果dhash(a)满足预设难度要求。
其中,哈希计算结果dhash(a)满足预设难度要求,可以是:哈希计算结果dhash(a)中开头的0的数目满足预设要求。
图3为本发明工作量证明的计算方法又一个实施例的流程图。如图3所示,该实施例工作量证明的计算方法包括:
302,矿池按照预设周期更新工作量证明参数,并通过网络,例如以单播或者广播的方式,向矿机公布更新后的工作量证明参数,并向矿机下发计算任务。
304,矿机接收计算任务选取一个第一随机数(nonce1)。
306,矿机采用第一预设算法对选取的第一随机数进行哈希计算,得到填充数字串(Padding)。
308,矿机按照预设方式选取输入参数a,并针对该输入参数a计算第一哈希函数的输出结果Gf(a),并将输入参数a与第一哈希函数的输出结果Gf(a)作为第一哈希函数查找表中的一个对应关系存储在存储器的缓存数据中;以及针对该输入参数a计算第二哈希函数的输出结果f(a),并将输入参数a与第二哈希函数的输出结果f(a)作为第二哈希函数查找表中的一个对应关系存储在存储器的缓存数据中。
其中,第一哈希函数查找表包括多个a与Gf(a)之间的对应关系,第二哈希函数查找表包括多个a与f(a)之间的对应关系。
具体地,针对该输入参数a计算第一哈希函数的输出结果Gf(a)的计算方法如下:
对输入参数a与填充数字串进行拼接,并采用预先设置的第一哈希算法,对拼接得到的字符串进行计算,获得第一整数例如sha356算法对拼接得到的字符串进行处理,得到256bit的整数;对第一整数按N取模,获得第一哈希函数的输出结果Gf(a)。
具体地,针对该输入参数a计算第二哈希函数的输出结果f(a)的计算方法如下:
对输入参数a与填充数字串进行拼接,并采用预先设置的第二哈希算法对拼接得到的字符串进行计算,获得第二哈希函数的输出结果f(a)。
至少一次执行操作304~308,依次选取不同的第一随机数进行计算,并将各次计算得到的a与Gf(a)之间的对应关系以及a与f(a)之间的对应关系存储在缓存数据中,形成占用预定空间容量的缓存数据。缓存数据占用的空间达到预定空间容量后,执行操作310。
310,矿机选取一个第二随机数(nonce2)作为输入参数b。
312,矿机针对预设数据块和选取的第二随机数b,查找第一哈希函数查找表和第二哈希函数查找表,获取第二随机数b基于第一哈希函数查找表和第二哈希函数查找表对应的、且满足预设关系的计算结果b'。其中,预设关系包括:f(b)+f(b')=N,该N的取值与上述各实施例中生成第一哈希函数查找表和第二哈希函数查找表时N的取值相同。
在本发明各实施例的一个实施方式中,查找第一哈希函数查找表和第二哈希函数查找表,获取同时满足以下条件的计算结果b':f(b)+f(b')=N,Gf(b)的函数值(即:第一哈希函数的输出结果)为上述预设数据块。
例如,假设上述预设数据块是作为计算任务的数据块经过某个哈希算法计算得到的一个伪随机数序列B{x0,x1,x2,…},该操作312中,通过查找第二哈希函数查找表和第一哈希函数查找表获取:第二随机数b对应的、满足f(b)+f(b')=N、且满足Gf(b0)=x0,Gf(b1)=x1,Gf(b2)=x2,…的计算结果b'。
314,矿机判断G(b,f-1(N-f(b)))满足预设判定函数B规定的判断条件、以及采用第三哈希函数对第二随机数b连续进行两次哈希运算得到的哈希计算结果dhash(b)是否满足预设难度要求。
若G(b,f-1(N-f(b)))满足预设判定函数B规定的判断条件、且dhash(b)满足预设难度要求,完成工作量证明,执行操作316。否则,只要任一条件不满足或者上述两个条件均不满足,再次执行操作310,重新选取一个第二随机数并执行后续操作312~314。
316,矿机向矿池上报工作量证明结果,该工作量证明结果中包括采用的工作量证明参数,例如包括:第一随机数nonce1,第二随机数nonce2,哈希运算方法Gf(b)和f(b),哈希运算方法针对的计算内容b,填充数字串(Padding),伪随机序列,希计算结果dhash(b)中开头的0的数目应当满足的所述预设要求,等等。
318,矿池接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。
图4为本发明工作量证明的计算系统一个实施例的结构示意图。该实施例的计算系统可用于实现本发明上述各计算方法实施例。如图4所示,该实施例的计算系统包括:矿池和至少一个矿机。其中:
矿池,用于按照预设周期更新工作量证明参数,并公布更新后的工作量证明参数,以便矿机基于更新后的工作量证明参数,进行工作量证明的计算;以及在接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。
在本发明各实施例的一个实施方式中,预设周期对应的时长T不小于如下时间之和:矿池向矿机发放计算任务所需时间T1,矿机完成一次工作量证明的计算所需时间T2,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间T3。
在本发明各实施例的一个实施方式中,在预设周期对应的时长T不小于T1+T2+T3的情况下,应该尽可能的小,例如,预设周期T对应的时长不大于如下时间之和:矿池向矿机发放计算任务所需时间T1,矿机完成N次工作量证明的计算所需时间T4,完成工作量证明的矿机将工作量证明结果返回矿池所需的时间T3;其中,N的取值为大于1且小于预设整数的整数。即:T=T1+T4+T3时,N的取值应大于1、且小于预设整数A,其中A的取值例如可以是20。
在本发明各实施例的一个实施方式中,工作量证明参数包括以下任意一项或多项:第一随机数(nonce1),哈希运算方法,哈希运算方法针对的计算内容。其中,哈希运算方法针对的计算内容即:哈希运算方法针对的输入参数,例如针对哈希运算方法hash(a)原本针对的是输入参数a,可以更新为hash(c*a),即以c*a作为下一个周期内哈希运算方法针对的计算内容,其中c为常数,且可以在每一个预设周期内变化;再如,针对哈希运算方法hash(a)原本针对的是输入参数a,可以更新为hash(c*a+c0),即以c*a+c0作为下一个周期内哈希运算方法针对的计算内容,其中c、c0为常数,且可以在每一个预设周期内变化。
矿机,用于接收矿池下发的工作量证明参数和计算任务,进行工作量证明的计算;以及在完成工作量证明后,向矿池上报工作量证明结果。
基于本发明上述实施例提供的工作量证明的计算系统,按照预设周期更新工作量证明参数,并公布更新后的工作量证明参数,以便矿机基于更新后的工作量证明参数,进行工作量证明的计算;接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。本发明实施例可以把一轮工作量证明拆分成若干个小的周期,每个周期更新工作量证明参数,这样,只要历经的周期数目足够多,就会有参与者(矿机)可以找到满足条件的工作量证明结果,例如合适第一随机数nonce1和第二随机数nonce2,避免了卡死的情形,即:始终无参与者可完成工作量证明的情况。
图5为本发明工作量证明的计算系统另一个实施例的结构示意图。如图5所示,该实施例中,矿池包括:更新模块,用于按照预设周期更新工作量证明参数,并公布更新后的工作量证明参数。第一确认模块,用于在接收到矿机上报的工作量证明结果后,根据工作量证明结果是否基于已公布的工作量证明参数完成,确认上报工作量证明结果的矿机是否完成工作量证明。
另外,再参见图5,在本发明工作量证明的计算系统又一个实施例中,矿机包括:
第一计算模块,用于采用哈希运算方法,分别基于选取的第一随机数进行至少一次哈希计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据。
在其中一个实施方式中,形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。
存储器,用于存储缓存数据。
第二计算模块,用于采用哈希运算方法,利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;以及现在哈希计算的计算结果不满足预设条件时,更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,采用哈希运算方法,利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。本发明各实施例中,由矿池向矿机发放计算任务,该计算任务是一个数据块,可以先对作为该计算任务的数据块经过某个哈希算法计算,得到一个伪随机数序列B。本发明各实施例中,预设数据块可以为该伪随机序列B中的元素,该伪随机序列B中包括多个元素。区块链由一个个区块(block)组成,每个区块即区块链中每次写入的数据。在本发明各实施例的一个实施方式中,上述伪随机序列可以作为区块中的全部数据或者其中一部分数据。
判断模块,用于判断哈希计算的计算结果是否满足预设条件;若计算结果满足预设条件,完成工作量证明;
收发模块,用于接收矿池公布的工作量证明参数和计算任务;若计算结果满足预设条件,向矿池上报工作量证明结果,该工作量证明结果包括:第一随机数、第二随机数和采用的工作量证明参数。
在本发明各计算系统的一个实施方式中,第一计算模块具体用于:基于选取的第一随机数进行哈希计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;判断缓存数据占用的空间容量是否达到预设空间容量阈值;若缓存数据占用的空间容量未达到预设空间容量阈值,继续执行基于选取的第一随机数进行哈希计算,并将计算得到的计算结果追加到存储器的缓存数据中,然后执行判断缓存数据占用的空间容量是否达到预设空间容量阈值的操作;第二计算模块,具体用于若缓存数据占用的空间容量达到预设空间容量阈值,利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。
在本发明各计算系统的另一个实施方式中,第一计算模块具体用于:分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行哈希计算,得到填充数字串;以及采用第二预设算法,对随机选取的输入参数与填充数字串进行哈希计算,获得计算结果并存储在存储器中,以形成占用预定空间容量的缓存数据。
在其中一个可选示例中,哈希运算方法包括:第一哈希函数和第二哈希函数。相应地,第一计算模块采用第二预设算法,对输入参数与填充数字串进行计算时,具体用于:对由输入参数与填充数字串构成的字符串,采用第一哈希算法进行计算,得到第一整数;对第一整数按N取模,获得第一哈希函数的输出结果,并将输入参数与第一哈希函数的输出结果作为一个对应关系存储在第一哈希函数查找表中;以及对由输入参数与填充数字串构成的字符串,采用第二哈希算法进行计算,获得第二哈希函数的输出结果,并将输入参数与第二哈希函数的输出结果作为一个对应关系存储在第二哈希函数查找表中;缓存数据包括:第一哈希函数查找表和第二哈希函数查找表;其中,N为大于0的任意整数。
其中,第一哈希函数包括:Gf(a)=G(a,a')=G(a,f-1(N-f(a))),第一哈希函数查找表包括各输入参数a与第一哈希函数的输出结果Gf(a)之间的对应关系;第二哈希函数包括:f(a);第二哈希函数查找表包括各输入参数a与第二哈希函数的输出结果f(a)之间的对应关系;其中,a为输入参数。
相应地,在另一个可选示例中,第二计算模块具体用于:选取一个第二随机数b作为输入参数;针对本次选取的第二随机数b,基于第一哈希函数查找表和第二哈希函数查找表,获取满足预设关系的第二随机数b对应的计算结果b',其中,上述预设关系包括:f(b)+f(b')=N,该N的取值即为生成上述第一哈希函数查找表和第二哈希函数查找表时N的取值,即查找第一哈希函数查找表和第二哈希函数查找表,获取同时满足以下条件的计算结果b':f(b)+f(b')=N,Gf(b)的函数值(即:第一哈希函数的输出结果)为上述预设数据块。判断模块具体用于:判断G(b,b')是否满足预设判定函数B规定的判断条件,以及第二随机数b的哈希计算结果是否满足预设难度要求;若G(b,b')满足预设判定函数B规定的判断条件、且第二随机数b的哈希计算结果满足预设难度要求,则第二随机数b的哈希计算的计算结果满足预设条件。
示例性地,G(b,b')满足预设判定函数B规定的判断条件,例如可以包括:第二随机数b属于预先设定的伪随机序列中的前M个值,其中,M为预设大于0的整数。第二随机数b的哈希计算结果满足预设难度要求,可以包括:采用第三哈希函数对第二随机数b连续进行两次哈希运算得到的哈希计算结果dhbsh(b)满足预设难度要求,例如,哈希计算结果dhash(b)中开头的0的数目满足预设要求。
另外,在本发明工作量证明的计算系统再一个实施例中,工作量证明参数还可以选择性地包括以下任意一项或多项:填充数字串,伪随机序列,哈希计算结果dhash(b)中开头的0的数目应当满足的预设要求。
再参见图5,在本发明工作量证明的计算系统还一个实施例中,工作量证明结果中包括采用的哈希运算方法时,矿池还可以包括:第二确认模块,用于响应于同一时刻接收到两个或以上矿机上报的工作量证明结果、且确认上报两个或以上矿机完成工作量证明,确认两个或以上矿机上报的工作量证明结果中包括较晚公布的哈希运算方法的矿机完成工作量证明。
另外,本发明实施例还提供了一种电子设备,例如矿机,包括:
存储器和处理器,其中,存储器用于存储计算机可读指令,处理器对计算机可读指令的执行使得处理器执行本发明上述任一实施例工作量证明的计算方法的操作。
另外,本发明实施例还提供了一种计算机存储介质,用于存储计算机可读指令,计算机可读指令在设备中运行时,设备中的处理器执行本发明上述任一实施例工作量证明的计算方法的操作。
另外,本发明实施例还提供了一种计算机程序,包括计算机可读指令,当计算机可读指令在设备中运行时,设备中的处理器执行本发明上述任一实施例工作量证明的计算方法的操作。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。