发明内容
本发明提供了一种基于区块链的随机数生成方法及装置,以解决目前基于区块链生成随机的方法随机性不强、随机数容易被预测的问题。
一方面,本发明提供了一种基于区块链的随机数生成方法,包括:
获取所有有效生产者发送的第一随机值,并分别锁定每一个有效生产者的部分区块链合约资产;所述有效生产者为参与随机数生成的用户,并且,每一个有效生产者发送的第一随机值互不相同;
在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值;
如果每一个有效生产者发送的第二随机值与第一随机值相同,则利用所有第二随机值对应的第二原始值,通过区块链合约中的预设算法,计算目标随机数;所述第二随机值是所述第二原始值通过sha256函数计算而来,所述第二原始值由有效生产者发送;
将所述目标随机数写入所述区块链合约中,并且,退还每一个有效生产者被锁定的区块链合约资产。
结合第一方面,在第一方面的一种可实现方式中,获取所有有效生产者发送的第一随机值的步骤之前,包括:
获取所有生产者发送的第一原始值;
通过sha256函数计算每个第一原始值对应的第一随机值;
如果存在至少两个相同的第一随机值,则确定第一个发送所述相同第一随机值的生产者为有效生产者。
结合第一方面,在第一方面的一种可实现方式中,在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值的步骤,包括:
在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二原始值;
通过sha256函数计算每个第二原始值对应的第二随机值;
获取所有有效生产者发送的第二随机值。
结合第一方面,在第一方面的一种可实现方式中,获取所有有效生产者发送的第一随机值的步骤包括:
在第一预设时间内,判断获取到的有效第一随机值的数量是否大于或者等于第一预设最小样本数,所述有效第一随机值由有效生产者发送;
如果否,则判定随机数生成失败。
结合第一方面,在第一方面的一种可实现方式中,在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值的步骤,还包括:
在获取第一随机值之后的第二预设时间内,判断获取到的有效第二随机值的数量是否大于或者等于第二预设最小样本数,所述有效第二随机值由有效生产者发送;
如果否,则判定随机数生成失败。
结合第一方面,在第一方面的一种可实现方式中,在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值的步骤,还包括:
在获取第一随机值之后的第二预设时间内,如果存在发送第一随机值的有效生产者未发送第二随机值的情况,则由区块链合约接管未发送第二随机值的有效生产者被锁定的区块链合约资产,退还发送第二随机值的有效生产者被锁定的区块链合约资产。
结合第一方面,在第一方面的一种可实现方式中,所述预设算法包括sha3算法或者伪随机数生成算法。
第二方面,本发明提供了一种基于区块链的随机数生成装置,包括:
第一数据获取模块,用于获取所有有效生产者发送的第一随机值,并分别锁定每一个有效生产者的部分区块链合约资产;所述有效生产者为参与随机数生成的用户,并且,每一个有效生产者发送的第一随机值互不相同;
第二数据获取模块,用于在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值;
随机数生成模块,用于在每一个有效生产者发送的第二随机值与第一随机值相同时,利用所有第二随机值对应的第二原始值,通过区块链合约中的预设算法,计算目标随机数;所述第二随机值是所述第二原始值通过sha256函数计算而来,所述第二原始值由有效生产者发送;将所述目标随机数写入所述区块链合约中,并且,退还每一个有效生产者被锁定的区块链合约资产。
结合第二方面,在第二方面的一种可实现方式中,所述装置还包括:
第三数据获取模块,用于获取所有生产者发送的第一原始值;
计算模块,用于通过sha256函数计算每个第一原始值对应的第一随机值;
确定模块,用于当存在至少两个相同的第一随机值时,确定第一个发送所述相同第一随机值的生产者为有效生产者。
结合第二方面,在第二方面的一种可实现方式中,所述第二数据获取模块,还用于:在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二原始值;通过sha256函数计算每个第二原始值对应的第二随机值;获取所有有效生产者发送的第二随机值。
结合第二方面,在第二方面的一种可实现方式中,所述第一数据获取模块还用于:在第一预设时间内,判断获取到的有效第一随机值的数量是否大于或者等于第一预设最小样本数,所述有效第一随机值由有效生产者发送;如果否,则判定随机数生成失败。
结合第二方面,在第二方面的一种可实现方式中,所述第二数据获取模块还用于:在获取第一随机值之后的第二预设时间内,判断获取到的有效第二随机值的数量是否大于或者等于第二预设最小样本数,所述有效第二随机值由有效生产者发送;如果否,则判定随机数生成失败。
结合第二方面,在第二方面的一种可实现方式中,所述第二数据获取模块,还用于:在获取第一随机值之后的第二预设时间内,如果存在发送第一随机值的有效生产者未发送第二随机值的情况,则由区块链合约接管未发送第二随机值的有效生产者被锁定的区块链合约资产,退还发送第二随机值的有效生产者被锁定的区块链合约资产。
由以上技术方案可知,本发明提供了一种基于区块链的随机数生成方法及装置,首先获取所有有效生产者发送的第一随机值,并分别锁定每一个有效生产者的部分区块链合约资产;在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值;如果每一个有效生产者发送的第二随机值与第一随机值相同,则利用所有第二随机值对应的第二原始值,通过区块链合约中的预设算法,计算目标随机数;最后将目标随机数写入所述区块链合约中,并且,退还每一个有效生产者被锁定的区块链合约资产。本发明中,随机数的生成需要众多生产者共同参与,保证随机数生成的随机性和透明性;另外,基于区块链合约的内容,对生产者的资产进行控制,避免生产者随时退出,保证随机数生成的真实性。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合附图,对本发明实施例中的技术方案进行清楚、完整地描述。
图1为本发明实施例提供的一种基于区块链的随机数生成方法的流程图。如图1所示,本发明实施例提供的基于区块链的随机数生成方法包括:
步骤S101,获取所有有效生产者发送的第一随机值,并分别锁定每一个有效生产者的部分区块链合约资产;所述有效生产者为参与随机数生成的用户,并且,每一个有效生产者发送的第一随机值互不相同。
第一随机值是由第一原始值通过sha256函数计算而来,通常生产者自己随机生成一个原始值s,然后将sha256(s)当作随机值发送出来。
在本实施例中,并不是所有的生产者都是有效生产者,对于发送同一个sha256(s)的生产者,只选取接收到的第一个sha256(s)对应的生产者为有效生产者,其余生产者发送的sha256(s)不再接受,这些生产者也不是有效生产者。
另外,本实施例中,随机数的生成方法基于区块链来实现,由区块链合约监管有效生产者的一部分区块链合约资产,对有效生产者施加成本压力,保证有效生产者不会随时退出,也限定了其他人不会大规模的提交大批量的随机值,进而保证有效生产者的参与动力和随机数生成的真实性。具体锁定区块链合约资产的价值根据区块链合约的价值而确定,一般情况下,有效生产者被锁定的区块链合约资产不低于0.5以太坊。
步骤S102,在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值。
本实施例中,在第二预设时间内获取到的随机值才是本发明中生成随机数所需要的。这里的有效生产者是步骤S101中发送了第一随机值的有效生产者。
步骤S103,如果每一个有效生产者发送的第二随机值与第一随机值相同,则利用所有第二随机值对应的第二原始值,通过区块链合约中的预设算法,计算目标随机数;所述第二随机值是所述第二原始值通过sha256函数计算而来,所述第二原始值由有效生产者发送。
本实施例中,对于同一个有效生产者来说,需要两次发送随机值进行验证,如果有效生产者P第一次发送的第一随机值为sha256(s),第二次发送的第二随机值也为sha256(s),那么说明验证成功,有效生产者P第二次生成的第二原始值s是有效的。对于所有验证成功的有效生产者P1、P2、P3等,其各自生成的第二原始值s1、s2、s3等是有效的,可以根据s1、s2、s3等计算目标随机数。
本实施例中的预设算法可以是sha3算法或者伪随机数生成算法等,并且,预设算法由区块链合约公示,值得说明的是,所有能够利用一些现有的值生成随机数的方法都可以作为本实施例中的预设算法使用,本实施例中不做具体要求。
另外,本实施例中,还要将所有有效的第二原始值全部记录到seed列表中,当区块链合约需要对生成的目标随机数进行审计时,可以方便快速地调用seed列表获取所有的第二原始值进行查看,使整个目标随机数生成的过程更加透明、公平和可信。
步骤S104,将所述目标随机数写入所述区块链合约中,并且,退还每一个有效生产者被锁定的区块链合约资产。
本实施例中,在成功生成目标随机数之后,还需要将该目标随机数通知给所有参数其生成的有效生产者。写入到区块链合约中的目标随机数可以被其他区块链合约调用,并用于很多业务场景,比如游戏生成、抽奖等。
再有,在获取第一随机值之后的第二预设时间内,如果存在发送第一随机值的有效生产者未发送第二随机值的情况,则由区块链合约接管未发送第二随机值的有效生产者被锁定的区块链合约资产,退还发送第二随机值的有效生产者被锁定的区块链合约资产。被锁定的区块链合约资产由区块链合约监管,是为了对有效生产者施加成本压力,保证有效生产者不会随时退出,但是对于在第二预设时间内没有发送第二随机值的有效生产者,区块链合约会认为其自动退出随机数的生成,为了起到警示作用,区块链合约不会将被锁定的区块链合约资产退还给未发送第二随机值的有效生产者。
由以上方案可知,本发明实施例提供的基于区块链的随机数生成方法,产生随机数时,需要众多生产者共同参与,能够保证随机数生成的随机性和透明性;另外,基于区块链合约的内容,对生产者的资产进行控制,避免生产者随时退出,保证随机数生成的真实性。
在一些实施例中,首先获取的是所有参与随机数生成生产者,再从所有生产者中选取有效生产者。图2为本发明实施例提供的选取有效生产者的流程图,如图2所示,在获取所有有效生产者发送的第一随机值的步骤之前,具体包括如下步骤:
步骤S201,获取所有生产者发送的第一原始值。第一原始值是生产者自己随机生成的值。
步骤S202,通过sha256函数计算每个第一原始值对应的第一随机值。
步骤S203,如果存在至少两个相同的第一随机值,则确定第一个发送所述相同第一随机值的生产者为有效生产者;此后接收到的相同第一随机值不作为有效的随机值采用,同样的,此后接收到的产生相同第一随机值的生产者也不是有效生产者,不参与第二次随机值的获取过程。
图3为本发明实施例提供的获取第一随机值的流程图。如图3所示,在一些实施例中,获取所有有效生产者发送的第一随机值的步骤包括:
步骤S301,在第一预设时间内,判断获取到的有效第一随机值的数量是否大于或者等于第一预设最小样本数,所述有效第一随机值由有效生产者发送。
在本发明所有的实施例中,获取第一随机值和第二随机值的过程分别需要在各自的预设时间内完成,并且各自设有预设最小样本数,如果在预设时间内获取到了足够数量并且有效的第一随机值,则可以执行正常的随机数生成步骤。具体的,第一预设时间根据区块链合约确定,一般大于或者等于三个出块周期。
步骤S302,如果获取到的有效第一随机值的数量小于第一预设最小样本数,说明有效的第一随机值获取失败,则判定随机数生成失败。
图4为本发明实施例提供的一种获取第二随机值的流程图。如图4所示,在一些实施例中,在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值的步骤,具体包括:
步骤S401,在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二原始值。具体的,第二预设时间也根据区块链合约确定,可以为两个出块周期等等。
步骤S402,通过sha256函数计算每个第二原始值对应的第二随机值。
步骤S403,获取所有有效生产者发送的第二随机值。
图5为本发明实施例提供的另一种获取第二随机值的流程图。如图5所示,在一些实施例中,在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值的步骤,还包括:
步骤S501,在获取第一随机值之后的第二预设时间内,判断获取到的有效第二随机值的数量是否大于或者等于第二预设最小样本数,所述有效第二随机值由有效生产者发送。如果在预设时间内获取到了足够数量并且有效的第二随机值,则可以执行正常的随机数生成步骤。
步骤S502,如果获取到的有效第二随机值的数量小于第二预设最小样本数,说明有效的第二随机值获取失败,则判定随机数生成失败。
由以上方案可知,本发明实施例提供的基于区块链的随机数生成方法,产生随机数时,利用区块链本身的特点,实现了众多生产者共同参与的目的,能够保证随机数生成的随机性和透明性;另外,基于区块链合约的内容,对生产者的资产进行控制,避免生产者随时退出,保证随机数生成的真实性。
图6为本发明实施例提供的一种基于区块链的随机数生成装置的结构框图。如图6所示,本发明实施例提供的基于区块链的随机数生成装置包括:第一数据获取模块61,用于获取所有有效生产者发送的第一随机值,并分别锁定每一个有效生产者的部分区块链合约资产;所述有效生产者为参与随机数生成的用户,并且,每一个有效生产者发送的第一随机值互不相同;第二数据获取模块62,用于在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值;随机数生成模块63,用于在每一个有效生产者发送的第二随机值与第一随机值相同时,利用所有第二随机值对应的第二原始值,通过区块链合约中的预设算法,计算目标随机数;所述第二随机值是所述第二原始值通过sha256函数计算而来,所述第二原始值由有效生产者发送;将所述目标随机数写入所述区块链合约中,并且,退还每一个有效生产者被锁定的区块链合约资产。
所述装置还包括:第三数据获取模块,用于获取所有生产者发送的第一原始值;计算模块,用于通过sha256函数计算每个第一原始值对应的第一随机值;确定模块,用于当存在至少两个相同的第一随机值时,确定第一个发送所述相同第一随机值的生产者为有效生产者。
所述第二数据获取模块,还用于:在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二原始值;通过sha256函数计算每个第二原始值对应的第二随机值;获取所有有效生产者发送的第二随机值。
所述第一数据获取模块还用于:在第一预设时间内,判断获取到的有效第一随机值的数量是否大于或者等于第一预设最小样本数,所述有效第一随机值由有效生产者发送;如果否,则判定随机数生成失败。
所述第二数据获取模块还用于:在获取第一随机值之后的第二预设时间内,判断获取到的有效第二随机值的数量是否大于或者等于第二预设最小样本数,所述有效第二随机值由有效生产者发送;如果否,则判定随机数生成失败。
所述第二数据获取模块,还用于:在获取第一随机值之后的第二预设时间内,如果存在发送第一随机值的有效生产者未发送第二随机值的情况,则由区块链合约接管未发送第二随机值的有效生产者被锁定的区块链合约资产,退还发送第二随机值的有效生产者被锁定的区块链合约资产。
由以上方案可知,本发明提供了一种基于区块链的随机数生成方法及装置,首先获取所有有效生产者发送的第一随机值,并分别锁定每一个有效生产者的部分区块链合约资产;在获取第一随机值之后的第二预设时间内,再一次获取所有有效生产者发送的第二随机值;如果每一个有效生产者发送的第二随机值与第一随机值相同,则利用所有第二随机值对应的第二原始值,通过区块链合约中的预设算法,计算目标随机数;最后将目标随机数写入所述区块链合约中,并且,退还每一个有效生产者被锁定的区块链合约资产。本发明中,随机数的生成需要众多生产者共同参与,保证随机数生成的随机性和透明性;另外,基于区块链合约的内容,对生产者的资产进行控制,避免生产者随时退出,保证随机数生成的真实性。
本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。