发明内容
本发明实施例所要解决的一个技术问题是:提供一种工作量证明的计算方法和装置、电子设备、程序和介质。
根据本发明实施例的一个方面,提供的一种工作量证明的计算方法,包括:
分别基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;
利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;
判断所述哈希计算的计算结果是否满足预设条件;
若所述计算结果满足预设条件,完成工作量证明;
否则,若所述计算结果不满足预设条件,更换所述第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,开始执行所述利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算的操作。
可选地,在本发明上述各方法实施例中,所述形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。
可选地,在本发明上述各方法实施例中,所述数据块为伪随机序列中的元素,所述伪随机序列包括:区块中的全部数据或者其中一部分数据;或者由区块通过预设处理获得的数据中的全部数据或者其中一部分数据。
可选地,在本发明上述各方法实施例中,所述基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据,包括:
基于选取的第一随机数进行计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;
判断所述缓存数据占用的空间容量是否达到预设空间容量阈值;
若所述缓存数据占用的空间容量未达到预设空间容量阈值,继续执行所述基于选取的第一随机数进行计算,并将计算得到的计算结果追加到所述存储器的缓存数据中,然后执行所述判断所述缓存数据占用的空间容量是否达到预设空间容量阈值的操作;
若所述缓存数据占用的空间容量达到预设空间容量阈值,执行所述利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算的操作。
可选地,在本发明上述各方法实施例中,所述基于选取的第一随机数进行计算,并将计算得到的计算结果分别存储在存储器中,包括:
分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行计算,得到填充数字串;以及采用第二预设算法,对按照预设方式选取的输入参数与所述填充数字串进行计算,获得计算结果并存储在存储器中。
可选地,在本发明上述各方法实施例中,所述采用第二预设算法,对输入参数与所述填充数字串进行计算,包括:
对由输入参数与所述填充数字串构成的字符串,采用第一哈希算法进行计算,得到第一整数;对所述第一整数按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的数目满足预设要求。
可选地,在本发明上述各方法实施例中,若所述计算结果满足预设条件,还包括:
将所述第一随机数和所述第二随机数作为工作量证明结果上报。
根据本发明实施例的另一个方面,提供的一种工作量证明的计算裝置,包括:
第一计算模块,用于分别基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;
存储器,用于存储所述缓存数据;
第二计算模块,用于利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;以及现在所述哈希计算的计算结果不满足预设条件时,更换所述第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;
判断模块,用于判断所述哈希计算的计算结果是否满足预设条件;若所述计算结果满足预设条件,完成工作量证明。
可选地,在本发明上述各装置实施例中,所述形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。
可选地,在本发明上述各装置实施例中,所述数据块为伪随机序列中的元素,所述伪随机序列包括:区块中的全部数据或者其中一部分数据;或者由区块通过预设处理获得的数据中的全部数据或者其中一部分数据。
可选地,在本发明上述各装置实施例中,所述第一计算模块具体用于:
基于选取的第一随机数进行计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;
判断所述缓存数据占用的空间容量是否达到预设空间容量阈值;
若所述缓存数据占用的空间容量未达到预设空间容量阈值,继续执行所述基于选取的第一随机数进行计算,并将计算得到的计算结果追加到所述存储器的缓存数据中,然后执行所述判断所述缓存数据占用的空间容量是否达到预设空间容量阈值的操作;
所述第二计算模块,具体用于若所述缓存数据占用的空间容量达到预设空间容量阈值,利用所述缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。
可选地,在本发明上述各装置实施例中,所述第一计算模块具体用于:
分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行计算,得到填充数字串;以及采用第二预设算法,对随机选取的输入参数与所述填充数字串进行计算,获得计算结果并存储在存储器中,以形成占用预定空间容量的缓存数据。
可选地,在本发明上述各装置实施例中,所述第一计算模块采用第二预设算法,对输入参数与所述填充数字串进行计算时,具体用于:
对由输入参数与所述填充数字串构成的字符串,采用第一哈希算法进行计算,得到第一整数;对所述第一整数按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的数目满足预设要求。
可选地,在本发明上述各装置实施例中,还包括:
发送模块,用于若所述计算结果满足预设条件,将所述第一随机数和所述第二随机数作为工作量证明结果上报。
根据本发明实施例的又一个方面,提供的一种电子设备,包括:
存储器和处理器,其中,所述存储器用于存储计算机可读指令,所述处理器对所述计算机可读指令的执行使得所述处理器执行本发明上述任一实施例所述的工作量证明的计算方法的操作。
根据本发明实施例的再一个方面,提供的一种计算机存储介质,用于存储计算机可读指令,所述计算机可读指令在设备中运行时,所述设备中的处理器执行本发明上述任一实施例所述的工作量证明的计算方法的操作。
根据本发明实施例的再一个方面,提供的一种计算机程序,包括计算机可读指令,当所述计算机可读指令在设备中运行时,所述设备中的处理器执行本发明上述任一实施例所述的工作量证明的计算方法的操作。
基于本发明上述实施例提供的工作量证明的计算方法和装置、电子设备、程序和介质,提供了一种基于大容量存储的工作量证明方案,分别基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;判断哈希计算的计算结果是否满足预设条件;若计算结果满足预设条件,完成工作量证明;否则,若计算结果不满足预设条件,更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,重新利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。本发明实施例提供的基于大容量存储的工作量证明方案,由于缓存数据在多轮工作量证明中保持不变,可以摊平生成它所消耗的大量计算资源,在保持公平性和鲁棒性的优点的同时,极大地减小了电力的消耗,而且可以复用现存的、具有一定量存储空间的计算设备,从而降低了系统的整体拥有成本。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本发明实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
图1为本发明工作量证明的计算方法一个实施例的流程图。本发明各实施例的工作量证明的计算方法可以由挖矿机执行。如图1所示,该实施例工作量证明的计算方法包括:
102,分别基于选取的第一随机数(nonce1)进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据。
本发明各实施例中,第一随机数可以由挖矿机按照预设规则选取或者随机选取。
104,利用上述缓存数据和本次选取的第二随机数(nonce2)对预设数据块进行哈希计算。
本发明各实施例中,第二随机数可以由挖矿机按照预设规则选取或者随机选取。
本发明各实施例中,矿池每次向矿机下发计算任务时,计算任务是一个数据块,可以先对作为该计算任务的数据块经过某个哈希算法计算,得到一个伪随机数序列B。本发明各实施例中,数据块可以为伪随机序列B中的元素,该伪随机序列B中包括多个元素。
区块链由一个个区块(block)组成,每个区块即区块链中每次写入的数据。在本发明各实施例的一个实施方式中,该伪随机序列可以是区块中的全部数据或者其中一部分数据。另外,在本发明各实施例的另一个实施方式中,该伪随机序列也可以是由区块(block)通过预设处理(例如通过特定哈希算法计算)获得的数据中的全部数据或者其中一部分数据。
106,判断哈希计算的计算结果是否满足预设条件。
若哈希计算的计算结果满足预设条件,完成工作量证明。否则,若哈希计算的计算结果不满足预设条件,重新选取第二随机数,即:更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,执行操作104。
基于本发明上述实施例提供的工作量证明的计算方法,提供了一种基于大容量存储的工作量证明方案,分别基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;判断哈希计算的计算结果是否满足预设条件;若计算结果满足预设条件,完成工作量证明;否则,若计算结果不满足预设条件,更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,重新利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。本发明实施例提供的基于大容量存储的工作量证明方案,由于缓存数据在多轮工作量证明中保持不变,可以摊平生成它所消耗的大量计算资源,在保持公平性和鲁棒性的优点的同时,极大地减小了电力的消耗,而且可以复用现存的、具有一定量存储空间的计算设备,从而降低了系统的整体拥有成本。
在本发明各实施例的一个实施方式中,操作102中形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。其中,一轮工作量证明的时间窗口即一个区块生成(例如对应于上述操作102-106以及哈希计算的计算结果满足预设条件、完成工作量证明)和被接受的时间。
在本发明各实施例的一个实施方式中,操作102可以包括:
基于选取的第一随机数进行计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;
判断缓存数据占用的空间容量是否达到预设空间容量阈值C;
若缓存数据占用的空间容量未达到预设空间容量阈值C,继续执行基于选取的第一随机数进行计算,并将计算得到的计算结果追加到存储器的缓存数据中,然后执行判断缓存数据占用的空间容量是否达到预设空间容量阈值的操作;
若缓存数据占用的空间容量达到预设空间容量阈值,执行104的操作。
在本发明各实施例的一个实施方式中,操作102中,基于选取的第一随机数进行一次计算,并将计算得到的计算结果分别存储在存储器中,可以包括:
分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行计算,得到填充数字串(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为输入参数。
相应地,在本发明上述各实施例中,利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算,可以包括:选取一个第二随机数(nonce2)b作为输入参数;针对本次选取的第二随机数b,基于第一哈希函数查找表和第二哈希函数查找表,获取满足预设关系的第二随机数b对应的计算结果b'。其中,所述预设关系包括:f(b)+f(b')=N,此处N的取值与本发明上述各实施例中N的取值相同。本发明各实施例中,矿池每次向矿机下发计算任务时,计算任务是一个数据块,可以先对作为该计算任务的数据块经过某个哈希算法计算,得到一个伪随机数序列B。本发明各实施例中,数据块可以为伪随机序列B中的元素,该伪随机序列B中包括多个元素。区块链由一个个区块(block)组成,每个区块即区块链中每次写入的数据。在本发明各实施例的一个实施方式中,该伪随机序列可以是区块中的全部数据或者其中一部分数据。另外,在本发明各实施例的另一个实施方式中,该伪随机序列也可以是由区块(block)通过预设处理(例如通过特定哈希算法计算)获得的数据中的全部数据或者其中一部分数据。
判断哈希计算的计算结果是否满足预设条件,可以包括:判断G(b,b')是否满足预设判定函数B规定的判断条件,即:B(G(b,b'))=True是否成立,以及第二随机数b的哈希计算结果是否满足预设难度要求;若G(b,b')满足预设判定函数B规定的判断条件、且第二随机数b的哈希计算结果满足预设难度要求,则该第二随机数b的哈希计算的计算结果满足预设条件。
其中,G(b,b')满足预设判定函数B规定的判断条件,可以包括:第二随机数b属于预先设定的伪随机序列中的前M个值,其中,M为预设大于0的整数。否则,G(b,b')不满足预设判定函数B规定的判断条件。第二随机数b的哈希计算结果满足预设难度要求,可以包括:采用第三哈希函数对第二随机数b连续进行两次哈希运算得到的哈希计算结果dhash(b)满足预设难度要求。
其中,哈希计算结果dhash(b)满足预设难度要求,可以是:哈希计算结果dhash(b)中开头的0的数目满足预设要求。基于该实施例,可以通过动态调整对dhash(b)开头的0的数目要求,来调整挖矿难度要求。
基于上述实施例,可以预先通过协商,在众多矿池和矿池之间、以及矿池和矿机之间限定挖矿条件,例如,限定填充数字串(Padding)尾数为100时挖矿机没资格参与挖矿,从而限制一定挖矿时间窗口(例如每半分钟)内,全网有多少比例的挖矿机有资格加入挖矿,将该比例限制得较小时,可以降低挖矿的能量。通过限制伪随机序列的长度,可以限制挖矿机有资格挖矿之后,所付出的能量。
基于本发明实施例,由于在挖矿时间窗口(例如每半分钟)内,需要对缓存数据进行若干次访问,贴近CPU的存储(称为近存储),例如SSD,才能进行很多次的访问,而冷存储(例如云端存储)很难进行多次访问,访问的次数越少,找到满足预设难度要求的解(即找到满足要求的第一随机数和第二随机数)的可能性就越低,从而可以有效保证本发明实施例有利于近存储、而非冷存储。
基于上述实施例,Padding可以为挖矿机基于预先设定的随机种子生成的非常长的序列,通过控制Padding的长度,可以控制以缓存数据填充存储空间所需时间tINIT的长短。挖矿机选取的N的大小不同,第一哈希函数查找表和第二哈希函数查找表的大小也不同,通过挖矿机选取的N的大小,决定了每个挖矿机生成的缓存数据的大小。
图2为本发明工作量证明的计算方法另一个实施例的流程图。如图2所示,该实施例工作量证明的计算方法包括:
202,选取一个第一随机数(nonce1)。
204,采用第一预设算法对选取的第一随机数进行计算,得到填充数字串(Padding)。
206,按照预设方式选取输入参数a,并针对该输入参数a计算第一哈希函数的输出结果Gf(a),并将输入参数a与第一哈希函数的输出结果Gf(a)作为第一哈希函数查找表中的一个对应关系存储在存储器的缓存数据中;以及针对该输入参数a计算第二哈希函数的输出结果f(a),并将输入参数a与第二哈希函数的输出结果f(a)作为第二哈希函数查找表中的一个对应关系存储在存储器的缓存数据中。
其中,第一哈希函数查找表包括多个a与Gf(a)之间的对应关系,第二哈希函数查找表包括多个a与f(a)之间的对应关系。
具体地,针对该输入参数b计算第一哈希函数的输出结果Gf(b)的计算方法如下:
对输入参数b与填充数字串进行拼接,并采用预先设置的第一哈希算法,对拼接得到的字符串进行计算,获得第一整数例如sha256算法对拼接得到的字符串进行处理,得到256bit的整数;对第一整数按N取模,获得第一哈希函数的输出结果Gf(a)。
具体地,针对该输入参数a计算第二哈希函数的输出结果f(a)的计算方法如下:
对输入参数a与填充数字串进行拼接,并采用预先设置的第二哈希算法对拼接得到的字符串进行计算,获得第二哈希函数的输出结果f(a)。
多次执行操作202~206,依次选取不同的第一随机数进行计算,并将各次计算得到的a与Gf(a)之间的对应关系以及a与f(a)之间的对应关系存储在缓存数据中,形成占用预定空间容量的缓存数据。缓存数据占用的空间达到预定空间容量后,执行操作208。
208,选取一个第二随机数(nonce2)。
210,针对选取的第二随机数b作为输入参数,查找第一哈希函数查找表和第二哈希函数查找表,获取满足预设关系的第二随机数b基于第一哈希函数查找表和第二哈希函数查找表对应的计算结果b'。
其中,上述预设关系包括:f(b)+f(b')=N。此处N的取值即本发明上述各实施例生成第一哈希函数查找表和第二哈希函数查找表时N的取值。
212,判断G(b,f-1(N-f(b)))满足预设判定函数B规定的判断条件、以及采用第三哈希函数对第二随机数b连续进行两次哈希运算得到的哈希计算结果dhash(b)是否满足预设难度要求。
若G(b,f-1(N-f(b)))满足预设判定函数B规定的判断条件、且dhash(b)满足预设难度要求,完成工作量证明,执行操作214。否则,只要任一条件不满足或者上述两个条件均不满足,再次执行操作208,重新选取一个第二随机数并执行后续操作210~212。
214,将第一随机数nonce1和第二随机数nonce2作为工作量证明结果上报。
本发明实施例中,预先填充缓存数据、以及某一轮工作量证明中所使用的哈希算法,可以实现这样的效果:需要使用一段相对较长的时间tINIT填充空间容量为C的空间(对应操作102或者202~206)后,才能用较短的时间tCALC完成工作量证明计算(对应操作104或者208~210)。如果tINIT很短的话,那么拥有强大算力的计算装置,就能反复生成N块内容不同的空间容量为C的数据块,冒充自己拥有N*C那么大的空间容量。当tINIT足够长,比一轮工作量证明的时间窗口(例如10分钟)还要长的时候,这种作弊的行为就失效了,只有诚实地预先填充好存储空间(对应操作102或者202~206),才可能用时间为tCALC的计算(对应操作104或者208~210),给出满足要求的第一随机数和第二随机数。
本发明实施例中,预先填充缓存数据的算法,可以实现这样的效果:如果想削减C*P(0<P<1)的存储空间,那么计算时间tCALC至少会增加tINIT*P,也就是说,除了把缺失的空间又算出来补齐之外,没有更节省时间的算法。假设填充了空间容量为C的存储空间后有A的几率能挖到矿(即找到满足要求的第一随机数和第二随机数),那么如果只填充了C*P的存储空间,挖到矿的几率就至少会降到A*C、甚至更低。
本发明实施例中,两个哈希函数G(a,b)和f(c),它们的输入参数a、b、c和输出结果的值域都是[0,N]。用它们构造出新的函数Gf(a)=G(a,a′)=G(a,f-1(N-f(a))),要求a和a’满足f(a')+f(a)=N,也就是说a和a'经过f(c)函数映射之后得到的结果之和为N。经大量研究证明,Gf(a)求逆(即:给定输出结果求输入参数)的过程必须付出相当大的存储空间来构造查找表,否则计算量会有不可接受的上升。
Gf(a)、f(a)的输入参数是a。假设hashA、hashB、hashC、hashE、hashF是三个哈希算法(即:哈希函数),例如sha256函数,用符号$表示字节串的拼接,那么G(a,b)的可以是:hashC(a$hashA(nonce1),b$hashB(nonce1));f(a)的可以是:hashF(a$hashE(nonce1))。
本发明实施例中,构造一个判定函数B,要求挖矿机必须给出a和a',满足B(G(a,a'))=True(即:G(a,a')满足预设判定函数B规定的判断条件)以及f(a')+f(a)=N,且dhash(a)满足难度要求。挖矿机必须实现用一块存储空间存放Gf(a)的查找表和f(a)的查找表,这样挖矿的时候才能在合理的时间内找到解(即找到满足要求的第一随机数和第二随机数)。其中,dhash(a)是求取输入参数a的dhash函数,在虚拟数字币应用,dhash(a)是指连续调用两次哈希算法(例如sha256函数)进行计算,例如:sha256(sha256(a))。
图3为本发明工作量证明的计算装置一个实施例的结构示意图。该实施例的计算装置可用于实现本发明上述各计算方法实施例。如图3所示,该实施例的计算装置包括:
第一计算模块,用于分别基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据。
在其中一个实施方式中,形成占用预定空间容量的缓存数据所需的时间,不小于完成一轮工作量证明的时间窗口。
存储器,用于存储缓存数据。
第二计算模块,用于利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;以及现在哈希计算的计算结果不满足预设条件时,更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。本发明各实施例中的数据块为伪随机序列中的元素,该伪随机序列可以包括:区块中的全部数据或者其中一部分数据;或者由区块通过预设处理获得的数据中的全部数据或者其中一部分数据。
判断模块,用于判断哈希计算的计算结果是否满足预设条件;若计算结果满足预设条件,完成工作量证明。
基于本发明上述实施例提供的工作量证明的计算装置,提供了一种基于大容量存储的工作量证明方案,分别基于选取的第一随机数进行至少一次计算,并将各次计算得到的计算结果分别存储在存储器中,以形成占用预定空间容量的缓存数据;利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算;判断哈希计算的计算结果是否满足预设条件;若计算结果满足预设条件,完成工作量证明;否则,若计算结果不满足预设条件,更换第二随机数的取值,并以更换取值后的第二随机数作为本次选取的第二随机数,重新利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。本发明实施例提供的基于大容量存储的工作量证明方案,由于缓存数据在多轮工作量证明中保持不变,可以摊平生成它所消耗的大量计算资源,在保持公平性和鲁棒性的优点的同时,极大地减小了电力的消耗,而且可以复用现存的、具有一定量存储空间的计算设备,从而降低了系统的整体拥有成本。
在本发明各计算装置的一个实施方式中,第一计算模块具体用于:基于选取的第一随机数进行计算,并将计算得到的计算结果分别存储在存储器中,形成缓存数据;判断缓存数据占用的空间容量是否达到预设空间容量阈值;若缓存数据占用的空间容量未达到预设空间容量阈值,继续执行基于选取的第一随机数进行计算,并将计算得到的计算结果追加到存储器的缓存数据中,然后执行判断缓存数据占用的空间容量是否达到预设空间容量阈值的操作;第二计算模块,具体用于若缓存数据占用的空间容量达到预设空间容量阈值,利用缓存数据和本次选取的第二随机数对预设数据块进行哈希计算。
在本发明各计算装置的另一个实施方式中,第一计算模块具体用于:分别针对每次选取的第一随机数:采用第一预设算法对选取的第一随机数进行计算,得到填充数字串;以及采用第二预设算法,对随机选取的输入参数与填充数字串进行计算,获得计算结果并存储在存储器中,以形成占用预定空间容量的缓存数据。
在其中一个可选示例中,第一计算模块采用第二预设算法,对输入参数与填充数字串进行计算时,具体用于:对由输入参数与填充数字串构成的字符串,采用第一哈希算法进行计算,得到第一整数;对第一整数按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)中开头的0的数目满足预设要求。
图4为本发明工作量证明的计算装置另一个实施例的结构示意图。如图4所示,与图3所示的实施例相比,该实施例的计算装置还包括:发送模块,用于若计算结果满足预设条件,将第一随机数、第二随机数和计算结果作为工作量证明结果上报。
另外,本发明实施例还提供了一种电子设备,例如挖矿机,包括:
存储器和处理器,其中,存储器用于存储计算机可读指令,处理器对计算机可读指令的执行使得处理器执行本发明上述任一实施例工作量证明的计算方法的操作。
另外,本发明实施例还提供了一种计算机存储介质,用于存储计算机可读指令,计算机可读指令在设备中运行时,设备中的处理器执行本发明上述任一实施例工作量证明的计算方法的操作。
另外,本发明实施例还提供了一种计算机程序,包括计算机可读指令,当计算机可读指令在设备中运行时,设备中的处理器执行本发明上述任一实施例工作量证明的计算方法的操作。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
可能以许多方式来实现本发明的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。
本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。